<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
 
 <title>Die Welt ist meine Vorstellung</title>
 <link href="http://kimi.im/" rel="self"/>
 <link href="http://kimi.im"/>
 <updated>2025-03-31T04:50:14+00:00</updated>
 <id>http://kimi.im</id>
 <author>
   <name>Kimi MA</name>
   <email>hello@kimi.im</email>
 </author>

 
 <entry>
   <title>ultimatum</title>
   <link href="http://kimi.im/2025-03-31-ultimatum"/>
   <updated>2025-03-31T00:00:00+00:00</updated>
   <id>http://kimi.im/ultimatum</id>
   <content type="html">&lt;p&gt;
以下，是在学习公司的谈判技巧在线课程的时候读到的。我们在和别人进行谈判的时候，不能把话说的太绝了。要留有余地，提供一些备选项。不然，会让人觉得是给他最后通牒。
&lt;/p&gt;

&lt;p&gt;
When given alternatives, the other party won&amp;rsquo;t feel stuck with an
&lt;b&gt;ultimatum&lt;/b&gt;.
&lt;/p&gt;

&lt;p&gt;
&lt;b&gt;ultimatum&lt;/b&gt; 最后通牒，最后条件; 最后结论。比如&amp;ldquo;issue an &lt;b&gt;ultimatum&lt;/b&gt;&amp;rdquo;发出最后通牒。
&lt;/p&gt;

&lt;p&gt;
这个单词来自拉丁语&amp;ldquo;&lt;i&gt;ultimatus&lt;/i&gt;&amp;rdquo; 即最后的可能性、最终。
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;She was given an &lt;b&gt;ultimatum&lt;/b&gt; - work harder or lose her job.&amp;rdquo;
(&lt;a href=&quot;#citeproc_bib_item_1&quot;&gt;&lt;i&gt;Merriam-Webster Dictionary&lt;/i&gt; 2024&lt;/a&gt;) 她被下最后通牒，要么努力工作，要么丢掉工作。
&lt;/p&gt;

&lt;p&gt;
&lt;span class=&quot;underline&quot;&gt;References&lt;/span&gt;
&lt;/p&gt;

&lt;style&gt;.csl-entry{text-indent: -1.5em; margin-left: 1.5em;}&lt;/style&gt;&lt;div class=&quot;csl-bib-body&quot;&gt;
  &lt;div class=&quot;csl-entry&quot;&gt;&lt;a id=&quot;citeproc_bib_item_1&quot;&gt;&lt;/a&gt;&lt;i&gt;Merriam-Webster Dictionary&lt;/i&gt;. 2024. Merriam-Webster Incorporated.&lt;/div&gt;
&lt;/div&gt;
</content>
 </entry>
 
 <entry>
   <title>单词本：volition</title>
   <link href="http://kimi.im/2024-08-16-volition"/>
   <updated>2024-08-16T00:00:00+00:00</updated>
   <id>http://kimi.im/volition</id>
   <content type="html">&lt;p&gt;
昨天看我们公司的一个内部软件模块的手册，说其他人可以根据自己的意愿连接到自己的解决方案中实用：
&lt;/p&gt;

&lt;p&gt;
the user can connect the tool according to their own &lt;b&gt;volition&lt;/b&gt;.
&lt;/p&gt;

&lt;p&gt;
他们用到了 volition。名词行使意志。搭配短语 to do sth of/by/on one&amp;rsquo;s
own &lt;b&gt;volition&lt;/b&gt;. 
&lt;/p&gt;

&lt;p&gt;
they choose to leave early of their own &lt;b&gt;volition&lt;/b&gt;. (&lt;a href=&quot;#citeproc_bib_item_1&quot;&gt;&lt;i&gt;Apple Dictionary&lt;/i&gt; 2024&lt;/a&gt;)
&lt;/p&gt;

&lt;p&gt;
这个词来自拉丁语 volitio 的主格 volitionem 意愿。更早的词根 volo 我愿，
velle 的第一人称动词。velle 就是 will 的前身吧。
&lt;/p&gt;

&lt;p&gt;
德语里of one&amp;rsquo;s volition表达为 aus eigenem Willen，瑞典语则是 av egen
fri vilja。 显然，德语和瑞典语更接近古老的拉丁语。而且瑞典语北欧风格，比德语更简化一些。
&lt;/p&gt;

&lt;p&gt;
比如这篇心理学论文(&lt;a href=&quot;#citeproc_bib_item_2&quot;&gt;Jia et al. 2024–8AD&lt;/a&gt;)研究了工作环境中数字化对员工工作意愿的影响。用到 volition 这个词：
&lt;/p&gt;

&lt;p&gt;
This study investigated the impact of psychological needs on
employees&amp;rsquo; enjoyment and &lt;b&gt;volition&lt;/b&gt; at work, leading to employees&amp;rsquo;
intentions in digital workplace transformation.
&lt;/p&gt;

&lt;p&gt;
&lt;b&gt;References&lt;/b&gt;
&lt;/p&gt;

&lt;style&gt;.csl-entry{text-indent: -1.5em; margin-left: 1.5em;}&lt;/style&gt;&lt;div class=&quot;csl-bib-body&quot;&gt;
  &lt;div class=&quot;csl-entry&quot;&gt;&lt;a id=&quot;citeproc_bib_item_1&quot;&gt;&lt;/a&gt;&lt;i&gt;Apple Dictionary&lt;/i&gt;. 2024. Apple.&lt;/div&gt;
  &lt;div class=&quot;csl-entry&quot;&gt;&lt;a id=&quot;citeproc_bib_item_2&quot;&gt;&lt;/a&gt;Jia, Yuan, Jianguo Du, Fakhar Shahzad, and Imran Khan. 2024–8AD. “Unleashing the Potential of Digitalization: The Nexus of Psychological Needs, Enjoyment, Volition, Engagement and Training and Development for Local Government Workplace Transformation.” &lt;i&gt;Current Psychology&lt;/i&gt;. doi:&lt;a href=&quot;https://doi.org/10.1007/s12144-024-06374-x&quot;&gt;10.1007/s12144-024-06374-x&lt;/a&gt;.&lt;/div&gt;
&lt;/div&gt;
</content>
 </entry>
 
 <entry>
   <title>单词本：illicit</title>
   <link href="http://kimi.im/2024-08-15-illicitly"/>
   <updated>2024-08-15T00:00:00+00:00</updated>
   <id>http://kimi.im/illicitly</id>
   <content type="html">&lt;p&gt;
最近看了不少信息安全相关的资料。因为信息安全涉及攻击、恶意、违法词汇，所以也遇到了很多描述负面的词。
&lt;/p&gt;

&lt;p&gt;
比如 illicit 这个词出现在威胁分析中(&lt;a href=&quot;#citeproc_bib_item_1&quot;&gt;Bodeau, McCollum, and Fox 2018&lt;/a&gt;)：
&lt;/p&gt;

&lt;p&gt;
In the FFIEC IS Handbook, threats come from agents (referred to in
other references as threat actors or adversaries) who are internal or
external. They have different capabilities and motivations, which
require the use of different risk mitigation and control
techniques. Note that this characterization does not consider threats
from nation-state sources, which might seek competitive intelligence
but might also try to cause harm as a national security matter,
whether &lt;b&gt;illicitly&lt;/b&gt; or openly in coordination with other international
conflict.
&lt;/p&gt;

&lt;p&gt;
也出现在安全相关的论文中(&lt;a href=&quot;#citeproc_bib_item_2&quot;&gt;De Hoz Diego, Madi, and Konstantinou 2024&lt;/a&gt;)：
&lt;/p&gt;

&lt;p&gt;
We also assume that some compromised devices in the IoT deployment
might be trying to perform lateral movement to weaponize other devices
or trying to access exposed services &lt;b&gt;illicitly&lt;/b&gt;.
&lt;/p&gt;

&lt;p&gt;
这个词是由表示否定的in-/il-加上 licit 组成的。 licit 在拉丁语里是
licitus 也就是合法的 lawful 之意。那么 illicit 就是非法的意思。
&lt;/p&gt;

&lt;p&gt;
比如the &lt;b&gt;illicit&lt;/b&gt; sale of drugs毒品的非法贩卖，an &lt;b&gt;illicit&lt;/b&gt; relationship
不正当的关系。
&lt;/p&gt;

&lt;p&gt;
其实 license 也是源自 licitus 。有 license就是有一个合法的证件么。
license 的意思就是证件、驾照、证照、执照。
&lt;/p&gt;



&lt;p&gt;
&lt;b&gt;References&lt;/b&gt;
&lt;/p&gt;

&lt;style&gt;.csl-entry{text-indent: -1.5em; margin-left: 1.5em;}&lt;/style&gt;&lt;div class=&quot;csl-bib-body&quot;&gt;
  &lt;div class=&quot;csl-entry&quot;&gt;&lt;a id=&quot;citeproc_bib_item_1&quot;&gt;&lt;/a&gt;Bodeau, Deborah J., Catherine D. McCollum, and David B. Fox. 2018. “Cyber Threat Modeling: Survey, Assessment, and Representative Framework.” Department of Homeland Security.&lt;/div&gt;
  &lt;div class=&quot;csl-entry&quot;&gt;&lt;a id=&quot;citeproc_bib_item_2&quot;&gt;&lt;/a&gt;Hoz Diego, Jorge David de, Taous Madi, and Charalambos Konstantinou. 2024. “CMXsafe: A Proxy Layer for Securing Internet-of-Things Communications.” &lt;i&gt;IEEE Transactions on Information Forensics and Security&lt;/i&gt; 19: 5767–82. doi:&lt;a href=&quot;https://doi.org/10.1109/TIFS.2024.3404258&quot;&gt;10.1109/TIFS.2024.3404258&lt;/a&gt;.&lt;/div&gt;
&lt;/div&gt;
</content>
 </entry>
 
 <entry>
   <title>单词本：cocky</title>
   <link href="http://kimi.im/2024-08-15-cocky"/>
   <updated>2024-08-15T00:00:00+00:00</updated>
   <id>http://kimi.im/cocky</id>
   <content type="html">&lt;p&gt;
在 Hellriegel 的组织行为学中(&lt;a href=&quot;#citeproc_bib_item_2&quot;&gt;&lt;i&gt;Organizational Behavior&lt;/i&gt; 2005&lt;/a&gt;)列举了一个案例，说美国安然公司（ Enron ）营造一种只顾追求利益的企业文化，最终导致腐败破产。
&lt;/p&gt;

&lt;p&gt;
Enron recruited a band of &lt;b&gt;cocky&lt;/b&gt;, inexperienced MBAs and left them
alone to do whatever it took to structure a deal, regardless of the
consequences.
&lt;/p&gt;

&lt;p&gt;
他们雇佣一些没经验的 MBA 应届生，这些人很 cocky，不择手段达成交易。
&lt;/p&gt;

&lt;p&gt;
显然，cocky 是以物拟人的用法。cock 公鸡、雄鸡，自然是昂首阔步趾高气扬的骄傲样子。所以 cocky 的意思是狂妄自负、趾高气扬。
&lt;/p&gt;

&lt;p&gt;
比如 He remained &lt;b&gt;cocky&lt;/b&gt; and arrogant despite it being clear he was to
blame. (&lt;a href=&quot;#citeproc_bib_item_1&quot;&gt;&lt;i&gt;Cambridge Dictionary&lt;/i&gt; 2024&lt;/a&gt;)
&lt;/p&gt;

&lt;p&gt;
&lt;b&gt;References&lt;/b&gt;
&lt;/p&gt;

&lt;style&gt;.csl-entry{text-indent: -1.5em; margin-left: 1.5em;}&lt;/style&gt;&lt;div class=&quot;csl-bib-body&quot;&gt;
  &lt;div class=&quot;csl-entry&quot;&gt;&lt;a id=&quot;citeproc_bib_item_1&quot;&gt;&lt;/a&gt;&lt;i&gt;Cambridge Dictionary&lt;/i&gt;. 2024. Cambridge University Press &amp;#38; Assessment.&lt;/div&gt;
  &lt;div class=&quot;csl-entry&quot;&gt;&lt;a id=&quot;citeproc_bib_item_2&quot;&gt;&lt;/a&gt;&lt;i&gt;Organizational Behavior&lt;/i&gt;. 2005. South-Western College Pub.&lt;/div&gt;
&lt;/div&gt;
</content>
 </entry>
 
 <entry>
   <title>单词本：chew out</title>
   <link href="http://kimi.im/2024-08-15-chew-out"/>
   <updated>2024-08-15T00:00:00+00:00</updated>
   <id>http://kimi.im/chew-out</id>
   <content type="html">&lt;p&gt;
Hellriegel (&lt;a href=&quot;#citeproc_bib_item_1&quot;&gt;&lt;i&gt;Organizational Behavior&lt;/i&gt; 2005&lt;/a&gt;) 介绍可口可乐公司瓶装部经理 Rudy
Gragnani 谦逊方面的个人魅力时，举了个例子。
&lt;/p&gt;

&lt;p&gt;
A customer, an expressive New Yorker, and I were loudly discussing a
problem when Rudy walked by. Later, he &lt;b&gt;chewed me out&lt;/b&gt; for yelling at my
customer. But at the next management meeting, the New Yorker thanked
me. Rudy understood that what he saw as an argument was just New York
style. He apologized to me for misreading the situation.
&lt;/p&gt;

&lt;p&gt;
这里用的短语chew out看起来好像是咬出来，实际意思是职责某人。因为这个案例是说某个员工跟纽约客户对话的时候嗓门很大。被他领导揪出来训了一通，后来发现原来纽约人就是这样大声说话看起来很没礼貌的样子。所以这个领导
Rudy Gragnani 后来得知后，找了这个员工道歉了。
&lt;/p&gt;

&lt;p&gt;
再比如：If you don&amp;rsquo;t finish your project on time, the boss will &lt;b&gt;chew
you out&lt;/b&gt;.
&lt;/p&gt;

&lt;p&gt;
据说这个词是从美军出来的。二战时候美军领导严厉训斥下属的时候，样子好像用言语啃咬下属。所以由此得来严厉训斥这个意思。
&lt;/p&gt;

&lt;p&gt;
&lt;b&gt;References&lt;/b&gt;
&lt;/p&gt;

&lt;style&gt;.csl-entry{text-indent: -1.5em; margin-left: 1.5em;}&lt;/style&gt;&lt;div class=&quot;csl-bib-body&quot;&gt;
  &lt;div class=&quot;csl-entry&quot;&gt;&lt;a id=&quot;citeproc_bib_item_1&quot;&gt;&lt;/a&gt;&lt;i&gt;Organizational Behavior&lt;/i&gt;. 2005. South-Western College Pub.&lt;/div&gt;
&lt;/div&gt;
</content>
 </entry>
 
 <entry>
   <title>单词本：thwart</title>
   <link href="http://kimi.im/2024-08-10-thwart"/>
   <updated>2024-08-10T00:00:00+00:00</updated>
   <id>http://kimi.im/thwart</id>
   <content type="html">&lt;p&gt;
信息安全技术有五个重要的原则，分别是
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;defense in depth&lt;/li&gt;
&lt;li&gt;least privilege&lt;/li&gt;
&lt;li&gt;separation of duties&lt;/li&gt;
&lt;li&gt;secure in design&lt;/li&gt;
&lt;li&gt;economy of mechanism&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
在产品安全开发生命周期标准中(&lt;a href=&quot;#citeproc_bib_item_1&quot;&gt;International Electrotechnical Commission(IEC) 2009&lt;/a&gt;)简单介绍了 defense in
depth:
&lt;/p&gt;

&lt;p&gt;
Defense in depth provides one or more layers of security to &lt;b&gt;thwart&lt;/b&gt;
security threats.
&lt;/p&gt;

&lt;p&gt;
层层防护是指提供多层的安全保护阻挠安全威胁。
&lt;/p&gt;

&lt;p&gt;
这里用了 thwart 阻挠。比如he was thwarted in love.他恋爱受挫。
&lt;/p&gt;

&lt;p&gt;
在该标准分册的后面(&lt;a href=&quot;#citeproc_bib_item_1&quot;&gt;International Electrotechnical Commission(IEC) 2009&lt;/a&gt;)还用到了这个词：
&lt;/p&gt;

&lt;p&gt;
Threat mitigation testing is creating and executing plans for
attempting to &lt;b&gt;thwart&lt;/b&gt; each mitigation.
&lt;/p&gt;

&lt;p&gt;
风险规避测试就是构建一个测试执行计划尝试阻挠这些规避安全的措施。通过攻击者视角审查防范措施是不是实施到位。
&lt;/p&gt;

&lt;p&gt;
A Euro-Zone Inflation &lt;b&gt;Hiccup&lt;/b&gt; Is Unlikely to Thwart ECB Rate
Cut. (&lt;a href=&quot;#citeproc_bib_item_2&quot;&gt;Stirling and Rinneby 2024&lt;/a&gt;) 这则新闻是说欧洲德法西三国通胀指数略微上涨的小问题，不会导致 ECB 降息。
&lt;/p&gt;

&lt;p&gt;
thwart 的本意据说是跟 transverse 里的 verse 相似，有穿过的意思。也可能跟拉丁语 torquere 转动，twist 相关。有点乃意会，大概就是这样子。
&lt;/p&gt;

&lt;p&gt;
&lt;b&gt;References&lt;/b&gt;
&lt;/p&gt;

&lt;style&gt;.csl-entry{text-indent: -1.5em; margin-left: 1.5em;}&lt;/style&gt;&lt;div class=&quot;csl-bib-body&quot;&gt;
  &lt;div class=&quot;csl-entry&quot;&gt;&lt;a id=&quot;citeproc_bib_item_1&quot;&gt;&lt;/a&gt;International Electrotechnical Commission(IEC). 2009. “Industrial Communication Networks – Network and System Security – Part 4-1: Secure Product Development Lifecycle Requirements.”&lt;/div&gt;
  &lt;div class=&quot;csl-entry&quot;&gt;&lt;a id=&quot;citeproc_bib_item_2&quot;&gt;&lt;/a&gt;Stirling, Craig, and Joel Rinneby. 2024. “A Euro-Zone Inflation Hiccup Is Unlikely to Thwart ECB Rate Cut.” &lt;i&gt;Bloomberg News&lt;/i&gt;.&lt;/div&gt;
&lt;/div&gt;
</content>
 </entry>
 
 <entry>
   <title>单词本：pseudonym</title>
   <link href="http://kimi.im/2024-08-10-pseudonym"/>
   <updated>2024-08-10T00:00:00+00:00</updated>
   <id>http://kimi.im/pseudonym</id>
   <content type="html">&lt;p&gt;
最近涉猎了不少信息安全相关的文章，在隐私计算方面，Wang Zhigao 等人
(&lt;a href=&quot;#citeproc_bib_item_1&quot;&gt;Wang et al. 2024&lt;/a&gt;) 提出了一种利用区块链进行设备鉴权的匿名算法：
&lt;/p&gt;

&lt;p&gt;
We design an anonymous authentication algorithm that achieves an
efficient trade-off between the computational overhead and storage
overhead of smart devices.  In particular, the smart device can update
&lt;b&gt;pseudonyms&lt;/b&gt; by itself without sending &lt;b&gt;pseudonym&lt;/b&gt; update requests to the
domain authorization center and pre-storing massive &lt;b&gt;pseudonyms&lt;/b&gt;.
&lt;/p&gt;

&lt;p&gt;
&lt;b&gt;Pseudonym&lt;/b&gt; certificate-based authentication can guarantee device
anonymity and is lightweight, so it is often used to authenticate
devices with limited computing power.
&lt;/p&gt;

&lt;p&gt;
他们用了假名证书来进行互相真实性验证。
&lt;/p&gt;

&lt;p&gt;
这里，他们用了 pseudonym 假名、笔名。这种 ps 开头的词，很多都是从希腊语来的。比如 psychology 。pseudo源自希腊语 pseudes 假的，onym 则来自
onuma 也就是 name，合起来就是假的名字。
&lt;/p&gt;

&lt;p&gt;
pseudonymous 即形容词：用假名的。比如 his books are pseudonymous. the
pseudonymous author of this mystery.
&lt;/p&gt;

&lt;p&gt;
那么 homonym 的意思呢？这个词是指那些发音一样、拼写一样但是意思不一样的词语。我们学习 &lt;a href=&quot;2024-07-03-diversity.html&quot;&gt;diversity&lt;/a&gt; 的时候，遇到过 homosexual。
&lt;/p&gt;

&lt;p&gt;
前面看到的 anonymous 中，因为 an 是没有的意思，所以 anonymous 就是匿名的意思了。
&lt;/p&gt;

&lt;p&gt;
&lt;b&gt;References&lt;/b&gt;
&lt;/p&gt;

&lt;style&gt;.csl-entry{text-indent: -1.5em; margin-left: 1.5em;}&lt;/style&gt;&lt;div class=&quot;csl-bib-body&quot;&gt;
  &lt;div class=&quot;csl-entry&quot;&gt;&lt;a id=&quot;citeproc_bib_item_1&quot;&gt;&lt;/a&gt;Wang, Fengqun, Jie Cui, Qingyang Zhang, Debiao He, and Hong Zhong. 2024. “Blockchain-Based Secure Cross-Domain Data Sharing for Edge-Assisted Industrial Internet of Things.” &lt;i&gt;IEEE Transactions on Information Forensics and Security&lt;/i&gt; 19: 3892–3905. doi:&lt;a href=&quot;https://doi.org/10.1109/TIFS.2024.3372806&quot;&gt;10.1109/TIFS.2024.3372806&lt;/a&gt;.&lt;/div&gt;
&lt;/div&gt;
</content>
 </entry>
 
 <entry>
   <title>单词本：propensity</title>
   <link href="http://kimi.im/2024-08-10-propensity"/>
   <updated>2024-08-10T00:00:00+00:00</updated>
   <id>http://kimi.im/propensity</id>
   <content type="html">&lt;p&gt;
这几天一直在陆陆续续看信息安全标准，在安全产品开发过程要求这个标准分册
(&lt;a href=&quot;#citeproc_bib_item_2&quot;&gt;International Electrotechnical Commission(IEC) 2009&lt;/a&gt;) 介绍什么是 Banned function:
&lt;/p&gt;

&lt;p&gt;
Banned function: software method that is no longer recommended to be
used in software because more secure versions exist with less
&lt;b&gt;propensity&lt;/b&gt; for misuse
&lt;/p&gt;

&lt;p&gt;
这里 propensity 是习性、本性、倾向的名词意思。比如 a &lt;b&gt;propensity&lt;/b&gt; for
violence 暴力倾向 (&lt;a href=&quot;#citeproc_bib_item_1&quot;&gt;&lt;i&gt;Apple Dictionary&lt;/i&gt; 2024&lt;/a&gt;)。
&lt;/p&gt;

&lt;p&gt;
从词源上看，这个词有 pro 向前、向下以及 pendere悬挂组成。这就好像是天平的两端，如果，你就是喜欢某一端，就会在上面悬挂重物。也就是一种倾向性。
&lt;/p&gt;

&lt;p&gt;
还有很多源自 pendere 的单词，比如
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;append 附加（额外挂上去）&lt;/li&gt;
&lt;li&gt;depend 依靠（挂在下面）&lt;/li&gt;
&lt;li&gt;suspend 悬挂、挂起、暂停（从下挂上去）&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
&lt;b&gt;References&lt;/b&gt;
&lt;/p&gt;

&lt;style&gt;.csl-entry{text-indent: -1.5em; margin-left: 1.5em;}&lt;/style&gt;&lt;div class=&quot;csl-bib-body&quot;&gt;
  &lt;div class=&quot;csl-entry&quot;&gt;&lt;a id=&quot;citeproc_bib_item_1&quot;&gt;&lt;/a&gt;&lt;i&gt;Apple Dictionary&lt;/i&gt;. 2024. Apple.&lt;/div&gt;
  &lt;div class=&quot;csl-entry&quot;&gt;&lt;a id=&quot;citeproc_bib_item_2&quot;&gt;&lt;/a&gt;International Electrotechnical Commission(IEC). 2009. “Industrial Communication Networks – Network and System Security – Part 4-1: Secure Product Development Lifecycle Requirements.”&lt;/div&gt;
&lt;/div&gt;
</content>
 </entry>
 
 <entry>
   <title>单词本：bagel</title>
   <link href="http://kimi.im/2024-08-10-bagel"/>
   <updated>2024-08-10T00:00:00+00:00</updated>
   <id>http://kimi.im/bagel</id>
   <content type="html">&lt;p&gt;
最近半年控制碳水，每周中午吃一次贝果面包。明显的感受就是腹肌轮廓更加清晰了，裤带松了两格，以至于被我减掉了两截。
&lt;/p&gt;

&lt;p&gt;
那么，我经常吃的贝果为什么叫贝果呢？
&lt;/p&gt;

&lt;p&gt;
原来它的英文名叫 bagel bread，音译为贝果。
&lt;/p&gt;

&lt;p&gt;
这种面包最早是 17 世纪在波兰的犹太人圈子里出现的。在当地犹太人讲的意第绪语里，拼写为 baygl。
&lt;/p&gt;

&lt;p&gt;
bagel 和 bow 可能有些渊源。bow 我们知道，有鞠躬、弯弓的意思。而贝果的形状弯弯，弯成一个圈。
&lt;/p&gt;

&lt;p&gt;
这个圈不仅仅有美学效用，还有实用作用。据说那时候人们是用木杆穿着这些面包方便携带的。
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>单词本：astute</title>
   <link href="http://kimi.im/2024-08-10-astute"/>
   <updated>2024-08-10T00:00:00+00:00</updated>
   <id>http://kimi.im/astute</id>
   <content type="html">&lt;p&gt;
CISA 的一篇供应链信息信息安全文章(&lt;a href=&quot;#citeproc_bib_item_1&quot;&gt;CISA 2021&lt;/a&gt;)中提到，软件供应链过程中充满了各种安全攻击，简直防不胜防：
&lt;/p&gt;

&lt;p&gt;
Even a vendor&amp;rsquo;s well-implemented SDLC and a customer&amp;rsquo;s &lt;b&gt;astute&lt;/b&gt;
procurement due diligence and contracting provisions will not
eliminate all vulnerabilities from entering the software supply chain. 
&lt;/p&gt;

&lt;p&gt;
这里， &lt;b&gt;astute&lt;/b&gt; 是精明的意思。这个词来自希腊语 asty 城镇。拉丁语 astus
心灵手巧的，astutus 能工巧匠的。我怀疑，那时候城镇里住着很多手工艺人，所以城镇可以称为手工艺人聚集的地方，也就有了能工巧匠这一层意思。
&lt;/p&gt;

&lt;p&gt;
在这篇名为&amp;ldquo;Is Development Still Financeable? That Depends&amp;rdquo;
(&lt;a href=&quot;#citeproc_bib_item_2&quot;&gt;Kirk 2024&lt;/a&gt;) 的商业地产分析文章中，我们也读到了 &lt;b&gt;astute&lt;/b&gt; 这个词:
&lt;/p&gt;

&lt;p&gt;
“The challenge for developers is to find a bank &lt;b&gt;astute&lt;/b&gt; enough to
recognize the difference between ordinary and unique” Barkidjija
continued. ”This is why it is so important to partner with a bank that
has deep expertise in commercial real estate, as well as
specialization in your target asset class, across a variety of market
cycles. This industry expertise, combined with a bank that is
structured in a way to really get to know the customer, market and the
asset, helps ensure a comprehensive, nuanced evaluation of the deal.”
&lt;/p&gt;

&lt;p&gt;
&lt;b&gt;References&lt;/b&gt;
&lt;/p&gt;

&lt;style&gt;.csl-entry{text-indent: -1.5em; margin-left: 1.5em;}&lt;/style&gt;&lt;div class=&quot;csl-bib-body&quot;&gt;
  &lt;div class=&quot;csl-entry&quot;&gt;&lt;a id=&quot;citeproc_bib_item_1&quot;&gt;&lt;/a&gt;CISA. 2021. “Defending against Software Supply Chain Attacks.” Cybersecurity and Infrastructure Security Agency.&lt;/div&gt;
  &lt;div class=&quot;csl-entry&quot;&gt;&lt;a id=&quot;citeproc_bib_item_2&quot;&gt;&lt;/a&gt;Kirk, Patricia. 2024. “Is Development Still Financeable? That Depends.” &lt;i&gt;Commercial Property Executive&lt;/i&gt;.&lt;/div&gt;
&lt;/div&gt;
</content>
 </entry>
 
 <entry>
   <title>单词本：typosquatting</title>
   <link href="http://kimi.im/2024-08-09-typosquatting"/>
   <updated>2024-08-09T00:00:00+00:00</updated>
   <id>http://kimi.im/typosquatting</id>
   <content type="html">&lt;p&gt;
在看供应链上的信息安全攻击(&lt;a href=&quot;#citeproc_bib_item_1&quot;&gt;CISA 2021&lt;/a&gt;)时，看到一个案例。
&lt;/p&gt;

&lt;p&gt;
In 2018, researchers discovered 12 malicious Python libraries uploaded
on the official Python Package Index (PyPI). The attacker used
&lt;b&gt;typosquatting&lt;/b&gt; tactics by creating libraries titled “diango,”“djago,”“dajngo,” etc., to lure developers seeking the popular“ django ” Python
library.
&lt;/p&gt;

&lt;p&gt;
这里说 2018 年的时候，有黑客往 Python 的开源软件包管理服务器中提交了
12 个恶意软件包。这些软件包和很流行的“ django ”只是有几个字母的差别，从而让不熟悉的人很容易下载错。一旦下载错了，这些软件包就可以被用来进行后续攻击。
&lt;/p&gt;

&lt;p&gt;
这种攻击行为成为typosquatting attack。 typo 的意思就是拼写错误，是
typographical error 的简写。而 squat 的意思是 to sit on your heels
with your knees bent up close to your body (&lt;a href=&quot;#citeproc_bib_item_2&quot;&gt;&lt;i&gt;Oxford Dictionary&lt;/i&gt; 2024&lt;/a&gt;)，也就是蹲下的意思。也有擅自占用土地的意思。
&lt;/p&gt;

&lt;p&gt;
例如They ended up &lt;b&gt;squatting&lt;/b&gt; in the empty houses on Oxford Road.他们落得在牛津路私自占据他人空房而度日。(&lt;a href=&quot;#citeproc_bib_item_3&quot;&gt;&lt;i&gt;金山词霸&lt;/i&gt; 2024&lt;/a&gt;)
&lt;/p&gt;

&lt;p&gt;
这样看来，typosquatting 理解为利用拼写错误而非法占用比较恰当了。
&lt;/p&gt;

&lt;p&gt;
其他 typosquatting 攻击还可以通过相似的 URL 伪造网站，比如 g0ogle.com,
baldu.com 等。
&lt;/p&gt;

&lt;p&gt;
这个词在维基百科上叫误植域名，也叫 URL 劫持。这就把它的范围给缩小了。
&lt;/p&gt;

&lt;p&gt;
&lt;b&gt;References&lt;/b&gt;
&lt;/p&gt;

&lt;style&gt;.csl-entry{text-indent: -1.5em; margin-left: 1.5em;}&lt;/style&gt;&lt;div class=&quot;csl-bib-body&quot;&gt;
  &lt;div class=&quot;csl-entry&quot;&gt;&lt;a id=&quot;citeproc_bib_item_1&quot;&gt;&lt;/a&gt;CISA. 2021. “Defending against Software Supply Chain Attacks.” Cybersecurity and Infrastructure Security Agency.&lt;/div&gt;
  &lt;div class=&quot;csl-entry&quot;&gt;&lt;a id=&quot;citeproc_bib_item_2&quot;&gt;&lt;/a&gt;&lt;i&gt;Oxford Dictionary&lt;/i&gt;. 2024. Oxford University.&lt;/div&gt;
  &lt;div class=&quot;csl-entry&quot;&gt;&lt;a id=&quot;citeproc_bib_item_3&quot;&gt;&lt;/a&gt;&lt;i&gt;金山词霸&lt;/i&gt;. 2024. 金山词霸.&lt;/div&gt;
&lt;/div&gt;
</content>
 </entry>
 
 <entry>
   <title>单词本：commensurate</title>
   <link href="http://kimi.im/2024-08-08-commensurate"/>
   <updated>2024-08-08T00:00:00+00:00</updated>
   <id>http://kimi.im/commensurate</id>
   <content type="html">&lt;p&gt;
最近给我可爱的同事们做了一期信息安全开发生命周期（ SDLC ）课程。从培训后的反馈来看，不少同事还是有所收获的。
&lt;/p&gt;

&lt;p&gt;
在看相关标准文档的时候，我读到了 &lt;b&gt;commensurate&lt;/b&gt; 这个单词：
&lt;/p&gt;

&lt;p&gt;
Application of the [security development lifecycle] framework is
intended to provide confidence that the component, product or system
has security &lt;b&gt;commensurate&lt;/b&gt; with its expected level of risk throughout
the product&amp;rsquo;s life-cycle. (&lt;a href=&quot;#citeproc_bib_item_2&quot;&gt;International Electrotechnical Commission(IEC) 2009&lt;/a&gt;)
&lt;/p&gt;

&lt;p&gt;
这里是说 SDLC 的应用是为了使得最终开发出来的产品和系统的安全与其整个产品生命周期中的信息安全风险相称。
&lt;/p&gt;

&lt;p&gt;
&lt;b&gt;commensurate&lt;/b&gt; 这个单词的意思就是“相称的”。
&lt;/p&gt;

&lt;p&gt;
如果我们把它拆开来看，就是 com- 和 mensurate。而 com 在拉丁语里有 with
的意思。mensurate 则来自 mensurare 的过去分词 mensuratus 。mensurare就是现在英语的 measure 测量计量。因此，with measure 就可以理解为测量相当的。
&lt;/p&gt;

&lt;p&gt;
再看一例：
&lt;/p&gt;

&lt;p&gt;
Ensure vendors enforce supply chain security requirements &lt;b&gt;commensurate&lt;/b&gt;
with those used by the organization acquiring the vendor’s products
and services. (&lt;a href=&quot;#citeproc_bib_item_1&quot;&gt;CISA 2021&lt;/a&gt;)
&lt;/p&gt;

&lt;p&gt;
这篇文章是讲从供应链角度规避信息安全风险。这里说针对供应链的信息安全的需求，要与组织实施的流程相称。
&lt;/p&gt;

&lt;p&gt;
&lt;b&gt;References&lt;/b&gt;
&lt;/p&gt;

&lt;style&gt;.csl-entry{text-indent: -1.5em; margin-left: 1.5em;}&lt;/style&gt;&lt;div class=&quot;csl-bib-body&quot;&gt;
  &lt;div class=&quot;csl-entry&quot;&gt;&lt;a id=&quot;citeproc_bib_item_1&quot;&gt;&lt;/a&gt;CISA. 2021. “Defending against Software Supply Chain Attacks.” Cybersecurity and Infrastructure Security Agency.&lt;/div&gt;
  &lt;div class=&quot;csl-entry&quot;&gt;&lt;a id=&quot;citeproc_bib_item_2&quot;&gt;&lt;/a&gt;International Electrotechnical Commission(IEC). 2009. “Industrial Communication Networks – Network and System Security – Part 4-1: Secure Product Development Lifecycle Requirements.”&lt;/div&gt;
&lt;/div&gt;
</content>
 </entry>
 
 <entry>
   <title>单词本：stem</title>
   <link href="http://kimi.im/2024-08-07-stem"/>
   <updated>2024-08-07T00:00:00+00:00</updated>
   <id>http://kimi.im/stem</id>
   <content type="html">&lt;p&gt;
最近花了两个兴起看完了《organizational behavior》
(&lt;a href=&quot;#citeproc_bib_item_1&quot;&gt;&lt;i&gt;Organizational Behavior&lt;/i&gt; 2005&lt;/a&gt;)，也学了不少管理学知识以及英语单词。在组织的社会道德章节，作者说有道德的业务行为根植于有道德的组织文化。
&lt;/p&gt;

&lt;p&gt;
In short, ethical business practices &lt;b&gt;stem&lt;/b&gt; from ethical organizational
cultures.
&lt;/p&gt;

&lt;p&gt;
这里，stem 的意思可以翻译为根植于。而其本意则是花草的茎、树木的干。以及高脚杯的脚。烟斗的柄。词语的词干。从源头看，这个词和&lt;a href=&quot;2024-08-02-stamina.html&quot;&gt;单词本：stamina&lt;/a&gt;
一样，也是源自 stare 站立。即立着的树干。
&lt;/p&gt;

&lt;p&gt;
很巧，最近我们公司的大老板也用到了这个词。他在内网发文说我们这种跨国跨文化的人才布局，有好处也有很大的挑战。
&lt;/p&gt;

&lt;p&gt;
The benefits and the challenges &lt;b&gt;stem&lt;/b&gt; from a multicultural workforce.
&lt;/p&gt;

&lt;p&gt;
德语 der Stamm
&lt;/p&gt;

&lt;p&gt;
eine alte Eiche mit mächtigem Stamm, an old oak with a massive trunk.
&lt;/p&gt;

&lt;p&gt;
&lt;b&gt;References&lt;/b&gt;
&lt;/p&gt;

&lt;style&gt;.csl-entry{text-indent: -1.5em; margin-left: 1.5em;}&lt;/style&gt;&lt;div class=&quot;csl-bib-body&quot;&gt;
  &lt;div class=&quot;csl-entry&quot;&gt;&lt;a id=&quot;citeproc_bib_item_1&quot;&gt;&lt;/a&gt;&lt;i&gt;Organizational Behavior&lt;/i&gt;. 2005. South-Western College Pub.&lt;/div&gt;
&lt;/div&gt;
</content>
 </entry>
 
 <entry>
   <title>单词本：stamina</title>
   <link href="http://kimi.im/2024-08-02-stamina"/>
   <updated>2024-08-02T00:00:00+00:00</updated>
   <id>http://kimi.im/stamina</id>
   <content type="html">&lt;p&gt;
在Don Hellriegel的组织行为学中(&lt;a href=&quot;#citeproc_bib_item_1&quot;&gt;&lt;i&gt;Organizational Behavior&lt;/i&gt; 2005&lt;/a&gt;)，引用了一个李维斯 Linda Glick的案例。她拥抱变化，挑战自我，事业上实现了很多突破。她的人生哲学：
&lt;/p&gt;

&lt;p&gt;
Linda Glick&amp;rsquo;s philosophy is: &amp;ldquo;Change is painful and hard. We all
gravitate toward the comfortable, familiar and cozy. We don&amp;rsquo;t know if
we have the &lt;b&gt;stamina&lt;/b&gt; and resilience to take on change and see it
through successfully.&amp;rdquo;
&lt;/p&gt;

&lt;p&gt;
这里，用到了 stamina 这个词，也就是耐力。这个词的来源倒是有些神奇。拉丁语里 stamina 是 stamen 的复数形式，意思是纱线，而且是那种竖着的经纱。
&lt;/p&gt;

&lt;p&gt;
“竖着的”这个词义可以联系到 stare 即站立 stand 的拉丁语祖先。经纱不就是垂直地面的么。
&lt;/p&gt;

&lt;p&gt;
stamen 演变到现在，意思成了花朵的雄蕊。可能也是因为花蕊是竖着长的，从而得名。而 stamina 的意思确实耐力。有可能是因为经纱很结实，组成了很牢固衣服。
&lt;/p&gt;

&lt;p&gt;
比如：The triathlon is a great test of &lt;b&gt;stamina&lt;/b&gt;. 铁人三项是耐力的考验。
&lt;/p&gt;

&lt;p&gt;
另外，故事里的李维斯（Levi&amp;rsquo;s）是著名的牛仔裤品牌，由犹太商人Levi
Strauss（李维·斯特劳斯）创立。 1853年，Levi Strauss成立了生产帆布工装裤的 Levi Strauss &amp;amp; Co.公司。
&lt;/p&gt;

&lt;p&gt;
&lt;b&gt;References&lt;/b&gt;
&lt;/p&gt;

&lt;style&gt;.csl-entry{text-indent: -1.5em; margin-left: 1.5em;}&lt;/style&gt;&lt;div class=&quot;csl-bib-body&quot;&gt;
  &lt;div class=&quot;csl-entry&quot;&gt;&lt;a id=&quot;citeproc_bib_item_1&quot;&gt;&lt;/a&gt;&lt;i&gt;Organizational Behavior&lt;/i&gt;. 2005. South-Western College Pub.&lt;/div&gt;
&lt;/div&gt;
</content>
 </entry>
 
 <entry>
   <title>单词本：bout</title>
   <link href="http://kimi.im/2024-08-02-bout"/>
   <updated>2024-08-02T00:00:00+00:00</updated>
   <id>http://kimi.im/bout</id>
   <content type="html">&lt;p&gt;
可怜的意大利女拳击手Angela Carini跟阿尔及利亚拳手Imane Khelif对打了 46 秒就放弃比赛了……
&lt;/p&gt;

&lt;p&gt;
An Italian boxer abandoned her &lt;b&gt;bout&lt;/b&gt; at the Paris Olympics after only
46 seconds on Thursday, refusing to continue after taking a heavy
punch from an Algerian opponent who had been disqualified from last
year’s world championships over questions about her eligibility to
compete in women’s sports. &lt;sup&gt;&lt;a id=&quot;fnr.1&quot; class=&quot;footref&quot; href=&quot;#fn.1&quot; role=&quot;doc-backlink&quot;&gt;1&lt;/a&gt;&lt;/sup&gt;
&lt;/p&gt;

&lt;p&gt;
这个Imane Khelif去年好像是被禁赛了。原因是因为她基因里有男性特有的
XY 染色体。倒也不是她变性，是她天生就是这样的。极少数人生出来是女孩，但是带有男性特有的 XY 染色体。这就会让她长得特别强壮。所以 Angela
Carini 被暴打一阵就投降了。
&lt;/p&gt;

&lt;p&gt;
这里用到单词 bout 专指拳击比赛。
&lt;/p&gt;

&lt;p&gt;
这个 bout 可能跟 bend 有关。bend 弯曲引申出一圈的意思。也就是一场比赛了。要么是因为拳击赛场是被围起来的一圈。总之，bout 就是一场拳击比赛。
&lt;/p&gt;

&lt;p&gt;
bout 的另一个意思是一次、一阵。比如a bout of insomnia一次失眠。a
bout of coughing 一阵咳嗽。
&lt;/p&gt;

&lt;p&gt;
这里也可以用 fit 代替：a fit of coughing 一阵咳嗽。a fit of drinking
一场狂饮。a fit of illness 一场病。
&lt;/p&gt;
&lt;div id=&quot;footnotes&quot;&gt;
&lt;h2 class=&quot;footnotes&quot;&gt;Footnotes: &lt;/h2&gt;
&lt;div id=&quot;text-footnotes&quot;&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.1&quot; class=&quot;footnum&quot; href=&quot;#fnr.1&quot; role=&quot;doc-backlink&quot;&gt;1&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot; role=&quot;doc-footnote&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
NYTimes. Italian Boxer Quits Bout, Sparking Furor Over Gender at
Olympics. &lt;a href=&quot;https://www.nytimes.com/2024/08/01/world/olympics/boxer-quits-gender-angela-carini-imane-khelif.html&quot;&gt;https://www.nytimes.com/2024/08/01/world/olympics/boxer-quits-gender-angela-carini-imane-khelif.html&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;


&lt;/div&gt;
&lt;/div&gt;</content>
 </entry>
 
 <entry>
   <title>单词本：nitty-gritty</title>
   <link href="http://kimi.im/2024-08-01-nitty-gritty"/>
   <updated>2024-08-01T00:00:00+00:00</updated>
   <id>http://kimi.im/nitty-gritty</id>
   <content type="html">&lt;p&gt;
还是从系统规格书的介绍中看到的。系统规格书的价值在于仔细明确的定义系统功能。列举了系统功能、运行、服务约束的方方面面细节。
&lt;/p&gt;

&lt;p&gt;
The potency of System Specifications emerges from their
characteristics – they are exhaustive, explicit and definitive. These
detailed documents act as a blueprint, outlining the &lt;b&gt;nitty-gritty&lt;/b&gt; of a
system&amp;rsquo;s functional, operational, and servicing constraints.
&lt;/p&gt;

&lt;p&gt;
这里 &lt;b&gt;nitty-gritty&lt;/b&gt; 的意思是基本事实、本质实情。
&lt;/p&gt;

&lt;p&gt;
一般在美国的黑人爵士乐中会用到很多。nit 是虱子跳蚤的虫卵。grit 是细石子、沙粒。两者应该都是很小很小的东西。所以放在一起可以表示某些细节的东西。大概可以意会是细枝末节。
&lt;/p&gt;

&lt;p&gt;
在这篇文章中《This new tool can tell you whether AI has stolen your
work》，作者Alex Perry介绍了避免被 AI 侵权的一个工具，就是在自己的图片、视频等文件中插入一些非常细微的数据，使得 AI 训练的时候会出错，而普通人查阅又很正常。
&lt;/p&gt;

&lt;p&gt;
The idea of a copyright trap isn&amp;rsquo;t new to the world, having previously
been used for other types of media — but it is new to AI. The
&lt;b&gt;nitty-gritty&lt;/b&gt; technical details are kind of a lot to parse, but the
idea is that strings of gibberish text would be hidden somewhere on a
page —like in the source code, for instance— and would be detectable
if used to train large language models.
&lt;/p&gt;

&lt;p&gt;
这里作者用 &lt;b&gt;nitty-gritty&lt;/b&gt; 这个词表示微乎其微不可见的数据。 
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>单词本：ciabatta</title>
   <link href="http://kimi.im/2024-08-01-ciabatta"/>
   <updated>2024-08-01T00:00:00+00:00</updated>
   <id>http://kimi.im/ciabatta</id>
   <content type="html">&lt;p&gt;
最近我们公司在德国开了一个新办公园区，目测环境相当好。茶水间还有免费的咖啡和小面包。我看到德国同事是这么说那些小面包的：
&lt;/p&gt;

&lt;p&gt;
Die &lt;b&gt;Ciabattas&lt;/b&gt; sind sehr lecker! 
&lt;/p&gt;

&lt;p&gt;
这些夏巴塔真是很好吃！
&lt;/p&gt;

&lt;p&gt;
我简单查了下，这个 ciabatta 原来是意大利语，是一种扁长的面包，又叫拖鞋面包。或者音译夏巴塔面包。
&lt;/p&gt;

&lt;p&gt;
意大利语 ciabatta 字面意思就是carpet slipper地毯拖鞋。那叫拖鞋面包也无可厚非。
&lt;/p&gt;

&lt;p&gt;
从单词起源来看，ciabatta 和上次我们学的&lt;a href=&quot;../../../../../../../Library/CloudStorage/OneDrive-ABB/Briefcase/notes/kimi.im/_notes/_posts/language/2023-01-07-english-sabotage.html#ID-CCD154D0-E341-4CD4-A4B3-1A92096348DD&quot;&gt;单词本： sabotage&lt;/a&gt; 是一样的。
sabotage 源于法国农民穿的 sabot 木拖鞋。而 sabot 在西班牙语里是成了
zapata，到了意大利，读音一变就成了 ciabatta 了。
&lt;/p&gt;

&lt;p&gt;
因为来自意大利，所以这里要注意一下它的读音：【tʃəˈbɑːtə】
&lt;/p&gt;

&lt;p&gt;
ciabatta 实际上是法式常棍面包 baguette 的一种变体，加了橄榄油、形状更小、气孔更多、质地更柔软。
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>单词本：calibre</title>
   <link href="http://kimi.im/2024-08-01-calibre"/>
   <updated>2024-08-01T00:00:00+00:00</updated>
   <id>http://kimi.im/calibre</id>
   <content type="html">&lt;p&gt;
在Don Hellriegel的组织行为学(&lt;a href=&quot;#citeproc_bib_item_1&quot;&gt;&lt;i&gt;Organizational Behavior&lt;/i&gt; 2005&lt;/a&gt;)中，他介绍了团队的几种组织形式，functional team，problem-solving team,
cross-functional team, self-managed team, and virtual team.
&lt;/p&gt;

&lt;p&gt;
其中一个案例介绍了他们选择组件跨区域的在线的virtual team的原因：
&lt;/p&gt;

&lt;p&gt;
One of the reasons we went to virtual teams in our support centres is
that it&amp;rsquo;s difficult to attract the &lt;b&gt;calibre&lt;/b&gt; of people you want who are
willing to work at 2:00 and 3:00 in the morning on Saturday and
Sunday.
&lt;/p&gt;

&lt;p&gt;
因为他们是 IT 支持部门，在一个时区没法提供7 x 24小时的技术支持，所以团队成员来自多个不同时区。
&lt;/p&gt;

&lt;p&gt;
这里 calibre 的意思是能力、素质。其实还有水准、口径等意思。这个词据说来自阿拉伯语的 q ālib模具。模具当然是制作器物的参考表准了。
&lt;/p&gt;

&lt;p&gt;
也有说来自希腊语的 kalapous 即 shoemaker&amp;rsquo;s last。等等，什么是 last?
last 作为形容词是最后、最近、剩下的。最为动词是持续。但是其实上它还有一个意思是鞋楦。鞋楦就是鞋匠做鞋子时候用的模具。last 的这个意思又是来自德语 Leisten。
&lt;/p&gt;

&lt;p&gt;
alles über einen Leisten schlagen 大家按照鞋楦敲，引申为大家一起行动。
&lt;/p&gt;

&lt;p&gt;
后来在系统工程相关文章里看到系统规格书的介绍，也用到了 calibre 这个词：
&lt;/p&gt;

&lt;p&gt;
System Specifications are a cardinal part of the process, safeguarding
against misinterpretations and guiding the creation of high-&lt;b&gt;calibre&lt;/b&gt;
systems in Systems Engineering.
&lt;/p&gt;

&lt;p&gt;
high-calibre 即“高水准的”。
&lt;/p&gt;

&lt;p&gt;
另外，calibrate 作为动词就是按照标准进行调整，即校准、标定。如：the
depth gauge is calibrated in centimetres.
&lt;/p&gt;

&lt;p&gt;
calibration 则是校准标定的名词。如：accurate calibration of all gauges
is essential.
&lt;/p&gt;

&lt;p&gt;
&lt;b&gt;References&lt;/b&gt;
&lt;/p&gt;

&lt;style&gt;.csl-entry{text-indent: -1.5em; margin-left: 1.5em;}&lt;/style&gt;&lt;div class=&quot;csl-bib-body&quot;&gt;
  &lt;div class=&quot;csl-entry&quot;&gt;&lt;a id=&quot;citeproc_bib_item_1&quot;&gt;&lt;/a&gt;&lt;i&gt;Organizational Behavior&lt;/i&gt;. 2005. South-Western College Pub.&lt;/div&gt;
&lt;/div&gt;
</content>
 </entry>
 
 <entry>
   <title>单词本：at bay</title>
   <link href="http://kimi.im/2024-08-01-at-bay"/>
   <updated>2024-08-01T00:00:00+00:00</updated>
   <id>http://kimi.im/at-bay</id>
   <content type="html">&lt;p&gt;
我看了篇文章，对比了用户需求和系统规格书的区别。前者从用户功能角度规定用户想要哪些功能，而后者则从技术角度规定实现过程有哪些约束。
&lt;/p&gt;

&lt;p&gt;
System Specifications meticulously direct the implementation of a
system, keeping ambiguity &lt;b&gt;at bay&lt;/b&gt;.
&lt;/p&gt;

&lt;p&gt;
这里说系统规格书小心翼翼地指导系统的实现过程，让模糊无处可逃。
&lt;/p&gt;

&lt;p&gt;
这里at bay的意思是陷入绝境、无处可逃。
&lt;/p&gt;

&lt;p&gt;
这个意思要从 bay 的意思说起了。
&lt;/p&gt;

&lt;p&gt;
bay 有一个词义是海湾，另一个意思是动物低沉连续的叫 deep-toned howl of
a dog。
&lt;/p&gt;

&lt;p&gt;
第二个意思动物低声的叫是从拉丁语 baubari 变过来的，当动物陷入牢笼，无法逃脱的时候，就会无助的嚎叫了。其实 bark 狗狗叫也是从 baubari 演变过来的呢。
&lt;/p&gt;

&lt;p&gt;
所以，at bay 的意思是指动物被捕捉陷入绝境，只能低声无助嚎叫。
&lt;/p&gt;

&lt;p&gt;
那么，回到前面这句话，keep ambiguity at bay就是形象的把模糊不清比作动物，让它无处可逃，也就是不让模糊不清的系统设计出现。
&lt;/p&gt;

&lt;p&gt;
再比如
&lt;/p&gt;

&lt;p&gt;
Monstrously inflated prices are designed to keep people like us &lt;b&gt;at
bay&lt;/b&gt;. 疯狂的物价会使我们这些人走投无路。
&lt;/p&gt;

&lt;p&gt;
Eating oranges keeps colds &lt;b&gt;at bay&lt;/b&gt;. 吃橙子补充维生素 C 可以预防感冒。
&lt;/p&gt;

&lt;p&gt;
The stag &lt;b&gt;at bay&lt;/b&gt; is a dangerous foe. 受困的雄鹿是危险的对手。也就是孙子兵法所说的“穷寇勿迫，此用兵之法也”。即穷寇莫追。
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>单词本：swift</title>
   <link href="http://kimi.im/2024-07-31-swift"/>
   <updated>2024-07-31T00:00:00+00:00</updated>
   <id>http://kimi.im/swift</id>
   <content type="html">&lt;p&gt;
今天公司内网社交网站上有个老板写了个消息夸奖某个团队说他们的快速响应得到了对方企业执行管理层的嘉奖：
&lt;/p&gt;

&lt;p&gt;
&lt;b&gt;Swift&lt;/b&gt; global service response secures executive praise
&lt;/p&gt;

&lt;p&gt;
这个 swift 有不少意思，比如
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;名词：雨燕&lt;/li&gt;
&lt;li&gt;形容词：迅速的、立刻的&lt;/li&gt;
&lt;li&gt;形容词：速度飞快的、水流湍急的&lt;/li&gt;
&lt;li&gt;苹果系统编程语言&lt;/li&gt;
&lt;li&gt;Society for Worldwide Interbank Financial Telecommunications 环球同业银行金融电讯协会所管理的国际资金清算系统的简称 SWIFT&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
当然，在这句话里 &lt;b&gt;Swift&lt;/b&gt; global service response secures executive
praise. swift 的意思是迅速之意。
&lt;/p&gt;

&lt;p&gt;
最近，东方大国在推动 BRICS 金砖国家的银行结算系统。有望打破 SWIFT 的垄断。其实也不是想挑战 SWIFT ，只是 SWIFT动不动就要踢人，东方大国不得不留条后路，免得仓促切换引起混乱罢了。
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>单词本：provident</title>
   <link href="http://kimi.im/2024-07-31-provident"/>
   <updated>2024-07-31T00:00:00+00:00</updated>
   <id>http://kimi.im/provident</id>
   <content type="html">&lt;p&gt;
最近各市的社会平均工资出炉了。我们公司人事就发出邮件跟大家沟通，公积金的调整计划。
&lt;/p&gt;

&lt;p&gt;
According to relevant polices issued by human resources and social
security bureau as well as housing &lt;b&gt;provident&lt;/b&gt; fund management center,
most regions will adjust the base of social insurance and housing fund
from July in 2024.
&lt;/p&gt;

&lt;p&gt;
这个邮件中housing &lt;b&gt;provident&lt;/b&gt; fund management center是住房公积金中心的意思。前面human resources and social security bureau是人力资源与社会保障局。
&lt;/p&gt;

&lt;p&gt;
&lt;b&gt;provident&lt;/b&gt; 的意思是未雨绸缪的、有远虑的。一般用于储蓄、存款。在这里也就是公积金的积。
&lt;/p&gt;

&lt;p&gt;
这个词来自拉丁语 providere ，pro-表示提前的、即 fore ，而 videre则是看见的意思。providere 的本意是提前看见。
&lt;/p&gt;

&lt;p&gt;
provide 也来自 providere ，应为提前看见，所以 provide against有防备的意思，provide for 有供养、考虑的意思。
&lt;/p&gt;

&lt;p&gt;
I have to provide for my old age. 我必须为老年时做准备。
&lt;/p&gt;

&lt;p&gt;
提供东西给别人也是因为提前看见别人需要某样东西才会做的事情吧。
&lt;/p&gt;

&lt;p&gt;
provident 是 provide 的形容词，但是只保留防备的意思。
&lt;/p&gt;

&lt;p&gt;
我们之前学到过&lt;a href=&quot;2022-06-23-latin-pro-forma.html&quot;&gt;单词本：pro forma&lt;/a&gt;，这里 pro也是提前的意思。
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>单词本：usher</title>
   <link href="http://kimi.im/2024-07-29-usher"/>
   <updated>2024-07-29T00:00:00+00:00</updated>
   <id>http://kimi.im/usher</id>
   <content type="html">&lt;p&gt;
看一个云原生安全相关的文章，遇到 usher 这个单词：
&lt;/p&gt;

&lt;p&gt;
Containers and microservices are &lt;b&gt;ushering&lt;/b&gt; in an entirely new operating
pattern for organizations, one in which the infrastructure is even
more abstracted and ephemeral than the cloud and virtualization
patterns that preceded it. &lt;sup&gt;&lt;a id=&quot;fnr.1&quot; class=&quot;footref&quot; href=&quot;#fn.1&quot; role=&quot;doc-backlink&quot;&gt;1&lt;/a&gt;&lt;/sup&gt;
&lt;/p&gt;

&lt;p&gt;
usher 是引座员、引领的意思。这段文字的意思是说容器和微服务引领了一个全新的操作模式。计算机服务器基础设施变得更加的抽象化、按需快速分配使用。
&lt;/p&gt;

&lt;p&gt;
这个词源自通俗拉丁语 ustiarius 看门人，也就是拉丁语的 ostiarius。而
ostium 则是门的意思。ostium 又来自 os，嘴巴的意思。
&lt;/p&gt;

&lt;p&gt;
所以 os 的派生词 oral 的意思是口头的。
&lt;/p&gt;

&lt;p&gt;
而 os 如果发音不一样，又是骨头的意思。比如骨科就是 orthopaedics 。比如法语的骨头就是 os: casser un os, to break a bone.
&lt;/p&gt;

&lt;p&gt;
因为 usher 从拉丁语到法语兜了一圈，所以女引座员就是 usherette，这里用了法语的女性化后缀。
&lt;/p&gt;

&lt;p&gt;
usher out 的意思就是引出，也就是送出。所以 usher out the old, greet
the new 就是辞旧迎新的意思。
&lt;/p&gt;
&lt;div id=&quot;footnotes&quot;&gt;
&lt;h2 class=&quot;footnotes&quot;&gt;Footnotes: &lt;/h2&gt;
&lt;div id=&quot;text-footnotes&quot;&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.1&quot; class=&quot;footnum&quot; href=&quot;#fnr.1&quot; role=&quot;doc-backlink&quot;&gt;1&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot; role=&quot;doc-footnote&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
Cloud native and security today: secure the app.
&lt;a href=&quot;https://www.csoonline.com/article/563719/the-modern-security-landscape-is-evolving-what-you-need-to-know.html&quot;&gt;https://www.csoonline.com/article/563719/the-modern-security-landscape-is-evolving-what-you-need-to-know.html&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;


&lt;/div&gt;
&lt;/div&gt;</content>
 </entry>
 
 <entry>
   <title>单词本：quaint</title>
   <link href="http://kimi.im/2024-07-29-quaint"/>
   <updated>2024-07-29T00:00:00+00:00</updated>
   <id>http://kimi.im/quaint</id>
   <content type="html">&lt;p&gt;
企业服务器市场一直在进行虚拟化变革。以至于物理 CPU 和硬盘已经成了老古董概念了：
&lt;/p&gt;

&lt;p&gt;
Just as virtualization made knowledge of your physical CPUs and disk
layouts a &lt;b&gt;quaint&lt;/b&gt; concept, so too are technologies like Docker and
Kubernetes making the very notion of a server or virtual machine
something of a bygone era. &lt;sup&gt;&lt;a id=&quot;fnr.1&quot; class=&quot;footref&quot; href=&quot;#fn.1&quot; role=&quot;doc-backlink&quot;&gt;1&lt;/a&gt;&lt;/sup&gt;
&lt;/p&gt;

&lt;p&gt;
这则关于文章，云原生的安全建议。里面用了 quaint。意思是古色古香的、离奇有趣的、做工精巧的。
&lt;/p&gt;

&lt;p&gt;
显然，在这篇文章里 quaint 带有一些变异，所以翻译为古色古香不如翻译为老里老气。
&lt;/p&gt;

&lt;p&gt;
这个词源自拉丁语。拉丁语 cognoscere 的意思是变得出名，它的过去分词是
cognitus，一转变就成了 quaint 了。我们可以理解 quaint 是古时候出名的。那从现在视角看，就是古色古香了。出名的东西肯定做工也精巧吧。
&lt;/p&gt;

&lt;p&gt;
cognize，cognition 认知的动词和名词形式应该直接就来自 cognoscere 了。
&lt;/p&gt;

&lt;p&gt;
在这批关于英格兰西南部多塞特的介绍中，也用到了 quaint ：
&lt;/p&gt;

&lt;p&gt;
Dorset is known for its alluring beaches and dramatic, 95-mile-long
Jurassic coastline with many of its villages providing a &lt;b&gt;quaint&lt;/b&gt;,
picture-perfect setting for people keen to live a quintessential
country lifestyle - and for those who want to experience it on
holiday. &lt;sup&gt;&lt;a id=&quot;fnr.2&quot; class=&quot;footref&quot; href=&quot;#fn.2&quot; role=&quot;doc-backlink&quot;&gt;2&lt;/a&gt;&lt;/sup&gt;
&lt;/p&gt;

&lt;p&gt;
多塞特这个地方因为中世纪的黑死病，死了无数人，所以会有一些诡异的传说。
&lt;/p&gt;

&lt;p&gt;
In fact, according to a guide on dorset coastal cottages, visitors
often comment on its melancholy atmosphere, with its website citing:
“It is said that the souls of the dead linger here.” “Ghostly faces
have been seen at the doors and windows, and reports of a weeping nun
apparition kneeling beyond the church walls exist too. Scariest of all
is the phantom horse and rider that gallops across the site just
before dawn when the night is at its darkest,&amp;ldquo; it says rather
spookily. So while Wimborne St Giles might be worth a visit, a trip to
Knowlton Church might only favour the brave.
&lt;/p&gt;
&lt;div id=&quot;footnotes&quot;&gt;
&lt;h2 class=&quot;footnotes&quot;&gt;Footnotes: &lt;/h2&gt;
&lt;div id=&quot;text-footnotes&quot;&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.1&quot; class=&quot;footnum&quot; href=&quot;#fnr.1&quot; role=&quot;doc-backlink&quot;&gt;1&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot; role=&quot;doc-footnote&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
Cloud native and security today: secure the app. &lt;a href=&quot;https://www.csoonline.com/article/563719/the-modern-security-landscape-is-evolving-what-you-need-to-know.html&quot;&gt;https://www.csoonline.com/article/563719/the-modern-security-landscape-is-evolving-what-you-need-to-know.html&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.2&quot; class=&quot;footnum&quot; href=&quot;#fnr.2&quot; role=&quot;doc-backlink&quot;&gt;2&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot; role=&quot;doc-footnote&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;https://www.mirror.co.uk/travel/uk-ireland/stunning-quaint-english-village-15-33255896&quot;&gt;https://www.mirror.co.uk/travel/uk-ireland/stunning-quaint-english-village-15-33255896&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;


&lt;/div&gt;
&lt;/div&gt;</content>
 </entry>
 
 <entry>
   <title>单词本：kiln</title>
   <link href="http://kimi.im/2024-07-26-kiln"/>
   <updated>2024-07-26T00:00:00+00:00</updated>
   <id>http://kimi.im/kiln</id>
   <content type="html">&lt;p&gt;
今天看到一条消息，说水泥行业的碳减排之路任重道远。水泥是我们生活中很重要的一种工业品。然而……
&lt;/p&gt;

&lt;p&gt;
Cement production is not easy to decarbonize due to the high
temperatures required in the &lt;b&gt;kiln&lt;/b&gt; and the emissions from the
calcination of limestone.
&lt;/p&gt;

&lt;p&gt;
水泥生产是能耗很大的工业过程。这里， &lt;b&gt;kiln&lt;/b&gt; 是烧制水泥的高温窑。这个词其实来自拉丁语 cocina ，法语单词 cuisine 也是源自 culina，我们之前遇到过：
&lt;a href=&quot;2014-01-26-francais-cuisine.html&quot;&gt;单词本： cuisine&lt;/a&gt; 。
&lt;/p&gt;

&lt;p&gt;
cocina 的拉丁语意思是厨房、炉灶。 &lt;b&gt;kiln&lt;/b&gt; 窑不就是个放大的炉灶么。
&lt;/p&gt;

&lt;p&gt;
而 cocina 又来自拉丁语 coquere 的 cook 烹饪。
&lt;/p&gt;

&lt;p&gt;
那么，整理一下同源的单词：
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;cook 烹饪，德语 kochen 法语 fare cuire&lt;/li&gt;
&lt;li&gt;Kuchen 德语糕点，英语里则是德式糕点&lt;/li&gt;
&lt;li&gt;kitchen 厨房，德语die Kü chen 法语 la cuisine&lt;/li&gt;
&lt;li&gt;kiln 窑&lt;/li&gt;
&lt;/ul&gt;
</content>
 </entry>
 
 <entry>
   <title>单词本：inclement</title>
   <link href="http://kimi.im/2024-07-26-inclement"/>
   <updated>2024-07-26T00:00:00+00:00</updated>
   <id>http://kimi.im/inclement</id>
   <content type="html">&lt;p&gt;
最近台风天气，我们公司里预警邮件频发。比如：
&lt;/p&gt;

&lt;p&gt;
&lt;b&gt;Inclement&lt;/b&gt; weather could trigger localized business, transport, and
utility disruptions, rendering some bridges or roadways impassable.
&lt;/p&gt;

&lt;p&gt;
恶劣天气会导致商业、交通、基础设施受损，桥梁、道路不通。
&lt;/p&gt;

&lt;p&gt;
这里形容恶劣天气用的是 &lt;b&gt;inclement&lt;/b&gt; 。in- 是否定前缀，clement 的意思是仁慈的、（天气）温和的、和蔼的、宽厚的。clement 的反面就是不仁慈、不温和的意思了。也就是恶劣。
&lt;/p&gt;

&lt;p&gt;
clement 源自拉丁语 clemens 以及 clemens 的呼格 clementem 。意思是温和的。
&lt;/p&gt;

&lt;p&gt;
古代人男子喜欢用 Clement 做名字。现在好像不流行了。
&lt;/p&gt;

&lt;p&gt;
女子也有对应的名字：Clementina 或 Clementine 。
&lt;/p&gt;

&lt;p&gt;
大概都是父母希望小孩子温柔、听话，不要惹是生非吧。
&lt;/p&gt;

&lt;p&gt;
inclement 这个词大都是用来形容天气的，比如：
&lt;/p&gt;

&lt;p&gt;
The Premier Volleyball League (PVL) has announced that all games
scheduled for Thursday, July 25, have been canceled due to the
&lt;b&gt;inclement&lt;/b&gt; weather brought by Typhoon Carina.
&lt;/p&gt;

&lt;p&gt;
希望大家都没事。再见。
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>单词本：torrential</title>
   <link href="http://kimi.im/2024-07-25-torrential"/>
   <updated>2024-07-25T00:00:00+00:00</updated>
   <id>http://kimi.im/torrential</id>
   <content type="html">&lt;p&gt;
今天台风格美 Gaemi 登陆，公司发了应急邮件：
&lt;/p&gt;

&lt;p&gt;
Heavy-to-&lt;b&gt;torrential&lt;/b&gt; rainfall of 25-50 cm (10-20 inches) is expected
over most of Fujian, eastern Guangdong, and southern Zhejiang
provinces through early July 26.
&lt;/p&gt;

&lt;p&gt;
这里Heavy-to-&lt;b&gt;torrential&lt;/b&gt; rainfall是指大到暴雨。
&lt;/p&gt;

&lt;p&gt;
&lt;b&gt;torrential&lt;/b&gt; 的名词形式是 torrent 急流。
&lt;/p&gt;

&lt;p&gt;
比如the stream had become a raging torrent小溪变成了汹涌的急流。
&lt;/p&gt;

&lt;p&gt;
torrent 也形象的表示连发、并发。
&lt;/p&gt;

&lt;p&gt;
a torrent of questions from the reporters. 记者们提出连珠炮似的问题。
(&lt;a href=&quot;#citeproc_bib_item_1&quot;&gt;&lt;i&gt;Apple Dictionary&lt;/i&gt; 2024&lt;/a&gt;)
&lt;/p&gt;

&lt;p&gt;
法语也有la torrent：il pleutà torrents. 大雨如注。
&lt;/p&gt;

&lt;p&gt;
菲律宾就比较惨了，他们那儿整个城市被淹没了：
&lt;/p&gt;

&lt;p&gt;
Much of the Philippine capital remained underwater Thursday after
deadly Typhoon Gaemi worsened &lt;b&gt;torrential&lt;/b&gt; monsoon rains that lashed the
country, trapping thousands of people in rising flood waters and
causing widespread damage. (from CNN July 25, 2024. Floods inundate
Philippine capital, oil tanker sinks as deadly typhoon prompts calls
for climate action)
&lt;/p&gt;

&lt;p&gt;
然而，torrent 其实源自拉丁语 torrere，意思是烧烤。或者可以这么认为，水被烧烤煮沸的时候，就是奔流沸腾的样子了。
&lt;/p&gt;

&lt;p&gt;
&lt;b&gt;References&lt;/b&gt;
&lt;/p&gt;

&lt;style&gt;.csl-entry{text-indent: -1.5em; margin-left: 1.5em;}&lt;/style&gt;&lt;div class=&quot;csl-bib-body&quot;&gt;
  &lt;div class=&quot;csl-entry&quot;&gt;&lt;a id=&quot;citeproc_bib_item_1&quot;&gt;&lt;/a&gt;&lt;i&gt;Apple Dictionary&lt;/i&gt;. 2024. Apple.&lt;/div&gt;
&lt;/div&gt;
</content>
 </entry>
 
 <entry>
   <title>单词本：protract</title>
   <link href="http://kimi.im/2024-07-25-protract"/>
   <updated>2024-07-25T00:00:00+00:00</updated>
   <id>http://kimi.im/protract</id>
   <content type="html">&lt;p&gt;
还是台风的应急通知。其中提到，有些商业、交通、物流会因为暴风的原因而拖延。
&lt;/p&gt;

&lt;p&gt;
Plan accordingly for &lt;b&gt;protracted&lt;/b&gt; commercial, transport, and logistics
disruptions in areas in the storm&amp;rsquo;s path, especially if vital
infrastructure is damaged.
&lt;/p&gt;

&lt;p&gt;
显然，这个 protract 是由 pro- 和 tract 组成的。tract 我们之前在&lt;a href=&quot;2024-07-25-intractable.html#ID-292203B9-DF85-48A2-ACB0-57558750273B&quot;&gt;单词本：
intractable&lt;/a&gt; 中学到过。它源自拉丁语 trahere 也就是 draw 拖拉的意思。前缀 pro- 有 forward 向前和 out 出来的意思。这里应该类似 prolong 延长。也就是拖拉延长，即拖延。
&lt;/p&gt;

&lt;p&gt;
其实 portray 描绘这个词跟 protract 都是源自拉丁语 protrahere ，但是意思就差别很大。
&lt;/p&gt;

&lt;p&gt;
新闻例子：
&lt;/p&gt;

&lt;p&gt;
Harris is armed with a readymade general election campaign she now
inherits from her former running mate, a powerful war chest, and party
allies eager to avoid &lt;b&gt;protracting&lt;/b&gt; an intraparty battle that already
took down the candidacy of a sitting president. 民主党们在极力避免被拖延的党内斗争？也就是说美国民主党内内斗蓄势待发？
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>单词本：intractable</title>
   <link href="http://kimi.im/2024-07-25-intractable"/>
   <updated>2024-07-25T00:00:00+00:00</updated>
   <id>http://kimi.im/intractable</id>
   <content type="html">&lt;p&gt;
最近我们干了个大事情，拉拢巴勒斯坦 16 个党派，签订了合作框架《北京宣言》。西方网友是这么评价的：
&lt;/p&gt;

&lt;p&gt;
China is the land of grandmaster diplomats. Fixing the &lt;b&gt;intractable&lt;/b&gt;
political conflicts manufactured by the Anglo American Empire one by
one.
&lt;/p&gt;

&lt;p&gt;
&lt;b&gt;intractable&lt;/b&gt; ：倔强的、棘手的、难治疗的。
&lt;/p&gt;

&lt;p&gt;
它源自拉丁语 intractabilis 难处理的。in- 前缀表否定，tractabilis 可处理的。
&lt;/p&gt;

&lt;p&gt;
举几个例子：
&lt;/p&gt;

&lt;p&gt;
(CNN) — As a border crisis unfolded only months into Joe Biden&amp;rsquo;s
presidency, he looked to his vice president to help solve an
&lt;b&gt;intractable&lt;/b&gt; issue: migration. 拜登推选，转向希望哈里斯解决移民这个棘手问题。&lt;sup&gt;&lt;a id=&quot;fnr.1&quot; class=&quot;footref&quot; href=&quot;#fn.1&quot; role=&quot;doc-backlink&quot;&gt;1&lt;/a&gt;&lt;/sup&gt;
&lt;/p&gt;

&lt;p&gt;
A few of the research topics recently garnering my attention are
psychedelic-assisted therapies for &lt;b&gt;intractable&lt;/b&gt; psychiatric conditions,
interactions between the immune system and brain function, and
computational approaches that promise to usher in elusive predictive
and diagnostic markers for psychiatric conditions. &lt;sup&gt;&lt;a id=&quot;fnr.2&quot; class=&quot;footref&quot; href=&quot;#fn.2&quot; role=&quot;doc-backlink&quot;&gt;2&lt;/a&gt;&lt;/sup&gt;
&lt;/p&gt;

&lt;p&gt;
&lt;b&gt;Intractable&lt;/b&gt; pain, also called &lt;b&gt;intractable&lt;/b&gt; pain syndrome (IPS), is a
severe, constant, relentless, and debilitating pain that is not
curable by any known means and which causes a house-bound or bed-bound
state and early death if not adequately treated, usually with opioids
and/or interventional procedures. 维基百科上介绍得难治疗的疼痛症。&lt;sup&gt;&lt;a id=&quot;fnr.3&quot; class=&quot;footref&quot; href=&quot;#fn.3&quot; role=&quot;doc-backlink&quot;&gt;3&lt;/a&gt;&lt;/sup&gt;
&lt;/p&gt;

&lt;p&gt;
tractabilis 来自拉丁语动词 tractare 处理、管理。对应的英语动词是 treat
处理。形容词 tractable意思是顺从的、驯服的、易处理的。
&lt;/p&gt;

&lt;p&gt;
而 tractare 又可能来自 trahere 强力拖拉。拉丁语 trahere 的过去分词是
tractus 。
&lt;/p&gt;

&lt;p&gt;
trahere 对应英语是 drag 拖拉。而 tractus 对应的英语 tract 表示大片的土地、通道，可能也可以理解为从地上拖拉出来一块地、拖拉的通道。
&lt;/p&gt;

&lt;p&gt;
tracts of natural forest 大片大片的天然森林
&lt;/p&gt;

&lt;p&gt;
the digestive tract 消化道，the respiratory tract 呼吸道 (&lt;a href=&quot;#citeproc_bib_item_1&quot;&gt;&lt;i&gt;Apple Dictionary&lt;/i&gt; 2024&lt;/a&gt;) 
&lt;/p&gt;

&lt;p&gt;
respiratory 可以参考我们之前学过的&lt;a href=&quot;2023-03-26-aspiration.html#ID-C4DCC461-D06C-4036-A29F-2A81FA5FA64C&quot;&gt;单词本： aspiration&lt;/a&gt; ，来自拉丁语 ad +
spirare，ad 是 to ，spirare是呼吸。所以 aspire 的本意就是朝这最远的地方呼吸，即渴望、有志向于某事。
&lt;/p&gt;

&lt;p&gt;
&lt;b&gt;References&lt;/b&gt;
&lt;/p&gt;

&lt;style&gt;.csl-entry{text-indent: -1.5em; margin-left: 1.5em;}&lt;/style&gt;&lt;div class=&quot;csl-bib-body&quot;&gt;
  &lt;div class=&quot;csl-entry&quot;&gt;&lt;a id=&quot;citeproc_bib_item_1&quot;&gt;&lt;/a&gt;&lt;i&gt;Apple Dictionary&lt;/i&gt;. 2024. Apple.&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;footnotes&quot;&gt;
&lt;h2 class=&quot;footnotes&quot;&gt;Footnotes: &lt;/h2&gt;
&lt;div id=&quot;text-footnotes&quot;&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.1&quot; class=&quot;footnum&quot; href=&quot;#fnr.1&quot; role=&quot;doc-backlink&quot;&gt;1&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot; role=&quot;doc-footnote&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
Harris’ immigration work comes under scrutiny as campaign takes
shape. &lt;a href=&quot;https://www.krgv.com/news/harris-immigration-work-comes-under-scrutiny-as-campaign-takes-shape/&quot;&gt;https://www.krgv.com/news/harris-immigration-work-comes-under-scrutiny-as-campaign-takes-shape/&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.2&quot; class=&quot;footnum&quot; href=&quot;#fnr.2&quot; role=&quot;doc-backlink&quot;&gt;2&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot; role=&quot;doc-footnote&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
Looking Toward the Future in Psychiatry: A Medical Student’s Perspective. &lt;a href=&quot;https://www.psychiatryonline.org/doi/full/10.1176/appi.pn.2024.08.8.26&quot;&gt;https://www.psychiatryonline.org/doi/full/10.1176/appi.pn.2024.08.8.26&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.3&quot; class=&quot;footnum&quot; href=&quot;#fnr.3&quot; role=&quot;doc-backlink&quot;&gt;3&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot; role=&quot;doc-footnote&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
Intractable pain. &lt;a href=&quot;https://en.wikipedia.org/wiki/Intractable_pain&quot;&gt;https://en.wikipedia.org/wiki/Intractable_pain&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;


&lt;/div&gt;
&lt;/div&gt;</content>
 </entry>
 
 <entry>
   <title>单词本：throttle</title>
   <link href="http://kimi.im/2024-07-23-throttle"/>
   <updated>2024-07-23T00:00:00+00:00</updated>
   <id>http://kimi.im/throttle</id>
   <content type="html">&lt;p&gt;
最近由于开发项目的测试需要，要去采购一批涡轮监控保护设备。于是就看看相应的手册(&lt;a href=&quot;#citeproc_bib_item_1&quot;&gt;ABB 2011&lt;/a&gt;)。以下一段介绍了该产品的涡轮转自压力的计算和监控功能。
&lt;/p&gt;

&lt;p&gt;
The rotor stress application calculates and monitors the turbine rotor stress levels to initiate speed or load limiting actions, as needed. The key features are:
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;Calculation of &lt;b&gt;throttle&lt;/b&gt; and reheat steam temperature window&lt;/li&gt;
&lt;li&gt;Computing of rotor temperature and evaluation of the rotor stress (HP and IP)&lt;/li&gt;
&lt;li&gt;Evaluation of the allowable stress based on the different max. cycle times&lt;/li&gt;
&lt;li&gt;Evaluation of the max. allowable speed and load gradients during the transients&lt;/li&gt;
&lt;li&gt;Calculation of rotor thermal life expenditure (monthly, yearly and total)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
总结来说，它可以计算节流阀和再加热蒸气的温度窗口、计算转子温度、评估转子压力、计算最大允许转速、以及转子的热力损耗等。
&lt;/p&gt;

&lt;p&gt;
其中，有个单词 &lt;b&gt;throttle&lt;/b&gt; 它和 throat 喉咙长得有点像。
&lt;/p&gt;

&lt;p&gt;
事实上，这个词就是从 throat 演变来的。throttle 做动词用的话，意思是掐喉咙、使……窒息。
&lt;/p&gt;

&lt;p&gt;
Sometimes he annoys me so much that I could &lt;b&gt;throttle&lt;/b&gt;
him. (&lt;a href=&quot;#citeproc_bib_item_2&quot;&gt;&lt;i&gt;Cambridge Dictionary&lt;/i&gt; 2024&lt;/a&gt;) 他有时候真讨厌，我都想掐死他。
&lt;/p&gt;

&lt;p&gt;
那么，也 throttle 可以引申为扼杀。The reduction in funds is &lt;b&gt;throttling&lt;/b&gt;
the development of new programmes. 经费消减将扼杀新项目。
&lt;/p&gt;

&lt;p&gt;
而引文中则是用作名词，节流阀或者进气阀。也可以是汽车的油门踏板，因为它是用来控制油门进气的速度的。take one&amp;rsquo;s foot off the &lt;b&gt;throttle&lt;/b&gt;
(&lt;a href=&quot;#citeproc_bib_item_4&quot;&gt;&lt;i&gt;Oxford Dictionary&lt;/i&gt; 2024&lt;/a&gt;) 就是松开油门。
&lt;/p&gt;

&lt;p&gt;
He twisted the &lt;b&gt;throttle&lt;/b&gt; control to max power. 他把节气门的开关拧到最大。
&lt;/p&gt;

&lt;p&gt;
那么，把进气阀全部打开，就可以引申为充满活力了：
&lt;/p&gt;

&lt;p&gt;
He lived his life at full &lt;b&gt;throttle&lt;/b&gt;. 他过着激情四射的生活。(&lt;a href=&quot;#citeproc_bib_item_3&quot;&gt;&lt;i&gt;Collins Dictionary&lt;/i&gt; 2024&lt;/a&gt;)
&lt;/p&gt;

&lt;p&gt;
从 throat 到 throttle 的转变，添加了 -le 后缀。这个 -le 其实叫作
utensil suffix 器物后缀。即把某个名词器物化。比如 hand 手，handle 手柄。
&lt;/p&gt;

&lt;p&gt;
&lt;b&gt;References&lt;/b&gt;
&lt;/p&gt;

&lt;style&gt;.csl-entry{text-indent: -1.5em; margin-left: 1.5em;}&lt;/style&gt;&lt;div class=&quot;csl-bib-body&quot;&gt;
  &lt;div class=&quot;csl-entry&quot;&gt;&lt;a id=&quot;citeproc_bib_item_1&quot;&gt;&lt;/a&gt;ABB. 2011. “Symphony plus S+ Turbine.” ABB.&lt;/div&gt;
  &lt;div class=&quot;csl-entry&quot;&gt;&lt;a id=&quot;citeproc_bib_item_2&quot;&gt;&lt;/a&gt;&lt;i&gt;Cambridge Dictionary&lt;/i&gt;. 2024. Cambridge University Press &amp;#38; Assessment.&lt;/div&gt;
  &lt;div class=&quot;csl-entry&quot;&gt;&lt;a id=&quot;citeproc_bib_item_3&quot;&gt;&lt;/a&gt;&lt;i&gt;Collins Dictionary&lt;/i&gt;. 2024. Collins.&lt;/div&gt;
  &lt;div class=&quot;csl-entry&quot;&gt;&lt;a id=&quot;citeproc_bib_item_4&quot;&gt;&lt;/a&gt;&lt;i&gt;Oxford Dictionary&lt;/i&gt;. 2024. Oxford University.&lt;/div&gt;
&lt;/div&gt;
</content>
 </entry>
 
 <entry>
   <title>单词本：demolition</title>
   <link href="http://kimi.im/2024-07-23-demolition"/>
   <updated>2024-07-23T00:00:00+00:00</updated>
   <id>http://kimi.im/demolition</id>
   <content type="html">&lt;p&gt;
Symphony Plus S+ Turbine (&lt;a href=&quot;#citeproc_bib_item_1&quot;&gt;ABB 2011&lt;/a&gt;) 介绍了企业提供的服务：
&lt;/p&gt;

&lt;p&gt;
Our services include custom component design and mounting, speed wheel
and speed probe mounting, system &lt;b&gt;demolition&lt;/b&gt; and installation
engineering, as well as oil system piping.
&lt;/p&gt;

&lt;p&gt;
这里system &lt;b&gt;demolition&lt;/b&gt;指的是系统拆除。我一般会写成 system
installation and uninstallation，但是其实可能并没有 uninstallation 这个词，或者用 destruction，但它可能有破坏的意思。
&lt;/p&gt;

&lt;p&gt;
其实，从源头上看，demolition 是拉丁语 de- 和 moliri 的组合。de- 表示分离、落下，而 moliri 是建造的意思。合起来就是把建筑拉倒。
&lt;/p&gt;

&lt;p&gt;
拉丁语 moles 是堆砌的屏障的意思。所以英语 mole 法语môle德语 die Mole
的意思是 breakwater 防波堤。
&lt;/p&gt;

&lt;p&gt;
英语里 mole 还有很多其他意思啊。
&lt;/p&gt;

&lt;p&gt;
鼹鼠也是 mole，德语是 der Maulwurf。法语是 la taupe。
&lt;/p&gt;

&lt;p&gt;
痣也是 mole 。德语叫 der Leberfleck，统称 Mal，das Muttermal就是妈妈给的痣，就是胎记。法语给了它一个很好听的名字 la grain de beauté，美丽点？
&lt;/p&gt;

&lt;p&gt;
&lt;b&gt;References&lt;/b&gt;
&lt;/p&gt;

&lt;style&gt;.csl-entry{text-indent: -1.5em; margin-left: 1.5em;}&lt;/style&gt;&lt;div class=&quot;csl-bib-body&quot;&gt;
  &lt;div class=&quot;csl-entry&quot;&gt;&lt;a id=&quot;citeproc_bib_item_1&quot;&gt;&lt;/a&gt;ABB. 2011. “Symphony plus S+ Turbine.” ABB.&lt;/div&gt;
&lt;/div&gt;
</content>
 </entry>
 
 <entry>
   <title>单词本：ropes</title>
   <link href="http://kimi.im/2024-07-22-ropes"/>
   <updated>2024-07-22T00:00:00+00:00</updated>
   <id>http://kimi.im/ropes</id>
   <content type="html">&lt;p&gt;
这几天看《组织行为学》(&lt;a href=&quot;#citeproc_bib_item_2&quot;&gt;&lt;i&gt;Organizational Behavior&lt;/i&gt; 2005&lt;/a&gt;)，看到组织文化这一章，介绍了什么是组织文化：
&lt;/p&gt;

&lt;p&gt;
Organizational culture represents a complex pattern of beliefs,
expectations, ideas, values, attitudes, and behaviours shared by the
members of an organization that evolve over time.
&lt;/p&gt;

&lt;p&gt;
所谓组织文化就是一个组织经过长时间的磨合，形成的一系列复杂的模式，这些模式由信仰、期许、想法、价值观、态度、成员共有的行为组成。
&lt;/p&gt;

&lt;p&gt;
具体来说，组织文化可以是：
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;重复使用的沟通方式&lt;/li&gt;
&lt;li&gt;员工共同遵守的规则，如领导是否有专属车位&lt;/li&gt;
&lt;li&gt;重要的价值观，如质量文化、价格策略&lt;/li&gt;
&lt;li&gt;管理层制定决策的逻辑和哲学&lt;/li&gt;
&lt;li&gt;环境和氛围，比如领导是单独大办公室，还是和普通员工一样用格子间&lt;/li&gt;
&lt;li&gt;在组织中如鱼得水的游戏规则。这里，作者提到这些规则就是 &lt;b&gt;the ropes&lt;/b&gt;
that a newcomer must learn in order to become an accepted member&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
the ropes 字面看起来就是绳索的复数形式呀。其实它的意思是办事的既定程序。这个词其实是水手的黑话。大概在船上工作的话，一定要知道绳子在哪里，所以是新手的第一课。
&lt;/p&gt;

&lt;p&gt;
于是，to know the ropes 意思是知道办事规矩。
&lt;/p&gt;

&lt;p&gt;
to show sb the ropes 向某人演示操作程序。(&lt;a href=&quot;#citeproc_bib_item_1&quot;&gt;&lt;i&gt;Apple Dictionary&lt;/i&gt; 2024&lt;/a&gt;)
&lt;/p&gt;

&lt;p&gt;
除此之外，on the ropes 也有特殊的意义。在拳击赛场周围会有围绳。如果有个拳击手已经被逼到了围绳上了。那就是濒临失败了。
&lt;/p&gt;

&lt;p&gt;
behind its apparent success the bank was actually &lt;b&gt;on the ropes&lt;/b&gt;. 银行看起来很成功，其实已经濒临破产了。
&lt;/p&gt;

&lt;p&gt;
&lt;b&gt;References&lt;/b&gt;
&lt;/p&gt;

&lt;style&gt;.csl-entry{text-indent: -1.5em; margin-left: 1.5em;}&lt;/style&gt;&lt;div class=&quot;csl-bib-body&quot;&gt;
  &lt;div class=&quot;csl-entry&quot;&gt;&lt;a id=&quot;citeproc_bib_item_1&quot;&gt;&lt;/a&gt;&lt;i&gt;Apple Dictionary&lt;/i&gt;. 2024. Apple.&lt;/div&gt;
  &lt;div class=&quot;csl-entry&quot;&gt;&lt;a id=&quot;citeproc_bib_item_2&quot;&gt;&lt;/a&gt;&lt;i&gt;Organizational Behavior&lt;/i&gt;. 2005. South-Western College Pub.&lt;/div&gt;
&lt;/div&gt;
</content>
 </entry>
 
 <entry>
   <title>单词本：plunge</title>
   <link href="http://kimi.im/2024-07-22-plunge"/>
   <updated>2024-07-22T00:00:00+00:00</updated>
   <id>http://kimi.im/plunge</id>
   <content type="html">&lt;p&gt;
还是在组织行为学一书(&lt;a href=&quot;#citeproc_bib_item_1&quot;&gt;&lt;i&gt;Organizational Behavior&lt;/i&gt; 2005&lt;/a&gt;)中看到。看了两个星期了，已经看到倒数第二章，培养组织文化。
&lt;/p&gt;

&lt;p&gt;
这里引用了一个TDIndustries 的案例，引出企业文化的重要性。要了解一个组织的灵魂的话：
&lt;/p&gt;

&lt;p&gt;
To understand the soul of an organization requires &lt;b&gt;plunging&lt;/b&gt; below the
charts, financial numbers, machines, and buildings into the world of
organizational culture.
&lt;/p&gt;

&lt;p&gt;
这里，作者用了 &lt;b&gt;plunge&lt;/b&gt; 一词，意思是纵身跳下。其实，仔细观察，可以发现，这个词跟 plumb 有些相似。我们之前在《&lt;a href=&quot;../../../../../../../Library/CloudStorage/OneDrive-ABB/Briefcase/notes/kimi.im/_notes/_posts/language/2024-05-19-aplomb.html#ID-E0A84A31-E788-4CE3-BDA2-1569F630A4CE&quot;&gt;单词本： aplomb&lt;/a&gt; 》学到过，aplomb 源自 plumb 铅锤。拉丁语 plumbum，也是铅的元素名。
&lt;/p&gt;

&lt;p&gt;
我们知道，语言的演进都是先实物，后抽象。先具体，后概念的。plumbum 铅，很重，就会快速落下，所以就由铅引申为重，由重引申为俯冲。
&lt;/p&gt;

&lt;p&gt;
to &lt;b&gt;plunge&lt;/b&gt; into the river. 纵身跳进河里。
&lt;/p&gt;

&lt;p&gt;
由俯冲引申为陷入。
&lt;/p&gt;

&lt;p&gt;
the country &lt;b&gt;plunged&lt;/b&gt; into chaos. 这个国家陷入混乱。
&lt;/p&gt;

&lt;p&gt;
还有股票价格暴跌。a &lt;b&gt;plunge&lt;/b&gt; in share prices. 注意，这里 plunge 已经变成名词了。
&lt;/p&gt;

&lt;p&gt;
它还能当形容词a &lt;b&gt;plunging&lt;/b&gt; neckline很低的领口，也就是深 V 字领。法语叫un
dé collet é plongeant.
&lt;/p&gt;

&lt;p&gt;
另外，有没有发现，这个词和之前学到过的词语类似，这个词也是来自法语：
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;&lt;a href=&quot;2022-11-03-english-triage.html#ID-EAE526DC-AF26-432B-BA14-E99149097F82&quot;&gt;单词本：triage&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;2023-01-07-english-sabotage.html#ID-CCD154D0-E341-4CD4-A4B3-1A92096348DD&quot;&gt;单词本：sabotage&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;2023-01-08-english-arbitrage.html#ID-E3AD9BD4-09F6-4FA0-98CF-5AEF6BE8533E&quot;&gt;单词本：arbitrage&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
&lt;b&gt;References&lt;/b&gt;
&lt;/p&gt;

&lt;style&gt;.csl-entry{text-indent: -1.5em; margin-left: 1.5em;}&lt;/style&gt;&lt;div class=&quot;csl-bib-body&quot;&gt;
  &lt;div class=&quot;csl-entry&quot;&gt;&lt;a id=&quot;citeproc_bib_item_1&quot;&gt;&lt;/a&gt;&lt;i&gt;Organizational Behavior&lt;/i&gt;. 2005. South-Western College Pub.&lt;/div&gt;
&lt;/div&gt;
</content>
 </entry>
 
 <entry>
   <title>单词本：accolade</title>
   <link href="http://kimi.im/2024-07-22-accolade"/>
   <updated>2024-07-22T00:00:00+00:00</updated>
   <id>http://kimi.im/accolade</id>
   <content type="html">&lt;p&gt;
Bonnie Reitz Continental Airlines 销售和分销高级副总裁，在经历 911 事件之后，提出了一些主张，帮助航空企业渡过危机。(&lt;a href=&quot;#citeproc_bib_item_1&quot;&gt;&lt;i&gt;Organizational Behavior&lt;/i&gt; 2005&lt;/a&gt;)
这些主张分别是
&lt;/p&gt;

&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;倾听客户&lt;/li&gt;
&lt;li&gt;专注目标&lt;/li&gt;
&lt;li&gt;不断行动&lt;/li&gt;
&lt;li&gt;测量进度&lt;/li&gt;
&lt;li&gt;及时反馈&lt;/li&gt;
&lt;li&gt;问心无愧&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
在提到不断行动的时候，她说：All those &lt;b&gt;accolades&lt;/b&gt; we got yesterday?
Poof! They were yesterday. It&amp;rsquo;s today, and we&amp;rsquo;ve got to do it again.
&lt;/p&gt;

&lt;p&gt;
这里 &lt;b&gt;accolade&lt;/b&gt; 指的是荣誉和赞扬。
&lt;/p&gt;

&lt;p&gt;
这个词来自拉丁语 adcollum ，ad-有 at, to 的意思，而 collum 指的是脖子领口。
&lt;/p&gt;

&lt;p&gt;
&lt;b&gt;accolade&lt;/b&gt; 的本意是古时候骑士称号的授予仪式，君主会用剑搭在骑士的肩膀上，把奖牌挂在骑士的脖子上。
&lt;/p&gt;

&lt;p&gt;
&lt;b&gt;References&lt;/b&gt;
&lt;/p&gt;

&lt;style&gt;.csl-entry{text-indent: -1.5em; margin-left: 1.5em;}&lt;/style&gt;&lt;div class=&quot;csl-bib-body&quot;&gt;
  &lt;div class=&quot;csl-entry&quot;&gt;&lt;a id=&quot;citeproc_bib_item_1&quot;&gt;&lt;/a&gt;&lt;i&gt;Organizational Behavior&lt;/i&gt;. 2005. South-Western College Pub.&lt;/div&gt;
&lt;/div&gt;
</content>
 </entry>
 
 <entry>
   <title>单词本：tug-of-war</title>
   <link href="http://kimi.im/2024-07-18-tug-of-war"/>
   <updated>2024-07-18T00:00:00+00:00</updated>
   <id>http://kimi.im/tug-of-war</id>
   <content type="html">&lt;p&gt;
昨天看信息安全论文，文中提到信息安全专家和他们的对手实际上一直在进行这无休止的拔河比赛：
&lt;/p&gt;

&lt;p&gt;
Cyber security experts and cyber adversaries are effectively in a
continuous &lt;b&gt;tug-of-war&lt;/b&gt;.
&lt;/p&gt;

&lt;p&gt;
三等黑客利用已经发现的系统漏洞进行攻击，二等黑客发掘系统漏洞，一等黑客制造系统漏洞。系统漏洞不断被探测出来，信息安全人员也要不断的去修补漏洞，检测攻击软件。于是就有了文中 &lt;b&gt;tug-of-war&lt;/b&gt; 这一形象的说法。
&lt;/p&gt;

&lt;p&gt;
&lt;b&gt;tug-of-war&lt;/b&gt; 直面意思就是战争的拖拉，也就是拔河比赛，引申为激烈的争夺。
&lt;/p&gt;

&lt;p&gt;
比如印度快报的这则消息：Railways, Sundargarh administration in &lt;b&gt;tug of
war&lt;/b&gt; over squatters in stalled construction project in Odisha 因为印度建设铁路速度慢，铁路工地又被人非法占据了。于是建设局和非法占地者展开了激烈的拔河式争夺。&lt;sup&gt;&lt;a id=&quot;fnr.1&quot; class=&quot;footref&quot; href=&quot;#fn.1&quot; role=&quot;doc-backlink&quot;&gt;1&lt;/a&gt;&lt;/sup&gt;
&lt;/p&gt;

&lt;p&gt;
最近&lt;a href=&quot;2024-07-16-hillibilly.html#ID-35C1D482-7BCA-4A5E-BF5F-AE122891E33A&quot;&gt;Hillbilly Elegy的作者James David Vance&lt;/a&gt;被提名为副总统候选人。背后似乎也是很多的权力竞争，特朗普的儿子Donald Trump Jr.似乎花了精力：
&lt;/p&gt;

&lt;p&gt;
Trump Jr. had spent months correcting what he calls the “lies of
omission” from Republicans who wanted to keep Vance from becoming vice
president.
&lt;/p&gt;

&lt;p&gt;
所以才会在拔河般竞争之后露出笑容：Don Jr basks in Vance spotlight
after VP &lt;b&gt;tug of war&lt;/b&gt;. &lt;sup&gt;&lt;a id=&quot;fnr.2&quot; class=&quot;footref&quot; href=&quot;#fn.2&quot; role=&quot;doc-backlink&quot;&gt;2&lt;/a&gt;&lt;/sup&gt;
&lt;/p&gt;

&lt;p&gt;
法语里拔河是le gagne-terrain土地上的战争。瑞典语则是 dragkamp 拖拉战。
&lt;/p&gt;
&lt;div id=&quot;footnotes&quot;&gt;
&lt;h2 class=&quot;footnotes&quot;&gt;Footnotes: &lt;/h2&gt;
&lt;div id=&quot;text-footnotes&quot;&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.1&quot; class=&quot;footnum&quot; href=&quot;#fnr.1&quot; role=&quot;doc-backlink&quot;&gt;1&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot; role=&quot;doc-footnote&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
印度快报，Indian Express,
&lt;a href=&quot;https://www.newindianexpress.com/states/odisha/2024/Jul/17/railways-sundargarh-administration-in-tug-of-war-over-squatters-in-stalled-construction-project-in-odisha&quot;&gt;https://www.newindianexpress.com/states/odisha/2024/Jul/17/railways-sundargarh-administration-in-tug-of-war-over-squatters-in-stalled-construction-project-in-odisha&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.2&quot; class=&quot;footnum&quot; href=&quot;#fnr.2&quot; role=&quot;doc-backlink&quot;&gt;2&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot; role=&quot;doc-footnote&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
华盛顿观察家报 Washington Examiner, Don Jr basks in Vance
spotlight after VP tug of war,
&lt;a href=&quot;https://www.washingtonexaminer.com/news/campaigns/presidential/3086517/don-jr-vance-spotlight-vp-tug-of-war/&quot;&gt;https://www.washingtonexaminer.com/news/campaigns/presidential/3086517/don-jr-vance-spotlight-vp-tug-of-war/&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;


&lt;/div&gt;
&lt;/div&gt;</content>
 </entry>
 
 <entry>
   <title>单词本：integrity</title>
   <link href="http://kimi.im/2024-07-17-integrity"/>
   <updated>2024-07-17T00:00:00+00:00</updated>
   <id>http://kimi.im/integrity</id>
   <content type="html">&lt;p&gt;
信息安全的三个最主要的要求是机密、完整、可用，即 confidentiality,
&lt;b&gt;integrity&lt;/b&gt; and availability.
&lt;/p&gt;

&lt;p&gt;
&lt;b&gt;integrity&lt;/b&gt; 的意思是诚实、正直、完整。源自拉丁语 integer 的名词形式为
integritas 完整性。而拉丁语 integer 完整的，现在 integer 的意思是整数，也有整体的意思。。
&lt;/p&gt;

&lt;p&gt;
integrity 的读音为[ɪnˈtɛɡrɪti]重音在第二音节。integral 完整的、整体的、也是积分的意思。其读音为[ˈɪntɪɡrəl]重音又在第一音节了。
&lt;/p&gt;

&lt;p&gt;
No one doubted that the president was a man of the highest &lt;b&gt;integrity&lt;/b&gt;
(正直).
&lt;/p&gt;

&lt;p&gt;
Keen to preserve his artistic &lt;b&gt;integrity&lt;/b&gt; (艺德), he refused several
lucrative Hollywood offers.
&lt;/p&gt;

&lt;p&gt;
另外，integrate 是个动词，重音也在第一个音节。它的意思是成为一个整体。
&lt;/p&gt;

&lt;p&gt;
integrate 可以作为及物动词用：The policy is to &lt;b&gt;integrate&lt;/b&gt; children with
special needs into ordinary schools.
&lt;/p&gt;

&lt;p&gt;
也可以做不及物动词用：
&lt;/p&gt;

&lt;p&gt;
These programs will &lt;b&gt;integrate&lt;/b&gt; with your existing software.
&lt;/p&gt;

&lt;p&gt;
They didn&amp;rsquo;t &lt;b&gt;integrate&lt;/b&gt; with the other children.
&lt;/p&gt;

&lt;p&gt;
integration 则是成为一个整体的动作结果：His music is an &lt;b&gt;integration&lt;/b&gt; of
tradition and new technology. 他的音乐是传统和现代技术的融合/综合。
&lt;/p&gt;

&lt;p&gt;
数学上，integral 是积分，而积分法又叫 integration。
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>单词本：courageously</title>
   <link href="http://kimi.im/2024-07-17-courageously"/>
   <updated>2024-07-17T00:00:00+00:00</updated>
   <id>http://kimi.im/courageously</id>
   <content type="html">&lt;p&gt;
昨天看到公司董事长发了一个文章表扬一个印度人勇敢的对当地政府的索贿行为提出质疑。在文章中，他用到了 courageously ：
&lt;/p&gt;

&lt;p&gt;
employees have &lt;b&gt;courageously&lt;/b&gt; spoken up and taken the right actions.
&lt;/p&gt;

&lt;p&gt;
一直以来，我知道勇敢勇气的名词是 courage 原来还能改成形容词副词用：
courageous/courageously。
&lt;/p&gt;

&lt;p&gt;
不过，读音也变化了。courage 是[ˈkʌrɪdʒ]而 courageous 则是
[kəˈreɪdʒəs]，而且重音还在第二音节。
&lt;/p&gt;

&lt;p&gt;
China Daily 用了这个词介绍胡友平女士英勇救人的事迹：Hu Youping, the
Chinese woman who &lt;b&gt;courageously&lt;/b&gt; intervened to prevent a criminal from
harming a Japanese mother and child, has passed away despite rescue
efforts, according to an announcement released by the Suzhou Public
Security Bureau in Jiangsu province on Friday morning. &lt;sup&gt;&lt;a id=&quot;fnr.1&quot; class=&quot;footref&quot; href=&quot;#fn.1&quot; role=&quot;doc-backlink&quot;&gt;1&lt;/a&gt;&lt;/sup&gt;
&lt;/p&gt;

&lt;p&gt;
好莱坞明星Shelly Duvall勇敢地说出自己的心理问题：In 2016, Duvall
&lt;b&gt;courageously&lt;/b&gt; appeared on Dr. Phil, opening up about her mental health
struggles and stating: &amp;ldquo;I am very sick. I need help.&amp;rdquo; &lt;sup&gt;&lt;a id=&quot;fnr.2&quot; class=&quot;footref&quot; href=&quot;#fn.2&quot; role=&quot;doc-backlink&quot;&gt;2&lt;/a&gt;&lt;/sup&gt;
&lt;/p&gt;

&lt;p&gt;
勇敢的表达还有其他几种形象的词语：
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;lionhearted 狮心的、豪胆的、勇猛的&lt;/li&gt;
&lt;li&gt;rock-ribbed 石头肋骨的、坚决的&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;footnotes&quot;&gt;
&lt;h2 class=&quot;footnotes&quot;&gt;Footnotes: &lt;/h2&gt;
&lt;div id=&quot;text-footnotes&quot;&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.1&quot; class=&quot;footnum&quot; href=&quot;#fnr.1&quot; role=&quot;doc-backlink&quot;&gt;1&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot; role=&quot;doc-footnote&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
Suzhou woman who intervened to save Japanese dies
&lt;a href=&quot;http://www.chinadailyglobal.com/a/202406/28/WS667e1c88a31095c51c50b551.html&quot;&gt;http://www.chinadailyglobal.com/a/202406/28/WS667e1c88a31095c51c50b551.html&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.2&quot; class=&quot;footnum&quot; href=&quot;#fnr.2&quot; role=&quot;doc-backlink&quot;&gt;2&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot; role=&quot;doc-footnote&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
Shelley Duvall cause of death: What did the legendary &amp;rsquo;The
Shining&amp;rsquo; actress die of?
&lt;a href=&quot;https://www.marca.com/en/lifestyle/movies/2024/07/11/668ffedb22601d2c208b4573.html&quot;&gt;https://www.marca.com/en/lifestyle/movies/2024/07/11/668ffedb22601d2c208b4573.html&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;


&lt;/div&gt;
&lt;/div&gt;</content>
 </entry>
 
 <entry>
   <title>单词：sedentary</title>
   <link href="http://kimi.im/2024-07-16-sedentary"/>
   <updated>2024-07-16T00:00:00+00:00</updated>
   <id>http://kimi.im/sedentary</id>
   <content type="html">&lt;p&gt;
美国有个非营利性机构Wellness Council of America（ WELLCOA ），其存在的目的主要是为了推进健康工作和生活习惯。(&lt;a href=&quot;#citeproc_bib_item_2&quot;&gt;&lt;i&gt;Organizational Behavior&lt;/i&gt; 2005&lt;/a&gt;) 根据统计，很多问题是跟职业压力相关：
&lt;/p&gt;

&lt;p&gt;
The leading causes of illness are often preventable. Such causes
include tobacco use, alcohol and substance abuses, &lt;b&gt;sedentary&lt;/b&gt;
lifestyles, poor nutritional habits, excessive and unnecessary
stressors in the workplace, and inadequate employee abilities to cope
with stress.
&lt;/p&gt;

&lt;p&gt;
这里列举了很多和职业压力相关的不健康习惯，其中一个 &lt;b&gt;sedentary&lt;/b&gt; lifestyle
就是久坐的生活方式。很容易推断出来， &lt;b&gt;sedentary&lt;/b&gt; 源自拉丁语 sedere 也就是英语里的 sit。
&lt;/p&gt;

&lt;p&gt;
we all walk a certain amount every day even if we are
&lt;b&gt;sedentary&lt;/b&gt;. (&lt;a href=&quot;#citeproc_bib_item_1&quot;&gt;&lt;i&gt;Apple Dictionary&lt;/i&gt; 2024&lt;/a&gt;)
&lt;/p&gt;

&lt;p&gt;
德语是久坐的形容词是 sitzend 看起来和 sit 更接近写。eine &lt;b&gt;sitzende&lt;/b&gt;
Lebensweise haben 拥有一个久坐的人生。法语为 s édentaire可以看出，英语的 sedentary 是从法语来传进来的。
&lt;/p&gt;

&lt;p&gt;
瑞典语和德语比较接近 sittande 近似 sitzend 了。
&lt;/p&gt;

&lt;p&gt;
久坐肯定不好，所以，我弄了一个显示器之家，立柱款的，高度 50cm 。这样我的显示器就可以上下调节，拉高了可以站着，拉低了可以坐着。为了保持桌面干净，我没有考虑升降台那种的。因为它会占据一大片桌面。
&lt;/p&gt;

&lt;p&gt;
我的做法是一个立柱，加一个键盘托和鼠标托。键盘托鼠标托根据实际高度要求从淘宝定制的长方体环状松木架，没上油漆，天然环保。
&lt;/p&gt;

&lt;p&gt;
这样一来，我要立着办公的话，就把木架一摆，显示器往上一拉就可以了。我要坐着办公的话，把把显示器拉下来，木架撤到桌子底下，这样桌面还是保持清爽。我尽量让桌面整片都是空的。去除各种干扰，比较有助于专注。
&lt;/p&gt;

&lt;p&gt;
一般来说，我上午站立办公，下午坐着办公。或者换一换。一天下来，就不存在久坐的问题啦。
&lt;/p&gt;

&lt;p&gt;
&lt;b&gt;References&lt;/b&gt;
&lt;/p&gt;

&lt;style&gt;.csl-entry{text-indent: -1.5em; margin-left: 1.5em;}&lt;/style&gt;&lt;div class=&quot;csl-bib-body&quot;&gt;
  &lt;div class=&quot;csl-entry&quot;&gt;&lt;a id=&quot;citeproc_bib_item_1&quot;&gt;&lt;/a&gt;&lt;i&gt;Apple Dictionary&lt;/i&gt;. 2024. Apple.&lt;/div&gt;
  &lt;div class=&quot;csl-entry&quot;&gt;&lt;a id=&quot;citeproc_bib_item_2&quot;&gt;&lt;/a&gt;&lt;i&gt;Organizational Behavior&lt;/i&gt;. 2005. South-Western College Pub.&lt;/div&gt;
&lt;/div&gt;
</content>
 </entry>
 
 <entry>
   <title>单词：lackadaisical</title>
   <link href="http://kimi.im/2024-07-16-lackadaisical"/>
   <updated>2024-07-16T00:00:00+00:00</updated>
   <id>http://kimi.im/lackadaisical</id>
   <content type="html">&lt;p&gt;
管理员工绩效的时候，目标设定非常重要。目标设定就是给员工或团体设定一个有挑战的目标。
&lt;/p&gt;

&lt;p&gt;
设定目标要遵循两个原则，第一，目标要有一定的难度，第二，目标设定要清晰明确。
&lt;/p&gt;

&lt;p&gt;
如果目标设定不够有挑战。If it is too easy, the individual may delay or
approach the goal &lt;b&gt;lackadaisically&lt;/b&gt;. (&lt;a href=&quot;#citeproc_bib_item_1&quot;&gt;&lt;i&gt;Organizational Behavior&lt;/i&gt; 2005&lt;/a&gt;)
&lt;/p&gt;

&lt;p&gt;
这里，Don Hellriegel 等人用了这个很生僻的单词 &lt;b&gt;lackadaisical&lt;/b&gt; 。它的意思是萎靡不振。
&lt;/p&gt;

&lt;p&gt;
据说，这个词来自 alack-a-day，是一个语气词，表示后悔叹气：啊，今天真倒霉！
&lt;/p&gt;

&lt;p&gt;
也简写称 alack ，大概是ah + lack组成的。啊，少了。相当于我们的：啊，亏大了。
&lt;/p&gt;

&lt;p&gt;
lackaday 就是 alack-a-day 的一种变体。有时候又变成 lackadaisy，再一变称为形容词 lackadaisical，意思是懒散的、萎靡不振的。
&lt;/p&gt;

&lt;p&gt;
这个词，跟法语里来的 &lt;a href=&quot;2023-06-18-nonchalant.html#ID-53ADB451-5D41-4EC9-97E6-F41C9E423C65&quot;&gt;nonchalant&lt;/a&gt; 意思差不多。
&lt;/p&gt;

&lt;p&gt;
这则新闻说英国北爱尔兰议会议员、社会民主工党成员Mark H. Durkan批评教育部长对Holiday Hunger 的提议好不感兴趣。15th July 2024, SDLP MLA Mark
H. Durkan criticises &lt;b&gt;lackadaisical&lt;/b&gt; response from Education Minister on
holiday hunger. &lt;sup&gt;&lt;a id=&quot;fnr.1&quot; class=&quot;footref&quot; href=&quot;#fn.1&quot; role=&quot;doc-backlink&quot;&gt;1&lt;/a&gt;&lt;/sup&gt; 所谓的Holiday Hunger指的是 Holiday Hunger
Payment Scheme，北爱尔兰的小朋友除了免费上学，暑假还能得到一笔伙食补贴。但是伙食补贴只覆盖30%的小朋友。Durkan 议员可能提议扩大覆盖范围。英国百姓日子不太好过，政府好像也没多少钱了。
&lt;/p&gt;

&lt;p&gt;
在印度，国会职责莫迪政府执行《安得拉邦重组法》进度懒散：
&lt;/p&gt;

&lt;p&gt;
The Congress on Thursday claimed that the Andhra Pradesh
Reorganisation Act&lt;sup&gt;&lt;a id=&quot;fnr.2&quot; class=&quot;footref&quot; href=&quot;#fn.2&quot; role=&quot;doc-backlink&quot;&gt;2&lt;/a&gt;&lt;/sup&gt; 2014 was implemented by the Modi government at a
&amp;ldquo;&lt;b&gt;lackadaisical&lt;/b&gt; pace&amp;rdquo;.&lt;sup&gt;&lt;a id=&quot;fnr.3&quot; class=&quot;footref&quot; href=&quot;#fn.3&quot; role=&quot;doc-backlink&quot;&gt;3&lt;/a&gt;&lt;/sup&gt;
&lt;/p&gt;

&lt;p&gt;
&lt;b&gt;References&lt;/b&gt;
&lt;/p&gt;

&lt;style&gt;.csl-entry{text-indent: -1.5em; margin-left: 1.5em;}&lt;/style&gt;&lt;div class=&quot;csl-bib-body&quot;&gt;
  &lt;div class=&quot;csl-entry&quot;&gt;&lt;a id=&quot;citeproc_bib_item_1&quot;&gt;&lt;/a&gt;&lt;i&gt;Organizational Behavior&lt;/i&gt;. 2005. South-Western College Pub.&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;footnotes&quot;&gt;
&lt;h2 class=&quot;footnotes&quot;&gt;Footnotes: &lt;/h2&gt;
&lt;div id=&quot;text-footnotes&quot;&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.1&quot; class=&quot;footnum&quot; href=&quot;#fnr.1&quot; role=&quot;doc-backlink&quot;&gt;1&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot; role=&quot;doc-footnote&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;https://www.derryjournal.com/news/people/derry-mla-criticises-lackadaisical-response-from-education-minister-on-holiday-hunger-4703521&quot;&gt;https://www.derryjournal.com/news/people/derry-mla-criticises-lackadaisical-response-from-education-minister-on-holiday-hunger-4703521&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.2&quot; class=&quot;footnum&quot; href=&quot;#fnr.2&quot; role=&quot;doc-backlink&quot;&gt;2&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot; role=&quot;doc-footnote&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;https://www.indiacode.nic.in/bitstream/123456789/2123/1/A2014-6.pdf&quot;&gt;https://www.indiacode.nic.in/bitstream/123456789/2123/1/A2014-6.pdf&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.3&quot; class=&quot;footnum&quot; href=&quot;#fnr.3&quot; role=&quot;doc-backlink&quot;&gt;3&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot; role=&quot;doc-footnote&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;https://www.business-standard.com/politics/can-expect-implementation-of-ap-reorganisation-act-now-cong-s-jab-at-pm-124071100332_1.html&quot;&gt;https://www.business-standard.com/politics/can-expect-implementation-of-ap-reorganisation-act-now-cong-s-jab-at-pm-124071100332_1.html&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;


&lt;/div&gt;
&lt;/div&gt;</content>
 </entry>
 
 <entry>
   <title>单词本：hillibilly</title>
   <link href="http://kimi.im/2024-07-16-hillibilly"/>
   <updated>2024-07-16T00:00:00+00:00</updated>
   <id>http://kimi.im/hillibilly</id>
   <content type="html">&lt;p&gt;
7月 15 日，特朗普提名了副总统候选人， 39 岁的俄亥俄州参议员 James David
Vance 。这个年轻的副总统候选人是草根出生，曾写过一本书叫作 Hillbilly
Elegy，翻译为乡巴佬的悲歌。
&lt;/p&gt;

&lt;p&gt;
这本书以J. D. Vance自己的成长经历为蓝本，描绘了美国底层白人向上流动过程的艰辛。
&lt;/p&gt;

&lt;p&gt;
Billy 是这些人常用的名字，而 Hill 则是小山，合在一起的 Hillbilly 是比较有歧视意思的区乡巴佬的称呼了。其实 Billy 是 William 的一个昵称形式。看来有时候 W 和 B 也会互换着使用的么。
&lt;/p&gt;

&lt;p&gt;
Elegy 则来自拉丁语 elegos 悲伤的诗歌、挽歌、悼文。比如 he wrote
&lt;b&gt;elegies&lt;/b&gt; for friends who died during the war. (&lt;a href=&quot;#citeproc_bib_item_1&quot;&gt;&lt;i&gt;Apple Dictionary&lt;/i&gt; 2024&lt;/a&gt;)
&lt;/p&gt;

&lt;p&gt;
Hillbilly Vance 的家庭背景可以说是非常糟糕，而能侥幸称为上流人物，概率可以算极低了。这个本书或许可以让我们理解，为什么美国的红脖子这么支持
MAGA 的特朗普。
&lt;/p&gt;

&lt;p&gt;
&lt;b&gt;References&lt;/b&gt;
&lt;/p&gt;

&lt;style&gt;.csl-entry{text-indent: -1.5em; margin-left: 1.5em;}&lt;/style&gt;&lt;div class=&quot;csl-bib-body&quot;&gt;
  &lt;div class=&quot;csl-entry&quot;&gt;&lt;a id=&quot;citeproc_bib_item_1&quot;&gt;&lt;/a&gt;&lt;i&gt;Apple Dictionary&lt;/i&gt;. 2024. Apple.&lt;/div&gt;
&lt;/div&gt;
</content>
 </entry>
 
 <entry>
   <title>单词本：confection</title>
   <link href="http://kimi.im/2024-07-15-confection"/>
   <updated>2024-07-15T00:00:00+00:00</updated>
   <id>http://kimi.im/confection</id>
   <content type="html">&lt;p&gt;
Hellriegel的“Organizational Behavior”一书(&lt;a href=&quot;#citeproc_bib_item_2&quot;&gt;&lt;i&gt;Organizational Behavior&lt;/i&gt; 2005&lt;/a&gt;)在讲到跨职能团队的时候，举了雀巢的例子。雀巢曾有一次调整他们分布式的职能部门，改成跨职能团队：
&lt;/p&gt;

&lt;p&gt;
Nestlé changed its decentralized functional organization in its
chocolate and &lt;b&gt;confections&lt;/b&gt; division to cross-functional teams.
&lt;/p&gt;

&lt;p&gt;
这里说雀巢的职能团队主要有两个业务部门，分别是 chocolate 巧克力和
&lt;b&gt;confection&lt;/b&gt; 糕点部门。
&lt;/p&gt;

&lt;p&gt;
有的词典说这个 &lt;b&gt;confection&lt;/b&gt; 糕饼和蜜饯(&lt;a href=&quot;#citeproc_bib_item_1&quot;&gt;&lt;i&gt;Apple Dictionary&lt;/i&gt; 2024&lt;/a&gt;)，应该是那种甜甜的，需要一定的制作工艺的甜品吧。
&lt;/p&gt;

&lt;p&gt;
从词源上看， &lt;b&gt;confection&lt;/b&gt; 是由 con- 和 fection 组成。con- 不用说，我们已经见过很多次了，比如&lt;a href=&quot;../../../../../../../Library/CloudStorage/OneDrive-ABB/Briefcase/notes/kimi.im/_notes/_posts/language/2022-04-02-english-confiscate.html#ID-E32D3FCB-97F5-4EAE-96F0-039821A2005B&quot;&gt;单词本： confiscate&lt;/a&gt; ，它的意思是一块儿、一起。而
fection 则来自 ficere 制作的意思。法语 faire 应该也是源自 ficere。那么
confection 就是一起制作，或者制作在一起。也就是把糖啊、水果啊、奶油啊、坚果啊什么的放在一起，做出来的东西了。
&lt;/p&gt;

&lt;p&gt;
当然，除了糕饼、蜜饯外，confection 还表示精工制作的物品。这个词义可以理解为很多人一块儿制作吧。
&lt;/p&gt;

&lt;p&gt;
比如the mosque was a confection of domes and minarets.这座清真寺由拱顶和光塔组成，工艺复杂精美。(&lt;a href=&quot;#citeproc_bib_item_1&quot;&gt;&lt;i&gt;Apple Dictionary&lt;/i&gt; 2024&lt;/a&gt;)
&lt;/p&gt;

&lt;p&gt;
德语为das Konfekt，法语为 la confiserie看起来和英语 &lt;b&gt;confection&lt;/b&gt;是三个同源的好兄弟姐妹。其中德语是中性的，法语是阴性的。
&lt;/p&gt;

&lt;p&gt;
德语die Konfiserie又是甜品糕点店的意思。这一层又好像是从法语里学去的。
&lt;/p&gt;

&lt;p&gt;
&lt;b&gt;References&lt;/b&gt;
&lt;/p&gt;

&lt;style&gt;.csl-entry{text-indent: -1.5em; margin-left: 1.5em;}&lt;/style&gt;&lt;div class=&quot;csl-bib-body&quot;&gt;
  &lt;div class=&quot;csl-entry&quot;&gt;&lt;a id=&quot;citeproc_bib_item_1&quot;&gt;&lt;/a&gt;&lt;i&gt;Apple Dictionary&lt;/i&gt;. 2024. Apple.&lt;/div&gt;
  &lt;div class=&quot;csl-entry&quot;&gt;&lt;a id=&quot;citeproc_bib_item_2&quot;&gt;&lt;/a&gt;&lt;i&gt;Organizational Behavior&lt;/i&gt;. 2005. South-Western College Pub.&lt;/div&gt;
&lt;/div&gt;
</content>
 </entry>
 
 <entry>
   <title>单词本：infighting</title>
   <link href="http://kimi.im/2024-07-14-infighting"/>
   <updated>2024-07-14T00:00:00+00:00</updated>
   <id>http://kimi.im/infighting</id>
   <content type="html">&lt;p&gt;
根据布鲁斯•塔克曼 (Bruce Tuckman)的团队发展阶段（Stages of Team
Development）模型。团队发展分为五个阶段：组建期（ Forming ）、激荡期（ Storming ）、规范期（ Norming ）、执行期（ Performing ）和休整期（ Adjourning ）。(&lt;a href=&quot;#citeproc_bib_item_2&quot;&gt;Tuckman and Jensen 1977&lt;/a&gt;)
&lt;/p&gt;

&lt;p&gt;
根据 Tuckman，所有五个阶段都是必须的、不可逾越的，团队在成长、迎接挑战、处理问题、发现方案、规划、处置结果等一系列经历过程中必然要经过上述五个阶段。
&lt;/p&gt;

&lt;p&gt;
Hellriegel (&lt;a href=&quot;#citeproc_bib_item_1&quot;&gt;&lt;i&gt;Organizational Behavior&lt;/i&gt; 2005&lt;/a&gt;) 介绍了一个团队激荡期的案例，在能力参差不齐的一个团队中，出现了以下这些情况：
&lt;/p&gt;

&lt;p&gt;
But, in most cases, the teams seemed to become stuck in the storming
stage. The more skilled employees on many of the teams pitted
themselves against slower team members, which damaged morale and
triggered &lt;b&gt;infighting&lt;/b&gt;. Threats and insults became common. Longtime
friendships dissolved as faster workers tried to banish slower ones.
&lt;/p&gt;

&lt;p&gt;
这里，作者用了 infighting 表示内讧。很容易理解，in- 表示内部，fighting
则是争斗。也就是内部的争斗，内讧。
&lt;/p&gt;

&lt;p&gt;
&lt;b&gt;infighting&lt;/b&gt; between departments grew worse. 部门间的内讧变得严重了。
&lt;/p&gt;

&lt;p&gt;
the split was designed to end political &lt;b&gt;infighting&lt;/b&gt;. 部门划分是为了结束内部的政治斗争。
&lt;/p&gt;

&lt;p&gt;
前面那段文字里还用到了pit oneself against sb与某人竞争。
&lt;/p&gt;

&lt;p&gt;
to pit one&amp;rsquo;s wits against sb. 与某人斗智斗勇。
&lt;/p&gt;

&lt;p&gt;
团队的激荡期是比较关键的时期，如果没处理好，会出现混乱，原来的好同事也会成为敌人了。这时候也不能选择逃避 suppress 和退缩 withdraw ，要公开公平的表达各个团队成员的意见，才能达成共识。逃避和退缩只会留下后患，成为定时炸弹随时爆炸。
&lt;/p&gt;

&lt;p&gt;
顺利经过了Storming stage，就到了 Norming stage，大家理性的坐下来建立团队合作的规章制度和准则。之后，才能输出团队效能。
&lt;/p&gt;

&lt;p&gt;
&lt;b&gt;References&lt;/b&gt;
&lt;/p&gt;

&lt;style&gt;.csl-entry{text-indent: -1.5em; margin-left: 1.5em;}&lt;/style&gt;&lt;div class=&quot;csl-bib-body&quot;&gt;
  &lt;div class=&quot;csl-entry&quot;&gt;&lt;a id=&quot;citeproc_bib_item_1&quot;&gt;&lt;/a&gt;&lt;i&gt;Organizational Behavior&lt;/i&gt;. 2005. South-Western College Pub.&lt;/div&gt;
  &lt;div class=&quot;csl-entry&quot;&gt;&lt;a id=&quot;citeproc_bib_item_2&quot;&gt;&lt;/a&gt;Tuckman, Bruce W., and M. A. C. Jensen. 1977. “Stages of Small-Group Development Revisited.” &lt;i&gt;Groups and Organization Studies&lt;/i&gt;.&lt;/div&gt;
&lt;/div&gt;
</content>
 </entry>
 
 <entry>
   <title>单词本：hunch</title>
   <link href="http://kimi.im/2024-07-14-hunch"/>
   <updated>2024-07-14T00:00:00+00:00</updated>
   <id>http://kimi.im/hunch</id>
   <content type="html">&lt;p&gt;
Don Hellriegel 的《组织行为学》(&lt;a href=&quot;#citeproc_bib_item_1&quot;&gt;&lt;i&gt;Organizational Behavior&lt;/i&gt; 2005&lt;/a&gt;)在讨论到公正激励模型的时候，说到，如果某个员工感觉到了不公正的待遇的时候，会寻求一些补偿行为。Hellriegel 举了两个员工渎职的案例。其中一个银行女员工，购买了大房子、加入了有钱人俱乐部。俱乐部找公司进行背景调查的时候，该员工的经理觉得该女子的消费超出预期，就进行内部调查，发现她挪用了 180 万美金。
&lt;/p&gt;

&lt;p&gt;
原来是这个女员工长期得不到升职加薪，已经工作了 10 多年，而和她同级的都已经是刚刚毕业的小女生。所以就通过非法手段寻求心理平衡。
&lt;/p&gt;

&lt;p&gt;
On a &lt;b&gt;hunch&lt;/b&gt;, the bank manager initiated an internal investigation,
which uncovered an embezzlement of $1.8 million by the wife.
&lt;/p&gt;

&lt;p&gt;
这里，我们看到 &lt;b&gt;hunch&lt;/b&gt; 这个词。它有两个意思，一个是弯腰驼背的动作或名词，另一个意思就是引文中的意思，直觉。这个词可能来源于 hump 驼峰、土丘。
hump 的可爱化表达就是 humpchen ，这个词跟 hunch 就比较像了。
&lt;/p&gt;

&lt;p&gt;
经理根据直觉on a &lt;b&gt;hunch&lt;/b&gt;，进行调查，发现问题。
&lt;/p&gt;

&lt;p&gt;
He had &lt;b&gt;a hunch&lt;/b&gt; that she was lying. 他凭直觉认为她说的是谎话.
&lt;/p&gt;

&lt;p&gt;
Sometimes you have to be prepared to act follow &lt;b&gt;a hunch&lt;/b&gt;. 有时候，你必须根据直觉行动。
&lt;/p&gt;

&lt;p&gt;
I had &lt;b&gt;a hunch&lt;/b&gt; that you&amp;rsquo;d be here. 直觉告诉我你会来。
&lt;/p&gt;

&lt;p&gt;
&lt;b&gt;References&lt;/b&gt;
&lt;/p&gt;

&lt;style&gt;.csl-entry{text-indent: -1.5em; margin-left: 1.5em;}&lt;/style&gt;&lt;div class=&quot;csl-bib-body&quot;&gt;
  &lt;div class=&quot;csl-entry&quot;&gt;&lt;a id=&quot;citeproc_bib_item_1&quot;&gt;&lt;/a&gt;&lt;i&gt;Organizational Behavior&lt;/i&gt;. 2005. South-Western College Pub.&lt;/div&gt;
&lt;/div&gt;
</content>
 </entry>
 
 <entry>
   <title>单词本：dimple</title>
   <link href="http://kimi.im/2024-07-14-dimple"/>
   <updated>2024-07-14T00:00:00+00:00</updated>
   <id>http://kimi.im/dimple</id>
   <content type="html">&lt;p&gt;
在介绍团队任务与团队规模大小的关系时，Hellriegel
(&lt;a href=&quot;#citeproc_bib_item_2&quot;&gt;&lt;i&gt;Organizational Behavior&lt;/i&gt; 2005&lt;/a&gt;) 举了一个高尔夫球生产操作团队的例子。在执行简单的任务时，团队的规模可以稍稍大一些，比如高尔夫球生产团队由 12-15 人组成。他们做的事情是：
&lt;/p&gt;

&lt;p&gt;
Injection mold operators place golf ball cores in a mold having the
appropriate &lt;b&gt;dimple&lt;/b&gt; pattern. The surlyn cover material is injected
around each core.
&lt;/p&gt;

&lt;p&gt;
高尔夫球表面有小的凹陷，这里用了 &lt;b&gt;dimple&lt;/b&gt; 小坑，这个词也有酒窝、腰窝、涟漪的意思。这个词和德语的 der Tü mpel （池子）是同源的。ein kleiner
&lt;b&gt;Tümpel&lt;/b&gt; schlammigen Wassers 一个泥泞小池子。地上的一个小坑不就是个小水塘么。而 T ümpel又来自古高地德语 tumphilo 水中漩涡。这么看，酒窝也可以写成酒涡么。
&lt;/p&gt;

&lt;p&gt;
Freddie was an angelic-looking child with blond, curly hair, blue
eyes, and &lt;b&gt;dimples&lt;/b&gt;. 弗雷迪是一個有著天使般面孔的孩子，一頭金色的鬈髮，藍色的眼睛，還有一對小酒窩兒。
&lt;/p&gt;

&lt;p&gt;
She had a &lt;b&gt;dimple&lt;/b&gt; which appeared when she smiled. 她一笑就现出酒窝。
&lt;/p&gt;

&lt;p&gt;
也做动词用a smile &lt;b&gt;dimpled&lt;/b&gt; her cheeks (&lt;a href=&quot;#citeproc_bib_item_1&quot;&gt;&lt;i&gt;Apple Dictionary&lt;/i&gt; 2024&lt;/a&gt;)她笑出了酒窝。
&lt;/p&gt;

&lt;p&gt;
The child &lt;b&gt;dimpled&lt;/b&gt; up to the man. 小孩对着那人笑出了酒窝。
&lt;/p&gt;

&lt;p&gt;
至于，Venus Dimples 维纳斯的腰窝，则源自Diego Velazquez 蒂亚戈·委拉斯凯兹 1647 年- 1651 年的油画作品 The Rokeby Venus，又叫《镜前的维纳斯》。照理说镜子里应该倒映的是维纳斯的身体，但是画家很巧妙的把她的脸放大画在镜子里，类似于手机的数码放大效果，于是我们就能欣赏到女神的美颜。
&lt;/p&gt;

&lt;p&gt;
所以，很多女孩子以拥有一对维纳斯的腰窝为美。
&lt;/p&gt;

&lt;p&gt;
&lt;b&gt;References&lt;/b&gt;
&lt;/p&gt;

&lt;style&gt;.csl-entry{text-indent: -1.5em; margin-left: 1.5em;}&lt;/style&gt;&lt;div class=&quot;csl-bib-body&quot;&gt;
  &lt;div class=&quot;csl-entry&quot;&gt;&lt;a id=&quot;citeproc_bib_item_1&quot;&gt;&lt;/a&gt;&lt;i&gt;Apple Dictionary&lt;/i&gt;. 2024. Apple.&lt;/div&gt;
  &lt;div class=&quot;csl-entry&quot;&gt;&lt;a id=&quot;citeproc_bib_item_2&quot;&gt;&lt;/a&gt;&lt;i&gt;Organizational Behavior&lt;/i&gt;. 2005. South-Western College Pub.&lt;/div&gt;
&lt;/div&gt;
</content>
 </entry>
 
 <entry>
   <title>单词本：curvilinear</title>
   <link href="http://kimi.im/2024-07-12-curvilinear"/>
   <updated>2024-07-12T00:00:00+00:00</updated>
   <id>http://kimi.im/curvilinear</id>
   <content type="html">&lt;p&gt;
我们给员工设定绩效目标的时候，要评估目标难度和员工能力的匹配度。难度太低，容易出现让员工萎靡不振 lackadaisicalness，难度太大，则让员工消极逃避。
&lt;/p&gt;

&lt;p&gt;
所以，在员工目标设定的过程中，需要一个调节的环节。这就是Ed Locke和
Gary Latham 提出的目标设定模型中 Moderator 这一个环节。
(&lt;a href=&quot;#citeproc_bib_item_1&quot;&gt;Locke and Latham 1990&lt;/a&gt;)
&lt;/p&gt;

&lt;p&gt;
因此，需要找出目标难度和员工能力相匹配的那个最佳点。正如 Don
Hellriegel 所说的 The relation of goal difficulty to performance is
&lt;b&gt;curvilinear&lt;/b&gt;, not linear. That is , performance levels off as the
limits of a person&amp;rsquo;s ability are approached.  (&lt;a href=&quot;#citeproc_bib_item_2&quot;&gt;&lt;i&gt;Organizational Behavior&lt;/i&gt; 2005&lt;/a&gt;)
&lt;/p&gt;

&lt;p&gt;
这里作者用了 &lt;b&gt;curvilinear&lt;/b&gt; 表示曲线相关性，相对的是 &lt;b&gt;linear&lt;/b&gt; 线性相关。所谓曲线相关指的是目标难度太低或太高的时候，员工绩效都不是最高。只有目标难度和员工能力匹配的时候，才是曲线的最高点。
&lt;/p&gt;

&lt;p&gt;
显然， &lt;b&gt;curvilinear&lt;/b&gt; 是由 curve 和 linear 组成的。前者是曲线，后者则来自拉丁语 linea 即线条 line。
&lt;/p&gt;

&lt;p&gt;
these designs employ flowing, &lt;b&gt;curvilinear&lt;/b&gt; forms. 这些设计用到了一些流线、曲线形状。
&lt;/p&gt;

&lt;p&gt;
the curvilinear motion of a thrown stone. 抛出的石头形成的抛落曲线。
&lt;/p&gt;

&lt;p&gt;
&lt;b&gt;References&lt;/b&gt;
&lt;/p&gt;

&lt;style&gt;.csl-entry{text-indent: -1.5em; margin-left: 1.5em;}&lt;/style&gt;&lt;div class=&quot;csl-bib-body&quot;&gt;
  &lt;div class=&quot;csl-entry&quot;&gt;&lt;a id=&quot;citeproc_bib_item_1&quot;&gt;&lt;/a&gt;Locke, Ed A., and Gary P. Latham. 1990. “A Theory of Goal Setting and Task Performance.” &lt;i&gt;Prentice-Hall&lt;/i&gt;.&lt;/div&gt;
  &lt;div class=&quot;csl-entry&quot;&gt;&lt;a id=&quot;citeproc_bib_item_2&quot;&gt;&lt;/a&gt;&lt;i&gt;Organizational Behavior&lt;/i&gt;. 2005. South-Western College Pub.&lt;/div&gt;
&lt;/div&gt;
</content>
 </entry>
 
 <entry>
   <title>单词本：confidentiality</title>
   <link href="http://kimi.im/2024-07-11-confidentiality"/>
   <updated>2024-07-11T00:00:00+00:00</updated>
   <id>http://kimi.im/confidentiality</id>
   <content type="html">&lt;p&gt;
信息安全的三个最主要的要求是机密、完整、可用，即 &lt;b&gt;confidentiality&lt;/b&gt;,
integrity and availability.
&lt;/p&gt;

&lt;p&gt;
机密性 &lt;b&gt;confidentiality&lt;/b&gt; 是 &lt;b&gt;confidential&lt;/b&gt; “机密的”的抽象名词形式，而
&lt;b&gt;confidential&lt;/b&gt; 来自 &lt;b&gt;confidence&lt;/b&gt; 信心。
&lt;/p&gt;

&lt;p&gt;
&lt;b&gt;confidence&lt;/b&gt; 又来自拉丁语 confidere 动词“完全信任”。而 fidere 则是动词信任 trust 。confidentem是 confidere 的现在分词。
&lt;/p&gt;

&lt;p&gt;
不过， &lt;b&gt;confidence&lt;/b&gt; 有秘密的意思。比如：The two girls sat in a corner
exchanging &lt;b&gt;confidences&lt;/b&gt;. 那两个女孩子坐在角落里说着悄悄话。
&lt;/p&gt;

&lt;p&gt;
I&amp;rsquo;m telling you this in (strict) &lt;b&gt;confidence&lt;/b&gt; so don&amp;rsquo;t breathe a word of
it. 我现在告诉你这件事是个（绝对的）秘密，千万不可外传。
&lt;/p&gt;

&lt;p&gt;
fidelity 忠实、忠贞、忠诚、真实、精确，应该也是源自 fidere。
&lt;/p&gt;

&lt;p&gt;
话说回来，其实，这次，我是想学习下 &lt;b&gt;confidence&lt;/b&gt; 及其衍生词的发音。
&lt;/p&gt;

&lt;p&gt;
机密性 &lt;b&gt;confidentiality&lt;/b&gt; 的发音是[ˌkɒn.fɪ.den.ʃiˈæl.ə.ti]所以，重音是在倒数第五个字母 a 上。
&lt;/p&gt;

&lt;p&gt;
机密的 &lt;b&gt;confidential&lt;/b&gt; 的发音是 [ˌkɒn.fɪˈden.ʃəl]，那么其重音在 dential
上。
&lt;/p&gt;

&lt;p&gt;
有信心的 &lt;b&gt;confident&lt;/b&gt; 以及名词信心 confidence 的重音都在最前面。
&lt;/p&gt;

&lt;p&gt;
这样一列举，差不多 CIA 的C相关的读音就比较清楚了。
&lt;/p&gt;

&lt;p&gt;
&lt;b&gt;confidential&lt;/b&gt; 的德语翻译为 &lt;b&gt;vertraulich&lt;/b&gt; ， &lt;b&gt;confidentiality&lt;/b&gt; 则是 &lt;b&gt;die
Vertraulichkeit&lt;/b&gt; 。
&lt;/p&gt;

&lt;p&gt;
Ist die &lt;b&gt;Vertraulichkeit&lt;/b&gt; nicht gewährleistet, kann kein Vertrauen
entstehen. 机密性无法保证，就没有可信性。
&lt;/p&gt;

&lt;p&gt;
德语机密性和可信性是同根的 &lt;b&gt;Vertraulichkeit&lt;/b&gt; vs. Vertauen，而英语则是
&lt;b&gt;confidentiality&lt;/b&gt; vs. trust。
&lt;/p&gt;

&lt;p&gt;
法语不造新词， &lt;b&gt;confidentiality&lt;/b&gt; 就是 &lt;b&gt;le caractère confidentiel&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
&lt;b&gt;Le caractère confidentiel&lt;/b&gt; des informations fournies par les sujets
inté ress és à l&amp;rsquo;entité adjudicatrice en fonction des procédures
choisies sera proté g é par des règles précises.
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>单词本：attain</title>
   <link href="http://kimi.im/2024-07-11-attain"/>
   <updated>2024-07-11T00:00:00+00:00</updated>
   <id>http://kimi.im/attain</id>
   <content type="html">&lt;p&gt;
Don Hellriegel 等人(&lt;a href=&quot;#citeproc_bib_item_1&quot;&gt;&lt;i&gt;Organizational Behavior&lt;/i&gt; 2005&lt;/a&gt;)的组织行为学一书中介绍了
David McClelland 的成就激励模型，提到成就高的人通常不会选择极难的目标，也不会选择极易的目标，而是选择难度适合自己的目标。这就是孙子所说的知己知彼百战不殆。
&lt;/p&gt;

&lt;p&gt;
High achievers avoid selecting extremely difficult goals. They prefer
moderate goals that are neither so easy that &lt;b&gt;attaining&lt;/b&gt; them provides
no satisfaction nor so difficult that &lt;b&gt;attaining&lt;/b&gt; them is more a matter
of luck than ability. They gauge what is possible and then select as
difficult a goal as they think they can &lt;b&gt;attain&lt;/b&gt;.
&lt;/p&gt;

&lt;p&gt;
这里用到 &lt;b&gt;attain&lt;/b&gt; ，意思是实现、达到。它源自拉丁语 attingere ，ad-/at-前缀表示 at ，to； tangere 表示触及。触及到，就是达到了。
&lt;/p&gt;

&lt;p&gt;
Don Hellriegel 还写道：
&lt;/p&gt;

&lt;p&gt;
Employees should think about setting realistic goals and the ways that
they can &lt;b&gt;attain&lt;/b&gt; them.
&lt;/p&gt;

&lt;p&gt;
员工应该考虑设置一个现实的目标和方式，这样他们就能实现这些目标。我们平时学习工作中，应该给自己设置一些能力所及的目标，一个一个地完成这些小目标，等到回头看，已经走了很远了。
&lt;/p&gt;

&lt;p&gt;
比如，我从三年前就设定每年提交三个专利申请的小目标，这几年每年提交三到四个专利，累积下来已经有七八个国际专利提交专利局公示了。昨天，公司的专利创新评审部门已经邀请我去评审别人提交的专利。也就是说，我从一个创新者成为了一个创新评审者。这是我从来没有想到的。三年前面对全公司各个业务部门的技术老大介绍自己的专利紧张得很，没想到，现在我成了他们一员去评审别人的创新想法了。
&lt;/p&gt;

&lt;p&gt;
&lt;b&gt;References&lt;/b&gt;
&lt;/p&gt;

&lt;style&gt;.csl-entry{text-indent: -1.5em; margin-left: 1.5em;}&lt;/style&gt;&lt;div class=&quot;csl-bib-body&quot;&gt;
  &lt;div class=&quot;csl-entry&quot;&gt;&lt;a id=&quot;citeproc_bib_item_1&quot;&gt;&lt;/a&gt;&lt;i&gt;Organizational Behavior&lt;/i&gt;. 2005. South-Western College Pub.&lt;/div&gt;
&lt;/div&gt;
</content>
 </entry>
 
 <entry>
   <title>单词本：enclave</title>
   <link href="http://kimi.im/2024-07-09-enclave"/>
   <updated>2024-07-09T00:00:00+00:00</updated>
   <id>http://kimi.im/enclave</id>
   <content type="html">&lt;p&gt;
Banks 等人在介绍 OPERA 远程设备认证架构时 (&lt;a href=&quot;#citeproc_bib_item_1&quot;&gt;Banks, Kisiel, and Korsholm 2021&lt;/a&gt;)，用到
&lt;b&gt;enclave&lt;/b&gt; 这个词：
&lt;/p&gt;

&lt;p&gt;
OPERA can also be implemented to support decentralized attestation, in
which &lt;b&gt;enclave&lt;/b&gt; programs on the same SGX platform attest one another.
&lt;/p&gt;

&lt;p&gt;
按照剑桥英语词典解释： &lt;b&gt;enclave&lt;/b&gt; is a part of a country that is
surrounded by another country, or a group of people who are different
from the people living in the surrounding area.
&lt;/p&gt;

&lt;p&gt;
&lt;b&gt;enclave&lt;/b&gt; 是被其他国家环绕的另一个国家的领地，或者一群与周围都不同的人均。前者翻译为飞地。则没有合适的翻译了。就是区域内文化或民族与周围不同的部分人或区域。
&lt;/p&gt;

&lt;p&gt;
引文是说与周边隔离的程序，可以用分布式的方式进行互相验证。与周边隔离的程序，即飞地程序。
&lt;/p&gt;

&lt;p&gt;
Campione d&amp;rsquo;Italia is an Italian &lt;b&gt;enclave&lt;/b&gt; in Switzerland. 金皮庸（意大利语Campione d&amp;rsquo;Italia又名坎皮奥内 ）是意大利的一块飞地，坐落于卢加诺湖湖畔，行政上隶属于伦巴第大区科莫省。金皮庸与意大利本土仅相距 1 公里，然而金皮庸与意大利本土并没有直接接壤，其全境皆为瑞士提契诺州所包围。
&lt;/p&gt;

&lt;p&gt;
&lt;b&gt;enclave&lt;/b&gt; 应该是源自拉丁语 inclavare 锁住。clavare 源自 clavis 钥匙。也就是说，飞地是被周围死死锁住的一块地了。
&lt;/p&gt;

&lt;p&gt;
我们肩膀前面的两个骨头叫锁骨，英语是 clavicle 看来也是源自拉丁语的钥匙。锁和钥匙互相成就对方不是？
&lt;/p&gt;

&lt;p&gt;
&lt;b&gt;References&lt;/b&gt;
&lt;/p&gt;

&lt;style&gt;.csl-entry{text-indent: -1.5em; margin-left: 1.5em;}&lt;/style&gt;&lt;div class=&quot;csl-bib-body&quot;&gt;
  &lt;div class=&quot;csl-entry&quot;&gt;&lt;a id=&quot;citeproc_bib_item_1&quot;&gt;&lt;/a&gt;Banks, Alexander Sprogø, Marek Kisiel, and Philip Korsholm. 2021. “Remote Attestation: A Literature Review.”&lt;/div&gt;
&lt;/div&gt;
</content>
 </entry>
 
 <entry>
   <title>单词本：benign</title>
   <link href="http://kimi.im/2024-07-09-benign"/>
   <updated>2024-07-09T00:00:00+00:00</updated>
   <id>http://kimi.im/benign</id>
   <content type="html">&lt;p&gt;
在讨论到远程设备认证的时候，Banks 等人(&lt;a href=&quot;#citeproc_bib_item_1&quot;&gt;Banks, Kisiel, and Korsholm 2021&lt;/a&gt;)指出，一些计算性能比较低的设备，其可信认证的过程计算量比较大，可能被坏人利用进行拒绝服务攻击，大量的认证请求会导致这类设备停止工作：
&lt;/p&gt;

&lt;p&gt;
If an attacker can send an attestation request to a device, that
device will waste a significant amount of computational power
computing a proof that the software on the device is &lt;b&gt;benign&lt;/b&gt;.
&lt;/p&gt;

&lt;p&gt;
设备通过非对称加密自证清白，即 &lt;b&gt;benign&lt;/b&gt; 。
&lt;/p&gt;

&lt;p&gt;
&lt;b&gt;benign&lt;/b&gt; 的意思是 of a kind disposition; gracious; kind; benignant;
favourable，即某种性格好的、和善的、讨人喜欢的人或事物。这里，指的是工作正常、未&lt;a href=&quot;./2024-07-06-compromise&quot;&gt;被恶意软件污染&lt;/a&gt;的设备。
&lt;/p&gt;

&lt;p&gt;
&lt;b&gt;benign&lt;/b&gt; 源自拉丁语 benignus ：bene好的，gignere 出生、产生。也就是天生好的。
&lt;/p&gt;

&lt;p&gt;
her face is calm and benign. 她的表情冷静且和蔼。
&lt;/p&gt;

&lt;p&gt;
而拉丁语 male 的意思是坏的、错的、恶毒的。malign 有害的、恶意的。动词诽谤、中伤、污蔑。
&lt;/p&gt;

&lt;p&gt;
to malign innocent people 污蔑好人 
&lt;/p&gt;

&lt;p&gt;
另外还有
&lt;/p&gt;

&lt;p&gt;
benignant 仁慈的、有益的、和蔼的、良性的。
&lt;/p&gt;

&lt;p&gt;
malignant 恶意的、恶毒的、恶性的。
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>单词本：eavesdrop</title>
   <link href="http://kimi.im/2024-07-08-eavesdrop"/>
   <updated>2024-07-08T00:00:00+00:00</updated>
   <id>http://kimi.im/eavesdrop</id>
   <content type="html">&lt;p&gt;
其实，用的很普遍，只是刚好在看 Banks 等人的论文(&lt;a href=&quot;#citeproc_bib_item_1&quot;&gt;Banks, Kisiel, and Korsholm 2021&lt;/a&gt;)时候遇到了，所以就摘录过来：
&lt;/p&gt;

&lt;p&gt;
A countermeasure for DoS attacks is to authenticate messages, this
ensures the Prover does not process invalid attestation
requests. However, a local adversary may &lt;b&gt;eavesdrop&lt;/b&gt; on the
communication and use a replay attacks to circumvent this
countermeasure. The common countermeasure against replay attacks is
the inclusion of nonces which is also prevalent in the domain of
remote attestation.
&lt;/p&gt;

&lt;p&gt;
&lt;b&gt;eavesdrop&lt;/b&gt; 的意思就是窃听、偷听。在通信网络中，如果有人在窃听通信消息，就可以把消息保存下来，等到下次对方发验证请求过来的时候，通过消息重播回复，假冒是通信对方。这种攻击称为 replay attack.
&lt;/p&gt;

&lt;p&gt;
最早， &lt;b&gt;eavesdropper&lt;/b&gt; 这个词，表示在屋檐下偷听的人。而 &lt;b&gt;eavesdrop&lt;/b&gt; 指的是屋檐下水滴落到的那个地方，往往是一个小坑。为什么呢，因为水滴石穿呀。
&lt;/p&gt;

&lt;p&gt;
一般， &lt;b&gt;eavesdrop&lt;/b&gt; 都是和 &lt;b&gt;on&lt;/b&gt; 组合起来用的，后面跟偷听的内容。比如
&lt;/p&gt;

&lt;p&gt;
we &lt;b&gt;are eavesdropping on&lt;/b&gt; her telephone conversation. 我们正偷听她的电话通话。
&lt;/p&gt;

&lt;p&gt;
德语里，隔墙偷听为 an der Tür lauschen
&lt;/p&gt;

&lt;p&gt;
法语里，隔墙偷听则是é couter à la porte
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;References&lt;/b&gt;
&lt;/p&gt;

&lt;style&gt;.csl-entry{text-indent: -1.5em; margin-left: 1.5em;}&lt;/style&gt;&lt;div class=&quot;csl-bib-body&quot;&gt;
  &lt;div class=&quot;csl-entry&quot;&gt;&lt;a id=&quot;citeproc_bib_item_1&quot;&gt;&lt;/a&gt;Banks, Alexander Sprogø, Marek Kisiel, and Philip Korsholm. 2021. “Remote Attestation: A Literature Review.”&lt;/div&gt;
&lt;/div&gt;
</content>
 </entry>
 
 <entry>
   <title>单词本：collude</title>
   <link href="http://kimi.im/2024-07-08-collude"/>
   <updated>2024-07-08T00:00:00+00:00</updated>
   <id>http://kimi.im/collude</id>
   <content type="html">&lt;p&gt;
今天看了远程设备认证的一个综述论文(&lt;a href=&quot;#citeproc_bib_item_1&quot;&gt;Banks, Kisiel, and Korsholm 2021&lt;/a&gt;)，远程设备认证
remote attestation 就是通过对设备提供的运行时记录，验证设备上运行的程序是否被篡改。设备远程认证，又分为基于软件的认证，基于硬件的认证和混合认证。基于软件的认证假定针对认证过程的攻击不能利用现场的其他设备。也就是攻击者不能有近场的设备可以合谋。如果攻击者能串通控制现场的设备，就很容易绕开软件认证协议，对验证方进行欺骗了。
&lt;/p&gt;

&lt;p&gt;
Software-based attestation protocols guard against these attacks by
relying on the assumptions that adversaries cannot &lt;b&gt;collude&lt;/b&gt; with other
devices, that the checksum and attestation code cannot be optimized
further and that the attestation cannot be parallelized.  The
assumptions made by the attestation protocols defends against the
adversaries. However if &lt;b&gt;collusion&lt;/b&gt; is possible a local adversary would
have the advantage of lower latency’s in the network.
&lt;/p&gt;

&lt;p&gt;
&lt;b&gt;collude&lt;/b&gt; 就是合谋、勾结、串通的意思。
&lt;/p&gt;

&lt;p&gt;
&lt;b&gt;collude&lt;/b&gt; 源自拉丁语 colludere ，co就是 com- 也就是一起的意思，ludere 是玩的意思。ludicrous 可笑、荒唐，就是从 ludere 衍生来的。
&lt;/p&gt;

&lt;p&gt;
这里，我们看到了语言含义的变迁。本来是很开心的一起玩，随着时间推移，成了合谋、勾结。
&lt;/p&gt;

&lt;p&gt;
要么，这么理解，一起玩，就是猨猵狙以为雌，麋与鹿交，鳅与鱼游
(&lt;a href=&quot;#citeproc_bib_item_2&quot;&gt;庄周 286AD&lt;/a&gt;)，狼狈为奸。就是一起干坏事的人。
&lt;/p&gt;

&lt;p&gt;
引文里 &lt;b&gt;collusion&lt;/b&gt; 是合谋的名词形式。
&lt;/p&gt;

&lt;p&gt;
&lt;b&gt;conspire&lt;/b&gt; 也有相似的意思，密谋。con 也是一起的意思，spire 来自拉丁语
spirare 呼吸。一同呼吸、一个鼻孔出气，那自然是合伙的。不知道，为什么偷偷的密谋。也许呼吸不易被察觉，所以有密谋的意思。
&lt;/p&gt;

&lt;p&gt;
&lt;b&gt;References&lt;/b&gt;
&lt;/p&gt;

&lt;style&gt;.csl-entry{text-indent: -1.5em; margin-left: 1.5em;}&lt;/style&gt;&lt;div class=&quot;csl-bib-body&quot;&gt;
  &lt;div class=&quot;csl-entry&quot;&gt;&lt;a id=&quot;citeproc_bib_item_1&quot;&gt;&lt;/a&gt;Banks, Alexander Sprogø, Marek Kisiel, and Philip Korsholm. 2021. “Remote Attestation: A Literature Review.”&lt;/div&gt;
  &lt;div class=&quot;csl-entry&quot;&gt;&lt;a id=&quot;citeproc_bib_item_2&quot;&gt;&lt;/a&gt;庄周. 286AD. &lt;i&gt;《庄子》&lt;/i&gt;. 蒙县.&lt;/div&gt;
&lt;/div&gt;
</content>
 </entry>
 
 <entry>
   <title>单词本：compromise</title>
   <link href="http://kimi.im/2024-07-06-compromise"/>
   <updated>2024-07-06T00:00:00+00:00</updated>
   <id>http://kimi.im/compromise</id>
   <content type="html">&lt;p&gt;
我一直搞不懂，信息安全中用到的这个词 &lt;b&gt;compromise&lt;/b&gt; 应该怎么翻译。大概意思是某个软件或者设备被坏人破解了，称为坏人继续干坏事的工具，比如添加了木马病毒、勒索病毒或者蠕虫病毒。比如在David Meier等人的这篇论文
(&lt;a href=&quot;#citeproc_bib_item_1&quot;&gt;Meier et al. 2022&lt;/a&gt;) 中写的：
&lt;/p&gt;

&lt;p&gt;
The device cannot verify the authenticity of the operator
network. This may allow an adversary to (i) use stolen devices, (ii)
provide devices with &lt;b&gt;compromised&lt;/b&gt; provisioning data, or (iii)
impersonate the operator and perform attacks with devices that are
already physically mounted in industrial plants (e.g., opening a
valve).
&lt;/p&gt;

&lt;p&gt;
因为运营某设备的厂商无法验证设备是否完好，就会被坏人钻空子，一则，偷走高价值设备，拿去用；二则在设备里装了损坏的文件，三则假冒是设备运营商，进行一些恶意操作，比如打开化学反应罐的阀门，导致化工厂危化物泄露。
&lt;/p&gt;

&lt;p&gt;
这里&lt;b&gt;compromised&lt;/b&gt; provisioning data可以理解为篡改的设备上线数据。比如把某个安全配置项的加密等级改低，这样在后续的攻击中，利用这个缺陷去进行网络攻击。
&lt;/p&gt;

&lt;p&gt;
compromise 有妥协的意思，也指东西受了污染人感染了病毒。从拟人的角度看，设备中被恶意添加了病毒或篡改了文件，可以认为是感染了病毒。是不是可以翻译为软件、系统或设备受了污染、或感染了病毒？
&lt;/p&gt;

&lt;p&gt;
A device was &lt;b&gt;compromised&lt;/b&gt;. 如果翻译成“一个设备已经被侵染了”，是不是比较好理解？总比说“一个设备已经妥协了”更恰当吧。
&lt;/p&gt;

&lt;p&gt;
&lt;b&gt;compromise&lt;/b&gt; 也能做名词，比如eventually they reached a &lt;b&gt;compromise&lt;/b&gt;.最终，他们达成了妥协。
&lt;/p&gt;

&lt;p&gt;
the secret of a happy marriage is &lt;b&gt;compromise&lt;/b&gt;. 幸福婚姻的秘诀是相互妥协。
&lt;/p&gt;

&lt;p&gt;
racism should be tackled without &lt;b&gt;compromise&lt;/b&gt;. 种族主义问题不可妥协处理。
&lt;/p&gt;

&lt;p&gt;
作为动词：in the end we &lt;b&gt;compromised&lt;/b&gt; and deferred the dispute. 最后，我们妥协了，延缓了争论。
&lt;/p&gt;

&lt;p&gt;
don&amp;rsquo;t &lt;b&gt;compromise&lt;/b&gt; on safety. 安全问题不能妥协。
&lt;/p&gt;

&lt;p&gt;
德语也有类似的 &lt;b&gt;der Kompromiss&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
Kompromissentscheidung 妥协的决定。&lt;a href=&quot;./2024-03-28-entscheidung&quot;&gt;Entscheidung&lt;/a&gt; 是决定的意思。
&lt;/p&gt;

&lt;p&gt;
法语 &lt;b&gt;la compromis&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
aboutir àun &lt;b&gt;compromis&lt;/b&gt;达成妥协。
&lt;/p&gt;

&lt;p&gt;
accepter un &lt;b&gt;compromis&lt;/b&gt; 接受妥协。
&lt;/p&gt;

&lt;p&gt;
&lt;b&gt;References&lt;/b&gt;
&lt;/p&gt;

&lt;style&gt;.csl-entry{text-indent: -1.5em; margin-left: 1.5em;}&lt;/style&gt;&lt;div class=&quot;csl-bib-body&quot;&gt;
  &lt;div class=&quot;csl-entry&quot;&gt;&lt;a id=&quot;citeproc_bib_item_1&quot;&gt;&lt;/a&gt;Meier, David, Jonas Vogl, Florian Kohnhäuser, and Jürgen Beyerer. 2022. “Secure Provisioning of OPC UA Applications Using the Asset Administration Shell.” In &lt;i&gt;2022 IEEE 17th Conference on Industrial Electronics and Applications (ICIEA)&lt;/i&gt;, 144–49. doi:&lt;a href=&quot;https://doi.org/10.1109/ICIEA54703.2022.10005899&quot;&gt;10.1109/ICIEA54703.2022.10005899&lt;/a&gt;.&lt;/div&gt;
&lt;/div&gt;
</content>
 </entry>
 
 <entry>
   <title>单词本：voraussichtlich</title>
   <link href="http://kimi.im/2024-07-05-voraussichtlich"/>
   <updated>2024-07-05T00:00:00+00:00</updated>
   <id>http://kimi.im/voraussichtlich</id>
   <content type="html">&lt;p&gt;
昨天，学了个单词 &lt;a href=&quot;2024-07-04-zuversichtlich.html#ID-E2092812-E43C-4772-A899-F7F610C31388&quot;&gt;zuversichtlich&lt;/a&gt;，意思是自信，因为看见所以自信。
&lt;/p&gt;

&lt;p&gt;
这里，我们又遇到了一个 sichtlich 结尾的形容词 &lt;b&gt;voraussichtlich&lt;/b&gt; ：
&lt;/p&gt;

&lt;p&gt;
Biden - mit seinen 81 Jahren der älteste Präsident der US-Geschichte -
hatte bei der TV-Debatte mit seinem &lt;b&gt;voraussichtlichen&lt;/b&gt; Herausforderer
Trump im Sender CNN in der vergangenen Woche mit heiserer Stimme
gesprochen, sich wiederholt in seinen Formulierungen verheddert und
Sätze nicht zu Ende gesprochen.
&lt;/p&gt;

&lt;p&gt;
&lt;b&gt;voraussichtlich&lt;/b&gt; 的意思是可预见的， expected ，潜在的。这里说 Trump 是
Biden 的&lt;b&gt;voraussichtlich&lt;/b&gt; Herausforderer潜在的挑战者。
&lt;/p&gt;

&lt;p&gt;
&lt;b&gt;Aussicht&lt;/b&gt; 是view, prospect景色、景象的意思。
&lt;/p&gt;

&lt;p&gt;
&lt;b&gt;Voraussicht&lt;/b&gt; ：vor = fore 前面的，sicht = sight 视线，所以，
&lt;b&gt;Voraussicht&lt;/b&gt; = foresight 在前面的景象，也就是眼前所见的景象。
&lt;/p&gt;

&lt;p&gt;
也就是远见、先见之明。
&lt;/p&gt;

&lt;p&gt;
那么 &lt;b&gt;voraussichtlich&lt;/b&gt; 就是可预见的 expected.
&lt;/p&gt;

&lt;p&gt;
Das Flugzeug wird &lt;b&gt;voraussichtlich&lt;/b&gt; mit einer Verspätung von 20 Minuten
eintreffen. 飞机估计要延误 20 分钟。
&lt;/p&gt;

&lt;p&gt;
Sie bewertet ihre Villa &lt;b&gt;voraussichtlich&lt;/b&gt; mit einer Million Yuan. 她估算她的小别墅值 100 万。
&lt;/p&gt;

&lt;p&gt;
拜登和特朗普的电视辩论非常精彩。我是指从逗乐角度来说非常精彩。拜登 81
岁高龄，还能讲完一个半小时的稿子已经很不容易了。
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;声音嘶哑 mit heiserer Stimme&lt;/li&gt;
&lt;li&gt;不断重复 sich wiederholen&lt;/li&gt;
&lt;li&gt;含糊不清 Formulierungen verheddert&lt;/li&gt;
&lt;li&gt;话说不完整 Sätze nicht zu Ende gesprochen&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
然而，美国民主党政客依然挺拜登：&amp;ldquo;Wir haben gesagt, dass wir an seiner
Seite stehen werden&amp;rdquo;, sagte der Gouverneur des Bundesstaats Maryland,
Wes Moore
&lt;/p&gt;

&lt;p&gt;
看来，还能以后再看拜登逗乐的演讲了。
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>单词本：cloak-and-dagger</title>
   <link href="http://kimi.im/2024-07-05-cloak-and-dagger"/>
   <updated>2024-07-05T00:00:00+00:00</updated>
   <id>http://kimi.im/cloak-and-dagger</id>
   <content type="html">&lt;p&gt;
最近在准备一个关于信息安全的培训，提到信息安全，就免不了要谈一谈
Stuxnet。那场攻击直接把伊朗核武器开发进度减慢了 1 整年。
&lt;/p&gt;

&lt;p&gt;
Stuxnet hasn&amp;rsquo;t vanished, but it is not a major cybersecurity threat
today. In fact, while Stuxnet grabbed a lot of headlines due to its
dramatic capabilities and &lt;b&gt;cloak-and-dagger&lt;/b&gt; origins, it was never much
of a threat to anybody other than the Natanz facility that was its
original target.
&lt;/p&gt;

&lt;p&gt;
因为 Stuxnet 是美国和以色列情报机构联合开发的，所以这段话里描述它是源自 &lt;b&gt;cloak-and-dagger&lt;/b&gt; 披风与短剑是间谍常见的装扮，所以这个短语指间谍故事，也用来形容神神秘秘、鬼鬼祟祟的事情。
&lt;/p&gt;

&lt;p&gt;
I&amp;rsquo;m tired of all these &lt;b&gt;cloak-and-dagger&lt;/b&gt; meetings - let&amp;rsquo;s discuss the
issues openly. 我厌倦这种神神秘秘的会议了，让我们开诚布公地讨论吧。
&lt;/p&gt;

&lt;p&gt;
In 1974, ballet star Baryshnikov defected from the Soviet Union. He
talks about his &lt;b&gt;cloak-and-dagger&lt;/b&gt; escape. 芭蕾明星 Baryshnikov 通过一次秘密行动逃离苏联。
&lt;/p&gt;

&lt;p&gt;
His &lt;b&gt;cloak-and-dagger&lt;/b&gt; escape helped make him a cultural
celebrity. “Soviet Dancer in Canada Defects on Bolshoi Tour,” the New
York Times declared on its front page.
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>单词本：zuversichtlich</title>
   <link href="http://kimi.im/2024-07-04-zuversichtlich"/>
   <updated>2024-07-04T00:00:00+00:00</updated>
   <id>http://kimi.im/zuversichtlich</id>
   <content type="html">&lt;p&gt;
昨天刚写到我们公司鼓励包容和多样化的企业文化。今天就看到加拿大在这方面做了个好的示范：
&lt;/p&gt;

&lt;p&gt;
Premierminister Justin Trudeau gab am Mittwoch die Ernennung von
Generalleutnantin Jennie Carignan bekannt. &amp;ldquo;Ich bin &lt;b&gt;zuversichtlich&lt;/b&gt;,
dass sie als Kanadas neue Chefin des Verteidigungsstabs dazu beitragen
wird, dass Kanada stärker und sicherer wird und bereit ist, sich den
globalen Sicherheitsherausforderungen zu stellen&amp;rdquo;, sagte er.
&lt;/p&gt;

&lt;p&gt;
加拿大任命Jennie Carignan为新一任 Chefin des Verteidigungsstabs，即
Chief of the Defence Staff 也就是国防参谋长。这个职位和国防部长相比应该不相上下。一般来说国防部长负责对外事宜，而国防参谋长则负责内部指挥。所以，国防参谋长具有更高的实权。
&lt;/p&gt;

&lt;p&gt;
Jennie Carignan 之前的职务是 Generalleutnantin 即 Lieutenant General
中将。现在的职务则是上将。这位女将军 1990 年参军，履历很不错，还育有四个小孩，其中两个也在加拿大军队工作。
&lt;/p&gt;

&lt;p&gt;
这个任命可能还有其他目的。根据加拿大的统计，前一年军队里性犯罪案件频发：
Statistics Canada last December reported a &amp;ldquo;significant increase&amp;rdquo; in
rates of sexual misconduct in the Armed Forces over the preceding
year. 所以，安排Jennie Carignan担任参谋长或许还希望她来整顿军纪。
&lt;/p&gt;

&lt;p&gt;
加拿大首相Premierminister Justin Trudeau发表言论称对其很有信心 Ich
bin &lt;b&gt;zuversichtlich&lt;/b&gt;.
&lt;/p&gt;

&lt;p&gt;
&lt;b&gt;zuversichtlich&lt;/b&gt; 的意思是有信心的。 &lt;b&gt;sichtlich&lt;/b&gt; 的意思是 visible 可见的。因为可见所以自信，所以 &lt;b&gt;zuversichtlich&lt;/b&gt; 就是有信心、很自信。
&lt;/p&gt;

&lt;p&gt;
&lt;b&gt;sicht&lt;/b&gt; 其实跟 &lt;b&gt;sight&lt;/b&gt; 是一个意思。他们也就差了一个字母。一般来说 c 和 g
的发音是很相似的，一个轻一个浊罢了。
&lt;/p&gt;

&lt;p&gt;
比如Sie begrüßte uns mit &lt;b&gt;sichtlicher&lt;/b&gt; Nervosität.她跟我们打招呼的时候明显地紧张。
&lt;/p&gt;

&lt;p&gt;
如果我们对未来是明确可预见的，那就能从容不迫了。也就很有信心
&lt;b&gt;zuversichtlich&lt;/b&gt; 。
&lt;/p&gt;

&lt;p&gt;
例如，
&lt;/p&gt;

&lt;p&gt;
Ich bin da wenig &lt;b&gt;zuversichtlich&lt;/b&gt;. 我对此不太有信心。
&lt;/p&gt;

&lt;p&gt;
Ich bin &lt;b&gt;zuversichtlich&lt;/b&gt;, dass wir dieses Problem lösen werden. 我很有信心我们能解决这些问题。
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>单词本：diversity</title>
   <link href="http://kimi.im/2024-07-03-diversity"/>
   <updated>2024-07-03T00:00:00+00:00</updated>
   <id>http://kimi.im/diversity</id>
   <content type="html">&lt;p&gt;
我们公司时不时要强调包容（ inclusive ）、多样化（ diversity ）。所谓
diversity 就是要接受包容每个个体的各种差异。
&lt;/p&gt;

&lt;p&gt;
那么个体的差异有哪些呢？
&lt;/p&gt;

&lt;p&gt;
一般来说个体差异分为主要差异primary categories和次要差异 secondary
categories 。
&lt;/p&gt;

&lt;p&gt;
主要差异类型是个体先天遗传的生物特征和根深蒂固的思想观念。次要差异则是伴随个体成长不断变化的差异。比如已婚和未婚，已育和未育等，在个体的不同时期，对于工作模式的诉求都是会变化的。
&lt;/p&gt;

&lt;p&gt;
详细来说，主要差异有：
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;年龄 Age，以及出生的时代代际特征&lt;/li&gt;
&lt;li&gt;种族 Race ，生物遗传特征，包括眼睛颜色、头发颜色、肤色、五官形状等。事实上，人类的种族差异在基因序列中只有 1%不到的差异。&lt;/li&gt;
&lt;li&gt;文化族类 Ethnicity 差异，包括民族、语言、宗教、食物、习俗等。&lt;/li&gt;
&lt;li&gt;性别 Gender ，生物性别由 XX和 XY 染色体（ chromosome ）决定。&lt;/li&gt;
&lt;li&gt;生理差别 Physical abilities and qualities，体形、身高、体重、面部特征、残疾、健康、智力等。&lt;/li&gt;
&lt;li&gt;性取向Sexual orientation，有 heterosexual异性恋，homosexual 同性恋，
bisexual 双性恋。希腊语 heteros 的意思是 other 一般和 homo 相对。&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
次要差异有：
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;教育水平 Education&lt;/li&gt;
&lt;li&gt;工作经验&lt;/li&gt;
&lt;li&gt;收入水平&lt;/li&gt;
&lt;li&gt;宗教信仰 Religious beliefs&lt;/li&gt;
&lt;li&gt;婚姻状况Marital status。 marital 源自拉丁语 maritus，意思是丈夫
Husband。&lt;/li&gt;
&lt;li&gt;生育情况 Parental status&lt;/li&gt;
&lt;li&gt;个人行为风格 personal style&lt;/li&gt;
&lt;li&gt;等等&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
所以，包容的企业文化，就是求同存异，尊重员工的各种个体差异，互相理解，互相支持，团结协作。
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>单词本：Der Geist ist willig</title>
   <link href="http://kimi.im/2024-07-02-der-geist-ist-willing"/>
   <updated>2024-07-02T00:00:00+00:00</updated>
   <id>http://kimi.im/der-geist-ist-willing</id>
   <content type="html">&lt;p&gt;
今天介绍圣经里的一句短语 Der Geist ist willig, aber das Fleisch ist
schwach. 心灵固然愿意，肉体却很虚弱。也就是心有余而力不足。
&lt;/p&gt;

&lt;p&gt;
圣经里是这么写的：耶稣·基督在与 12 门徒共进最后的晚餐之后，他们唱了诗，往橄榄山去，来到客西马尼园（ Gethsemane ），耶稣对门徒说：“你们坐在这里，等我祷告。”于是带着彼得、雅各和约翰同去。预感到自己将死，耶稣心里非常难过，他对三个门徒说：“我心里难过得要命，你们在这里，等候警醒。”耶稣稍往前走，俯伏在地，祷告上帝。等他回到三个门徒那里，发现他们都睡着了，就对彼得说：“你们不能跟我一起警醒一个钟头吗？要警醒祷告，免得陷入迷惑。你们心灵固然愿意，肉体却是软弱的。当耶稣第三次祷告回来，见他们仍然睡着，就对他们说：“现在你们仍然睡觉安歇吧。时候到了，人子被卖在罪人手里了。起来，我们走吧。看哪，卖我的人近了！”
&lt;/p&gt;

&lt;p&gt;
这里耶稣老师让三个门徒醒着等他，结果三个都睡着了。他就说了这句话。在我们的论语里，孔子也批评过白天睡觉的宰予：
&lt;/p&gt;

&lt;p&gt;
宰予昼寝，子曰：“朽木不可雕也，粪土之墙不可圬也！于予与何诛？”子曰：“始吾于人也，听其言而信其行；今吾于人也，听其言而观其行。于予与改是。”
&lt;/p&gt;

&lt;p&gt;
这里，孔子批评的算得上是非常严厉的了。所以说，古代的先师们还是很注重学生是否勤劳的。不勤劳的学生是要被严厉批评的。
&lt;/p&gt;

&lt;p&gt;
举一个例子：
&lt;/p&gt;

&lt;p&gt;
Seit Monaten will ich mich schon bei Ihnen melden, leider war nur &lt;b&gt;der
Geist willig aber das Fleisch schwach&lt;/b&gt;. 意思是我没能按时提交报告。
&lt;/p&gt;

&lt;p&gt;
英语里则翻译为the spirit is willing, but the flesh is weak.并且前后半句可以分开单独使用。
&lt;/p&gt;

&lt;p&gt;
比如：
&lt;/p&gt;

&lt;p&gt;
I wish I could stop smoking; &lt;b&gt;the spirit is willing, but the flesh is
weak&lt;/b&gt;. 言下之意，就是我没能戒掉抽烟。
&lt;/p&gt;

&lt;p&gt;
Sorry I can not give you the job. To tell you the truth, I am not the
one who have the last word. &lt;b&gt;The spirit is willing but the flesh is
weak&lt;/b&gt;. 意思是我力不从心，帮不上你了。
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>babashka 函数库之路径判断函数</title>
   <link href="http://kimi.im/2024-07-01-babashka-fs-assertions"/>
   <updated>2024-07-01T00:00:00+00:00</updated>
   <id>http://kimi.im/babashka-fs-assertions</id>
   <content type="html">&lt;p&gt;
之前介绍过&lt;a href=&quot;../../../../../../../Library/CloudStorage/OneDrive-ABB/Briefcase/notes/kimi.im/_notes/_posts/productivity/2024-06-20-babashka.html#ID-8D27FCBF-6919-4067-B556-5142F0849CE0&quot;&gt;babashka - 有趣又便捷巴布什卡头巾&lt;/a&gt;，用 clojure 处理脚本任务方便又快捷，还有很多上手能用的内置函数库可以用。
&lt;/p&gt;

&lt;p&gt;
我们对文件进行操作之前，可能会确定文件的属性，根据某些属性进行过滤，然后针对过滤出来的文件进行操作。babashka 的 filesystem 内置库提供了属性的断言函数和属性的查询函数。
&lt;/p&gt;

&lt;p&gt;
首先，按照惯例，先引入 fs 内置库，设置几个测试路径：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-bb&quot; id=&quot;orgebe3da5&quot;&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;require &apos;&lt;span style=&quot;color: #7388d6;&quot;&gt;[&lt;/span&gt;babashka.fs &lt;span style=&quot;color: #110099;&quot;&gt;:as&lt;/span&gt; fs&lt;span style=&quot;color: #7388d6;&quot;&gt;]&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;def&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;test-paths&lt;/span&gt;
  &lt;span style=&quot;color: #7388d6;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;.&quot;&lt;/span&gt;  &lt;span style=&quot;color: #3F7F5F;&quot;&gt;;; &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;&amp;#30456;&amp;#23545;&amp;#36335;&amp;#24452;&lt;/span&gt;
   &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;..&quot;&lt;/span&gt; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;;; &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;&amp;#30456;&amp;#23545;&amp;#36335;&amp;#24452;&amp;#65292;&amp;#38544;&amp;#34255;&amp;#25991;&amp;#20214;&lt;/span&gt;
   &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;bb&quot;&lt;/span&gt; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;;; &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;&amp;#21487;&amp;#25191;&amp;#34892;&amp;#25991;&amp;#20214;&amp;#65292;&amp;#19981;&amp;#21487;&amp;#20889;&lt;/span&gt;
   &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;nbb&quot;&lt;/span&gt; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;;; &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;&amp;#19981;&amp;#23384;&amp;#22312;&amp;#30340;&amp;#25991;&amp;#20214;&lt;/span&gt;
   &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;nbbs/&quot;&lt;/span&gt; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;;; &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;&amp;#19981;&amp;#23384;&amp;#22312;&amp;#30340;&amp;#25991;&amp;#20214;&amp;#22841;&lt;/span&gt;
   &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;babashka-fs.org&quot;&lt;/span&gt; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;;; &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;&amp;#26412;&amp;#25991;&amp;#65292;&amp;#25991;&amp;#26412;&amp;#25991;&amp;#20214;&lt;/span&gt;
   &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;/&quot;&lt;/span&gt;  &lt;span style=&quot;color: #3F7F5F;&quot;&gt;;; &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;&amp;#26681;&amp;#30446;&amp;#24405;&lt;/span&gt;
   &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;/usr/bin/vim&quot;&lt;/span&gt;
   &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;/Users/kimim/babashka&quot;&lt;/span&gt; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;;; &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;&amp;#26412;&amp;#25991;&amp;#19978;&amp;#23618;&amp;#30446;&amp;#24405;&lt;/span&gt;
   &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;/Users/kimim/babashka/babashka-fs.org&quot;&lt;/span&gt; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;;; &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;&amp;#26412;&amp;#25991;&amp;#32477;&amp;#23545;&amp;#36335;&amp;#24452;&lt;/span&gt;
   &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;/opt/homebrew/bin/bb&quot;&lt;/span&gt; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;;; &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;bb &amp;#30340;&amp;#31526;&amp;#21495;&amp;#38142;&amp;#25509;&amp;#25991;&amp;#20214;&amp;#65292;&amp;#21487;&amp;#25191;&amp;#34892;&lt;/span&gt;
   &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;/opt/homebrew/bin/../bin/bb&quot;&lt;/span&gt; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;;; &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;bb &amp;#30340;&amp;#31526;&amp;#21495;&amp;#38142;&amp;#25509;&amp;#25991;&amp;#20214;&amp;#65292;&amp;#21487;&amp;#25191;&amp;#34892;&lt;/span&gt;
   &lt;span style=&quot;color: #7388d6;&quot;&gt;]&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;defn&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;doseq-test&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;[&lt;/span&gt;func&lt;span style=&quot;color: #7388d6;&quot;&gt;]&lt;/span&gt;
  &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;doseq&lt;/span&gt; &lt;span style=&quot;color: #909183;&quot;&gt;[&lt;/span&gt;path test-paths&lt;span style=&quot;color: #909183;&quot;&gt;]&lt;/span&gt;
    &lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;print &lt;span style=&quot;color: #709870;&quot;&gt;(&lt;/span&gt;str &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color: #000000; background-color: #f8f8f8; font-weight: bold;&quot;&gt;\&quot;&lt;/span&gt;&lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;&lt;/span&gt; path &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color: #000000; background-color: #f8f8f8; font-weight: bold;&quot;&gt;\&quot;&lt;/span&gt;&lt;span style=&quot;color: #2A00FF;&quot;&gt;:&quot;&lt;/span&gt;&lt;span style=&quot;color: #709870;&quot;&gt;)&lt;/span&gt;
           &lt;span style=&quot;color: #709870;&quot;&gt;(&lt;/span&gt;func path&lt;span style=&quot;color: #709870;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color: #000000; background-color: #f8f8f8; font-weight: bold;&quot;&gt;\n&lt;/span&gt;&lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
&lt;code&gt;fs/windows?&lt;/code&gt; 断言函数和文件无关，用来判断当前操作系统是否 Windows ，因为 Windows 的文件操作和遵循 posix 的 macOS 和 Linux 差别显著，所以单独有&lt;code&gt;fs/windows?&lt;/code&gt;这一断言函数。
&lt;/p&gt;

&lt;p&gt;
因为当前我在 macOS 下编辑本文，显然返回值为 &lt;code&gt;false&lt;/code&gt; 。
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-bb&quot;&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;fs&lt;/span&gt;/windows?&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;pre class=&quot;example&quot;&gt;
false
&lt;/pre&gt;


&lt;p&gt;
&lt;code&gt;uname&lt;/code&gt; 查询结果如下：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-shell&quot;&gt;uname -mo
&lt;/pre&gt;
&lt;/div&gt;

&lt;pre class=&quot;example&quot;&gt;
Darwin arm64
&lt;/pre&gt;


&lt;p&gt;
&lt;code&gt;fs/exists?&lt;/code&gt; 判断文件或者文件夹是否存在。
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-bb&quot;&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;doseq-test &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;fs&lt;/span&gt;/exists?&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;pre class=&quot;example&quot; id=&quot;org86d7565&quot;&gt;
&quot;.&quot;: true 
&quot;..&quot;: true 
&quot;bb&quot;: true 
&quot;nbb&quot;: false 
&quot;nbbs/&quot;: false 
&quot;babashka-fs.org&quot;: true 
&quot;/&quot;: true 
&quot;/usr/bin/vim&quot;: true 
&quot;/Users/kimim/babashka&quot;: true 
&quot;/Users/kimim/babashka/babashka-fs.org&quot;: true 
&quot;/opt/homebrew/bin/bb&quot;: true 
&quot;/opt/homebrew/bin/../bin/bb&quot;: true
&lt;/pre&gt;

&lt;p&gt;
当前目录没有 nbb 和 nbbs 所以返回结果为 &lt;code&gt;false&lt;/code&gt; 。
&lt;/p&gt;

&lt;p&gt;
&lt;code&gt;fs/absolute?&lt;/code&gt; 判断路径是否为绝对路径。
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-bb&quot;&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;doseq-test &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;fs&lt;/span&gt;/absolute?&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;pre class=&quot;example&quot; id=&quot;orgb93b38d&quot;&gt;
&quot;.&quot;: false 
&quot;..&quot;: false 
&quot;bb&quot;: false 
&quot;nbb&quot;: false 
&quot;nbbs/&quot;: false 
&quot;babashka-fs.org&quot;: false 
&quot;/&quot;: true 
&quot;/usr/bin/vim&quot;: true 
&quot;/Users/kimim/babashka&quot;: true 
&quot;/Users/kimim/babashka/babashka-fs.org&quot;: true 
&quot;/opt/homebrew/bin/bb&quot;: true 
&quot;/opt/homebrew/bin/../bin/bb&quot;: true
&lt;/pre&gt;

&lt;p&gt;
只有从根目录&lt;code&gt;/&lt;/code&gt;开始的路径为绝对路径。
&lt;/p&gt;

&lt;p&gt;
相反的，&lt;code&gt;fs/relative?&lt;/code&gt;判断是否相对路径：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-bb&quot;&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;doseq-test &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;fs&lt;/span&gt;/relative?&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;pre class=&quot;example&quot; id=&quot;orgea95a4c&quot;&gt;
&quot;.&quot;: true 
&quot;..&quot;: true 
&quot;bb&quot;: true 
&quot;nbb&quot;: true 
&quot;nbbs/&quot;: true 
&quot;babashka-fs.org&quot;: true 
&quot;/&quot;: false 
&quot;/usr/bin/vim&quot;: false 
&quot;/Users/kimim/babashka&quot;: false 
&quot;/Users/kimim/babashka/babashka-fs.org&quot;: false 
&quot;/opt/homebrew/bin/bb&quot;: false 
&quot;/opt/homebrew/bin/../bin/bb&quot;: false
&lt;/pre&gt;

&lt;p&gt;
&lt;code&gt;fs/directory?&lt;/code&gt;  判断路径是否为文件夹：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-bb&quot;&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;doseq-test &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;fs&lt;/span&gt;/directory?&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;pre class=&quot;example&quot; id=&quot;org4db7756&quot;&gt;
&quot;.&quot;: true 
&quot;..&quot;: true 
&quot;bb&quot;: false 
&quot;nbb&quot;: false 
&quot;nbbs/&quot;: false 
&quot;babashka-fs.org&quot;: false 
&quot;/&quot;: true 
&quot;/usr/bin/vim&quot;: false 
&quot;/Users/kimim/babashka&quot;: true 
&quot;/Users/kimim/babashka/babashka-fs.org&quot;: false 
&quot;/opt/homebrew/bin/bb&quot;: false 
&quot;/opt/homebrew/bin/../bin/bb&quot;: false
&lt;/pre&gt;

&lt;p&gt;
不存在的文件，当然也就不是文件夹了。
&lt;/p&gt;

&lt;p&gt;
&lt;code&gt;fs/executable?&lt;/code&gt; 判断是否可执行。
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-bb&quot;&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;doseq-test &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;fs&lt;/span&gt;/executable?&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;pre class=&quot;example&quot; id=&quot;org785a42f&quot;&gt;
&quot;.&quot;: true 
&quot;..&quot;: true 
&quot;bb&quot;: true 
&quot;nbb&quot;: false 
&quot;nbbs/&quot;: false 
&quot;babashka-fs.org&quot;: false 
&quot;/&quot;: true 
&quot;/usr/bin/vim&quot;: true 
&quot;/Users/kimim/babashka&quot;: true 
&quot;/Users/kimim/babashka/babashka-fs.org&quot;: false 
&quot;/opt/homebrew/bin/bb&quot;: true 
&quot;/opt/homebrew/bin/../bin/bb&quot;: true
&lt;/pre&gt;

&lt;p&gt;
&lt;code&gt;fs/writable?&lt;/code&gt; 判断是否可写：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-bb&quot;&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;doseq-test &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;fs&lt;/span&gt;/writable?&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;pre class=&quot;example&quot; id=&quot;org0b28a63&quot;&gt;
&quot;.&quot;: true 
&quot;..&quot;: true 
&quot;bb&quot;: false 
&quot;nbb&quot;: false 
&quot;nbbs/&quot;: false 
&quot;babashka-fs.org&quot;: true 
&quot;/&quot;: false 
&quot;/usr/bin/vim&quot;: false 
&quot;/Users/kimim/babashka&quot;: true 
&quot;/Users/kimim/babashka/babashka-fs.org&quot;: true 
&quot;/opt/homebrew/bin/bb&quot;: false 
&quot;/opt/homebrew/bin/../bin/bb&quot;: false
&lt;/pre&gt;

&lt;p&gt;
不存在的文件不可写，可执行文件也不可写。
&lt;/p&gt;

&lt;p&gt;
&lt;code&gt;fs/hidden?&lt;/code&gt; 判断路径是否隐藏。
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-bb&quot;&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;doseq-test &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;fs&lt;/span&gt;/hidden?&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;pre class=&quot;example&quot; id=&quot;org2fdc9ab&quot;&gt;
&quot;.&quot;: true 
&quot;..&quot;: true 
&quot;bb&quot;: false 
&quot;nbb&quot;: false 
&quot;nbbs/&quot;: false 
&quot;babashka-fs.org&quot;: false 
&quot;/&quot;: false 
&quot;/usr/bin/vim&quot;: false 
&quot;/Users/kimim/babashka&quot;: false 
&quot;/Users/kimim/babashka/babashka-fs.org&quot;: false 
&quot;/opt/homebrew/bin/bb&quot;: false 
&quot;/opt/homebrew/bin/../bin/bb&quot;: false
&lt;/pre&gt;

&lt;p&gt;
不存在的文件无法判断是否隐藏，所以也是返回 &lt;code&gt;false&lt;/code&gt;
&lt;/p&gt;

&lt;p&gt;
&lt;code&gt;fs/sym-link?&lt;/code&gt; 判断是否为符号链接。
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-bb&quot;&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;doseq-test &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;fs&lt;/span&gt;/sym-link?&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;pre class=&quot;example&quot; id=&quot;org0910389&quot;&gt;
&quot;.&quot;: false 
&quot;..&quot;: false 
&quot;bb&quot;: false 
&quot;nbb&quot;: false 
&quot;nbbs/&quot;: false 
&quot;babashka-fs.org&quot;: false 
&quot;/&quot;: false 
&quot;/usr/bin/vim&quot;: false 
&quot;/Users/kimim/babashka&quot;: false 
&quot;/Users/kimim/babashka/babashka-fs.org&quot;: false 
&quot;/opt/homebrew/bin/bb&quot;: true 
&quot;/opt/homebrew/bin/../bin/bb&quot;: true
&lt;/pre&gt;

&lt;p&gt;
只有&lt;code&gt;/opt/homebrew/bin/bb&lt;/code&gt;是符号链接：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-shell&quot;&gt;ls -l /opt/homebrew/bin/bb
&lt;/pre&gt;
&lt;/div&gt;

&lt;pre class=&quot;example&quot;&gt;
lrwxr-xr-x  1 kimim  admin  33 Jul  1 10:25 /opt/homebrew/bin/bb -&amp;gt; ../Cellar/babashka/1.3.191/bin/bb
&lt;/pre&gt;


&lt;p&gt;
&lt;code&gt;fs/starts-with?&lt;/code&gt; 判断路径的前序是否为某路径。
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-bb&quot;&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;fs&lt;/span&gt;/starts-with? &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;/opt/homebrew/bin/bb&quot;&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;/opt&quot;&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;pre class=&quot;example&quot;&gt;
true
&lt;/pre&gt;


&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-bb&quot;&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;fs&lt;/span&gt;/starts-with? &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;/opt/homebrew/bin/bb&quot;&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;/ops&quot;&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;pre class=&quot;example&quot;&gt;
false
&lt;/pre&gt;


&lt;p&gt;
&lt;code&gt;fs/ends-with?&lt;/code&gt; 判断路径是否以某路径结束。
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-bb&quot;&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;fs&lt;/span&gt;/ends-with? &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;/opt/homebrew/bin/bb&quot;&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;bin/bb&quot;&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;pre class=&quot;example&quot;&gt;
true
&lt;/pre&gt;


&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-bb&quot;&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;fs&lt;/span&gt;/ends-with? &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;/opt/homebrew/bin/bb&quot;&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;in/bb&quot;&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;pre class=&quot;example&quot;&gt;
false
&lt;/pre&gt;


&lt;p&gt;
最后，&lt;code&gt;fs/same-file?&lt;/code&gt;用以判断两路径是否为同一个文件。
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-bb&quot;&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;fs&lt;/span&gt;/same-file? &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;/opt/homebrew/bin/bb&quot;&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;bb&quot;&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;pre class=&quot;example&quot;&gt;
false
&lt;/pre&gt;


&lt;p&gt;
系统目录中的 &lt;code&gt;bb&lt;/code&gt; 和当前目录的 &lt;code&gt;bb&lt;/code&gt; 不是同一个文件。尽管 &lt;code&gt;bb&lt;/code&gt; 是
&lt;code&gt;/opt/homebrew/bin/bb&lt;/code&gt; 的一个副本。
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-bb&quot;&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;fs&lt;/span&gt;/same-file? &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;/Users/kimim/babashka/bb&quot;&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;bb&quot;&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;pre class=&quot;example&quot;&gt;
true
&lt;/pre&gt;


&lt;p&gt;
相对路径和绝对路径
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-bb&quot;&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;fs&lt;/span&gt;/same-file? &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;/opt/homebrew/bin/bb&quot;&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;/opt/homebrew/Cellar/babashka/1.3.191/bin/bb&quot;&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;pre class=&quot;example&quot;&gt;
true
&lt;/pre&gt;


&lt;p&gt;
符号链接和所指向的文件是同一个文件。
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>单词本：to hit the ground running</title>
   <link href="http://kimi.im/2024-07-01-to-hit-the-ground-running"/>
   <updated>2024-07-01T00:00:00+00:00</updated>
   <id>http://kimi.im/to-hit-the-ground-running</id>
   <content type="html">&lt;p&gt;
上次讲过，最近在做信息安全的培训 PPT ，学习哈佛商业评论的 PPT 制作课程时，遇到过在&lt;a href=&quot;../../../../../../../kimim/kimi.im/_notes/_posts/language/2024-06-25-flesh-out.html#ID-A64947B3-8F21-4216-BF0A-287A48613265&quot;&gt;flesh out&lt;/a&gt;这个词。后面课程也提到，如何给演讲给个好头：
&lt;/p&gt;

&lt;p&gt;
First up is your opening - how are you going to start your
presentation?  Here, Kevin Friesen, director of academy at Duarte,
breaks down the best way &lt;b&gt;to hit the ground running&lt;/b&gt;.
&lt;/p&gt;

&lt;p&gt;
这里用了一个习惯用语&lt;b&gt;to hit the ground running&lt;/b&gt;，字面看好像是把大地打跑起来，或者是脚蹬大地开始跑步。引申意思是一举成功。
&lt;/p&gt;

&lt;p&gt;
比如：She studied the reports over the weekend so she could &lt;b&gt;hit the
ground running&lt;/b&gt; when the meeting began. 她在周末学习报告，这样就能在会议开始的时候一举成功。
&lt;/p&gt;

&lt;p&gt;
The Hire Firm 咨询网站的Silas Peterson写过一篇文章&lt;sup&gt;&lt;a id=&quot;fnr.1&quot; class=&quot;footref&quot; href=&quot;#fn.1&quot; role=&quot;doc-backlink&quot;&gt;1&lt;/a&gt;&lt;/sup&gt;，给出了一些建议，如何在新任岗位上一举成功。文章标题为《5 Steps to Hit the Ground
Running in Your New Role》。大概步骤如下：
&lt;/p&gt;
&lt;ol class=&quot;org-ol&quot;&gt;
&lt;li&gt;Prepare for a Professional Impression 给人留下一个专业工作者的初步印象&lt;/li&gt;
&lt;li&gt;Be Ready to Absorb Knowledge 随时准备快速吸收知识&lt;/li&gt;
&lt;li&gt;Get to Know People 快速熟悉工作相关的同事&lt;/li&gt;
&lt;li&gt;Observe the Culture 观察了解企业文化，做事风格&lt;/li&gt;
&lt;li&gt;Focus on Adding Value 专注于为企业、老板和同事带来新的价值&lt;/li&gt;
&lt;/ol&gt;
&lt;div id=&quot;footnotes&quot;&gt;
&lt;h2 class=&quot;footnotes&quot;&gt;Footnotes: &lt;/h2&gt;
&lt;div id=&quot;text-footnotes&quot;&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.1&quot; class=&quot;footnum&quot; href=&quot;#fnr.1&quot; role=&quot;doc-backlink&quot;&gt;1&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot; role=&quot;doc-footnote&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
5 Steps to Hit the Ground Running in Your New Role
&lt;a href=&quot;https://www.thehirefirm.com/2024/06/26/5-steps-to-hit-the-ground-running-in-your-new-role/&quot;&gt;https://www.thehirefirm.com/2024/06/26/5-steps-to-hit-the-ground-running-in-your-new-role/&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;


&lt;/div&gt;
&lt;/div&gt;</content>
 </entry>
 
 <entry>
   <title>单词本：viva la vida</title>
   <link href="http://kimi.im/2024-06-30-viva-la-vida"/>
   <updated>2024-06-30T00:00:00+00:00</updated>
   <id>http://kimi.im/viva-la-vida</id>
   <content type="html">&lt;p&gt;
周五的时候，被同事传染感冒了。不知道是不是附近新冠二阳的同学传给我的。还好只是上呼吸道感染，喉痛了一天，肌肉酸痛了一天。有点像流感症状，没咳嗽还不算难熬。今天缓过来了。
&lt;/p&gt;

&lt;p&gt;
生病了，就想躺着，根本没精力坐在电脑前。
&lt;/p&gt;

&lt;p&gt;
千万不能生病啊，生病了，大好的梦想都不能想了。
&lt;/p&gt;

&lt;p&gt;
上午躺在沙发看了本电影《我们一起摇太阳》。说的是肾病女患者凌敏，征婚同时征肾。脑瘤小伙吕途，缠上凌敏。中间各种催泪，结局还算阳光。
&lt;/p&gt;

&lt;p&gt;
电影外文名《Viva la vida》，其实西班牙语，一般翻译为生命万岁。
&lt;/p&gt;

&lt;p&gt;
viva 是 vivar 的现在陈述式的动词变位。vivar 就是 to cheer，庆祝，或者欢呼的意思。
&lt;/p&gt;

&lt;p&gt;
比如La multitud prorrumpió en vivas.群众高声欢呼。
&lt;/p&gt;

&lt;p&gt;
而la vida则是生命、生活的意思。生活的动词是 vivir，比如 vivir solo
独自生活。vivir al día 过一天算一天。
&lt;/p&gt;

&lt;p&gt;
难受的时候，生病的时候，喊一声 viva la vida，这么押韵、有动能的口号，说不定很快就恢复啦。
&lt;/p&gt;

&lt;p&gt;
之前看过的电影《快把我哥哥带走》中的男主也是这个男演员呀。是个 90 后，叫彭昱畅，未来潜力巨大呀。
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>单词本：rocket science</title>
   <link href="http://kimi.im/2024-06-29-rocket-science"/>
   <updated>2024-06-29T00:00:00+00:00</updated>
   <id>http://kimi.im/rocket-science</id>
   <content type="html">&lt;p&gt;
上周一周都在跟瑞典退休老专家学功能安全。功能安全老专家很喜欢说 it not
&lt;b&gt;rocket science&lt;/b&gt;. 这不是火箭科学。确实，在功能安全领域，很多失效数据的估计，并没有彻底的数学公式支撑，所以，不能算得上&lt;b&gt;rocket science&lt;/b&gt;。
&lt;/p&gt;

&lt;p&gt;
所谓&lt;b&gt;rocket science&lt;/b&gt;就是 the science of designing or building rockets，引申意为 something that is very difficult to learn or understand The
job is challenging, but it&amp;rsquo;s not exactly rocket science.
&lt;/p&gt;

&lt;p&gt;
比如：My coach always said, &amp;ldquo;Basketball is not &lt;b&gt;rocket science&lt;/b&gt;. It&amp;rsquo;s
about putting the ball in the basket.&amp;rdquo;
&lt;/p&gt;

&lt;p&gt;
其他相似的表达：
&lt;/p&gt;

&lt;p&gt;
Learning German, it&amp;rsquo;s &lt;b&gt;not like brain surgery&lt;/b&gt;.
&lt;/p&gt;

&lt;p&gt;
There is no challenge in this racing game, it&amp;rsquo;s &lt;b&gt;a walk in the park&lt;/b&gt;.
&lt;/p&gt;

&lt;p&gt;
Learning how to ride a bike is &lt;b&gt;a piece of cake&lt;/b&gt;, it just takes a little
practice.
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>单词本：imbue</title>
   <link href="http://kimi.im/2024-06-27-imbue"/>
   <updated>2024-06-27T00:00:00+00:00</updated>
   <id>http://kimi.im/imbue</id>
   <content type="html">&lt;p&gt;
据说 Rust 比 C++ 安全，所以就看看 Rust 怎么安全了。
&lt;/p&gt;

&lt;p&gt;
在 cpp to rust book：
&lt;/p&gt;

&lt;p&gt;
C++ first appeared in 1983 as C with classes. It was invented by
Bjarne Stroustrop as a way to &lt;b&gt;imbue&lt;/b&gt; C with Simula-like object-oriented
features.
&lt;/p&gt;

&lt;p&gt;
这里介绍的是C++的历史，说是 Bjarn 在 C 中 &lt;b&gt;imbue&lt;/b&gt; 了 Simula 风格的面向对象编程功能。
&lt;/p&gt;

&lt;p&gt;
&lt;b&gt;imbue&lt;/b&gt; 的意思是充满、浸透、感染的意思。显然，引文用的是它的引申意思。
&lt;/p&gt;

&lt;p&gt;
&lt;b&gt;imbue&lt;/b&gt; 一般会和 with 一起使用。
&lt;/p&gt;

&lt;p&gt;
&lt;b&gt;imbue&lt;/b&gt; 来自拉丁语单词 &lt;b&gt;imbuere&lt;/b&gt; 打湿。
&lt;/p&gt;

&lt;p&gt;
This is a work &lt;b&gt;imbued&lt;/b&gt; with the revolutionary spirit. 这是一份充满了革新精神的工作。
&lt;/p&gt;

&lt;p&gt;
His poetry is &lt;b&gt;imbued&lt;/b&gt; with deep, religious feeling. 他的诗歌充满了深沉的宗教感情。
&lt;/p&gt;

&lt;p&gt;
She aims to &lt;b&gt;imbue&lt;/b&gt; her liquors with the identity of Jeju, and the brand
name Jeju Gott Batt embodies Ha&amp;rsquo;s vision for a &amp;ldquo;Jeju Botanical
Brewery.&amp;rdquo; &lt;sup&gt;&lt;a id=&quot;fnr.1&quot; class=&quot;footref&quot; href=&quot;#fn.1&quot; role=&quot;doc-backlink&quot;&gt;1&lt;/a&gt;&lt;/sup&gt; 韩国济州岛的Ha Min-ju在她的酒中注入济州岛的味道。估计是橘子的味道。
&lt;/p&gt;

&lt;p&gt;
另一个单词 &lt;b&gt;imbibe&lt;/b&gt; 饮酒，引申意为吸收、接受知识。来自拉丁语 &lt;b&gt;imbibere&lt;/b&gt; 可能和 &lt;b&gt;imbuere&lt;/b&gt; 有关。
&lt;/p&gt;

&lt;p&gt;
She &lt;b&gt;imbibed&lt;/b&gt; vast quantities of coffee. 她喝了大量咖啡。以前，我也一天喝两三杯。后来觉得咖啡对肠胃刺激太大，也就不喝了。最近听说公司的咖啡机内部因为潮湿发霉严重，暗自庆幸……
&lt;/p&gt;

&lt;p&gt;
&lt;b&gt;imbibe&lt;/b&gt; moral principles 接受道德原则。这里用了 &lt;b&gt;imbibe&lt;/b&gt; 的引申义。
&lt;/p&gt;
&lt;div id=&quot;footnotes&quot;&gt;
&lt;h2 class=&quot;footnotes&quot;&gt;Footnotes: &lt;/h2&gt;
&lt;div id=&quot;text-footnotes&quot;&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.1&quot; class=&quot;footnum&quot; href=&quot;#fnr.1&quot; role=&quot;doc-backlink&quot;&gt;1&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot; role=&quot;doc-footnote&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
INTERVIEW: Jeju&amp;rsquo;s botanical brewer Ha Min-ju turns local produce
into unique spirits
&lt;a href=&quot;https://www.koreatimes.co.kr/www/art/2024/06/141_377420.html&quot;&gt;https://www.koreatimes.co.kr/www/art/2024/06/141_377420.html&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;


&lt;/div&gt;
&lt;/div&gt;</content>
 </entry>
 
 <entry>
   <title>单词本：judicious</title>
   <link href="http://kimi.im/2024-06-26-judicious"/>
   <updated>2024-06-26T00:00:00+00:00</updated>
   <id>http://kimi.im/judicious</id>
   <content type="html">&lt;p&gt;
这两天有个瑞典有个老专家过来给我们做功能安全开发培训。老专家果然是老专家，功能安全标准哪一页哪张表都能记到脑子里。还打趣的说，等你们也能记住这些细节的时候，就离死不远了。
&lt;/p&gt;

&lt;p&gt;
功能安全和产品功能在经济价值相比，显然有点出力不讨好。但是，对于那类出错了，就要付出沉重代价的领域，功能安全是不能少的。比如 T üV的功能安全手册里这么说：
&lt;/p&gt;

&lt;p&gt;
There is strong evidence to support that a wise and &lt;b&gt;judicious&lt;/b&gt;
investment in safety is a indeed a value add. Investment in safety
will have a direct positive impact on the bottom line. One extremely
important factor in the value add is management of risk.  Functional
safety represents the absence of unacceptable risk from hazards caused
by systems&amp;rsquo; malfunctioning behavior.
&lt;/p&gt;

&lt;p&gt;
功能安全的投资是明智的。最重要的是能做到风险管理。功能安全就是把无法承担的风险发生的概率降到能接受的范围。
&lt;/p&gt;

&lt;p&gt;
这里，用到了 &lt;b&gt;judicious&lt;/b&gt; ，意思是有见识的，明智的。比如 a &lt;b&gt;judicious&lt;/b&gt;
choice, a &lt;b&gt;judicious&lt;/b&gt; decision, a &lt;b&gt;judicious&lt;/b&gt; remark.
&lt;/p&gt;

&lt;p&gt;
这个词其实和judge, judgment同源，即有判断的意思。拉丁语里判断就是
iudicium。形容词形式为 iudiciosus 。动词为 iudicare。
&lt;/p&gt;

&lt;p&gt;
再拆分开，ius 是公正、法律的意思。dicere 是说的意思。加起来，就是把公正和法律说出来，即审判、判决。
&lt;/p&gt;

&lt;p&gt;
Businesses can increase their bottom line by a &lt;b&gt;judicious&lt;/b&gt; spend on
safety.
&lt;/p&gt;

&lt;p&gt;
那么，反义词就是 injudicious 判断不当的、考虑不周的、不合适的、不明智的、浅薄的。
&lt;/p&gt;

&lt;p&gt;
In this big environment, it is an &lt;b&gt;injudicious&lt;/b&gt; moment to ask for a
rise. 在现在这个环境，要求加薪不是个明智的时候。
&lt;/p&gt;

&lt;p&gt;
Lu Bu betrayed Ding Yuan is an &lt;b&gt;injudicious&lt;/b&gt; decision. 吕布背叛丁原是个考虑不周的决定。
&lt;/p&gt;

&lt;p&gt;
法语和英语同源， judicieux 。其实可以认为英语是从法语里学去这个词的。
&lt;/p&gt;

&lt;p&gt;
德语近义词是 umsichtig 大概就是眼睛看得清、明智的。
&lt;/p&gt;

&lt;p&gt;
Waymo betont, dass die Software sicher sei und die Wagen
&lt;b&gt;umsichtig&lt;/b&gt;. Weymo 自动驾驶公司强调他们的软件是安全的，汽车是智能的。
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>功能安全的价值和出现</title>
   <link href="http://kimi.im/2024-06-26-functional-safety"/>
   <updated>2024-06-26T00:00:00+00:00</updated>
   <id>http://kimi.im/functional-safety</id>
   <content type="html">&lt;p&gt;
有些企业可能会觉得在安全上投入金钱收益很低。投资新机器可以可以提高常量，直接增加企业效益。而投资在安全方面则看不到立竿见影的效果。
&lt;/p&gt;

&lt;p&gt;
事实上，安全的效益要从风险导致的损失角度来审视。尤其是对于能源化工等行业，一次事故可能导致大面积停产、人员伤亡、环境污染、企业商誉受损，这些损失加起来将是难以承受之重。
&lt;/p&gt;

&lt;p&gt;
功能安全意味着风险管理，把产生事故的风险降到能接受的概率范围内。功能安全是一个系统性工程，就是从产品的空间和时间维度进行详细审核，确保从芯片到应用，从概念到产品，降低发生故障的概率，保障人员、企业和环境的安全。
&lt;/p&gt;

&lt;p&gt;
功能安全概念开始于欧共体的塞维索指令（Seveso DIRECTIVE）。20 世纪石油化工工业快速发展，野蛮生长，各类事故频发。1976 年，意大利塞维索（ Seveso ）的一家叫 Icmesa 的化工厂发生爆炸，造成了严重的二𫫇英（ Tetralorodibenzo-p-dioxin ）污染事故，周围 3000 多居民受污染影响，至今各类疾病的发生率依然高于周边平均水平。事后调查发现 Icmesa 工厂系统缺少化学反映控制、压力检测设置错误、没有有毒物质的排风装置。最关键的是流程混乱。
&lt;/p&gt;

&lt;p&gt;
这一事故直接推动了欧共体于 1982 年通过了 Seveso DIRECTIVE(82/501/EEC)，又称《工业活动安全事故风险法令》，该法令要求有关部门密切检测可能发生重大事故的地点，并对其进行安全评估，公布评估结果。
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>单词本：flesh out</title>
   <link href="http://kimi.im/2024-06-25-flesh-out"/>
   <updated>2024-06-25T00:00:00+00:00</updated>
   <id>http://kimi.im/flesh-out</id>
   <content type="html">&lt;p&gt;
最近要给同事们做一个信息安全开发相关的培训，顺便学学公司的培训网站关于
PPT 方面的培训：
&lt;/p&gt;

&lt;p&gt;
You&amp;rsquo;re probably planning to develop slides for your presentation. If
so, consider using the outline mode in your presentation software to
start organizing your thoughts. Resist the temptation to &lt;b&gt;flesh out&lt;/b&gt; any
slides at this stage though.
&lt;/p&gt;

&lt;p&gt;
这里告诉我们，在设计 PPT 的时候，可以考虑先从大纲模式开始组织内容。然后再填充内容。切忌不可以在这个阶段就开始着手把 PPT 的骨肉变得丰满。这里就用到了&lt;b&gt;flesh out&lt;/b&gt;这个词，表示在大纲中填充细节。
&lt;/p&gt;

&lt;p&gt;
flesh 正是食用肉的意思。&lt;b&gt;flesh out&lt;/b&gt;不就是长出肉来，或者丰满骨肉的意思么？
&lt;/p&gt;

&lt;p&gt;
比如：The young woman is &lt;b&gt;fleshing out&lt;/b&gt; 这个年轻女人正长肉变圆。
&lt;/p&gt;

&lt;p&gt;
而&lt;b&gt;flesh out&lt;/b&gt;的引申义则是添加细节。根据剑桥英语字典 flesh something out
就是 to add more details or information to something，给某物添加更多细节信息。
&lt;/p&gt;

&lt;p&gt;
比如：These plans need to be &lt;b&gt;fleshed out&lt;/b&gt; with some more figures. 这些计划需要更多的图片来扩充细节。
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>单词本：defuse</title>
   <link href="http://kimi.im/2024-06-25-defuse"/>
   <updated>2024-06-25T00:00:00+00:00</updated>
   <id>http://kimi.im/defuse</id>
   <content type="html">&lt;p&gt;
最近上下班路上听World Today，英语口语水平确实提升不少呀。今天下班路上听了 2024-06-24的新闻，说德国副总理出访中国，来缓和贸易紧张状态，人家德国人还是想在中国好好卖车的：
&lt;/p&gt;

&lt;p&gt;
Can German Vice Chancellor Habeck&amp;rsquo;s China trip help &lt;b&gt;defuse&lt;/b&gt; trade tensions?  
&lt;/p&gt;

&lt;p&gt;
这里用了 &lt;b&gt;defuse&lt;/b&gt; 缓解、缓和、平息。
&lt;/p&gt;

&lt;p&gt;
这个词的本意是拆除炸弹的引信，也就能避免炸弹爆炸了。de- 的意思就是离开、拆开、拿开的开，而 fuse 则是保险丝，也是炸弹上面的引信。因为 fuse 本来是溶解的意思，而以前的炸弹，包括烟花，都是在细细的纸管里放进流动状的火药。导火索或引信由此而得名。
&lt;/p&gt;

&lt;p&gt;
所以，defuse 从熄灭炸弹，引申为平息缓和矛盾。
&lt;/p&gt;

&lt;p&gt;
德语翻译entschärfen。 ent- 就是英语的 de- 去除，而 scharf 是热、辣、锋利 sharp，合起来就是去除热辣锋利，反话正说就是平息矛盾了。
&lt;/p&gt;

&lt;p&gt;
eine Bombe entschärfen = defuse a bomb.
&lt;/p&gt;

&lt;p&gt;
ein Problem entschärfen = to alleviate a problem
&lt;/p&gt;

&lt;p&gt;
die menschlichen Konflikte wurden durch die Inszenierung entschärft 通过进步化解人类的矛盾
&lt;/p&gt;

&lt;p&gt;
World Today 主持人刘琨的口语真好听啊。不知道是不是这么写，反正她说的是
I&amp;rsquo;m Liu Kun in Beijing.
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>babashka 函数库之文件路径和属性函数</title>
   <link href="http://kimi.im/2024-06-22-babashka-fs"/>
   <updated>2024-06-22T00:00:00+00:00</updated>
   <id>http://kimi.im/babashka-fs</id>
   <content type="html">&lt;p&gt;
之前介绍过&lt;a href=&quot;2024-06-20-babashka.html#ID-8D27FCBF-6919-4067-B556-5142F0849CE0&quot;&gt;babashka - 有趣又便捷巴布什卡头巾&lt;/a&gt;，用 clojure 处理脚本任务方便又快捷，还有很多上手能用的内置函数库可以用。
&lt;/p&gt;

&lt;p&gt;
一般脚本处理，文件操作是必不可少的任务。这篇文章介绍下 babashka 的文件系统库。
&lt;/p&gt;

&lt;p&gt;
首先要用过 require 把函数库加载进来。然后，我们定义一组文件路径进行测试。
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-bb&quot; id=&quot;orgbd99d2d&quot;&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;require &apos;&lt;span style=&quot;color: #7388d6;&quot;&gt;[&lt;/span&gt;babashka.fs &lt;span style=&quot;color: #110099;&quot;&gt;:as&lt;/span&gt; fs&lt;span style=&quot;color: #7388d6;&quot;&gt;]&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;def&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;test-paths&lt;/span&gt;
  &lt;span style=&quot;color: #7388d6;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;.&quot;&lt;/span&gt;  &lt;span style=&quot;color: #3F7F5F;&quot;&gt;;; &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;&amp;#30456;&amp;#23545;&amp;#36335;&amp;#24452;&lt;/span&gt;
   &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;..&quot;&lt;/span&gt; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;;; &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;&amp;#30456;&amp;#23545;&amp;#36335;&amp;#24452;&amp;#65292;&amp;#38544;&amp;#34255;&amp;#25991;&amp;#20214;&lt;/span&gt;
   &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;~&quot;&lt;/span&gt;  &lt;span style=&quot;color: #3F7F5F;&quot;&gt;;; &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;&amp;#24403;&amp;#20316;&amp;#26222;&amp;#36890;&amp;#25991;&amp;#20214;&amp;#21517;&amp;#22788;&amp;#29702;&amp;#65292;&amp;#25152;&amp;#20197;&amp;#26159;&amp;#35813;&amp;#25991;&amp;#20214;&amp;#19981;&amp;#23384;&amp;#22312;&lt;/span&gt;
   &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;bb&quot;&lt;/span&gt; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;;; &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;&amp;#21487;&amp;#25191;&amp;#34892;&amp;#25991;&amp;#20214;&amp;#65292;&amp;#19981;&amp;#21487;&amp;#20889;&lt;/span&gt;
   &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;babashka-fs.org&quot;&lt;/span&gt; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;;; &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;&amp;#26412;&amp;#25991;&amp;#65292;&amp;#25991;&amp;#26412;&amp;#25991;&amp;#20214;&lt;/span&gt;
   &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;/&quot;&lt;/span&gt;  &lt;span style=&quot;color: #3F7F5F;&quot;&gt;;; &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;&amp;#26681;&amp;#30446;&amp;#24405;&lt;/span&gt;
   &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;/Users/kimim/babashka&quot;&lt;/span&gt; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;;; &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;&amp;#26412;&amp;#25991;&amp;#19978;&amp;#23618;&amp;#30446;&amp;#24405;&lt;/span&gt;
   &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;/Users/kimim/babashka/babashka-fs.org&quot;&lt;/span&gt; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;;; &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;&amp;#26412;&amp;#25991;&amp;#32477;&amp;#23545;&amp;#36335;&amp;#24452;&lt;/span&gt;
   &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;/opt/homebrew/bin/bb&quot;&lt;/span&gt; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;;; &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;bb &amp;#30340;&amp;#31526;&amp;#21495;&amp;#38142;&amp;#25509;&amp;#25991;&amp;#20214;&amp;#65292;&amp;#21487;&amp;#25191;&amp;#34892;&lt;/span&gt;
   &lt;span style=&quot;color: #7388d6;&quot;&gt;]&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;pre class=&quot;example&quot;&gt;
#&apos;user/test-paths
&lt;/pre&gt;


&lt;p&gt;
然后，检查下，我们的操作系统是不是 Windows
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-bb&quot;&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;fs&lt;/span&gt;/windows?&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;pre class=&quot;example&quot;&gt;
false
&lt;/pre&gt;


&lt;p&gt;
因为，现在用的是 macOS ，所以返回结果为 false。
&lt;/p&gt;

&lt;p&gt;
&lt;b&gt;检查文件路径是不是绝对路径&lt;/b&gt;
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-bb&quot;&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;doseq&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;[&lt;/span&gt;path test-paths&lt;span style=&quot;color: #7388d6;&quot;&gt;]&lt;/span&gt;
  &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;print &lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;str &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color: #000000; background-color: #f8f8f8; font-weight: bold;&quot;&gt;\&quot;&lt;/span&gt;&lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;&lt;/span&gt; path &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color: #000000; background-color: #f8f8f8; font-weight: bold;&quot;&gt;\&quot;&lt;/span&gt;&lt;span style=&quot;color: #2A00FF;&quot;&gt;:&quot;&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt;
         &lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;fs&lt;/span&gt;/absolute? path&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color: #000000; background-color: #f8f8f8; font-weight: bold;&quot;&gt;\n&lt;/span&gt;&lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;pre class=&quot;example&quot;&gt;
&quot;.&quot;: false 
&quot;..&quot;: false 
&quot;~&quot;: false 
&quot;bb&quot;: false 
&quot;babashka-fs.org&quot;: false 
&quot;/&quot;: true 
&quot;/Users/kimim/babashka&quot;: true 
&quot;/Users/kimim/babashka/babashka-fs.org&quot;: true 
&quot;/opt/homebrew/bin/bb&quot;: true
&lt;/pre&gt;


&lt;p&gt;
只有&lt;code&gt;/&lt;/code&gt;开头的路径才是绝对路径。如果是绝对路径，&lt;code&gt;fs/absolute?&lt;/code&gt;返回 &lt;code&gt;true&lt;/code&gt;
，不然返回 &lt;code&gt;false&lt;/code&gt; 。
&lt;/p&gt;

&lt;p&gt;
&lt;b&gt;是否为相对路径&lt;/b&gt;
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-bb&quot;&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;doseq&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;[&lt;/span&gt;path test-paths&lt;span style=&quot;color: #7388d6;&quot;&gt;]&lt;/span&gt;
  &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;print &lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;str &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color: #000000; background-color: #f8f8f8; font-weight: bold;&quot;&gt;\&quot;&lt;/span&gt;&lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;&lt;/span&gt; path &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color: #000000; background-color: #f8f8f8; font-weight: bold;&quot;&gt;\&quot;&lt;/span&gt;&lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt;
         &lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;fs&lt;/span&gt;/relative? path&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color: #000000; background-color: #f8f8f8; font-weight: bold;&quot;&gt;\n&lt;/span&gt;&lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;pre class=&quot;example&quot;&gt;
&quot;.&quot; true 
&quot;..&quot; true 
&quot;~&quot; true 
&quot;bb&quot; true 
&quot;babashka-fs.org&quot; true 
&quot;/&quot; false 
&quot;/Users/kimim/babashka&quot; false 
&quot;/Users/kimim/babashka/babashka-fs.org&quot; false 
&quot;/opt/homebrew/bin/bb&quot; false
&lt;/pre&gt;


&lt;p&gt;
也就是&lt;code&gt;fs/absolutize&lt;/code&gt;和 &lt;code&gt;fs/relative?&lt;/code&gt; 是一对互补查询函数。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;检查文件是否存在&lt;/b&gt;
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-bb&quot;&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;doseq&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;[&lt;/span&gt;path test-paths&lt;span style=&quot;color: #7388d6;&quot;&gt;]&lt;/span&gt;
  &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;print &lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;str &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color: #000000; background-color: #f8f8f8; font-weight: bold;&quot;&gt;\&quot;&lt;/span&gt;&lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;&lt;/span&gt; path &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color: #000000; background-color: #f8f8f8; font-weight: bold;&quot;&gt;\&quot;&lt;/span&gt;&lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt;
         &lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;fs&lt;/span&gt;/exists? path&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color: #000000; background-color: #f8f8f8; font-weight: bold;&quot;&gt;\n&lt;/span&gt;&lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;pre class=&quot;example&quot;&gt;
&quot;.&quot; true 
&quot;..&quot; true 
&quot;~&quot; false 
&quot;bb&quot; false 
&quot;babashka-fs.org&quot; false 
&quot;/&quot; true 
&quot;/Users/kimim/babashka&quot; true 
&quot;/Users/kimim/babashka/babashka-fs.org&quot; false 
&quot;/opt/homebrew/bin/bb&quot; true
&lt;/pre&gt;


&lt;p&gt;
&lt;b&gt;注意&lt;/b&gt; &lt;code&gt;babashka/fs&lt;/code&gt; 不把波浪线当作特殊字符处理。
&lt;/p&gt;

&lt;p&gt;
需要&lt;code&gt;fs/expand-home&lt;/code&gt;把波浪线转成系统的&lt;code&gt;user.home&lt;/code&gt;环境变量。
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-bb&quot;&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;str &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;fs&lt;/span&gt;/expand-home &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;~&quot;&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;pre class=&quot;example&quot;&gt;
/Users/kimim
&lt;/pre&gt;



&lt;p&gt;
&lt;b&gt;检查文件是否为文件夹&lt;/b&gt;
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-bb&quot;&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;doseq&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;[&lt;/span&gt;path test-paths&lt;span style=&quot;color: #7388d6;&quot;&gt;]&lt;/span&gt;
  &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;print &lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;str &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color: #000000; background-color: #f8f8f8; font-weight: bold;&quot;&gt;\&quot;&lt;/span&gt;&lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;&lt;/span&gt; path &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color: #000000; background-color: #f8f8f8; font-weight: bold;&quot;&gt;\&quot;&lt;/span&gt;&lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt;
         &lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;fs&lt;/span&gt;/directory? path&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color: #000000; background-color: #f8f8f8; font-weight: bold;&quot;&gt;\n&lt;/span&gt;&lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;pre class=&quot;example&quot;&gt;
&quot;.&quot; true 
&quot;..&quot; true 
&quot;~&quot; false 
&quot;bb&quot; false 
&quot;babashka-fs.org&quot; false 
&quot;/&quot; true 
&quot;/Users/kimim/babashka&quot; true 
&quot;/Users/kimim/babashka/babashka-fs.org&quot; false 
&quot;/opt/homebrew/bin/bb&quot; false
&lt;/pre&gt;



&lt;p&gt;
&lt;b&gt;是否可执行&lt;/b&gt;
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-bb&quot;&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;doseq&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;[&lt;/span&gt;path test-paths&lt;span style=&quot;color: #7388d6;&quot;&gt;]&lt;/span&gt;
  &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;print &lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;str &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color: #000000; background-color: #f8f8f8; font-weight: bold;&quot;&gt;\&quot;&lt;/span&gt;&lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;&lt;/span&gt; path &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color: #000000; background-color: #f8f8f8; font-weight: bold;&quot;&gt;\&quot;&lt;/span&gt;&lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt;
         &lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;fs&lt;/span&gt;/executable? path&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color: #000000; background-color: #f8f8f8; font-weight: bold;&quot;&gt;\n&lt;/span&gt;&lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;pre class=&quot;example&quot;&gt;
&quot;.&quot; true 
&quot;..&quot; true 
&quot;~&quot; false 
&quot;bb&quot; false 
&quot;babashka-fs.org&quot; false 
&quot;/&quot; true 
&quot;/Users/kimim/babashka&quot; true 
&quot;/Users/kimim/babashka/babashka-fs.org&quot; false 
&quot;/opt/homebrew/bin/bb&quot; true
&lt;/pre&gt;



&lt;p&gt;
&lt;b&gt;是否隐藏文件&lt;/b&gt;
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-bb&quot;&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;doseq&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;[&lt;/span&gt;path test-paths&lt;span style=&quot;color: #7388d6;&quot;&gt;]&lt;/span&gt;
  &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;print &lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;str &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color: #000000; background-color: #f8f8f8; font-weight: bold;&quot;&gt;\&quot;&lt;/span&gt;&lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;&lt;/span&gt; path &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color: #000000; background-color: #f8f8f8; font-weight: bold;&quot;&gt;\&quot;&lt;/span&gt;&lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt;
         &lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;fs&lt;/span&gt;/hidden? path&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color: #000000; background-color: #f8f8f8; font-weight: bold;&quot;&gt;\n&lt;/span&gt;&lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;pre class=&quot;example&quot;&gt;
&quot;.&quot; true 
&quot;..&quot; true 
&quot;~&quot; false 
&quot;bb&quot; false 
&quot;babashka-fs.org&quot; false 
&quot;/&quot; false 
&quot;/Users/kimim/babashka&quot; false 
&quot;/Users/kimim/babashka/babashka-fs.org&quot; false 
&quot;/opt/homebrew/bin/bb&quot; false
&lt;/pre&gt;



&lt;p&gt;
&lt;b&gt;是否可读取&lt;/b&gt;
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-bb&quot;&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;doseq&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;[&lt;/span&gt;path test-paths&lt;span style=&quot;color: #7388d6;&quot;&gt;]&lt;/span&gt;
  &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;print &lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;str &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color: #000000; background-color: #f8f8f8; font-weight: bold;&quot;&gt;\&quot;&lt;/span&gt;&lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;&lt;/span&gt; path &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color: #000000; background-color: #f8f8f8; font-weight: bold;&quot;&gt;\&quot;&lt;/span&gt;&lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt;
         &lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;fs&lt;/span&gt;/readable? path&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color: #000000; background-color: #f8f8f8; font-weight: bold;&quot;&gt;\n&lt;/span&gt;&lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;pre class=&quot;example&quot;&gt;
&quot;.&quot; true 
&quot;..&quot; true 
&quot;~&quot; false 
&quot;bb&quot; true 
&quot;babashka-fs.org&quot; true 
&quot;/&quot; true 
&quot;/Users/kimim/babashka&quot; true 
&quot;/Users/kimim/babashka/babashka-fs.org&quot; true 
&quot;/opt/homebrew/bin/bb&quot; true
&lt;/pre&gt;



&lt;p&gt;
&lt;b&gt;是否可写&lt;/b&gt;
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-bb&quot;&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;doseq&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;[&lt;/span&gt;path test-paths&lt;span style=&quot;color: #7388d6;&quot;&gt;]&lt;/span&gt;
  &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;print &lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;str &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color: #000000; background-color: #f8f8f8; font-weight: bold;&quot;&gt;\&quot;&lt;/span&gt;&lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;&lt;/span&gt; path &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color: #000000; background-color: #f8f8f8; font-weight: bold;&quot;&gt;\&quot;&lt;/span&gt;&lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt;
         &lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;fs&lt;/span&gt;/writable? path&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color: #000000; background-color: #f8f8f8; font-weight: bold;&quot;&gt;\n&lt;/span&gt;&lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;pre class=&quot;example&quot;&gt;
&quot;.&quot; true 
&quot;..&quot; true 
&quot;~&quot; false 
&quot;bb&quot; false 
&quot;babashka-fs.org&quot; true 
&quot;/&quot; false 
&quot;/Users/kimim/babashka&quot; true 
&quot;/Users/kimim/babashka/babashka-fs.org&quot; true 
&quot;/opt/homebrew/bin/bb&quot; false
&lt;/pre&gt;



&lt;p&gt;
&lt;b&gt;是否符号连接&lt;/b&gt;
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-bb&quot;&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;doseq&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;[&lt;/span&gt;path test-paths&lt;span style=&quot;color: #7388d6;&quot;&gt;]&lt;/span&gt;
  &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;print &lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;str &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color: #000000; background-color: #f8f8f8; font-weight: bold;&quot;&gt;\&quot;&lt;/span&gt;&lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;&lt;/span&gt; path &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color: #000000; background-color: #f8f8f8; font-weight: bold;&quot;&gt;\&quot;&lt;/span&gt;&lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt;
         &lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;fs&lt;/span&gt;/sym-link? path&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color: #000000; background-color: #f8f8f8; font-weight: bold;&quot;&gt;\n&lt;/span&gt;&lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;pre class=&quot;example&quot;&gt;
&quot;.&quot; false 
&quot;..&quot; false 
&quot;~&quot; false 
&quot;bb&quot; false 
&quot;babashka-fs.org&quot; false 
&quot;/&quot; false 
&quot;/Users/kimim/babashka&quot; false 
&quot;/Users/kimim/babashka/babashka-fs.org&quot; false 
&quot;/opt/homebrew/bin/bb&quot; true
&lt;/pre&gt;




&lt;p&gt;
&lt;b&gt;把文件路径变成绝对路径&lt;/b&gt;
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-bb&quot;&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;doseq&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;[&lt;/span&gt;path test-paths&lt;span style=&quot;color: #7388d6;&quot;&gt;]&lt;/span&gt;
  &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;print &lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;str &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color: #000000; background-color: #f8f8f8; font-weight: bold;&quot;&gt;\&quot;&lt;/span&gt;&lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;&lt;/span&gt; path &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color: #000000; background-color: #f8f8f8; font-weight: bold;&quot;&gt;\&quot;&lt;/span&gt;&lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt;
         &lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;str &lt;span style=&quot;color: #709870;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;fs&lt;/span&gt;/absolutize path&lt;span style=&quot;color: #709870;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color: #000000; background-color: #f8f8f8; font-weight: bold;&quot;&gt;\n&lt;/span&gt;&lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;pre class=&quot;example&quot;&gt;
&quot;.&quot; /Users/kimim/babashka/. 
&quot;..&quot; /Users/kimim/babashka/.. 
&quot;~&quot; /Users/kimim/babashka/~ 
&quot;bb&quot; /Users/kimim/babashka/bb 
&quot;babashka-fs.org&quot; /Users/kimim/babashka/babashka-fs.org 
&quot;/&quot; / 
&quot;/Users/kimim/babashka&quot; /Users/kimim/babashka 
&quot;/Users/kimim/babashka/babashka-fs.org&quot; /Users/kimim/babashka/babashka-fs.org 
&quot;/opt/homebrew/bin/bb&quot; /opt/homebrew/bin/bb
&lt;/pre&gt;


&lt;p&gt;
&lt;code&gt;fs/absolutize&lt;/code&gt; 返回文件对象&lt;code&gt;sun.nio.fs.UnixPath&lt;/code&gt;，为了显示清晰，我们把它转成字符串输出。
&lt;/p&gt;

&lt;p&gt;
&lt;b&gt;把文件路径正规化&lt;/b&gt;
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-bb&quot;&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;doseq&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;[&lt;/span&gt;path test-paths&lt;span style=&quot;color: #7388d6;&quot;&gt;]&lt;/span&gt;
  &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;print &lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;str &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color: #000000; background-color: #f8f8f8; font-weight: bold;&quot;&gt;\&quot;&lt;/span&gt;&lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;&lt;/span&gt; path &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color: #000000; background-color: #f8f8f8; font-weight: bold;&quot;&gt;\&quot;&lt;/span&gt;&lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt;
         &lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;str &lt;span style=&quot;color: #709870;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;fs&lt;/span&gt;/canonicalize path&lt;span style=&quot;color: #709870;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color: #000000; background-color: #f8f8f8; font-weight: bold;&quot;&gt;\n&lt;/span&gt;&lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;pre class=&quot;example&quot;&gt;
&quot;.&quot; /Users/kimim/babashka 
&quot;..&quot; /Users/kimim 
&quot;~&quot; /Users/kimim/babashka/~ 
&quot;bb&quot; /Users/kimim/babashka/bb 
&quot;babashka-fs.org&quot; /Users/kimim/babashka/babashka-fs.org 
&quot;/&quot; / 
&quot;/Users/kimim/babashka&quot; /Users/kimim/babashka 
&quot;/Users/kimim/babashka/babashka-fs.org&quot; /Users/kimim/babashka/babashka-fs.org 
&quot;/opt/homebrew/bin/bb&quot; /opt/homebrew/Cellar/babashka/1.3.190/bin/bb
&lt;/pre&gt;



&lt;p&gt;
&lt;b&gt;把文件路径变成 Unix 风格的路径&lt;/b&gt;
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-bb&quot;&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;doseq&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;[&lt;/span&gt;path test-paths&lt;span style=&quot;color: #7388d6;&quot;&gt;]&lt;/span&gt;
  &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;print &lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;str &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color: #000000; background-color: #f8f8f8; font-weight: bold;&quot;&gt;\&quot;&lt;/span&gt;&lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;&lt;/span&gt; path &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color: #000000; background-color: #f8f8f8; font-weight: bold;&quot;&gt;\&quot;&lt;/span&gt;&lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt;
         &lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;str &lt;span style=&quot;color: #709870;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;fs&lt;/span&gt;/unixify path&lt;span style=&quot;color: #709870;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color: #000000; background-color: #f8f8f8; font-weight: bold;&quot;&gt;\n&lt;/span&gt;&lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;pre class=&quot;example&quot;&gt;
&quot;.&quot; . 
&quot;..&quot; .. 
&quot;~&quot; ~ 
&quot;bb&quot; bb 
&quot;babashka-fs.org&quot; babashka-fs.org 
&quot;/&quot; / 
&quot;/Users/kimim/babashka&quot; /Users/kimim/babashka 
&quot;/Users/kimim/babashka/babashka-fs.org&quot; /Users/kimim/babashka/babashka-fs.org 
&quot;/opt/homebrew/bin/bb&quot; /opt/homebrew/bin/bb
&lt;/pre&gt;
</content>
 </entry>
 
 <entry>
   <title>Windows msys2 emacs</title>
   <link href="http://kimi.im/2024-06-20-emacs-windows"/>
   <updated>2024-06-20T00:00:00+00:00</updated>
   <id>http://kimi.im/emacs-windows</id>
   <content type="html">&lt;p&gt;
之前有介绍怎么在 macOS 安装使用 emacs 。最近有同学问我怎么在 Windows上顺畅的使用 emacs。那就分享下我的安装过程吧。
&lt;/p&gt;

&lt;p&gt;
首先是下载安装 msys2
&lt;/p&gt;

&lt;p&gt;
从项目主页找到安装文件&lt;code&gt;.exe&lt;/code&gt;下载安装 &lt;a href=&quot;https://www.msys2.org/&quot;&gt;https://www.msys2.org/&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
假设我们安装到 &lt;code&gt;C:/msys64&lt;/code&gt;
&lt;/p&gt;

&lt;p&gt;
然后打开&lt;code&gt;C:/msys64/msys2.exe&lt;/code&gt;对程序包进行整体升级：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-shell&quot;&gt;pacman -Syu
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
考虑到 msys2 官网建议使用 ucrt64 &lt;a href=&quot;https://www.msys2.org/docs/environments/&quot;&gt;https://www.msys2.org/docs/environments/&lt;/a&gt;
&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;
MSYS2 comes with different environments and the first thing you have
to decide is which one to use. The differences among the environments
are mainly environment variables, default compilers/linkers,
architecture, system libraries used etc. If you are unsure, go with
UCRT64.
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;
所以我们就用 ucrt64 版本的 emacs。
&lt;/p&gt;

&lt;p&gt;
安装 emacs 以及需要用到的工具：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-shell&quot;&gt;pacman -S mingw-w64-ucrt-x86_64-emacs       &lt;span style=&quot;color: #2A00FF;&quot;&gt;\&lt;/span&gt;
       mingw-w64-ucrt-x86_64-librsvg        &lt;span style=&quot;color: #2A00FF;&quot;&gt;\&lt;/span&gt;
       mingw-w64-ucrt-x86_64-pdf2svg        &lt;span style=&quot;color: #2A00FF;&quot;&gt;\&lt;/span&gt;
       mingw-w64-ucrt-x86_64-ripgrep        &lt;span style=&quot;color: #2A00FF;&quot;&gt;\&lt;/span&gt;
       mingw-w64-ucrt-x86_64-ripgrep-all    &lt;span style=&quot;color: #2A00FF;&quot;&gt;\&lt;/span&gt;
       mingw-w64-ucrt-x86_64-hunspell       &lt;span style=&quot;color: #2A00FF;&quot;&gt;\&lt;/span&gt;
       mingw-w64-ucrt-x86_64-hunspell-en    &lt;span style=&quot;color: #2A00FF;&quot;&gt;\&lt;/span&gt;
       mingw-w64-ucrt-x86_64-sdcv           &lt;span style=&quot;color: #2A00FF;&quot;&gt;\&lt;/span&gt;
       mingw-w64-ucrt-x86_64-mpg123         &lt;span style=&quot;color: #2A00FF;&quot;&gt;\&lt;/span&gt;
       mingw-w64-ucrt-x86_64-emacs-pdf-tools-server
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
以上是一些基本工具：
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;librsvg 在 emacs 中显示 svg 图片&lt;/li&gt;
&lt;li&gt;pdf2svg 在org mode显示 pdf&lt;/li&gt;
&lt;li&gt;ripgrep，ripgrep-all 文本搜索&lt;/li&gt;
&lt;li&gt;hunspell，hunspell-en 英语拼写检查&lt;/li&gt;
&lt;li&gt;sdcv 单词查找&lt;/li&gt;
&lt;li&gt;mpg123 播放 sdcv 以及fanyi.el查到的单词的读音&lt;/li&gt;
&lt;li&gt;emacs-pdf-tools-server 在 emacs 中查阅 pdf 文件&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
如果需要从org mode导出 pdf 还需要以下工具：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-shell&quot;&gt;pacman -S mingw-w64-ucrt-x86_64-python-pygments &lt;span style=&quot;color: #2A00FF;&quot;&gt;\&lt;/span&gt;
       mingw-w64-ucrt-x86_64-inkscape
&lt;/pre&gt;
&lt;/div&gt;

&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;python-pygments 导出的 pdf 中代码语法高亮&lt;/li&gt;
&lt;li&gt;inkscape 通过 latex 导出 orgmode 的时候，把 svg 嵌入到 pdf 中&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
还需要 texlive ，请另外从 &lt;a href=&quot;https://tug.org/texlive/windows.html&quot;&gt;https://tug.org/texlive/windows.html&lt;/a&gt;下载
&lt;code&gt;install-tl-windows.exe&lt;/code&gt; 安装 texlive 到 &lt;code&gt;C:/texlive&lt;/code&gt;
&lt;/p&gt;

&lt;p&gt;
添加以下内容到&lt;code&gt;~/.bashrc&lt;/code&gt;以可以使用 latex 工具：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-shell&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;export&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;PATH&lt;/span&gt;=$&lt;span style=&quot;color: #000000;&quot;&gt;PATH&lt;/span&gt;:/c/texlive/windows/2024/bin
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
开发的同学还可以考虑安装开发相关的工具：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-shell&quot;&gt;pacman -S mingw-w64-ucrt-x86_64-clang-analyzer  &lt;span style=&quot;color: #2A00FF;&quot;&gt;\&lt;/span&gt;
       mingw-w64-ucrt-x86_64-clang-tools-extra  &lt;span style=&quot;color: #2A00FF;&quot;&gt;\&lt;/span&gt;
       mingw-w64-ucrt-x86_64-rust               &lt;span style=&quot;color: #2A00FF;&quot;&gt;\&lt;/span&gt;
       mingw-w64-ucrt-x86_64-python-lsp-server
&lt;/pre&gt;
&lt;/div&gt;

&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;clang-analyzer, clang-tools-extra 支持C/C++的语法检查和 LSP
（Language Server Protocol）&lt;/li&gt;
&lt;li&gt;rust 支持 Rust 的 LSP&lt;/li&gt;
&lt;li&gt;python-lsp-server 支持 python 的 LSP&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
如果还需要文件加解密，可以安装 gpg
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-shell&quot;&gt;pacman -S msys/gnupg
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
注意，不是 ucrt64 的 gnupg，不知道为何，ucrt64 版本的工作不正常。
&lt;/p&gt;

&lt;p&gt;
然后，获取 emacs 配置文件：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-shell&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;cd&lt;/span&gt; ~
git clone --recurse-submodules git@github.com:kimim/kimim-emacs.git
cp kimim-emacs/.emacs .
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
最后，其他的一些工具还需要额外编译，汉语分词：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-shell&quot;&gt;pacman -S ucrt64/mingw-w64-ucrt-x86_64-make
pacman -S ucrt64/mingw-w64-ucrt-x86_64-gcc

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;cd&lt;/span&gt; kimim-emacs/site-lisp/cns/
git submodule update --init --recursive
mingw32-make.exe
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
最后，启动 emacs ，mintty bash命令行中输入 emacs
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-shell&quot;&gt;emacs
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
等几分钟，emacs 下载好 elpa 上的扩展包，就可以愉快地使用 emacs 了。
&lt;/p&gt;

&lt;p&gt;
此外，还可以考虑把 emacs 固定在任务栏：
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;右键选择 emacs 图标，选择Pin to taskbar或者“固定到任务栏”&lt;/li&gt;
&lt;li&gt;右键点击 emacs 图标，再右键点弹出菜单的 emacs 图标，选择“Property/属性”，然后在“Target/目标”填入：&lt;code&gt;C:\emacs.vbs&lt;/code&gt;。这样就不会弹出 CMD 命令行黑色窗口了。&lt;/li&gt;
&lt;li&gt;点击“Change Icon&amp;#x2026;/修改图标”，选择 &lt;code&gt;C:\msys64\ucrt64\bin\emacs.exe&lt;/code&gt;
。这样就就能正常显示 emacs 紫色的 logo 。&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
emacs.vbs 的内容为：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-basic&quot;&gt;p = CreateObject(&quot;Scripting.FileSystemObject&quot;).GetParentFolderName(WScript.ScriptFullName)
emacspath = p &amp;amp; &quot;\emacs.bat&quot;
&apos;WScript.Echo emacspath &apos;get absolute path
CreateObject(&quot;Wscript.Shell&quot;).Run emacspath, 0, True
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
而 emacs 的启动脚本为 &lt;code&gt;C:\emacs.bat&lt;/code&gt;
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-bat&quot;&gt;@&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;echo&lt;/span&gt; off

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;set&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;HOME&lt;/span&gt;=%&lt;span style=&quot;color: #000000;&quot;&gt;USERPROFILE&lt;/span&gt;%
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;set&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;MSYS_ROOT&lt;/span&gt;=C:\msys64
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;set&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;MSYS2_PATH_TYPE&lt;/span&gt;=strict
%&lt;span style=&quot;color: #000000;&quot;&gt;MSYS_ROOT&lt;/span&gt;%\\usr\\bin\\env MSYSTEM=UCRT64 /&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;usr&lt;/span&gt;/bin/bash -&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;lc&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;source $HOME/.bashrc &amp;amp;&amp;amp; emacs&quot;&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
这样可以避免弹出 CMD 终端框。
&lt;/p&gt;

&lt;p&gt;
还有一些性能方面的考虑，可以把用户组设置为缓存，这样 emacs 的启动速度和文件读写速度都会快很多。
&lt;/p&gt;

&lt;p&gt;
首先设置缓存：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-shell&quot;&gt;getent passwd $(id -u) &amp;gt; /etc/passwd
getent group $(id -G) &amp;gt; /etc/group
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
然后修改&lt;code&gt;C:/msys64/etc/nsswitch.conf&lt;/code&gt;删除 db：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-diff&quot;&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;#&lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt; Begin /etc/nsswitch.conf&lt;/span&gt;

&lt;span style=&quot;color: #aa2222; background-color: #ffeeee;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;background-color: #ffeeee;&quot;&gt;passwd: files db&lt;/span&gt;
&lt;span style=&quot;color: #22aa22; background-color: #eeffee;&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;background-color: #eeffee;&quot;&gt;passwd: files&lt;/span&gt;
&lt;span style=&quot;color: #aa2222; background-color: #ffeeee;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;background-color: #ffeeee;&quot;&gt;group: files db&lt;/span&gt;
&lt;span style=&quot;color: #22aa22; background-color: #eeffee;&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;background-color: #eeffee;&quot;&gt;group: files&lt;/span&gt;

db_enum: cache builtin

db_home: cygwin desc
db_shell: cygwin desc
db_gecos: cygwin desc

&lt;span style=&quot;color: #3F7F5F;&quot;&gt;#&lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt; End /etc/nsswitch.conf&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;
</content>
 </entry>
 
 <entry>
   <title>babashka - 有趣又便捷巴布什卡头巾</title>
   <link href="http://kimi.im/2024-06-20-babashka"/>
   <updated>2024-06-20T00:00:00+00:00</updated>
   <id>http://kimi.im/babashka</id>
   <content type="html">&lt;p&gt;
本来，Clojure 已经很好用了。它的好处数不胜数，以下简单罗列几个：
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;REPL，可以实时看到代码语句的运行结果，调试超级方便&lt;/li&gt;
&lt;li&gt;基于 Java ，可以无缝调用大量 Java类库。而 ClojureScript 则基于
JavaScript，随手一个npm/yarn add就可以调用 JS 库。常见的功能，基本都能找得到&lt;/li&gt;
&lt;li&gt;immutable async 都用起来很方便&lt;/li&gt;
&lt;li&gt;有了 Clojure 和 ClojureScript 前后端可以用一套语言通吃&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
既然，Clojure 已经那么好了，为什么还要有 babashka？
&lt;/p&gt;

&lt;p&gt;
因为，Clojure 主要还是用来开发应用的。桌面，或者网络，或者移动端应用，可以用 Clojure 或者 ClojureScript 编写。
&lt;/p&gt;

&lt;p&gt;
但是，它们不适用于命令行脚本编写。没法像 shell 那样，串联起几个命令，就解决一个重复处理的小任务。比如批量查找替换文件中的字符串，批量修改文件名。
&lt;/p&gt;

&lt;p&gt;
所以，正如 babashka 项目首页说的：babashka is a fast native Clojure
scripting runtime. 用上它，Clojure 程序员就不用在 Clojure 和 bash 之间来回切换了。因为，考虑到一些项目任务管理、文件管理、文本替换之类的工作还需要写 shell 脚本处理。
&lt;/p&gt;

&lt;p&gt;
babashka 本来是俄罗斯妇女戴在头上的漂亮头巾。在 Clojure 世界，它意味着
beyond bash。项目主页： &lt;a href=&quot;https://babashka.org&quot;&gt;https://babashka.org&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&lt;b&gt;babashka 的特色功能&lt;/b&gt;
&lt;/p&gt;

&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;&lt;p&gt;
&lt;b&gt;启动速度快&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
第一，它通过 GraalVM 编译成 native-image ；第二，它内嵌了一个小型 Clojure解析器。
&lt;/p&gt;&lt;/li&gt;

&lt;li&gt;&lt;p&gt;
&lt;b&gt;内置常用库&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
比如 cheshire 解析 json 文件，babashka.fs 操作文件系统，
babashka.process 进程管理，java.time 时间日期库。
&lt;/p&gt;&lt;/li&gt;

&lt;li&gt;&lt;p&gt;
&lt;b&gt;扩展很方便&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
除了内置的这些常用库，babashka 也可以加载 Clojure 库。更神奇的是，它可以动态添加扩展库，直接从网上下来，导入使用。
&lt;/p&gt;

&lt;p&gt;
另外，也可以通过 pod 协议集成其他各种语言开发的程序。
&lt;/p&gt;&lt;/li&gt;

&lt;li&gt;&lt;p&gt;
&lt;b&gt;支持多线程&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
基于 JVM 线程，支持异步操作。
&lt;/p&gt;&lt;/li&gt;

&lt;li&gt;&lt;p&gt;
&lt;b&gt;可管理任务&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
内置了task runner，能像 make， npm 那样管理脚本任务。
&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
&lt;b&gt;运行 babashka&lt;/b&gt;
&lt;/p&gt;

&lt;ol class=&quot;org-ol&quot;&gt;
&lt;li&gt;&lt;p&gt;
解析 Clojure 表达式
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-shell&quot;&gt;bb -m clojure.core/prn 1 2 3
&lt;/pre&gt;
&lt;/div&gt;&lt;/li&gt;

&lt;li&gt;运行脚本任务，通过bb.edn设置任务，然后调用 bb 运行任务。&lt;/li&gt;

&lt;li&gt;&lt;p&gt;
在 shell 调用 shebang 文件，比如将以下内容保存为 print.bb 
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-bb&quot;&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;#!&lt;/span&gt;/usr/bin/env bb
&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;println &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;+ 1 2 3&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
然后，在 shell 执行。
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-shell&quot;&gt;chmod +x print.bb
./print.bb
&lt;/pre&gt;
&lt;/div&gt;&lt;/li&gt;

&lt;li&gt;&lt;p&gt;
orgmode 代码块
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-org&quot;&gt;#+begin_src bb
(println (+ 1 2 3))
&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;
#+end_src
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-bb&quot;&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;println &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;+ 1 2 3&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;pre class=&quot;example&quot;&gt;
6
&lt;/pre&gt;&lt;/li&gt;
&lt;/ol&gt;


&lt;p&gt;
平时工作中已经用 bb 写了不少脚本，感觉还是满方便的。
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>单词本：heed</title>
   <link href="http://kimi.im/2024-06-19-heed"/>
   <updated>2024-06-19T00:00:00+00:00</updated>
   <id>http://kimi.im/heed</id>
   <content type="html">&lt;p&gt;
以前，各种盗版软件野蛮生长的时候，我们好像下载软件也不验证，就直接安装了用了。其实存在这很多安全隐患。现在，我们安装软件前，操作系统都会检验软件的签名是否有效。不然就跳出红色警告。苹果强制开发者提交的软件要有软件签名。
&lt;/p&gt;

&lt;p&gt;
这里，弹出的警告消息用的单词是 heed：
&lt;/p&gt;

&lt;p&gt;
Code Signing offers a method of stopping the distribution of malicious
software to vulnerable individuals, as long as warnings of a lack of a
code signing certificate are &lt;b&gt;heeded&lt;/b&gt;.
&lt;/p&gt;

&lt;p&gt;
heed 的意思是注意、留心，比如
&lt;/p&gt;

&lt;p&gt;
heed a warning 注意一项警告。
&lt;/p&gt;

&lt;p&gt;
heed the advice of the old man 要听老人言。
&lt;/p&gt;

&lt;p&gt;
做名词用：Take heed of your doctor&amp;rsquo;s advice. 听医生的话吧。
&lt;/p&gt;

&lt;p&gt;
这个 heed 原来和德语的 h üten是同源的。看起来有点相似。
&lt;/p&gt;

&lt;p&gt;
而 h üten的意思是保护、保管、监管的意思。
&lt;/p&gt;

&lt;p&gt;
比如ein Geheimnis hü ten 保守一个秘密。
&lt;/p&gt;

&lt;p&gt;
hüten 当作反身动词的时候有注意、小心避免的意思：
&lt;/p&gt;

&lt;p&gt;
sich hüten etw. zu tun 小心不要做某事。
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>单词本：tantamount</title>
   <link href="http://kimi.im/2024-06-18-tantamount"/>
   <updated>2024-06-18T00:00:00+00:00</updated>
   <id>http://kimi.im/tantamount</id>
   <content type="html">&lt;p&gt;
今天听World Today国际新闻听到这个单词 tantamount ：
&lt;/p&gt;

&lt;p&gt;
Hamas has responded to a US ceasefire proposal to end the war in Gaza,
but Israel says the response is &lt;b&gt;tantamount&lt;/b&gt; to a rejection.
&lt;/p&gt;

&lt;p&gt;
哈马斯回复停火建议，但是以色列却认为哈马斯的回复等同于拒绝停火。
&lt;/p&gt;

&lt;p&gt;
tantamount 相当于、相等于、等同于
&lt;/p&gt;

&lt;p&gt;
来源于拉丁语 tandem amonter = so amount to
&lt;/p&gt;

&lt;p&gt;
一般都是跟着 to 一起使用 tantamount to：
&lt;/p&gt;

&lt;p&gt;
Not to give an answer is &lt;b&gt;tantamount to&lt;/b&gt; a refusal. 不答覆等於拒绝
&lt;/p&gt;

&lt;p&gt;
Zuma&amp;rsquo;s MK party asks electoral court to order a rerun of May vote: The
MK Party won 14.5 percent of the vote, which translates into 58 seats
in the National Assembly, but claims that the declared result and
Ramaphosa&amp;rsquo;s re-election was &lt;b&gt;tantamount to&lt;/b&gt; a coup. 南非前总统雅各布·祖玛要求五月选举重来，认为现总统马塔梅拉·西里尔·拉马福萨再次参选等同于政变。
&lt;/p&gt;

&lt;p&gt;
法语ê tre équivalent à
&lt;/p&gt;

&lt;p&gt;
德语 gleichbedeutend mit etw. sein 
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>单词本：shtick</title>
   <link href="http://kimi.im/2024-06-18-shtick"/>
   <updated>2024-06-18T00:00:00+00:00</updated>
   <id>http://kimi.im/shtick</id>
   <content type="html">&lt;p&gt;
还是 Bren é Brown的 Dare to lead (&lt;a href=&quot;#citeproc_bib_item_1&quot;&gt;Brown 2018&lt;/a&gt;) 中看到的：
&lt;/p&gt;

&lt;p&gt;
Speaking is vulnerable. I don&amp;rsquo;t memorize my lines or have a set &lt;b&gt;shtick&lt;/b&gt;
that I do verbatim.
&lt;/p&gt;

&lt;p&gt;
作者说明了她紧张的第二个理由。因为每次演讲都有各种不可预期的情况，所以她没办法按照她的演讲稿按部就班的讲述。
&lt;/p&gt;

&lt;p&gt;
这里她用到 shtick 固定节目，也就是演讲中预先设计好的段子。
&lt;/p&gt;

&lt;p&gt;
这个词看起来很不英语。实际上它来自意第绪语的 shtik 。而 shtik又来自德语 St ück一片蛋糕的一片。比如
&lt;/p&gt;

&lt;p&gt;
ein Stück Kuchen 一块蛋糕
&lt;/p&gt;

&lt;p&gt;
ein Stück Seife 一块肥皂
&lt;/p&gt;

&lt;p&gt;
ein Stück Hoffnung 一线希望
&lt;/p&gt;

&lt;p&gt;
shtick 还有一个意思是个人的特别喜好：
&lt;/p&gt;

&lt;p&gt;
比如 movies about ordinary women who do extraordinary things - that&amp;rsquo;s
my &lt;b&gt;shtick&lt;/b&gt;. 就好比中专学生姜萍获得数学竞赛 12 名这类例子。
&lt;/p&gt;

&lt;p&gt;
&lt;b&gt;References&lt;/b&gt;
&lt;/p&gt;

&lt;style&gt;.csl-entry{text-indent: -1.5em; margin-left: 1.5em;}&lt;/style&gt;&lt;div class=&quot;csl-bib-body&quot;&gt;
  &lt;div class=&quot;csl-entry&quot;&gt;&lt;a id=&quot;citeproc_bib_item_1&quot;&gt;&lt;/a&gt;Brown, Brené. 2018. &lt;i&gt;Dare to Lead&lt;/i&gt;. Vermilion.&lt;/div&gt;
&lt;/div&gt;
</content>
 </entry>
 
 <entry>
   <title>假设检验 Hypothesis Testing 之双样本 t 检验</title>
   <link href="http://kimi.im/2024-06-16-two-samples-t-test"/>
   <updated>2024-06-16T00:00:00+00:00</updated>
   <id>http://kimi.im/two-samples-t-test</id>
   <content type="html">&lt;p&gt;
t 检验还可用于检验具有相同方差的两个正态总体均值差的假设。
&lt;/p&gt;

&lt;p&gt;
设\(X_1, X_2, \dots, X_{n_1}\)是来自正态总体\(\mu_1, \sigma^2\)的样本，\(Y_1, Y_2, \dots, Y_{n_2}\)是来自正态总体 \(N(\mu_2,
\sigma^2)\) 的样本，且设两样本独立。记它们的样本均值为 \(\overline{X},
\overline{Y}\)，样本方差 \(S_1^2,S_2^2\)。设 \(\mu_1, \mu_2,
\sigma^2\) 均未知。求检验问题：
&lt;/p&gt;

&lt;p&gt;
\[H_0 : \mu_1 - \mu_2 = \delta, ~~ H_1 : \mu_1 - \mu_2 \neq \delta\]
&lt;/p&gt;

&lt;p&gt;
（\(\delta\)为已知常数）的拒绝域，取显著性是水平为\(\alpha\)。
&lt;/p&gt;

\begin{equation}
t = \frac{(\overline{X} - \overline{Y}) - \delta}{S_w \sqrt{\frac{1}{n_1} + \frac{1}{n_2}}}
\end{equation}

&lt;p&gt;
其中
&lt;/p&gt;

\begin{equation}
S_w = \sqrt{\frac{(n_1 - 1)S_1^2 + (n_2 - 1)S_2^2}{n_1 + n_2 - 2}}
\end{equation}

&lt;p&gt;
当\(N_0\)为真时， \(t \sim t(n_1 + n_2 -2)\)，其拒绝域的形式为：
&lt;/p&gt;

\begin{equation}
|\frac{(\overline{x} - \overline{y}) - \delta}{s_w \sqrt{\frac{1}{n_1} + \frac{1}{n_2}}}| \geq k
\end{equation}

&lt;p&gt;
由
&lt;/p&gt;

\begin{equation}
P\{\text{当}H_0\text{为真拒绝}H_0\} = P_{\mu_1-\mu_2=\delta}\{|\frac{(\overline{X} - \overline{Y}) - \delta}{S_w \sqrt{\frac{1}{n_1} + \frac{1}{n_2}}} \geq k|\} = \alpha
\end{equation}

&lt;p&gt;
可得\(k = t_{\alpha / 2}(n_1 + n_2 - 2)\)。于是，拒绝域为
&lt;/p&gt;

\begin{equation}
|t| = \frac{|(\overline{x} - \overline{y}) - \delta|}{s_w \sqrt{\frac{1}{n_1} + \frac{1}{n_2}}} \geq t_{\alpha / 2}(n_1 + n_2 - 2)
\end{equation}

&lt;p&gt;
常用情况为\(\delta = 0\)。
&lt;/p&gt;

&lt;p&gt;
例子：
&lt;/p&gt;

&lt;p&gt;
标准方法钢铁提炼比率为
&lt;/p&gt;

&lt;p&gt;
78.1, 72.4, 76.2, 74.3, 77.4, 78.4, 76.0, 75.5, 76.7, 77.3 
&lt;/p&gt;

&lt;p&gt;
新方法提炼比率为
&lt;/p&gt;

&lt;p&gt;
79.1, 81.0, 77.3, 79.1, 80.0, 79.1, 79.1, 77.3, 80.2, 82.1
&lt;/p&gt;

&lt;p&gt;
设两个样本相互独立，且分别来自正态总体\(N(\mu_1, \sigma^2)\)和
\(N(\mu_2, \sigma^2)\)，\(\mu_1, \mu_2, \sigma^2\)均未知。问建议的新方法能否提高提炼比率？（取\(\alpha = 0.05\)）
&lt;/p&gt;

&lt;p&gt;
需要检验的假设
&lt;/p&gt;

&lt;p&gt;
\[H_0 : \mu_1 - \mu_2 \geq 0, ~~ H_1 : \mu_1 - \mu_2 &lt; 0\]
&lt;/p&gt;

&lt;p&gt;
用 R 的 t.test 进行检验：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-R&quot;&gt;x &lt;span style=&quot;color: #110099;&quot;&gt;&amp;lt;-&lt;/span&gt; c&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;78.1, 72.4, 76.2, 74.3, 77.4, 78.4, 76.0, 75.5, 76.7, 77.3&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
y &lt;span style=&quot;color: #110099;&quot;&gt;&amp;lt;-&lt;/span&gt; c&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;79.1, 81.0, 77.3, 79.1, 80.0, 79.1, 79.1, 77.3, 80.2, 82.1&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
t.test&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;x, y, alternative=&lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;less&quot;&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt; 
&lt;/pre&gt;
&lt;/div&gt;

&lt;pre class=&quot;example&quot; id=&quot;orgd1a401d&quot;&gt;

	Welch Two Sample t-test

data:  x and y
t = -4.2957, df = 17.319, p-value = 0.0002355
alternative hypothesis: true difference in means is less than 0
95 percent confidence interval:
    -Inf -1.9055
sample estimates:
mean of x mean of y 
    76.23     79.43 

&lt;/pre&gt;

&lt;p&gt;
p-value = 0.0004352 小于0.05，所以我们认为在显著性水平 \(\alpha =
0.05 \)下，拒绝\(H_0\)，即认为建议的方法比原方法更优。
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>单词本：butterflies in the stomach</title>
   <link href="http://kimi.im/2024-06-16-butterflies-in-stomach"/>
   <updated>2024-06-16T00:00:00+00:00</updated>
   <id>http://kimi.im/butterflies-in-stomach</id>
   <content type="html">&lt;p&gt;
多年前参加一个学习培训，得到了一本《Dare to lead》作为奖品。一直放着忘记看了。今天拿出来看下。
&lt;/p&gt;

&lt;p&gt;
Brené Brown 在扉页说自己是个很容易紧张的人，公众演讲的时候进场紧张得不行。因为她觉得听她演讲的人提供了自己宝贵的时间给她，而她却一点不紧张那是不负责的态度。
&lt;/p&gt;

&lt;p&gt;
原文这么写的：If being on the receiving end of one of life&amp;rsquo;s most
valuable gifts fails to leave you with a lump in your throat or
&lt;b&gt;butterflies in your stomach&lt;/b&gt;, then you&amp;rsquo;re not paying attention.
&lt;/p&gt;

&lt;p&gt;
这里出现了两个描述紧张的词组。
&lt;/p&gt;

&lt;p&gt;
第一个是with a lump in your throat喉咙里有一个团块。也就是 be
swelling in your throat。紧张地要哽咽了。
&lt;/p&gt;

&lt;p&gt;
第二个是with butterflies in your stomach千万蝴蝶胃中舞。也表示紧张的感觉。
&lt;/p&gt;

&lt;p&gt;
总之，紧张确实可能会导致消化系统痉挛。记得以前看到过新闻说有人山中看到蛇，惊吓后回来发现肠道出血。不知道是不是真的。薇琪妹妹参加钢琴比赛前，也会紧张的想吐。
&lt;/p&gt;

&lt;p&gt;
追溯源头看，最早是 1908 年美国作者弗洛伦斯·康威斯在《The House of
Prayer》中用到过这个隐喻：The three o&amp;rsquo;clock train going down the
valley […] gave him a sad feeling, as if he had &lt;b&gt;a butterfly in his
stomach&lt;/b&gt;. 但表示的是不开心的感觉。
&lt;/p&gt;

&lt;p&gt;
1937 年佩吉·哈丁的文章中描述了刚加入校园联谊会成员的紧张心情用到
have pink butterflies all over my stomach：
&lt;/p&gt;

&lt;p&gt;
With a great display of vivacity one rushee popped &amp;ldquo;I&amp;rsquo;m so nervous I
feel that I have &lt;b&gt;pink butterflies all over my stomach&lt;/b&gt;.&amp;rdquo;
&lt;/p&gt;

&lt;p&gt;
1941年《The Oregonian》中的滑雪比赛新闻中描述俄勒冈小朋友的紧张心情：
&lt;/p&gt;

&lt;p&gt;
The Oregon kids had &amp;ldquo;&lt;b&gt;butterflies flopping around like eagles&lt;/b&gt;&amp;rdquo; when
they made their first runs. But they soon got over their nervousness
and found that it was easier to ski on these slopes than on the
flatter ones they were used to.
&lt;/p&gt;

&lt;p&gt;
这里更夸正地描述成蝴蝶像老鹰一样拍打翅膀。
&lt;/p&gt;

&lt;p&gt;
总之，现在蝴蝶在胃里也好，在周围也好，都表示紧张的感觉：
&lt;/p&gt;

&lt;p&gt;
I&amp;rsquo;m meeting her parents tonight, and I have a bad case of &lt;b&gt;butterflies
in my stomach&lt;/b&gt;.
&lt;/p&gt;

&lt;p&gt;
&lt;b&gt;The butterflies in my stomach&lt;/b&gt; almost kept me from going on stage and
performing.
&lt;/p&gt;

&lt;p&gt;
&lt;b&gt;The butterflies in my stomach&lt;/b&gt; are really bad, Mom. I don&amp;rsquo;t think I can go out there and pitch.
&lt;/p&gt;

&lt;p&gt;
Even though I&amp;rsquo;m student council president, I always get &lt;b&gt;butterflies in
my stomach&lt;/b&gt; before I have to make announcements in front of the whole
school.
&lt;/p&gt;

&lt;p&gt;
还有扩展出来多个不同的版本：
&lt;/p&gt;

&lt;p&gt;
Jennifer says she &lt;b&gt;doesn&amp;rsquo;t get butterflies down&lt;/b&gt; at the start is
telling lies. 珍妮弗说她说话的时候就没法把蝴蝶打下来。
&lt;/p&gt;

&lt;p&gt;
Carol felt &lt;b&gt;butterflies tumbling in her guts&lt;/b&gt;. 卡萝尔感觉蝴蝶在肚子里翻滚。
&lt;/p&gt;

&lt;p&gt;
Some of the kids &lt;b&gt;had butterflies&lt;/b&gt; before the school play.
&lt;/p&gt;

&lt;p&gt;
Even after 15 years of performing in front of an audience he still
&lt;b&gt;gets butterflies&lt;/b&gt; before a show.
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>假设检验 Hypothesis Testing 之关于 μ 检验</title>
   <link href="http://kimi.im/2024-06-15-hypothesis-testing-z-and-t-testing"/>
   <updated>2024-06-15T00:00:00+00:00</updated>
   <id>http://kimi.im/hypothesis-testing-z-and-t-testing</id>
   <content type="html">&lt;p&gt;
在\(\sigma\)已知的条件下，关于\(\mu\)的检验，称为 Z 检验，
z-testing。
&lt;/p&gt;

&lt;p&gt;
因为这种检验法是利用统计量 Z 来确定拒绝域的。
&lt;/p&gt;

\begin{equation}
Z = \frac{\bar{X} - \mu_0}{\sigma / \sqrt{n}}
\end{equation}

&lt;p&gt;
当\(\sigma\)未知的时候，关于\(\mu\)的检验，称为 t 检验， t-testing 。
&lt;/p&gt;

&lt;p&gt;
设总体\( X \sim N(\mu, \sigma^2) \)，其中 \(\mu\), \(\sigma\)未知。我们求检验问题
&lt;/p&gt;

&lt;p&gt;
\[H_0 : \mu = \mu_0, ~~ H_1 : \mu \neq \mu_0\]
&lt;/p&gt;

&lt;p&gt;
的拒绝域（其中，显著性水平为\(\alpha\)）。
&lt;/p&gt;

&lt;p&gt;
由于\(S^2\)是 \(\sigma^2\) 的无偏估计，用\(S\)取代\(\sigma\)得到
&lt;/p&gt;

\begin{equation}
t = \frac{\bar{X} - \mu_0}{S / \sqrt{n}}
\end{equation}

&lt;p&gt;
作为检验统计量。当观察值
&lt;/p&gt;

\begin{equation}
|t| = |\frac{\bar{x} - \mu_0}{s / \sqrt{n}}|
\end{equation}

&lt;p&gt;
过分大时，就拒绝 \(H_0\)，拒绝域的形式为
&lt;/p&gt;

\begin{equation}
|t| = |\frac{\bar{x} - \mu_0}{s / \sqrt{n}}| \geq k
\end{equation}

&lt;p&gt;
当\(H_0\)为真时，则有
&lt;/p&gt;

\begin{equation}
\frac{\bar{X} - \mu}{S / \sqrt{n}} \sim t(n - 1)
\end{equation}

&lt;p&gt;
故有：
&lt;/p&gt;

\begin{equation}
P\{\text{当}H_0\text{为真拒绝}H_0\}
= P_{\mu_0} \{|\frac{\bar{X} - \mu_0}{S / \sqrt{n}}| \geq k|\}
= \alpha
\end{equation}

&lt;p&gt;
得到
&lt;/p&gt;

\begin{equation}
k = t_{\alpha/2}(n - 1)
\end{equation}

&lt;p&gt;
即得拒绝域为：
&lt;/p&gt;

\begin{equation}
|t| = |\frac{\bar{x} - \mu_0}{s / \sqrt{n}}| \geq t_{\alpha / 2}(n - 1)
\end{equation}

&lt;p&gt;
对于左单边检验，假设问题为：
&lt;/p&gt;

&lt;p&gt;
\[H_0 : \mu \leq \mu_0, ~~ H_1 : \mu &gt; \mu_0\]
&lt;/p&gt;

&lt;p&gt;
拒绝域为
&lt;/p&gt;

\begin{equation}
|t| = |\frac{\bar{x} - \mu_0}{s / \sqrt{n}}| \geq t_{\alpha}(n - 1)
\end{equation}

&lt;p&gt;
对于右单边检验，假设问题为：
&lt;/p&gt;

&lt;p&gt;
\[H_0 : \mu \geq \mu_0, ~~ H_1 : \mu &lt; \mu_0\]
&lt;/p&gt;

&lt;p&gt;
拒绝域为
&lt;/p&gt;

\begin{equation}
|t| = |\frac{\bar{x} - \mu_0}{s / \sqrt{n}}| \leq - t_{\alpha}(n - 1)
\end{equation}


&lt;p&gt;
例题：对于某批次砂矿的 5 个样品中镍的含量，经过测定为（%）：
&lt;/p&gt;

&lt;p&gt;
3.25, 3.27, 3.24, 3.26, 3.24
&lt;/p&gt;

&lt;p&gt;
设测定值总体服从正态分布，但参数均未知。问在\( \alpha = 0.01 \)下能否接受假设：这批矿砂的镍含量的均值为 3.25？
&lt;/p&gt;

&lt;p&gt;
下面用 R 语言解答：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-R&quot;&gt;data &lt;span style=&quot;color: #110099;&quot;&gt;&amp;lt;-&lt;/span&gt; c&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;3.25, 3.27, 3.24, 3.26, 3.24&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
t.test&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;data, var.equal=&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;TRUE&lt;/span&gt;, mu=3.25&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt; 
&lt;/pre&gt;
&lt;/div&gt;

&lt;pre class=&quot;example&quot; id=&quot;org25b67ef&quot;&gt;

	One Sample t-test

data:  data
t = 0.343, df = 4, p-value = 0.7489
alternative hypothesis: true mean is not equal to 3.25
95 percent confidence interval:
 3.235811 3.268189
sample estimates:
mean of x 
    3.252 

&lt;/pre&gt;

&lt;p&gt;
p-value = 0.7489 大于0.05，所以我们在显著性水平 \(\alpha = 0.05 \)
下，接受\(H_0\)，即认为总体均值为 3.25比较靠谱。
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>单词本：rainbow</title>
   <link href="http://kimi.im/2024-06-15-rainbow"/>
   <updated>2024-06-15T00:00:00+00:00</updated>
   <id>http://kimi.im/rainbow</id>
   <content type="html">&lt;p&gt;
可以说，已经在学单词的路上走火入魔了。
&lt;/p&gt;

&lt;p&gt;
梅雨季节天气热的慌，难得周末，约艾薇姐出去喝咖啡。她买了买了 black
rainbow coffee 的抹茶柚子蛋糕，就着星巴克的海盐焦糖慕斯浓缩咖啡，肆无忌惮的吃起来。哦，对了，这次星巴克啡快的取单口令是“爱你所爱”。
&lt;/p&gt;

&lt;p&gt;
至于我呢，考虑到甘油三酯还是偏高一丢丢，没敢吃蛋糕。于是开始在电子词典上查 rainbow 这个单词。
&lt;/p&gt;

&lt;p&gt;
原来英语 rain 是来自原始日耳曼语的 regna。在德语里就成了 regnen，名词
der Regen。瑞典语比较古早，还是 regna，名词为 regn。
&lt;/p&gt;

&lt;p&gt;
拉丁语则有 rigare 是打湿、引领的意思。所有就有 irrigate 灌溉、冲洗。灌溉这个动作，德语走另外一个路子用了 Wasser，即 bewässern。
&lt;/p&gt;


&lt;div id=&quot;org99b2f0d&quot; class=&quot;figure&quot;&gt;
&lt;p&gt;&lt;div align=&quot;center&quot;&gt;&lt;?xml version=&quot;1.0&quot; encoding=&quot;us-ascii&quot; standalone=&quot;no&quot;?&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; xmlns:xlink=&quot;http://www.w3.org/1999/xlink&quot; contentStyleType=&quot;text/css&quot; height=&quot;360px&quot; preserveAspectRatio=&quot;none&quot; style=&quot;width:559px;height:360px;background:#FFFFFF;&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 559 360&quot; width=&quot;559px&quot; zoomAndPan=&quot;magnify&quot;&gt;&lt;defs/&gt;&lt;g&gt;&lt;rect fill=&quot;#F1F1F1&quot; height=&quot;69.4648&quot; rx=&quot;12.5&quot; ry=&quot;12.5&quot; style=&quot;stroke:#181818;stroke-width:1.5;&quot; width=&quot;65&quot; x=&quot;10&quot; y=&quot;144.7324&quot;/&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;14&quot; lengthAdjust=&quot;spacing&quot; textLength=&quot;40&quot; x=&quot;20&quot; y=&quot;168.2676&quot;&gt;[latin]&lt;/text&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;14&quot; lengthAdjust=&quot;spacing&quot; textLength=&quot;28&quot; x=&quot;24&quot; y=&quot;184.7559&quot;&gt;rigo&lt;/text&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;14&quot; lengthAdjust=&quot;spacing&quot; textLength=&quot;41&quot; x=&quot;24&quot; y=&quot;201.2441&quot;&gt;rigare&lt;/text&gt;&lt;rect fill=&quot;#F1F1F1&quot; height=&quot;36.4883&quot; rx=&quot;12.5&quot; ry=&quot;12.5&quot; style=&quot;stroke:#181818;stroke-width:1.5;&quot; width=&quot;60&quot; x=&quot;125&quot; y=&quot;76.4883&quot;/&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;14&quot; lengthAdjust=&quot;spacing&quot; textLength=&quot;40&quot; x=&quot;135&quot; y=&quot;100.0234&quot;&gt;regna&lt;/text&gt;&lt;rect fill=&quot;#F1F1F1&quot; height=&quot;36.4883&quot; rx=&quot;12.5&quot; ry=&quot;12.5&quot; style=&quot;stroke:#181818;stroke-width:1.5;&quot; width=&quot;125&quot; x=&quot;235&quot; y=&quot;20&quot;/&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;14&quot; lengthAdjust=&quot;spacing&quot; textLength=&quot;105&quot; x=&quot;245&quot; y=&quot;43.5352&quot;&gt;[de] regnen (vi)&lt;/text&gt;&lt;rect fill=&quot;#F1F1F1&quot; height=&quot;36.4883&quot; rx=&quot;12.5&quot; ry=&quot;12.5&quot; style=&quot;stroke:#181818;stroke-width:1.5;&quot; width=&quot;86&quot; x=&quot;410&quot; y=&quot;20&quot;/&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;14&quot; lengthAdjust=&quot;spacing&quot; textLength=&quot;66&quot; x=&quot;420&quot; y=&quot;43.5352&quot;&gt;Regen (n)&lt;/text&gt;&lt;path d=&quot;M360,38.2441 L370,38.2441 C385,38.2441 385,38.2441 400,38.2441 L410,38.2441 &quot; fill=&quot;none&quot; style=&quot;stroke:#181818;stroke-width:1.0;&quot;/&gt;&lt;path d=&quot;M185,94.7324 L195,94.7324 C210,94.7324 210,38.2441 225,38.2441 L235,38.2441 &quot; fill=&quot;none&quot; style=&quot;stroke:#181818;stroke-width:1.0;&quot;/&gt;&lt;rect fill=&quot;#F1F1F1&quot; height=&quot;36.4883&quot; rx=&quot;12.5&quot; ry=&quot;12.5&quot; style=&quot;stroke:#181818;stroke-width:1.5;&quot; width=&quot;114&quot; x=&quot;235&quot; y=&quot;76.4883&quot;/&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;14&quot; lengthAdjust=&quot;spacing&quot; textLength=&quot;94&quot; x=&quot;245&quot; y=&quot;100.0234&quot;&gt;[se] regna (vi)&lt;/text&gt;&lt;rect fill=&quot;#F1F1F1&quot; height=&quot;36.4883&quot; rx=&quot;12.5&quot; ry=&quot;12.5&quot; style=&quot;stroke:#181818;stroke-width:1.5;&quot; width=&quot;75&quot; x=&quot;399&quot; y=&quot;76.4883&quot;/&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;14&quot; lengthAdjust=&quot;spacing&quot; textLength=&quot;55&quot; x=&quot;409&quot; y=&quot;100.0234&quot;&gt;regn (n)&lt;/text&gt;&lt;path d=&quot;M349,94.7324 L359,94.7324 C374,94.7324 374,94.7324 389,94.7324 L399,94.7324 &quot; fill=&quot;none&quot; style=&quot;stroke:#181818;stroke-width:1.0;&quot;/&gt;&lt;path d=&quot;M185,94.7324 L195,94.7324 C210,94.7324 210,94.7324 225,94.7324 L235,94.7324 &quot; fill=&quot;none&quot; style=&quot;stroke:#181818;stroke-width:1.0;&quot;/&gt;&lt;rect fill=&quot;#F1F1F1&quot; height=&quot;36.4883&quot; rx=&quot;12.5&quot; ry=&quot;12.5&quot; style=&quot;stroke:#181818;stroke-width:1.5;&quot; width=&quot;47&quot; x=&quot;235&quot; y=&quot;132.9766&quot;/&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;14&quot; lengthAdjust=&quot;spacing&quot; textLength=&quot;27&quot; x=&quot;245&quot; y=&quot;156.5117&quot;&gt;rain&lt;/text&gt;&lt;path d=&quot;M185,94.7324 L195,94.7324 C210,94.7324 210,151.2207 225,151.2207 L235,151.2207 &quot; fill=&quot;none&quot; style=&quot;stroke:#181818;stroke-width:1.0;&quot;/&gt;&lt;path d=&quot;M75,179.4648 L85,179.4648 C100,179.4648 100,94.7324 115,94.7324 L125,94.7324 &quot; fill=&quot;none&quot; style=&quot;stroke:#181818;stroke-width:1.0;&quot;/&gt;&lt;rect fill=&quot;#F1F1F1&quot; height=&quot;69.4648&quot; rx=&quot;12.5&quot; ry=&quot;12.5&quot; style=&quot;stroke:#181818;stroke-width:1.5;&quot; width=&quot;82&quot; x=&quot;125&quot; y=&quot;229.4648&quot;/&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;14&quot; lengthAdjust=&quot;spacing&quot; textLength=&quot;40&quot; x=&quot;135&quot; y=&quot;253&quot;&gt;[latin]&lt;/text&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;14&quot; lengthAdjust=&quot;spacing&quot; textLength=&quot;51&quot; x=&quot;135&quot; y=&quot;269.4883&quot;&gt;irrigare&lt;/text&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;14&quot; lengthAdjust=&quot;spacing&quot; textLength=&quot;62&quot; x=&quot;135&quot; y=&quot;285.9766&quot;&gt;irragatus&lt;/text&gt;&lt;rect fill=&quot;#F1F1F1&quot; height=&quot;36.4883&quot; rx=&quot;12.5&quot; ry=&quot;12.5&quot; style=&quot;stroke:#181818;stroke-width:1.5;&quot; width=&quot;102&quot; x=&quot;257&quot; y=&quot;245.9531&quot;/&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;14&quot; lengthAdjust=&quot;spacing&quot; textLength=&quot;82&quot; x=&quot;267&quot; y=&quot;269.4883&quot;&gt;irrigate &amp;#28748;&amp;#28297;&lt;/text&gt;&lt;rect fill=&quot;#F1F1F1&quot; height=&quot;36.4883&quot; rx=&quot;12.5&quot; ry=&quot;12.5&quot; style=&quot;stroke:#181818;stroke-width:1.5;&quot; width=&quot;138&quot; x=&quot;409&quot; y=&quot;189.4648&quot;/&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;14&quot; lengthAdjust=&quot;spacing&quot; textLength=&quot;118&quot; x=&quot;419&quot; y=&quot;213&quot;&gt;irrigable &amp;#21487;&amp;#28748;&amp;#28297;&amp;#30340;&lt;/text&gt;&lt;path d=&quot;M359,264.1973 L369,264.1973 C384,264.1973 384,207.709 399,207.709 L409,207.709 &quot; fill=&quot;none&quot; style=&quot;stroke:#181818;stroke-width:1.0;&quot;/&gt;&lt;rect fill=&quot;#F1F1F1&quot; height=&quot;36.4883&quot; rx=&quot;12.5&quot; ry=&quot;12.5&quot; style=&quot;stroke:#181818;stroke-width:1.5;&quot; width=&quot;123&quot; x=&quot;409&quot; y=&quot;245.9531&quot;/&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;14&quot; lengthAdjust=&quot;spacing&quot; textLength=&quot;103&quot; x=&quot;419&quot; y=&quot;269.4883&quot;&gt;irrigator &amp;#28748;&amp;#28297;&amp;#32773;&lt;/text&gt;&lt;path d=&quot;M359,264.1973 L369,264.1973 C384,264.1973 384,264.1973 399,264.1973 L409,264.1973 &quot; fill=&quot;none&quot; style=&quot;stroke:#181818;stroke-width:1.0;&quot;/&gt;&lt;rect fill=&quot;#F1F1F1&quot; height=&quot;36.4883&quot; rx=&quot;12.5&quot; ry=&quot;12.5&quot; style=&quot;stroke:#181818;stroke-width:1.5;&quot; width=&quot;127&quot; x=&quot;409&quot; y=&quot;302.4414&quot;/&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;14&quot; lengthAdjust=&quot;spacing&quot; textLength=&quot;107&quot; x=&quot;419&quot; y=&quot;325.9766&quot;&gt;irrigative &amp;#28748;&amp;#28297;&amp;#30340;&lt;/text&gt;&lt;path d=&quot;M359,264.1973 L369,264.1973 C384,264.1973 384,320.6855 399,320.6855 L409,320.6855 &quot; fill=&quot;none&quot; style=&quot;stroke:#181818;stroke-width:1.0;&quot;/&gt;&lt;path d=&quot;M207,264.1973 L217,264.1973 C232,264.1973 232,264.1973 247,264.1973 L257,264.1973 &quot; fill=&quot;none&quot; style=&quot;stroke:#181818;stroke-width:1.0;&quot;/&gt;&lt;path d=&quot;M75,179.4648 L85,179.4648 C100,179.4648 100,264.1973 115,264.1973 L125,264.1973 &quot; fill=&quot;none&quot; style=&quot;stroke:#181818;stroke-width:1.0;&quot;/&gt;&lt;!--SRC=[LP31Ji9048Rl-nHpf6aWGj0OJaHG4mGbA5o4mq37Pc8xIxRR6c-QwC64nBiluTttKNmCjxGeddPc_k__PtVRYKLZOvOWngNouJf2opA3gO3XK9Sd6bA-3uP2GLSuBA3PfYM1IiPUFlHXH67UYrSmISdW3fBtluH1bZotN3eLDiKos9GOeasJ3La8bc3zkFhwU2coYk4y8lXyVI-4zTlJhcQrAHtV3y__1CwsMRcbJUxzvH-eOOHYnuC-P6GIrWBrMcElqQpjpybYlJAMMz5t0WiTBzdjjXoJfogdmpuaEZKBWe0JQtYUMcVsL0ypX54gETU2YoL9htks7S2nP6oqn2HMzIQ3F-2WMJrY2vTat3LWCb1Tki4qiiwnq05Bs8BnrKdrKFLHmXH3bqsYEjhbcliMTCv_0000]--&gt;&lt;/g&gt;&lt;/svg&gt;&lt;/div&gt;
&lt;/p&gt;
&lt;/div&gt;

&lt;p&gt;
而下雨，在法语也另辟蹊径，从表示流动的原始印欧词根 pleu 转变来，下雨
pleuvoir，雨la pluie。英语属于雨的，雨的形容词就是 pluvial。如
pluvial region 多雨地区。pluvial climate 多雨气候。pluvial index 降雨指数等。
&lt;/p&gt;


&lt;div id=&quot;org69d3d86&quot; class=&quot;figure&quot;&gt;
&lt;p&gt;&lt;div align=&quot;center&quot;&gt;&lt;?xml version=&quot;1.0&quot; encoding=&quot;us-ascii&quot; standalone=&quot;no&quot;?&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; xmlns:xlink=&quot;http://www.w3.org/1999/xlink&quot; contentStyleType=&quot;text/css&quot; height=&quot;466px&quot; preserveAspectRatio=&quot;none&quot; style=&quot;width:554px;height:466px;background:#FFFFFF;&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 554 466&quot; width=&quot;554px&quot; zoomAndPan=&quot;magnify&quot;&gt;&lt;defs/&gt;&lt;g&gt;&lt;rect fill=&quot;#F1F1F1&quot; height=&quot;52.9766&quot; rx=&quot;12.5&quot; ry=&quot;12.5&quot; style=&quot;stroke:#181818;stroke-width:1.5;&quot; width=&quot;87&quot; x=&quot;10&quot; y=&quot;205.9531&quot;/&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;14&quot; lengthAdjust=&quot;spacing&quot; textLength=&quot;63&quot; x=&quot;20&quot; y=&quot;229.4883&quot;&gt;[PIE root]&lt;/text&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;14&quot; lengthAdjust=&quot;spacing&quot; textLength=&quot;38&quot; x=&quot;20&quot; y=&quot;245.9766&quot;&gt;pleu-&lt;/text&gt;&lt;rect fill=&quot;#F1F1F1&quot; height=&quot;85.9531&quot; rx=&quot;12.5&quot; ry=&quot;12.5&quot; style=&quot;stroke:#181818;stroke-width:1.5;&quot; width=&quot;76&quot; x=&quot;147&quot; y=&quot;20&quot;/&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;14&quot; lengthAdjust=&quot;spacing&quot; textLength=&quot;40&quot; x=&quot;157&quot; y=&quot;43.5352&quot;&gt;[latin]&lt;/text&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;14&quot; lengthAdjust=&quot;spacing&quot; textLength=&quot;51&quot; x=&quot;157&quot; y=&quot;60.0234&quot;&gt;plovere&lt;/text&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;14&quot; lengthAdjust=&quot;spacing&quot; textLength=&quot;41&quot; x=&quot;157&quot; y=&quot;76.5117&quot;&gt;pluvia&lt;/text&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;14&quot; lengthAdjust=&quot;spacing&quot; textLength=&quot;56&quot; x=&quot;157&quot; y=&quot;93&quot;&gt;pluvialis&lt;/text&gt;&lt;rect fill=&quot;#F1F1F1&quot; height=&quot;36.4883&quot; rx=&quot;12.5&quot; ry=&quot;12.5&quot; style=&quot;stroke:#181818;stroke-width:1.5;&quot; width=&quot;126&quot; x=&quot;273&quot; y=&quot;44.7324&quot;/&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;14&quot; lengthAdjust=&quot;spacing&quot; textLength=&quot;106&quot; x=&quot;283&quot; y=&quot;68.2676&quot;&gt;[fr] pleuvoir (vi)&lt;/text&gt;&lt;rect fill=&quot;#F1F1F1&quot; height=&quot;36.4883&quot; rx=&quot;12.5&quot; ry=&quot;12.5&quot; style=&quot;stroke:#181818;stroke-width:1.5;&quot; width=&quot;93&quot; x=&quot;449&quot; y=&quot;44.7324&quot;/&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;14&quot; lengthAdjust=&quot;spacing&quot; textLength=&quot;73&quot; x=&quot;459&quot; y=&quot;68.2676&quot;&gt;la pluie (n)&lt;/text&gt;&lt;path d=&quot;M399,62.9766 L409,62.9766 C424,62.9766 424,62.9766 439,62.9766 L449,62.9766 &quot; fill=&quot;none&quot; style=&quot;stroke:#181818;stroke-width:1.0;&quot;/&gt;&lt;path d=&quot;M223,62.9766 L233,62.9766 C248,62.9766 248,62.9766 263,62.9766 L273,62.9766 &quot; fill=&quot;none&quot; style=&quot;stroke:#181818;stroke-width:1.0;&quot;/&gt;&lt;path d=&quot;M97,232.4414 L107,232.4414 C122,232.4414 122,62.9766 137,62.9766 L147,62.9766 &quot; fill=&quot;none&quot; style=&quot;stroke:#181818;stroke-width:1.0;&quot;/&gt;&lt;rect fill=&quot;#F1F1F1&quot; height=&quot;36.4883&quot; rx=&quot;12.5&quot; ry=&quot;12.5&quot; style=&quot;stroke:#181818;stroke-width:1.5;&quot; width=&quot;65&quot; x=&quot;147&quot; y=&quot;125.9531&quot;/&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;14&quot; lengthAdjust=&quot;spacing&quot; textLength=&quot;45&quot; x=&quot;157&quot; y=&quot;149.4883&quot;&gt;pluvial&lt;/text&gt;&lt;path d=&quot;M97,232.4414 L107,232.4414 C122,232.4414 122,144.1973 137,144.1973 L147,144.1973 &quot; fill=&quot;none&quot; style=&quot;stroke:#181818;stroke-width:1.0;&quot;/&gt;&lt;rect fill=&quot;#F1F1F1&quot; height=&quot;36.4883&quot; rx=&quot;12.5&quot; ry=&quot;12.5&quot; style=&quot;stroke:#181818;stroke-width:1.5;&quot; width=&quot;98&quot; x=&quot;147&quot; y=&quot;182.4414&quot;/&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;14&quot; lengthAdjust=&quot;spacing&quot; textLength=&quot;78&quot; x=&quot;157&quot; y=&quot;205.9766&quot;&gt;pneumonia&lt;/text&gt;&lt;path d=&quot;M97,232.4414 L107,232.4414 C122,232.4414 122,200.6855 137,200.6855 L147,200.6855 &quot; fill=&quot;none&quot; style=&quot;stroke:#181818;stroke-width:1.0;&quot;/&gt;&lt;rect fill=&quot;#F1F1F1&quot; height=&quot;36.4883&quot; rx=&quot;12.5&quot; ry=&quot;12.5&quot; style=&quot;stroke:#181818;stroke-width:1.5;&quot; width=&quot;45&quot; x=&quot;147&quot; y=&quot;238.9297&quot;/&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;14&quot; lengthAdjust=&quot;spacing&quot; textLength=&quot;25&quot; x=&quot;157&quot; y=&quot;262.4648&quot;&gt;flee&lt;/text&gt;&lt;path d=&quot;M97,232.4414 L107,232.4414 C122,232.4414 122,257.1738 137,257.1738 L147,257.1738 &quot; fill=&quot;none&quot; style=&quot;stroke:#181818;stroke-width:1.0;&quot;/&gt;&lt;rect fill=&quot;#F1F1F1&quot; height=&quot;36.4883&quot; rx=&quot;12.5&quot; ry=&quot;12.5&quot; style=&quot;stroke:#181818;stroke-width:1.5;&quot; width=&quot;36&quot; x=&quot;147&quot; y=&quot;295.418&quot;/&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;14&quot; lengthAdjust=&quot;spacing&quot; textLength=&quot;16&quot; x=&quot;157&quot; y=&quot;318.9531&quot;&gt;fly&lt;/text&gt;&lt;path d=&quot;M97,232.4414 L107,232.4414 C122,232.4414 122,313.6621 137,313.6621 L147,313.6621 &quot; fill=&quot;none&quot; style=&quot;stroke:#181818;stroke-width:1.0;&quot;/&gt;&lt;rect fill=&quot;#F1F1F1&quot; height=&quot;36.4883&quot; rx=&quot;12.5&quot; ry=&quot;12.5&quot; style=&quot;stroke:#181818;stroke-width:1.5;&quot; width=&quot;51&quot; x=&quot;147&quot; y=&quot;351.9063&quot;/&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;14&quot; lengthAdjust=&quot;spacing&quot; textLength=&quot;31&quot; x=&quot;157&quot; y=&quot;375.4414&quot;&gt;float&lt;/text&gt;&lt;path d=&quot;M97,232.4414 L107,232.4414 C122,232.4414 122,370.1504 137,370.1504 L147,370.1504 &quot; fill=&quot;none&quot; style=&quot;stroke:#181818;stroke-width:1.0;&quot;/&gt;&lt;rect fill=&quot;#F1F1F1&quot; height=&quot;36.4883&quot; rx=&quot;12.5&quot; ry=&quot;12.5&quot; style=&quot;stroke:#181818;stroke-width:1.5;&quot; width=&quot;56&quot; x=&quot;147&quot; y=&quot;408.3945&quot;/&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;14&quot; lengthAdjust=&quot;spacing&quot; textLength=&quot;36&quot; x=&quot;157&quot; y=&quot;431.9297&quot;&gt;flood&lt;/text&gt;&lt;path d=&quot;M97,232.4414 L107,232.4414 C122,232.4414 122,426.6387 137,426.6387 L147,426.6387 &quot; fill=&quot;none&quot; style=&quot;stroke:#181818;stroke-width:1.0;&quot;/&gt;&lt;!--SRC=[HOx1JW9144JlynLzN48WGj0OJaH08u8I4IwwXsQt8HrdkpUpCsluUsS4ugcgNwewDMayEb-nb1NMfWkVw-SvE5MVmvVKbaBFT2Erw5doHBGbHyc4bl6gbfiOYxc3oo6rMcK7MSkTXBjWCTB019aa0fVMdnKAbGfZEWwMwAodioZwYz7IJ2Ykl2mrQulYjwibn3qDgy2WFxmPZlgtU_8uoBRoBVeZK6XLioNmN577P4_h9JGQN45GSkCTxuEFvOvPO8lm7YJbnl1MaoncBrS0SsdPgLGatYnsg__0tQZtm1usvE8CsAtCZ0uOh8-DGakMunYs7u-zUxD4EGOynjyaPghnhpkDOVhw2m00]--&gt;&lt;/g&gt;&lt;/svg&gt;&lt;/div&gt;
&lt;/p&gt;
&lt;/div&gt;


&lt;p&gt;
啊呀，写太多了，有些累了。这次先把 rainbow 的前半部分学一学就够了。周末了，好好休息才对。
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>单词本：aufziehen</title>
   <link href="http://kimi.im/2024-06-15-aufziehen"/>
   <updated>2024-06-15T00:00:00+00:00</updated>
   <id>http://kimi.im/aufziehen</id>
   <content type="html">&lt;p&gt;
早上起来读德语词典。嗯，确实很无聊的，读德语小词典。
&lt;/p&gt;

&lt;p&gt;
看到这个单词 aufziehen。它的本意是往上往外拉的意思。
&lt;/p&gt;

&lt;p&gt;
比如：
&lt;/p&gt;

&lt;p&gt;
einen Reißverschluss aufziehen 拉开拉链。
&lt;/p&gt;

&lt;p&gt;
den Vorhang aufziehen 拉开窗帘
&lt;/p&gt;

&lt;p&gt;
Flaschen aufziehen 打开瓶子
&lt;/p&gt;

&lt;p&gt;
它有一个引申意，是养大小孩、养大小动物。也就是 großziehen。
&lt;/p&gt;

&lt;p&gt;
sie war von ihren Großeltern aufgezogen worden 她是爷爷奶奶养大的。
&lt;/p&gt;

&lt;p&gt;
这个跟我们说的拉扯大一个小孩好像是一个道理么。
&lt;/p&gt;

&lt;p&gt;
那么，为什么不说推搡大小孩，而要拉扯大小孩呢？
&lt;/p&gt;

&lt;p&gt;
估计小孩子是从小小的矮矮的慢慢长高，就好像是通过外力拉大一样。也因为爸爸妈妈都是牵着小孩的手出去，小孩慢慢的长大来。
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>单边假设检验 One-Tailed Hypothesis Testing</title>
   <link href="http://kimi.im/2024-06-08-one-tailed-hypothesis"/>
   <updated>2024-06-08T00:00:00+00:00</updated>
   <id>http://kimi.im/one-tailed-hypothesis</id>
   <content type="html">&lt;p&gt;
有时候，我们只关心总体均值是否增大，则使用单边假设检验，分别有右边假设检验和左边假设检验。
&lt;/p&gt;

&lt;p&gt;
\[H_0 : \mu \leq \mu_0, ~~ H_1 : \mu &gt; \mu_0\]
&lt;/p&gt;

&lt;p&gt;
称为右边检验。
&lt;/p&gt;

&lt;p&gt;
\[H_0 : \mu \geq \mu_0, ~~ H_1 : \mu &lt; \mu_0\]
&lt;/p&gt;

&lt;p&gt;
称为左边检验。
&lt;/p&gt;

&lt;p&gt;
以下讨论单边检验的拒绝域。
&lt;/p&gt;

&lt;p&gt;
设总体\(X \sim N(\mu, \sigma^2)\), /\(\sigma\)为已知，\(X_1, X_2,
\dots, X_n\) 是\(X\)的样本。求，给定显著性水平 \(\alpha\)下，检验问题：
&lt;/p&gt;

&lt;p&gt;
\[H_0 : \mu \leq \mu_0, ~~ H_1 : \mu &gt; \mu_0\]
&lt;/p&gt;

&lt;p&gt;
的拒绝域。
&lt;/p&gt;

&lt;p&gt;
当\(H_1\)为真时，观察值的\(\bar{x}\)偏大，因此，拒绝域的形式为：
&lt;/p&gt;

&lt;p&gt;
\[\bar{x} \geq k ~~ (\text{k 是某一正的常数})\]
&lt;/p&gt;

\begin{align*}
P\{\text{当}H_0\text{为真拒绝}H_0\} &amp;= P_{\mu \in H_0}\{\bar{X} \geq k\} \\
&amp;= P_{\mu \leq \mu_0} \{ \frac{\bar{X} - \mu_0}{\sigma / \sqrt{n}} \geq \frac{k - \mu_0}{\sigma / \sqrt{n}} \} \\
&amp;\leq P_{\mu \leq \mu_0} \{ \frac{\bar{X} - \mu}{\sigma / \sqrt{n}} \geq \frac{k - \mu_0}{\sigma / \sqrt{n}}\}
\end{align*}

&lt;p&gt;
要控制\(P\{\text{当}H_0\text{为真拒绝}H_0\}\)在 \(\alpha\) 范围内，只需令
&lt;/p&gt;

&lt;p&gt;
\[P_{\mu \leq \mu_0} \{ \frac{\bar{X} - \mu}{\sigma / \sqrt{n}} \geq \frac{k - \mu_0}{\sigma / \sqrt{n}}\} = \alpha\]
&lt;/p&gt;

&lt;p&gt;
由于
&lt;/p&gt;


&lt;p&gt;
\[ \frac{\bar{X} - \mu}{\sigma / \sqrt{n}} \sim N(0, 1) \]
&lt;/p&gt;

&lt;p&gt;
得到
&lt;/p&gt;

&lt;p&gt;
\[ \frac{k - \mu_0}{\sigma / \sqrt{n}} = z_\alpha\]
&lt;/p&gt;

&lt;p&gt;
于是
&lt;/p&gt;

&lt;p&gt;
\[ k = \mu_0 + \frac{\sigma}{\sqrt{n}} z_\alpha\]
&lt;/p&gt;

&lt;p&gt;
即得到，检验问题的拒绝域为
&lt;/p&gt;

&lt;p&gt;
\[ \bar{x} \geq \mu_0 + \frac{\sigma}{\sqrt{n}} z_\alpha\]
&lt;/p&gt;

&lt;p&gt;
即
&lt;/p&gt;

&lt;p&gt;
\[ z = \frac{\bar{x} - \mu_0}{\sigma / \sqrt{n}} \geq z_\alpha\]
&lt;/p&gt;

&lt;p&gt;
类似的，可以得到左边检验问题
&lt;/p&gt;

&lt;p&gt;
\[ H_0 ： \mu \geq \mu_0, ~~ H_1 : \mu &lt; \mu_0\]
&lt;/p&gt;

&lt;p&gt;
的拒绝域为
&lt;/p&gt;

&lt;p&gt;
\[ z = \frac{\bar{x} - \mu_0}{\sigma / \sqrt{n}} \leq - z_\alpha\]
&lt;/p&gt;

&lt;p&gt;
试举一例。某工厂生产的元器件寿命不低于 1000 小时，现在随机抽取样品 25
件，测得其寿命分别为 950, 920, 970, 949, 920, 920, 955, 950, 990, 910,
920, 950, 911, 956, 1019, 930, 890, 980, 1020, 990。已知该元器件寿命服从标准差\(\sigma = 100 \)小时的正态分布。试在显著性水平 \(\alpha =
0.05 \) 下判断这批元器件是否合格。
&lt;/p&gt;

&lt;p&gt;
&lt;b&gt;解&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
按照题意，需要检验左边检验假设：
&lt;/p&gt;

&lt;p&gt;
\[ H_0 : \mu \geq \mu_0 = 1000\] 认为合格
&lt;/p&gt;

&lt;p&gt;
\[ H_1 : \mu &lt; \mu_0 \] 认为不合格
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-R&quot;&gt;&lt;span style=&quot;color: #110099;&quot;&gt;library&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;rcompanion&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
data &lt;span style=&quot;color: #110099;&quot;&gt;&amp;lt;-&lt;/span&gt; c&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;950, 920, 970, 949, 920, 920, 955, 950, 990, 910, 920,
          950, 911, 956, 1019, 930, 890, 980, 1020, 990&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
qqnorm&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;data&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
qqline&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;data, col=&lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;red&quot;&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt; 
&lt;/pre&gt;
&lt;/div&gt;


&lt;div id=&quot;org1c1ee3f&quot; class=&quot;figure&quot;&gt;
&lt;p&gt;&lt;div align=&quot;center&quot;&gt;&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; xmlns:xlink=&quot;http://www.w3.org/1999/xlink&quot;  viewBox=&quot;0 0 504 504&quot;&gt;
&lt;defs&gt;
&lt;g&gt;
&lt;g id=&quot;glyph-0-0&quot;&gt;
&lt;path d=&quot;M 0.5 -3.890625 L 3.4375 -3.890625 L 3.4375 -2.796875 L 0.5 -2.796875 Z M 0.5 -3.890625 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-0-1&quot;&gt;
&lt;path d=&quot;M 0.375 0 C 0.414062 -0.71875 0.566406 -1.34375 0.828125 -1.875 C 1.085938 -2.414062 1.59375 -2.90625 2.34375 -3.34375 L 3.46875 -4 C 3.96875 -4.289062 4.320312 -4.539062 4.53125 -4.75 C 4.851562 -5.070312 5.015625 -5.441406 5.015625 -5.859375 C 5.015625 -6.347656 4.863281 -6.734375 4.5625 -7.015625 C 4.269531 -7.304688 3.882812 -7.453125 3.40625 -7.453125 C 2.675781 -7.453125 2.175781 -7.179688 1.90625 -6.640625 C 1.75 -6.335938 1.664062 -5.929688 1.65625 -5.421875 L 0.578125 -5.421875 C 0.585938 -6.148438 0.722656 -6.742188 0.984375 -7.203125 C 1.441406 -8.015625 2.25 -8.421875 3.40625 -8.421875 C 4.363281 -8.421875 5.0625 -8.160156 5.5 -7.640625 C 5.945312 -7.117188 6.171875 -6.539062 6.171875 -5.90625 C 6.171875 -5.238281 5.9375 -4.664062 5.46875 -4.1875 C 5.195312 -3.90625 4.707031 -3.566406 4 -3.171875 L 3.1875 -2.734375 C 2.8125 -2.523438 2.515625 -2.320312 2.296875 -2.125 C 1.898438 -1.789062 1.648438 -1.414062 1.546875 -1 L 6.140625 -1 L 6.140625 0 Z M 0.375 0 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-0-2&quot;&gt;
&lt;path d=&quot;M 1.15625 -5.9375 L 1.15625 -6.75 C 1.914062 -6.820312 2.441406 -6.945312 2.734375 -7.125 C 3.035156 -7.300781 3.265625 -7.710938 3.421875 -8.359375 L 4.25 -8.359375 L 4.25 0 L 3.125 0 L 3.125 -5.9375 Z M 1.15625 -5.9375 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-0-3&quot;&gt;
&lt;path d=&quot;M 3.25 -8.390625 C 4.332031 -8.390625 5.117188 -7.941406 5.609375 -7.046875 C 5.984375 -6.359375 6.171875 -5.410156 6.171875 -4.203125 C 6.171875 -3.066406 6 -2.125 5.65625 -1.375 C 5.164062 -0.300781 4.359375 0.234375 3.234375 0.234375 C 2.234375 0.234375 1.484375 -0.203125 0.984375 -1.078125 C 0.578125 -1.816406 0.375 -2.800781 0.375 -4.03125 C 0.375 -4.976562 0.5 -5.796875 0.75 -6.484375 C 1.207031 -7.753906 2.039062 -8.390625 3.25 -8.390625 Z M 3.234375 -0.734375 C 3.785156 -0.734375 4.222656 -0.972656 4.546875 -1.453125 C 4.867188 -1.941406 5.03125 -2.847656 5.03125 -4.171875 C 5.03125 -5.117188 4.910156 -5.898438 4.671875 -6.515625 C 4.441406 -7.128906 3.988281 -7.4375 3.3125 -7.4375 C 2.6875 -7.4375 2.226562 -7.144531 1.9375 -6.5625 C 1.65625 -5.976562 1.515625 -5.117188 1.515625 -3.984375 C 1.515625 -3.128906 1.609375 -2.441406 1.796875 -1.921875 C 2.078125 -1.128906 2.554688 -0.734375 3.234375 -0.734375 Z M 3.234375 -0.734375 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-0-4&quot;&gt;
&lt;path d=&quot;M 7.171875 -8.609375 L 7.171875 -7.578125 L 4.28125 -7.578125 L 4.28125 0 L 3.09375 0 L 3.09375 -7.578125 L 0.1875 -7.578125 L 0.1875 -8.609375 Z M 7.171875 -8.609375 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-0-5&quot;&gt;
&lt;path d=&quot;M 0.78125 -8.640625 L 1.828125 -8.640625 L 1.828125 -5.421875 C 2.078125 -5.742188 2.300781 -5.96875 2.5 -6.09375 C 2.84375 -6.3125 3.269531 -6.421875 3.78125 -6.421875 C 4.6875 -6.421875 5.300781 -6.101562 5.625 -5.46875 C 5.800781 -5.125 5.890625 -4.644531 5.890625 -4.03125 L 5.890625 0 L 4.8125 0 L 4.8125 -3.953125 C 4.8125 -4.410156 4.75 -4.75 4.625 -4.96875 C 4.4375 -5.3125 4.078125 -5.484375 3.546875 -5.484375 C 3.109375 -5.484375 2.710938 -5.332031 2.359375 -5.03125 C 2.003906 -4.726562 1.828125 -4.160156 1.828125 -3.328125 L 1.828125 0 L 0.78125 0 Z M 0.78125 -8.640625 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-0-6&quot;&gt;
&lt;path d=&quot;M 3.390625 -6.421875 C 3.835938 -6.421875 4.269531 -6.316406 4.6875 -6.109375 C 5.101562 -5.898438 5.421875 -5.628906 5.640625 -5.296875 C 5.847656 -4.972656 5.988281 -4.601562 6.0625 -4.1875 C 6.125 -3.894531 6.15625 -3.429688 6.15625 -2.796875 L 1.546875 -2.796875 C 1.566406 -2.160156 1.71875 -1.648438 2 -1.265625 C 2.28125 -0.878906 2.71875 -0.6875 3.3125 -0.6875 C 3.863281 -0.6875 4.300781 -0.867188 4.625 -1.234375 C 4.8125 -1.441406 4.945312 -1.6875 5.03125 -1.96875 L 6.0625 -1.96875 C 6.039062 -1.738281 5.953125 -1.484375 5.796875 -1.203125 C 5.640625 -0.921875 5.46875 -0.6875 5.28125 -0.5 C 4.957031 -0.1875 4.554688 0.0195312 4.078125 0.125 C 3.828125 0.1875 3.539062 0.21875 3.21875 0.21875 C 2.4375 0.21875 1.773438 -0.0625 1.234375 -0.625 C 0.691406 -1.195312 0.421875 -1.992188 0.421875 -3.015625 C 0.421875 -4.023438 0.691406 -4.84375 1.234375 -5.46875 C 1.785156 -6.101562 2.503906 -6.421875 3.390625 -6.421875 Z M 5.0625 -3.640625 C 5.019531 -4.097656 4.921875 -4.460938 4.765625 -4.734375 C 4.484375 -5.242188 4.003906 -5.5 3.328125 -5.5 C 2.835938 -5.5 2.425781 -5.320312 2.09375 -4.96875 C 1.769531 -4.625 1.597656 -4.179688 1.578125 -3.640625 Z M 3.28125 -6.421875 Z M 3.28125 -6.421875 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-0-7&quot;&gt;
&lt;path d=&quot;M 3.265625 -0.6875 C 3.960938 -0.6875 4.441406 -0.945312 4.703125 -1.46875 C 4.960938 -2 5.09375 -2.585938 5.09375 -3.234375 C 5.09375 -3.828125 5 -4.304688 4.8125 -4.671875 C 4.507812 -5.242188 4 -5.53125 3.28125 -5.53125 C 2.632812 -5.53125 2.164062 -5.285156 1.875 -4.796875 C 1.582031 -4.304688 1.4375 -3.710938 1.4375 -3.015625 C 1.4375 -2.347656 1.582031 -1.789062 1.875 -1.34375 C 2.164062 -0.90625 2.628906 -0.6875 3.265625 -0.6875 Z M 3.3125 -6.453125 C 4.113281 -6.453125 4.789062 -6.179688 5.34375 -5.640625 C 5.90625 -5.109375 6.1875 -4.316406 6.1875 -3.265625 C 6.1875 -2.253906 5.941406 -1.414062 5.453125 -0.75 C 4.960938 -0.09375 4.203125 0.234375 3.171875 0.234375 C 2.304688 0.234375 1.617188 -0.0546875 1.109375 -0.640625 C 0.597656 -1.234375 0.34375 -2.019531 0.34375 -3 C 0.34375 -4.050781 0.609375 -4.890625 1.140625 -5.515625 C 1.679688 -6.140625 2.40625 -6.453125 3.3125 -6.453125 Z M 3.265625 -6.421875 Z M 3.265625 -6.421875 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-0-8&quot;&gt;
&lt;path d=&quot;M 0.796875 -6.28125 L 1.8125 -6.28125 L 1.8125 -5.1875 C 1.882812 -5.40625 2.082031 -5.664062 2.40625 -5.96875 C 2.726562 -6.269531 3.097656 -6.421875 3.515625 -6.421875 C 3.535156 -6.421875 3.566406 -6.414062 3.609375 -6.40625 C 3.660156 -6.40625 3.742188 -6.398438 3.859375 -6.390625 L 3.859375 -5.28125 C 3.796875 -5.289062 3.738281 -5.296875 3.6875 -5.296875 C 3.632812 -5.296875 3.578125 -5.296875 3.515625 -5.296875 C 2.984375 -5.296875 2.570312 -5.125 2.28125 -4.78125 C 2 -4.445312 1.859375 -4.054688 1.859375 -3.609375 L 1.859375 0 L 0.796875 0 Z M 0.796875 -6.28125 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-0-9&quot;&gt;
&lt;path d=&quot;M 0.984375 -8.03125 L 2.046875 -8.03125 L 2.046875 -6.28125 L 3.046875 -6.28125 L 3.046875 -5.421875 L 2.046875 -5.421875 L 2.046875 -1.3125 C 2.046875 -1.09375 2.125 -0.945312 2.28125 -0.875 C 2.351562 -0.832031 2.488281 -0.8125 2.6875 -0.8125 C 2.738281 -0.8125 2.789062 -0.8125 2.84375 -0.8125 C 2.90625 -0.820312 2.972656 -0.828125 3.046875 -0.828125 L 3.046875 0 C 2.929688 0.03125 2.804688 0.0507812 2.671875 0.0625 C 2.546875 0.0820312 2.40625 0.09375 2.25 0.09375 C 1.757812 0.09375 1.425781 -0.03125 1.25 -0.28125 C 1.070312 -0.53125 0.984375 -0.859375 0.984375 -1.265625 L 0.984375 -5.421875 L 0.140625 -5.421875 L 0.140625 -6.28125 L 0.984375 -6.28125 Z M 0.984375 -8.03125 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-0-10&quot;&gt;
&lt;path d=&quot;M 0.78125 -6.25 L 1.84375 -6.25 L 1.84375 0 L 0.78125 0 Z M 0.78125 -8.609375 L 1.84375 -8.609375 L 1.84375 -7.40625 L 0.78125 -7.40625 Z M 0.78125 -8.609375 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-0-11&quot;&gt;
&lt;path d=&quot;M 3.1875 -6.453125 C 3.894531 -6.453125 4.46875 -6.28125 4.90625 -5.9375 C 5.351562 -5.59375 5.625 -5.003906 5.71875 -4.171875 L 4.6875 -4.171875 C 4.625 -4.554688 4.484375 -4.875 4.265625 -5.125 C 4.046875 -5.382812 3.6875 -5.515625 3.1875 -5.515625 C 2.519531 -5.515625 2.039062 -5.1875 1.75 -4.53125 C 1.5625 -4.101562 1.46875 -3.578125 1.46875 -2.953125 C 1.46875 -2.328125 1.597656 -1.796875 1.859375 -1.359375 C 2.128906 -0.929688 2.550781 -0.71875 3.125 -0.71875 C 3.5625 -0.71875 3.90625 -0.851562 4.15625 -1.125 C 4.414062 -1.394531 4.59375 -1.757812 4.6875 -2.21875 L 5.71875 -2.21875 C 5.601562 -1.382812 5.3125 -0.773438 4.84375 -0.390625 C 4.375 -0.00390625 3.773438 0.1875 3.046875 0.1875 C 2.222656 0.1875 1.566406 -0.113281 1.078125 -0.71875 C 0.585938 -1.320312 0.34375 -2.070312 0.34375 -2.96875 C 0.34375 -4.070312 0.609375 -4.925781 1.140625 -5.53125 C 1.679688 -6.144531 2.363281 -6.453125 3.1875 -6.453125 Z M 3.03125 -6.421875 Z M 3.03125 -6.421875 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-0-12&quot;&gt;
&lt;path d=&quot;M 1.578125 -1.671875 C 1.578125 -1.367188 1.6875 -1.128906 1.90625 -0.953125 C 2.132812 -0.773438 2.398438 -0.6875 2.703125 -0.6875 C 3.078125 -0.6875 3.4375 -0.769531 3.78125 -0.9375 C 4.375 -1.226562 4.671875 -1.695312 4.671875 -2.34375 L 4.671875 -3.1875 C 4.535156 -3.113281 4.363281 -3.046875 4.15625 -2.984375 C 3.957031 -2.929688 3.757812 -2.894531 3.5625 -2.875 L 2.9375 -2.796875 C 2.550781 -2.742188 2.257812 -2.660156 2.0625 -2.546875 C 1.738281 -2.367188 1.578125 -2.078125 1.578125 -1.671875 Z M 4.140625 -3.796875 C 4.378906 -3.828125 4.539062 -3.929688 4.625 -4.109375 C 4.664062 -4.203125 4.6875 -4.335938 4.6875 -4.515625 C 4.6875 -4.867188 4.554688 -5.125 4.296875 -5.28125 C 4.046875 -5.445312 3.6875 -5.53125 3.21875 -5.53125 C 2.664062 -5.53125 2.273438 -5.382812 2.046875 -5.09375 C 1.910156 -4.925781 1.820312 -4.679688 1.78125 -4.359375 L 0.796875 -4.359375 C 0.816406 -5.128906 1.066406 -5.664062 1.546875 -5.96875 C 2.035156 -6.269531 2.597656 -6.421875 3.234375 -6.421875 C 3.972656 -6.421875 4.570312 -6.28125 5.03125 -6 C 5.488281 -5.71875 5.71875 -5.28125 5.71875 -4.6875 L 5.71875 -1.078125 C 5.71875 -0.972656 5.738281 -0.882812 5.78125 -0.8125 C 5.832031 -0.75 5.929688 -0.71875 6.078125 -0.71875 C 6.117188 -0.71875 6.164062 -0.71875 6.21875 -0.71875 C 6.28125 -0.726562 6.347656 -0.738281 6.421875 -0.75 L 6.421875 0.03125 C 6.253906 0.0703125 6.125 0.0976562 6.03125 0.109375 C 5.945312 0.128906 5.832031 0.140625 5.6875 0.140625 C 5.320312 0.140625 5.0625 0.0078125 4.90625 -0.25 C 4.8125 -0.382812 4.75 -0.578125 4.71875 -0.828125 C 4.5 -0.546875 4.1875 -0.300781 3.78125 -0.09375 C 3.382812 0.113281 2.945312 0.21875 2.46875 0.21875 C 1.882812 0.21875 1.40625 0.0390625 1.03125 -0.3125 C 0.664062 -0.664062 0.484375 -1.109375 0.484375 -1.640625 C 0.484375 -2.222656 0.664062 -2.675781 1.03125 -3 C 1.394531 -3.320312 1.867188 -3.519531 2.453125 -3.59375 Z M 3.265625 -6.421875 Z M 3.265625 -6.421875 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-0-13&quot;&gt;
&lt;path d=&quot;M 0.796875 -8.609375 L 1.859375 -8.609375 L 1.859375 0 L 0.796875 0 Z M 0.796875 -8.609375 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-0-14&quot;&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-0-15&quot;&gt;
&lt;path d=&quot;M 8.796875 -0.03125 L 8.203125 0.6875 L 6.875 -0.328125 C 6.550781 -0.148438 6.203125 -0.0078125 5.828125 0.09375 C 5.460938 0.195312 5.054688 0.25 4.609375 0.25 C 3.273438 0.25 2.226562 -0.1875 1.46875 -1.0625 C 0.800781 -1.914062 0.46875 -2.984375 0.46875 -4.265625 C 0.46875 -5.421875 0.757812 -6.414062 1.34375 -7.25 C 2.082031 -8.3125 3.175781 -8.84375 4.625 -8.84375 C 6.144531 -8.84375 7.269531 -8.351562 8 -7.375 C 8.570312 -6.613281 8.859375 -5.640625 8.859375 -4.453125 C 8.859375 -3.898438 8.789062 -3.367188 8.65625 -2.859375 C 8.445312 -2.078125 8.097656 -1.4375 7.609375 -0.9375 Z M 4.75 -0.796875 C 4.988281 -0.796875 5.210938 -0.8125 5.421875 -0.84375 C 5.640625 -0.875 5.828125 -0.9375 5.984375 -1.03125 L 5.046875 -1.78125 L 5.625 -2.5 L 6.75 -1.625 C 7.101562 -2.03125 7.34375 -2.484375 7.46875 -2.984375 C 7.601562 -3.492188 7.671875 -3.976562 7.671875 -4.4375 C 7.671875 -5.445312 7.40625 -6.257812 6.875 -6.875 C 6.34375 -7.5 5.617188 -7.8125 4.703125 -7.8125 C 3.773438 -7.8125 3.035156 -7.515625 2.484375 -6.921875 C 1.941406 -6.328125 1.671875 -5.414062 1.671875 -4.1875 C 1.671875 -3.144531 1.929688 -2.316406 2.453125 -1.703125 C 2.972656 -1.097656 3.738281 -0.796875 4.75 -0.796875 Z M 4.75 -0.796875 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-0-16&quot;&gt;
&lt;path d=&quot;M 1.828125 -6.28125 L 1.828125 -2.109375 C 1.828125 -1.785156 1.878906 -1.523438 1.984375 -1.328125 C 2.171875 -0.953125 2.519531 -0.765625 3.03125 -0.765625 C 3.757812 -0.765625 4.257812 -1.09375 4.53125 -1.75 C 4.675781 -2.101562 4.75 -2.582031 4.75 -3.1875 L 4.75 -6.28125 L 5.796875 -6.28125 L 5.796875 0 L 4.8125 0 L 4.8125 -0.921875 C 4.675781 -0.679688 4.507812 -0.484375 4.3125 -0.328125 C 3.90625 0.00390625 3.414062 0.171875 2.84375 0.171875 C 1.945312 0.171875 1.335938 -0.128906 1.015625 -0.734375 C 0.835938 -1.046875 0.75 -1.472656 0.75 -2.015625 L 0.75 -6.28125 Z M 3.28125 -6.421875 Z M 3.28125 -6.421875 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-0-17&quot;&gt;
&lt;path d=&quot;M 0.78125 -6.28125 L 1.78125 -6.28125 L 1.78125 -5.390625 C 2.070312 -5.753906 2.382812 -6.015625 2.71875 -6.171875 C 3.050781 -6.335938 3.421875 -6.421875 3.828125 -6.421875 C 4.710938 -6.421875 5.3125 -6.109375 5.625 -5.484375 C 5.800781 -5.140625 5.890625 -4.65625 5.890625 -4.03125 L 5.890625 0 L 4.8125 0 L 4.8125 -3.953125 C 4.8125 -4.335938 4.753906 -4.644531 4.640625 -4.875 C 4.453125 -5.269531 4.113281 -5.46875 3.625 -5.46875 C 3.375 -5.46875 3.171875 -5.441406 3.015625 -5.390625 C 2.722656 -5.304688 2.46875 -5.132812 2.25 -4.875 C 2.070312 -4.664062 1.957031 -4.453125 1.90625 -4.234375 C 1.851562 -4.015625 1.828125 -3.695312 1.828125 -3.28125 L 1.828125 0 L 0.78125 0 Z M 3.25 -6.421875 Z M 3.25 -6.421875 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-0-18&quot;&gt;
&lt;path d=&quot;M 1.40625 -1.96875 C 1.4375 -1.613281 1.523438 -1.34375 1.671875 -1.15625 C 1.929688 -0.820312 2.390625 -0.65625 3.046875 -0.65625 C 3.441406 -0.65625 3.785156 -0.738281 4.078125 -0.90625 C 4.378906 -1.070312 4.53125 -1.332031 4.53125 -1.6875 C 4.53125 -1.957031 4.410156 -2.164062 4.171875 -2.3125 C 4.015625 -2.394531 3.710938 -2.492188 3.265625 -2.609375 L 2.421875 -2.8125 C 1.890625 -2.945312 1.5 -3.097656 1.25 -3.265625 C 0.789062 -3.546875 0.5625 -3.941406 0.5625 -4.453125 C 0.5625 -5.046875 0.773438 -5.523438 1.203125 -5.890625 C 1.628906 -6.253906 2.207031 -6.4375 2.9375 -6.4375 C 3.875 -6.4375 4.550781 -6.160156 4.96875 -5.609375 C 5.238281 -5.253906 5.367188 -4.875 5.359375 -4.46875 L 4.359375 -4.46875 C 4.335938 -4.707031 4.253906 -4.925781 4.109375 -5.125 C 3.867188 -5.394531 3.445312 -5.53125 2.84375 -5.53125 C 2.445312 -5.53125 2.144531 -5.453125 1.9375 -5.296875 C 1.738281 -5.148438 1.640625 -4.953125 1.640625 -4.703125 C 1.640625 -4.429688 1.773438 -4.210938 2.046875 -4.046875 C 2.203125 -3.953125 2.429688 -3.867188 2.734375 -3.796875 L 3.421875 -3.625 C 4.179688 -3.4375 4.691406 -3.257812 4.953125 -3.09375 C 5.359375 -2.820312 5.5625 -2.394531 5.5625 -1.8125 C 5.5625 -1.257812 5.347656 -0.78125 4.921875 -0.375 C 4.503906 0.0273438 3.863281 0.234375 3 0.234375 C 2.0625 0.234375 1.394531 0.0234375 1 -0.390625 C 0.613281 -0.816406 0.410156 -1.34375 0.390625 -1.96875 Z M 2.953125 -6.421875 Z M 2.953125 -6.421875 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-1-0&quot;&gt;
&lt;path d=&quot;M -2.03125 -1.59375 C -1.445312 -1.625 -1.046875 -1.847656 -0.828125 -2.265625 C -0.703125 -2.484375 -0.640625 -2.726562 -0.640625 -3 C -0.640625 -3.5 -0.847656 -3.925781 -1.265625 -4.28125 C -1.691406 -4.632812 -2.546875 -4.890625 -3.828125 -5.046875 C -3.460938 -4.804688 -3.203125 -4.515625 -3.046875 -4.171875 C -2.898438 -3.828125 -2.828125 -3.453125 -2.828125 -3.046875 C -2.828125 -2.242188 -3.078125 -1.601562 -3.578125 -1.125 C -4.085938 -0.65625 -4.738281 -0.421875 -5.53125 -0.421875 C -6.289062 -0.421875 -6.957031 -0.65625 -7.53125 -1.125 C -8.113281 -1.59375 -8.40625 -2.28125 -8.40625 -3.1875 C -8.40625 -4.40625 -7.851562 -5.25 -6.75 -5.71875 C -6.144531 -5.96875 -5.390625 -6.09375 -4.484375 -6.09375 C -3.453125 -6.09375 -2.539062 -5.941406 -1.75 -5.640625 C -0.425781 -5.128906 0.234375 -4.257812 0.234375 -3.03125 C 0.234375 -2.21875 0.0195312 -1.597656 -0.40625 -1.171875 C -0.84375 -0.742188 -1.382812 -0.53125 -2.03125 -0.53125 Z M -3.75 -3.1875 C -3.75 -3.613281 -3.882812 -4 -4.15625 -4.34375 C -4.4375 -4.6875 -4.921875 -4.859375 -5.609375 -4.859375 C -6.222656 -4.859375 -6.679688 -4.703125 -6.984375 -4.390625 C -7.285156 -4.078125 -7.4375 -3.679688 -7.4375 -3.203125 C -7.4375 -2.691406 -7.265625 -2.285156 -6.921875 -1.984375 C -6.578125 -1.679688 -6.113281 -1.53125 -5.53125 -1.53125 C -4.988281 -1.53125 -4.554688 -1.660156 -4.234375 -1.921875 C -3.910156 -2.191406 -3.75 -2.613281 -3.75 -3.1875 Z M -3.75 -3.1875 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-1-1&quot;&gt;
&lt;path d=&quot;M -8.390625 -3.25 C -8.390625 -4.332031 -7.941406 -5.117188 -7.046875 -5.609375 C -6.359375 -5.984375 -5.410156 -6.171875 -4.203125 -6.171875 C -3.066406 -6.171875 -2.125 -6 -1.375 -5.65625 C -0.300781 -5.164062 0.234375 -4.359375 0.234375 -3.234375 C 0.234375 -2.234375 -0.203125 -1.484375 -1.078125 -0.984375 C -1.816406 -0.578125 -2.800781 -0.375 -4.03125 -0.375 C -4.976562 -0.375 -5.796875 -0.5 -6.484375 -0.75 C -7.753906 -1.207031 -8.390625 -2.039062 -8.390625 -3.25 Z M -0.734375 -3.234375 C -0.734375 -3.785156 -0.972656 -4.222656 -1.453125 -4.546875 C -1.941406 -4.867188 -2.847656 -5.03125 -4.171875 -5.03125 C -5.117188 -5.03125 -5.898438 -4.910156 -6.515625 -4.671875 C -7.128906 -4.441406 -7.4375 -3.988281 -7.4375 -3.3125 C -7.4375 -2.6875 -7.144531 -2.226562 -6.5625 -1.9375 C -5.976562 -1.65625 -5.117188 -1.515625 -3.984375 -1.515625 C -3.128906 -1.515625 -2.441406 -1.609375 -1.921875 -1.796875 C -1.128906 -2.078125 -0.734375 -2.554688 -0.734375 -3.234375 Z M -0.734375 -3.234375 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-1-2&quot;&gt;
&lt;path d=&quot;M 0 -0.375 C -0.71875 -0.414062 -1.34375 -0.566406 -1.875 -0.828125 C -2.414062 -1.085938 -2.90625 -1.59375 -3.34375 -2.34375 L -4 -3.46875 C -4.289062 -3.96875 -4.539062 -4.320312 -4.75 -4.53125 C -5.070312 -4.851562 -5.441406 -5.015625 -5.859375 -5.015625 C -6.347656 -5.015625 -6.734375 -4.863281 -7.015625 -4.5625 C -7.304688 -4.269531 -7.453125 -3.882812 -7.453125 -3.40625 C -7.453125 -2.675781 -7.179688 -2.175781 -6.640625 -1.90625 C -6.335938 -1.75 -5.929688 -1.664062 -5.421875 -1.65625 L -5.421875 -0.578125 C -6.148438 -0.585938 -6.742188 -0.722656 -7.203125 -0.984375 C -8.015625 -1.441406 -8.421875 -2.25 -8.421875 -3.40625 C -8.421875 -4.363281 -8.160156 -5.0625 -7.640625 -5.5 C -7.117188 -5.945312 -6.539062 -6.171875 -5.90625 -6.171875 C -5.238281 -6.171875 -4.664062 -5.9375 -4.1875 -5.46875 C -3.90625 -5.195312 -3.566406 -4.707031 -3.171875 -4 L -2.734375 -3.1875 C -2.523438 -2.8125 -2.320312 -2.515625 -2.125 -2.296875 C -1.789062 -1.898438 -1.414062 -1.648438 -1 -1.546875 L -1 -6.140625 L 0 -6.140625 Z M 0 -0.375 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-1-3&quot;&gt;
&lt;path d=&quot;M -2.96875 -3.96875 L -6.78125 -3.96875 L -2.96875 -1.28125 Z M 0 -3.984375 L -2.046875 -3.984375 L -2.046875 -0.3125 L -3.078125 -0.3125 L -8.421875 -4.15625 L -8.421875 -5.046875 L -2.96875 -5.046875 L -2.96875 -6.28125 L -2.046875 -6.28125 L -2.046875 -5.046875 L 0 -5.046875 Z M 0 -3.984375 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-1-4&quot;&gt;
&lt;path d=&quot;M -8.421875 -3.515625 C -8.421875 -4.453125 -8.175781 -5.101562 -7.6875 -5.46875 C -7.207031 -5.84375 -6.707031 -6.03125 -6.1875 -6.03125 L -6.1875 -4.984375 C -6.519531 -4.921875 -6.78125 -4.820312 -6.96875 -4.6875 C -7.320312 -4.425781 -7.5 -4.039062 -7.5 -3.53125 C -7.5 -2.9375 -7.222656 -2.460938 -6.671875 -2.109375 C -6.128906 -1.765625 -5.351562 -1.578125 -4.34375 -1.546875 C -4.695312 -1.785156 -4.960938 -2.085938 -5.140625 -2.453125 C -5.296875 -2.785156 -5.375 -3.160156 -5.375 -3.578125 C -5.375 -4.285156 -5.148438 -4.898438 -4.703125 -5.421875 C -4.253906 -5.941406 -3.582031 -6.203125 -2.6875 -6.203125 C -1.925781 -6.203125 -1.25 -5.953125 -0.65625 -5.453125 C -0.0703125 -4.960938 0.21875 -4.257812 0.21875 -3.34375 C 0.21875 -2.550781 -0.078125 -1.867188 -0.671875 -1.296875 C -1.273438 -0.734375 -2.28125 -0.453125 -3.6875 -0.453125 C -4.726562 -0.453125 -5.613281 -0.578125 -6.34375 -0.828125 C -7.726562 -1.316406 -8.421875 -2.210938 -8.421875 -3.515625 Z M -0.71875 -3.4375 C -0.71875 -3.988281 -0.90625 -4.398438 -1.28125 -4.671875 C -1.65625 -4.953125 -2.097656 -5.09375 -2.609375 -5.09375 C -3.035156 -5.09375 -3.441406 -4.96875 -3.828125 -4.71875 C -4.210938 -4.476562 -4.40625 -4.03125 -4.40625 -3.375 C -4.40625 -2.925781 -4.253906 -2.53125 -3.953125 -2.1875 C -3.660156 -1.84375 -3.210938 -1.671875 -2.609375 -1.671875 C -2.078125 -1.671875 -1.628906 -1.828125 -1.265625 -2.140625 C -0.898438 -2.453125 -0.71875 -2.882812 -0.71875 -3.4375 Z M -0.71875 -3.4375 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-1-5&quot;&gt;
&lt;path d=&quot;M -4.875 -3.265625 C -4.875 -3.734375 -5.003906 -4.097656 -5.265625 -4.359375 C -5.523438 -4.617188 -5.832031 -4.75 -6.1875 -4.75 C -6.5 -4.75 -6.785156 -4.625 -7.046875 -4.375 C -7.316406 -4.125 -7.453125 -3.742188 -7.453125 -3.234375 C -7.453125 -2.722656 -7.316406 -2.351562 -7.046875 -2.125 C -6.785156 -1.894531 -6.484375 -1.78125 -6.140625 -1.78125 C -5.742188 -1.78125 -5.429688 -1.925781 -5.203125 -2.21875 C -4.984375 -2.519531 -4.875 -2.867188 -4.875 -3.265625 Z M -0.71875 -3.328125 C -0.71875 -3.816406 -0.847656 -4.222656 -1.109375 -4.546875 C -1.378906 -4.867188 -1.773438 -5.03125 -2.296875 -5.03125 C -2.835938 -5.03125 -3.25 -4.863281 -3.53125 -4.53125 C -3.8125 -4.195312 -3.953125 -3.769531 -3.953125 -3.25 C -3.953125 -2.75 -3.804688 -2.335938 -3.515625 -2.015625 C -3.234375 -1.703125 -2.835938 -1.546875 -2.328125 -1.546875 C -1.890625 -1.546875 -1.507812 -1.691406 -1.1875 -1.984375 C -0.875 -2.273438 -0.71875 -2.722656 -0.71875 -3.328125 Z M -4.46875 -1.828125 C -4.59375 -1.535156 -4.738281 -1.304688 -4.90625 -1.140625 C -5.21875 -0.835938 -5.625 -0.6875 -6.125 -0.6875 C -6.75 -0.6875 -7.285156 -0.910156 -7.734375 -1.359375 C -8.191406 -1.816406 -8.421875 -2.457031 -8.421875 -3.28125 C -8.421875 -4.09375 -8.207031 -4.722656 -7.78125 -5.171875 C -7.351562 -5.628906 -6.859375 -5.859375 -6.296875 -5.859375 C -5.773438 -5.859375 -5.347656 -5.726562 -5.015625 -5.46875 C -4.835938 -5.320312 -4.660156 -5.09375 -4.484375 -4.78125 C -4.328125 -5.125 -4.144531 -5.394531 -3.9375 -5.59375 C -3.539062 -5.96875 -3.03125 -6.15625 -2.40625 -6.15625 C -1.664062 -6.15625 -1.039062 -5.90625 -0.53125 -5.40625 C -0.0195312 -4.914062 0.234375 -4.21875 0.234375 -3.3125 C 0.234375 -2.488281 0.0117188 -1.796875 -0.421875 -1.234375 C -0.867188 -0.671875 -1.515625 -0.390625 -2.359375 -0.390625 C -2.847656 -0.390625 -3.273438 -0.507812 -3.640625 -0.75 C -4.003906 -0.988281 -4.28125 -1.347656 -4.46875 -1.828125 Z M -4.46875 -1.828125 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-1-6&quot;&gt;
&lt;path d=&quot;M -5.9375 -1.15625 L -6.75 -1.15625 C -6.820312 -1.914062 -6.945312 -2.441406 -7.125 -2.734375 C -7.300781 -3.035156 -7.710938 -3.265625 -8.359375 -3.421875 L -8.359375 -4.25 L 0 -4.25 L 0 -3.125 L -5.9375 -3.125 Z M -5.9375 -1.15625 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-1-7&quot;&gt;
&lt;path d=&quot;M -2.78125 -1.671875 C -2.289062 -1.703125 -1.894531 -1.816406 -1.59375 -2.015625 C -1.019531 -2.410156 -0.734375 -3.09375 -0.734375 -4.0625 C -0.734375 -4.5 -0.796875 -4.898438 -0.921875 -5.265625 C -1.160156 -5.960938 -1.59375 -6.3125 -2.21875 -6.3125 C -2.6875 -6.3125 -3.019531 -6.160156 -3.21875 -5.859375 C -3.414062 -5.566406 -3.585938 -5.101562 -3.734375 -4.46875 L -4 -3.3125 C -4.164062 -2.539062 -4.351562 -2 -4.5625 -1.6875 C -4.925781 -1.144531 -5.460938 -0.875 -6.171875 -0.875 C -6.953125 -0.875 -7.585938 -1.140625 -8.078125 -1.671875 C -8.578125 -2.203125 -8.828125 -2.957031 -8.828125 -3.9375 C -8.828125 -4.84375 -8.609375 -5.609375 -8.171875 -6.234375 C -7.734375 -6.867188 -7.035156 -7.1875 -6.078125 -7.1875 L -6.078125 -6.09375 C -6.546875 -6.03125 -6.898438 -5.90625 -7.140625 -5.71875 C -7.585938 -5.363281 -7.8125 -4.757812 -7.8125 -3.90625 C -7.8125 -3.21875 -7.664062 -2.722656 -7.375 -2.421875 C -7.09375 -2.117188 -6.757812 -1.96875 -6.375 -1.96875 C -5.957031 -1.96875 -5.648438 -2.144531 -5.453125 -2.5 C -5.328125 -2.726562 -5.171875 -3.25 -4.984375 -4.0625 L -4.703125 -5.28125 C -4.566406 -5.851562 -4.382812 -6.300781 -4.15625 -6.625 C -3.757812 -7.164062 -3.175781 -7.4375 -2.40625 -7.4375 C -1.457031 -7.4375 -0.773438 -7.085938 -0.359375 -6.390625 C 0.0429688 -5.703125 0.25 -4.898438 0.25 -3.984375 C 0.25 -2.910156 -0.0195312 -2.070312 -0.5625 -1.46875 C -1.113281 -0.863281 -1.851562 -0.566406 -2.78125 -0.578125 Z M -8.84375 -4.03125 Z M -8.84375 -4.03125 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-1-8&quot;&gt;
&lt;path d=&quot;M -1.671875 -1.578125 C -1.367188 -1.578125 -1.128906 -1.6875 -0.953125 -1.90625 C -0.773438 -2.132812 -0.6875 -2.398438 -0.6875 -2.703125 C -0.6875 -3.078125 -0.769531 -3.4375 -0.9375 -3.78125 C -1.226562 -4.375 -1.695312 -4.671875 -2.34375 -4.671875 L -3.1875 -4.671875 C -3.113281 -4.535156 -3.046875 -4.363281 -2.984375 -4.15625 C -2.929688 -3.957031 -2.894531 -3.757812 -2.875 -3.5625 L -2.796875 -2.9375 C -2.742188 -2.550781 -2.660156 -2.257812 -2.546875 -2.0625 C -2.367188 -1.738281 -2.078125 -1.578125 -1.671875 -1.578125 Z M -3.796875 -4.140625 C -3.828125 -4.378906 -3.929688 -4.539062 -4.109375 -4.625 C -4.203125 -4.664062 -4.335938 -4.6875 -4.515625 -4.6875 C -4.867188 -4.6875 -5.125 -4.554688 -5.28125 -4.296875 C -5.445312 -4.046875 -5.53125 -3.6875 -5.53125 -3.21875 C -5.53125 -2.664062 -5.382812 -2.273438 -5.09375 -2.046875 C -4.925781 -1.910156 -4.679688 -1.820312 -4.359375 -1.78125 L -4.359375 -0.796875 C -5.128906 -0.816406 -5.664062 -1.066406 -5.96875 -1.546875 C -6.269531 -2.035156 -6.421875 -2.597656 -6.421875 -3.234375 C -6.421875 -3.972656 -6.28125 -4.570312 -6 -5.03125 C -5.71875 -5.488281 -5.28125 -5.71875 -4.6875 -5.71875 L -1.078125 -5.71875 C -0.972656 -5.71875 -0.882812 -5.738281 -0.8125 -5.78125 C -0.75 -5.832031 -0.71875 -5.929688 -0.71875 -6.078125 C -0.71875 -6.117188 -0.71875 -6.164062 -0.71875 -6.21875 C -0.726562 -6.28125 -0.738281 -6.347656 -0.75 -6.421875 L 0.03125 -6.421875 C 0.0703125 -6.253906 0.0976562 -6.125 0.109375 -6.03125 C 0.128906 -5.945312 0.140625 -5.832031 0.140625 -5.6875 C 0.140625 -5.320312 0.0078125 -5.0625 -0.25 -4.90625 C -0.382812 -4.8125 -0.578125 -4.75 -0.828125 -4.71875 C -0.546875 -4.5 -0.300781 -4.1875 -0.09375 -3.78125 C 0.113281 -3.382812 0.21875 -2.945312 0.21875 -2.46875 C 0.21875 -1.882812 0.0390625 -1.40625 -0.3125 -1.03125 C -0.664062 -0.664062 -1.109375 -0.484375 -1.640625 -0.484375 C -2.222656 -0.484375 -2.675781 -0.664062 -3 -1.03125 C -3.320312 -1.394531 -3.519531 -1.867188 -3.59375 -2.453125 Z M -6.421875 -3.265625 Z M -6.421875 -3.265625 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-1-9&quot;&gt;
&lt;path d=&quot;M -6.28125 -0.78125 L -6.28125 -1.8125 L -5.390625 -1.8125 C -5.691406 -2.0625 -5.914062 -2.289062 -6.0625 -2.5 C -6.300781 -2.84375 -6.421875 -3.238281 -6.421875 -3.6875 C -6.421875 -4.1875 -6.296875 -4.585938 -6.046875 -4.890625 C -5.910156 -5.054688 -5.703125 -5.210938 -5.421875 -5.359375 C -5.765625 -5.585938 -6.015625 -5.859375 -6.171875 -6.171875 C -6.335938 -6.492188 -6.421875 -6.851562 -6.421875 -7.25 C -6.421875 -8.09375 -6.113281 -8.664062 -5.5 -8.96875 C -5.175781 -9.132812 -4.734375 -9.21875 -4.171875 -9.21875 L 0 -9.21875 L 0 -8.125 L -4.359375 -8.125 C -4.773438 -8.125 -5.0625 -8.019531 -5.21875 -7.8125 C -5.375 -7.601562 -5.453125 -7.347656 -5.453125 -7.046875 C -5.453125 -6.628906 -5.3125 -6.269531 -5.03125 -5.96875 C -4.757812 -5.675781 -4.300781 -5.53125 -3.65625 -5.53125 L 0 -5.53125 L 0 -4.453125 L -4.09375 -4.453125 C -4.519531 -4.453125 -4.832031 -4.398438 -5.03125 -4.296875 C -5.320312 -4.140625 -5.46875 -3.84375 -5.46875 -3.40625 C -5.46875 -3.007812 -5.3125 -2.644531 -5 -2.3125 C -4.695312 -1.988281 -4.140625 -1.828125 -3.328125 -1.828125 L 0 -1.828125 L 0 -0.78125 Z M -6.28125 -0.78125 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-1-10&quot;&gt;
&lt;path d=&quot;M -0.703125 -3.421875 C -0.703125 -3.910156 -0.910156 -4.316406 -1.328125 -4.640625 C -1.742188 -4.972656 -2.359375 -5.140625 -3.171875 -5.140625 C -3.671875 -5.140625 -4.101562 -5.066406 -4.46875 -4.921875 C -5.15625 -4.648438 -5.5 -4.148438 -5.5 -3.421875 C -5.5 -2.691406 -5.132812 -2.191406 -4.40625 -1.921875 C -4.019531 -1.773438 -3.523438 -1.703125 -2.921875 -1.703125 C -2.429688 -1.703125 -2.019531 -1.773438 -1.6875 -1.921875 C -1.03125 -2.191406 -0.703125 -2.691406 -0.703125 -3.421875 Z M -6.25 -0.6875 L -6.25 -1.71875 L -5.421875 -1.71875 C -5.703125 -1.925781 -5.921875 -2.15625 -6.078125 -2.40625 C -6.304688 -2.757812 -6.421875 -3.175781 -6.421875 -3.65625 C -6.421875 -4.375 -6.148438 -4.976562 -5.609375 -5.46875 C -5.066406 -5.96875 -4.289062 -6.21875 -3.28125 -6.21875 C -1.90625 -6.21875 -0.925781 -5.859375 -0.34375 -5.140625 C 0.0273438 -4.691406 0.21875 -4.164062 0.21875 -3.5625 C 0.21875 -3.09375 0.113281 -2.695312 -0.09375 -2.375 C -0.21875 -2.1875 -0.421875 -1.976562 -0.703125 -1.75 L 2.5 -1.75 L 2.5 -0.6875 Z M -6.25 -0.6875 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-1-11&quot;&gt;
&lt;path d=&quot;M -8.609375 -0.796875 L -8.609375 -1.859375 L 0 -1.859375 L 0 -0.796875 Z M -8.609375 -0.796875 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-1-12&quot;&gt;
&lt;path d=&quot;M -6.421875 -3.390625 C -6.421875 -3.835938 -6.316406 -4.269531 -6.109375 -4.6875 C -5.898438 -5.101562 -5.628906 -5.421875 -5.296875 -5.640625 C -4.972656 -5.847656 -4.601562 -5.988281 -4.1875 -6.0625 C -3.894531 -6.125 -3.429688 -6.15625 -2.796875 -6.15625 L -2.796875 -1.546875 C -2.160156 -1.566406 -1.648438 -1.71875 -1.265625 -2 C -0.878906 -2.28125 -0.6875 -2.71875 -0.6875 -3.3125 C -0.6875 -3.863281 -0.867188 -4.300781 -1.234375 -4.625 C -1.441406 -4.8125 -1.6875 -4.945312 -1.96875 -5.03125 L -1.96875 -6.0625 C -1.738281 -6.039062 -1.484375 -5.953125 -1.203125 -5.796875 C -0.921875 -5.640625 -0.6875 -5.46875 -0.5 -5.28125 C -0.1875 -4.957031 0.0195312 -4.554688 0.125 -4.078125 C 0.1875 -3.828125 0.21875 -3.539062 0.21875 -3.21875 C 0.21875 -2.4375 -0.0625 -1.773438 -0.625 -1.234375 C -1.195312 -0.691406 -1.992188 -0.421875 -3.015625 -0.421875 C -4.023438 -0.421875 -4.84375 -0.691406 -5.46875 -1.234375 C -6.101562 -1.785156 -6.421875 -2.503906 -6.421875 -3.390625 Z M -3.640625 -5.0625 C -4.097656 -5.019531 -4.460938 -4.921875 -4.734375 -4.765625 C -5.242188 -4.484375 -5.5 -4.003906 -5.5 -3.328125 C -5.5 -2.835938 -5.320312 -2.425781 -4.96875 -2.09375 C -4.625 -1.769531 -4.179688 -1.597656 -3.640625 -1.578125 Z M -6.421875 -3.28125 Z M -6.421875 -3.28125 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-1-13&quot;&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-1-14&quot;&gt;
&lt;path d=&quot;M -0.03125 -8.796875 L 0.6875 -8.203125 L -0.328125 -6.875 C -0.148438 -6.550781 -0.0078125 -6.203125 0.09375 -5.828125 C 0.195312 -5.460938 0.25 -5.054688 0.25 -4.609375 C 0.25 -3.273438 -0.1875 -2.226562 -1.0625 -1.46875 C -1.914062 -0.800781 -2.984375 -0.46875 -4.265625 -0.46875 C -5.421875 -0.46875 -6.414062 -0.757812 -7.25 -1.34375 C -8.3125 -2.082031 -8.84375 -3.175781 -8.84375 -4.625 C -8.84375 -6.144531 -8.351562 -7.269531 -7.375 -8 C -6.613281 -8.570312 -5.640625 -8.859375 -4.453125 -8.859375 C -3.898438 -8.859375 -3.367188 -8.789062 -2.859375 -8.65625 C -2.078125 -8.445312 -1.4375 -8.097656 -0.9375 -7.609375 Z M -0.796875 -4.75 C -0.796875 -4.988281 -0.8125 -5.210938 -0.84375 -5.421875 C -0.875 -5.640625 -0.9375 -5.828125 -1.03125 -5.984375 L -1.78125 -5.046875 L -2.5 -5.625 L -1.625 -6.75 C -2.03125 -7.101562 -2.484375 -7.34375 -2.984375 -7.46875 C -3.492188 -7.601562 -3.976562 -7.671875 -4.4375 -7.671875 C -5.445312 -7.671875 -6.257812 -7.40625 -6.875 -6.875 C -7.5 -6.34375 -7.8125 -5.617188 -7.8125 -4.703125 C -7.8125 -3.773438 -7.515625 -3.035156 -6.921875 -2.484375 C -6.328125 -1.941406 -5.414062 -1.671875 -4.1875 -1.671875 C -3.144531 -1.671875 -2.316406 -1.929688 -1.703125 -2.453125 C -1.097656 -2.972656 -0.796875 -3.738281 -0.796875 -4.75 Z M -0.796875 -4.75 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-1-15&quot;&gt;
&lt;path d=&quot;M -6.28125 -1.828125 L -2.109375 -1.828125 C -1.785156 -1.828125 -1.523438 -1.878906 -1.328125 -1.984375 C -0.953125 -2.171875 -0.765625 -2.519531 -0.765625 -3.03125 C -0.765625 -3.757812 -1.09375 -4.257812 -1.75 -4.53125 C -2.101562 -4.675781 -2.582031 -4.75 -3.1875 -4.75 L -6.28125 -4.75 L -6.28125 -5.796875 L 0 -5.796875 L 0 -4.8125 L -0.921875 -4.8125 C -0.679688 -4.675781 -0.484375 -4.507812 -0.328125 -4.3125 C 0.00390625 -3.90625 0.171875 -3.414062 0.171875 -2.84375 C 0.171875 -1.945312 -0.128906 -1.335938 -0.734375 -1.015625 C -1.046875 -0.835938 -1.472656 -0.75 -2.015625 -0.75 L -6.28125 -0.75 Z M -6.421875 -3.28125 Z M -6.421875 -3.28125 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-1-16&quot;&gt;
&lt;path d=&quot;M -6.28125 -0.78125 L -6.28125 -1.78125 L -5.390625 -1.78125 C -5.753906 -2.070312 -6.015625 -2.382812 -6.171875 -2.71875 C -6.335938 -3.050781 -6.421875 -3.421875 -6.421875 -3.828125 C -6.421875 -4.710938 -6.109375 -5.3125 -5.484375 -5.625 C -5.140625 -5.800781 -4.65625 -5.890625 -4.03125 -5.890625 L 0 -5.890625 L 0 -4.8125 L -3.953125 -4.8125 C -4.335938 -4.8125 -4.644531 -4.753906 -4.875 -4.640625 C -5.269531 -4.453125 -5.46875 -4.113281 -5.46875 -3.625 C -5.46875 -3.375 -5.441406 -3.171875 -5.390625 -3.015625 C -5.304688 -2.722656 -5.132812 -2.46875 -4.875 -2.25 C -4.664062 -2.070312 -4.453125 -1.957031 -4.234375 -1.90625 C -4.015625 -1.851562 -3.695312 -1.828125 -3.28125 -1.828125 L 0 -1.828125 L 0 -0.78125 Z M -6.421875 -3.25 Z M -6.421875 -3.25 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-1-17&quot;&gt;
&lt;path d=&quot;M -8.03125 -0.984375 L -8.03125 -2.046875 L -6.28125 -2.046875 L -6.28125 -3.046875 L -5.421875 -3.046875 L -5.421875 -2.046875 L -1.3125 -2.046875 C -1.09375 -2.046875 -0.945312 -2.125 -0.875 -2.28125 C -0.832031 -2.351562 -0.8125 -2.488281 -0.8125 -2.6875 C -0.8125 -2.738281 -0.8125 -2.789062 -0.8125 -2.84375 C -0.820312 -2.90625 -0.828125 -2.972656 -0.828125 -3.046875 L 0 -3.046875 C 0.03125 -2.929688 0.0507812 -2.804688 0.0625 -2.671875 C 0.0820312 -2.546875 0.09375 -2.40625 0.09375 -2.25 C 0.09375 -1.757812 -0.03125 -1.425781 -0.28125 -1.25 C -0.53125 -1.070312 -0.859375 -0.984375 -1.265625 -0.984375 L -5.421875 -0.984375 L -5.421875 -0.140625 L -6.28125 -0.140625 L -6.28125 -0.984375 Z M -8.03125 -0.984375 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-1-18&quot;&gt;
&lt;path d=&quot;M -6.25 -0.78125 L -6.25 -1.84375 L 0 -1.84375 L 0 -0.78125 Z M -8.609375 -0.78125 L -8.609375 -1.84375 L -7.40625 -1.84375 L -7.40625 -0.78125 Z M -8.609375 -0.78125 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-1-19&quot;&gt;
&lt;path d=&quot;M -1.96875 -1.40625 C -1.613281 -1.4375 -1.34375 -1.523438 -1.15625 -1.671875 C -0.820312 -1.929688 -0.65625 -2.390625 -0.65625 -3.046875 C -0.65625 -3.441406 -0.738281 -3.785156 -0.90625 -4.078125 C -1.070312 -4.378906 -1.332031 -4.53125 -1.6875 -4.53125 C -1.957031 -4.53125 -2.164062 -4.410156 -2.3125 -4.171875 C -2.394531 -4.015625 -2.492188 -3.710938 -2.609375 -3.265625 L -2.8125 -2.421875 C -2.945312 -1.890625 -3.097656 -1.5 -3.265625 -1.25 C -3.546875 -0.789062 -3.941406 -0.5625 -4.453125 -0.5625 C -5.046875 -0.5625 -5.523438 -0.773438 -5.890625 -1.203125 C -6.253906 -1.628906 -6.4375 -2.207031 -6.4375 -2.9375 C -6.4375 -3.875 -6.160156 -4.550781 -5.609375 -4.96875 C -5.253906 -5.238281 -4.875 -5.367188 -4.46875 -5.359375 L -4.46875 -4.359375 C -4.707031 -4.335938 -4.925781 -4.253906 -5.125 -4.109375 C -5.394531 -3.867188 -5.53125 -3.445312 -5.53125 -2.84375 C -5.53125 -2.445312 -5.453125 -2.144531 -5.296875 -1.9375 C -5.148438 -1.738281 -4.953125 -1.640625 -4.703125 -1.640625 C -4.429688 -1.640625 -4.210938 -1.773438 -4.046875 -2.046875 C -3.953125 -2.203125 -3.867188 -2.429688 -3.796875 -2.734375 L -3.625 -3.421875 C -3.4375 -4.179688 -3.257812 -4.691406 -3.09375 -4.953125 C -2.820312 -5.359375 -2.394531 -5.5625 -1.8125 -5.5625 C -1.257812 -5.5625 -0.78125 -5.347656 -0.375 -4.921875 C 0.0273438 -4.503906 0.234375 -3.863281 0.234375 -3 C 0.234375 -2.0625 0.0234375 -1.394531 -0.390625 -1 C -0.816406 -0.613281 -1.34375 -0.410156 -1.96875 -0.390625 Z M -6.421875 -2.953125 Z M -6.421875 -2.953125 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-2-0&quot;&gt;
&lt;path d=&quot;M 9.484375 0 L 7.3125 0 L 3.078125 -7.359375 L 3.078125 0 L 1.0625 0 L 1.0625 -10.375 L 3.328125 -10.375 L 7.46875 -3.125 L 7.46875 -10.375 L 9.484375 -10.375 Z M 9.484375 0 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-2-1&quot;&gt;
&lt;path d=&quot;M 7.328125 -6.703125 C 7.972656 -5.890625 8.296875 -4.925781 8.296875 -3.8125 C 8.296875 -2.6875 7.972656 -1.722656 7.328125 -0.921875 C 6.679688 -0.128906 5.695312 0.265625 4.375 0.265625 C 3.0625 0.265625 2.082031 -0.128906 1.4375 -0.921875 C 0.789062 -1.722656 0.46875 -2.6875 0.46875 -3.8125 C 0.46875 -4.925781 0.789062 -5.882812 1.4375 -6.6875 C 2.082031 -7.5 3.0625 -7.90625 4.375 -7.90625 C 5.695312 -7.90625 6.679688 -7.503906 7.328125 -6.703125 Z M 4.375 -6.21875 C 3.789062 -6.21875 3.335938 -6.007812 3.015625 -5.59375 C 2.703125 -5.175781 2.546875 -4.582031 2.546875 -3.8125 C 2.546875 -3.050781 2.703125 -2.457031 3.015625 -2.03125 C 3.335938 -1.613281 3.789062 -1.40625 4.375 -1.40625 C 4.957031 -1.40625 5.40625 -1.613281 5.71875 -2.03125 C 6.039062 -2.457031 6.203125 -3.050781 6.203125 -3.8125 C 6.203125 -4.582031 6.039062 -5.175781 5.71875 -5.59375 C 5.40625 -6.007812 4.957031 -6.21875 4.375 -6.21875 Z M 4.375 -6.21875 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-2-2&quot;&gt;
&lt;path d=&quot;M 4.796875 -5.8125 C 3.984375 -5.8125 3.441406 -5.550781 3.171875 -5.03125 C 3.015625 -4.738281 2.9375 -4.285156 2.9375 -3.671875 L 2.9375 0 L 0.921875 0 L 0.921875 -7.671875 L 2.828125 -7.671875 L 2.828125 -6.328125 C 3.140625 -6.835938 3.410156 -7.1875 3.640625 -7.375 C 4.015625 -7.6875 4.5 -7.84375 5.09375 -7.84375 C 5.132812 -7.84375 5.164062 -7.84375 5.1875 -7.84375 C 5.21875 -7.84375 5.273438 -7.84375 5.359375 -7.84375 L 5.359375 -5.78125 C 5.234375 -5.789062 5.117188 -5.796875 5.015625 -5.796875 C 4.921875 -5.804688 4.847656 -5.8125 4.796875 -5.8125 Z M 4.796875 -5.8125 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-2-3&quot;&gt;
&lt;path d=&quot;M 5.234375 -5.5625 C 5.066406 -5.925781 4.738281 -6.109375 4.25 -6.109375 C 3.675781 -6.109375 3.289062 -5.925781 3.09375 -5.5625 C 2.988281 -5.34375 2.9375 -5.023438 2.9375 -4.609375 L 2.9375 0 L 0.90625 0 L 0.90625 -7.65625 L 2.84375 -7.65625 L 2.84375 -6.53125 C 3.09375 -6.925781 3.328125 -7.210938 3.546875 -7.390625 C 3.941406 -7.691406 4.445312 -7.84375 5.0625 -7.84375 C 5.644531 -7.84375 6.117188 -7.710938 6.484375 -7.453125 C 6.773438 -7.210938 6.992188 -6.90625 7.140625 -6.53125 C 7.410156 -6.976562 7.738281 -7.304688 8.125 -7.515625 C 8.539062 -7.734375 9 -7.84375 9.5 -7.84375 C 9.84375 -7.84375 10.175781 -7.773438 10.5 -7.640625 C 10.832031 -7.503906 11.128906 -7.273438 11.390625 -6.953125 C 11.609375 -6.679688 11.753906 -6.351562 11.828125 -5.96875 C 11.878906 -5.707031 11.90625 -5.328125 11.90625 -4.828125 L 11.890625 0 L 9.828125 0 L 9.828125 -4.875 C 9.828125 -5.164062 9.78125 -5.40625 9.6875 -5.59375 C 9.507812 -5.957031 9.179688 -6.140625 8.703125 -6.140625 C 8.148438 -6.140625 7.769531 -5.90625 7.5625 -5.4375 C 7.457031 -5.195312 7.40625 -4.90625 7.40625 -4.5625 L 7.40625 0 L 5.375 0 L 5.375 -4.5625 C 5.375 -5.019531 5.328125 -5.351562 5.234375 -5.5625 Z M 5.234375 -5.5625 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-2-4&quot;&gt;
&lt;path d=&quot;M 1.21875 -6.84375 C 1.75 -7.507812 2.660156 -7.84375 3.953125 -7.84375 C 4.796875 -7.84375 5.539062 -7.675781 6.1875 -7.34375 C 6.84375 -7.007812 7.171875 -6.382812 7.171875 -5.46875 L 7.171875 -1.953125 C 7.171875 -1.703125 7.175781 -1.40625 7.1875 -1.0625 C 7.195312 -0.800781 7.234375 -0.625 7.296875 -0.53125 C 7.367188 -0.4375 7.46875 -0.359375 7.59375 -0.296875 L 7.59375 0 L 5.421875 0 C 5.359375 -0.15625 5.3125 -0.300781 5.28125 -0.4375 C 5.257812 -0.570312 5.242188 -0.726562 5.234375 -0.90625 C 4.953125 -0.601562 4.632812 -0.347656 4.28125 -0.140625 C 3.84375 0.105469 3.351562 0.234375 2.8125 0.234375 C 2.113281 0.234375 1.539062 0.0351562 1.09375 -0.359375 C 0.644531 -0.753906 0.421875 -1.316406 0.421875 -2.046875 C 0.421875 -2.984375 0.78125 -3.664062 1.5 -4.09375 C 1.90625 -4.320312 2.492188 -4.484375 3.265625 -4.578125 L 3.953125 -4.65625 C 4.316406 -4.707031 4.578125 -4.769531 4.734375 -4.84375 C 5.023438 -4.957031 5.171875 -5.144531 5.171875 -5.40625 C 5.171875 -5.71875 5.0625 -5.929688 4.84375 -6.046875 C 4.625 -6.171875 4.304688 -6.234375 3.890625 -6.234375 C 3.410156 -6.234375 3.070312 -6.117188 2.875 -5.890625 C 2.738281 -5.710938 2.644531 -5.476562 2.59375 -5.1875 L 0.65625 -5.1875 C 0.695312 -5.851562 0.882812 -6.40625 1.21875 -6.84375 Z M 2.71875 -1.453125 C 2.90625 -1.296875 3.132812 -1.21875 3.40625 -1.21875 C 3.832031 -1.21875 4.226562 -1.34375 4.59375 -1.59375 C 4.957031 -1.851562 5.144531 -2.316406 5.15625 -2.984375 L 5.15625 -3.734375 C 5.03125 -3.648438 4.90625 -3.582031 4.78125 -3.53125 C 4.65625 -3.476562 4.476562 -3.429688 4.25 -3.390625 L 3.796875 -3.3125 C 3.378906 -3.238281 3.078125 -3.144531 2.890625 -3.03125 C 2.578125 -2.851562 2.421875 -2.570312 2.421875 -2.1875 C 2.421875 -1.84375 2.519531 -1.597656 2.71875 -1.453125 Z M 2.71875 -1.453125 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-2-5&quot;&gt;
&lt;path d=&quot;M 0.984375 -10.375 L 2.984375 -10.375 L 2.984375 0 L 0.984375 0 Z M 0.984375 -10.375 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-2-6&quot;&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-2-7&quot;&gt;
&lt;path d=&quot;M 7.328125 0.0625 C 6.867188 0.207031 6.3125 0.28125 5.65625 0.28125 C 4.3125 0.28125 3.195312 -0.117188 2.3125 -0.921875 C 1.238281 -1.890625 0.703125 -3.316406 0.703125 -5.203125 C 0.703125 -7.097656 1.253906 -8.53125 2.359375 -9.5 C 3.253906 -10.289062 4.367188 -10.6875 5.703125 -10.6875 C 7.035156 -10.6875 8.160156 -10.265625 9.078125 -9.421875 C 10.128906 -8.453125 10.65625 -7.097656 10.65625 -5.359375 C 10.65625 -4.429688 10.539062 -3.65625 10.3125 -3.03125 C 10.125 -2.4375 9.851562 -1.941406 9.5 -1.546875 L 10.703125 -0.421875 L 9.5625 0.75 L 8.3125 -0.421875 C 7.9375 -0.191406 7.609375 -0.0273438 7.328125 0.0625 Z M 6.859375 -1.8125 L 5.8125 -2.8125 L 6.9375 -3.984375 L 7.984375 -2.984375 C 8.148438 -3.316406 8.265625 -3.613281 8.328125 -3.875 C 8.429688 -4.25 8.484375 -4.691406 8.484375 -5.203125 C 8.484375 -6.359375 8.242188 -7.253906 7.765625 -7.890625 C 7.296875 -8.523438 6.601562 -8.84375 5.6875 -8.84375 C 4.820312 -8.84375 4.132812 -8.535156 3.625 -7.921875 C 3.113281 -7.316406 2.859375 -6.410156 2.859375 -5.203125 C 2.859375 -3.773438 3.222656 -2.753906 3.953125 -2.140625 C 4.429688 -1.742188 5 -1.546875 5.65625 -1.546875 C 5.90625 -1.546875 6.144531 -1.578125 6.375 -1.640625 C 6.5 -1.671875 6.660156 -1.726562 6.859375 -1.8125 Z M 6.859375 -1.8125 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-2-8&quot;&gt;
&lt;path d=&quot;M 0.328125 -4.96875 L 4.375 -4.96875 L 4.375 -3.0625 L 0.328125 -3.0625 Z M 0.328125 -4.96875 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-2-9&quot;&gt;
&lt;path d=&quot;M 5.5 -3.734375 L 3.296875 -3.734375 L 3.296875 0 L 1.140625 0 L 1.140625 -10.375 L 5.65625 -10.375 C 6.695312 -10.375 7.523438 -10.101562 8.140625 -9.5625 C 8.765625 -9.03125 9.078125 -8.203125 9.078125 -7.078125 C 9.078125 -5.859375 8.765625 -4.992188 8.140625 -4.484375 C 7.523438 -3.984375 6.644531 -3.734375 5.5 -3.734375 Z M 6.515625 -5.890625 C 6.796875 -6.140625 6.9375 -6.53125 6.9375 -7.0625 C 6.9375 -7.601562 6.789062 -7.988281 6.5 -8.21875 C 6.21875 -8.445312 5.820312 -8.5625 5.3125 -8.5625 L 3.296875 -8.5625 L 3.296875 -5.515625 L 5.3125 -5.515625 C 5.820312 -5.515625 6.222656 -5.640625 6.515625 -5.890625 Z M 6.515625 -5.890625 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-2-10&quot;&gt;
&lt;path d=&quot;M 4.453125 -1.421875 L 4.453125 0.078125 L 3.5 0.109375 C 2.550781 0.140625 1.898438 -0.0234375 1.546875 -0.390625 C 1.328125 -0.617188 1.21875 -0.972656 1.21875 -1.453125 L 1.21875 -6.171875 L 0.140625 -6.171875 L 0.140625 -7.59375 L 1.21875 -7.59375 L 1.21875 -9.734375 L 3.203125 -9.734375 L 3.203125 -7.59375 L 4.453125 -7.59375 L 4.453125 -6.171875 L 3.203125 -6.171875 L 3.203125 -2.125 C 3.203125 -1.800781 3.238281 -1.597656 3.3125 -1.515625 C 3.394531 -1.441406 3.640625 -1.40625 4.046875 -1.40625 C 4.109375 -1.40625 4.171875 -1.40625 4.234375 -1.40625 C 4.304688 -1.414062 4.378906 -1.421875 4.453125 -1.421875 Z M 4.453125 -1.421875 &quot;/&gt;
&lt;/g&gt;
&lt;/g&gt;
&lt;clipPath id=&quot;clip-0&quot;&gt;
&lt;path clip-rule=&quot;nonzero&quot; d=&quot;M 59.039062 59.039062 L 473.757812 59.039062 L 473.757812 430.558594 L 59.039062 430.558594 Z M 59.039062 59.039062 &quot;/&gt;
&lt;/clipPath&gt;
&lt;/defs&gt;
&lt;rect x=&quot;-50.4&quot; y=&quot;-50.4&quot; width=&quot;604.8&quot; height=&quot;604.8&quot; fill=&quot;rgb(100%, 100%, 100%)&quot; fill-opacity=&quot;1&quot;/&gt;
&lt;path fill=&quot;none&quot; stroke-width=&quot;0.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; stroke=&quot;rgb(0%, 0%, 0%)&quot; stroke-opacity=&quot;1&quot; stroke-miterlimit=&quot;10&quot; d=&quot;M 262.957031 258.03125 C 262.957031 261.628906 257.558594 261.628906 257.558594 258.03125 C 257.558594 254.429688 262.957031 254.429688 262.957031 258.03125 &quot;/&gt;
&lt;path fill=&quot;none&quot; stroke-width=&quot;0.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; stroke=&quot;rgb(0%, 0%, 0%)&quot; stroke-opacity=&quot;1&quot; stroke-miterlimit=&quot;10&quot; d=&quot;M 177.546875 337.414062 C 177.546875 341.015625 172.148438 341.015625 172.148438 337.414062 C 172.148438 333.816406 177.546875 333.816406 177.546875 337.414062 &quot;/&gt;
&lt;path fill=&quot;none&quot; stroke-width=&quot;0.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; stroke=&quot;rgb(0%, 0%, 0%)&quot; stroke-opacity=&quot;1&quot; stroke-miterlimit=&quot;10&quot; d=&quot;M 327.65625 205.109375 C 327.65625 208.707031 322.257812 208.707031 322.257812 205.109375 C 322.257812 201.507812 327.65625 201.507812 327.65625 205.109375 &quot;/&gt;
&lt;path fill=&quot;none&quot; stroke-width=&quot;0.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; stroke=&quot;rgb(0%, 0%, 0%)&quot; stroke-opacity=&quot;1&quot; stroke-miterlimit=&quot;10&quot; d=&quot;M 250.574219 260.675781 C 250.574219 264.277344 245.171875 264.277344 245.171875 260.675781 C 245.171875 257.078125 250.574219 257.078125 250.574219 260.675781 &quot;/&gt;
&lt;path fill=&quot;none&quot; stroke-width=&quot;0.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; stroke=&quot;rgb(0%, 0%, 0%)&quot; stroke-opacity=&quot;1&quot; stroke-miterlimit=&quot;10&quot; d=&quot;M 195.097656 337.414062 C 195.097656 341.015625 189.699219 341.015625 189.699219 337.414062 C 189.699219 333.816406 195.097656 333.816406 195.097656 337.414062 &quot;/&gt;
&lt;path fill=&quot;none&quot; stroke-width=&quot;0.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; stroke=&quot;rgb(0%, 0%, 0%)&quot; stroke-opacity=&quot;1&quot; stroke-miterlimit=&quot;10&quot; d=&quot;M 210.542969 337.414062 C 210.542969 341.015625 205.144531 341.015625 205.144531 337.414062 C 205.144531 333.816406 210.542969 333.816406 210.542969 337.414062 &quot;/&gt;
&lt;path fill=&quot;none&quot; stroke-width=&quot;0.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; stroke=&quot;rgb(0%, 0%, 0%)&quot; stroke-opacity=&quot;1&quot; stroke-miterlimit=&quot;10&quot; d=&quot;M 300.3125 244.800781 C 300.3125 248.398438 294.914062 248.398438 294.914062 244.800781 C 294.914062 241.199219 300.3125 241.199219 300.3125 244.800781 &quot;/&gt;
&lt;path fill=&quot;none&quot; stroke-width=&quot;0.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; stroke=&quot;rgb(0%, 0%, 0%)&quot; stroke-opacity=&quot;1&quot; stroke-miterlimit=&quot;10&quot; d=&quot;M 275.242188 258.03125 C 275.242188 261.628906 269.84375 261.628906 269.84375 258.03125 C 269.84375 254.429688 275.242188 254.429688 275.242188 258.03125 &quot;/&gt;
&lt;path fill=&quot;none&quot; stroke-width=&quot;0.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; stroke=&quot;rgb(0%, 0%, 0%)&quot; stroke-opacity=&quot;1&quot; stroke-miterlimit=&quot;10&quot; d=&quot;M 360.652344 152.183594 C 360.652344 155.785156 355.253906 155.785156 355.253906 152.183594 C 355.253906 148.585938 360.652344 148.585938 360.652344 152.183594 &quot;/&gt;
&lt;path fill=&quot;none&quot; stroke-width=&quot;0.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; stroke=&quot;rgb(0%, 0%, 0%)&quot; stroke-opacity=&quot;1&quot; stroke-miterlimit=&quot;10&quot; d=&quot;M 128.082031 363.875 C 128.082031 367.476562 122.683594 367.476562 122.683594 363.875 C 122.683594 360.277344 128.082031 360.277344 128.082031 363.875 &quot;/&gt;
&lt;path fill=&quot;none&quot; stroke-width=&quot;0.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; stroke=&quot;rgb(0%, 0%, 0%)&quot; stroke-opacity=&quot;1&quot; stroke-miterlimit=&quot;10&quot; d=&quot;M 224.648438 337.414062 C 224.648438 341.015625 219.25 341.015625 219.25 337.414062 C 219.25 333.816406 224.648438 333.816406 224.648438 337.414062 &quot;/&gt;
&lt;path fill=&quot;none&quot; stroke-width=&quot;0.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; stroke=&quot;rgb(0%, 0%, 0%)&quot; stroke-opacity=&quot;1&quot; stroke-miterlimit=&quot;10&quot; d=&quot;M 287.625 258.03125 C 287.625 261.628906 282.226562 261.628906 282.226562 258.03125 C 282.226562 254.429688 287.625 254.429688 287.625 258.03125 &quot;/&gt;
&lt;path fill=&quot;none&quot; stroke-width=&quot;0.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; stroke=&quot;rgb(0%, 0%, 0%)&quot; stroke-opacity=&quot;1&quot; stroke-miterlimit=&quot;10&quot; d=&quot;M 156.410156 361.230469 C 156.410156 364.832031 151.011719 364.832031 151.011719 361.230469 C 151.011719 357.628906 156.410156 357.628906 156.410156 361.230469 &quot;/&gt;
&lt;path fill=&quot;none&quot; stroke-width=&quot;0.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; stroke=&quot;rgb(0%, 0%, 0%)&quot; stroke-opacity=&quot;1&quot; stroke-miterlimit=&quot;10&quot; d=&quot;M 313.550781 242.152344 C 313.550781 245.753906 308.152344 245.753906 308.152344 242.152344 C 308.152344 238.554688 313.550781 238.554688 313.550781 242.152344 &quot;/&gt;
&lt;path fill=&quot;none&quot; stroke-width=&quot;0.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; stroke=&quot;rgb(0%, 0%, 0%)&quot; stroke-opacity=&quot;1&quot; stroke-miterlimit=&quot;10&quot; d=&quot;M 410.117188 75.445312 C 410.117188 79.046875 404.71875 79.046875 404.71875 75.445312 C 404.71875 71.847656 410.117188 71.847656 410.117188 75.445312 &quot;/&gt;
&lt;path fill=&quot;none&quot; stroke-width=&quot;0.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; stroke=&quot;rgb(0%, 0%, 0%)&quot; stroke-opacity=&quot;1&quot; stroke-miterlimit=&quot;10&quot; d=&quot;M 237.886719 310.953125 C 237.886719 314.554688 232.484375 314.554688 232.484375 310.953125 C 232.484375 307.355469 237.886719 307.355469 237.886719 310.953125 &quot;/&gt;
&lt;path fill=&quot;none&quot; stroke-width=&quot;0.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; stroke=&quot;rgb(0%, 0%, 0%)&quot; stroke-opacity=&quot;1&quot; stroke-miterlimit=&quot;10&quot; d=&quot;M 77.101562 416.800781 C 77.101562 420.398438 71.699219 420.398438 71.699219 416.800781 C 71.699219 413.199219 77.101562 413.199219 77.101562 416.800781 &quot;/&gt;
&lt;path fill=&quot;none&quot; stroke-width=&quot;0.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; stroke=&quot;rgb(0%, 0%, 0%)&quot; stroke-opacity=&quot;1&quot; stroke-miterlimit=&quot;10&quot; d=&quot;M 343.101562 178.644531 C 343.101562 182.246094 337.703125 182.246094 337.703125 178.644531 C 337.703125 175.046875 343.101562 175.046875 343.101562 178.644531 &quot;/&gt;
&lt;path fill=&quot;none&quot; stroke-width=&quot;0.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; stroke=&quot;rgb(0%, 0%, 0%)&quot; stroke-opacity=&quot;1&quot; stroke-miterlimit=&quot;10&quot; d=&quot;M 461.101562 72.800781 C 461.101562 76.398438 455.699219 76.398438 455.699219 72.800781 C 455.699219 69.199219 461.101562 69.199219 461.101562 72.800781 &quot;/&gt;
&lt;path fill=&quot;none&quot; stroke-width=&quot;0.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; stroke=&quot;rgb(0%, 0%, 0%)&quot; stroke-opacity=&quot;1&quot; stroke-miterlimit=&quot;10&quot; d=&quot;M 381.789062 152.183594 C 381.789062 155.785156 376.390625 155.785156 376.390625 152.183594 C 376.390625 148.585938 381.789062 148.585938 381.789062 152.183594 &quot;/&gt;
&lt;path fill=&quot;none&quot; stroke-width=&quot;0.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; stroke=&quot;rgb(0%, 0%, 0%)&quot; stroke-opacity=&quot;1&quot; stroke-miterlimit=&quot;10&quot; d=&quot;M 70.476562 430.558594 L 462.320312 430.558594 &quot;/&gt;
&lt;path fill=&quot;none&quot; stroke-width=&quot;0.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; stroke=&quot;rgb(0%, 0%, 0%)&quot; stroke-opacity=&quot;1&quot; stroke-miterlimit=&quot;10&quot; d=&quot;M 70.476562 430.558594 L 70.476562 437.761719 &quot;/&gt;
&lt;path fill=&quot;none&quot; stroke-width=&quot;0.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; stroke=&quot;rgb(0%, 0%, 0%)&quot; stroke-opacity=&quot;1&quot; stroke-miterlimit=&quot;10&quot; d=&quot;M 168.4375 430.558594 L 168.4375 437.761719 &quot;/&gt;
&lt;path fill=&quot;none&quot; stroke-width=&quot;0.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; stroke=&quot;rgb(0%, 0%, 0%)&quot; stroke-opacity=&quot;1&quot; stroke-miterlimit=&quot;10&quot; d=&quot;M 266.398438 430.558594 L 266.398438 437.761719 &quot;/&gt;
&lt;path fill=&quot;none&quot; stroke-width=&quot;0.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; stroke=&quot;rgb(0%, 0%, 0%)&quot; stroke-opacity=&quot;1&quot; stroke-miterlimit=&quot;10&quot; d=&quot;M 364.359375 430.558594 L 364.359375 437.761719 &quot;/&gt;
&lt;path fill=&quot;none&quot; stroke-width=&quot;0.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; stroke=&quot;rgb(0%, 0%, 0%)&quot; stroke-opacity=&quot;1&quot; stroke-miterlimit=&quot;10&quot; d=&quot;M 462.320312 430.558594 L 462.320312 437.761719 &quot;/&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-0-0&quot; x=&quot;65.140625&quot; y=&quot;456.480469&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-1&quot; x=&quot;69.136719&quot; y=&quot;456.480469&quot;/&gt;
&lt;/g&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-0-0&quot; x=&quot;163.101562&quot; y=&quot;456.480469&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-2&quot; x=&quot;167.097656&quot; y=&quot;456.480469&quot;/&gt;
&lt;/g&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-0-3&quot; x=&quot;263.0625&quot; y=&quot;456.480469&quot;/&gt;
&lt;/g&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-0-2&quot; x=&quot;361.023438&quot; y=&quot;456.480469&quot;/&gt;
&lt;/g&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-0-1&quot; x=&quot;458.984375&quot; y=&quot;456.480469&quot;/&gt;
&lt;/g&gt;
&lt;path fill=&quot;none&quot; stroke-width=&quot;0.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; stroke=&quot;rgb(0%, 0%, 0%)&quot; stroke-opacity=&quot;1&quot; stroke-miterlimit=&quot;10&quot; d=&quot;M 59.039062 390.339844 L 59.039062 72.800781 &quot;/&gt;
&lt;path fill=&quot;none&quot; stroke-width=&quot;0.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; stroke=&quot;rgb(0%, 0%, 0%)&quot; stroke-opacity=&quot;1&quot; stroke-miterlimit=&quot;10&quot; d=&quot;M 59.039062 390.339844 L 51.839844 390.339844 &quot;/&gt;
&lt;path fill=&quot;none&quot; stroke-width=&quot;0.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; stroke=&quot;rgb(0%, 0%, 0%)&quot; stroke-opacity=&quot;1&quot; stroke-miterlimit=&quot;10&quot; d=&quot;M 59.039062 337.414062 L 51.839844 337.414062 &quot;/&gt;
&lt;path fill=&quot;none&quot; stroke-width=&quot;0.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; stroke=&quot;rgb(0%, 0%, 0%)&quot; stroke-opacity=&quot;1&quot; stroke-miterlimit=&quot;10&quot; d=&quot;M 59.039062 284.492188 L 51.839844 284.492188 &quot;/&gt;
&lt;path fill=&quot;none&quot; stroke-width=&quot;0.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; stroke=&quot;rgb(0%, 0%, 0%)&quot; stroke-opacity=&quot;1&quot; stroke-miterlimit=&quot;10&quot; d=&quot;M 59.039062 231.570312 L 51.839844 231.570312 &quot;/&gt;
&lt;path fill=&quot;none&quot; stroke-width=&quot;0.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; stroke=&quot;rgb(0%, 0%, 0%)&quot; stroke-opacity=&quot;1&quot; stroke-miterlimit=&quot;10&quot; d=&quot;M 59.039062 178.644531 L 51.839844 178.644531 &quot;/&gt;
&lt;path fill=&quot;none&quot; stroke-width=&quot;0.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; stroke=&quot;rgb(0%, 0%, 0%)&quot; stroke-opacity=&quot;1&quot; stroke-miterlimit=&quot;10&quot; d=&quot;M 59.039062 125.722656 L 51.839844 125.722656 &quot;/&gt;
&lt;path fill=&quot;none&quot; stroke-width=&quot;0.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; stroke=&quot;rgb(0%, 0%, 0%)&quot; stroke-opacity=&quot;1&quot; stroke-miterlimit=&quot;10&quot; d=&quot;M 59.039062 72.800781 L 51.839844 72.800781 &quot;/&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-1-0&quot; x=&quot;41.761719&quot; y=&quot;400.351562&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-1-1&quot; x=&quot;41.761719&quot; y=&quot;393.677734&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-1-1&quot; x=&quot;41.761719&quot; y=&quot;387.003906&quot;/&gt;
&lt;/g&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-1-0&quot; x=&quot;41.761719&quot; y=&quot;347.425781&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-1-2&quot; x=&quot;41.761719&quot; y=&quot;340.751953&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-1-1&quot; x=&quot;41.761719&quot; y=&quot;334.078125&quot;/&gt;
&lt;/g&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-1-0&quot; x=&quot;41.761719&quot; y=&quot;294.503906&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-1-3&quot; x=&quot;41.761719&quot; y=&quot;287.830078&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-1-1&quot; x=&quot;41.761719&quot; y=&quot;281.15625&quot;/&gt;
&lt;/g&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-1-0&quot; x=&quot;41.761719&quot; y=&quot;241.582031&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-1-4&quot; x=&quot;41.761719&quot; y=&quot;234.908203&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-1-1&quot; x=&quot;41.761719&quot; y=&quot;228.234375&quot;/&gt;
&lt;/g&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-1-0&quot; x=&quot;41.761719&quot; y=&quot;188.65625&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-1-5&quot; x=&quot;41.761719&quot; y=&quot;181.982422&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-1-1&quot; x=&quot;41.761719&quot; y=&quot;175.308594&quot;/&gt;
&lt;/g&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-1-6&quot; x=&quot;41.761719&quot; y=&quot;139.070312&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-1-1&quot; x=&quot;41.761719&quot; y=&quot;132.396484&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-1-1&quot; x=&quot;41.761719&quot; y=&quot;125.722656&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-1-1&quot; x=&quot;41.761719&quot; y=&quot;119.048828&quot;/&gt;
&lt;/g&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-1-6&quot; x=&quot;41.761719&quot; y=&quot;86.148438&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-1-1&quot; x=&quot;41.761719&quot; y=&quot;79.474609&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-1-2&quot; x=&quot;41.761719&quot; y=&quot;72.800781&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-1-1&quot; x=&quot;41.761719&quot; y=&quot;66.126953&quot;/&gt;
&lt;/g&gt;
&lt;path fill=&quot;none&quot; stroke-width=&quot;0.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; stroke=&quot;rgb(0%, 0%, 0%)&quot; stroke-opacity=&quot;1&quot; stroke-miterlimit=&quot;10&quot; d=&quot;M 59.039062 430.558594 L 473.761719 430.558594 L 473.761719 59.039062 L 59.039062 59.039062 Z M 59.039062 430.558594 &quot;/&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-2-0&quot; x=&quot;210.394531&quot; y=&quot;34.703125&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-2-1&quot; x=&quot;220.79375&quot; y=&quot;34.703125&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-2-2&quot; x=&quot;229.589844&quot; y=&quot;34.703125&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-2-3&quot; x=&quot;235.19375&quot; y=&quot;34.703125&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-2-4&quot; x=&quot;247.997656&quot; y=&quot;34.703125&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-2-5&quot; x=&quot;256.00625&quot; y=&quot;34.703125&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-2-6&quot; x=&quot;260.007031&quot; y=&quot;34.703125&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-2-7&quot; x=&quot;264.007812&quot; y=&quot;34.703125&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-2-8&quot; x=&quot;275.208594&quot; y=&quot;34.703125&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-2-7&quot; x=&quot;280.003906&quot; y=&quot;34.703125&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-2-6&quot; x=&quot;291.204687&quot; y=&quot;34.703125&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-2-9&quot; x=&quot;295.205469&quot; y=&quot;34.703125&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-2-5&quot; x=&quot;304.810156&quot; y=&quot;34.703125&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-2-1&quot; x=&quot;308.810937&quot; y=&quot;34.703125&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-2-10&quot; x=&quot;317.607031&quot; y=&quot;34.703125&quot;/&gt;
&lt;/g&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-0-4&quot; x=&quot;209.703125&quot; y=&quot;485.28125&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-5&quot; x=&quot;217.033203&quot; y=&quot;485.28125&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-6&quot; x=&quot;223.707031&quot; y=&quot;485.28125&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-7&quot; x=&quot;230.380859&quot; y=&quot;485.28125&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-8&quot; x=&quot;237.054688&quot; y=&quot;485.28125&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-6&quot; x=&quot;241.050781&quot; y=&quot;485.28125&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-9&quot; x=&quot;247.724609&quot; y=&quot;485.28125&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-10&quot; x=&quot;251.058594&quot; y=&quot;485.28125&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-11&quot; x=&quot;253.724609&quot; y=&quot;485.28125&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-12&quot; x=&quot;259.724609&quot; y=&quot;485.28125&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-13&quot; x=&quot;266.398438&quot; y=&quot;485.28125&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-14&quot; x=&quot;269.064453&quot; y=&quot;485.28125&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-15&quot; x=&quot;272.398438&quot; y=&quot;485.28125&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-16&quot; x=&quot;281.732422&quot; y=&quot;485.28125&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-12&quot; x=&quot;288.40625&quot; y=&quot;485.28125&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-17&quot; x=&quot;295.080078&quot; y=&quot;485.28125&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-9&quot; x=&quot;301.753906&quot; y=&quot;485.28125&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-10&quot; x=&quot;305.087891&quot; y=&quot;485.28125&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-13&quot; x=&quot;307.753906&quot; y=&quot;485.28125&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-6&quot; x=&quot;310.419922&quot; y=&quot;485.28125&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-18&quot; x=&quot;317.09375&quot; y=&quot;485.28125&quot;/&gt;
&lt;/g&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-1-7&quot; x=&quot;12.960938&quot; y=&quot;292.160156&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-1-8&quot; x=&quot;12.960938&quot; y=&quot;284.15625&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-1-9&quot; x=&quot;12.960938&quot; y=&quot;277.482422&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-1-10&quot; x=&quot;12.960938&quot; y=&quot;267.486328&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-1-11&quot; x=&quot;12.960938&quot; y=&quot;260.8125&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-1-12&quot; x=&quot;12.960938&quot; y=&quot;258.146484&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-1-13&quot; x=&quot;12.960938&quot; y=&quot;251.472656&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-1-14&quot; x=&quot;12.960938&quot; y=&quot;248.138672&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-1-15&quot; x=&quot;12.960938&quot; y=&quot;238.804688&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-1-8&quot; x=&quot;12.960938&quot; y=&quot;232.130859&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-1-16&quot; x=&quot;12.960938&quot; y=&quot;225.457031&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-1-17&quot; x=&quot;12.960938&quot; y=&quot;218.783203&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-1-18&quot; x=&quot;12.960938&quot; y=&quot;215.449219&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-1-11&quot; x=&quot;12.960938&quot; y=&quot;212.783203&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-1-12&quot; x=&quot;12.960938&quot; y=&quot;210.117188&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-1-19&quot; x=&quot;12.960938&quot; y=&quot;203.443359&quot;/&gt;
&lt;/g&gt;
&lt;g clip-path=&quot;url(#clip-0)&quot;&gt;
&lt;path fill=&quot;none&quot; stroke-width=&quot;0.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; stroke=&quot;rgb(100%, 0%, 0%)&quot; stroke-opacity=&quot;1&quot; stroke-miterlimit=&quot;10&quot; d=&quot;M 59.039062 485.945312 L 473.761719 49.960938 &quot;/&gt;
&lt;/g&gt;
&lt;/svg&gt;
&lt;/div&gt;
&lt;/p&gt;
&lt;/div&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-R&quot;&gt;&lt;span style=&quot;color: #110099;&quot;&gt;library&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;BSDA&quot;&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
data &lt;span style=&quot;color: #110099;&quot;&gt;&amp;lt;-&lt;/span&gt; c&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;950, 920, 970, 949, 920, 920, 955, 950, 990, 910, 920,
          950, 911, 956, 1019, 930, 890, 980, 1020, 990&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
z.test&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;x = data,
       alternative = &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;less&quot;&lt;/span&gt;,
       mu = 1000, sigma.x = 100,
       conf.level = 0.95&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;pre class=&quot;example&quot; id=&quot;orgbfff201&quot;&gt;

	One-sample z-Test

data:  data
z = -2.2361, p-value = 0.01267
alternative hypothesis: true mean is less than 1000
95 percent confidence interval:
     NA 986.78
sample estimates:
mean of x 
      950 

&lt;/pre&gt;

&lt;p&gt;
p-value 小于0.05,所以，我们在显著性水平\(\alpha = 0.05 \)下，拒绝
\(H_0\), 即认为这批产品不合格。
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>假设检验 Hypothesis Testing</title>
   <link href="http://kimi.im/2024-06-07-hypotheis-testing"/>
   <updated>2024-06-07T00:00:00+00:00</updated>
   <id>http://kimi.im/hypotheis-testing</id>
   <content type="html">&lt;p&gt;
假设检验（Hypothesis Testing）是统计推断的一类重要问题。
&lt;/p&gt;

&lt;p&gt;
在总体的分布函数完全未知或只知其形式，但不知其参数的情况下，为了推断总体的某些未知特性，提出关于总体的假设。然后，根据少量样本的观测情况，对所提出的假设作出是接受，还是拒绝的决策。
&lt;/p&gt;

&lt;p&gt;
比如，我们可以提出总体服从泊松分布的假设，然后根据实际样本接受这个假设，或推翻拒绝这个假设。
&lt;/p&gt;

&lt;p&gt;
比如，我们也可以对正态分布的总体提出数学期望等于\(\mu_0\)的假设，然后根据实际样本，接受或拒绝这个假设。在统计推断时，我们会提出两个相互对立的假设，分别是原假设/零假设（Null Hypothesis）和备择假设（Alternative
Hypothesis）。备择假设意味着，在原假设被拒绝后可供选择的假设。
&lt;/p&gt;

&lt;p&gt;
以包装机包装为例，每袋包装的重量是个随机变量，它服从正态分布。当机器正常时，均值为0.5公斤，标准差为0.015公斤。某日开工后，为了检验包装机是否工作正常，随机抽取它所包装的产品 9 袋，称得重量为：
&lt;/p&gt;

&lt;table border=&quot;2&quot; cellspacing=&quot;0&quot; cellpadding=&quot;6&quot; rules=&quot;groups&quot; frame=&quot;hsides&quot;&gt;


&lt;colgroup&gt;
&lt;col  class=&quot;org-right&quot; /&gt;

&lt;col  class=&quot;org-right&quot; /&gt;

&lt;col  class=&quot;org-right&quot; /&gt;

&lt;col  class=&quot;org-right&quot; /&gt;

&lt;col  class=&quot;org-right&quot; /&gt;

&lt;col  class=&quot;org-right&quot; /&gt;

&lt;col  class=&quot;org-right&quot; /&gt;

&lt;col  class=&quot;org-right&quot; /&gt;

&lt;col  class=&quot;org-right&quot; /&gt;
&lt;/colgroup&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class=&quot;org-right&quot;&gt;0.497&lt;/td&gt;
&lt;td class=&quot;org-right&quot;&gt;0.506&lt;/td&gt;
&lt;td class=&quot;org-right&quot;&gt;0.518&lt;/td&gt;
&lt;td class=&quot;org-right&quot;&gt;0.524&lt;/td&gt;
&lt;td class=&quot;org-right&quot;&gt;0.498&lt;/td&gt;
&lt;td class=&quot;org-right&quot;&gt;0.511&lt;/td&gt;
&lt;td class=&quot;org-right&quot;&gt;0.520&lt;/td&gt;
&lt;td class=&quot;org-right&quot;&gt;0.515&lt;/td&gt;
&lt;td class=&quot;org-right&quot;&gt;0.512&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;
请问这一天机器是否正常工作？
&lt;/p&gt;

&lt;p&gt;
以\(\mu\)和 \(\sigma\) 分别表示这一天产品包装重量的总体\(X\)的均值（ mean ）和标准差（standard deviation）。一般标准差比较稳定，所以可以假设
\(\sigma = 0.015\) 。于是\(X \sim N(\mu, 0.015^2)\)。这里\(\mu\)未知，问题是根据样本判断\(\mu = 0.5\)还是\(\mu \neq 0.5\)。
&lt;/p&gt;

&lt;p&gt;
于是，我们可以提出两个相互对立的假设：
&lt;/p&gt;

&lt;p&gt;
\[H_0: \mu = \mu_0 = 0.5\]
&lt;/p&gt;

&lt;p&gt;
\[H_1: \mu \neq \mu_0\]
&lt;/p&gt;

&lt;p&gt;
因为\(\bar{X}\)是 \(\mu\) 的无偏估计，\(\bar{X}\)的观察值
\(\bar{x}\) 的大小在一定程度上反映\(\mu\)的大小。无偏估计（unbiased
estimation）是用统计样本量来估计总体参数的一种无偏推断。估计量的数学期望等于被估计参数的真实值，则称此估计量为被估计参数的无偏估计。
&lt;/p&gt;

&lt;p&gt;
如果假设\(H_0\)为真，则观察值\(\bar{x}\)与 \(\mu_0\) 的偏差
\(|\bar{x} - \mu_0|\) 一般不应太大。若\(|\bar{x} - \mu_0|\)过分大，我们就可以怀疑假设\(H_0\)的正确性，而拒绝\(H_0\)。
&lt;/p&gt;

&lt;p&gt;
考虑到\(H_0\)为真时，\(\bar{X} \sim N(\mu_0, \sigma)\) ，于是
\(\frac{\bar{X} - \mu_0}{\sigma / \sqrt{n}} \sim N(0, 1)\)。而衡量
\(|\bar{x} - \mu_0|\) 的大小，就可归结为衡量 \(\frac{|\bar{x} -
\mu_0|}{\sigma / \sqrt{n}}\) 的大小。
&lt;/p&gt;

&lt;p&gt;
这样，我们就可以选定一个较小的正数 \(k\)，使得，当观察值 \(\bar{x}\)
满足\(\frac{|\bar{x} - \mu_0|}{\sigma / \sqrt{n}} \geq k\)时，就拒绝假设 \(H_0\)，反之，若 \(\frac{|\bar{x} - \mu_0|}{\sigma / \sqrt{n}} &lt;
k\) ，就接受假设 \(H_0\)。
&lt;/p&gt;

&lt;p&gt;
然而，对于不同的样本，相同的\(k\)取值，也会得到不同的拒绝\(H_0\)的概率。这样就没有参考意义。所以，需要控制当\(H_0\)为真时，拒绝
\(H_0\) 的概率的大小。假设一个值\(\alpha (0 &lt; \alpha &lt; 1)\)，使得犯这种错的概率在可接受范围内。
&lt;/p&gt;

&lt;p&gt;
\[ P\{\text{当} H_0 \text{为真时，拒绝} H_0\} \leq \alpha \]
&lt;/p&gt;

&lt;p&gt;
因为\(P\)的最大取值为 \(\alpha\)，所以得到：
&lt;/p&gt;

&lt;p&gt;
\[ P\{\text{当} H_0 \text{为真时，拒绝} H_0\}
= P_{\mu_0} \{ \frac{|\bar{x} - \mu_0|}{\sigma / \sqrt{n}} \geq k \}
= \alpha
\]
&lt;/p&gt;

&lt;p&gt;
由于当\(H_0\)为真时，\(Z = \frac{\bar{X} - \mu_0}{\sigma / \sqrt{n}}
\sim N(0, 1)\)。得出，使 \(P_{\mu_0} \{ \frac{|\bar{x} -
\mu_0|}{\sigma / \sqrt{n}} \geq k \} = \alpha\) 成立的\(k\)值为
\(z_{\alpha/2}\) 。
&lt;/p&gt;

&lt;p&gt;
因此，若\(Z\)观察值满足 \[|z| = \frac{|\bar{x} -
\mu_0|}{\sigma / \sqrt{n}} \geq k  = z_{\alpha/2}\] ，则拒绝 \(H_0\)。
&lt;/p&gt;

&lt;p&gt;
而 \[|z| = \frac{|\bar{x} - \mu_0|}{\sigma / \sqrt{n}} &lt; k =
z_{\alpha/2}\] ，则接受\(H_0\)。
&lt;/p&gt;

&lt;p&gt;
回到本例子，\(\alpha = 0.05\) ，则有 \(k=z_{0.05/2} = z_{0.025} =
1.96\)，又已知\(n = 9, \mu_0 = 0.5, \sigma = 0.015, \bar{x} = 0.511\)即有：
&lt;/p&gt;

&lt;p&gt;
\[|\frac{\bar{x}-\mu_0}{\sigma /\sqrt{n}}| 
= |\frac{0.511 - 0.5}{0.015/\sqrt{9}}| 
= |\frac{0.011}{0.005}|
= 2.2 &gt; 1.96
\]
&lt;/p&gt;

&lt;p&gt;
于是，拒绝 \(H_0\)。所以可以认为这一天包装机器工作不正常。
&lt;/p&gt;

&lt;p&gt;
在 \[|z| = \frac{|\bar{x} - \mu_0|}{\sigma / \sqrt{n}} &lt; k =
z_{\alpha/2}\] 中，我们称数\(\alpha\)为 &lt;b&gt;显著性水平（significance
level）&lt;/b&gt; 。关于\(\bar{x}\)与 \(\mu_0\) 有无显著性差异的判断是在显著性水平\(\alpha\)下作出的。
&lt;/p&gt;

&lt;p&gt;
于是，假设验证问题可以这样表述：在显著性水平\(\alpha\)下，检验假设
&lt;/p&gt;

&lt;p&gt;
\[H_0 : \mu = \mu_0, ~~ H_1 : \mu \neq \mu_0\]
&lt;/p&gt;

&lt;p&gt;
If our data produce values that meet or exceed the significance level
\(\alpha\), then we have sufficient evidence to reject the null
hypothesis \(H_0\); if not, we fail to reject the null.
&lt;/p&gt;

&lt;p&gt;
拒绝原假设\(H_0\)的区域成为 &lt;b&gt;拒绝域（rejection region/critical
region）&lt;/b&gt; ，拒绝域的边界点称为&lt;b&gt;临界点（ threshold ）&lt;/b&gt;。备择条件\(H_1：
\mu \neq \mu_0\) ，\(\mu\)可能大于\(\mu_0\)也可能小于\(\mu_0\)。所以称为&lt;b&gt;双边备择假设&lt;/b&gt;。而这样的假设验证称为&lt;b&gt;双边假设验证&lt;/b&gt;。
&lt;/p&gt;

&lt;p&gt;
接下来，我们用 R 的 &lt;code&gt;z.test&lt;/code&gt; 函数来进行假设验证测试。
&lt;/p&gt;

&lt;p&gt;
首先，我们用直方图看看样本观察值：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-R&quot;&gt;&lt;span style=&quot;color: #110099;&quot;&gt;library&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;rcompanion&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
data &lt;span style=&quot;color: #110099;&quot;&gt;&amp;lt;-&lt;/span&gt; c&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;0.497, 0.506, 0.518, 0.524, 0.498, 0.511, 0.520, 0.515, 0.512&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
plotNormalHistogram&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;data&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;


&lt;div id=&quot;org309209c&quot; class=&quot;figure&quot;&gt;
&lt;p&gt;&lt;div align=&quot;center&quot;&gt;&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; xmlns:xlink=&quot;http://www.w3.org/1999/xlink&quot;  viewBox=&quot;0 0 504 504&quot;&gt;
&lt;defs&gt;
&lt;g&gt;
&lt;g id=&quot;glyph-0-0&quot;&gt;
&lt;path d=&quot;M 0.171875 -6.28125 L 1.546875 -6.28125 L 2.984375 -4.0625 L 4.4375 -6.28125 L 5.71875 -6.25 L 3.609375 -3.21875 L 5.8125 0 L 4.46875 0 L 2.90625 -2.359375 L 1.40625 0 L 0.0625 0 L 2.28125 -3.21875 Z M 0.171875 -6.28125 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-0-1&quot;&gt;
&lt;path d=&quot;M 3.25 -8.390625 C 4.332031 -8.390625 5.117188 -7.941406 5.609375 -7.046875 C 5.984375 -6.359375 6.171875 -5.410156 6.171875 -4.203125 C 6.171875 -3.066406 6 -2.125 5.65625 -1.375 C 5.164062 -0.300781 4.359375 0.234375 3.234375 0.234375 C 2.234375 0.234375 1.484375 -0.203125 0.984375 -1.078125 C 0.578125 -1.816406 0.375 -2.800781 0.375 -4.03125 C 0.375 -4.976562 0.5 -5.796875 0.75 -6.484375 C 1.207031 -7.753906 2.039062 -8.390625 3.25 -8.390625 Z M 3.234375 -0.734375 C 3.785156 -0.734375 4.222656 -0.972656 4.546875 -1.453125 C 4.867188 -1.941406 5.03125 -2.847656 5.03125 -4.171875 C 5.03125 -5.117188 4.910156 -5.898438 4.671875 -6.515625 C 4.441406 -7.128906 3.988281 -7.4375 3.3125 -7.4375 C 2.6875 -7.4375 2.226562 -7.144531 1.9375 -6.5625 C 1.65625 -5.976562 1.515625 -5.117188 1.515625 -3.984375 C 1.515625 -3.128906 1.609375 -2.441406 1.796875 -1.921875 C 2.078125 -1.128906 2.554688 -0.734375 3.234375 -0.734375 Z M 3.234375 -0.734375 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-0-2&quot;&gt;
&lt;path d=&quot;M 1.03125 -1.28125 L 2.25 -1.28125 L 2.25 0 L 1.03125 0 Z M 1.03125 -1.28125 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-0-3&quot;&gt;
&lt;path d=&quot;M 3.96875 -2.96875 L 3.96875 -6.78125 L 1.28125 -2.96875 Z M 3.984375 0 L 3.984375 -2.046875 L 0.3125 -2.046875 L 0.3125 -3.078125 L 4.15625 -8.421875 L 5.046875 -8.421875 L 5.046875 -2.96875 L 6.28125 -2.96875 L 6.28125 -2.046875 L 5.046875 -2.046875 L 5.046875 0 Z M 3.984375 0 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-0-4&quot;&gt;
&lt;path d=&quot;M 1.59375 -2.03125 C 1.625 -1.445312 1.847656 -1.046875 2.265625 -0.828125 C 2.484375 -0.703125 2.726562 -0.640625 3 -0.640625 C 3.5 -0.640625 3.925781 -0.847656 4.28125 -1.265625 C 4.632812 -1.691406 4.890625 -2.546875 5.046875 -3.828125 C 4.804688 -3.460938 4.515625 -3.203125 4.171875 -3.046875 C 3.828125 -2.898438 3.453125 -2.828125 3.046875 -2.828125 C 2.242188 -2.828125 1.601562 -3.078125 1.125 -3.578125 C 0.65625 -4.085938 0.421875 -4.738281 0.421875 -5.53125 C 0.421875 -6.289062 0.65625 -6.957031 1.125 -7.53125 C 1.59375 -8.113281 2.28125 -8.40625 3.1875 -8.40625 C 4.40625 -8.40625 5.25 -7.851562 5.71875 -6.75 C 5.96875 -6.144531 6.09375 -5.390625 6.09375 -4.484375 C 6.09375 -3.453125 5.941406 -2.539062 5.640625 -1.75 C 5.128906 -0.425781 4.257812 0.234375 3.03125 0.234375 C 2.21875 0.234375 1.597656 0.0195312 1.171875 -0.40625 C 0.742188 -0.84375 0.53125 -1.382812 0.53125 -2.03125 Z M 3.1875 -3.75 C 3.613281 -3.75 4 -3.882812 4.34375 -4.15625 C 4.6875 -4.4375 4.859375 -4.921875 4.859375 -5.609375 C 4.859375 -6.222656 4.703125 -6.679688 4.390625 -6.984375 C 4.078125 -7.285156 3.679688 -7.4375 3.203125 -7.4375 C 2.691406 -7.4375 2.285156 -7.265625 1.984375 -6.921875 C 1.679688 -6.578125 1.53125 -6.113281 1.53125 -5.53125 C 1.53125 -4.988281 1.660156 -4.554688 1.921875 -4.234375 C 2.191406 -3.910156 2.613281 -3.75 3.1875 -3.75 Z M 3.1875 -3.75 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-0-5&quot;&gt;
&lt;path d=&quot;M 1.484375 -2.140625 C 1.554688 -1.535156 1.835938 -1.117188 2.328125 -0.890625 C 2.578125 -0.773438 2.863281 -0.71875 3.1875 -0.71875 C 3.8125 -0.71875 4.273438 -0.914062 4.578125 -1.3125 C 4.878906 -1.707031 5.03125 -2.148438 5.03125 -2.640625 C 5.03125 -3.222656 4.847656 -3.675781 4.484375 -4 C 4.128906 -4.320312 3.703125 -4.484375 3.203125 -4.484375 C 2.835938 -4.484375 2.523438 -4.410156 2.265625 -4.265625 C 2.003906 -4.128906 1.785156 -3.9375 1.609375 -3.6875 L 0.6875 -3.734375 L 1.328125 -8.25 L 5.6875 -8.25 L 5.6875 -7.234375 L 2.125 -7.234375 L 1.765625 -4.90625 C 1.960938 -5.050781 2.148438 -5.160156 2.328125 -5.234375 C 2.640625 -5.359375 3 -5.421875 3.40625 -5.421875 C 4.175781 -5.421875 4.828125 -5.171875 5.359375 -4.671875 C 5.898438 -4.179688 6.171875 -3.554688 6.171875 -2.796875 C 6.171875 -2.003906 5.921875 -1.300781 5.421875 -0.6875 C 4.929688 -0.0820312 4.148438 0.21875 3.078125 0.21875 C 2.398438 0.21875 1.796875 0.0234375 1.265625 -0.359375 C 0.742188 -0.742188 0.453125 -1.335938 0.390625 -2.140625 Z M 1.484375 -2.140625 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-0-6&quot;&gt;
&lt;path d=&quot;M 1.15625 -5.9375 L 1.15625 -6.75 C 1.914062 -6.820312 2.441406 -6.945312 2.734375 -7.125 C 3.035156 -7.300781 3.265625 -7.710938 3.421875 -8.359375 L 4.25 -8.359375 L 4.25 0 L 3.125 0 L 3.125 -5.9375 Z M 1.15625 -5.9375 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-0-7&quot;&gt;
&lt;path d=&quot;M 0.375 0 C 0.414062 -0.71875 0.566406 -1.34375 0.828125 -1.875 C 1.085938 -2.414062 1.59375 -2.90625 2.34375 -3.34375 L 3.46875 -4 C 3.96875 -4.289062 4.320312 -4.539062 4.53125 -4.75 C 4.851562 -5.070312 5.015625 -5.441406 5.015625 -5.859375 C 5.015625 -6.347656 4.863281 -6.734375 4.5625 -7.015625 C 4.269531 -7.304688 3.882812 -7.453125 3.40625 -7.453125 C 2.675781 -7.453125 2.175781 -7.179688 1.90625 -6.640625 C 1.75 -6.335938 1.664062 -5.929688 1.65625 -5.421875 L 0.578125 -5.421875 C 0.585938 -6.148438 0.722656 -6.742188 0.984375 -7.203125 C 1.441406 -8.015625 2.25 -8.421875 3.40625 -8.421875 C 4.363281 -8.421875 5.0625 -8.160156 5.5 -7.640625 C 5.945312 -7.117188 6.171875 -6.539062 6.171875 -5.90625 C 6.171875 -5.238281 5.9375 -4.664062 5.46875 -4.1875 C 5.195312 -3.90625 4.707031 -3.566406 4 -3.171875 L 3.1875 -2.734375 C 2.8125 -2.523438 2.515625 -2.320312 2.296875 -2.125 C 1.898438 -1.789062 1.648438 -1.414062 1.546875 -1 L 6.140625 -1 L 6.140625 0 Z M 0.375 0 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-1-0&quot;&gt;
&lt;path d=&quot;M -8.609375 -1.03125 L -8.609375 -7 L -7.546875 -7 L -7.546875 -2.1875 L -4.9375 -2.1875 L -4.9375 -6.421875 L -3.921875 -6.421875 L -3.921875 -2.1875 L 0 -2.1875 L 0 -1.03125 Z M -8.609375 -1.03125 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-1-1&quot;&gt;
&lt;path d=&quot;M -6.28125 -0.796875 L -6.28125 -1.8125 L -5.1875 -1.8125 C -5.40625 -1.882812 -5.664062 -2.082031 -5.96875 -2.40625 C -6.269531 -2.726562 -6.421875 -3.097656 -6.421875 -3.515625 C -6.421875 -3.535156 -6.414062 -3.566406 -6.40625 -3.609375 C -6.40625 -3.660156 -6.398438 -3.742188 -6.390625 -3.859375 L -5.28125 -3.859375 C -5.289062 -3.796875 -5.296875 -3.738281 -5.296875 -3.6875 C -5.296875 -3.632812 -5.296875 -3.578125 -5.296875 -3.515625 C -5.296875 -2.984375 -5.125 -2.570312 -4.78125 -2.28125 C -4.445312 -2 -4.054688 -1.859375 -3.609375 -1.859375 L 0 -1.859375 L 0 -0.796875 Z M -6.28125 -0.796875 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-1-2&quot;&gt;
&lt;path d=&quot;M -6.421875 -3.390625 C -6.421875 -3.835938 -6.316406 -4.269531 -6.109375 -4.6875 C -5.898438 -5.101562 -5.628906 -5.421875 -5.296875 -5.640625 C -4.972656 -5.847656 -4.601562 -5.988281 -4.1875 -6.0625 C -3.894531 -6.125 -3.429688 -6.15625 -2.796875 -6.15625 L -2.796875 -1.546875 C -2.160156 -1.566406 -1.648438 -1.71875 -1.265625 -2 C -0.878906 -2.28125 -0.6875 -2.71875 -0.6875 -3.3125 C -0.6875 -3.863281 -0.867188 -4.300781 -1.234375 -4.625 C -1.441406 -4.8125 -1.6875 -4.945312 -1.96875 -5.03125 L -1.96875 -6.0625 C -1.738281 -6.039062 -1.484375 -5.953125 -1.203125 -5.796875 C -0.921875 -5.640625 -0.6875 -5.46875 -0.5 -5.28125 C -0.1875 -4.957031 0.0195312 -4.554688 0.125 -4.078125 C 0.1875 -3.828125 0.21875 -3.539062 0.21875 -3.21875 C 0.21875 -2.4375 -0.0625 -1.773438 -0.625 -1.234375 C -1.195312 -0.691406 -1.992188 -0.421875 -3.015625 -0.421875 C -4.023438 -0.421875 -4.84375 -0.691406 -5.46875 -1.234375 C -6.101562 -1.785156 -6.421875 -2.503906 -6.421875 -3.390625 Z M -3.640625 -5.0625 C -4.097656 -5.019531 -4.460938 -4.921875 -4.734375 -4.765625 C -5.242188 -4.484375 -5.5 -4.003906 -5.5 -3.328125 C -5.5 -2.835938 -5.320312 -2.425781 -4.96875 -2.09375 C -4.625 -1.769531 -4.179688 -1.597656 -3.640625 -1.578125 Z M -6.421875 -3.28125 Z M -6.421875 -3.28125 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-1-3&quot;&gt;
&lt;path d=&quot;M -3.046875 -1.453125 C -2.503906 -1.453125 -2.050781 -1.53125 -1.6875 -1.6875 C -1.03125 -1.957031 -0.703125 -2.4375 -0.703125 -3.125 C -0.703125 -3.863281 -1.046875 -4.367188 -1.734375 -4.640625 C -2.117188 -4.796875 -2.601562 -4.875 -3.1875 -4.875 C -3.738281 -4.875 -4.191406 -4.789062 -4.546875 -4.625 C -5.171875 -4.34375 -5.484375 -3.84375 -5.484375 -3.125 C -5.484375 -2.664062 -5.285156 -2.269531 -4.890625 -1.9375 C -4.492188 -1.613281 -3.878906 -1.453125 -3.046875 -1.453125 Z M -6.421875 -3.015625 C -6.421875 -3.535156 -6.289062 -3.972656 -6.03125 -4.328125 C -5.882812 -4.523438 -5.675781 -4.710938 -5.40625 -4.890625 L -6.28125 -4.890625 L -6.28125 -5.890625 L 2.5 -5.890625 L 2.5 -4.828125 L -0.71875 -4.828125 C -0.4375 -4.648438 -0.210938 -4.40625 -0.046875 -4.09375 C 0.117188 -3.789062 0.203125 -3.40625 0.203125 -2.9375 C 0.203125 -2.269531 -0.0546875 -1.671875 -0.578125 -1.140625 C -1.109375 -0.617188 -1.910156 -0.359375 -2.984375 -0.359375 C -3.984375 -0.359375 -4.804688 -0.601562 -5.453125 -1.09375 C -6.097656 -1.582031 -6.421875 -2.222656 -6.421875 -3.015625 Z M -6.421875 -3.015625 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-1-4&quot;&gt;
&lt;path d=&quot;M -6.28125 -1.828125 L -2.109375 -1.828125 C -1.785156 -1.828125 -1.523438 -1.878906 -1.328125 -1.984375 C -0.953125 -2.171875 -0.765625 -2.519531 -0.765625 -3.03125 C -0.765625 -3.757812 -1.09375 -4.257812 -1.75 -4.53125 C -2.101562 -4.675781 -2.582031 -4.75 -3.1875 -4.75 L -6.28125 -4.75 L -6.28125 -5.796875 L 0 -5.796875 L 0 -4.8125 L -0.921875 -4.8125 C -0.679688 -4.675781 -0.484375 -4.507812 -0.328125 -4.3125 C 0.00390625 -3.90625 0.171875 -3.414062 0.171875 -2.84375 C 0.171875 -1.945312 -0.128906 -1.335938 -0.734375 -1.015625 C -1.046875 -0.835938 -1.472656 -0.75 -2.015625 -0.75 L -6.28125 -0.75 Z M -6.421875 -3.28125 Z M -6.421875 -3.28125 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-1-5&quot;&gt;
&lt;path d=&quot;M -6.28125 -0.78125 L -6.28125 -1.78125 L -5.390625 -1.78125 C -5.753906 -2.070312 -6.015625 -2.382812 -6.171875 -2.71875 C -6.335938 -3.050781 -6.421875 -3.421875 -6.421875 -3.828125 C -6.421875 -4.710938 -6.109375 -5.3125 -5.484375 -5.625 C -5.140625 -5.800781 -4.65625 -5.890625 -4.03125 -5.890625 L 0 -5.890625 L 0 -4.8125 L -3.953125 -4.8125 C -4.335938 -4.8125 -4.644531 -4.753906 -4.875 -4.640625 C -5.269531 -4.453125 -5.46875 -4.113281 -5.46875 -3.625 C -5.46875 -3.375 -5.441406 -3.171875 -5.390625 -3.015625 C -5.304688 -2.722656 -5.132812 -2.46875 -4.875 -2.25 C -4.664062 -2.070312 -4.453125 -1.957031 -4.234375 -1.90625 C -4.015625 -1.851562 -3.695312 -1.828125 -3.28125 -1.828125 L 0 -1.828125 L 0 -0.78125 Z M -6.421875 -3.25 Z M -6.421875 -3.25 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-1-6&quot;&gt;
&lt;path d=&quot;M -6.453125 -3.1875 C -6.453125 -3.894531 -6.28125 -4.46875 -5.9375 -4.90625 C -5.59375 -5.351562 -5.003906 -5.625 -4.171875 -5.71875 L -4.171875 -4.6875 C -4.554688 -4.625 -4.875 -4.484375 -5.125 -4.265625 C -5.382812 -4.046875 -5.515625 -3.6875 -5.515625 -3.1875 C -5.515625 -2.519531 -5.1875 -2.039062 -4.53125 -1.75 C -4.101562 -1.5625 -3.578125 -1.46875 -2.953125 -1.46875 C -2.328125 -1.46875 -1.796875 -1.597656 -1.359375 -1.859375 C -0.929688 -2.128906 -0.71875 -2.550781 -0.71875 -3.125 C -0.71875 -3.5625 -0.851562 -3.90625 -1.125 -4.15625 C -1.394531 -4.414062 -1.757812 -4.59375 -2.21875 -4.6875 L -2.21875 -5.71875 C -1.382812 -5.601562 -0.773438 -5.3125 -0.390625 -4.84375 C -0.00390625 -4.375 0.1875 -3.773438 0.1875 -3.046875 C 0.1875 -2.222656 -0.113281 -1.566406 -0.71875 -1.078125 C -1.320312 -0.585938 -2.070312 -0.34375 -2.96875 -0.34375 C -4.070312 -0.34375 -4.925781 -0.609375 -5.53125 -1.140625 C -6.144531 -1.679688 -6.453125 -2.363281 -6.453125 -3.1875 Z M -6.421875 -3.03125 Z M -6.421875 -3.03125 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-1-7&quot;&gt;
&lt;path d=&quot;M -6.28125 -4.6875 L -6.28125 -5.859375 C -5.875 -5.710938 -4.953125 -5.382812 -3.515625 -4.875 C -2.441406 -4.488281 -1.566406 -4.164062 -0.890625 -3.90625 C 0.710938 -3.300781 1.691406 -2.875 2.046875 -2.625 C 2.398438 -2.375 2.578125 -1.941406 2.578125 -1.328125 C 2.578125 -1.179688 2.566406 -1.066406 2.546875 -0.984375 C 2.535156 -0.910156 2.515625 -0.8125 2.484375 -0.6875 L 1.53125 -0.6875 C 1.582031 -0.875 1.613281 -1.007812 1.625 -1.09375 C 1.632812 -1.175781 1.640625 -1.25 1.640625 -1.3125 C 1.640625 -1.5 1.609375 -1.640625 1.546875 -1.734375 C 1.484375 -1.828125 1.40625 -1.90625 1.3125 -1.96875 C 1.28125 -1.988281 1.117188 -2.054688 0.828125 -2.171875 C 0.535156 -2.296875 0.320312 -2.382812 0.1875 -2.4375 L -6.28125 -0.125 L -6.28125 -1.3125 L -1.171875 -3 Z M -6.421875 -3 Z M -6.421875 -3 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-1-8&quot;&gt;
&lt;path d=&quot;M -8.390625 -3.25 C -8.390625 -4.332031 -7.941406 -5.117188 -7.046875 -5.609375 C -6.359375 -5.984375 -5.410156 -6.171875 -4.203125 -6.171875 C -3.066406 -6.171875 -2.125 -6 -1.375 -5.65625 C -0.300781 -5.164062 0.234375 -4.359375 0.234375 -3.234375 C 0.234375 -2.234375 -0.203125 -1.484375 -1.078125 -0.984375 C -1.816406 -0.578125 -2.800781 -0.375 -4.03125 -0.375 C -4.976562 -0.375 -5.796875 -0.5 -6.484375 -0.75 C -7.753906 -1.207031 -8.390625 -2.039062 -8.390625 -3.25 Z M -0.734375 -3.234375 C -0.734375 -3.785156 -0.972656 -4.222656 -1.453125 -4.546875 C -1.941406 -4.867188 -2.847656 -5.03125 -4.171875 -5.03125 C -5.117188 -5.03125 -5.898438 -4.910156 -6.515625 -4.671875 C -7.128906 -4.441406 -7.4375 -3.988281 -7.4375 -3.3125 C -7.4375 -2.6875 -7.144531 -2.226562 -6.5625 -1.9375 C -5.976562 -1.65625 -5.117188 -1.515625 -3.984375 -1.515625 C -3.128906 -1.515625 -2.441406 -1.609375 -1.921875 -1.796875 C -1.128906 -2.078125 -0.734375 -2.554688 -0.734375 -3.234375 Z M -0.734375 -3.234375 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-1-9&quot;&gt;
&lt;path d=&quot;M -5.9375 -1.15625 L -6.75 -1.15625 C -6.820312 -1.914062 -6.945312 -2.441406 -7.125 -2.734375 C -7.300781 -3.035156 -7.710938 -3.265625 -8.359375 -3.421875 L -8.359375 -4.25 L 0 -4.25 L 0 -3.125 L -5.9375 -3.125 Z M -5.9375 -1.15625 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-1-10&quot;&gt;
&lt;path d=&quot;M 0 -0.375 C -0.71875 -0.414062 -1.34375 -0.566406 -1.875 -0.828125 C -2.414062 -1.085938 -2.90625 -1.59375 -3.34375 -2.34375 L -4 -3.46875 C -4.289062 -3.96875 -4.539062 -4.320312 -4.75 -4.53125 C -5.070312 -4.851562 -5.441406 -5.015625 -5.859375 -5.015625 C -6.347656 -5.015625 -6.734375 -4.863281 -7.015625 -4.5625 C -7.304688 -4.269531 -7.453125 -3.882812 -7.453125 -3.40625 C -7.453125 -2.675781 -7.179688 -2.175781 -6.640625 -1.90625 C -6.335938 -1.75 -5.929688 -1.664062 -5.421875 -1.65625 L -5.421875 -0.578125 C -6.148438 -0.585938 -6.742188 -0.722656 -7.203125 -0.984375 C -8.015625 -1.441406 -8.421875 -2.25 -8.421875 -3.40625 C -8.421875 -4.363281 -8.160156 -5.0625 -7.640625 -5.5 C -7.117188 -5.945312 -6.539062 -6.171875 -5.90625 -6.171875 C -5.238281 -6.171875 -4.664062 -5.9375 -4.1875 -5.46875 C -3.90625 -5.195312 -3.566406 -4.707031 -3.171875 -4 L -2.734375 -3.1875 C -2.523438 -2.8125 -2.320312 -2.515625 -2.125 -2.296875 C -1.789062 -1.898438 -1.414062 -1.648438 -1 -1.546875 L -1 -6.140625 L 0 -6.140625 Z M 0 -0.375 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-1-11&quot;&gt;
&lt;path d=&quot;M 0.234375 -3.125 C 0.234375 -2.125 -0.0351562 -1.398438 -0.578125 -0.953125 C -1.128906 -0.503906 -1.796875 -0.28125 -2.578125 -0.28125 L -2.578125 -1.390625 C -2.035156 -1.429688 -1.640625 -1.53125 -1.390625 -1.6875 C -0.953125 -1.96875 -0.734375 -2.460938 -0.734375 -3.171875 C -0.734375 -3.734375 -0.878906 -4.179688 -1.171875 -4.515625 C -1.472656 -4.847656 -1.859375 -5.015625 -2.328125 -5.015625 C -2.898438 -5.015625 -3.300781 -4.835938 -3.53125 -4.484375 C -3.769531 -4.128906 -3.890625 -3.640625 -3.890625 -3.015625 C -3.890625 -2.941406 -3.882812 -2.867188 -3.875 -2.796875 C -3.875 -2.722656 -3.875 -2.648438 -3.875 -2.578125 L -4.8125 -2.578125 C -4.789062 -2.691406 -4.78125 -2.785156 -4.78125 -2.859375 C -4.78125 -2.929688 -4.78125 -3.007812 -4.78125 -3.09375 C -4.78125 -3.488281 -4.84375 -3.8125 -4.96875 -4.0625 C -5.1875 -4.507812 -5.578125 -4.734375 -6.140625 -4.734375 C -6.554688 -4.734375 -6.875 -4.582031 -7.09375 -4.28125 C -7.320312 -3.988281 -7.4375 -3.644531 -7.4375 -3.25 C -7.4375 -2.550781 -7.203125 -2.066406 -6.734375 -1.796875 C -6.484375 -1.648438 -6.117188 -1.566406 -5.640625 -1.546875 L -5.640625 -0.5 C -6.265625 -0.5 -6.796875 -0.625 -7.234375 -0.875 C -8.015625 -1.300781 -8.40625 -2.054688 -8.40625 -3.140625 C -8.40625 -3.992188 -8.210938 -4.65625 -7.828125 -5.125 C -7.453125 -5.59375 -6.898438 -5.828125 -6.171875 -5.828125 C -5.660156 -5.828125 -5.242188 -5.691406 -4.921875 -5.421875 C -4.722656 -5.242188 -4.566406 -5.019531 -4.453125 -4.75 C -4.328125 -5.1875 -4.09375 -5.53125 -3.75 -5.78125 C -3.40625 -6.03125 -2.984375 -6.15625 -2.484375 -6.15625 C -1.679688 -6.15625 -1.023438 -5.890625 -0.515625 -5.359375 C -0.015625 -4.835938 0.234375 -4.09375 0.234375 -3.125 Z M 0.234375 -3.125 &quot;/&gt;
&lt;/g&gt;
&lt;/g&gt;
&lt;/defs&gt;
&lt;rect x=&quot;-50.4&quot; y=&quot;-50.4&quot; width=&quot;604.8&quot; height=&quot;604.8&quot; fill=&quot;rgb(100%, 100%, 100%)&quot; fill-opacity=&quot;1&quot;/&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-0-0&quot; x=&quot;263.398438&quot; y=&quot;485.28125&quot;/&gt;
&lt;/g&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-1-0&quot; x=&quot;12.960938&quot; y=&quot;273.148438&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-1-1&quot; x=&quot;12.960938&quot; y=&quot;265.818359&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-1-2&quot; x=&quot;12.960938&quot; y=&quot;261.822266&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-1-3&quot; x=&quot;12.960938&quot; y=&quot;255.148438&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-1-4&quot; x=&quot;12.960938&quot; y=&quot;248.474609&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-1-2&quot; x=&quot;12.960938&quot; y=&quot;241.800781&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-1-5&quot; x=&quot;12.960938&quot; y=&quot;235.126953&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-1-6&quot; x=&quot;12.960938&quot; y=&quot;228.453125&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-1-7&quot; x=&quot;12.960938&quot; y=&quot;222.453125&quot;/&gt;
&lt;/g&gt;
&lt;path fill=&quot;none&quot; stroke-width=&quot;0.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; stroke=&quot;rgb(0%, 0%, 0%)&quot; stroke-opacity=&quot;1&quot; stroke-miterlimit=&quot;10&quot; d=&quot;M 74.398438 430.558594 L 458.398438 430.558594 &quot;/&gt;
&lt;path fill=&quot;none&quot; stroke-width=&quot;0.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; stroke=&quot;rgb(0%, 0%, 0%)&quot; stroke-opacity=&quot;1&quot; stroke-miterlimit=&quot;10&quot; d=&quot;M 74.398438 430.558594 L 74.398438 437.761719 &quot;/&gt;
&lt;path fill=&quot;none&quot; stroke-width=&quot;0.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; stroke=&quot;rgb(0%, 0%, 0%)&quot; stroke-opacity=&quot;1&quot; stroke-miterlimit=&quot;10&quot; d=&quot;M 138.398438 430.558594 L 138.398438 437.761719 &quot;/&gt;
&lt;path fill=&quot;none&quot; stroke-width=&quot;0.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; stroke=&quot;rgb(0%, 0%, 0%)&quot; stroke-opacity=&quot;1&quot; stroke-miterlimit=&quot;10&quot; d=&quot;M 202.398438 430.558594 L 202.398438 437.761719 &quot;/&gt;
&lt;path fill=&quot;none&quot; stroke-width=&quot;0.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; stroke=&quot;rgb(0%, 0%, 0%)&quot; stroke-opacity=&quot;1&quot; stroke-miterlimit=&quot;10&quot; d=&quot;M 266.398438 430.558594 L 266.398438 437.761719 &quot;/&gt;
&lt;path fill=&quot;none&quot; stroke-width=&quot;0.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; stroke=&quot;rgb(0%, 0%, 0%)&quot; stroke-opacity=&quot;1&quot; stroke-miterlimit=&quot;10&quot; d=&quot;M 330.398438 430.558594 L 330.398438 437.761719 &quot;/&gt;
&lt;path fill=&quot;none&quot; stroke-width=&quot;0.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; stroke=&quot;rgb(0%, 0%, 0%)&quot; stroke-opacity=&quot;1&quot; stroke-miterlimit=&quot;10&quot; d=&quot;M 394.398438 430.558594 L 394.398438 437.761719 &quot;/&gt;
&lt;path fill=&quot;none&quot; stroke-width=&quot;0.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; stroke=&quot;rgb(0%, 0%, 0%)&quot; stroke-opacity=&quot;1&quot; stroke-miterlimit=&quot;10&quot; d=&quot;M 458.398438 430.558594 L 458.398438 437.761719 &quot;/&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-0-1&quot; x=&quot;59.382812&quot; y=&quot;456.480469&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-2&quot; x=&quot;66.056641&quot; y=&quot;456.480469&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-3&quot; x=&quot;69.390625&quot; y=&quot;456.480469&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-4&quot; x=&quot;76.064453&quot; y=&quot;456.480469&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-5&quot; x=&quot;82.738281&quot; y=&quot;456.480469&quot;/&gt;
&lt;/g&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-0-1&quot; x=&quot;123.382812&quot; y=&quot;456.480469&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-2&quot; x=&quot;130.056641&quot; y=&quot;456.480469&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-5&quot; x=&quot;133.390625&quot; y=&quot;456.480469&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-1&quot; x=&quot;140.064453&quot; y=&quot;456.480469&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-1&quot; x=&quot;146.738281&quot; y=&quot;456.480469&quot;/&gt;
&lt;/g&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-0-1&quot; x=&quot;187.382812&quot; y=&quot;456.480469&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-2&quot; x=&quot;194.056641&quot; y=&quot;456.480469&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-5&quot; x=&quot;197.390625&quot; y=&quot;456.480469&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-1&quot; x=&quot;204.064453&quot; y=&quot;456.480469&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-5&quot; x=&quot;210.738281&quot; y=&quot;456.480469&quot;/&gt;
&lt;/g&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-0-1&quot; x=&quot;251.382812&quot; y=&quot;456.480469&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-2&quot; x=&quot;258.056641&quot; y=&quot;456.480469&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-5&quot; x=&quot;261.390625&quot; y=&quot;456.480469&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-6&quot; x=&quot;268.064453&quot; y=&quot;456.480469&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-1&quot; x=&quot;274.738281&quot; y=&quot;456.480469&quot;/&gt;
&lt;/g&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-0-1&quot; x=&quot;315.382812&quot; y=&quot;456.480469&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-2&quot; x=&quot;322.056641&quot; y=&quot;456.480469&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-5&quot; x=&quot;325.390625&quot; y=&quot;456.480469&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-6&quot; x=&quot;332.064453&quot; y=&quot;456.480469&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-5&quot; x=&quot;338.738281&quot; y=&quot;456.480469&quot;/&gt;
&lt;/g&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-0-1&quot; x=&quot;379.382812&quot; y=&quot;456.480469&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-2&quot; x=&quot;386.056641&quot; y=&quot;456.480469&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-5&quot; x=&quot;389.390625&quot; y=&quot;456.480469&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-7&quot; x=&quot;396.064453&quot; y=&quot;456.480469&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-1&quot; x=&quot;402.738281&quot; y=&quot;456.480469&quot;/&gt;
&lt;/g&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-0-1&quot; x=&quot;443.382812&quot; y=&quot;456.480469&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-2&quot; x=&quot;450.056641&quot; y=&quot;456.480469&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-5&quot; x=&quot;453.390625&quot; y=&quot;456.480469&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-7&quot; x=&quot;460.064453&quot; y=&quot;456.480469&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-5&quot; x=&quot;466.738281&quot; y=&quot;456.480469&quot;/&gt;
&lt;/g&gt;
&lt;path fill=&quot;none&quot; stroke-width=&quot;0.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; stroke=&quot;rgb(0%, 0%, 0%)&quot; stroke-opacity=&quot;1&quot; stroke-miterlimit=&quot;10&quot; d=&quot;M 59.039062 416.800781 L 59.039062 72.800781 &quot;/&gt;
&lt;path fill=&quot;none&quot; stroke-width=&quot;0.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; stroke=&quot;rgb(0%, 0%, 0%)&quot; stroke-opacity=&quot;1&quot; stroke-miterlimit=&quot;10&quot; d=&quot;M 59.039062 416.800781 L 51.839844 416.800781 &quot;/&gt;
&lt;path fill=&quot;none&quot; stroke-width=&quot;0.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; stroke=&quot;rgb(0%, 0%, 0%)&quot; stroke-opacity=&quot;1&quot; stroke-miterlimit=&quot;10&quot; d=&quot;M 59.039062 302.132812 L 51.839844 302.132812 &quot;/&gt;
&lt;path fill=&quot;none&quot; stroke-width=&quot;0.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; stroke=&quot;rgb(0%, 0%, 0%)&quot; stroke-opacity=&quot;1&quot; stroke-miterlimit=&quot;10&quot; d=&quot;M 59.039062 187.464844 L 51.839844 187.464844 &quot;/&gt;
&lt;path fill=&quot;none&quot; stroke-width=&quot;0.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; stroke=&quot;rgb(0%, 0%, 0%)&quot; stroke-opacity=&quot;1&quot; stroke-miterlimit=&quot;10&quot; d=&quot;M 59.039062 72.800781 L 51.839844 72.800781 &quot;/&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-1-8&quot; x=&quot;41.761719&quot; y=&quot;420.136719&quot;/&gt;
&lt;/g&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-1-9&quot; x=&quot;41.761719&quot; y=&quot;305.46875&quot;/&gt;
&lt;/g&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-1-10&quot; x=&quot;41.761719&quot; y=&quot;190.800781&quot;/&gt;
&lt;/g&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-1-11&quot; x=&quot;41.761719&quot; y=&quot;76.136719&quot;/&gt;
&lt;/g&gt;
&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;rgb(74.509804%, 74.509804%, 74.509804%)&quot; fill-opacity=&quot;1&quot; stroke-width=&quot;0.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; stroke=&quot;rgb(0%, 0%, 0%)&quot; stroke-opacity=&quot;1&quot; stroke-miterlimit=&quot;10&quot; d=&quot;M 74.398438 416.800781 L 138.398438 416.800781 L 138.398438 187.46875 L 74.398438 187.46875 Z M 74.398438 416.800781 &quot;/&gt;
&lt;path fill=&quot;none&quot; stroke-width=&quot;0.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; stroke=&quot;rgb(0%, 0%, 0%)&quot; stroke-opacity=&quot;1&quot; stroke-miterlimit=&quot;10&quot; d=&quot;M 138.398438 416.800781 L 202.398438 416.800781 Z M 138.398438 416.800781 &quot;/&gt;
&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;rgb(74.509804%, 74.509804%, 74.509804%)&quot; fill-opacity=&quot;1&quot; stroke-width=&quot;0.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; stroke=&quot;rgb(0%, 0%, 0%)&quot; stroke-opacity=&quot;1&quot; stroke-miterlimit=&quot;10&quot; d=&quot;M 202.398438 416.800781 L 266.398438 416.800781 L 266.398438 302.132812 L 202.398438 302.132812 Z M 202.398438 416.800781 &quot;/&gt;
&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;rgb(74.509804%, 74.509804%, 74.509804%)&quot; fill-opacity=&quot;1&quot; stroke-width=&quot;0.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; stroke=&quot;rgb(0%, 0%, 0%)&quot; stroke-opacity=&quot;1&quot; stroke-miterlimit=&quot;10&quot; d=&quot;M 266.398438 416.800781 L 330.398438 416.800781 L 330.398438 72.800781 L 266.398438 72.800781 Z M 266.398438 416.800781 &quot;/&gt;
&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;rgb(74.509804%, 74.509804%, 74.509804%)&quot; fill-opacity=&quot;1&quot; stroke-width=&quot;0.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; stroke=&quot;rgb(0%, 0%, 0%)&quot; stroke-opacity=&quot;1&quot; stroke-miterlimit=&quot;10&quot; d=&quot;M 330.398438 416.800781 L 394.398438 416.800781 L 394.398438 187.46875 L 330.398438 187.46875 Z M 330.398438 416.800781 &quot;/&gt;
&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;rgb(74.509804%, 74.509804%, 74.509804%)&quot; fill-opacity=&quot;1&quot; stroke-width=&quot;0.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; stroke=&quot;rgb(0%, 0%, 0%)&quot; stroke-opacity=&quot;1&quot; stroke-miterlimit=&quot;10&quot; d=&quot;M 394.398438 416.800781 L 458.398438 416.800781 L 458.398438 302.132812 L 394.398438 302.132812 Z M 394.398438 416.800781 &quot;/&gt;
&lt;path fill=&quot;none&quot; stroke-width=&quot;1.5&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; stroke=&quot;rgb(0%, 0%, 100%)&quot; stroke-opacity=&quot;1&quot; stroke-miterlimit=&quot;10&quot; d=&quot;M 100 347.167969 L 100.347656 346.863281 L 100.691406 346.558594 L 101.039062 346.253906 L 101.382812 345.945312 L 101.730469 345.640625 L 102.074219 345.332031 L 102.421875 345.023438 L 102.765625 344.714844 L 103.113281 344.40625 L 103.460938 344.09375 L 103.804688 343.785156 L 104.152344 343.472656 L 104.496094 343.160156 L 104.84375 342.84375 L 105.1875 342.53125 L 105.535156 342.214844 L 105.882812 341.902344 L 106.226562 341.585938 L 106.574219 341.269531 L 106.917969 340.949219 L 107.265625 340.632812 L 107.609375 340.3125 L 107.957031 339.992188 L 108.300781 339.671875 L 108.996094 339.03125 L 109.339844 338.707031 L 109.6875 338.382812 L 110.03125 338.058594 L 110.378906 337.734375 L 110.722656 337.410156 L 111.070312 337.082031 L 111.417969 336.757812 L 111.761719 336.429688 L 112.109375 336.101562 L 112.453125 335.773438 L 112.800781 335.445312 L 113.144531 335.113281 L 113.492188 334.785156 L 113.835938 334.453125 L 114.53125 333.789062 L 114.875 333.453125 L 115.222656 333.121094 L 115.566406 332.785156 L 115.914062 332.449219 L 116.257812 332.113281 L 116.953125 331.441406 L 117.296875 331.105469 L 117.644531 330.765625 L 117.988281 330.425781 L 118.335938 330.085938 L 118.679688 329.746094 L 119.027344 329.40625 L 119.371094 329.066406 L 120.066406 328.378906 L 120.410156 328.035156 L 120.757812 327.691406 L 121.101562 327.347656 L 121.449219 327.003906 L 121.792969 326.65625 L 122.140625 326.3125 L 122.488281 325.964844 L 122.832031 325.617188 L 123.179688 325.269531 L 123.523438 324.921875 L 123.871094 324.574219 L 124.214844 324.222656 L 124.5625 323.875 L 124.90625 323.523438 L 125.601562 322.820312 L 125.945312 322.46875 L 126.292969 322.113281 L 126.636719 321.761719 L 126.984375 321.40625 L 127.328125 321.054688 L 128.023438 320.34375 L 128.367188 319.988281 L 128.714844 319.628906 L 129.058594 319.273438 L 129.40625 318.914062 L 129.75 318.558594 L 130.097656 318.199219 L 130.441406 317.839844 L 131.136719 317.121094 L 131.480469 316.761719 L 131.828125 316.398438 L 132.171875 316.039062 L 132.519531 315.675781 L 132.863281 315.316406 L 133.558594 314.589844 L 133.902344 314.226562 L 134.25 313.859375 L 134.59375 313.496094 L 134.941406 313.132812 L 135.285156 312.765625 L 135.632812 312.402344 L 135.976562 312.035156 L 136.671875 311.300781 L 137.015625 310.933594 L 137.363281 310.566406 L 137.707031 310.199219 L 138.054688 309.828125 L 138.398438 309.460938 L 138.746094 309.089844 L 139.09375 308.722656 L 139.4375 308.351562 L 139.785156 307.980469 L 140.128906 307.609375 L 140.476562 307.238281 L 140.820312 306.867188 L 141.167969 306.496094 L 141.511719 306.121094 L 142.207031 305.378906 L 142.550781 305.003906 L 142.898438 304.628906 L 143.242188 304.257812 L 143.589844 303.882812 L 143.933594 303.507812 L 144.628906 302.757812 L 144.972656 302.382812 L 145.320312 302.007812 L 145.664062 301.632812 L 146.011719 301.253906 L 146.355469 300.878906 L 146.703125 300.503906 L 147.046875 300.125 L 147.394531 299.75 L 147.742188 299.371094 L 148.085938 298.992188 L 148.433594 298.613281 L 148.777344 298.238281 L 149.125 297.859375 L 149.46875 297.480469 L 150.164062 296.722656 L 150.507812 296.34375 L 150.855469 295.964844 L 151.199219 295.582031 L 151.546875 295.203125 L 151.890625 294.824219 L 152.238281 294.445312 L 152.582031 294.0625 L 152.929688 293.683594 L 153.277344 293.300781 L 153.621094 292.921875 L 153.96875 292.539062 L 154.3125 292.160156 L 154.660156 291.777344 L 155.003906 291.398438 L 155.699219 290.632812 L 156.042969 290.253906 L 156.390625 289.871094 L 156.734375 289.488281 L 157.082031 289.105469 L 157.425781 288.722656 L 157.773438 288.34375 L 158.117188 287.960938 L 158.8125 287.195312 L 159.15625 286.8125 L 159.503906 286.429688 L 159.847656 286.046875 L 160.195312 285.664062 L 160.539062 285.28125 L 160.886719 284.902344 L 161.234375 284.519531 L 161.578125 284.136719 L 161.925781 283.753906 L 162.269531 283.371094 L 162.617188 282.988281 L 162.960938 282.605469 L 163.308594 282.222656 L 163.652344 281.839844 L 164.347656 281.074219 L 164.691406 280.691406 L 165.039062 280.308594 L 165.382812 279.925781 L 165.730469 279.546875 L 166.074219 279.164062 L 166.421875 278.78125 L 166.765625 278.398438 L 167.113281 278.015625 L 167.460938 277.636719 L 167.804688 277.253906 L 168.152344 276.871094 L 168.496094 276.492188 L 168.84375 276.109375 L 169.1875 275.726562 L 169.535156 275.347656 L 169.882812 274.964844 L 170.226562 274.585938 L 170.574219 274.203125 L 170.917969 273.824219 L 171.265625 273.445312 L 171.609375 273.0625 L 171.957031 272.683594 L 172.300781 272.304688 L 172.648438 271.925781 L 172.996094 271.542969 L 173.339844 271.164062 L 173.6875 270.785156 L 174.03125 270.40625 L 174.378906 270.03125 L 174.722656 269.652344 L 175.417969 268.894531 L 175.761719 268.519531 L 176.109375 268.140625 L 176.453125 267.765625 L 176.800781 267.386719 L 177.144531 267.011719 L 177.492188 266.636719 L 177.835938 266.257812 L 178.53125 265.507812 L 178.875 265.132812 L 179.222656 264.761719 L 179.566406 264.386719 L 179.914062 264.011719 L 180.257812 263.636719 L 180.953125 262.894531 L 181.296875 262.519531 L 181.644531 262.148438 L 181.988281 261.777344 L 182.335938 261.40625 L 182.679688 261.035156 L 183.027344 260.664062 L 183.371094 260.296875 L 184.066406 259.554688 L 184.410156 259.1875 L 184.757812 258.820312 L 185.101562 258.453125 L 185.449219 258.085938 L 185.792969 257.71875 L 186.488281 256.984375 L 186.832031 256.621094 L 187.179688 256.253906 L 187.523438 255.890625 L 187.871094 255.527344 L 188.214844 255.164062 L 188.5625 254.800781 L 188.90625 254.4375 L 189.253906 254.078125 L 189.601562 253.714844 L 189.945312 253.355469 L 190.292969 252.996094 L 190.636719 252.636719 L 190.984375 252.277344 L 191.328125 251.917969 L 191.675781 251.558594 L 192.023438 251.203125 L 192.367188 250.847656 L 192.714844 250.492188 L 193.058594 250.136719 L 193.40625 249.78125 L 193.75 249.425781 L 194.097656 249.074219 L 194.441406 248.71875 L 195.136719 248.015625 L 195.480469 247.664062 L 195.828125 247.316406 L 196.171875 246.964844 L 196.519531 246.617188 L 196.863281 246.269531 L 197.558594 245.574219 L 197.902344 245.226562 L 198.25 244.882812 L 198.59375 244.539062 L 198.941406 244.195312 L 199.285156 243.851562 L 199.632812 243.507812 L 199.976562 243.167969 L 200.671875 242.488281 L 201.015625 242.148438 L 201.363281 241.808594 L 201.707031 241.472656 L 202.054688 241.136719 L 202.398438 240.800781 L 203.09375 240.128906 L 203.4375 239.796875 L 203.785156 239.464844 L 204.128906 239.132812 L 204.476562 238.800781 L 204.820312 238.46875 L 205.167969 238.140625 L 205.511719 237.8125 L 205.859375 237.484375 L 206.207031 237.160156 L 206.550781 236.832031 L 206.898438 236.507812 L 207.242188 236.183594 L 207.589844 235.859375 L 207.933594 235.539062 L 208.628906 234.898438 L 208.972656 234.578125 L 209.320312 234.261719 L 209.664062 233.941406 L 210.011719 233.625 L 210.355469 233.3125 L 210.703125 232.996094 L 211.046875 232.683594 L 211.742188 232.058594 L 212.085938 231.75 L 212.433594 231.4375 L 212.777344 231.132812 L 213.125 230.824219 L 213.46875 230.515625 L 214.164062 229.90625 L 214.507812 229.605469 L 214.855469 229.300781 L 215.199219 229 L 215.546875 228.703125 L 215.890625 228.402344 L 216.238281 228.105469 L 216.582031 227.808594 L 216.929688 227.511719 L 217.277344 227.21875 L 217.621094 226.925781 L 217.96875 226.632812 L 218.3125 226.339844 L 218.660156 226.050781 L 219.003906 225.761719 L 219.351562 225.472656 L 219.699219 225.1875 L 220.042969 224.902344 L 220.390625 224.617188 L 220.734375 224.335938 L 221.082031 224.054688 L 221.425781 223.773438 L 221.773438 223.492188 L 222.117188 223.214844 L 222.8125 222.660156 L 223.15625 222.386719 L 223.503906 222.113281 L 223.847656 221.839844 L 224.195312 221.570312 L 224.539062 221.300781 L 224.886719 221.03125 L 225.234375 220.765625 L 225.578125 220.5 L 225.925781 220.234375 L 226.269531 219.96875 L 226.617188 219.707031 L 226.960938 219.445312 L 227.308594 219.1875 L 227.652344 218.929688 L 228 218.671875 L 228.347656 218.417969 L 228.691406 218.160156 L 229.039062 217.910156 L 229.382812 217.65625 L 229.730469 217.40625 L 230.074219 217.15625 L 230.421875 216.910156 L 230.765625 216.664062 L 231.113281 216.417969 L 231.460938 216.175781 L 231.804688 215.933594 L 232.152344 215.691406 L 232.496094 215.453125 L 232.84375 215.214844 L 233.1875 214.976562 L 233.882812 214.507812 L 234.226562 214.273438 L 234.574219 214.042969 L 234.917969 213.8125 L 235.265625 213.585938 L 235.609375 213.359375 L 235.957031 213.132812 L 236.300781 212.910156 L 236.996094 212.464844 L 237.339844 212.246094 L 237.6875 212.027344 L 238.03125 211.8125 L 238.378906 211.597656 L 238.722656 211.382812 L 239.417969 210.960938 L 239.761719 210.75 L 240.109375 210.542969 L 240.453125 210.335938 L 240.800781 210.132812 L 241.144531 209.925781 L 241.492188 209.726562 L 241.835938 209.527344 L 242.53125 209.128906 L 242.875 208.933594 L 243.222656 208.738281 L 243.566406 208.546875 L 243.914062 208.355469 L 244.257812 208.167969 L 244.953125 207.792969 L 245.296875 207.605469 L 245.644531 207.425781 L 245.988281 207.242188 L 246.335938 207.0625 L 246.679688 206.882812 L 247.027344 206.707031 L 247.371094 206.53125 L 248.066406 206.1875 L 248.410156 206.015625 L 248.757812 205.847656 L 249.101562 205.679688 L 249.449219 205.511719 L 249.792969 205.347656 L 250.488281 205.027344 L 250.832031 204.867188 L 251.179688 204.710938 L 251.523438 204.554688 L 251.871094 204.398438 L 252.214844 204.246094 L 252.5625 204.09375 L 252.90625 203.945312 L 253.253906 203.796875 L 253.601562 203.652344 L 253.945312 203.507812 L 254.292969 203.367188 L 254.636719 203.222656 L 254.984375 203.085938 L 255.328125 202.949219 L 256.023438 202.675781 L 256.367188 202.542969 L 256.714844 202.414062 L 257.058594 202.285156 L 257.40625 202.15625 L 257.75 202.03125 L 258.097656 201.90625 L 258.441406 201.785156 L 258.789062 201.664062 L 259.136719 201.546875 L 259.480469 201.429688 L 259.828125 201.3125 L 260.171875 201.199219 L 260.519531 201.085938 L 260.863281 200.976562 L 261.210938 200.867188 L 261.558594 200.761719 L 261.902344 200.65625 L 262.25 200.554688 L 262.59375 200.453125 L 262.941406 200.351562 L 263.285156 200.253906 L 263.632812 200.15625 L 263.976562 200.0625 L 264.324219 199.96875 L 264.671875 199.878906 L 265.015625 199.789062 L 265.363281 199.703125 L 265.707031 199.617188 L 266.054688 199.53125 L 266.398438 199.449219 L 266.746094 199.367188 L 267.09375 199.289062 L 267.4375 199.214844 L 267.785156 199.136719 L 268.128906 199.0625 L 268.476562 198.992188 L 268.820312 198.921875 L 269.167969 198.855469 L 269.511719 198.789062 L 269.859375 198.722656 L 270.207031 198.660156 L 270.550781 198.601562 L 270.898438 198.542969 L 271.242188 198.484375 L 271.589844 198.429688 L 271.933594 198.375 L 272.628906 198.273438 L 272.972656 198.222656 L 273.320312 198.175781 L 273.664062 198.132812 L 274.011719 198.089844 L 274.355469 198.046875 L 274.703125 198.007812 L 275.046875 197.972656 L 275.742188 197.902344 L 276.085938 197.871094 L 276.433594 197.839844 L 276.777344 197.8125 L 277.125 197.785156 L 277.46875 197.757812 L 277.816406 197.734375 L 278.164062 197.714844 L 278.507812 197.695312 L 278.855469 197.679688 L 279.199219 197.660156 L 279.546875 197.648438 L 279.890625 197.636719 L 280.238281 197.625 L 280.582031 197.617188 L 280.929688 197.609375 L 281.277344 197.605469 L 281.621094 197.601562 L 282.3125 197.601562 L 282.660156 197.605469 L 283.003906 197.609375 L 283.351562 197.613281 L 283.699219 197.621094 L 284.042969 197.632812 L 284.390625 197.640625 L 284.734375 197.65625 L 285.082031 197.671875 L 285.425781 197.6875 L 285.773438 197.707031 L 286.117188 197.726562 L 286.8125 197.773438 L 287.15625 197.800781 L 287.503906 197.828125 L 287.847656 197.855469 L 288.195312 197.886719 L 288.539062 197.921875 L 289.234375 197.992188 L 289.578125 198.03125 L 289.925781 198.070312 L 290.269531 198.113281 L 290.617188 198.15625 L 290.960938 198.203125 L 291.308594 198.25 L 291.652344 198.300781 L 292.347656 198.402344 L 292.691406 198.457031 L 293.039062 198.515625 L 293.382812 198.574219 L 293.730469 198.632812 L 294.074219 198.695312 L 294.421875 198.757812 L 294.765625 198.824219 L 295.113281 198.890625 L 295.460938 198.960938 L 295.804688 199.03125 L 296.152344 199.105469 L 296.496094 199.179688 L 296.84375 199.253906 L 297.1875 199.332031 L 297.882812 199.496094 L 298.226562 199.578125 L 298.574219 199.664062 L 298.917969 199.75 L 299.265625 199.839844 L 299.609375 199.929688 L 299.957031 200.019531 L 300.300781 200.113281 L 300.996094 200.308594 L 301.339844 200.40625 L 301.6875 200.507812 L 302.03125 200.609375 L 302.378906 200.714844 L 302.722656 200.820312 L 303.417969 201.039062 L 303.761719 201.148438 L 304.109375 201.261719 L 304.453125 201.375 L 304.800781 201.492188 L 305.144531 201.613281 L 305.492188 201.730469 L 305.835938 201.851562 L 306.53125 202.101562 L 306.875 202.226562 L 307.222656 202.355469 L 307.566406 202.488281 L 307.914062 202.617188 L 308.257812 202.75 L 308.953125 203.023438 L 309.296875 203.164062 L 309.644531 203.300781 L 309.988281 203.445312 L 310.335938 203.589844 L 310.679688 203.734375 L 311.027344 203.878906 L 311.371094 204.027344 L 312.066406 204.332031 L 312.410156 204.484375 L 312.757812 204.640625 L 313.101562 204.796875 L 313.449219 204.953125 L 313.792969 205.113281 L 314.488281 205.441406 L 314.832031 205.605469 L 315.179688 205.773438 L 315.523438 205.941406 L 315.871094 206.109375 L 316.214844 206.28125 L 316.5625 206.453125 L 316.90625 206.628906 L 317.253906 206.804688 L 317.601562 206.984375 L 317.945312 207.164062 L 318.292969 207.34375 L 318.636719 207.527344 L 318.984375 207.710938 L 319.328125 207.894531 L 319.675781 208.082031 L 320.023438 208.273438 L 320.367188 208.460938 L 320.714844 208.652344 L 321.058594 208.847656 L 321.40625 209.042969 L 321.75 209.238281 L 322.097656 209.4375 L 322.441406 209.636719 L 322.789062 209.835938 L 323.136719 210.039062 L 323.480469 210.246094 L 323.828125 210.449219 L 324.171875 210.65625 L 324.519531 210.867188 L 324.863281 211.078125 L 325.558594 211.5 L 325.902344 211.714844 L 326.25 211.933594 L 326.59375 212.148438 L 326.941406 212.367188 L 327.285156 212.589844 L 327.632812 212.8125 L 327.976562 213.035156 L 328.324219 213.257812 L 328.671875 213.484375 L 329.015625 213.710938 L 329.363281 213.941406 L 329.707031 214.171875 L 330.054688 214.402344 L 330.398438 214.636719 L 330.746094 214.871094 L 331.09375 215.109375 L 331.4375 215.347656 L 331.785156 215.585938 L 332.128906 215.824219 L 332.476562 216.066406 L 332.820312 216.308594 L 333.167969 216.554688 L 333.511719 216.800781 L 333.859375 217.046875 L 334.207031 217.296875 L 334.550781 217.546875 L 334.898438 217.796875 L 335.242188 218.050781 L 335.589844 218.304688 L 335.933594 218.558594 L 336.28125 218.816406 L 336.628906 219.070312 L 336.972656 219.332031 L 337.320312 219.589844 L 337.664062 219.851562 L 338.011719 220.117188 L 338.355469 220.378906 L 338.703125 220.644531 L 339.046875 220.914062 L 339.394531 221.179688 L 339.742188 221.449219 L 340.085938 221.71875 L 340.433594 221.992188 L 340.777344 222.265625 L 341.125 222.539062 L 341.46875 222.8125 L 342.164062 223.367188 L 342.507812 223.648438 L 342.855469 223.929688 L 343.199219 224.210938 L 343.546875 224.492188 L 343.890625 224.777344 L 344.238281 225.058594 L 344.582031 225.347656 L 344.929688 225.632812 L 345.277344 225.921875 L 345.621094 226.210938 L 345.96875 226.503906 L 346.3125 226.792969 L 346.660156 227.085938 L 347.003906 227.382812 L 347.351562 227.675781 L 347.699219 227.972656 L 348.042969 228.269531 L 348.390625 228.566406 L 348.734375 228.867188 L 349.082031 229.167969 L 349.425781 229.46875 L 349.773438 229.773438 L 350.117188 230.078125 L 350.8125 230.6875 L 351.15625 230.996094 L 351.503906 231.300781 L 351.847656 231.609375 L 352.195312 231.921875 L 352.539062 232.230469 L 353.234375 232.855469 L 353.578125 233.171875 L 353.925781 233.484375 L 354.269531 233.800781 L 354.617188 234.117188 L 354.960938 234.4375 L 355.308594 234.753906 L 355.652344 235.074219 L 356 235.394531 L 356.347656 235.71875 L 356.691406 236.039062 L 357.039062 236.363281 L 357.382812 236.6875 L 357.730469 237.015625 L 358.074219 237.339844 L 358.421875 237.667969 L 358.765625 237.996094 L 359.460938 238.652344 L 359.804688 238.984375 L 360.152344 239.316406 L 360.496094 239.648438 L 360.84375 239.980469 L 361.1875 240.316406 L 361.535156 240.648438 L 361.882812 240.984375 L 362.226562 241.320312 L 362.574219 241.660156 L 362.917969 241.996094 L 363.265625 242.335938 L 363.609375 242.675781 L 363.957031 243.015625 L 364.300781 243.359375 L 364.648438 243.699219 L 364.996094 244.042969 L 365.339844 244.386719 L 365.6875 244.730469 L 367.417969 246.460938 L 367.761719 246.808594 L 368.109375 247.160156 L 368.453125 247.507812 L 368.800781 247.859375 L 369.144531 248.210938 L 369.492188 248.5625 L 369.835938 248.914062 L 370.183594 249.269531 L 370.53125 249.621094 L 370.875 249.976562 L 371.222656 250.332031 L 371.566406 250.6875 L 371.914062 251.042969 L 372.257812 251.402344 L 372.605469 251.757812 L 372.953125 252.117188 L 373.296875 252.476562 L 373.644531 252.835938 L 373.988281 253.195312 L 374.335938 253.554688 L 374.679688 253.917969 L 375.027344 254.277344 L 375.371094 254.640625 L 376.066406 255.367188 L 376.410156 255.730469 L 376.757812 256.09375 L 377.101562 256.457031 L 377.449219 256.824219 L 377.792969 257.1875 L 378.488281 257.921875 L 378.832031 258.289062 L 379.179688 258.65625 L 379.523438 259.023438 L 379.871094 259.390625 L 380.214844 259.761719 L 380.5625 260.128906 L 380.90625 260.5 L 381.601562 261.242188 L 381.945312 261.613281 L 382.292969 261.984375 L 382.636719 262.355469 L 382.984375 262.726562 L 383.328125 263.101562 L 383.675781 263.472656 L 384.023438 263.847656 L 384.367188 264.21875 L 384.714844 264.59375 L 385.058594 264.96875 L 385.40625 265.34375 L 385.75 265.71875 L 386.097656 266.09375 L 386.441406 266.46875 L 387.136719 267.21875 L 387.480469 267.597656 L 387.828125 267.972656 L 388.171875 268.351562 L 388.519531 268.726562 L 388.863281 269.105469 L 389.558594 269.863281 L 389.902344 270.238281 L 390.25 270.617188 L 390.59375 270.996094 L 390.941406 271.375 L 391.285156 271.753906 L 391.632812 272.136719 L 391.976562 272.515625 L 392.671875 273.273438 L 393.015625 273.65625 L 393.363281 274.035156 L 393.707031 274.414062 L 394.054688 274.796875 L 394.398438 275.175781 L 395.09375 275.941406 L 395.4375 276.320312 L 395.785156 276.703125 L 396.128906 277.082031 L 396.476562 277.464844 L 396.820312 277.847656 L 397.167969 278.230469 L 397.511719 278.609375 L 398.207031 279.375 L 398.550781 279.757812 L 398.898438 280.140625 L 399.242188 280.523438 L 399.589844 280.90625 L 399.933594 281.285156 L 400.628906 282.050781 L 400.972656 282.433594 L 401.320312 282.816406 L 401.664062 283.199219 L 402.011719 283.582031 L 402.355469 283.964844 L 402.703125 284.347656 L 403.046875 284.730469 L 403.742188 285.496094 L 404.085938 285.878906 L 404.433594 286.261719 L 404.777344 286.644531 L 405.125 287.027344 L 405.46875 287.40625 L 406.164062 288.171875 L 406.507812 288.554688 L 406.855469 288.9375 L 407.199219 289.320312 L 407.546875 289.699219 L 407.890625 290.082031 L 408.238281 290.464844 L 408.582031 290.847656 L 408.929688 291.226562 L 409.277344 291.609375 L 409.621094 291.988281 L 409.96875 292.371094 L 410.3125 292.753906 L 410.660156 293.132812 L 411.003906 293.515625 L 411.699219 294.273438 L 412.042969 294.65625 L 412.390625 295.035156 L 412.734375 295.414062 L 413.082031 295.792969 L 413.425781 296.175781 L 413.773438 296.554688 L 414.117188 296.933594 L 414.8125 297.691406 L 415.15625 298.070312 L 415.503906 298.445312 L 415.847656 298.824219 L 416.195312 299.203125 L 416.539062 299.582031 L 416.886719 299.957031 L 417.234375 300.335938 L 417.578125 300.710938 L 417.925781 301.089844 L 418.269531 301.464844 L 418.617188 301.839844 L 418.960938 302.214844 L 419.308594 302.59375 L 419.652344 302.96875 L 420 303.34375 L 420.347656 303.714844 L 420.691406 304.089844 L 421.039062 304.464844 L 421.382812 304.839844 L 421.730469 305.210938 L 422.074219 305.585938 L 422.421875 305.957031 L 422.765625 306.328125 L 423.113281 306.703125 L 423.460938 307.074219 L 423.804688 307.445312 L 424.152344 307.816406 L 424.496094 308.1875 L 424.84375 308.554688 L 425.1875 308.925781 L 425.535156 309.296875 L 425.882812 309.664062 L 426.226562 310.035156 L 426.574219 310.402344 L 426.917969 310.769531 L 427.265625 311.136719 L 427.609375 311.503906 L 427.957031 311.871094 L 428.300781 312.238281 L 428.648438 312.605469 L 428.996094 312.96875 L 429.339844 313.335938 L 429.6875 313.699219 L 430.03125 314.0625 L 430.378906 314.425781 L 430.722656 314.789062 L 431.417969 315.515625 L 431.761719 315.878906 L 432.109375 316.238281 L 432.453125 316.601562 L 432.800781 316.960938 L 433.144531 317.320312 L 433.492188 317.679688 L 433.835938 318.039062 L 434.53125 318.757812 L 434.875 319.113281 L 435.222656 319.472656 L 435.566406 319.828125 L 435.914062 320.183594 L 436.257812 320.539062 L 436.953125 321.25 L 437.296875 321.605469 L 437.644531 321.957031 L 437.988281 322.308594 L 438.335938 322.664062 L 438.679688 323.015625 L 439.027344 323.367188 L 439.371094 323.71875 L 439.71875 324.066406 L 440.066406 324.417969 L 440.410156 324.765625 L 440.757812 325.117188 L 441.101562 325.464844 L 442.832031 327.195312 L 443.179688 327.539062 L 443.523438 327.882812 L 443.871094 328.226562 L 444.214844 328.570312 L 444.5625 328.914062 L 444.90625 329.253906 L 445.253906 329.59375 L 445.601562 329.9375 &quot;/&gt;
&lt;/svg&gt;
&lt;/div&gt;
&lt;/p&gt;
&lt;/div&gt;

&lt;p&gt;
正态概率图（Normal Quantile-Quantile Plot）:
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-R&quot;&gt;&lt;span style=&quot;color: #110099;&quot;&gt;library&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;rcompanion&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
data &lt;span style=&quot;color: #110099;&quot;&gt;&amp;lt;-&lt;/span&gt; c&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;0.497, 0.506, 0.518, 0.524, 0.498, 0.511, 0.520, 0.515, 0.512&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
qqnorm&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;data&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
qqline&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;data, col=&lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;red&quot;&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt; 
&lt;/pre&gt;
&lt;/div&gt;


&lt;div id=&quot;org6b1612d&quot; class=&quot;figure&quot;&gt;
&lt;p&gt;&lt;div align=&quot;center&quot;&gt;&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; xmlns:xlink=&quot;http://www.w3.org/1999/xlink&quot;  viewBox=&quot;0 0 504 504&quot;&gt;
&lt;defs&gt;
&lt;g&gt;
&lt;g id=&quot;glyph-0-0&quot;&gt;
&lt;path d=&quot;M 0.5 -3.890625 L 3.4375 -3.890625 L 3.4375 -2.796875 L 0.5 -2.796875 Z M 0.5 -3.890625 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-0-1&quot;&gt;
&lt;path d=&quot;M 1.15625 -5.9375 L 1.15625 -6.75 C 1.914062 -6.820312 2.441406 -6.945312 2.734375 -7.125 C 3.035156 -7.300781 3.265625 -7.710938 3.421875 -8.359375 L 4.25 -8.359375 L 4.25 0 L 3.125 0 L 3.125 -5.9375 Z M 1.15625 -5.9375 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-0-2&quot;&gt;
&lt;path d=&quot;M 1.03125 -1.28125 L 2.25 -1.28125 L 2.25 0 L 1.03125 0 Z M 1.03125 -1.28125 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-0-3&quot;&gt;
&lt;path d=&quot;M 1.484375 -2.140625 C 1.554688 -1.535156 1.835938 -1.117188 2.328125 -0.890625 C 2.578125 -0.773438 2.863281 -0.71875 3.1875 -0.71875 C 3.8125 -0.71875 4.273438 -0.914062 4.578125 -1.3125 C 4.878906 -1.707031 5.03125 -2.148438 5.03125 -2.640625 C 5.03125 -3.222656 4.847656 -3.675781 4.484375 -4 C 4.128906 -4.320312 3.703125 -4.484375 3.203125 -4.484375 C 2.835938 -4.484375 2.523438 -4.410156 2.265625 -4.265625 C 2.003906 -4.128906 1.785156 -3.9375 1.609375 -3.6875 L 0.6875 -3.734375 L 1.328125 -8.25 L 5.6875 -8.25 L 5.6875 -7.234375 L 2.125 -7.234375 L 1.765625 -4.90625 C 1.960938 -5.050781 2.148438 -5.160156 2.328125 -5.234375 C 2.640625 -5.359375 3 -5.421875 3.40625 -5.421875 C 4.175781 -5.421875 4.828125 -5.171875 5.359375 -4.671875 C 5.898438 -4.179688 6.171875 -3.554688 6.171875 -2.796875 C 6.171875 -2.003906 5.921875 -1.300781 5.421875 -0.6875 C 4.929688 -0.0820312 4.148438 0.21875 3.078125 0.21875 C 2.398438 0.21875 1.796875 0.0234375 1.265625 -0.359375 C 0.742188 -0.742188 0.453125 -1.335938 0.390625 -2.140625 Z M 1.484375 -2.140625 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-0-4&quot;&gt;
&lt;path d=&quot;M 3.25 -8.390625 C 4.332031 -8.390625 5.117188 -7.941406 5.609375 -7.046875 C 5.984375 -6.359375 6.171875 -5.410156 6.171875 -4.203125 C 6.171875 -3.066406 6 -2.125 5.65625 -1.375 C 5.164062 -0.300781 4.359375 0.234375 3.234375 0.234375 C 2.234375 0.234375 1.484375 -0.203125 0.984375 -1.078125 C 0.578125 -1.816406 0.375 -2.800781 0.375 -4.03125 C 0.375 -4.976562 0.5 -5.796875 0.75 -6.484375 C 1.207031 -7.753906 2.039062 -8.390625 3.25 -8.390625 Z M 3.234375 -0.734375 C 3.785156 -0.734375 4.222656 -0.972656 4.546875 -1.453125 C 4.867188 -1.941406 5.03125 -2.847656 5.03125 -4.171875 C 5.03125 -5.117188 4.910156 -5.898438 4.671875 -6.515625 C 4.441406 -7.128906 3.988281 -7.4375 3.3125 -7.4375 C 2.6875 -7.4375 2.226562 -7.144531 1.9375 -6.5625 C 1.65625 -5.976562 1.515625 -5.117188 1.515625 -3.984375 C 1.515625 -3.128906 1.609375 -2.441406 1.796875 -1.921875 C 2.078125 -1.128906 2.554688 -0.734375 3.234375 -0.734375 Z M 3.234375 -0.734375 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-0-5&quot;&gt;
&lt;path d=&quot;M 7.171875 -8.609375 L 7.171875 -7.578125 L 4.28125 -7.578125 L 4.28125 0 L 3.09375 0 L 3.09375 -7.578125 L 0.1875 -7.578125 L 0.1875 -8.609375 Z M 7.171875 -8.609375 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-0-6&quot;&gt;
&lt;path d=&quot;M 0.78125 -8.640625 L 1.828125 -8.640625 L 1.828125 -5.421875 C 2.078125 -5.742188 2.300781 -5.96875 2.5 -6.09375 C 2.84375 -6.3125 3.269531 -6.421875 3.78125 -6.421875 C 4.6875 -6.421875 5.300781 -6.101562 5.625 -5.46875 C 5.800781 -5.125 5.890625 -4.644531 5.890625 -4.03125 L 5.890625 0 L 4.8125 0 L 4.8125 -3.953125 C 4.8125 -4.410156 4.75 -4.75 4.625 -4.96875 C 4.4375 -5.3125 4.078125 -5.484375 3.546875 -5.484375 C 3.109375 -5.484375 2.710938 -5.332031 2.359375 -5.03125 C 2.003906 -4.726562 1.828125 -4.160156 1.828125 -3.328125 L 1.828125 0 L 0.78125 0 Z M 0.78125 -8.640625 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-0-7&quot;&gt;
&lt;path d=&quot;M 3.390625 -6.421875 C 3.835938 -6.421875 4.269531 -6.316406 4.6875 -6.109375 C 5.101562 -5.898438 5.421875 -5.628906 5.640625 -5.296875 C 5.847656 -4.972656 5.988281 -4.601562 6.0625 -4.1875 C 6.125 -3.894531 6.15625 -3.429688 6.15625 -2.796875 L 1.546875 -2.796875 C 1.566406 -2.160156 1.71875 -1.648438 2 -1.265625 C 2.28125 -0.878906 2.71875 -0.6875 3.3125 -0.6875 C 3.863281 -0.6875 4.300781 -0.867188 4.625 -1.234375 C 4.8125 -1.441406 4.945312 -1.6875 5.03125 -1.96875 L 6.0625 -1.96875 C 6.039062 -1.738281 5.953125 -1.484375 5.796875 -1.203125 C 5.640625 -0.921875 5.46875 -0.6875 5.28125 -0.5 C 4.957031 -0.1875 4.554688 0.0195312 4.078125 0.125 C 3.828125 0.1875 3.539062 0.21875 3.21875 0.21875 C 2.4375 0.21875 1.773438 -0.0625 1.234375 -0.625 C 0.691406 -1.195312 0.421875 -1.992188 0.421875 -3.015625 C 0.421875 -4.023438 0.691406 -4.84375 1.234375 -5.46875 C 1.785156 -6.101562 2.503906 -6.421875 3.390625 -6.421875 Z M 5.0625 -3.640625 C 5.019531 -4.097656 4.921875 -4.460938 4.765625 -4.734375 C 4.484375 -5.242188 4.003906 -5.5 3.328125 -5.5 C 2.835938 -5.5 2.425781 -5.320312 2.09375 -4.96875 C 1.769531 -4.625 1.597656 -4.179688 1.578125 -3.640625 Z M 3.28125 -6.421875 Z M 3.28125 -6.421875 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-0-8&quot;&gt;
&lt;path d=&quot;M 3.265625 -0.6875 C 3.960938 -0.6875 4.441406 -0.945312 4.703125 -1.46875 C 4.960938 -2 5.09375 -2.585938 5.09375 -3.234375 C 5.09375 -3.828125 5 -4.304688 4.8125 -4.671875 C 4.507812 -5.242188 4 -5.53125 3.28125 -5.53125 C 2.632812 -5.53125 2.164062 -5.285156 1.875 -4.796875 C 1.582031 -4.304688 1.4375 -3.710938 1.4375 -3.015625 C 1.4375 -2.347656 1.582031 -1.789062 1.875 -1.34375 C 2.164062 -0.90625 2.628906 -0.6875 3.265625 -0.6875 Z M 3.3125 -6.453125 C 4.113281 -6.453125 4.789062 -6.179688 5.34375 -5.640625 C 5.90625 -5.109375 6.1875 -4.316406 6.1875 -3.265625 C 6.1875 -2.253906 5.941406 -1.414062 5.453125 -0.75 C 4.960938 -0.09375 4.203125 0.234375 3.171875 0.234375 C 2.304688 0.234375 1.617188 -0.0546875 1.109375 -0.640625 C 0.597656 -1.234375 0.34375 -2.019531 0.34375 -3 C 0.34375 -4.050781 0.609375 -4.890625 1.140625 -5.515625 C 1.679688 -6.140625 2.40625 -6.453125 3.3125 -6.453125 Z M 3.265625 -6.421875 Z M 3.265625 -6.421875 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-0-9&quot;&gt;
&lt;path d=&quot;M 0.796875 -6.28125 L 1.8125 -6.28125 L 1.8125 -5.1875 C 1.882812 -5.40625 2.082031 -5.664062 2.40625 -5.96875 C 2.726562 -6.269531 3.097656 -6.421875 3.515625 -6.421875 C 3.535156 -6.421875 3.566406 -6.414062 3.609375 -6.40625 C 3.660156 -6.40625 3.742188 -6.398438 3.859375 -6.390625 L 3.859375 -5.28125 C 3.796875 -5.289062 3.738281 -5.296875 3.6875 -5.296875 C 3.632812 -5.296875 3.578125 -5.296875 3.515625 -5.296875 C 2.984375 -5.296875 2.570312 -5.125 2.28125 -4.78125 C 2 -4.445312 1.859375 -4.054688 1.859375 -3.609375 L 1.859375 0 L 0.796875 0 Z M 0.796875 -6.28125 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-0-10&quot;&gt;
&lt;path d=&quot;M 0.984375 -8.03125 L 2.046875 -8.03125 L 2.046875 -6.28125 L 3.046875 -6.28125 L 3.046875 -5.421875 L 2.046875 -5.421875 L 2.046875 -1.3125 C 2.046875 -1.09375 2.125 -0.945312 2.28125 -0.875 C 2.351562 -0.832031 2.488281 -0.8125 2.6875 -0.8125 C 2.738281 -0.8125 2.789062 -0.8125 2.84375 -0.8125 C 2.90625 -0.820312 2.972656 -0.828125 3.046875 -0.828125 L 3.046875 0 C 2.929688 0.03125 2.804688 0.0507812 2.671875 0.0625 C 2.546875 0.0820312 2.40625 0.09375 2.25 0.09375 C 1.757812 0.09375 1.425781 -0.03125 1.25 -0.28125 C 1.070312 -0.53125 0.984375 -0.859375 0.984375 -1.265625 L 0.984375 -5.421875 L 0.140625 -5.421875 L 0.140625 -6.28125 L 0.984375 -6.28125 Z M 0.984375 -8.03125 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-0-11&quot;&gt;
&lt;path d=&quot;M 0.78125 -6.25 L 1.84375 -6.25 L 1.84375 0 L 0.78125 0 Z M 0.78125 -8.609375 L 1.84375 -8.609375 L 1.84375 -7.40625 L 0.78125 -7.40625 Z M 0.78125 -8.609375 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-0-12&quot;&gt;
&lt;path d=&quot;M 3.1875 -6.453125 C 3.894531 -6.453125 4.46875 -6.28125 4.90625 -5.9375 C 5.351562 -5.59375 5.625 -5.003906 5.71875 -4.171875 L 4.6875 -4.171875 C 4.625 -4.554688 4.484375 -4.875 4.265625 -5.125 C 4.046875 -5.382812 3.6875 -5.515625 3.1875 -5.515625 C 2.519531 -5.515625 2.039062 -5.1875 1.75 -4.53125 C 1.5625 -4.101562 1.46875 -3.578125 1.46875 -2.953125 C 1.46875 -2.328125 1.597656 -1.796875 1.859375 -1.359375 C 2.128906 -0.929688 2.550781 -0.71875 3.125 -0.71875 C 3.5625 -0.71875 3.90625 -0.851562 4.15625 -1.125 C 4.414062 -1.394531 4.59375 -1.757812 4.6875 -2.21875 L 5.71875 -2.21875 C 5.601562 -1.382812 5.3125 -0.773438 4.84375 -0.390625 C 4.375 -0.00390625 3.773438 0.1875 3.046875 0.1875 C 2.222656 0.1875 1.566406 -0.113281 1.078125 -0.71875 C 0.585938 -1.320312 0.34375 -2.070312 0.34375 -2.96875 C 0.34375 -4.070312 0.609375 -4.925781 1.140625 -5.53125 C 1.679688 -6.144531 2.363281 -6.453125 3.1875 -6.453125 Z M 3.03125 -6.421875 Z M 3.03125 -6.421875 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-0-13&quot;&gt;
&lt;path d=&quot;M 1.578125 -1.671875 C 1.578125 -1.367188 1.6875 -1.128906 1.90625 -0.953125 C 2.132812 -0.773438 2.398438 -0.6875 2.703125 -0.6875 C 3.078125 -0.6875 3.4375 -0.769531 3.78125 -0.9375 C 4.375 -1.226562 4.671875 -1.695312 4.671875 -2.34375 L 4.671875 -3.1875 C 4.535156 -3.113281 4.363281 -3.046875 4.15625 -2.984375 C 3.957031 -2.929688 3.757812 -2.894531 3.5625 -2.875 L 2.9375 -2.796875 C 2.550781 -2.742188 2.257812 -2.660156 2.0625 -2.546875 C 1.738281 -2.367188 1.578125 -2.078125 1.578125 -1.671875 Z M 4.140625 -3.796875 C 4.378906 -3.828125 4.539062 -3.929688 4.625 -4.109375 C 4.664062 -4.203125 4.6875 -4.335938 4.6875 -4.515625 C 4.6875 -4.867188 4.554688 -5.125 4.296875 -5.28125 C 4.046875 -5.445312 3.6875 -5.53125 3.21875 -5.53125 C 2.664062 -5.53125 2.273438 -5.382812 2.046875 -5.09375 C 1.910156 -4.925781 1.820312 -4.679688 1.78125 -4.359375 L 0.796875 -4.359375 C 0.816406 -5.128906 1.066406 -5.664062 1.546875 -5.96875 C 2.035156 -6.269531 2.597656 -6.421875 3.234375 -6.421875 C 3.972656 -6.421875 4.570312 -6.28125 5.03125 -6 C 5.488281 -5.71875 5.71875 -5.28125 5.71875 -4.6875 L 5.71875 -1.078125 C 5.71875 -0.972656 5.738281 -0.882812 5.78125 -0.8125 C 5.832031 -0.75 5.929688 -0.71875 6.078125 -0.71875 C 6.117188 -0.71875 6.164062 -0.71875 6.21875 -0.71875 C 6.28125 -0.726562 6.347656 -0.738281 6.421875 -0.75 L 6.421875 0.03125 C 6.253906 0.0703125 6.125 0.0976562 6.03125 0.109375 C 5.945312 0.128906 5.832031 0.140625 5.6875 0.140625 C 5.320312 0.140625 5.0625 0.0078125 4.90625 -0.25 C 4.8125 -0.382812 4.75 -0.578125 4.71875 -0.828125 C 4.5 -0.546875 4.1875 -0.300781 3.78125 -0.09375 C 3.382812 0.113281 2.945312 0.21875 2.46875 0.21875 C 1.882812 0.21875 1.40625 0.0390625 1.03125 -0.3125 C 0.664062 -0.664062 0.484375 -1.109375 0.484375 -1.640625 C 0.484375 -2.222656 0.664062 -2.675781 1.03125 -3 C 1.394531 -3.320312 1.867188 -3.519531 2.453125 -3.59375 Z M 3.265625 -6.421875 Z M 3.265625 -6.421875 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-0-14&quot;&gt;
&lt;path d=&quot;M 0.796875 -8.609375 L 1.859375 -8.609375 L 1.859375 0 L 0.796875 0 Z M 0.796875 -8.609375 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-0-15&quot;&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-0-16&quot;&gt;
&lt;path d=&quot;M 8.796875 -0.03125 L 8.203125 0.6875 L 6.875 -0.328125 C 6.550781 -0.148438 6.203125 -0.0078125 5.828125 0.09375 C 5.460938 0.195312 5.054688 0.25 4.609375 0.25 C 3.273438 0.25 2.226562 -0.1875 1.46875 -1.0625 C 0.800781 -1.914062 0.46875 -2.984375 0.46875 -4.265625 C 0.46875 -5.421875 0.757812 -6.414062 1.34375 -7.25 C 2.082031 -8.3125 3.175781 -8.84375 4.625 -8.84375 C 6.144531 -8.84375 7.269531 -8.351562 8 -7.375 C 8.570312 -6.613281 8.859375 -5.640625 8.859375 -4.453125 C 8.859375 -3.898438 8.789062 -3.367188 8.65625 -2.859375 C 8.445312 -2.078125 8.097656 -1.4375 7.609375 -0.9375 Z M 4.75 -0.796875 C 4.988281 -0.796875 5.210938 -0.8125 5.421875 -0.84375 C 5.640625 -0.875 5.828125 -0.9375 5.984375 -1.03125 L 5.046875 -1.78125 L 5.625 -2.5 L 6.75 -1.625 C 7.101562 -2.03125 7.34375 -2.484375 7.46875 -2.984375 C 7.601562 -3.492188 7.671875 -3.976562 7.671875 -4.4375 C 7.671875 -5.445312 7.40625 -6.257812 6.875 -6.875 C 6.34375 -7.5 5.617188 -7.8125 4.703125 -7.8125 C 3.773438 -7.8125 3.035156 -7.515625 2.484375 -6.921875 C 1.941406 -6.328125 1.671875 -5.414062 1.671875 -4.1875 C 1.671875 -3.144531 1.929688 -2.316406 2.453125 -1.703125 C 2.972656 -1.097656 3.738281 -0.796875 4.75 -0.796875 Z M 4.75 -0.796875 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-0-17&quot;&gt;
&lt;path d=&quot;M 1.828125 -6.28125 L 1.828125 -2.109375 C 1.828125 -1.785156 1.878906 -1.523438 1.984375 -1.328125 C 2.171875 -0.953125 2.519531 -0.765625 3.03125 -0.765625 C 3.757812 -0.765625 4.257812 -1.09375 4.53125 -1.75 C 4.675781 -2.101562 4.75 -2.582031 4.75 -3.1875 L 4.75 -6.28125 L 5.796875 -6.28125 L 5.796875 0 L 4.8125 0 L 4.8125 -0.921875 C 4.675781 -0.679688 4.507812 -0.484375 4.3125 -0.328125 C 3.90625 0.00390625 3.414062 0.171875 2.84375 0.171875 C 1.945312 0.171875 1.335938 -0.128906 1.015625 -0.734375 C 0.835938 -1.046875 0.75 -1.472656 0.75 -2.015625 L 0.75 -6.28125 Z M 3.28125 -6.421875 Z M 3.28125 -6.421875 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-0-18&quot;&gt;
&lt;path d=&quot;M 0.78125 -6.28125 L 1.78125 -6.28125 L 1.78125 -5.390625 C 2.070312 -5.753906 2.382812 -6.015625 2.71875 -6.171875 C 3.050781 -6.335938 3.421875 -6.421875 3.828125 -6.421875 C 4.710938 -6.421875 5.3125 -6.109375 5.625 -5.484375 C 5.800781 -5.140625 5.890625 -4.65625 5.890625 -4.03125 L 5.890625 0 L 4.8125 0 L 4.8125 -3.953125 C 4.8125 -4.335938 4.753906 -4.644531 4.640625 -4.875 C 4.453125 -5.269531 4.113281 -5.46875 3.625 -5.46875 C 3.375 -5.46875 3.171875 -5.441406 3.015625 -5.390625 C 2.722656 -5.304688 2.46875 -5.132812 2.25 -4.875 C 2.070312 -4.664062 1.957031 -4.453125 1.90625 -4.234375 C 1.851562 -4.015625 1.828125 -3.695312 1.828125 -3.28125 L 1.828125 0 L 0.78125 0 Z M 3.25 -6.421875 Z M 3.25 -6.421875 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-0-19&quot;&gt;
&lt;path d=&quot;M 1.40625 -1.96875 C 1.4375 -1.613281 1.523438 -1.34375 1.671875 -1.15625 C 1.929688 -0.820312 2.390625 -0.65625 3.046875 -0.65625 C 3.441406 -0.65625 3.785156 -0.738281 4.078125 -0.90625 C 4.378906 -1.070312 4.53125 -1.332031 4.53125 -1.6875 C 4.53125 -1.957031 4.410156 -2.164062 4.171875 -2.3125 C 4.015625 -2.394531 3.710938 -2.492188 3.265625 -2.609375 L 2.421875 -2.8125 C 1.890625 -2.945312 1.5 -3.097656 1.25 -3.265625 C 0.789062 -3.546875 0.5625 -3.941406 0.5625 -4.453125 C 0.5625 -5.046875 0.773438 -5.523438 1.203125 -5.890625 C 1.628906 -6.253906 2.207031 -6.4375 2.9375 -6.4375 C 3.875 -6.4375 4.550781 -6.160156 4.96875 -5.609375 C 5.238281 -5.253906 5.367188 -4.875 5.359375 -4.46875 L 4.359375 -4.46875 C 4.335938 -4.707031 4.253906 -4.925781 4.109375 -5.125 C 3.867188 -5.394531 3.445312 -5.53125 2.84375 -5.53125 C 2.445312 -5.53125 2.144531 -5.453125 1.9375 -5.296875 C 1.738281 -5.148438 1.640625 -4.953125 1.640625 -4.703125 C 1.640625 -4.429688 1.773438 -4.210938 2.046875 -4.046875 C 2.203125 -3.953125 2.429688 -3.867188 2.734375 -3.796875 L 3.421875 -3.625 C 4.179688 -3.4375 4.691406 -3.257812 4.953125 -3.09375 C 5.359375 -2.820312 5.5625 -2.394531 5.5625 -1.8125 C 5.5625 -1.257812 5.347656 -0.78125 4.921875 -0.375 C 4.503906 0.0273438 3.863281 0.234375 3 0.234375 C 2.0625 0.234375 1.394531 0.0234375 1 -0.390625 C 0.613281 -0.816406 0.410156 -1.34375 0.390625 -1.96875 Z M 2.953125 -6.421875 Z M 2.953125 -6.421875 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-1-0&quot;&gt;
&lt;path d=&quot;M -8.390625 -3.25 C -8.390625 -4.332031 -7.941406 -5.117188 -7.046875 -5.609375 C -6.359375 -5.984375 -5.410156 -6.171875 -4.203125 -6.171875 C -3.066406 -6.171875 -2.125 -6 -1.375 -5.65625 C -0.300781 -5.164062 0.234375 -4.359375 0.234375 -3.234375 C 0.234375 -2.234375 -0.203125 -1.484375 -1.078125 -0.984375 C -1.816406 -0.578125 -2.800781 -0.375 -4.03125 -0.375 C -4.976562 -0.375 -5.796875 -0.5 -6.484375 -0.75 C -7.753906 -1.207031 -8.390625 -2.039062 -8.390625 -3.25 Z M -0.734375 -3.234375 C -0.734375 -3.785156 -0.972656 -4.222656 -1.453125 -4.546875 C -1.941406 -4.867188 -2.847656 -5.03125 -4.171875 -5.03125 C -5.117188 -5.03125 -5.898438 -4.910156 -6.515625 -4.671875 C -7.128906 -4.441406 -7.4375 -3.988281 -7.4375 -3.3125 C -7.4375 -2.6875 -7.144531 -2.226562 -6.5625 -1.9375 C -5.976562 -1.65625 -5.117188 -1.515625 -3.984375 -1.515625 C -3.128906 -1.515625 -2.441406 -1.609375 -1.921875 -1.796875 C -1.128906 -2.078125 -0.734375 -2.554688 -0.734375 -3.234375 Z M -0.734375 -3.234375 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-1-1&quot;&gt;
&lt;path d=&quot;M -1.28125 -1.03125 L -1.28125 -2.25 L 0 -2.25 L 0 -1.03125 Z M -1.28125 -1.03125 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-1-2&quot;&gt;
&lt;path d=&quot;M -2.140625 -1.484375 C -1.535156 -1.554688 -1.117188 -1.835938 -0.890625 -2.328125 C -0.773438 -2.578125 -0.71875 -2.863281 -0.71875 -3.1875 C -0.71875 -3.8125 -0.914062 -4.273438 -1.3125 -4.578125 C -1.707031 -4.878906 -2.148438 -5.03125 -2.640625 -5.03125 C -3.222656 -5.03125 -3.675781 -4.847656 -4 -4.484375 C -4.320312 -4.128906 -4.484375 -3.703125 -4.484375 -3.203125 C -4.484375 -2.835938 -4.410156 -2.523438 -4.265625 -2.265625 C -4.128906 -2.003906 -3.9375 -1.785156 -3.6875 -1.609375 L -3.734375 -0.6875 L -8.25 -1.328125 L -8.25 -5.6875 L -7.234375 -5.6875 L -7.234375 -2.125 L -4.90625 -1.765625 C -5.050781 -1.960938 -5.160156 -2.148438 -5.234375 -2.328125 C -5.359375 -2.640625 -5.421875 -3 -5.421875 -3.40625 C -5.421875 -4.175781 -5.171875 -4.828125 -4.671875 -5.359375 C -4.179688 -5.898438 -3.554688 -6.171875 -2.796875 -6.171875 C -2.003906 -6.171875 -1.300781 -5.921875 -0.6875 -5.421875 C -0.0820312 -4.929688 0.21875 -4.148438 0.21875 -3.078125 C 0.21875 -2.398438 0.0234375 -1.796875 -0.359375 -1.265625 C -0.742188 -0.742188 -1.335938 -0.453125 -2.140625 -0.390625 Z M -2.140625 -1.484375 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-1-3&quot;&gt;
&lt;path d=&quot;M -5.9375 -1.15625 L -6.75 -1.15625 C -6.820312 -1.914062 -6.945312 -2.441406 -7.125 -2.734375 C -7.300781 -3.035156 -7.710938 -3.265625 -8.359375 -3.421875 L -8.359375 -4.25 L 0 -4.25 L 0 -3.125 L -5.9375 -3.125 Z M -5.9375 -1.15625 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-1-4&quot;&gt;
&lt;path d=&quot;M 0 -0.375 C -0.71875 -0.414062 -1.34375 -0.566406 -1.875 -0.828125 C -2.414062 -1.085938 -2.90625 -1.59375 -3.34375 -2.34375 L -4 -3.46875 C -4.289062 -3.96875 -4.539062 -4.320312 -4.75 -4.53125 C -5.070312 -4.851562 -5.441406 -5.015625 -5.859375 -5.015625 C -6.347656 -5.015625 -6.734375 -4.863281 -7.015625 -4.5625 C -7.304688 -4.269531 -7.453125 -3.882812 -7.453125 -3.40625 C -7.453125 -2.675781 -7.179688 -2.175781 -6.640625 -1.90625 C -6.335938 -1.75 -5.929688 -1.664062 -5.421875 -1.65625 L -5.421875 -0.578125 C -6.148438 -0.585938 -6.742188 -0.722656 -7.203125 -0.984375 C -8.015625 -1.441406 -8.421875 -2.25 -8.421875 -3.40625 C -8.421875 -4.363281 -8.160156 -5.0625 -7.640625 -5.5 C -7.117188 -5.945312 -6.539062 -6.171875 -5.90625 -6.171875 C -5.238281 -6.171875 -4.664062 -5.9375 -4.1875 -5.46875 C -3.90625 -5.195312 -3.566406 -4.707031 -3.171875 -4 L -2.734375 -3.1875 C -2.523438 -2.8125 -2.320312 -2.515625 -2.125 -2.296875 C -1.789062 -1.898438 -1.414062 -1.648438 -1 -1.546875 L -1 -6.140625 L 0 -6.140625 Z M 0 -0.375 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-1-5&quot;&gt;
&lt;path d=&quot;M -2.78125 -1.671875 C -2.289062 -1.703125 -1.894531 -1.816406 -1.59375 -2.015625 C -1.019531 -2.410156 -0.734375 -3.09375 -0.734375 -4.0625 C -0.734375 -4.5 -0.796875 -4.898438 -0.921875 -5.265625 C -1.160156 -5.960938 -1.59375 -6.3125 -2.21875 -6.3125 C -2.6875 -6.3125 -3.019531 -6.160156 -3.21875 -5.859375 C -3.414062 -5.566406 -3.585938 -5.101562 -3.734375 -4.46875 L -4 -3.3125 C -4.164062 -2.539062 -4.351562 -2 -4.5625 -1.6875 C -4.925781 -1.144531 -5.460938 -0.875 -6.171875 -0.875 C -6.953125 -0.875 -7.585938 -1.140625 -8.078125 -1.671875 C -8.578125 -2.203125 -8.828125 -2.957031 -8.828125 -3.9375 C -8.828125 -4.84375 -8.609375 -5.609375 -8.171875 -6.234375 C -7.734375 -6.867188 -7.035156 -7.1875 -6.078125 -7.1875 L -6.078125 -6.09375 C -6.546875 -6.03125 -6.898438 -5.90625 -7.140625 -5.71875 C -7.585938 -5.363281 -7.8125 -4.757812 -7.8125 -3.90625 C -7.8125 -3.21875 -7.664062 -2.722656 -7.375 -2.421875 C -7.09375 -2.117188 -6.757812 -1.96875 -6.375 -1.96875 C -5.957031 -1.96875 -5.648438 -2.144531 -5.453125 -2.5 C -5.328125 -2.726562 -5.171875 -3.25 -4.984375 -4.0625 L -4.703125 -5.28125 C -4.566406 -5.851562 -4.382812 -6.300781 -4.15625 -6.625 C -3.757812 -7.164062 -3.175781 -7.4375 -2.40625 -7.4375 C -1.457031 -7.4375 -0.773438 -7.085938 -0.359375 -6.390625 C 0.0429688 -5.703125 0.25 -4.898438 0.25 -3.984375 C 0.25 -2.910156 -0.0195312 -2.070312 -0.5625 -1.46875 C -1.113281 -0.863281 -1.851562 -0.566406 -2.78125 -0.578125 Z M -8.84375 -4.03125 Z M -8.84375 -4.03125 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-1-6&quot;&gt;
&lt;path d=&quot;M -1.671875 -1.578125 C -1.367188 -1.578125 -1.128906 -1.6875 -0.953125 -1.90625 C -0.773438 -2.132812 -0.6875 -2.398438 -0.6875 -2.703125 C -0.6875 -3.078125 -0.769531 -3.4375 -0.9375 -3.78125 C -1.226562 -4.375 -1.695312 -4.671875 -2.34375 -4.671875 L -3.1875 -4.671875 C -3.113281 -4.535156 -3.046875 -4.363281 -2.984375 -4.15625 C -2.929688 -3.957031 -2.894531 -3.757812 -2.875 -3.5625 L -2.796875 -2.9375 C -2.742188 -2.550781 -2.660156 -2.257812 -2.546875 -2.0625 C -2.367188 -1.738281 -2.078125 -1.578125 -1.671875 -1.578125 Z M -3.796875 -4.140625 C -3.828125 -4.378906 -3.929688 -4.539062 -4.109375 -4.625 C -4.203125 -4.664062 -4.335938 -4.6875 -4.515625 -4.6875 C -4.867188 -4.6875 -5.125 -4.554688 -5.28125 -4.296875 C -5.445312 -4.046875 -5.53125 -3.6875 -5.53125 -3.21875 C -5.53125 -2.664062 -5.382812 -2.273438 -5.09375 -2.046875 C -4.925781 -1.910156 -4.679688 -1.820312 -4.359375 -1.78125 L -4.359375 -0.796875 C -5.128906 -0.816406 -5.664062 -1.066406 -5.96875 -1.546875 C -6.269531 -2.035156 -6.421875 -2.597656 -6.421875 -3.234375 C -6.421875 -3.972656 -6.28125 -4.570312 -6 -5.03125 C -5.71875 -5.488281 -5.28125 -5.71875 -4.6875 -5.71875 L -1.078125 -5.71875 C -0.972656 -5.71875 -0.882812 -5.738281 -0.8125 -5.78125 C -0.75 -5.832031 -0.71875 -5.929688 -0.71875 -6.078125 C -0.71875 -6.117188 -0.71875 -6.164062 -0.71875 -6.21875 C -0.726562 -6.28125 -0.738281 -6.347656 -0.75 -6.421875 L 0.03125 -6.421875 C 0.0703125 -6.253906 0.0976562 -6.125 0.109375 -6.03125 C 0.128906 -5.945312 0.140625 -5.832031 0.140625 -5.6875 C 0.140625 -5.320312 0.0078125 -5.0625 -0.25 -4.90625 C -0.382812 -4.8125 -0.578125 -4.75 -0.828125 -4.71875 C -0.546875 -4.5 -0.300781 -4.1875 -0.09375 -3.78125 C 0.113281 -3.382812 0.21875 -2.945312 0.21875 -2.46875 C 0.21875 -1.882812 0.0390625 -1.40625 -0.3125 -1.03125 C -0.664062 -0.664062 -1.109375 -0.484375 -1.640625 -0.484375 C -2.222656 -0.484375 -2.675781 -0.664062 -3 -1.03125 C -3.320312 -1.394531 -3.519531 -1.867188 -3.59375 -2.453125 Z M -6.421875 -3.265625 Z M -6.421875 -3.265625 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-1-7&quot;&gt;
&lt;path d=&quot;M -6.28125 -0.78125 L -6.28125 -1.8125 L -5.390625 -1.8125 C -5.691406 -2.0625 -5.914062 -2.289062 -6.0625 -2.5 C -6.300781 -2.84375 -6.421875 -3.238281 -6.421875 -3.6875 C -6.421875 -4.1875 -6.296875 -4.585938 -6.046875 -4.890625 C -5.910156 -5.054688 -5.703125 -5.210938 -5.421875 -5.359375 C -5.765625 -5.585938 -6.015625 -5.859375 -6.171875 -6.171875 C -6.335938 -6.492188 -6.421875 -6.851562 -6.421875 -7.25 C -6.421875 -8.09375 -6.113281 -8.664062 -5.5 -8.96875 C -5.175781 -9.132812 -4.734375 -9.21875 -4.171875 -9.21875 L 0 -9.21875 L 0 -8.125 L -4.359375 -8.125 C -4.773438 -8.125 -5.0625 -8.019531 -5.21875 -7.8125 C -5.375 -7.601562 -5.453125 -7.347656 -5.453125 -7.046875 C -5.453125 -6.628906 -5.3125 -6.269531 -5.03125 -5.96875 C -4.757812 -5.675781 -4.300781 -5.53125 -3.65625 -5.53125 L 0 -5.53125 L 0 -4.453125 L -4.09375 -4.453125 C -4.519531 -4.453125 -4.832031 -4.398438 -5.03125 -4.296875 C -5.320312 -4.140625 -5.46875 -3.84375 -5.46875 -3.40625 C -5.46875 -3.007812 -5.3125 -2.644531 -5 -2.3125 C -4.695312 -1.988281 -4.140625 -1.828125 -3.328125 -1.828125 L 0 -1.828125 L 0 -0.78125 Z M -6.28125 -0.78125 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-1-8&quot;&gt;
&lt;path d=&quot;M -0.703125 -3.421875 C -0.703125 -3.910156 -0.910156 -4.316406 -1.328125 -4.640625 C -1.742188 -4.972656 -2.359375 -5.140625 -3.171875 -5.140625 C -3.671875 -5.140625 -4.101562 -5.066406 -4.46875 -4.921875 C -5.15625 -4.648438 -5.5 -4.148438 -5.5 -3.421875 C -5.5 -2.691406 -5.132812 -2.191406 -4.40625 -1.921875 C -4.019531 -1.773438 -3.523438 -1.703125 -2.921875 -1.703125 C -2.429688 -1.703125 -2.019531 -1.773438 -1.6875 -1.921875 C -1.03125 -2.191406 -0.703125 -2.691406 -0.703125 -3.421875 Z M -6.25 -0.6875 L -6.25 -1.71875 L -5.421875 -1.71875 C -5.703125 -1.925781 -5.921875 -2.15625 -6.078125 -2.40625 C -6.304688 -2.757812 -6.421875 -3.175781 -6.421875 -3.65625 C -6.421875 -4.375 -6.148438 -4.976562 -5.609375 -5.46875 C -5.066406 -5.96875 -4.289062 -6.21875 -3.28125 -6.21875 C -1.90625 -6.21875 -0.925781 -5.859375 -0.34375 -5.140625 C 0.0273438 -4.691406 0.21875 -4.164062 0.21875 -3.5625 C 0.21875 -3.09375 0.113281 -2.695312 -0.09375 -2.375 C -0.21875 -2.1875 -0.421875 -1.976562 -0.703125 -1.75 L 2.5 -1.75 L 2.5 -0.6875 Z M -6.25 -0.6875 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-1-9&quot;&gt;
&lt;path d=&quot;M -8.609375 -0.796875 L -8.609375 -1.859375 L 0 -1.859375 L 0 -0.796875 Z M -8.609375 -0.796875 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-1-10&quot;&gt;
&lt;path d=&quot;M -6.421875 -3.390625 C -6.421875 -3.835938 -6.316406 -4.269531 -6.109375 -4.6875 C -5.898438 -5.101562 -5.628906 -5.421875 -5.296875 -5.640625 C -4.972656 -5.847656 -4.601562 -5.988281 -4.1875 -6.0625 C -3.894531 -6.125 -3.429688 -6.15625 -2.796875 -6.15625 L -2.796875 -1.546875 C -2.160156 -1.566406 -1.648438 -1.71875 -1.265625 -2 C -0.878906 -2.28125 -0.6875 -2.71875 -0.6875 -3.3125 C -0.6875 -3.863281 -0.867188 -4.300781 -1.234375 -4.625 C -1.441406 -4.8125 -1.6875 -4.945312 -1.96875 -5.03125 L -1.96875 -6.0625 C -1.738281 -6.039062 -1.484375 -5.953125 -1.203125 -5.796875 C -0.921875 -5.640625 -0.6875 -5.46875 -0.5 -5.28125 C -0.1875 -4.957031 0.0195312 -4.554688 0.125 -4.078125 C 0.1875 -3.828125 0.21875 -3.539062 0.21875 -3.21875 C 0.21875 -2.4375 -0.0625 -1.773438 -0.625 -1.234375 C -1.195312 -0.691406 -1.992188 -0.421875 -3.015625 -0.421875 C -4.023438 -0.421875 -4.84375 -0.691406 -5.46875 -1.234375 C -6.101562 -1.785156 -6.421875 -2.503906 -6.421875 -3.390625 Z M -3.640625 -5.0625 C -4.097656 -5.019531 -4.460938 -4.921875 -4.734375 -4.765625 C -5.242188 -4.484375 -5.5 -4.003906 -5.5 -3.328125 C -5.5 -2.835938 -5.320312 -2.425781 -4.96875 -2.09375 C -4.625 -1.769531 -4.179688 -1.597656 -3.640625 -1.578125 Z M -6.421875 -3.28125 Z M -6.421875 -3.28125 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-1-11&quot;&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-1-12&quot;&gt;
&lt;path d=&quot;M -0.03125 -8.796875 L 0.6875 -8.203125 L -0.328125 -6.875 C -0.148438 -6.550781 -0.0078125 -6.203125 0.09375 -5.828125 C 0.195312 -5.460938 0.25 -5.054688 0.25 -4.609375 C 0.25 -3.273438 -0.1875 -2.226562 -1.0625 -1.46875 C -1.914062 -0.800781 -2.984375 -0.46875 -4.265625 -0.46875 C -5.421875 -0.46875 -6.414062 -0.757812 -7.25 -1.34375 C -8.3125 -2.082031 -8.84375 -3.175781 -8.84375 -4.625 C -8.84375 -6.144531 -8.351562 -7.269531 -7.375 -8 C -6.613281 -8.570312 -5.640625 -8.859375 -4.453125 -8.859375 C -3.898438 -8.859375 -3.367188 -8.789062 -2.859375 -8.65625 C -2.078125 -8.445312 -1.4375 -8.097656 -0.9375 -7.609375 Z M -0.796875 -4.75 C -0.796875 -4.988281 -0.8125 -5.210938 -0.84375 -5.421875 C -0.875 -5.640625 -0.9375 -5.828125 -1.03125 -5.984375 L -1.78125 -5.046875 L -2.5 -5.625 L -1.625 -6.75 C -2.03125 -7.101562 -2.484375 -7.34375 -2.984375 -7.46875 C -3.492188 -7.601562 -3.976562 -7.671875 -4.4375 -7.671875 C -5.445312 -7.671875 -6.257812 -7.40625 -6.875 -6.875 C -7.5 -6.34375 -7.8125 -5.617188 -7.8125 -4.703125 C -7.8125 -3.773438 -7.515625 -3.035156 -6.921875 -2.484375 C -6.328125 -1.941406 -5.414062 -1.671875 -4.1875 -1.671875 C -3.144531 -1.671875 -2.316406 -1.929688 -1.703125 -2.453125 C -1.097656 -2.972656 -0.796875 -3.738281 -0.796875 -4.75 Z M -0.796875 -4.75 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-1-13&quot;&gt;
&lt;path d=&quot;M -6.28125 -1.828125 L -2.109375 -1.828125 C -1.785156 -1.828125 -1.523438 -1.878906 -1.328125 -1.984375 C -0.953125 -2.171875 -0.765625 -2.519531 -0.765625 -3.03125 C -0.765625 -3.757812 -1.09375 -4.257812 -1.75 -4.53125 C -2.101562 -4.675781 -2.582031 -4.75 -3.1875 -4.75 L -6.28125 -4.75 L -6.28125 -5.796875 L 0 -5.796875 L 0 -4.8125 L -0.921875 -4.8125 C -0.679688 -4.675781 -0.484375 -4.507812 -0.328125 -4.3125 C 0.00390625 -3.90625 0.171875 -3.414062 0.171875 -2.84375 C 0.171875 -1.945312 -0.128906 -1.335938 -0.734375 -1.015625 C -1.046875 -0.835938 -1.472656 -0.75 -2.015625 -0.75 L -6.28125 -0.75 Z M -6.421875 -3.28125 Z M -6.421875 -3.28125 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-1-14&quot;&gt;
&lt;path d=&quot;M -6.28125 -0.78125 L -6.28125 -1.78125 L -5.390625 -1.78125 C -5.753906 -2.070312 -6.015625 -2.382812 -6.171875 -2.71875 C -6.335938 -3.050781 -6.421875 -3.421875 -6.421875 -3.828125 C -6.421875 -4.710938 -6.109375 -5.3125 -5.484375 -5.625 C -5.140625 -5.800781 -4.65625 -5.890625 -4.03125 -5.890625 L 0 -5.890625 L 0 -4.8125 L -3.953125 -4.8125 C -4.335938 -4.8125 -4.644531 -4.753906 -4.875 -4.640625 C -5.269531 -4.453125 -5.46875 -4.113281 -5.46875 -3.625 C -5.46875 -3.375 -5.441406 -3.171875 -5.390625 -3.015625 C -5.304688 -2.722656 -5.132812 -2.46875 -4.875 -2.25 C -4.664062 -2.070312 -4.453125 -1.957031 -4.234375 -1.90625 C -4.015625 -1.851562 -3.695312 -1.828125 -3.28125 -1.828125 L 0 -1.828125 L 0 -0.78125 Z M -6.421875 -3.25 Z M -6.421875 -3.25 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-1-15&quot;&gt;
&lt;path d=&quot;M -8.03125 -0.984375 L -8.03125 -2.046875 L -6.28125 -2.046875 L -6.28125 -3.046875 L -5.421875 -3.046875 L -5.421875 -2.046875 L -1.3125 -2.046875 C -1.09375 -2.046875 -0.945312 -2.125 -0.875 -2.28125 C -0.832031 -2.351562 -0.8125 -2.488281 -0.8125 -2.6875 C -0.8125 -2.738281 -0.8125 -2.789062 -0.8125 -2.84375 C -0.820312 -2.90625 -0.828125 -2.972656 -0.828125 -3.046875 L 0 -3.046875 C 0.03125 -2.929688 0.0507812 -2.804688 0.0625 -2.671875 C 0.0820312 -2.546875 0.09375 -2.40625 0.09375 -2.25 C 0.09375 -1.757812 -0.03125 -1.425781 -0.28125 -1.25 C -0.53125 -1.070312 -0.859375 -0.984375 -1.265625 -0.984375 L -5.421875 -0.984375 L -5.421875 -0.140625 L -6.28125 -0.140625 L -6.28125 -0.984375 Z M -8.03125 -0.984375 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-1-16&quot;&gt;
&lt;path d=&quot;M -6.25 -0.78125 L -6.25 -1.84375 L 0 -1.84375 L 0 -0.78125 Z M -8.609375 -0.78125 L -8.609375 -1.84375 L -7.40625 -1.84375 L -7.40625 -0.78125 Z M -8.609375 -0.78125 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-1-17&quot;&gt;
&lt;path d=&quot;M -1.96875 -1.40625 C -1.613281 -1.4375 -1.34375 -1.523438 -1.15625 -1.671875 C -0.820312 -1.929688 -0.65625 -2.390625 -0.65625 -3.046875 C -0.65625 -3.441406 -0.738281 -3.785156 -0.90625 -4.078125 C -1.070312 -4.378906 -1.332031 -4.53125 -1.6875 -4.53125 C -1.957031 -4.53125 -2.164062 -4.410156 -2.3125 -4.171875 C -2.394531 -4.015625 -2.492188 -3.710938 -2.609375 -3.265625 L -2.8125 -2.421875 C -2.945312 -1.890625 -3.097656 -1.5 -3.265625 -1.25 C -3.546875 -0.789062 -3.941406 -0.5625 -4.453125 -0.5625 C -5.046875 -0.5625 -5.523438 -0.773438 -5.890625 -1.203125 C -6.253906 -1.628906 -6.4375 -2.207031 -6.4375 -2.9375 C -6.4375 -3.875 -6.160156 -4.550781 -5.609375 -4.96875 C -5.253906 -5.238281 -4.875 -5.367188 -4.46875 -5.359375 L -4.46875 -4.359375 C -4.707031 -4.335938 -4.925781 -4.253906 -5.125 -4.109375 C -5.394531 -3.867188 -5.53125 -3.445312 -5.53125 -2.84375 C -5.53125 -2.445312 -5.453125 -2.144531 -5.296875 -1.9375 C -5.148438 -1.738281 -4.953125 -1.640625 -4.703125 -1.640625 C -4.429688 -1.640625 -4.210938 -1.773438 -4.046875 -2.046875 C -3.953125 -2.203125 -3.867188 -2.429688 -3.796875 -2.734375 L -3.625 -3.421875 C -3.4375 -4.179688 -3.257812 -4.691406 -3.09375 -4.953125 C -2.820312 -5.359375 -2.394531 -5.5625 -1.8125 -5.5625 C -1.257812 -5.5625 -0.78125 -5.347656 -0.375 -4.921875 C 0.0273438 -4.503906 0.234375 -3.863281 0.234375 -3 C 0.234375 -2.0625 0.0234375 -1.394531 -0.390625 -1 C -0.816406 -0.613281 -1.34375 -0.410156 -1.96875 -0.390625 Z M -6.421875 -2.953125 Z M -6.421875 -2.953125 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-2-0&quot;&gt;
&lt;path d=&quot;M 9.484375 0 L 7.3125 0 L 3.078125 -7.359375 L 3.078125 0 L 1.0625 0 L 1.0625 -10.375 L 3.328125 -10.375 L 7.46875 -3.125 L 7.46875 -10.375 L 9.484375 -10.375 Z M 9.484375 0 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-2-1&quot;&gt;
&lt;path d=&quot;M 7.328125 -6.703125 C 7.972656 -5.890625 8.296875 -4.925781 8.296875 -3.8125 C 8.296875 -2.6875 7.972656 -1.722656 7.328125 -0.921875 C 6.679688 -0.128906 5.695312 0.265625 4.375 0.265625 C 3.0625 0.265625 2.082031 -0.128906 1.4375 -0.921875 C 0.789062 -1.722656 0.46875 -2.6875 0.46875 -3.8125 C 0.46875 -4.925781 0.789062 -5.882812 1.4375 -6.6875 C 2.082031 -7.5 3.0625 -7.90625 4.375 -7.90625 C 5.695312 -7.90625 6.679688 -7.503906 7.328125 -6.703125 Z M 4.375 -6.21875 C 3.789062 -6.21875 3.335938 -6.007812 3.015625 -5.59375 C 2.703125 -5.175781 2.546875 -4.582031 2.546875 -3.8125 C 2.546875 -3.050781 2.703125 -2.457031 3.015625 -2.03125 C 3.335938 -1.613281 3.789062 -1.40625 4.375 -1.40625 C 4.957031 -1.40625 5.40625 -1.613281 5.71875 -2.03125 C 6.039062 -2.457031 6.203125 -3.050781 6.203125 -3.8125 C 6.203125 -4.582031 6.039062 -5.175781 5.71875 -5.59375 C 5.40625 -6.007812 4.957031 -6.21875 4.375 -6.21875 Z M 4.375 -6.21875 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-2-2&quot;&gt;
&lt;path d=&quot;M 4.796875 -5.8125 C 3.984375 -5.8125 3.441406 -5.550781 3.171875 -5.03125 C 3.015625 -4.738281 2.9375 -4.285156 2.9375 -3.671875 L 2.9375 0 L 0.921875 0 L 0.921875 -7.671875 L 2.828125 -7.671875 L 2.828125 -6.328125 C 3.140625 -6.835938 3.410156 -7.1875 3.640625 -7.375 C 4.015625 -7.6875 4.5 -7.84375 5.09375 -7.84375 C 5.132812 -7.84375 5.164062 -7.84375 5.1875 -7.84375 C 5.21875 -7.84375 5.273438 -7.84375 5.359375 -7.84375 L 5.359375 -5.78125 C 5.234375 -5.789062 5.117188 -5.796875 5.015625 -5.796875 C 4.921875 -5.804688 4.847656 -5.8125 4.796875 -5.8125 Z M 4.796875 -5.8125 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-2-3&quot;&gt;
&lt;path d=&quot;M 5.234375 -5.5625 C 5.066406 -5.925781 4.738281 -6.109375 4.25 -6.109375 C 3.675781 -6.109375 3.289062 -5.925781 3.09375 -5.5625 C 2.988281 -5.34375 2.9375 -5.023438 2.9375 -4.609375 L 2.9375 0 L 0.90625 0 L 0.90625 -7.65625 L 2.84375 -7.65625 L 2.84375 -6.53125 C 3.09375 -6.925781 3.328125 -7.210938 3.546875 -7.390625 C 3.941406 -7.691406 4.445312 -7.84375 5.0625 -7.84375 C 5.644531 -7.84375 6.117188 -7.710938 6.484375 -7.453125 C 6.773438 -7.210938 6.992188 -6.90625 7.140625 -6.53125 C 7.410156 -6.976562 7.738281 -7.304688 8.125 -7.515625 C 8.539062 -7.734375 9 -7.84375 9.5 -7.84375 C 9.84375 -7.84375 10.175781 -7.773438 10.5 -7.640625 C 10.832031 -7.503906 11.128906 -7.273438 11.390625 -6.953125 C 11.609375 -6.679688 11.753906 -6.351562 11.828125 -5.96875 C 11.878906 -5.707031 11.90625 -5.328125 11.90625 -4.828125 L 11.890625 0 L 9.828125 0 L 9.828125 -4.875 C 9.828125 -5.164062 9.78125 -5.40625 9.6875 -5.59375 C 9.507812 -5.957031 9.179688 -6.140625 8.703125 -6.140625 C 8.148438 -6.140625 7.769531 -5.90625 7.5625 -5.4375 C 7.457031 -5.195312 7.40625 -4.90625 7.40625 -4.5625 L 7.40625 0 L 5.375 0 L 5.375 -4.5625 C 5.375 -5.019531 5.328125 -5.351562 5.234375 -5.5625 Z M 5.234375 -5.5625 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-2-4&quot;&gt;
&lt;path d=&quot;M 1.21875 -6.84375 C 1.75 -7.507812 2.660156 -7.84375 3.953125 -7.84375 C 4.796875 -7.84375 5.539062 -7.675781 6.1875 -7.34375 C 6.84375 -7.007812 7.171875 -6.382812 7.171875 -5.46875 L 7.171875 -1.953125 C 7.171875 -1.703125 7.175781 -1.40625 7.1875 -1.0625 C 7.195312 -0.800781 7.234375 -0.625 7.296875 -0.53125 C 7.367188 -0.4375 7.46875 -0.359375 7.59375 -0.296875 L 7.59375 0 L 5.421875 0 C 5.359375 -0.15625 5.3125 -0.300781 5.28125 -0.4375 C 5.257812 -0.570312 5.242188 -0.726562 5.234375 -0.90625 C 4.953125 -0.601562 4.632812 -0.347656 4.28125 -0.140625 C 3.84375 0.105469 3.351562 0.234375 2.8125 0.234375 C 2.113281 0.234375 1.539062 0.0351562 1.09375 -0.359375 C 0.644531 -0.753906 0.421875 -1.316406 0.421875 -2.046875 C 0.421875 -2.984375 0.78125 -3.664062 1.5 -4.09375 C 1.90625 -4.320312 2.492188 -4.484375 3.265625 -4.578125 L 3.953125 -4.65625 C 4.316406 -4.707031 4.578125 -4.769531 4.734375 -4.84375 C 5.023438 -4.957031 5.171875 -5.144531 5.171875 -5.40625 C 5.171875 -5.71875 5.0625 -5.929688 4.84375 -6.046875 C 4.625 -6.171875 4.304688 -6.234375 3.890625 -6.234375 C 3.410156 -6.234375 3.070312 -6.117188 2.875 -5.890625 C 2.738281 -5.710938 2.644531 -5.476562 2.59375 -5.1875 L 0.65625 -5.1875 C 0.695312 -5.851562 0.882812 -6.40625 1.21875 -6.84375 Z M 2.71875 -1.453125 C 2.90625 -1.296875 3.132812 -1.21875 3.40625 -1.21875 C 3.832031 -1.21875 4.226562 -1.34375 4.59375 -1.59375 C 4.957031 -1.851562 5.144531 -2.316406 5.15625 -2.984375 L 5.15625 -3.734375 C 5.03125 -3.648438 4.90625 -3.582031 4.78125 -3.53125 C 4.65625 -3.476562 4.476562 -3.429688 4.25 -3.390625 L 3.796875 -3.3125 C 3.378906 -3.238281 3.078125 -3.144531 2.890625 -3.03125 C 2.578125 -2.851562 2.421875 -2.570312 2.421875 -2.1875 C 2.421875 -1.84375 2.519531 -1.597656 2.71875 -1.453125 Z M 2.71875 -1.453125 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-2-5&quot;&gt;
&lt;path d=&quot;M 0.984375 -10.375 L 2.984375 -10.375 L 2.984375 0 L 0.984375 0 Z M 0.984375 -10.375 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-2-6&quot;&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-2-7&quot;&gt;
&lt;path d=&quot;M 7.328125 0.0625 C 6.867188 0.207031 6.3125 0.28125 5.65625 0.28125 C 4.3125 0.28125 3.195312 -0.117188 2.3125 -0.921875 C 1.238281 -1.890625 0.703125 -3.316406 0.703125 -5.203125 C 0.703125 -7.097656 1.253906 -8.53125 2.359375 -9.5 C 3.253906 -10.289062 4.367188 -10.6875 5.703125 -10.6875 C 7.035156 -10.6875 8.160156 -10.265625 9.078125 -9.421875 C 10.128906 -8.453125 10.65625 -7.097656 10.65625 -5.359375 C 10.65625 -4.429688 10.539062 -3.65625 10.3125 -3.03125 C 10.125 -2.4375 9.851562 -1.941406 9.5 -1.546875 L 10.703125 -0.421875 L 9.5625 0.75 L 8.3125 -0.421875 C 7.9375 -0.191406 7.609375 -0.0273438 7.328125 0.0625 Z M 6.859375 -1.8125 L 5.8125 -2.8125 L 6.9375 -3.984375 L 7.984375 -2.984375 C 8.148438 -3.316406 8.265625 -3.613281 8.328125 -3.875 C 8.429688 -4.25 8.484375 -4.691406 8.484375 -5.203125 C 8.484375 -6.359375 8.242188 -7.253906 7.765625 -7.890625 C 7.296875 -8.523438 6.601562 -8.84375 5.6875 -8.84375 C 4.820312 -8.84375 4.132812 -8.535156 3.625 -7.921875 C 3.113281 -7.316406 2.859375 -6.410156 2.859375 -5.203125 C 2.859375 -3.773438 3.222656 -2.753906 3.953125 -2.140625 C 4.429688 -1.742188 5 -1.546875 5.65625 -1.546875 C 5.90625 -1.546875 6.144531 -1.578125 6.375 -1.640625 C 6.5 -1.671875 6.660156 -1.726562 6.859375 -1.8125 Z M 6.859375 -1.8125 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-2-8&quot;&gt;
&lt;path d=&quot;M 0.328125 -4.96875 L 4.375 -4.96875 L 4.375 -3.0625 L 0.328125 -3.0625 Z M 0.328125 -4.96875 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-2-9&quot;&gt;
&lt;path d=&quot;M 5.5 -3.734375 L 3.296875 -3.734375 L 3.296875 0 L 1.140625 0 L 1.140625 -10.375 L 5.65625 -10.375 C 6.695312 -10.375 7.523438 -10.101562 8.140625 -9.5625 C 8.765625 -9.03125 9.078125 -8.203125 9.078125 -7.078125 C 9.078125 -5.859375 8.765625 -4.992188 8.140625 -4.484375 C 7.523438 -3.984375 6.644531 -3.734375 5.5 -3.734375 Z M 6.515625 -5.890625 C 6.796875 -6.140625 6.9375 -6.53125 6.9375 -7.0625 C 6.9375 -7.601562 6.789062 -7.988281 6.5 -8.21875 C 6.21875 -8.445312 5.820312 -8.5625 5.3125 -8.5625 L 3.296875 -8.5625 L 3.296875 -5.515625 L 5.3125 -5.515625 C 5.820312 -5.515625 6.222656 -5.640625 6.515625 -5.890625 Z M 6.515625 -5.890625 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-2-10&quot;&gt;
&lt;path d=&quot;M 4.453125 -1.421875 L 4.453125 0.078125 L 3.5 0.109375 C 2.550781 0.140625 1.898438 -0.0234375 1.546875 -0.390625 C 1.328125 -0.617188 1.21875 -0.972656 1.21875 -1.453125 L 1.21875 -6.171875 L 0.140625 -6.171875 L 0.140625 -7.59375 L 1.21875 -7.59375 L 1.21875 -9.734375 L 3.203125 -9.734375 L 3.203125 -7.59375 L 4.453125 -7.59375 L 4.453125 -6.171875 L 3.203125 -6.171875 L 3.203125 -2.125 C 3.203125 -1.800781 3.238281 -1.597656 3.3125 -1.515625 C 3.394531 -1.441406 3.640625 -1.40625 4.046875 -1.40625 C 4.109375 -1.40625 4.171875 -1.40625 4.234375 -1.40625 C 4.304688 -1.414062 4.378906 -1.421875 4.453125 -1.421875 Z M 4.453125 -1.421875 &quot;/&gt;
&lt;/g&gt;
&lt;/g&gt;
&lt;clipPath id=&quot;clip-0&quot;&gt;
&lt;path clip-rule=&quot;nonzero&quot; d=&quot;M 59.039062 59.039062 L 473.757812 59.039062 L 473.757812 409 L 59.039062 409 Z M 59.039062 59.039062 &quot;/&gt;
&lt;/clipPath&gt;
&lt;/defs&gt;
&lt;rect x=&quot;-50.4&quot; y=&quot;-50.4&quot; width=&quot;604.8&quot; height=&quot;604.8&quot; fill=&quot;rgb(100%, 100%, 100%)&quot; fill-opacity=&quot;1&quot;/&gt;
&lt;path fill=&quot;none&quot; stroke-width=&quot;0.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; stroke=&quot;rgb(0%, 0%, 0%)&quot; stroke-opacity=&quot;1&quot; stroke-miterlimit=&quot;10&quot; d=&quot;M 77.101562 416.800781 C 77.101562 420.398438 71.699219 420.398438 71.699219 416.800781 C 71.699219 413.199219 77.101562 413.199219 77.101562 416.800781 &quot;/&gt;
&lt;path fill=&quot;none&quot; stroke-width=&quot;0.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; stroke=&quot;rgb(0%, 0%, 0%)&quot; stroke-opacity=&quot;1&quot; stroke-miterlimit=&quot;10&quot; d=&quot;M 195.644531 302.132812 C 195.644531 305.734375 190.246094 305.734375 190.246094 302.132812 C 190.246094 298.535156 195.644531 298.535156 195.644531 302.132812 &quot;/&gt;
&lt;path fill=&quot;none&quot; stroke-width=&quot;0.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; stroke=&quot;rgb(0%, 0%, 0%)&quot; stroke-opacity=&quot;1&quot; stroke-miterlimit=&quot;10&quot; d=&quot;M 342.554688 149.246094 C 342.554688 152.84375 337.15625 152.84375 337.15625 149.246094 C 337.15625 145.644531 342.554688 145.644531 342.554688 149.246094 &quot;/&gt;
&lt;path fill=&quot;none&quot; stroke-width=&quot;0.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; stroke=&quot;rgb(0%, 0%, 0%)&quot; stroke-opacity=&quot;1&quot; stroke-miterlimit=&quot;10&quot; d=&quot;M 461.101562 72.800781 C 461.101562 76.398438 455.699219 76.398438 455.699219 72.800781 C 455.699219 69.199219 461.101562 69.199219 461.101562 72.800781 &quot;/&gt;
&lt;path fill=&quot;none&quot; stroke-width=&quot;0.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; stroke=&quot;rgb(0%, 0%, 0%)&quot; stroke-opacity=&quot;1&quot; stroke-miterlimit=&quot;10&quot; d=&quot;M 149.339844 404.058594 C 149.339844 407.660156 143.941406 407.660156 143.941406 404.058594 C 143.941406 400.460938 149.339844 400.460938 149.339844 404.058594 &quot;/&gt;
&lt;path fill=&quot;none&quot; stroke-width=&quot;0.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; stroke=&quot;rgb(0%, 0%, 0%)&quot; stroke-opacity=&quot;1&quot; stroke-miterlimit=&quot;10&quot; d=&quot;M 233.839844 238.429688 C 233.839844 242.03125 228.441406 242.03125 228.441406 238.429688 C 228.441406 234.828125 233.839844 234.828125 233.839844 238.429688 &quot;/&gt;
&lt;path fill=&quot;none&quot; stroke-width=&quot;0.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; stroke=&quot;rgb(0%, 0%, 0%)&quot; stroke-opacity=&quot;1&quot; stroke-miterlimit=&quot;10&quot; d=&quot;M 388.859375 123.761719 C 388.859375 127.363281 383.460938 127.363281 383.460938 123.761719 C 383.460938 120.164062 388.859375 120.164062 388.859375 123.761719 &quot;/&gt;
&lt;path fill=&quot;none&quot; stroke-width=&quot;0.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; stroke=&quot;rgb(0%, 0%, 0%)&quot; stroke-opacity=&quot;1&quot; stroke-miterlimit=&quot;10&quot; d=&quot;M 304.359375 187.464844 C 304.359375 191.066406 298.960938 191.066406 298.960938 187.464844 C 298.960938 183.867188 304.359375 183.867188 304.359375 187.464844 &quot;/&gt;
&lt;path fill=&quot;none&quot; stroke-width=&quot;0.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; stroke=&quot;rgb(0%, 0%, 0%)&quot; stroke-opacity=&quot;1&quot; stroke-miterlimit=&quot;10&quot; d=&quot;M 269.101562 225.6875 C 269.101562 229.289062 263.699219 229.289062 263.699219 225.6875 C 263.699219 222.089844 269.101562 222.089844 269.101562 225.6875 &quot;/&gt;
&lt;path fill=&quot;none&quot; stroke-width=&quot;0.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; stroke=&quot;rgb(0%, 0%, 0%)&quot; stroke-opacity=&quot;1&quot; stroke-miterlimit=&quot;10&quot; d=&quot;M 73.648438 430.558594 L 459.152344 430.558594 &quot;/&gt;
&lt;path fill=&quot;none&quot; stroke-width=&quot;0.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; stroke=&quot;rgb(0%, 0%, 0%)&quot; stroke-opacity=&quot;1&quot; stroke-miterlimit=&quot;10&quot; d=&quot;M 73.648438 430.558594 L 73.648438 437.761719 &quot;/&gt;
&lt;path fill=&quot;none&quot; stroke-width=&quot;0.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; stroke=&quot;rgb(0%, 0%, 0%)&quot; stroke-opacity=&quot;1&quot; stroke-miterlimit=&quot;10&quot; d=&quot;M 137.898438 430.558594 L 137.898438 437.761719 &quot;/&gt;
&lt;path fill=&quot;none&quot; stroke-width=&quot;0.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; stroke=&quot;rgb(0%, 0%, 0%)&quot; stroke-opacity=&quot;1&quot; stroke-miterlimit=&quot;10&quot; d=&quot;M 202.148438 430.558594 L 202.148438 437.761719 &quot;/&gt;
&lt;path fill=&quot;none&quot; stroke-width=&quot;0.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; stroke=&quot;rgb(0%, 0%, 0%)&quot; stroke-opacity=&quot;1&quot; stroke-miterlimit=&quot;10&quot; d=&quot;M 266.398438 430.558594 L 266.398438 437.761719 &quot;/&gt;
&lt;path fill=&quot;none&quot; stroke-width=&quot;0.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; stroke=&quot;rgb(0%, 0%, 0%)&quot; stroke-opacity=&quot;1&quot; stroke-miterlimit=&quot;10&quot; d=&quot;M 330.648438 430.558594 L 330.648438 437.761719 &quot;/&gt;
&lt;path fill=&quot;none&quot; stroke-width=&quot;0.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; stroke=&quot;rgb(0%, 0%, 0%)&quot; stroke-opacity=&quot;1&quot; stroke-miterlimit=&quot;10&quot; d=&quot;M 394.902344 430.558594 L 394.902344 437.761719 &quot;/&gt;
&lt;path fill=&quot;none&quot; stroke-width=&quot;0.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; stroke=&quot;rgb(0%, 0%, 0%)&quot; stroke-opacity=&quot;1&quot; stroke-miterlimit=&quot;10&quot; d=&quot;M 459.152344 430.558594 L 459.152344 437.761719 &quot;/&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-0-0&quot; x=&quot;63.308594&quot; y=&quot;456.480469&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-1&quot; x=&quot;67.304688&quot; y=&quot;456.480469&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-2&quot; x=&quot;73.978516&quot; y=&quot;456.480469&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-3&quot; x=&quot;77.3125&quot; y=&quot;456.480469&quot;/&gt;
&lt;/g&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-0-0&quot; x=&quot;127.558594&quot; y=&quot;456.480469&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-1&quot; x=&quot;131.554688&quot; y=&quot;456.480469&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-2&quot; x=&quot;138.228516&quot; y=&quot;456.480469&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-4&quot; x=&quot;141.5625&quot; y=&quot;456.480469&quot;/&gt;
&lt;/g&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-0-0&quot; x=&quot;191.808594&quot; y=&quot;456.480469&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-4&quot; x=&quot;195.804688&quot; y=&quot;456.480469&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-2&quot; x=&quot;202.478516&quot; y=&quot;456.480469&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-3&quot; x=&quot;205.8125&quot; y=&quot;456.480469&quot;/&gt;
&lt;/g&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-0-4&quot; x=&quot;258.058594&quot; y=&quot;456.480469&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-2&quot; x=&quot;264.732422&quot; y=&quot;456.480469&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-4&quot; x=&quot;268.066406&quot; y=&quot;456.480469&quot;/&gt;
&lt;/g&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-0-4&quot; x=&quot;322.308594&quot; y=&quot;456.480469&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-2&quot; x=&quot;328.982422&quot; y=&quot;456.480469&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-3&quot; x=&quot;332.316406&quot; y=&quot;456.480469&quot;/&gt;
&lt;/g&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-0-1&quot; x=&quot;386.5625&quot; y=&quot;456.480469&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-2&quot; x=&quot;393.236328&quot; y=&quot;456.480469&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-4&quot; x=&quot;396.570312&quot; y=&quot;456.480469&quot;/&gt;
&lt;/g&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-0-1&quot; x=&quot;450.8125&quot; y=&quot;456.480469&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-2&quot; x=&quot;457.486328&quot; y=&quot;456.480469&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-3&quot; x=&quot;460.820312&quot; y=&quot;456.480469&quot;/&gt;
&lt;/g&gt;
&lt;path fill=&quot;none&quot; stroke-width=&quot;0.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; stroke=&quot;rgb(0%, 0%, 0%)&quot; stroke-opacity=&quot;1&quot; stroke-miterlimit=&quot;10&quot; d=&quot;M 59.039062 378.578125 L 59.039062 60.058594 &quot;/&gt;
&lt;path fill=&quot;none&quot; stroke-width=&quot;0.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; stroke=&quot;rgb(0%, 0%, 0%)&quot; stroke-opacity=&quot;1&quot; stroke-miterlimit=&quot;10&quot; d=&quot;M 59.039062 378.578125 L 51.839844 378.578125 &quot;/&gt;
&lt;path fill=&quot;none&quot; stroke-width=&quot;0.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; stroke=&quot;rgb(0%, 0%, 0%)&quot; stroke-opacity=&quot;1&quot; stroke-miterlimit=&quot;10&quot; d=&quot;M 59.039062 314.875 L 51.839844 314.875 &quot;/&gt;
&lt;path fill=&quot;none&quot; stroke-width=&quot;0.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; stroke=&quot;rgb(0%, 0%, 0%)&quot; stroke-opacity=&quot;1&quot; stroke-miterlimit=&quot;10&quot; d=&quot;M 59.039062 251.171875 L 51.839844 251.171875 &quot;/&gt;
&lt;path fill=&quot;none&quot; stroke-width=&quot;0.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; stroke=&quot;rgb(0%, 0%, 0%)&quot; stroke-opacity=&quot;1&quot; stroke-miterlimit=&quot;10&quot; d=&quot;M 59.039062 187.464844 L 51.839844 187.464844 &quot;/&gt;
&lt;path fill=&quot;none&quot; stroke-width=&quot;0.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; stroke=&quot;rgb(0%, 0%, 0%)&quot; stroke-opacity=&quot;1&quot; stroke-miterlimit=&quot;10&quot; d=&quot;M 59.039062 123.761719 L 51.839844 123.761719 &quot;/&gt;
&lt;path fill=&quot;none&quot; stroke-width=&quot;0.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; stroke=&quot;rgb(0%, 0%, 0%)&quot; stroke-opacity=&quot;1&quot; stroke-miterlimit=&quot;10&quot; d=&quot;M 59.039062 60.058594 L 51.839844 60.058594 &quot;/&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-1-0&quot; x=&quot;41.761719&quot; y=&quot;393.59375&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-1-1&quot; x=&quot;41.761719&quot; y=&quot;386.919922&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-1-2&quot; x=&quot;41.761719&quot; y=&quot;383.585938&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-1-0&quot; x=&quot;41.761719&quot; y=&quot;376.912109&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-1-0&quot; x=&quot;41.761719&quot; y=&quot;370.238281&quot;/&gt;
&lt;/g&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-1-0&quot; x=&quot;41.761719&quot; y=&quot;329.890625&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-1-1&quot; x=&quot;41.761719&quot; y=&quot;323.216797&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-1-2&quot; x=&quot;41.761719&quot; y=&quot;319.882812&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-1-0&quot; x=&quot;41.761719&quot; y=&quot;313.208984&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-1-2&quot; x=&quot;41.761719&quot; y=&quot;306.535156&quot;/&gt;
&lt;/g&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-1-0&quot; x=&quot;41.761719&quot; y=&quot;266.1875&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-1-1&quot; x=&quot;41.761719&quot; y=&quot;259.513672&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-1-2&quot; x=&quot;41.761719&quot; y=&quot;256.179688&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-1-3&quot; x=&quot;41.761719&quot; y=&quot;249.505859&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-1-0&quot; x=&quot;41.761719&quot; y=&quot;242.832031&quot;/&gt;
&lt;/g&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-1-0&quot; x=&quot;41.761719&quot; y=&quot;202.480469&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-1-1&quot; x=&quot;41.761719&quot; y=&quot;195.806641&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-1-2&quot; x=&quot;41.761719&quot; y=&quot;192.472656&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-1-3&quot; x=&quot;41.761719&quot; y=&quot;185.798828&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-1-2&quot; x=&quot;41.761719&quot; y=&quot;179.125&quot;/&gt;
&lt;/g&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-1-0&quot; x=&quot;41.761719&quot; y=&quot;138.777344&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-1-1&quot; x=&quot;41.761719&quot; y=&quot;132.103516&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-1-2&quot; x=&quot;41.761719&quot; y=&quot;128.769531&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-1-4&quot; x=&quot;41.761719&quot; y=&quot;122.095703&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-1-0&quot; x=&quot;41.761719&quot; y=&quot;115.421875&quot;/&gt;
&lt;/g&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-1-0&quot; x=&quot;41.761719&quot; y=&quot;75.074219&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-1-1&quot; x=&quot;41.761719&quot; y=&quot;68.400391&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-1-2&quot; x=&quot;41.761719&quot; y=&quot;65.066406&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-1-4&quot; x=&quot;41.761719&quot; y=&quot;58.392578&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-1-2&quot; x=&quot;41.761719&quot; y=&quot;51.71875&quot;/&gt;
&lt;/g&gt;
&lt;path fill=&quot;none&quot; stroke-width=&quot;0.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; stroke=&quot;rgb(0%, 0%, 0%)&quot; stroke-opacity=&quot;1&quot; stroke-miterlimit=&quot;10&quot; d=&quot;M 59.039062 430.558594 L 473.761719 430.558594 L 473.761719 59.039062 L 59.039062 59.039062 Z M 59.039062 430.558594 &quot;/&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-2-0&quot; x=&quot;210.394531&quot; y=&quot;34.703125&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-2-1&quot; x=&quot;220.79375&quot; y=&quot;34.703125&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-2-2&quot; x=&quot;229.589844&quot; y=&quot;34.703125&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-2-3&quot; x=&quot;235.19375&quot; y=&quot;34.703125&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-2-4&quot; x=&quot;247.997656&quot; y=&quot;34.703125&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-2-5&quot; x=&quot;256.00625&quot; y=&quot;34.703125&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-2-6&quot; x=&quot;260.007031&quot; y=&quot;34.703125&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-2-7&quot; x=&quot;264.007812&quot; y=&quot;34.703125&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-2-8&quot; x=&quot;275.208594&quot; y=&quot;34.703125&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-2-7&quot; x=&quot;280.003906&quot; y=&quot;34.703125&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-2-6&quot; x=&quot;291.204687&quot; y=&quot;34.703125&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-2-9&quot; x=&quot;295.205469&quot; y=&quot;34.703125&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-2-5&quot; x=&quot;304.810156&quot; y=&quot;34.703125&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-2-1&quot; x=&quot;308.810937&quot; y=&quot;34.703125&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-2-10&quot; x=&quot;317.607031&quot; y=&quot;34.703125&quot;/&gt;
&lt;/g&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-0-5&quot; x=&quot;209.703125&quot; y=&quot;485.28125&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-6&quot; x=&quot;217.033203&quot; y=&quot;485.28125&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-7&quot; x=&quot;223.707031&quot; y=&quot;485.28125&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-8&quot; x=&quot;230.380859&quot; y=&quot;485.28125&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-9&quot; x=&quot;237.054688&quot; y=&quot;485.28125&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-7&quot; x=&quot;241.050781&quot; y=&quot;485.28125&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-10&quot; x=&quot;247.724609&quot; y=&quot;485.28125&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-11&quot; x=&quot;251.058594&quot; y=&quot;485.28125&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-12&quot; x=&quot;253.724609&quot; y=&quot;485.28125&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-13&quot; x=&quot;259.724609&quot; y=&quot;485.28125&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-14&quot; x=&quot;266.398438&quot; y=&quot;485.28125&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-15&quot; x=&quot;269.064453&quot; y=&quot;485.28125&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-16&quot; x=&quot;272.398438&quot; y=&quot;485.28125&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-17&quot; x=&quot;281.732422&quot; y=&quot;485.28125&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-13&quot; x=&quot;288.40625&quot; y=&quot;485.28125&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-18&quot; x=&quot;295.080078&quot; y=&quot;485.28125&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-10&quot; x=&quot;301.753906&quot; y=&quot;485.28125&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-11&quot; x=&quot;305.087891&quot; y=&quot;485.28125&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-14&quot; x=&quot;307.753906&quot; y=&quot;485.28125&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-7&quot; x=&quot;310.419922&quot; y=&quot;485.28125&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-19&quot; x=&quot;317.09375&quot; y=&quot;485.28125&quot;/&gt;
&lt;/g&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-1-5&quot; x=&quot;12.960938&quot; y=&quot;292.160156&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-1-6&quot; x=&quot;12.960938&quot; y=&quot;284.15625&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-1-7&quot; x=&quot;12.960938&quot; y=&quot;277.482422&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-1-8&quot; x=&quot;12.960938&quot; y=&quot;267.486328&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-1-9&quot; x=&quot;12.960938&quot; y=&quot;260.8125&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-1-10&quot; x=&quot;12.960938&quot; y=&quot;258.146484&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-1-11&quot; x=&quot;12.960938&quot; y=&quot;251.472656&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-1-12&quot; x=&quot;12.960938&quot; y=&quot;248.138672&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-1-13&quot; x=&quot;12.960938&quot; y=&quot;238.804688&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-1-6&quot; x=&quot;12.960938&quot; y=&quot;232.130859&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-1-14&quot; x=&quot;12.960938&quot; y=&quot;225.457031&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-1-15&quot; x=&quot;12.960938&quot; y=&quot;218.783203&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-1-16&quot; x=&quot;12.960938&quot; y=&quot;215.449219&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-1-9&quot; x=&quot;12.960938&quot; y=&quot;212.783203&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-1-10&quot; x=&quot;12.960938&quot; y=&quot;210.117188&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-1-17&quot; x=&quot;12.960938&quot; y=&quot;203.443359&quot;/&gt;
&lt;/g&gt;
&lt;g clip-path=&quot;url(#clip-0)&quot;&gt;
&lt;path fill=&quot;none&quot; stroke-width=&quot;0.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; stroke=&quot;rgb(100%, 0%, 0%)&quot; stroke-opacity=&quot;1&quot; stroke-miterlimit=&quot;10&quot; d=&quot;M 59.039062 408.578125 L 473.761719 42.800781 &quot;/&gt;
&lt;/g&gt;
&lt;/svg&gt;
&lt;/div&gt;
&lt;/p&gt;
&lt;/div&gt;

&lt;p&gt;
调用&lt;code&gt;z.test&lt;/code&gt;进行假设验证测试：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-R&quot;&gt;&lt;span style=&quot;color: #110099;&quot;&gt;library&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;BSDA&quot;&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
data &lt;span style=&quot;color: #110099;&quot;&gt;&amp;lt;-&lt;/span&gt; c&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;0.497, 0.506, 0.518, 0.524, 0.498, 0.511, 0.520, 0.515, 0.512&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
z.test&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;x = data,
       alternative = &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;two.sided&quot;&lt;/span&gt;,
       mu = 0.5, sigma.x = 0.015,
       conf.level = 0.95&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;pre class=&quot;example&quot; id=&quot;orge9ef524&quot;&gt;

	One-sample z-Test

data:  data
z = 2.2444, p-value = 0.0248
alternative hypothesis: true mean is not equal to 0.5
95 percent confidence interval:
 0.5014224 0.5210220
sample estimates:
mean of x 
0.5112222 

&lt;/pre&gt;


&lt;p&gt;
从结果来看，
&lt;/p&gt;

&lt;p&gt;
\[|z| = |\frac{\bar{x} - \mu_0}{\sigma/\sqrt{n}}| = 2.2444\]
&lt;/p&gt;

&lt;p&gt;
p值（ p-value ）为 0.0248。 p 值是根据实际观察值计算出来的显著性水平。
&lt;/p&gt;

&lt;p&gt;
因为
&lt;/p&gt;

&lt;p&gt;
\[ P\{\text{当} H_0 \text{为真时，拒绝} H_0\}
= P_{\mu_0} \{ \frac{|\bar{x} - \mu_0|}{\sigma / \sqrt{n}} \geq k \}
= \alpha
\]
&lt;/p&gt;

&lt;p&gt;
所以，当 p 值越小，表示表示“当原假设为真时，拒绝该假设的概率越小。一般以小于 p 值小于 0.05为拒绝原假设的普遍标准。
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>单词本：beef</title>
   <link href="http://kimi.im/2024-06-06-beef"/>
   <updated>2024-06-06T00:00:00+00:00</updated>
   <id>http://kimi.im/beef</id>
   <content type="html">&lt;p&gt;
工业设备的通信接口一开始使用 4-20mA 的电流信号，后来，为了解决信号变量传输太少的问题，上世纪 80 年代，人们想到了个办法，在 4-20mA 的电流信号上叠加一个所谓的 FSK 频移键控信号，使得模拟信号和数字信号互不干扰在同一根物理导线上传输。频移键控就是设定两组不同的信号频率表示数字信号比特位 0 和 1 。这种协议就叫 HART - Highway Addressable Remote Transducer。
&lt;/p&gt;

&lt;p&gt;
然而，速度还是一个大问题：
&lt;/p&gt;

&lt;p&gt;
Indeed, the biggest &lt;b&gt;beef&lt;/b&gt; against 4-20mA HART has always been speed,
making configuration and other tasks both time-consuming and
cumbersome.
&lt;/p&gt;

&lt;p&gt;
这里，用到了 beef 这个单词。看起来好像毫无关系。关于4-20mA HART总线最大的牛排是速度？
&lt;/p&gt;

&lt;p&gt;
其实，这个 beef 是 complaint 抱怨的意思。
&lt;/p&gt;

&lt;p&gt;
所以，这句话是说人们对4-20mA HART总线最大的抱怨总是速度问题，配置设备、检查设备数据总是要花很多时间，一来一回又很繁琐。后来的解决方案是
HART-IP。
&lt;/p&gt;

&lt;p&gt;
beef 来自法语的牛肉 boeuf ，然后，更早源自拉丁语 bovem牛。英语里
&lt;a href=&quot;./2016-08-11-english-bovine&quot;&gt;bovine&lt;/a&gt; 正是“和牛相关的”之意。比如牛郎织女故事里介绍的：
&lt;/p&gt;

&lt;p&gt;
The cow, however, was a former god who had violated imperial rules and
was sent to earth in &lt;b&gt;bovine&lt;/b&gt; form.
&lt;/p&gt;

&lt;p&gt;
还有 bull 公牛，bovid 牛科动物。
&lt;/p&gt;

&lt;p&gt;
那么，牛肉怎么就和抱怨有关呢？
&lt;/p&gt;

&lt;p&gt;
据说是美军娇生惯养，曾抱怨牛肉供给的数量和质量不好闹了很大的事情，所以被抱怨对象成了抱怨本身。
&lt;/p&gt;

&lt;p&gt;
而且，beef up 增加牛肉，在口语表示增大、扩大的意思。如：Please beef up
the budget! 请增加预算！
&lt;/p&gt;

&lt;p&gt;
北京话“别逼逼”，意思就是别废话了，语气里沾着北京地地道道的优越感，就是让你别瞎扯了，大多带着不屑听，不屑你说的意思。不知道是不是从 beef 来的？别beef beef了？
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>单词本：serval</title>
   <link href="http://kimi.im/2024-06-04-serval"/>
   <updated>2024-06-04T00:00:00+00:00</updated>
   <id>http://kimi.im/serval</id>
   <content type="html">&lt;p&gt;
还是周六的事情，在杭州野生动物园还看到了薮猫。这种外形修长的猫，英文名叫 serval ，大概是音译为薮猫。
&lt;/p&gt;

&lt;p&gt;
而 serval 其实是源自法语，又来自葡萄牙语 lobo cerval，又来自拉丁语
lopus cervarius 鹿狼，或者狼鹿。也就是 Hirschwolf 。而 cervarius又来自拉丁语 cervus 鹿。
&lt;/p&gt;

&lt;p&gt;
或者，我们可以称它为狼鹿猫。
&lt;/p&gt;

&lt;p&gt;
至于，为什么是狼鹿猫，可能是因为它的身材跟鹿一样好的缘故。
&lt;/p&gt;

&lt;p&gt;
正因为外形漂亮，很多有钱大佬喜欢养薮猫做宠物。
&lt;/p&gt;

&lt;p&gt;
顺便提一下，德语的鹿是 der Hirsche，法语的鹿是 le cerf。
&lt;/p&gt;

&lt;p&gt;
德语有个公司叫 Hirschmann 赫尔思曼，生成汽车连接件。大概祖上是打猎鹿的人。
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>单词本：cordially</title>
   <link href="http://kimi.im/2024-06-04-cordially"/>
   <updated>2024-06-04T00:00:00+00:00</updated>
   <id>http://kimi.im/cordially</id>
   <content type="html">&lt;p&gt;
收到一个会议的邀请函。他们是这么邀请的：
&lt;/p&gt;

&lt;p&gt;
We &lt;b&gt;cordially&lt;/b&gt; invite you to meet us at embedded world on the booth.
&lt;/p&gt;

&lt;p&gt;
这里用到单词 cordially 或 cordial 的意思是由衷的、热诚的、诚恳的。英语字典一般翻译为 heartily、 warmly 。
&lt;/p&gt;

&lt;p&gt;
如果我们追溯它的源头，则来自中世纪拉丁语 cordialis 属于心的。更早则是
cor 的属格 cordis 。而 cor是心的意思，所以 cordis 以及 cordialis 都是“属于心的”的意思。
&lt;/p&gt;

&lt;p&gt;
这么看，cordial/cordially 确实是由衷的意思。因为我们的衷字，本意是中心的衣服，即贴身内衣：衷，里亵衣。《说文》。段玉裁注:“亵衣有在外者，衷则在内者也。”引申义，则是内心。由衷的意思就是根据内心。就是诚恳、热诚的意思了。
&lt;/p&gt;

&lt;p&gt;
法语的心cœur是从拉丁语 cor 稍稍变化而来的。比如 Je la tenais pressée
sur mon cœur 我把她藏在心里。
&lt;/p&gt;

&lt;p&gt;
德语和英语比较接近 das Herz &amp;lt;-&amp;gt; heart。
&lt;/p&gt;

&lt;p&gt;
英语里 core 倒是直接源自 cor ，不过是引申义，核心。还有 courage勇气，那是从内心发出的力量呀。
&lt;/p&gt;

&lt;p&gt;
cordial 还是提神兴奋饮料、果汁饮料的意思，估计是觉得有强心作用。
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>单词本：fad</title>
   <link href="http://kimi.im/2024-06-03-fad"/>
   <updated>2024-06-03T00:00:00+00:00</updated>
   <id>http://kimi.im/fad</id>
   <content type="html">&lt;p&gt;
今年春天，我在我们厂发起了一个精益 6 西格玛项目。我在这里
(&lt;a href=&quot;#citeproc_bib_item_1&quot;&gt;Antony, Vinodh, and Gijo 2016&lt;/a&gt;) 看到Lean Six Sigma的介绍：
&lt;/p&gt;

&lt;p&gt;
LSS is not a quick fix or flavour of the month or management &lt;b&gt;fad&lt;/b&gt;, but
rather it is a proven business strategy which can deliver bottom-line
results and a world-class practice for making your business processes
efficient and effective.
&lt;/p&gt;

&lt;p&gt;
fad 指的是一时的流行、时尚、狂热等。比如：
&lt;/p&gt;

&lt;p&gt;
Will Kimi continue to collect stamps or is it only a passing &lt;b&gt;fad&lt;/b&gt;?
&lt;/p&gt;

&lt;p&gt;
据说这个词是 fiddle-faddle 的简写，意思是无关紧要的小东西、瞎闹、胡扯。
&lt;/p&gt;

&lt;p&gt;
He&amp;rsquo;s concerned with petty &lt;b&gt;fiddle-faddle&lt;/b&gt; about his personal
arrangements.
&lt;/p&gt;

&lt;p&gt;
fiddle-faddle 也就是 nonsense，德语为 Unsinn，法语为 foutaise。
&lt;/p&gt;

&lt;p&gt;
也有说 fad 是来自法语的 foutaise。比如：
&lt;/p&gt;

&lt;p&gt;
c&amp;rsquo;est de la foutaise!
&lt;/p&gt;

&lt;p&gt;
Das ist doch blanker Unsinn! c&amp;rsquo;est vraiment absurde!
&lt;/p&gt;

&lt;p&gt;
&lt;b&gt;References&lt;/b&gt;
&lt;/p&gt;


&lt;style&gt;.csl-entry{text-indent: -1.5em; margin-left: 1.5em;}&lt;/style&gt;&lt;div class=&quot;csl-bib-body&quot;&gt;
  &lt;div class=&quot;csl-entry&quot;&gt;&lt;a id=&quot;citeproc_bib_item_1&quot;&gt;&lt;/a&gt;Antony, Jiju, S. Vinodh, and E. V. Gijo. 2016. &lt;i&gt;Lean Six Sigma for Small and Medium Sized Enterprises: A Practical Guide&lt;/i&gt;. CRC Press. doi:&lt;a href=&quot;https://doi.org/10.1201/9781315372174&quot;&gt;10.1201/9781315372174&lt;/a&gt;.&lt;/div&gt;
&lt;/div&gt;
</content>
 </entry>
 
 <entry>
   <title>单词本：omnivore</title>
   <link href="http://kimi.im/2024-06-02-omnivore"/>
   <updated>2024-06-02T00:00:00+00:00</updated>
   <id>http://kimi.im/omnivore</id>
   <content type="html">&lt;p&gt;
昨天儿童节，去野生动物园撒野。巧的是，还偶遇了一枚前同事。
&lt;/p&gt;

&lt;p&gt;
去动物园的好处很多，可以观赏动物，看看他们的习性，可以健身，昨天就走了
1万 7 千步，还能学知识学英语。比如昨天就学了动物食性的英语单词。
&lt;/p&gt;

&lt;p&gt;
动物有肉食性的，也有植食性的，还有杂食性的。比如条纹鬣狗就是杂食性动物。所谓杂食性，就是不偏食，不管是肉还是蔬菜，都能吃。
&lt;/p&gt;

&lt;p&gt;
杂食动物英语里是这么写的： omnivore ，形容词为 omnivorous。
&lt;/p&gt;

&lt;p&gt;
omnivore 来自拉丁语 omnivorus。
&lt;/p&gt;

&lt;p&gt;
omnis 意思是 all ，全部。 vorare 的意思是 devour 吞食 swallow 咽下。合在一起就是全部都吞食的杂食动物。
&lt;/p&gt;

&lt;p&gt;
法语英语同源，也是 omnivore 。德语则是 der Allesfresser也用 der
Omnivore。又因为德语区分动物的吃和人的吃，所以杂食的人，则是 der
Allesesser 或 die Allesesserin。
&lt;/p&gt;

&lt;p&gt;
形容词杂食的，英语是 omnivorous，法语 omnivore，德语 allesfressend。
&lt;/p&gt;

&lt;p&gt;
与 omnivore 相似的其他还有
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;frugivore 食水果动物&lt;/li&gt;
&lt;li&gt;carnivore 食肉动物&lt;/li&gt;
&lt;li&gt;granivore 食谷动物&lt;/li&gt;
&lt;li&gt;herbivore 食草动物&lt;/li&gt;
&lt;li&gt;insectivore 食虫动物&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
西门子跟 NVIDIA 的合作，利用 Omniverse 构建工业元宇宙和数字孪生。
NVIDIA 的 Omniverse 是一个基于 GPU 实时仿真的 3D 设计协作软件，可以构建工业、能源、流程的数字孪生模型。看来 AI 芯片巨头取这个产品名的意图是想全宇宙的方方面面都通通吞食，确实有气吞山河的壮志了。
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>单词本：hiccup</title>
   <link href="http://kimi.im/2024-05-25-hiccup"/>
   <updated>2024-05-25T00:00:00+00:00</updated>
   <id>http://kimi.im/hiccup</id>
   <content type="html">&lt;p&gt;
作为一名产品负责人，不断学习产品管理知识是必不可少的。近日读 Richard
Banfield 的《Product Leadership》(&lt;a href=&quot;#citeproc_bib_item_1&quot;&gt;Banfield, Eriksson, and Walkingshaw 2017&lt;/a&gt;)一书，讲到产品从概念到发布之间总会遇到些小问题，用到了 &lt;b&gt;hiccup&lt;/b&gt; 一词：
&lt;/p&gt;

&lt;p&gt;
In fact it&amp;rsquo;s downright rare to find a product leader that can steward
a product from concept to launch without some major
&lt;b&gt;hiccups&lt;/b&gt;.
&lt;/p&gt;

&lt;p&gt;
而实际上， &lt;b&gt;hiccup&lt;/b&gt; 是打嗝的意思，这里应该是小差错的意思。这就像我们用“膈应”表示讨厌的、令人不舒服的，但又未达到呕吐程度的不舒服，多引申为心理上的不舒服。比如
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;这东西真膈应。这里膈应用作形容词。&lt;/li&gt;
&lt;li&gt;你不要膈应人了好不好。当作及物动词，使人恶心。&lt;/li&gt;
&lt;li&gt;才 20 出头，甘油三酯就偏高，真膈应人啊。使人发愁。&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
相比膈应，打嗝的讨厌程度稍微小一些。所以，一般指小问题。比如：A
Euro-Zone Inflation &lt;b&gt;Hiccup&lt;/b&gt; Is Unlikely to Thwart ECB Rate
Cut. (&lt;a href=&quot;#citeproc_bib_item_2&quot;&gt;Stirling and Rinneby 2024&lt;/a&gt;) 这则新闻是说欧洲德法西三国通胀指数略微上涨的小问题，不会导致 ECB 降息。
&lt;/p&gt;

&lt;p&gt;
&lt;b&gt;References&lt;/b&gt;
&lt;/p&gt;

&lt;style&gt;.csl-entry{text-indent: -1.5em; margin-left: 1.5em;}&lt;/style&gt;&lt;div class=&quot;csl-bib-body&quot;&gt;
  &lt;div class=&quot;csl-entry&quot;&gt;&lt;a id=&quot;citeproc_bib_item_1&quot;&gt;&lt;/a&gt;Banfield, Richard, Martin Eriksson, and Nate Walkingshaw. 2017. &lt;i&gt;Product Leadership: How Top Product Managers Launch Awesome Products and Build Successful Teams&lt;/i&gt;. 1st ed. O’Reilly Media, Inc.&lt;/div&gt;
  &lt;div class=&quot;csl-entry&quot;&gt;&lt;a id=&quot;citeproc_bib_item_2&quot;&gt;&lt;/a&gt;Stirling, Craig, and Joel Rinneby. 2024. “A Euro-Zone Inflation Hiccup Is Unlikely to Thwart ECB Rate Cut.” &lt;i&gt;Bloomberg News&lt;/i&gt;.&lt;/div&gt;
&lt;/div&gt;
</content>
 </entry>
 
 <entry>
   <title>边缘计算新标准 Margo：工作负载编排代理</title>
   <link href="http://kimi.im/2024-05-24-margo-woa"/>
   <updated>2024-05-24T00:00:00+00:00</updated>
   <id>http://kimi.im/margo-woa</id>
   <content type="html">&lt;p&gt;
Linux 基金会近日联合 ABB ，B&amp;amp;R， Capgemini ，微软，罗克韦尔自动化，施耐德电气，以及西门子，发起了一个新的&lt;a href=&quot;./2024-05-16-margo&quot;&gt;开放标准项目 Margo&lt;/a&gt;。目的是定义一套灵活、简单、易扩展的边缘接口标准。通过边缘编排软件，把边缘应用和边缘设备进行有效的管理起来。
&lt;/p&gt;


&lt;div id=&quot;org6ca8447&quot; class=&quot;figure&quot;&gt;
&lt;p&gt;&lt;div align=&quot;center&quot;&gt;&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
&lt;!DOCTYPE svg PUBLIC &quot;-//W3C//DTD SVG 1.1//EN&quot; &quot;http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd&quot;&gt;
&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; xmlns:xlink=&quot;http://www.w3.org/1999/xlink&quot; version=&quot;1.1&quot; width=&quot;881px&quot; height=&quot;241px&quot; viewBox=&quot;-0.5 -0.5 881 241&quot; style=&quot;background-color: rgb(255, 255, 255);&quot;&gt;&lt;defs/&gt;&lt;g&gt;&lt;rect x=&quot;0&quot; y=&quot;0&quot; width=&quot;880&quot; height=&quot;240&quot; rx=&quot;16.8&quot; ry=&quot;16.8&quot; fill=&quot;rgb(255, 255, 255)&quot; stroke=&quot;none&quot; pointer-events=&quot;all&quot;/&gt;&lt;image x=&quot;39.5&quot; y=&quot;39.5&quot;  xlink:href=&quot;data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCjwhLS0gR2VuZXJhdG9yOiBBZG9iZSBJbGx1c3RyYXRvciAyOC4zLjAsIFNWRyBFeHBvcnQgUGx1Zy1JbiAuIFNWRyBWZXJzaW9uOiA2LjAwIEJ1aWxkIDApICAtLT4NCjxzdmcgdmVyc2lvbj0iMS4xIiBpZD0iTGF5ZXJfMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgeD0iMHB4IiB5PSIwcHgiDQoJIHdpZHRoPSI4MDBweCIgaGVpZ2h0PSIxNTguM3B4IiB2aWV3Qm94PSIwIDAgODAwIDE1OC4zIiBzdHlsZT0iZW5hYmxlLWJhY2tncm91bmQ6bmV3IDAgMCA4MDAgMTU4LjM7IiB4bWw6c3BhY2U9InByZXNlcnZlIj4NCjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+DQoJLnN0MHtmaWxsOnVybCgjU1ZHSURfMV8pO30NCgkuc3Qxe2ZpbGw6I0ZGRkZGRjt9DQoJLnN0MntmaWxsOnVybCgjU1ZHSURfMDAwMDAxNjgxMTA2ODYzNjgyOTI4MDg4MTAwMDAwMTI5MzUzNDA0MDE5Mzg2NzA3NzVfKTt9DQoJLnN0M3tmaWxsOnVybCgjU1ZHSURfMDAwMDAwNzcyOTQ0OTYzNTQ2NzQ1OTg1ODAwMDAwMDI3NDg2Njk5Mjc2ODA2NDExOTdfKTt9DQoJLnN0NHtmaWxsOiNCMzM3RDE7fQ0KCS5zdDV7ZmlsbDojMDA4MEZGO30NCgkuc3Q2e2ZpbGw6bm9uZTtzdHJva2U6Izg0ODQ4NTtzdHJva2Utd2lkdGg6MC41O3N0cm9rZS1taXRlcmxpbWl0OjEwO30NCgkuc3Q3e2ZpbGw6dXJsKCNTVkdJRF8wMDAwMDAxNDYyMjA5ODAwMDYzMTA1MzI4MDAwMDAxODQwMTQ5NDY5ODgxMDAwNzcyM18pO30NCgkuc3Q4e2ZpbGw6dXJsKCNTVkdJRF8wMDAwMDAyNTQwNzAwOTI3OTkxNzc4MjY3MDAwMDAxMTAyMjM2MTc3MDU4MDI4ODEzNV8pO30NCgkuc3Q5e2ZpbGw6dXJsKCNTVkdJRF8wMDAwMDE2NjYzNjM4MjI2NTY2MTkyODEyMDAwMDAxMDczNDkwMzU3ODgyNDQ2MDk4MV8pO30NCgkuc3QxMHtmaWxsOnVybCgjU1ZHSURfMDAwMDAwMTY3ODIyMjM4MjAyMDgwODQ4NzAwMDAwMTc3MDYwOTM4ODc3NzUzNzExMzhfKTt9DQoJLnN0MTF7ZmlsbDp1cmwoI1NWR0lEXzAwMDAwMTIzNDQyMzMyMzAzMzAxNjc1NTEwMDAwMDA0MzY3NDI0ODc0NDIwNDg1Mjg3Xyk7fQ0KCS5zdDEye2ZpbGw6dXJsKCNTVkdJRF8wMDAwMDAzNjIzNTg4NTkzNzkxNTU0OTkzMDAwMDAwMTcyODU2MTUyOTU4NDk0NjMwOF8pO30NCgkuc3QxM3tmaWxsOnVybCgjU1ZHSURfMDAwMDAxMzYzODEwNjYxNzc3NDcyMDQ4NzAwMDAwMDEyMTk1NTU1Mjk1NTE1OTEzMThfKTt9DQoJLnN0MTR7ZmlsbDp1cmwoI1NWR0lEXzAwMDAwMTMyMDUxMzc2ODgwMTc3ODIyMzcwMDAwMDA2NDg1NjYzMjQ1NTQ1NTUyMDA4Xyk7fQ0KCS5zdDE1e2ZpbGw6dXJsKCNTVkdJRF8wMDAwMDE2Mzc1NDk3OTE1MDQwMDA2MDYyMDAwMDAxMjU5NzAwNjk0MjcyNTI2NjEwMV8pO30NCgkuc3QxNntmaWxsOnVybCgjU1ZHSURfMDAwMDAwOTAyOTM5MTMyNjE1NDY5MjM1ODAwMDAwMTEyNTEwOTk1OTM1OTYyMzAyOTFfKTt9DQoJLnN0MTd7ZmlsbDp1cmwoI1NWR0lEXzAwMDAwMDQ3NzQzMjA2NTMyNTc4Njk1NjAwMDAwMDAwNTM4NDI1NTU4MzcxMTIxMDYxXyk7fQ0KCS5zdDE4e2ZpbGw6dXJsKCNTVkdJRF8wMDAwMDE3MDI2NTQ3NjM5MTI1ODI3MTkyMDAwMDAwOTE3NzY0MTMyNDk5MjEyOTQyMF8pO30NCgkuc3QxOXtmaWxsOnVybCgjU1ZHSURfMDAwMDAxMDQ2OTE3MzMyMzk4NTQ3NTMyNTAwMDAwMDE0NTg1NjYxMDMzOTM3MDQ2MzJfKTt9DQo8L3N0eWxlPg0KPGc+DQoJPGc+DQoJCTxwYXRoIGQ9Ik0yODEuMywxMTEuOGMtMy45LDAtNy4yLTAuOS05LjctMi43Yy0yLjUtMS44LTMuOC0zLjgtMy44LTUuOXYtODNjMC0yLjUsMS4zLTQuNiwzLjgtNi4xYzIuNS0xLjUsNS44LTIuMyw5LjctMi4zDQoJCQljMy40LDAsNi4yLDAuOCw4LjUsMi4zYzIuMywxLjUsMy41LDMuNiwzLjUsNi4xdjYuM2MyLjQtNC4xLDUuOS03LjgsMTAuNS0xMS4xYzQuNi0zLjMsMTAuNS00LjksMTcuNS00LjljNiwwLDExLjQsMiwxNiw1LjkNCgkJCWM0LjYsMy45LDguMSw5LDEwLjMsMTUuMmMzLjYtNy4yLDguMy0xMi41LDE0LTE1LjljNS43LTMuNCwxMS41LTUuMiwxNy42LTUuMmM2LjUsMCwxMi41LDEuNywxOC4yLDQuOQ0KCQkJYzUuNywzLjMsMTAuMyw4LjEsMTMuOSwxNC41YzMuNiw2LjQsNS40LDE0LjEsNS40LDIzLjN2NDkuOWMwLDIuMS0xLjMsNC4xLTQsNS45Yy0yLjcsMS44LTUuOSwyLjctOS43LDIuNw0KCQkJYy0zLjcsMC02LjgtMC45LTkuNS0yLjdjLTIuNy0xLjgtNC0zLjgtNC01LjlWNTMuMmMwLTQuMi0wLjgtNy43LTIuNC0xMC41Yy0xLjYtMi44LTMuOC00LjktNi40LTYuNGMtMi43LTEuNS01LjQtMi4yLTguMi0yLjINCgkJCWMtMi44LDAtNS40LDAuNy03LjksMi4yYy0yLjUsMS41LTQuNSwzLjYtNi4yLDYuNGMtMS43LDIuOC0yLjUsNi4yLTIuNSwxMC4zdjUwLjNjMCwyLjktMS40LDUuMS00LjMsNi40Yy0yLjksMS4zLTYsMi05LjQsMg0KCQkJYy0zLjEsMC02LjEtMC43LTkuMS0yYy0yLjktMS4zLTQuNC0zLjUtNC40LTYuNFY1My4yYzAtMy45LTAuOC03LjMtMi40LTEwLjFjLTEuNi0yLjgtMy43LTUtNi4zLTYuNWMtMi42LTEuNS01LjQtMi4zLTguMy0yLjMNCgkJCWMtMi44LDAtNS41LDAuNy04LDIuMWMtMi41LDEuNC00LjYsMy41LTYuMiw2LjNjLTEuNiwyLjgtMi40LDYuMy0yLjQsMTAuNXY0OS45YzAsMi4xLTEuMyw0LjEtNCw1LjkNCgkJCUMyODguNCwxMTAuOCwyODUuMSwxMTEuOCwyODEuMywxMTEuOHoiLz4NCgkJPHBhdGggZD0iTTQ1OC40LDExMy43Yy03LjQsMC0xMy45LTIuMy0xOS4zLTYuOGMtNS40LTQuNi04LjEtMTEuNi04LjEtMjEuMmMwLTgsMi4xLTE0LjIsNi4yLTE4LjdjNC4xLTQuNSw5LjktNy42LDE3LjMtOS41DQoJCQljNy40LTEuOCwxNS45LTIuNywyNS42LTIuN2g4LjZWNTJjMC0zLjEtMC42LTYuMS0xLjgtOS4xYy0xLjItMi45LTMuMS01LjQtNS43LTcuNGMtMi42LTItNi4zLTIuOS0xMS4xLTIuOQ0KCQkJYy01LjMsMC05LjQsMC41LTEyLjMsMS42Yy0yLjksMS4xLTUuMSwyLjEtNi42LDMuM2MtMS41LDEuMS0zLjIsMS43LTUuMSwxLjdjLTIuOSwwLTUuMi0xLjUtNi44LTQuNGMtMS42LTIuOS0yLjQtNi0yLjQtOS4xDQoJCQljMC0yLjksMS44LTUuNiw1LjQtNy45czgtNC4xLDEzLjItNS40YzUuMi0xLjMsMTAuMi0xLjksMTUuMi0xLjljMTEsMCwxOS43LDIsMjYuMyw1LjljNi42LDMuOSwxMS40LDksMTQuNCwxNS4yDQoJCQljMyw2LjIsNC41LDEyLjgsNC41LDIwdjUxLjZjMCwyLjQtMS4zLDQuNC0zLjgsNi4xYy0yLjUsMS43LTUuNywyLjUtOS41LDIuNWMtMy41LDAtNi40LTAuOC04LjctMi41Yy0yLjMtMS43LTMuNS0zLjctMy41LTYuMVY5Nw0KCQkJYy0zLjgsNC40LTguMiw4LjItMTMuNCwxMS42QzQ3MS45LDExMiw0NjUuNywxMTMuNyw0NTguNCwxMTMuN3ogTTQ2OS40LDkzLjRjMi45LDAsNS45LTEsOC44LTIuOWMyLjktMiw1LjQtNC41LDcuNS03LjYNCgkJCWMyLTMuMSwzLjEtNi4zLDMuMS05Ljd2LTQuNGgtMy4yYy00LjYsMC05LjEsMC4zLTEzLjMsMC44Yy00LjIsMC42LTcuNiwxLjgtMTAuMiwzLjdjLTIuNiwxLjktMy45LDQuOC0zLjksOC43DQoJCQljMCwzLjksMS4xLDYuOCwzLjMsOC42QzQ2My43LDkyLjUsNDY2LjMsOTMuNCw0NjkuNCw5My40eiIvPg0KCQk8cGF0aCBkPSJNNTQ5LjQsMTExLjhjLTMuOCwwLTYuOS0wLjktOS41LTIuN2MtMi41LTEuOC0zLjgtMy44LTMuOC01Ljl2LTgzYzAtMi41LDEuMy00LjYsMy44LTYuMWMyLjUtMS41LDUuNy0yLjMsOS41LTIuMw0KCQkJYzMuNSwwLDYuNCwwLjgsOC43LDIuM2MyLjMsMS41LDMuNSwzLjYsMy41LDYuMXY4LjZjMS41LTMuMSwzLjYtNiw2LjItOC43YzIuNi0yLjcsNS42LTUsOC45LTYuOGMzLjQtMS44LDYuOS0yLjcsMTAuNy0yLjdoNi41DQoJCQljMi43LDAsNSwxLjIsNi45LDMuNWMyLDIuMywyLjksNS4xLDIuOSw4LjNjMCwzLjQtMSw2LjItMi45LDguNWMtMiwyLjMtNC4zLDMuNS02LjksMy41aC02LjVjLTMuOSwwLTcuOCwxLjMtMTEuNSwzLjkNCgkJCWMtMy43LDIuNi02LjgsNi4yLTkuMiwxMC43Yy0yLjQsNC42LTMuNiwxMC4xLTMuNiwxNi41djM3LjdjMCwyLjEtMS4zLDQuMS00LDUuOUM1NTYuNiwxMTAuOCw1NTMuMywxMTEuOCw1NDkuNCwxMTEuOHoiLz4NCgkJPHBhdGggZD0iTTY1My40LDE1OC4zYy04LjMsMC0xNi0xLjItMjMuMS0zLjVjLTcuMS0yLjMtMTIuOC01LjctMTcuMS0xMC4yYy00LjMtNC41LTYuNC05LjgtNi40LTE2YzAtNS4zLDEuNS05LjksNC40LTEzLjYNCgkJCWMyLjktMy43LDYuNi02LjYsMTAuOS04LjdjLTIuNy0xLjMtNC44LTIuOS02LjQtNS4xYy0xLjYtMi4xLTIuNC00LjktMi40LTguNGMwLTMuOSwxLTcuMSwzLjEtOS42YzItMi41LDQuNi00LjcsNy43LTYuOA0KCQkJYy00LjItMy4yLTcuNC03LjEtOS43LTExLjdjLTIuMi00LjYtMy40LTkuNi0zLjQtMTUuMXYtNC40YzAtNi45LDEuNy0xMi45LDUuMS0xOC4xYzMuNC01LjIsOC4yLTkuMywxNC40LTEyLjINCgkJCWM2LjItMi45LDEzLjQtNC40LDIxLjYtNC40YzQuNiwwLDksMC41LDEzLjEsMS42YzQuMSwxLjEsNy43LDIuNiwxMSw0LjVjMi40LTUuNiw0LjYtOS40LDYuNy0xMS40YzIuMS0yLDQuMS0yLjksNi4xLTIuOQ0KCQkJYzMuNCwwLDYsMSw3LjksMi45YzEuOSwyLDIuOCwzLjgsMi44LDUuNWMwLDEuMy0wLjMsMi40LTAuOSwzLjRjLTAuNiwxLTEuNSwxLjgtMi42LDIuNWMtMS4zLDAuOC0yLjgsMS45LTQuNiwzLjENCgkJCWMtMS44LDEuMi0zLjUsMi44LTUuMSw0LjljMi41LDIuOCw0LjQsNS45LDUuNiw5LjRjMS4yLDMuNCwxLjgsNy4yLDEuOCwxMS4zdjQuNGMwLDYuNy0xLjgsMTIuNy01LjMsMTgNCgkJCWMtMy41LDUuMy04LjQsOS40LTE0LjcsMTIuNWMtNi4zLDMuMS0xMy42LDQuNi0yMS43LDQuNmMtNS4xLDAtOS42LTAuNi0xMy43LTEuOWMtMC43LDAuNi0xLjMsMS4yLTEuOCwxLjkNCgkJCWMtMC41LDAuNy0wLjcsMS41LTAuNywyLjNjMCwyLjQsMS41LDQuMSw0LjYsNS4xYzMuMSwxLDcsMS44LDExLjgsMi4zYzQuOCwwLjYsOS45LDEuMywxNS4zLDIuMmM1LjQsMC45LDEwLjUsMi40LDE1LjMsNC4zDQoJCQljNC44LDIsOC43LDQuOSwxMS44LDguN2MzLjEsMy45LDQuNiw5LDQuNiwxNS41YzAsNy45LTIuMiwxNC4yLTYuNiwxOS4xYy00LjQsNC44LTEwLjEsOC40LTE3LjEsMTAuNg0KCQkJQzY2OC43LDE1Ny4yLDY2MS4zLDE1OC4zLDY1My40LDE1OC4zeiBNNjUzLDE0MC44YzUuNSwwLDEwLjEtMS4zLDE0LTRjMy45LTIuNyw1LjgtNi4yLDUuOC0xMC43YzAtMi45LTAuOC01LjMtMi41LTcuMg0KCQkJYy0xLjctMS44LTQtMy4yLTYuOC00LjFjLTIuOS0wLjktNi0xLjYtOS40LTIuMWMtMy40LTAuNS02LjctMC45LTEwLjEtMS40Yy0zLjQsMS41LTYuMSwzLjUtOC4yLDUuOWMtMi4xLDIuNC0zLjIsNS4zLTMuMiw4LjYNCgkJCWMwLDQuNiwyLDguMyw2LDExQzY0Mi42LDEzOS41LDY0Ny40LDE0MC44LDY1MywxNDAuOHogTTY1Mi42LDY4LjRjNC42LDAsOC4zLTEuOCwxMC45LTUuM2MyLjctMy41LDQtOCw0LTEzLjV2LTQuNA0KCQkJYzAtNS4yLTEuMy05LjUtMy45LTEzLjFjLTIuNi0zLjUtNi40LTUuMy0xMS4zLTUuM2MtNC44LDAtOC41LDEuOC0xMS4xLDUuM2MtMi42LDMuNS0zLjksNy45LTMuOSwxMy4xdjQuMg0KCQkJYzAsNS4zLDEuMyw5LjgsMy45LDEzLjVDNjQzLjksNjYuNiw2NDcuNyw2OC40LDY1Mi42LDY4LjR6Ii8+DQoJCTxwYXRoIGQ9Ik03NTQuMywxMTMuN2MtOC4xLDAtMTUuNy0yLTIyLjUtNmMtNi45LTQtMTIuNC05LjMtMTYuNi0xNS45Yy00LjItNi42LTYuMy0xMy43LTYuMy0yMS4zVjUzLjJjMC03LjYsMi0xNC42LDYuMS0yMS4yDQoJCQljNC4xLTYuNSw5LjYtMTEuOCwxNi41LTE1LjdjNi45LTMuOSwxNC42LTUuOSwyMi44LTUuOWM4LjMsMCwxNS45LDEuOSwyMi44LDUuOGM2LjksMy45LDEyLjUsOSwxNi42LDE1LjUNCgkJCWM0LjEsNi41LDYuMiwxMy42LDYuMiwyMS41djE3LjNjMCw3LjQtMi4xLDE0LjUtNi4zLDIxLjFjLTQuMiw2LjYtOS44LDExLjktMTYuNywxNkM3NzAsMTExLjYsNzYyLjQsMTEzLjcsNzU0LjMsMTEzLjd6DQoJCQkgTTc1NC4zLDg5LjljMy40LDAsNi41LTAuOSw5LjMtMi43YzIuOC0xLjgsNS4xLTQuMiw2LjctNy4zYzEuNy0zLDIuNS02LjEsMi41LTkuNFY1My4yYzAtMy4yLTAuOC02LjItMi41LTkuMQ0KCQkJYy0xLjctMi44LTMuOS01LjItNi42LTcuMWMtMi43LTEuOS01LjktMi44LTkuNC0yLjhjLTMuNCwwLTYuNSwwLjktOS4zLDIuN2MtMi44LDEuOC01LDQuMi02LjYsNy4xYy0xLjYsMi45LTIuNCw1LjktMi40LDkuMg0KCQkJdjE3LjNjMCwzLjIsMC44LDYuNCwyLjQsOS40YzEuNiwzLDMuOCw1LjQsNi42LDcuM0M3NDcuOCw4OC45LDc1MC45LDg5LjksNzU0LjMsODkuOXoiLz4NCgk8L2c+DQoJPHBhdGggZD0iTTE5MS4xLDUwLjNsLTI5LjQsMjkuM2wyOS40LDI5LjNsMjkuNC0yOS4zTDE5MS4xLDUwLjN6IE0xMTMsMTIwLjZMODMuNiw5MS4zYy0yLjEtMi4xLTUuNi0yLjEtNy43LDBsLTI5LjQsMjkuMw0KCQljLTIuMSwyLjEtNS42LDIuMS03LjcsMEwxLjYsODMuNWMtMi4xLTIuMS0yLjEtNS42LDAtNy44TDc1LjksMS42YzIuMS0yLjEsNS42LTIuMSw3LjcsMEwxMTMsMzAuOWMyLjEsMi4xLDUuNiwyLjEsNy43LDANCgkJbDI5LjQtMjkuM2MyLjEtMi4xLDUuNi0yLjEsNy43LDBsMjEuNiwyMS42YzIuMSwyLjEsMi4xLDUuNiwwLDcuOHYwYy0yLjEsMi4xLTUuNiwyLjEtNy43LDBsLTEzLjktMTMuOGMtMi4xLTIuMS01LjYtMi4xLTcuNywwDQoJCWwtMjEuNiwyMS42Yy0yLjEsMi4xLTIuMSw1LjYsMCw3LjhMMTUwLjEsNjhjMi4xLDIuMSw1LjYsMi4xLDcuNywwbDI5LjQtMjkuM2MyLjEtMi4xLDUuNi0yLjEsNy43LDBsMzcuMSwzNy4xDQoJCWMyLjEsMi4xLDIuMSw1LjYsMCw3LjhMMTk1LDEyMC42Yy0yLjEsMi4xLTUuNiwyLjEtNy43LDBsLTI5LjQtMjkuM2MtMi4xLTIuMS01LjYtMi4xLTcuNywwbC0yOS40LDI5LjMNCgkJQzExOC42LDEyMi44LDExNS4xLDEyMi44LDExMywxMjAuNkwxMTMsMTIwLjZ6IE04Ny41LDc5LjdsMjkuNCwyOS4zbDI5LjQtMjkuM2wtMjkuNC0yOS4zTDg3LjUsNzkuN3ogTTYyLDU0LjJsMTcuNywxNy43DQoJCWwyOS40LTI5LjNMNzkuNywxMy4yTDEzLjIsNzkuN0w0Mi42LDEwOUw3Miw3OS43TDU0LjMsNjJjLTIuMS0yLjEtMi4xLTUuNiwwLTcuOGwwLDBDNTYuNCw1Mi4xLDU5LjksNTIuMSw2Miw1NC4yeiIvPg0KPC9nPg0KPC9zdmc+DQo=&quot;/&gt;&lt;/g&gt;&lt;/svg&gt;&lt;/div&gt;
&lt;/p&gt;
&lt;/div&gt;

&lt;p&gt;
之后，我介绍了 Margo 的部分内容：
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;&lt;a href=&quot;./2024-05-20-margo-technical-lexicon&quot;&gt;技术术语&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;./2024-05-19-margo-edge-device&quot;&gt;对边缘计算设备的一些要求&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;./2024-05-22-margo-device-capability-discovery&quot;&gt;设备能力发现&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;./2024-05-23-margo-wos&quot;&gt;工作负载编排软件&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
在边缘设备上，配合工作负载编排软件的是工作负载编排代理（Workload
Orchestration Agent）。工作负载代理接收编排软件的设备状态请求，调整设备状态、汇报设备状态、上传设备能力说明文件。
&lt;/p&gt;

&lt;p&gt;
工作负载代理和工作负载编排软件的通信分为两种服务：
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;拉取（ Pulling ）/发布（ Posting ）服务&lt;/li&gt;
&lt;li&gt;部署服务&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
Margo 项目后续会提供工作负载代理的参考实现以及相关测试软件。设备提供商可以由此构建自己的方案，也可以遵循基本 Margo 定义的基本需求完全自己实现。
&lt;/p&gt;


&lt;div id=&quot;org42641d3&quot; class=&quot;figure&quot;&gt;
&lt;p&gt;&lt;div align=&quot;center&quot;&gt;&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
&lt;!-- Do not edit this file with editors other than draw.io --&gt;
&lt;!DOCTYPE svg PUBLIC &quot;-//W3C//DTD SVG 1.1//EN&quot; &quot;http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd&quot;&gt;
&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; xmlns:xlink=&quot;http://www.w3.org/1999/xlink&quot; version=&quot;1.1&quot; width=&quot;273px&quot; height=&quot;454px&quot; viewBox=&quot;-0.5 -0.5 273 454&quot; content=&quot;&amp;lt;mxfile host=&amp;quot;Electron&amp;quot; modified=&amp;quot;2024-03-15T15:24:10.511Z&amp;quot; agent=&amp;quot;Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) draw.io/23.1.5 Chrome/120.0.6099.109 Electron/28.1.0 Safari/537.36&amp;quot; etag=&amp;quot;mDxO_tBIF-RqcivZkKVQ&amp;quot; version=&amp;quot;23.1.5&amp;quot; type=&amp;quot;device&amp;quot;&amp;gt;&amp;#10;  &amp;lt;diagram name=&amp;quot;Page-1&amp;quot; id=&amp;quot;onsBRLAQCp5Sy4ReE0pJ&amp;quot;&amp;gt;&amp;#10;    &amp;lt;mxGraphModel dx=&amp;quot;1953&amp;quot; dy=&amp;quot;1757&amp;quot; grid=&amp;quot;1&amp;quot; gridSize=&amp;quot;10&amp;quot; guides=&amp;quot;1&amp;quot; tooltips=&amp;quot;1&amp;quot; connect=&amp;quot;1&amp;quot; arrows=&amp;quot;1&amp;quot; fold=&amp;quot;1&amp;quot; page=&amp;quot;1&amp;quot; pageScale=&amp;quot;1&amp;quot; pageWidth=&amp;quot;850&amp;quot; pageHeight=&amp;quot;1100&amp;quot; math=&amp;quot;0&amp;quot; shadow=&amp;quot;0&amp;quot;&amp;gt;&amp;#10;      &amp;lt;root&amp;gt;&amp;#10;        &amp;lt;mxCell id=&amp;quot;0&amp;quot; /&amp;gt;&amp;#10;        &amp;lt;mxCell id=&amp;quot;1&amp;quot; parent=&amp;quot;0&amp;quot; /&amp;gt;&amp;#10;        &amp;lt;mxCell id=&amp;quot;JrTQvIAGywV4kwQLnthq-2&amp;quot; value=&amp;quot;WORKLOAD ORCHESTRATION SOFTWARE&amp;quot; style=&amp;quot;whiteSpace=wrap;align=center;verticalAlign=middle;fontStyle=1;strokeWidth=3;fillColor=#fff2cc;strokeColor=#d6b656;fontSize=17;rounded=0;spacingRight=5;spacingLeft=5;fontFamily=Helvetica;&amp;quot; vertex=&amp;quot;1&amp;quot; parent=&amp;quot;1&amp;quot;&amp;gt;&amp;#10;          &amp;lt;mxGeometry x=&amp;quot;-820&amp;quot; y=&amp;quot;-1090&amp;quot; width=&amp;quot;270&amp;quot; height=&amp;quot;100&amp;quot; as=&amp;quot;geometry&amp;quot; /&amp;gt;&amp;#10;        &amp;lt;/mxCell&amp;gt;&amp;#10;        &amp;lt;mxCell id=&amp;quot;JrTQvIAGywV4kwQLnthq-15&amp;quot; value=&amp;quot;WORKLOAD ORCHESTRATION AGENT&amp;quot; style=&amp;quot;whiteSpace=wrap;align=center;verticalAlign=bottom;fontStyle=3;strokeWidth=3;fontSize=14;rounded=0;fontFamily=Helvetica;fillColor=#d5e8d4;strokeColor=#82b366;&amp;quot; vertex=&amp;quot;1&amp;quot; parent=&amp;quot;1&amp;quot;&amp;gt;&amp;#10;          &amp;lt;mxGeometry x=&amp;quot;-785&amp;quot; y=&amp;quot;-792.5&amp;quot; width=&amp;quot;200&amp;quot; height=&amp;quot;152.5&amp;quot; as=&amp;quot;geometry&amp;quot; /&amp;gt;&amp;#10;        &amp;lt;/mxCell&amp;gt;&amp;#10;        &amp;lt;mxCell id=&amp;quot;JrTQvIAGywV4kwQLnthq-27&amp;quot; value=&amp;quot;Device Configuration Repository&amp;quot; style=&amp;quot;whiteSpace=wrap;align=center;verticalAlign=middle;fontStyle=1;strokeWidth=3;fillColor=#fff2cc;strokeColor=#d6b656;fontSize=15;rounded=0;spacingRight=5;spacingLeft=5;fontFamily=Helvetica;&amp;quot; vertex=&amp;quot;1&amp;quot; parent=&amp;quot;1&amp;quot;&amp;gt;&amp;#10;          &amp;lt;mxGeometry x=&amp;quot;-784.9999999999999&amp;quot; y=&amp;quot;-990&amp;quot; width=&amp;quot;200&amp;quot; height=&amp;quot;72.5&amp;quot; as=&amp;quot;geometry&amp;quot; /&amp;gt;&amp;#10;        &amp;lt;/mxCell&amp;gt;&amp;#10;        &amp;lt;mxCell id=&amp;quot;JrTQvIAGywV4kwQLnthq-36&amp;quot; value=&amp;quot;&amp;quot; style=&amp;quot;edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;strokeColor=#001DBC;strokeWidth=2;align=center;verticalAlign=middle;fontFamily=Helvetica;fontSize=11;fontColor=default;labelBackgroundColor=default;elbow=horizontal;startArrow=none;startFill=0;endArrow=classic;fillColor=#0050ef;&amp;quot; edge=&amp;quot;1&amp;quot; parent=&amp;quot;1&amp;quot; source=&amp;quot;JrTQvIAGywV4kwQLnthq-28&amp;quot; target=&amp;quot;JrTQvIAGywV4kwQLnthq-21&amp;quot;&amp;gt;&amp;#10;          &amp;lt;mxGeometry relative=&amp;quot;1&amp;quot; as=&amp;quot;geometry&amp;quot; /&amp;gt;&amp;#10;        &amp;lt;/mxCell&amp;gt;&amp;#10;        &amp;lt;mxCell id=&amp;quot;JrTQvIAGywV4kwQLnthq-40&amp;quot; value=&amp;quot;&amp;amp;amp;nbsp;Pull Desired&amp;amp;amp;nbsp;&amp;amp;lt;br style=&amp;amp;quot;font-size: 10px;&amp;amp;quot;&amp;amp;gt;State&amp;quot; style=&amp;quot;edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];labelBorderColor=default;fontSize=10;&amp;quot; vertex=&amp;quot;1&amp;quot; connectable=&amp;quot;0&amp;quot; parent=&amp;quot;JrTQvIAGywV4kwQLnthq-36&amp;quot;&amp;gt;&amp;#10;          &amp;lt;mxGeometry x=&amp;quot;-0.1714&amp;quot; y=&amp;quot;-2&amp;quot; relative=&amp;quot;1&amp;quot; as=&amp;quot;geometry&amp;quot;&amp;gt;&amp;#10;            &amp;lt;mxPoint x=&amp;quot;2&amp;quot; y=&amp;quot;1&amp;quot; as=&amp;quot;offset&amp;quot; /&amp;gt;&amp;#10;          &amp;lt;/mxGeometry&amp;gt;&amp;#10;        &amp;lt;/mxCell&amp;gt;&amp;#10;        &amp;lt;mxCell id=&amp;quot;JrTQvIAGywV4kwQLnthq-28&amp;quot; value=&amp;quot;&amp;quot; style=&amp;quot;verticalLabelPosition=bottom;verticalAlign=top;html=1;shape=mxgraph.basic.half_circle;fillColor=#0050ef;rotation=0;rounded=0;fontFamily=Helvetica;fontColor=#ffffff;strokeColor=#001DBC;&amp;quot; vertex=&amp;quot;1&amp;quot; parent=&amp;quot;1&amp;quot;&amp;gt;&amp;#10;          &amp;lt;mxGeometry x=&amp;quot;-754.5799999999999&amp;quot; y=&amp;quot;-917.5&amp;quot; width=&amp;quot;55&amp;quot; height=&amp;quot;27.5&amp;quot; as=&amp;quot;geometry&amp;quot; /&amp;gt;&amp;#10;        &amp;lt;/mxCell&amp;gt;&amp;#10;        &amp;lt;mxCell id=&amp;quot;JrTQvIAGywV4kwQLnthq-35&amp;quot; value=&amp;quot;&amp;quot; style=&amp;quot;verticalLabelPosition=bottom;verticalAlign=top;html=1;shape=mxgraph.basic.half_circle;fillColor=#0050ef;rotation=0;rounded=0;fontFamily=Helvetica;fontColor=#ffffff;strokeColor=#001DBC;&amp;quot; vertex=&amp;quot;1&amp;quot; parent=&amp;quot;1&amp;quot;&amp;gt;&amp;#10;          &amp;lt;mxGeometry x=&amp;quot;-663.54&amp;quot; y=&amp;quot;-917.5&amp;quot; width=&amp;quot;55&amp;quot; height=&amp;quot;27.5&amp;quot; as=&amp;quot;geometry&amp;quot; /&amp;gt;&amp;#10;        &amp;lt;/mxCell&amp;gt;&amp;#10;        &amp;lt;mxCell id=&amp;quot;JrTQvIAGywV4kwQLnthq-37&amp;quot; style=&amp;quot;edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0.5;entryY=1;entryDx=0;entryDy=0;entryPerimeter=0;strokeColor=#001DBC;strokeWidth=2;align=center;verticalAlign=middle;fontFamily=Helvetica;fontSize=11;fontColor=default;labelBackgroundColor=default;elbow=horizontal;startArrow=none;startFill=0;endArrow=classic;fillColor=#0050ef;&amp;quot; edge=&amp;quot;1&amp;quot; parent=&amp;quot;1&amp;quot; source=&amp;quot;JrTQvIAGywV4kwQLnthq-34&amp;quot; target=&amp;quot;JrTQvIAGywV4kwQLnthq-35&amp;quot;&amp;gt;&amp;#10;          &amp;lt;mxGeometry relative=&amp;quot;1&amp;quot; as=&amp;quot;geometry&amp;quot; /&amp;gt;&amp;#10;        &amp;lt;/mxCell&amp;gt;&amp;#10;        &amp;lt;mxCell id=&amp;quot;JrTQvIAGywV4kwQLnthq-41&amp;quot; value=&amp;quot;&amp;amp;amp;nbsp;Post Current&amp;amp;amp;nbsp;&amp;amp;lt;br style=&amp;amp;quot;font-size: 10px;&amp;amp;quot;&amp;amp;gt;State&amp;quot; style=&amp;quot;edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];labelBorderColor=default;fontSize=10;&amp;quot; vertex=&amp;quot;1&amp;quot; connectable=&amp;quot;0&amp;quot; parent=&amp;quot;JrTQvIAGywV4kwQLnthq-37&amp;quot;&amp;gt;&amp;#10;          &amp;lt;mxGeometry x=&amp;quot;0.1143&amp;quot; relative=&amp;quot;1&amp;quot; as=&amp;quot;geometry&amp;quot;&amp;gt;&amp;#10;            &amp;lt;mxPoint as=&amp;quot;offset&amp;quot; /&amp;gt;&amp;#10;          &amp;lt;/mxGeometry&amp;gt;&amp;#10;        &amp;lt;/mxCell&amp;gt;&amp;#10;        &amp;lt;mxCell id=&amp;quot;JrTQvIAGywV4kwQLnthq-42&amp;quot; value=&amp;quot;&amp;quot; style=&amp;quot;edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;startArrow=none;startFill=0;fillColor=#0050ef;strokeColor=#001DBC;fontSize=12;verticalAlign=top;strokeWidth=2;exitPerimeter=0;entryX=0.5;entryY=1;entryDx=0;entryDy=0;entryPerimeter=0;align=center;fontFamily=Helvetica;fontColor=default;labelBackgroundColor=default;endArrow=classic;&amp;quot; edge=&amp;quot;1&amp;quot; parent=&amp;quot;1&amp;quot; source=&amp;quot;JrTQvIAGywV4kwQLnthq-44&amp;quot; target=&amp;quot;JrTQvIAGywV4kwQLnthq-43&amp;quot;&amp;gt;&amp;#10;          &amp;lt;mxGeometry relative=&amp;quot;1&amp;quot; as=&amp;quot;geometry&amp;quot;&amp;gt;&amp;#10;            &amp;lt;mxPoint x=&amp;quot;-752.6199999999999&amp;quot; y=&amp;quot;-772.7&amp;quot; as=&amp;quot;sourcePoint&amp;quot; /&amp;gt;&amp;#10;            &amp;lt;mxPoint x=&amp;quot;-696.6199999999999&amp;quot; y=&amp;quot;-772.2&amp;quot; as=&amp;quot;targetPoint&amp;quot; /&amp;gt;&amp;#10;          &amp;lt;/mxGeometry&amp;gt;&amp;#10;        &amp;lt;/mxCell&amp;gt;&amp;#10;        &amp;lt;mxCell id=&amp;quot;JrTQvIAGywV4kwQLnthq-48&amp;quot; value=&amp;quot;&amp;amp;amp;nbsp;Apply Desired&amp;amp;amp;nbsp;&amp;amp;lt;br style=&amp;amp;quot;font-size: 10px;&amp;amp;quot;&amp;amp;gt;State&amp;quot; style=&amp;quot;edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];labelBorderColor=default;fontSize=10;&amp;quot; vertex=&amp;quot;1&amp;quot; connectable=&amp;quot;0&amp;quot; parent=&amp;quot;JrTQvIAGywV4kwQLnthq-42&amp;quot;&amp;gt;&amp;#10;          &amp;lt;mxGeometry x=&amp;quot;-0.4841&amp;quot; y=&amp;quot;1&amp;quot; relative=&amp;quot;1&amp;quot; as=&amp;quot;geometry&amp;quot;&amp;gt;&amp;#10;            &amp;lt;mxPoint x=&amp;quot;54&amp;quot; as=&amp;quot;offset&amp;quot; /&amp;gt;&amp;#10;          &amp;lt;/mxGeometry&amp;gt;&amp;#10;        &amp;lt;/mxCell&amp;gt;&amp;#10;        &amp;lt;mxCell id=&amp;quot;JrTQvIAGywV4kwQLnthq-21&amp;quot; value=&amp;quot;&amp;quot; style=&amp;quot;verticalLabelPosition=bottom;verticalAlign=top;html=1;shape=mxgraph.basic.half_circle;fillColor=#0050ef;rotation=-180;rounded=0;fontFamily=Helvetica;fontColor=#ffffff;strokeColor=#001DBC;&amp;quot; vertex=&amp;quot;1&amp;quot; parent=&amp;quot;1&amp;quot;&amp;gt;&amp;#10;          &amp;lt;mxGeometry x=&amp;quot;-754.5799999999999&amp;quot; y=&amp;quot;-819.9999999999999&amp;quot; width=&amp;quot;55&amp;quot; height=&amp;quot;27.5&amp;quot; as=&amp;quot;geometry&amp;quot; /&amp;gt;&amp;#10;        &amp;lt;/mxCell&amp;gt;&amp;#10;        &amp;lt;mxCell id=&amp;quot;JrTQvIAGywV4kwQLnthq-34&amp;quot; value=&amp;quot;&amp;quot; style=&amp;quot;verticalLabelPosition=bottom;verticalAlign=top;html=1;shape=mxgraph.basic.half_circle;fillColor=#0050ef;rotation=-180;rounded=0;fontFamily=Helvetica;fontColor=#ffffff;strokeColor=#001DBC;&amp;quot; vertex=&amp;quot;1&amp;quot; parent=&amp;quot;1&amp;quot;&amp;gt;&amp;#10;          &amp;lt;mxGeometry x=&amp;quot;-663.54&amp;quot; y=&amp;quot;-819.9999999999999&amp;quot; width=&amp;quot;55&amp;quot; height=&amp;quot;27.5&amp;quot; as=&amp;quot;geometry&amp;quot; /&amp;gt;&amp;#10;        &amp;lt;/mxCell&amp;gt;&amp;#10;        &amp;lt;mxCell id=&amp;quot;JrTQvIAGywV4kwQLnthq-45&amp;quot; value=&amp;quot;&amp;quot; style=&amp;quot;group&amp;quot; vertex=&amp;quot;1&amp;quot; connectable=&amp;quot;0&amp;quot; parent=&amp;quot;1&amp;quot;&amp;gt;&amp;#10;          &amp;lt;mxGeometry x=&amp;quot;-775&amp;quot; y=&amp;quot;-724.88&amp;quot; width=&amp;quot;180&amp;quot; height=&amp;quot;45.75&amp;quot; as=&amp;quot;geometry&amp;quot; /&amp;gt;&amp;#10;        &amp;lt;/mxCell&amp;gt;&amp;#10;        &amp;lt;mxCell id=&amp;quot;JrTQvIAGywV4kwQLnthq-33&amp;quot; value=&amp;quot;Deployment Service&amp;quot; style=&amp;quot;whiteSpace=wrap;align=center;verticalAlign=top;fontStyle=1;strokeWidth=3;fontSize=14;rounded=0;fontFamily=Helvetica;fillColor=#d5e8d4;strokeColor=#82b366;&amp;quot; vertex=&amp;quot;1&amp;quot; parent=&amp;quot;JrTQvIAGywV4kwQLnthq-45&amp;quot;&amp;gt;&amp;#10;          &amp;lt;mxGeometry y=&amp;quot;15.75&amp;quot; width=&amp;quot;180&amp;quot; height=&amp;quot;30&amp;quot; as=&amp;quot;geometry&amp;quot; /&amp;gt;&amp;#10;        &amp;lt;/mxCell&amp;gt;&amp;#10;        &amp;lt;mxCell id=&amp;quot;JrTQvIAGywV4kwQLnthq-43&amp;quot; value=&amp;quot;&amp;quot; style=&amp;quot;verticalLabelPosition=bottom;verticalAlign=top;html=1;shape=mxgraph.basic.half_circle;fillColor=#0050ef;rotation=-180;rounded=0;fontFamily=Helvetica;fontColor=#ffffff;strokeColor=#001DBC;&amp;quot; vertex=&amp;quot;1&amp;quot; parent=&amp;quot;JrTQvIAGywV4kwQLnthq-45&amp;quot;&amp;gt;&amp;#10;          &amp;lt;mxGeometry x=&amp;quot;77.50000000000011&amp;quot; width=&amp;quot;25&amp;quot; height=&amp;quot;15.75&amp;quot; as=&amp;quot;geometry&amp;quot; /&amp;gt;&amp;#10;        &amp;lt;/mxCell&amp;gt;&amp;#10;        &amp;lt;mxCell id=&amp;quot;JrTQvIAGywV4kwQLnthq-46&amp;quot; value=&amp;quot;&amp;quot; style=&amp;quot;group&amp;quot; vertex=&amp;quot;1&amp;quot; connectable=&amp;quot;0&amp;quot; parent=&amp;quot;1&amp;quot;&amp;gt;&amp;#10;          &amp;lt;mxGeometry x=&amp;quot;-775&amp;quot; y=&amp;quot;-790&amp;quot; width=&amp;quot;180&amp;quot; height=&amp;quot;45.749999999999886&amp;quot; as=&amp;quot;geometry&amp;quot; /&amp;gt;&amp;#10;        &amp;lt;/mxCell&amp;gt;&amp;#10;        &amp;lt;mxCell id=&amp;quot;JrTQvIAGywV4kwQLnthq-32&amp;quot; value=&amp;quot;Pulling/Posting Service&amp;quot; style=&amp;quot;whiteSpace=wrap;align=center;verticalAlign=top;fontStyle=1;strokeWidth=3;fontSize=14;rounded=0;fontFamily=Helvetica;fillColor=#d5e8d4;strokeColor=#82b366;&amp;quot; vertex=&amp;quot;1&amp;quot; parent=&amp;quot;JrTQvIAGywV4kwQLnthq-46&amp;quot;&amp;gt;&amp;#10;          &amp;lt;mxGeometry width=&amp;quot;180&amp;quot; height=&amp;quot;30&amp;quot; as=&amp;quot;geometry&amp;quot; /&amp;gt;&amp;#10;        &amp;lt;/mxCell&amp;gt;&amp;#10;        &amp;lt;mxCell id=&amp;quot;JrTQvIAGywV4kwQLnthq-44&amp;quot; value=&amp;quot;&amp;quot; style=&amp;quot;verticalLabelPosition=bottom;verticalAlign=top;html=1;shape=mxgraph.basic.half_circle;fillColor=#0050ef;rotation=-180;rounded=0;fontFamily=Helvetica;fontColor=#ffffff;strokeColor=#001DBC;direction=west;&amp;quot; vertex=&amp;quot;1&amp;quot; parent=&amp;quot;JrTQvIAGywV4kwQLnthq-46&amp;quot;&amp;gt;&amp;#10;          &amp;lt;mxGeometry x=&amp;quot;77.5&amp;quot; y=&amp;quot;29.999999999999886&amp;quot; width=&amp;quot;25&amp;quot; height=&amp;quot;15.75&amp;quot; as=&amp;quot;geometry&amp;quot; /&amp;gt;&amp;#10;        &amp;lt;/mxCell&amp;gt;&amp;#10;      &amp;lt;/root&amp;gt;&amp;#10;    &amp;lt;/mxGraphModel&amp;gt;&amp;#10;  &amp;lt;/diagram&amp;gt;&amp;#10;&amp;lt;/mxfile&amp;gt;&amp;#10;&quot;&gt;&lt;defs/&gt;&lt;g&gt;&lt;rect x=&quot;1&quot; y=&quot;1&quot; width=&quot;270&quot; height=&quot;100&quot; fill=&quot;#fff2cc&quot; stroke=&quot;#d6b656&quot; stroke-width=&quot;3&quot; pointer-events=&quot;all&quot;/&gt;&lt;g transform=&quot;translate(-0.5 -0.5)&quot;&gt;&lt;switch&gt;&lt;foreignObject pointer-events=&quot;none&quot; width=&quot;100%&quot; height=&quot;100%&quot; requiredFeatures=&quot;http://www.w3.org/TR/SVG11/feature#Extensibility&quot; style=&quot;overflow: visible; text-align: left;&quot;&gt;&lt;div xmlns=&quot;http://www.w3.org/1999/xhtml&quot; style=&quot;display: flex; align-items: unsafe center; justify-content: unsafe center; width: 258px; height: 1px; padding-top: 51px; margin-left: 7px;&quot;&gt;&lt;div data-drawio-colors=&quot;color: rgb(0, 0, 0); &quot; style=&quot;box-sizing: border-box; font-size: 0px; text-align: center;&quot;&gt;&lt;div style=&quot;display: inline-block; font-size: 17px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; font-weight: bold; white-space: normal; overflow-wrap: normal;&quot;&gt;WORKLOAD ORCHESTRATION SOFTWARE&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/foreignObject&gt;&lt;text x=&quot;136&quot; y=&quot;56&quot; fill=&quot;rgb(0, 0, 0)&quot; font-family=&quot;Helvetica&quot; font-size=&quot;17px&quot; text-anchor=&quot;middle&quot; font-weight=&quot;bold&quot;&gt;WORKLOAD ORCHESTRATION SOFTWARE&lt;/text&gt;&lt;/switch&gt;&lt;/g&gt;&lt;rect x=&quot;36&quot; y=&quot;298.5&quot; width=&quot;200&quot; height=&quot;152.5&quot; fill=&quot;#d5e8d4&quot; stroke=&quot;#82b366&quot; stroke-width=&quot;3&quot; pointer-events=&quot;all&quot;/&gt;&lt;g transform=&quot;translate(-0.5 -0.5)&quot;&gt;&lt;switch&gt;&lt;foreignObject pointer-events=&quot;none&quot; width=&quot;100%&quot; height=&quot;100%&quot; requiredFeatures=&quot;http://www.w3.org/TR/SVG11/feature#Extensibility&quot; style=&quot;overflow: visible; text-align: left;&quot;&gt;&lt;div xmlns=&quot;http://www.w3.org/1999/xhtml&quot; style=&quot;display: flex; align-items: unsafe flex-end; justify-content: unsafe center; width: 198px; height: 1px; padding-top: 448px; margin-left: 37px;&quot;&gt;&lt;div data-drawio-colors=&quot;color: rgb(0, 0, 0); &quot; style=&quot;box-sizing: border-box; font-size: 0px; text-align: center;&quot;&gt;&lt;div style=&quot;display: inline-block; font-size: 14px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; font-weight: bold; font-style: italic; white-space: normal; overflow-wrap: normal;&quot;&gt;WORKLOAD ORCHESTRATION AGENT&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/foreignObject&gt;&lt;text x=&quot;136&quot; y=&quot;448&quot; fill=&quot;rgb(0, 0, 0)&quot; font-family=&quot;Helvetica&quot; font-size=&quot;14px&quot; text-anchor=&quot;middle&quot; font-weight=&quot;bold&quot; font-style=&quot;italic&quot;&gt;WORKLOAD ORCHESTRATION AGENT&lt;/text&gt;&lt;/switch&gt;&lt;/g&gt;&lt;rect x=&quot;36&quot; y=&quot;101&quot; width=&quot;200&quot; height=&quot;72.5&quot; fill=&quot;#fff2cc&quot; stroke=&quot;#d6b656&quot; stroke-width=&quot;3&quot; pointer-events=&quot;all&quot;/&gt;&lt;g transform=&quot;translate(-0.5 -0.5)&quot;&gt;&lt;switch&gt;&lt;foreignObject pointer-events=&quot;none&quot; width=&quot;100%&quot; height=&quot;100%&quot; requiredFeatures=&quot;http://www.w3.org/TR/SVG11/feature#Extensibility&quot; style=&quot;overflow: visible; text-align: left;&quot;&gt;&lt;div xmlns=&quot;http://www.w3.org/1999/xhtml&quot; style=&quot;display: flex; align-items: unsafe center; justify-content: unsafe center; width: 188px; height: 1px; padding-top: 137px; margin-left: 42px;&quot;&gt;&lt;div data-drawio-colors=&quot;color: rgb(0, 0, 0); &quot; style=&quot;box-sizing: border-box; font-size: 0px; text-align: center;&quot;&gt;&lt;div style=&quot;display: inline-block; font-size: 15px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; font-weight: bold; white-space: normal; overflow-wrap: normal;&quot;&gt;Device Configuration Repository&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/foreignObject&gt;&lt;text x=&quot;136&quot; y=&quot;142&quot; fill=&quot;rgb(0, 0, 0)&quot; font-family=&quot;Helvetica&quot; font-size=&quot;15px&quot; text-anchor=&quot;middle&quot; font-weight=&quot;bold&quot;&gt;Device Configuration Repo...&lt;/text&gt;&lt;/switch&gt;&lt;/g&gt;&lt;path d=&quot;M 93.92 201 L 93.92 262.76&quot; fill=&quot;none&quot; stroke=&quot;#001dbc&quot; stroke-width=&quot;2&quot; stroke-miterlimit=&quot;10&quot; pointer-events=&quot;stroke&quot;/&gt;&lt;path d=&quot;M 93.92 268.76 L 89.92 260.76 L 93.92 262.76 L 97.92 260.76 Z&quot; fill=&quot;#001dbc&quot; stroke=&quot;#001dbc&quot; stroke-width=&quot;2&quot; stroke-miterlimit=&quot;10&quot; pointer-events=&quot;all&quot;/&gt;&lt;g transform=&quot;translate(-0.5 -0.5)&quot;&gt;&lt;switch&gt;&lt;foreignObject pointer-events=&quot;none&quot; width=&quot;100%&quot; height=&quot;100%&quot; requiredFeatures=&quot;http://www.w3.org/TR/SVG11/feature#Extensibility&quot; style=&quot;overflow: visible; text-align: left;&quot;&gt;&lt;div xmlns=&quot;http://www.w3.org/1999/xhtml&quot; style=&quot;display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 232px; margin-left: 94px;&quot;&gt;&lt;div data-drawio-colors=&quot;color: rgb(0, 0, 0); background-color: rgb(255, 255, 255); border-color: rgb(0, 0, 0); &quot; style=&quot;box-sizing: border-box; font-size: 0px; text-align: center;&quot;&gt;&lt;div style=&quot;display: inline-block; font-size: 10px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; background-color: rgb(255, 255, 255); border: 1px solid rgb(0, 0, 0); white-space: nowrap;&quot;&gt; Pull Desired &lt;br style=&quot;font-size: 10px;&quot; /&gt;State&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/foreignObject&gt;&lt;text x=&quot;94&quot; y=&quot;235&quot; fill=&quot;rgb(0, 0, 0)&quot; font-family=&quot;Helvetica&quot; font-size=&quot;10px&quot; text-anchor=&quot;middle&quot;&gt;Pull Desired...&lt;/text&gt;&lt;/switch&gt;&lt;/g&gt;&lt;path d=&quot;M 66.42 173.5 C 66.42 188.69 78.73 201 93.92 201 C 109.11 201 121.42 188.69 121.42 173.5 Z&quot; fill=&quot;#0050ef&quot; stroke=&quot;#001dbc&quot; stroke-miterlimit=&quot;10&quot; pointer-events=&quot;all&quot;/&gt;&lt;path d=&quot;M 157.46 173.5 C 157.46 188.69 169.77 201 184.96 201 C 200.15 201 212.46 188.69 212.46 173.5 Z&quot; fill=&quot;#0050ef&quot; stroke=&quot;#001dbc&quot; stroke-miterlimit=&quot;10&quot; pointer-events=&quot;all&quot;/&gt;&lt;path d=&quot;M 184.96 271 L 184.96 209.24&quot; fill=&quot;none&quot; stroke=&quot;#001dbc&quot; stroke-width=&quot;2&quot; stroke-miterlimit=&quot;10&quot; pointer-events=&quot;stroke&quot;/&gt;&lt;path d=&quot;M 184.96 203.24 L 188.96 211.24 L 184.96 209.24 L 180.96 211.24 Z&quot; fill=&quot;#001dbc&quot; stroke=&quot;#001dbc&quot; stroke-width=&quot;2&quot; stroke-miterlimit=&quot;10&quot; pointer-events=&quot;all&quot;/&gt;&lt;g transform=&quot;translate(-0.5 -0.5)&quot;&gt;&lt;switch&gt;&lt;foreignObject pointer-events=&quot;none&quot; width=&quot;100%&quot; height=&quot;100%&quot; requiredFeatures=&quot;http://www.w3.org/TR/SVG11/feature#Extensibility&quot; style=&quot;overflow: visible; text-align: left;&quot;&gt;&lt;div xmlns=&quot;http://www.w3.org/1999/xhtml&quot; style=&quot;display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 232px; margin-left: 185px;&quot;&gt;&lt;div data-drawio-colors=&quot;color: rgb(0, 0, 0); background-color: rgb(255, 255, 255); border-color: rgb(0, 0, 0); &quot; style=&quot;box-sizing: border-box; font-size: 0px; text-align: center;&quot;&gt;&lt;div style=&quot;display: inline-block; font-size: 10px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; background-color: rgb(255, 255, 255); border: 1px solid rgb(0, 0, 0); white-space: nowrap;&quot;&gt; Post Current &lt;br style=&quot;font-size: 10px;&quot; /&gt;State&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/foreignObject&gt;&lt;text x=&quot;185&quot; y=&quot;235&quot; fill=&quot;rgb(0, 0, 0)&quot; font-family=&quot;Helvetica&quot; font-size=&quot;10px&quot; text-anchor=&quot;middle&quot;&gt;Post Current...&lt;/text&gt;&lt;/switch&gt;&lt;/g&gt;&lt;path d=&quot;M 136 346.75 L 136 357.88&quot; fill=&quot;none&quot; stroke=&quot;#001dbc&quot; stroke-width=&quot;2&quot; stroke-miterlimit=&quot;10&quot; pointer-events=&quot;stroke&quot;/&gt;&lt;path d=&quot;M 136 363.88 L 132 355.88 L 136 357.88 L 140 355.88 Z&quot; fill=&quot;#001dbc&quot; stroke=&quot;#001dbc&quot; stroke-width=&quot;2&quot; stroke-miterlimit=&quot;10&quot; pointer-events=&quot;all&quot;/&gt;&lt;g transform=&quot;translate(-0.5 -0.5)&quot;&gt;&lt;switch&gt;&lt;foreignObject pointer-events=&quot;none&quot; width=&quot;100%&quot; height=&quot;100%&quot; requiredFeatures=&quot;http://www.w3.org/TR/SVG11/feature#Extensibility&quot; style=&quot;overflow: visible; text-align: left;&quot;&gt;&lt;div xmlns=&quot;http://www.w3.org/1999/xhtml&quot; style=&quot;display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 352px; margin-left: 191px;&quot;&gt;&lt;div data-drawio-colors=&quot;color: rgb(0, 0, 0); background-color: rgb(255, 255, 255); border-color: rgb(0, 0, 0); &quot; style=&quot;box-sizing: border-box; font-size: 0px; text-align: center;&quot;&gt;&lt;div style=&quot;display: inline-block; font-size: 10px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; background-color: rgb(255, 255, 255); border: 1px solid rgb(0, 0, 0); white-space: nowrap;&quot;&gt; Apply Desired &lt;br style=&quot;font-size: 10px;&quot; /&gt;State&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/foreignObject&gt;&lt;text x=&quot;191&quot; y=&quot;355&quot; fill=&quot;rgb(0, 0, 0)&quot; font-family=&quot;Helvetica&quot; font-size=&quot;10px&quot; text-anchor=&quot;middle&quot;&gt;Apply Desired...&lt;/text&gt;&lt;/switch&gt;&lt;/g&gt;&lt;path d=&quot;M 66.42 271 C 66.42 286.19 78.73 298.5 93.92 298.5 C 109.11 298.5 121.42 286.19 121.42 271 Z&quot; fill=&quot;#0050ef&quot; stroke=&quot;#001dbc&quot; stroke-miterlimit=&quot;10&quot; transform=&quot;rotate(-180,93.92,284.75)&quot; pointer-events=&quot;all&quot;/&gt;&lt;path d=&quot;M 157.46 271 C 157.46 286.19 169.77 298.5 184.96 298.5 C 200.15 298.5 212.46 286.19 212.46 271 Z&quot; fill=&quot;#0050ef&quot; stroke=&quot;#001dbc&quot; stroke-miterlimit=&quot;10&quot; transform=&quot;rotate(-180,184.96,284.75)&quot; pointer-events=&quot;all&quot;/&gt;&lt;rect x=&quot;46&quot; y=&quot;381.87&quot; width=&quot;180&quot; height=&quot;30&quot; fill=&quot;#d5e8d4&quot; stroke=&quot;#82b366&quot; stroke-width=&quot;3&quot; pointer-events=&quot;all&quot;/&gt;&lt;g transform=&quot;translate(-0.5 -0.5)&quot;&gt;&lt;switch&gt;&lt;foreignObject pointer-events=&quot;none&quot; width=&quot;100%&quot; height=&quot;100%&quot; requiredFeatures=&quot;http://www.w3.org/TR/SVG11/feature#Extensibility&quot; style=&quot;overflow: visible; text-align: left;&quot;&gt;&lt;div xmlns=&quot;http://www.w3.org/1999/xhtml&quot; style=&quot;display: flex; align-items: unsafe flex-start; justify-content: unsafe center; width: 178px; height: 1px; padding-top: 389px; margin-left: 47px;&quot;&gt;&lt;div data-drawio-colors=&quot;color: rgb(0, 0, 0); &quot; style=&quot;box-sizing: border-box; font-size: 0px; text-align: center;&quot;&gt;&lt;div style=&quot;display: inline-block; font-size: 14px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; font-weight: bold; white-space: normal; overflow-wrap: normal;&quot;&gt;Deployment Service&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/foreignObject&gt;&lt;text x=&quot;136&quot; y=&quot;403&quot; fill=&quot;rgb(0, 0, 0)&quot; font-family=&quot;Helvetica&quot; font-size=&quot;14px&quot; text-anchor=&quot;middle&quot; font-weight=&quot;bold&quot;&gt;Deployment Service&lt;/text&gt;&lt;/switch&gt;&lt;/g&gt;&lt;path d=&quot;M 123.5 366.12 C 123.5 374.82 129.1 381.87 136 381.87 C 142.9 381.87 148.5 374.82 148.5 366.12 Z&quot; fill=&quot;#0050ef&quot; stroke=&quot;#001dbc&quot; stroke-miterlimit=&quot;10&quot; transform=&quot;rotate(-180,136,373.99)&quot; pointer-events=&quot;all&quot;/&gt;&lt;rect x=&quot;46&quot; y=&quot;301&quot; width=&quot;180&quot; height=&quot;30&quot; fill=&quot;#d5e8d4&quot; stroke=&quot;#82b366&quot; stroke-width=&quot;3&quot; pointer-events=&quot;all&quot;/&gt;&lt;g transform=&quot;translate(-0.5 -0.5)&quot;&gt;&lt;switch&gt;&lt;foreignObject pointer-events=&quot;none&quot;  requiredFeatures=&quot;http://www.w3.org/TR/SVG11/feature#Extensibility&quot; style=&quot;overflow: visible; text-align: left;&quot;&gt;&lt;div xmlns=&quot;http://www.w3.org/1999/xhtml&quot; style=&quot;display: flex; align-items: unsafe flex-start; justify-content: unsafe center; width: 178px; height: 1px; padding-top: 308px; margin-left: 47px;&quot;&gt;&lt;div data-drawio-colors=&quot;color: rgb(0, 0, 0); &quot; style=&quot;box-sizing: border-box; font-size: 0px; text-align: center;&quot;&gt;&lt;div style=&quot;display: inline-block; font-size: 14px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; font-weight: bold; white-space: normal; overflow-wrap: normal;&quot;&gt;Pulling/Posting Service&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/foreignObject&gt;&lt;text x=&quot;136&quot; y=&quot;322&quot; fill=&quot;rgb(0, 0, 0)&quot; font-family=&quot;Helvetica&quot; font-size=&quot;14px&quot; text-anchor=&quot;middle&quot; font-weight=&quot;bold&quot;&gt;Pulling/Posting Service&lt;/text&gt;&lt;/switch&gt;&lt;/g&gt;&lt;path d=&quot;M 123.5 331 C 123.5 339.7 129.1 346.75 136 346.75 C 142.9 346.75 148.5 339.7 148.5 331 Z&quot; fill=&quot;#0050ef&quot; stroke=&quot;#001dbc&quot; stroke-miterlimit=&quot;10&quot; pointer-events=&quot;all&quot;/&gt;&lt;/g&gt;&lt;switch&gt;&lt;g requiredFeatures=&quot;http://www.w3.org/TR/SVG11/feature#Extensibility&quot;/&gt;&lt;a transform=&quot;translate(0,-5)&quot; xlink:href=&quot;https://www.drawio.com/doc/faq/svg-export-text-problems&quot; target=&quot;_blank&quot;&gt;&lt;text text-anchor=&quot;middle&quot; font-size=&quot;10px&quot; x=&quot;50%&quot; y=&quot;100%&quot;&gt;Text is not SVG - cannot display&lt;/text&gt;&lt;/a&gt;&lt;/switch&gt;&lt;/svg&gt;&lt;/div&gt;
&lt;/p&gt;
&lt;/div&gt;

&lt;p&gt;
Margo 工作负载代理的基本要求如下：
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;支持通过拉取方法获取配置文件，包括可配置的拉取时间间隔&lt;/li&gt;
&lt;li&gt;支持通过发布方法向工作负载编排软件提供设备当前工作状态&lt;/li&gt;
&lt;li&gt;支持安全的方式把设备接入网络，与工作负载编排软件进行安全通信&lt;/li&gt;
&lt;li&gt;编排软件和代理之间的通信遵循工业行业的信息安全标准&lt;/li&gt;
&lt;li&gt;编排代理占用少量资源，确保可以支持高中低不同性能档次的设备&lt;/li&gt;
&lt;li&gt;最好能以容器方式运行编排代理&lt;/li&gt;
&lt;/ul&gt;
</content>
 </entry>
 
 <entry>
   <title>边缘计算新标准 Margo：工作负载编排软件</title>
   <link href="http://kimi.im/2024-05-23-margo-wos"/>
   <updated>2024-05-23T00:00:00+00:00</updated>
   <id>http://kimi.im/margo-wos</id>
   <content type="html">&lt;p&gt;
Linux 基金会近日联合 ABB ，B&amp;amp;R， Capgemini ，微软，罗克韦尔自动化，施耐德电气，以及西门子，发起了一个新的&lt;a href=&quot;./2024-05-16-margo&quot;&gt;开放标准项目 Margo&lt;/a&gt;。目的是定义一套灵活、简单、易扩展的边缘接口标准。通过边缘编排软件，把边缘应用和边缘设备进行有效的管理起来。
&lt;/p&gt;


&lt;div id=&quot;org65559f0&quot; class=&quot;figure&quot;&gt;
&lt;p&gt;&lt;div align=&quot;center&quot;&gt;&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
&lt;!DOCTYPE svg PUBLIC &quot;-//W3C//DTD SVG 1.1//EN&quot; &quot;http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd&quot;&gt;
&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; xmlns:xlink=&quot;http://www.w3.org/1999/xlink&quot; version=&quot;1.1&quot; width=&quot;881px&quot; height=&quot;241px&quot; viewBox=&quot;-0.5 -0.5 881 241&quot; style=&quot;background-color: rgb(255, 255, 255);&quot;&gt;&lt;defs/&gt;&lt;g&gt;&lt;rect x=&quot;0&quot; y=&quot;0&quot; width=&quot;880&quot; height=&quot;240&quot; rx=&quot;16.8&quot; ry=&quot;16.8&quot; fill=&quot;rgb(255, 255, 255)&quot; stroke=&quot;none&quot; pointer-events=&quot;all&quot;/&gt;&lt;image x=&quot;39.5&quot; y=&quot;39.5&quot;  xlink:href=&quot;data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCjwhLS0gR2VuZXJhdG9yOiBBZG9iZSBJbGx1c3RyYXRvciAyOC4zLjAsIFNWRyBFeHBvcnQgUGx1Zy1JbiAuIFNWRyBWZXJzaW9uOiA2LjAwIEJ1aWxkIDApICAtLT4NCjxzdmcgdmVyc2lvbj0iMS4xIiBpZD0iTGF5ZXJfMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgeD0iMHB4IiB5PSIwcHgiDQoJIHdpZHRoPSI4MDBweCIgaGVpZ2h0PSIxNTguM3B4IiB2aWV3Qm94PSIwIDAgODAwIDE1OC4zIiBzdHlsZT0iZW5hYmxlLWJhY2tncm91bmQ6bmV3IDAgMCA4MDAgMTU4LjM7IiB4bWw6c3BhY2U9InByZXNlcnZlIj4NCjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+DQoJLnN0MHtmaWxsOnVybCgjU1ZHSURfMV8pO30NCgkuc3Qxe2ZpbGw6I0ZGRkZGRjt9DQoJLnN0MntmaWxsOnVybCgjU1ZHSURfMDAwMDAxNjgxMTA2ODYzNjgyOTI4MDg4MTAwMDAwMTI5MzUzNDA0MDE5Mzg2NzA3NzVfKTt9DQoJLnN0M3tmaWxsOnVybCgjU1ZHSURfMDAwMDAwNzcyOTQ0OTYzNTQ2NzQ1OTg1ODAwMDAwMDI3NDg2Njk5Mjc2ODA2NDExOTdfKTt9DQoJLnN0NHtmaWxsOiNCMzM3RDE7fQ0KCS5zdDV7ZmlsbDojMDA4MEZGO30NCgkuc3Q2e2ZpbGw6bm9uZTtzdHJva2U6Izg0ODQ4NTtzdHJva2Utd2lkdGg6MC41O3N0cm9rZS1taXRlcmxpbWl0OjEwO30NCgkuc3Q3e2ZpbGw6dXJsKCNTVkdJRF8wMDAwMDAxNDYyMjA5ODAwMDYzMTA1MzI4MDAwMDAxODQwMTQ5NDY5ODgxMDAwNzcyM18pO30NCgkuc3Q4e2ZpbGw6dXJsKCNTVkdJRF8wMDAwMDAyNTQwNzAwOTI3OTkxNzc4MjY3MDAwMDAxMTAyMjM2MTc3MDU4MDI4ODEzNV8pO30NCgkuc3Q5e2ZpbGw6dXJsKCNTVkdJRF8wMDAwMDE2NjYzNjM4MjI2NTY2MTkyODEyMDAwMDAxMDczNDkwMzU3ODgyNDQ2MDk4MV8pO30NCgkuc3QxMHtmaWxsOnVybCgjU1ZHSURfMDAwMDAwMTY3ODIyMjM4MjAyMDgwODQ4NzAwMDAwMTc3MDYwOTM4ODc3NzUzNzExMzhfKTt9DQoJLnN0MTF7ZmlsbDp1cmwoI1NWR0lEXzAwMDAwMTIzNDQyMzMyMzAzMzAxNjc1NTEwMDAwMDA0MzY3NDI0ODc0NDIwNDg1Mjg3Xyk7fQ0KCS5zdDEye2ZpbGw6dXJsKCNTVkdJRF8wMDAwMDAzNjIzNTg4NTkzNzkxNTU0OTkzMDAwMDAwMTcyODU2MTUyOTU4NDk0NjMwOF8pO30NCgkuc3QxM3tmaWxsOnVybCgjU1ZHSURfMDAwMDAxMzYzODEwNjYxNzc3NDcyMDQ4NzAwMDAwMDEyMTk1NTU1Mjk1NTE1OTEzMThfKTt9DQoJLnN0MTR7ZmlsbDp1cmwoI1NWR0lEXzAwMDAwMTMyMDUxMzc2ODgwMTc3ODIyMzcwMDAwMDA2NDg1NjYzMjQ1NTQ1NTUyMDA4Xyk7fQ0KCS5zdDE1e2ZpbGw6dXJsKCNTVkdJRF8wMDAwMDE2Mzc1NDk3OTE1MDQwMDA2MDYyMDAwMDAxMjU5NzAwNjk0MjcyNTI2NjEwMV8pO30NCgkuc3QxNntmaWxsOnVybCgjU1ZHSURfMDAwMDAwOTAyOTM5MTMyNjE1NDY5MjM1ODAwMDAwMTEyNTEwOTk1OTM1OTYyMzAyOTFfKTt9DQoJLnN0MTd7ZmlsbDp1cmwoI1NWR0lEXzAwMDAwMDQ3NzQzMjA2NTMyNTc4Njk1NjAwMDAwMDAwNTM4NDI1NTU4MzcxMTIxMDYxXyk7fQ0KCS5zdDE4e2ZpbGw6dXJsKCNTVkdJRF8wMDAwMDE3MDI2NTQ3NjM5MTI1ODI3MTkyMDAwMDAwOTE3NzY0MTMyNDk5MjEyOTQyMF8pO30NCgkuc3QxOXtmaWxsOnVybCgjU1ZHSURfMDAwMDAxMDQ2OTE3MzMyMzk4NTQ3NTMyNTAwMDAwMDE0NTg1NjYxMDMzOTM3MDQ2MzJfKTt9DQo8L3N0eWxlPg0KPGc+DQoJPGc+DQoJCTxwYXRoIGQ9Ik0yODEuMywxMTEuOGMtMy45LDAtNy4yLTAuOS05LjctMi43Yy0yLjUtMS44LTMuOC0zLjgtMy44LTUuOXYtODNjMC0yLjUsMS4zLTQuNiwzLjgtNi4xYzIuNS0xLjUsNS44LTIuMyw5LjctMi4zDQoJCQljMy40LDAsNi4yLDAuOCw4LjUsMi4zYzIuMywxLjUsMy41LDMuNiwzLjUsNi4xdjYuM2MyLjQtNC4xLDUuOS03LjgsMTAuNS0xMS4xYzQuNi0zLjMsMTAuNS00LjksMTcuNS00LjljNiwwLDExLjQsMiwxNiw1LjkNCgkJCWM0LjYsMy45LDguMSw5LDEwLjMsMTUuMmMzLjYtNy4yLDguMy0xMi41LDE0LTE1LjljNS43LTMuNCwxMS41LTUuMiwxNy42LTUuMmM2LjUsMCwxMi41LDEuNywxOC4yLDQuOQ0KCQkJYzUuNywzLjMsMTAuMyw4LjEsMTMuOSwxNC41YzMuNiw2LjQsNS40LDE0LjEsNS40LDIzLjN2NDkuOWMwLDIuMS0xLjMsNC4xLTQsNS45Yy0yLjcsMS44LTUuOSwyLjctOS43LDIuNw0KCQkJYy0zLjcsMC02LjgtMC45LTkuNS0yLjdjLTIuNy0xLjgtNC0zLjgtNC01LjlWNTMuMmMwLTQuMi0wLjgtNy43LTIuNC0xMC41Yy0xLjYtMi44LTMuOC00LjktNi40LTYuNGMtMi43LTEuNS01LjQtMi4yLTguMi0yLjINCgkJCWMtMi44LDAtNS40LDAuNy03LjksMi4yYy0yLjUsMS41LTQuNSwzLjYtNi4yLDYuNGMtMS43LDIuOC0yLjUsNi4yLTIuNSwxMC4zdjUwLjNjMCwyLjktMS40LDUuMS00LjMsNi40Yy0yLjksMS4zLTYsMi05LjQsMg0KCQkJYy0zLjEsMC02LjEtMC43LTkuMS0yYy0yLjktMS4zLTQuNC0zLjUtNC40LTYuNFY1My4yYzAtMy45LTAuOC03LjMtMi40LTEwLjFjLTEuNi0yLjgtMy43LTUtNi4zLTYuNWMtMi42LTEuNS01LjQtMi4zLTguMy0yLjMNCgkJCWMtMi44LDAtNS41LDAuNy04LDIuMWMtMi41LDEuNC00LjYsMy41LTYuMiw2LjNjLTEuNiwyLjgtMi40LDYuMy0yLjQsMTAuNXY0OS45YzAsMi4xLTEuMyw0LjEtNCw1LjkNCgkJCUMyODguNCwxMTAuOCwyODUuMSwxMTEuOCwyODEuMywxMTEuOHoiLz4NCgkJPHBhdGggZD0iTTQ1OC40LDExMy43Yy03LjQsMC0xMy45LTIuMy0xOS4zLTYuOGMtNS40LTQuNi04LjEtMTEuNi04LjEtMjEuMmMwLTgsMi4xLTE0LjIsNi4yLTE4LjdjNC4xLTQuNSw5LjktNy42LDE3LjMtOS41DQoJCQljNy40LTEuOCwxNS45LTIuNywyNS42LTIuN2g4LjZWNTJjMC0zLjEtMC42LTYuMS0xLjgtOS4xYy0xLjItMi45LTMuMS01LjQtNS43LTcuNGMtMi42LTItNi4zLTIuOS0xMS4xLTIuOQ0KCQkJYy01LjMsMC05LjQsMC41LTEyLjMsMS42Yy0yLjksMS4xLTUuMSwyLjEtNi42LDMuM2MtMS41LDEuMS0zLjIsMS43LTUuMSwxLjdjLTIuOSwwLTUuMi0xLjUtNi44LTQuNGMtMS42LTIuOS0yLjQtNi0yLjQtOS4xDQoJCQljMC0yLjksMS44LTUuNiw1LjQtNy45czgtNC4xLDEzLjItNS40YzUuMi0xLjMsMTAuMi0xLjksMTUuMi0xLjljMTEsMCwxOS43LDIsMjYuMyw1LjljNi42LDMuOSwxMS40LDksMTQuNCwxNS4yDQoJCQljMyw2LjIsNC41LDEyLjgsNC41LDIwdjUxLjZjMCwyLjQtMS4zLDQuNC0zLjgsNi4xYy0yLjUsMS43LTUuNywyLjUtOS41LDIuNWMtMy41LDAtNi40LTAuOC04LjctMi41Yy0yLjMtMS43LTMuNS0zLjctMy41LTYuMVY5Nw0KCQkJYy0zLjgsNC40LTguMiw4LjItMTMuNCwxMS42QzQ3MS45LDExMiw0NjUuNywxMTMuNyw0NTguNCwxMTMuN3ogTTQ2OS40LDkzLjRjMi45LDAsNS45LTEsOC44LTIuOWMyLjktMiw1LjQtNC41LDcuNS03LjYNCgkJCWMyLTMuMSwzLjEtNi4zLDMuMS05Ljd2LTQuNGgtMy4yYy00LjYsMC05LjEsMC4zLTEzLjMsMC44Yy00LjIsMC42LTcuNiwxLjgtMTAuMiwzLjdjLTIuNiwxLjktMy45LDQuOC0zLjksOC43DQoJCQljMCwzLjksMS4xLDYuOCwzLjMsOC42QzQ2My43LDkyLjUsNDY2LjMsOTMuNCw0NjkuNCw5My40eiIvPg0KCQk8cGF0aCBkPSJNNTQ5LjQsMTExLjhjLTMuOCwwLTYuOS0wLjktOS41LTIuN2MtMi41LTEuOC0zLjgtMy44LTMuOC01Ljl2LTgzYzAtMi41LDEuMy00LjYsMy44LTYuMWMyLjUtMS41LDUuNy0yLjMsOS41LTIuMw0KCQkJYzMuNSwwLDYuNCwwLjgsOC43LDIuM2MyLjMsMS41LDMuNSwzLjYsMy41LDYuMXY4LjZjMS41LTMuMSwzLjYtNiw2LjItOC43YzIuNi0yLjcsNS42LTUsOC45LTYuOGMzLjQtMS44LDYuOS0yLjcsMTAuNy0yLjdoNi41DQoJCQljMi43LDAsNSwxLjIsNi45LDMuNWMyLDIuMywyLjksNS4xLDIuOSw4LjNjMCwzLjQtMSw2LjItMi45LDguNWMtMiwyLjMtNC4zLDMuNS02LjksMy41aC02LjVjLTMuOSwwLTcuOCwxLjMtMTEuNSwzLjkNCgkJCWMtMy43LDIuNi02LjgsNi4yLTkuMiwxMC43Yy0yLjQsNC42LTMuNiwxMC4xLTMuNiwxNi41djM3LjdjMCwyLjEtMS4zLDQuMS00LDUuOUM1NTYuNiwxMTAuOCw1NTMuMywxMTEuOCw1NDkuNCwxMTEuOHoiLz4NCgkJPHBhdGggZD0iTTY1My40LDE1OC4zYy04LjMsMC0xNi0xLjItMjMuMS0zLjVjLTcuMS0yLjMtMTIuOC01LjctMTcuMS0xMC4yYy00LjMtNC41LTYuNC05LjgtNi40LTE2YzAtNS4zLDEuNS05LjksNC40LTEzLjYNCgkJCWMyLjktMy43LDYuNi02LjYsMTAuOS04LjdjLTIuNy0xLjMtNC44LTIuOS02LjQtNS4xYy0xLjYtMi4xLTIuNC00LjktMi40LTguNGMwLTMuOSwxLTcuMSwzLjEtOS42YzItMi41LDQuNi00LjcsNy43LTYuOA0KCQkJYy00LjItMy4yLTcuNC03LjEtOS43LTExLjdjLTIuMi00LjYtMy40LTkuNi0zLjQtMTUuMXYtNC40YzAtNi45LDEuNy0xMi45LDUuMS0xOC4xYzMuNC01LjIsOC4yLTkuMywxNC40LTEyLjINCgkJCWM2LjItMi45LDEzLjQtNC40LDIxLjYtNC40YzQuNiwwLDksMC41LDEzLjEsMS42YzQuMSwxLjEsNy43LDIuNiwxMSw0LjVjMi40LTUuNiw0LjYtOS40LDYuNy0xMS40YzIuMS0yLDQuMS0yLjksNi4xLTIuOQ0KCQkJYzMuNCwwLDYsMSw3LjksMi45YzEuOSwyLDIuOCwzLjgsMi44LDUuNWMwLDEuMy0wLjMsMi40LTAuOSwzLjRjLTAuNiwxLTEuNSwxLjgtMi42LDIuNWMtMS4zLDAuOC0yLjgsMS45LTQuNiwzLjENCgkJCWMtMS44LDEuMi0zLjUsMi44LTUuMSw0LjljMi41LDIuOCw0LjQsNS45LDUuNiw5LjRjMS4yLDMuNCwxLjgsNy4yLDEuOCwxMS4zdjQuNGMwLDYuNy0xLjgsMTIuNy01LjMsMTgNCgkJCWMtMy41LDUuMy04LjQsOS40LTE0LjcsMTIuNWMtNi4zLDMuMS0xMy42LDQuNi0yMS43LDQuNmMtNS4xLDAtOS42LTAuNi0xMy43LTEuOWMtMC43LDAuNi0xLjMsMS4yLTEuOCwxLjkNCgkJCWMtMC41LDAuNy0wLjcsMS41LTAuNywyLjNjMCwyLjQsMS41LDQuMSw0LjYsNS4xYzMuMSwxLDcsMS44LDExLjgsMi4zYzQuOCwwLjYsOS45LDEuMywxNS4zLDIuMmM1LjQsMC45LDEwLjUsMi40LDE1LjMsNC4zDQoJCQljNC44LDIsOC43LDQuOSwxMS44LDguN2MzLjEsMy45LDQuNiw5LDQuNiwxNS41YzAsNy45LTIuMiwxNC4yLTYuNiwxOS4xYy00LjQsNC44LTEwLjEsOC40LTE3LjEsMTAuNg0KCQkJQzY2OC43LDE1Ny4yLDY2MS4zLDE1OC4zLDY1My40LDE1OC4zeiBNNjUzLDE0MC44YzUuNSwwLDEwLjEtMS4zLDE0LTRjMy45LTIuNyw1LjgtNi4yLDUuOC0xMC43YzAtMi45LTAuOC01LjMtMi41LTcuMg0KCQkJYy0xLjctMS44LTQtMy4yLTYuOC00LjFjLTIuOS0wLjktNi0xLjYtOS40LTIuMWMtMy40LTAuNS02LjctMC45LTEwLjEtMS40Yy0zLjQsMS41LTYuMSwzLjUtOC4yLDUuOWMtMi4xLDIuNC0zLjIsNS4zLTMuMiw4LjYNCgkJCWMwLDQuNiwyLDguMyw2LDExQzY0Mi42LDEzOS41LDY0Ny40LDE0MC44LDY1MywxNDAuOHogTTY1Mi42LDY4LjRjNC42LDAsOC4zLTEuOCwxMC45LTUuM2MyLjctMy41LDQtOCw0LTEzLjV2LTQuNA0KCQkJYzAtNS4yLTEuMy05LjUtMy45LTEzLjFjLTIuNi0zLjUtNi40LTUuMy0xMS4zLTUuM2MtNC44LDAtOC41LDEuOC0xMS4xLDUuM2MtMi42LDMuNS0zLjksNy45LTMuOSwxMy4xdjQuMg0KCQkJYzAsNS4zLDEuMyw5LjgsMy45LDEzLjVDNjQzLjksNjYuNiw2NDcuNyw2OC40LDY1Mi42LDY4LjR6Ii8+DQoJCTxwYXRoIGQ9Ik03NTQuMywxMTMuN2MtOC4xLDAtMTUuNy0yLTIyLjUtNmMtNi45LTQtMTIuNC05LjMtMTYuNi0xNS45Yy00LjItNi42LTYuMy0xMy43LTYuMy0yMS4zVjUzLjJjMC03LjYsMi0xNC42LDYuMS0yMS4yDQoJCQljNC4xLTYuNSw5LjYtMTEuOCwxNi41LTE1LjdjNi45LTMuOSwxNC42LTUuOSwyMi44LTUuOWM4LjMsMCwxNS45LDEuOSwyMi44LDUuOGM2LjksMy45LDEyLjUsOSwxNi42LDE1LjUNCgkJCWM0LjEsNi41LDYuMiwxMy42LDYuMiwyMS41djE3LjNjMCw3LjQtMi4xLDE0LjUtNi4zLDIxLjFjLTQuMiw2LjYtOS44LDExLjktMTYuNywxNkM3NzAsMTExLjYsNzYyLjQsMTEzLjcsNzU0LjMsMTEzLjd6DQoJCQkgTTc1NC4zLDg5LjljMy40LDAsNi41LTAuOSw5LjMtMi43YzIuOC0xLjgsNS4xLTQuMiw2LjctNy4zYzEuNy0zLDIuNS02LjEsMi41LTkuNFY1My4yYzAtMy4yLTAuOC02LjItMi41LTkuMQ0KCQkJYy0xLjctMi44LTMuOS01LjItNi42LTcuMWMtMi43LTEuOS01LjktMi44LTkuNC0yLjhjLTMuNCwwLTYuNSwwLjktOS4zLDIuN2MtMi44LDEuOC01LDQuMi02LjYsNy4xYy0xLjYsMi45LTIuNCw1LjktMi40LDkuMg0KCQkJdjE3LjNjMCwzLjIsMC44LDYuNCwyLjQsOS40YzEuNiwzLDMuOCw1LjQsNi42LDcuM0M3NDcuOCw4OC45LDc1MC45LDg5LjksNzU0LjMsODkuOXoiLz4NCgk8L2c+DQoJPHBhdGggZD0iTTE5MS4xLDUwLjNsLTI5LjQsMjkuM2wyOS40LDI5LjNsMjkuNC0yOS4zTDE5MS4xLDUwLjN6IE0xMTMsMTIwLjZMODMuNiw5MS4zYy0yLjEtMi4xLTUuNi0yLjEtNy43LDBsLTI5LjQsMjkuMw0KCQljLTIuMSwyLjEtNS42LDIuMS03LjcsMEwxLjYsODMuNWMtMi4xLTIuMS0yLjEtNS42LDAtNy44TDc1LjksMS42YzIuMS0yLjEsNS42LTIuMSw3LjcsMEwxMTMsMzAuOWMyLjEsMi4xLDUuNiwyLjEsNy43LDANCgkJbDI5LjQtMjkuM2MyLjEtMi4xLDUuNi0yLjEsNy43LDBsMjEuNiwyMS42YzIuMSwyLjEsMi4xLDUuNiwwLDcuOHYwYy0yLjEsMi4xLTUuNiwyLjEtNy43LDBsLTEzLjktMTMuOGMtMi4xLTIuMS01LjYtMi4xLTcuNywwDQoJCWwtMjEuNiwyMS42Yy0yLjEsMi4xLTIuMSw1LjYsMCw3LjhMMTUwLjEsNjhjMi4xLDIuMSw1LjYsMi4xLDcuNywwbDI5LjQtMjkuM2MyLjEtMi4xLDUuNi0yLjEsNy43LDBsMzcuMSwzNy4xDQoJCWMyLjEsMi4xLDIuMSw1LjYsMCw3LjhMMTk1LDEyMC42Yy0yLjEsMi4xLTUuNiwyLjEtNy43LDBsLTI5LjQtMjkuM2MtMi4xLTIuMS01LjYtMi4xLTcuNywwbC0yOS40LDI5LjMNCgkJQzExOC42LDEyMi44LDExNS4xLDEyMi44LDExMywxMjAuNkwxMTMsMTIwLjZ6IE04Ny41LDc5LjdsMjkuNCwyOS4zbDI5LjQtMjkuM2wtMjkuNC0yOS4zTDg3LjUsNzkuN3ogTTYyLDU0LjJsMTcuNywxNy43DQoJCWwyOS40LTI5LjNMNzkuNywxMy4yTDEzLjIsNzkuN0w0Mi42LDEwOUw3Miw3OS43TDU0LjMsNjJjLTIuMS0yLjEtMi4xLTUuNiwwLTcuOGwwLDBDNTYuNCw1Mi4xLDU5LjksNTIuMSw2Miw1NC4yeiIvPg0KPC9nPg0KPC9zdmc+DQo=&quot;/&gt;&lt;/g&gt;&lt;/svg&gt;&lt;/div&gt;
&lt;/p&gt;
&lt;/div&gt;

&lt;p&gt;
之后，我介绍了 Margo 的部分内容：
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;&lt;a href=&quot;./2024-05-20-margo-technical-lexicon&quot;&gt;技术术语&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;./2024-05-19-margo-edge-device&quot;&gt;对边缘计算设备的一些要求&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;./2024-05-22-margo-device-capability-discovery&quot;&gt;设备能力发现&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
现在，介绍下工作负载编排软件。
&lt;/p&gt;

&lt;p&gt;
工作负载编排软件（Workload Orchestration Software，简称 WOS ）是一个系统服务，帮助用户配置、部署、管理边缘应用。通过 Margo标准接口与应用仓库、设备仓库通信，并编排边缘计算节点。
&lt;/p&gt;

&lt;p&gt;
工作负载编排软件不在 Margo 的标准规定范围内，各厂家可以实现各自的工作负载编排软件。不过， Margo 针对工作负载编排软件定义了一些功能性要求：
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;边缘应用的生命周期管理
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;部署边缘应用&lt;/li&gt;
&lt;li&gt;配置边缘应用实例的工作负载&lt;/li&gt;
&lt;li&gt;升级边缘应用&lt;/li&gt;
&lt;li&gt;扩容边缘应用&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;根据工作负载编排代理的接口规范，建立与之兼容的通信通道，根据兼容的数据格式进行通信&lt;/li&gt;
&lt;li&gt;分配边缘边缘的资源&lt;/li&gt;
&lt;li&gt;进行网络配置&lt;/li&gt;
&lt;li&gt;密钥管理&lt;/li&gt;
&lt;li&gt;存储容量管理&lt;/li&gt;
&lt;li&gt;节点管理&lt;/li&gt;
&lt;li&gt;工作策略管理&lt;/li&gt;
&lt;li&gt;用户权限和信息安全管理&lt;/li&gt;
&lt;li&gt;API 接口以及 CLI 接口&lt;/li&gt;
&lt;li&gt;日志和监控&lt;/li&gt;
&lt;/ul&gt;
</content>
 </entry>
 
 <entry>
   <title>单词本：mutatis mutandis</title>
   <link href="http://kimi.im/2024-05-22-mutatis-mutandis"/>
   <updated>2024-05-22T00:00:00+00:00</updated>
   <id>http://kimi.im/mutatis-mutandis</id>
   <content type="html">&lt;p&gt;
这几年写了不少专利，我们的专利律师会调整专利的文本描述。比如这是专利律师修改的版本：
&lt;/p&gt;

&lt;p&gt;
Any of the optional features or subaspects of the first aspect may be
applied to the second aspect, &lt;b&gt;mutatis mutandis&lt;/b&gt;.
&lt;/p&gt;

&lt;p&gt;
意思是说第一方面描述的额外功能也可以经过微调适用于第二方面。
&lt;/p&gt;

&lt;p&gt;
这里，专业的专利的律师用了&lt;b&gt;mutatis mutandis&lt;/b&gt;这组拉丁语。该词组源自
&lt;b&gt;mutare&lt;/b&gt; （改变）的过去分词和被动将来分词，字面意思是 &amp;ldquo;things being
changed that have to be changed&amp;rdquo;，引申为 although changes will be
necessary in order to take account of different situations, the basic
point remains the same. 大体不变的情况下，经过必要微调。
&lt;/p&gt;

&lt;p&gt;
比如： This complex pattern has been repeated, &lt;b&gt;mutatis mutandis&lt;/b&gt;, all
over the country. 这种复杂的模式在全国范围内重复出现，且在各地经过了必要微调。
&lt;/p&gt;

&lt;p&gt;
我还了解到拉丁语 &lt;b&gt;mutare&lt;/b&gt; 的辞源是原始印欧词根 &lt;b&gt;mei&lt;/b&gt; （变化、移动）。
&lt;/p&gt;

&lt;p&gt;
源自这个词根的词就不胜枚举了：
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;permute 彻底改变, permutation 排列, per “彻底”和 mutare “改变”。&lt;/li&gt;
&lt;li&gt;amoeba 阿米巴变形虫，会变形呀。&lt;/li&gt;
&lt;li&gt;emigrate 移居国外，immigrate 移民入境。&lt;/li&gt;
&lt;/ul&gt;
</content>
 </entry>
 
 <entry>
   <title>边缘计算新标准 Margo：设备能力发现</title>
   <link href="http://kimi.im/2024-05-22-margo-device-capability-discovery"/>
   <updated>2024-05-22T00:00:00+00:00</updated>
   <id>http://kimi.im/margo-device-capability-discovery</id>
   <content type="html">&lt;p&gt;
Linux 基金会近日联合 ABB ，B&amp;amp;R， Capgemini ，微软，罗克韦尔自动化，施耐德电气，以及西门子，发起了一个新的&lt;a href=&quot;./2024-05-16-margo&quot;&gt;开放标准项目 Margo&lt;/a&gt;。目的是定义一套灵活、简单、易扩展的边缘接口标准。通过边缘编排软件，把边缘应用和边缘设备进行有效的管理起来。
&lt;/p&gt;

&lt;p&gt;
之后，我介绍了 Margo &lt;a href=&quot;./2024-05-20-margo-technical-lexicon&quot;&gt;技术术语&lt;/a&gt;、&lt;a href=&quot;./2024-05-19-margo-edge-device&quot;&gt;对边缘计算设备的一些要求&lt;/a&gt;。
&lt;/p&gt;

&lt;p&gt;
这篇稿子介绍下设备能力发现（Margo Device Capability Discovery）。
&lt;/p&gt;

&lt;p&gt;
工作负载编排软件（Workload Orchestration Software，简称 WOS ）是一个系统服务，帮助用户配置、部署、管理边缘应用。通过 Margo标准接口与应用仓库、设备仓库通信，并编排边缘计算节点。那么，WOS 需要知道边缘计算设备能完成什么工作，才可以进行工作负载编排。
&lt;/p&gt;

&lt;p&gt;
这时候，就要用到工作负载编排代理（Workload Orchestration Agent）。它是运行在边缘计算设备中的服务，用于和工作负载编排软件通信，接收工作负载和配置数据。
&lt;/p&gt;

&lt;p&gt;
要在系统中发现设备的第一步是通过工作负载编排代理发送设备的工作能力清单给 WOS 。设备厂商在设备中安装设备的能力清单文件。在设备部署过程中，工作负载代理把能力清单文件发送给 WOS。
&lt;/p&gt;


&lt;div id=&quot;org4c7631b&quot; class=&quot;figure&quot;&gt;
&lt;p&gt;&lt;div align=&quot;center&quot;&gt;&lt;svg host=&quot;65bd71144e&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; xmlns:xlink=&quot;http://www.w3.org/1999/xlink&quot; version=&quot;1.1&quot;  viewBox=&quot;-0.5 -0.5 273 300&quot; content=&quot;&amp;lt;mxfile&amp;gt;&amp;lt;diagram name=&amp;quot;Page-1&amp;quot; id=&amp;quot;CrK_3XBqczGyYJDrLoNX&amp;quot;&amp;gt;zVjbjuI4EP0aHjuyE+KERxroi7Z3aEFrZ/dpZRJDrDYxMuY2X79l4tzDZTSt0eaF1LFdtusclyv0vNH6+KzoJvlTxkz0XBQfe96457puP8DwY5BThuAgcDNkpXhssRKY8x/MgsiiOx6zba2jllJovqmDkUxTFukaRpWSh3q3pRT1WTd0xVrAPKKijX7nsU4yNPRRib8wvkrymTGyLWuad7bANqGxPFQgb9LzRkpKnb2tjyMmTPTyuGTjni60FgtTLNV3DbAj9lTs7Oa+T2d/vE2H8Iqms9HLZP4xG368Tr+BPZ/M/nodTezS9SmPxyHhms03NDL2AUjveY9U8FUKZgQrYQqAPVOaQwyHtmHN49g4eFzKVM+tMwz2Viv5WQTWMz24ECMppDpP5y2XSzeKip6VlpgsiE9yn5lucAC2krs0ZmbTyIyDpfJ0NbMU+SX0xpY5Ylw80TUXRqUvTOyZWT402IjBdtjxYthxQSYcAybXTKsTdLEDHjAKXMe1qrfH4CEgoUPCDDuUunIDK5akqqlcUtRqeVVMUtINL5bxbvb9K+QTCCc2wWqKYPg8+fbxNRLQcnMf/xU2vRabF4lqyCb2WRj3u2QTuguPkC+j1kN1Xn0vcPygxSsO/DavxP91WkmL1hZdORNvdMHEu9xyzaVhZCG1luuLVCV6LXKWEroxztbHlcnyzoJueeQkVCz/jbiKspNdJwAhH7HlmT9N7YQPOEQ/wSg01BMBPF2MIoTHj6OGuNBX0DsgA6cfNAgmvoPIoHxaXPsdVLugil8nO7hNNovh9rImEwt5mJTA4xmAhkQq/gOCRcXVeNYPp3uV5Lsohbir09+ml+Pn5j9WY2djfLQuMutUtd6Z4hAxk1wy8Mh1xRdYhSt4Lz0Z41Qxmn62mio9NJWCSV+CbkHbOfzERX4G6uIya4rzQalMWYbY/qhIL4aO6+oD9uRORbaXVRPMvWJ5lujWaDW5oGuXhmICDuC+vowuFdo53iWHBZaHIAzhEJD6ISCkpedsF3ZwtQpp+sPYxQ4aoOLBzQMWOMitO8/i0XIOBNBTpdvGdNhe2cug37iGiZ394moHOSXFxY36N0b4CLbX2NPAuzEoxK1BGAFoz/zlaCL/ajQxDu5wgvs3nPhNJ/CSRb9MXIU478plg//7xXU5L7azXdc9dTELtkqlasnj/q57jJwL0Bblv+Uey7/tKuSP2Z5DEnTRiG7ogguuzQaeXiEITVnkpKZSG/66qtGKBBY0+lydGZvutOBpXnnGVH1OzYeAPl8ODvJbzCY0SnaKPRuX4/6tWiVnEHVUo5SFy86PGBKFbLFsqwih/ghKi3bB3C35rZ27u6T+Egk1cwLByAnINf3kl0ZVP33fIYOfFhCY5WdylmvKfxu8yX8=&amp;lt;/diagram&amp;gt;&amp;lt;/mxfile&amp;gt;&quot;&gt;
    &lt;defs/&gt;
    &lt;g&gt;
        &lt;rect x=&quot;0.78&quot; y=&quot;1.32&quot; width=&quot;270&quot; height=&quot;100&quot; fill=&quot;#fff2cc&quot; stroke=&quot;#d6b656&quot; stroke-width=&quot;3&quot; pointer-events=&quot;all&quot;/&gt;
        &lt;g transform=&quot;translate(-0.5 -0.5)&quot;&gt;
            &lt;switch&gt;
                &lt;foreignObject pointer-events=&quot;none&quot; width=&quot;100%&quot; height=&quot;100%&quot; requiredFeatures=&quot;http://www.w3.org/TR/SVG11/feature#Extensibility&quot; style=&quot;overflow: visible; text-align: left;&quot;&gt;
                    &lt;div xmlns=&quot;http://www.w3.org/1999/xhtml&quot; style=&quot;display: flex; align-items: unsafe center; justify-content: unsafe center; width: 258px; height: 1px; padding-top: 51px; margin-left: 7px;&quot;&gt;
                        &lt;div data-drawio-colors=&quot;color: rgb(0, 0, 0); &quot; style=&quot;box-sizing: border-box; font-size: 0px; text-align: center;&quot;&gt;
                            &lt;div style=&quot;display: inline-block; font-size: 17px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; font-weight: bold; white-space: normal; overflow-wrap: normal;&quot;&gt;
                                WORKLOAD ORCHESTRATION SERVICE
                            &lt;/div&gt;
                        &lt;/div&gt;
                    &lt;/div&gt;
                &lt;/foreignObject&gt;
                &lt;text x=&quot;136&quot; y=&quot;56&quot; fill=&quot;rgb(0, 0, 0)&quot; font-family=&quot;Helvetica&quot; font-size=&quot;17px&quot; text-anchor=&quot;middle&quot; font-weight=&quot;bold&quot;&gt;
                    WORKLOAD ORCHESTRATION SERVICE
                &lt;/text&gt;
            &lt;/switch&gt;
        &lt;/g&gt;
        &lt;rect x=&quot;43&quot; y=&quot;232.43&quot; width=&quot;175&quot; height=&quot;65&quot; fill=&quot;#d5e8d4&quot; stroke=&quot;#82b366&quot; stroke-width=&quot;3&quot; pointer-events=&quot;all&quot;/&gt;
        &lt;g transform=&quot;translate(-0.5 -0.5)&quot;&gt;
            &lt;switch&gt;
                &lt;foreignObject pointer-events=&quot;none&quot; width=&quot;100%&quot; height=&quot;100%&quot; requiredFeatures=&quot;http://www.w3.org/TR/SVG11/feature#Extensibility&quot; style=&quot;overflow: visible; text-align: left;&quot;&gt;
                    &lt;div xmlns=&quot;http://www.w3.org/1999/xhtml&quot; style=&quot;display: flex; align-items: unsafe flex-start; justify-content: unsafe center; width: 173px; height: 1px; padding-top: 239px; margin-left: 44px;&quot;&gt;
                        &lt;div data-drawio-colors=&quot;color: rgb(0, 0, 0); &quot; style=&quot;box-sizing: border-box; font-size: 0px; text-align: center;&quot;&gt;
                            &lt;div style=&quot;display: inline-block; font-size: 13px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; font-weight: bold; white-space: normal; overflow-wrap: normal;&quot;&gt;
                                WORKLOAD
                                &lt;br/&gt;
                                ORCHESTRATION AGENT
                            &lt;/div&gt;
                        &lt;/div&gt;
                    &lt;/div&gt;
                &lt;/foreignObject&gt;
                &lt;text x=&quot;131&quot; y=&quot;252&quot; fill=&quot;rgb(0, 0, 0)&quot; font-family=&quot;Helvetica&quot; font-size=&quot;13px&quot; text-anchor=&quot;middle&quot; font-weight=&quot;bold&quot;&gt;
                    WORKLOAD...
                &lt;/text&gt;
            &lt;/switch&gt;
        &lt;/g&gt;
        &lt;path d=&quot;M 103.53 204.93 C 103.53 220.12 115.84 232.43 131.03 232.43 C 146.22 232.43 158.53 220.12 158.53 204.93 Z&quot; fill=&quot;#0050ef&quot; stroke=&quot;#001dbc&quot; stroke-miterlimit=&quot;10&quot; transform=&quot;rotate(-180,131.03,218.68)&quot; pointer-events=&quot;all&quot;/&gt;
        &lt;path d=&quot;M 131.03 137.06 L 131 204.93&quot; fill=&quot;none&quot; stroke=&quot;#001dbc&quot; stroke-width=&quot;2&quot; stroke-miterlimit=&quot;10&quot; pointer-events=&quot;stroke&quot;/&gt;
        &lt;path d=&quot;M 131.03 131.06 L 135.03 139.06 L 131.03 137.06 L 127.03 139.05 Z&quot; fill=&quot;#001dbc&quot; stroke=&quot;#001dbc&quot; stroke-width=&quot;2&quot; stroke-miterlimit=&quot;10&quot; pointer-events=&quot;all&quot;/&gt;
        &lt;path d=&quot;M 103.53 101.32 C 103.53 116.51 115.84 128.82 131.03 128.82 C 146.22 128.82 158.53 116.51 158.53 101.32 Z&quot; fill=&quot;#0050ef&quot; stroke=&quot;#001dbc&quot; stroke-miterlimit=&quot;10&quot; pointer-events=&quot;all&quot;/&gt;
        &lt;path d=&quot;M 172 159.24 L 207 159.24 L 218 170.24 L 218 204.93 L 172 204.93 L 172 159.24 Z&quot; fill=&quot;#dae8fc&quot; stroke=&quot;#6c8ebf&quot; stroke-width=&quot;3&quot; stroke-miterlimit=&quot;10&quot; pointer-events=&quot;all&quot;/&gt;
        &lt;path d=&quot;M 207 159.24 L 207 170.24 L 218 170.24 Z&quot; fill-opacity=&quot;0.05&quot; fill=&quot;#000000&quot; stroke=&quot;none&quot; pointer-events=&quot;all&quot;/&gt;
        &lt;path d=&quot;M 207 159.24 L 207 170.24 L 218 170.24&quot; fill=&quot;none&quot; stroke=&quot;#6c8ebf&quot; stroke-width=&quot;3&quot; stroke-miterlimit=&quot;10&quot; pointer-events=&quot;all&quot;/&gt;
        &lt;g transform=&quot;translate(-0.5 -0.5)&quot;&gt;
            &lt;switch&gt;
                &lt;foreignObject pointer-events=&quot;none&quot; width=&quot;100%&quot; height=&quot;100%&quot; requiredFeatures=&quot;http://www.w3.org/TR/SVG11/feature#Extensibility&quot; style=&quot;overflow: visible; text-align: left;&quot;&gt;
                    &lt;div xmlns=&quot;http://www.w3.org/1999/xhtml&quot; style=&quot;display: flex; align-items: unsafe flex-start; justify-content: unsafe center; width: 44px; height: 1px; padding-top: 166px; margin-left: 173px;&quot;&gt;
                        &lt;div data-drawio-colors=&quot;color: #004C99; &quot; style=&quot;box-sizing: border-box; font-size: 0px; text-align: center;&quot;&gt;
                            &lt;div style=&quot;display: inline-block; font-size: 10px; font-family: Helvetica; color: rgb(0, 76, 153); line-height: 1.2; pointer-events: all; font-weight: bold; white-space: normal; overflow-wrap: normal;&quot;&gt;
                                Device Capability FIle
                            &lt;/div&gt;
                        &lt;/div&gt;
                    &lt;/div&gt;
                &lt;/foreignObject&gt;
                &lt;text x=&quot;195&quot; y=&quot;176&quot; fill=&quot;#004C99&quot; font-family=&quot;Helvetica&quot; font-size=&quot;10px&quot; text-anchor=&quot;middle&quot; font-weight=&quot;bold&quot;&gt;
                    Device Ca...
                &lt;/text&gt;
            &lt;/switch&gt;
        &lt;/g&gt;
    &lt;/g&gt;
    &lt;switch&gt;
        &lt;g requiredFeatures=&quot;http://www.w3.org/TR/SVG11/feature#Extensibility&quot;/&gt;
        &lt;a transform=&quot;translate(0,-5)&quot; xlink:href=&quot;https://www.diagrams.net/doc/faq/svg-export-text-problems&quot; target=&quot;_blank&quot;&gt;
            &lt;text text-anchor=&quot;middle&quot; font-size=&quot;10px&quot; x=&quot;50%&quot; y=&quot;100%&quot;&gt;
                Text is not SVG - cannot display
            &lt;/text&gt;
        &lt;/a&gt;
    &lt;/switch&gt;
&lt;/svg&gt;&lt;/div&gt;
&lt;/p&gt;
&lt;/div&gt;

&lt;p&gt;
能力清单文件包含以下内容信息：
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;设备厂商&lt;/li&gt;
&lt;li&gt;设备序列号&lt;/li&gt;
&lt;li&gt;Margo 设备角色
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;独立集群服务器&lt;/li&gt;
&lt;li&gt;集群主节点&lt;/li&gt;
&lt;li&gt;集群工作从节点&lt;/li&gt;
&lt;li&gt;独立设备&lt;/li&gt;
&lt;li&gt;嵌入式微设备&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;CPU 架构： ARM ，RISC-V 还是 X86， 32 位还是 64 位&lt;/li&gt;
&lt;li&gt;vCPU 数量&lt;/li&gt;
&lt;li&gt;内存大小&lt;/li&gt;
&lt;li&gt;存储空间大小&lt;/li&gt;
&lt;li&gt;设备硬件接口：显卡、声卡等外设&lt;/li&gt;
&lt;li&gt;网络接口： wifi 、以太网、蜂窝网络&lt;/li&gt;
&lt;li&gt;容器运行环境： Kubernetes 、Docker Compose&lt;/li&gt;
&lt;/ul&gt;
</content>
 </entry>
 
 <entry>
   <title>单词本：pièce de résistance</title>
   <link href="http://kimi.im/2024-05-20-piece-de-resistance"/>
   <updated>2024-05-20T00:00:00+00:00</updated>
   <id>http://kimi.im/piece-de-resistance</id>
   <content type="html">&lt;p&gt;
还是在看看&lt;a href=&quot;./2024-05-18-bane&quot;&gt;Programming TypeScript&lt;/a&gt; (&lt;a href=&quot;#citeproc_bib_item_1&quot;&gt;Cherny 2019&lt;/a&gt;)的时候，读到这句：
&lt;/p&gt;

&lt;p&gt;
You are now ready for TypeScript&amp;rsquo;s &lt;b&gt;pièce de résistance&lt;/b&gt; (or &lt;b&gt;raison
d&amp;rsquo;être&lt;/b&gt;, if you&amp;rsquo;re a functional programmer): functions.
&lt;/p&gt;

&lt;p&gt;
这里，用到了两个法语外来词。括号里的&lt;b&gt;raison d&amp;rsquo;ê tre&lt;/b&gt; ，之前我看《The Art
of Agile Product Ownership》(&lt;a href=&quot;#citeproc_bib_item_2&quot;&gt;Kelly 2019&lt;/a&gt;)的时候，遇到过，写了
&lt;a href=&quot;./2024-03-23-raison-d-etre&quot;&gt;《单词本：raison d&amp;rsquo;ê tre 》&lt;/a&gt;。
&lt;/p&gt;

&lt;p&gt;
而 &lt;b&gt;pi èce de ré sistance&lt;/b&gt; 的意思则是 the best and most important or
exciting thing, often the last in a series of things。本来其实是法餐里的主菜chef-d&amp;rsquo;œuvre的意思，引申为代表作品、最精彩的部分。
&lt;/p&gt;

&lt;p&gt;
前面的这段话意思是说函数是 TypeScript 里最精彩的部分，是函数式程序员存在的意义。
&lt;/p&gt;

&lt;p&gt;
比如：
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;The &lt;b&gt;pièce de résistance&lt;/b&gt; was undoubtedly the creme brulee with
strawberry compote.  奶油布雷+草莓果盘无疑是主菜。&lt;/li&gt;
&lt;li&gt;The &lt;b&gt;pièce de résistance&lt;/b&gt; of the whole concert was when the two bands
came onstage to perform together. 两支乐队合奏是整个音乐会最精彩部分。&lt;/li&gt;
&lt;li&gt;The waiter suggested we try the restaurant&amp;rsquo;s &lt;b&gt;pièce de résistance&lt;/b&gt;:
the chocolate soufflé. 服务员建议餐馆的必点菜：巧克力舒芙蕾。&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
德语的翻译是die Krönung加冕仪式。这是国王的高光时刻，所以就是宴会、演出的精彩部分。
&lt;/p&gt;

&lt;p&gt;
比如Eine Tanzvorführung bildete die &lt;b&gt;Krönung&lt;/b&gt; des Abends.舞蹈表演成为晚会的精彩部分。
&lt;/p&gt;

&lt;p&gt;
Als &lt;b&gt;Krönung&lt;/b&gt; des Festes wurde das Feuerwerk. 烟花表演成为庆祝活动的最精彩部分。
&lt;/p&gt;

&lt;p&gt;
话说，das Feuerwerk 英语是 firework ，而法语则是 pi èce d&amp;rsquo;artifice也有
pièce 呢。
&lt;/p&gt;

&lt;p&gt;
&lt;b&gt;References&lt;/b&gt;
&lt;/p&gt;
&lt;style&gt;.csl-entry{text-indent: -1.5em; margin-left: 1.5em;}&lt;/style&gt;&lt;div class=&quot;csl-bib-body&quot;&gt;
  &lt;div class=&quot;csl-entry&quot;&gt;&lt;a id=&quot;citeproc_bib_item_1&quot;&gt;&lt;/a&gt;Cherny, Boris. 2019. &lt;i&gt;Programming TypeScript: Making Your JavaScript Applications Scale&lt;/i&gt;. O’Reilly Media.&lt;/div&gt;
  &lt;div class=&quot;csl-entry&quot;&gt;&lt;a id=&quot;citeproc_bib_item_2&quot;&gt;&lt;/a&gt;Kelly, Allan. 2019. &lt;i&gt;The Art of Agile Product Ownership, a Guide for Product Managers, Business Analysts, and Entrepreneurs&lt;/i&gt;. Springer.&lt;/div&gt;
&lt;/div&gt;
</content>
 </entry>
 
 <entry>
   <title>边缘计算新标准 Margo：技术术语</title>
   <link href="http://kimi.im/2024-05-20-margo-technical-lexicon"/>
   <updated>2024-05-20T00:00:00+00:00</updated>
   <id>http://kimi.im/margo-technical-lexicon</id>
   <content type="html">&lt;p&gt;
Linux 基金会近日联合 ABB ，B&amp;amp;R， Capgemini ，微软，罗克韦尔自动化，施耐德电气，以及西门子，发起了一个新的&lt;a href=&quot;./2024-05-16-margo&quot;&gt;开放标准项目 Margo&lt;/a&gt;。目的是定义一套灵活、简单、易扩展的边缘接口标准。通过边缘编排软件，把边缘应用和边缘设备进行有效的管理起来。
&lt;/p&gt;

&lt;p&gt;
之后，我介绍了 Margo &lt;a href=&quot;./2024-05-19-margo-edge-device&quot;&gt;对边缘计算设备的一些要求&lt;/a&gt;。
&lt;/p&gt;

&lt;p&gt;
今天再补充一下相关的基本概念。
&lt;/p&gt;

&lt;p&gt;
&lt;b&gt;边缘应用（ Application ）&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
边缘应用适配边缘计算设备的特定应用。边缘应用的组成部分包括：应用声明文件、应用描述文件、若干个容器。这些容器可以部署到若干个边缘计算节点上。
&lt;/p&gt;

&lt;p&gt;
&lt;b&gt;边缘计算设备（Edge Compute Device）&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
安装在用户现场、可运行 Margo 应用的边缘计算硬件设备。设备部署到现场后，根据其能力分成多个角色：
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;独立集群服务器&lt;/li&gt;
&lt;li&gt;集群主节点&lt;/li&gt;
&lt;li&gt;集群工作从节点&lt;/li&gt;
&lt;li&gt;独立设备&lt;/li&gt;
&lt;li&gt;嵌入式微设备&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
&lt;b&gt;工作负载编排软件（Workload Orchestration Software，简称 WOS）&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
系统服务，帮助用户配置、部署、管理边缘应用。通过 Margo 标准接口与应用仓库、设备仓库通信，并编排边缘计算节点。
&lt;/p&gt;

&lt;p&gt;
&lt;b&gt;工作负载编排代理（Workload Orchestration Agent）&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
运行在边缘计算设备中的服务，用于和工作负载编排软件通信，接收工作负载和配置数据。
&lt;/p&gt;

&lt;p&gt;
&lt;b&gt;设备编排软件（Device Orchestration Software）&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
用于部署、删除、维护边缘计算设备。与工作负载编排软件一起，给用户提供边缘计算管理功能。
&lt;/p&gt;

&lt;p&gt;
&lt;b&gt;设备编排代理（Device Orchestration Agent）&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
运行在边缘计算设备中的服务，用于和设备编排软件通信，接收设备配置数据，并加载到边缘计算设备中。
&lt;/p&gt;

&lt;p&gt;
&lt;b&gt;应用登记仓库（Application Registry）&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
边缘应用开发人员搭建的资料仓库，存放应用声明和应用市场相关资料。
&lt;/p&gt;

&lt;p&gt;
&lt;b&gt;应用仓库（Application Repository）&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
编排软件从应用仓库获取应用资料，部署到边缘计算设备。
&lt;/p&gt;

&lt;p&gt;
&lt;b&gt;应用市场（Application Marketplace）&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
用户在应用市场，从应用厂商购买应用的使用权。
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;展示可购买的应用清单&lt;/li&gt;
&lt;li&gt;用户可购买应用使用权限&lt;/li&gt;
&lt;li&gt;提供应用相关信息，可以获取应用文件资料&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
&lt;b&gt;应用类目（Application Catalog）&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
在工作负载编排软件中列出的可供用户部署和管理的应用清单。也就是从应用市场中购买了应用权限的应用。
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>单词本：aplomb</title>
   <link href="http://kimi.im/2024-05-19-aplomb"/>
   <updated>2024-05-19T00:00:00+00:00</updated>
   <id>http://kimi.im/aplomb</id>
   <content type="html">&lt;p&gt;
工业现场的设备最早是通过 4-20mA 这样的电流传输信号的。这样的信号传输限制很大，一次只能传输一个值。于是，工程师们发明了 HART 这样的 FSK 叠加信号，通过频率变换表达 0 和 1 。同时，又不影响 4-20mA 的电流。再后来，基于 HART ，有出现了 HART-IP和 WirelessHART，这些协议利用 IP 或无线方式进行通信，而核心的数据模型依然使用最早定义的 HART 数据模型。所以，这段话说通过核心的 HART 数据模型泰然自若地处理数据细节。
&lt;/p&gt;

&lt;p&gt;
WirelessHART already is being used to manage data streams from quite
sophisticated instruments such as vibration sensors for condition
monitoring. Entire frequency waveforms are being communicated via
HART-IP, and the core HART data model handles all that detail with
&lt;b&gt;aplomb&lt;/b&gt;.
&lt;/p&gt;

&lt;p&gt;
with aplomb 可以翻译为泰然自若。而 aplomb 则是沉着、泰然、自信的意思。
aplomb 其实来自法语的à plomb，à 是朝向、向着，plomb 则来自拉丁语
plumbum 铅，所以化学元素里铅的名字就是 plumbum，缩写 Pb。那么，朝向铅垂，就是垂直、沉着的意思咯。
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;She passed the test &lt;b&gt;with aplomb&lt;/b&gt;. 她泰然自若的通过了考试。（往往是在面对挑战的情况下展现出来的沉着状态）。&lt;/li&gt;
&lt;li&gt;Elle répondit avec &lt;b&gt;aplomb&lt;/b&gt;. 她自信应对。法语里 aplomb 作为名词使用。&lt;/li&gt;
&lt;li&gt;Vous ne manquez pas &lt;b&gt;d&amp;rsquo;aplomb&lt;/b&gt;! 你有些紧张，不够沉着。&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
英语里，铅 lead 也有领导的意思，那可能也是铅锤笔直朝向地面，所以就有领导、引导的意思。大概铅有润滑作用，所以英语 lead 常形容顺畅、移动快：
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;I had a &lt;b&gt;lead&lt;/b&gt; foot in my younger days, and had quite a few
accidents. 我年轻时候脚踩油门很快，不过很少出事故。&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
有时候，又形容很沉重：
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;My legs feel like &lt;b&gt;lead&lt;/b&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
德语里，铅das Blei，和 plumbum差别有点大。因为铅的密度大，所以也常用来比喻难受、沉重（schwer wie Blei，或直接 wie Blei）：
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;Mir liegt es wie &lt;b&gt;Blei&lt;/b&gt; in den Gliedern. 我疲倦得四肢动弹不得。&lt;/li&gt;
&lt;li&gt;Die Klöße liegen mir schwer wie &lt;b&gt;Blei&lt;/b&gt; im Magen.&lt;/li&gt;
&lt;li&gt;Meine Glieder sind schwer wie &lt;b&gt;Blei&lt;/b&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
还有，刚巧，我在周末看《舒伯特和他的世界》(&lt;a href=&quot;#citeproc_bib_item_1&quot;&gt;&lt;i&gt;Franz Schubert and His World&lt;/i&gt; 2014&lt;/a&gt;)读到了德语的铅笔，原来石墨黏土和木头做的铅笔，在德语里也叫铅笔呀： das
Bleistift
&lt;/p&gt;

&lt;p&gt;
法语直接 plomb 传承自拉丁语 plumbum
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;ciel de &lt;b&gt;plomb&lt;/b&gt;, 形容浅灰色的天空，即 leaden  sky&lt;/li&gt;
&lt;li&gt;mer de &lt;b&gt;plomb&lt;/b&gt;, 形容浅灰色的大海&lt;/li&gt;
&lt;li&gt;J&amp;rsquo;ai des jambes de &lt;b&gt;plomb&lt;/b&gt;. 我腿像铅般重。&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
&lt;b&gt;References&lt;/b&gt;
&lt;/p&gt;

&lt;style&gt;.csl-entry{text-indent: -1.5em; margin-left: 1.5em;}&lt;/style&gt;&lt;div class=&quot;csl-bib-body&quot;&gt;
  &lt;div class=&quot;csl-entry&quot;&gt;&lt;a id=&quot;citeproc_bib_item_1&quot;&gt;&lt;/a&gt;&lt;i&gt;Franz Schubert and His World&lt;/i&gt;. 2014.&lt;/div&gt;
&lt;/div&gt;
</content>
 </entry>
 
 <entry>
   <title>边缘计算新标准 Margo：边缘设备</title>
   <link href="http://kimi.im/2024-05-19-margo-edge-device"/>
   <updated>2024-05-19T00:00:00+00:00</updated>
   <id>http://kimi.im/margo-edge-device</id>
   <content type="html">&lt;p&gt;
我之前介绍了 &lt;a href=&quot;./2024-05-16-margo.html&quot;&gt;Margo 边缘计算标准&lt;/a&gt;的整体情况。今天再看看边缘设备部分的要求吧。
&lt;/p&gt;

&lt;p&gt;
Margo 边缘设备（Margo Edge Device）指的是安装在客户网络环境重，运行
Margo 标准应用的计算节点。
&lt;/p&gt;


&lt;div id=&quot;org55db783&quot; class=&quot;figure&quot;&gt;
&lt;p&gt;&lt;div align=&quot;center&quot;&gt;&lt;svg host=&quot;65bd71144e&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; xmlns:xlink=&quot;http://www.w3.org/1999/xlink&quot; version=&quot;1.1&quot;  viewBox=&quot;-0.5 -0.5 1524 1014&quot; content=&quot;&amp;lt;mxfile&amp;gt;&amp;lt;diagram name=&amp;quot;Page-1&amp;quot; id=&amp;quot;LR4Trw0PSKodyMa7JcZJ&amp;quot;&amp;gt;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&amp;lt;/diagram&amp;gt;&amp;lt;/mxfile&amp;gt;&quot;&gt;
    &lt;defs/&gt;
    &lt;g&gt;
        &lt;rect x=&quot;471.66&quot; y=&quot;451&quot; width=&quot;1049&quot; height=&quot;274&quot; fill=&quot;none&quot; stroke=&quot;rgb(0, 0, 0)&quot; stroke-width=&quot;2&quot; stroke-dasharray=&quot;6 6&quot; pointer-events=&quot;all&quot;/&gt;
        &lt;rect x=&quot;478.78&quot; y=&quot;457.93&quot; width=&quot;665&quot; height=&quot;260.07&quot; fill=&quot;rgb(255, 255, 255)&quot; stroke=&quot;rgb(0, 0, 0)&quot; stroke-width=&quot;3&quot; pointer-events=&quot;all&quot;/&gt;
        &lt;g transform=&quot;translate(-0.5 -0.5)&quot;&gt;
            &lt;switch&gt;
                &lt;foreignObject pointer-events=&quot;none&quot; width=&quot;100%&quot; height=&quot;100%&quot; requiredFeatures=&quot;http://www.w3.org/TR/SVG11/feature#Extensibility&quot; style=&quot;overflow: visible; text-align: left;&quot;&gt;
                    &lt;div xmlns=&quot;http://www.w3.org/1999/xhtml&quot; style=&quot;display: flex; align-items: unsafe flex-end; justify-content: unsafe center; width: 663px; height: 1px; padding-top: 715px; margin-left: 480px;&quot;&gt;
                        &lt;div data-drawio-colors=&quot;color: rgb(0, 0, 0); &quot; style=&quot;box-sizing: border-box; font-size: 0px; text-align: center;&quot;&gt;
                            &lt;div style=&quot;display: inline-block; font-size: 20px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; font-weight: bold; white-space: normal; overflow-wrap: normal;&quot;&gt;
                                Standalone Cluster(Leader and/or Worker)
                            &lt;/div&gt;
                        &lt;/div&gt;
                    &lt;/div&gt;
                &lt;/foreignObject&gt;
                &lt;text x=&quot;811&quot; y=&quot;715&quot; fill=&quot;rgb(0, 0, 0)&quot; font-family=&quot;Helvetica&quot; font-size=&quot;20px&quot; text-anchor=&quot;middle&quot; font-weight=&quot;bold&quot;&gt;
                    Standalone Cluster(Leader and/or Worker)
                &lt;/text&gt;
            &lt;/switch&gt;
        &lt;/g&gt;
        &lt;rect x=&quot;499.66&quot; y=&quot;1&quot; width=&quot;355.5&quot; height=&quot;131&quot; fill=&quot;#e1d5e7&quot; stroke=&quot;#9673a6&quot; stroke-width=&quot;3&quot; pointer-events=&quot;all&quot;/&gt;
        &lt;g transform=&quot;translate(-0.5 -0.5)&quot;&gt;
            &lt;switch&gt;
                &lt;foreignObject pointer-events=&quot;none&quot; width=&quot;100%&quot; height=&quot;100%&quot; requiredFeatures=&quot;http://www.w3.org/TR/SVG11/feature#Extensibility&quot; style=&quot;overflow: visible; text-align: left;&quot;&gt;
                    &lt;div xmlns=&quot;http://www.w3.org/1999/xhtml&quot; style=&quot;display: flex; align-items: unsafe flex-start; justify-content: unsafe center; width: 354px; height: 1px; padding-top: 8px; margin-left: 501px;&quot;&gt;
                        &lt;div data-drawio-colors=&quot;color: rgb(0, 0, 0); &quot; style=&quot;box-sizing: border-box; font-size: 0px; text-align: center;&quot;&gt;
                            &lt;div style=&quot;display: inline-block; font-size: 15px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; font-weight: bold; white-space: normal; overflow-wrap: normal;&quot;&gt;
                                Application Registry &amp;amp; Repository
                            &lt;/div&gt;
                        &lt;/div&gt;
                    &lt;/div&gt;
                &lt;/foreignObject&gt;
                &lt;text x=&quot;677&quot; y=&quot;23&quot; fill=&quot;rgb(0, 0, 0)&quot; font-family=&quot;Helvetica&quot; font-size=&quot;15px&quot; text-anchor=&quot;middle&quot; font-weight=&quot;bold&quot;&gt;
                    Application Registry &amp;amp; Repository
                &lt;/text&gt;
            &lt;/switch&gt;
        &lt;/g&gt;
        &lt;path d=&quot;M 764.65 167.74 L 764.64 178.09 L 612.82 178.09 L 612.87 189.58&quot; fill=&quot;none&quot; stroke=&quot;#001dbc&quot; stroke-width=&quot;2&quot; stroke-miterlimit=&quot;10&quot; pointer-events=&quot;stroke&quot;/&gt;
        &lt;path d=&quot;M 764.66 161.74 L 768.65 169.74 L 764.65 167.74 L 760.65 169.73 Z&quot; fill=&quot;#001dbc&quot; stroke=&quot;#001dbc&quot; stroke-width=&quot;2&quot; stroke-miterlimit=&quot;10&quot; pointer-events=&quot;all&quot;/&gt;
        &lt;path d=&quot;M 612.9 195.58 L 608.86 187.6 L 612.87 189.58 L 616.86 187.57 Z&quot; fill=&quot;#001dbc&quot; stroke=&quot;#001dbc&quot; stroke-width=&quot;2&quot; stroke-miterlimit=&quot;10&quot; pointer-events=&quot;all&quot;/&gt;
        &lt;path d=&quot;M 737.16 132 C 737.16 147.19 749.47 159.5 764.66 159.5 C 779.85 159.5 792.16 147.19 792.16 132 Z&quot; fill=&quot;#0050ef&quot; stroke=&quot;#001dbc&quot; stroke-miterlimit=&quot;10&quot; pointer-events=&quot;all&quot;/&gt;
        &lt;rect x=&quot;478.78&quot; y=&quot;226.32&quot; width=&quot;270&quot; height=&quot;100&quot; fill=&quot;#fff2cc&quot; stroke=&quot;#d6b656&quot; stroke-width=&quot;3&quot; pointer-events=&quot;all&quot;/&gt;
        &lt;g transform=&quot;translate(-0.5 -0.5)&quot;&gt;
            &lt;switch&gt;
                &lt;foreignObject pointer-events=&quot;none&quot; width=&quot;100%&quot; height=&quot;100%&quot; requiredFeatures=&quot;http://www.w3.org/TR/SVG11/feature#Extensibility&quot; style=&quot;overflow: visible; text-align: left;&quot;&gt;
                    &lt;div xmlns=&quot;http://www.w3.org/1999/xhtml&quot; style=&quot;display: flex; align-items: unsafe center; justify-content: unsafe center; width: 258px; height: 1px; padding-top: 276px; margin-left: 485px;&quot;&gt;
                        &lt;div data-drawio-colors=&quot;color: rgb(0, 0, 0); &quot; style=&quot;box-sizing: border-box; font-size: 0px; text-align: center;&quot;&gt;
                            &lt;div style=&quot;display: inline-block; font-size: 17px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; font-weight: bold; white-space: normal; overflow-wrap: normal;&quot;&gt;
                                WORKLOAD ORCHESTRATION SERVICE
                            &lt;/div&gt;
                        &lt;/div&gt;
                    &lt;/div&gt;
                &lt;/foreignObject&gt;
                &lt;text x=&quot;614&quot; y=&quot;281&quot; fill=&quot;rgb(0, 0, 0)&quot; font-family=&quot;Helvetica&quot; font-size=&quot;17px&quot; text-anchor=&quot;middle&quot; font-weight=&quot;bold&quot;&gt;
                    WORKLOAD ORCHESTRATION SERVICE
                &lt;/text&gt;
            &lt;/switch&gt;
        &lt;/g&gt;
        &lt;path d=&quot;M 585.41 197.82 C 585.41 213.01 597.72 225.32 612.91 225.32 C 628.1 225.32 640.41 213.01 640.41 197.82 Z&quot; fill=&quot;#0050ef&quot; stroke=&quot;#001dbc&quot; stroke-miterlimit=&quot;10&quot; transform=&quot;rotate(-180,612.91,211.57)&quot; pointer-events=&quot;all&quot;/&gt;
        &lt;rect x=&quot;767.12&quot; y=&quot;225.61&quot; width=&quot;270&quot; height=&quot;100&quot; fill=&quot;#fff2cc&quot; stroke=&quot;#d6b656&quot; stroke-width=&quot;3&quot; pointer-events=&quot;all&quot;/&gt;
        &lt;g transform=&quot;translate(-0.5 -0.5)&quot;&gt;
            &lt;switch&gt;
                &lt;foreignObject pointer-events=&quot;none&quot; width=&quot;100%&quot; height=&quot;100%&quot; requiredFeatures=&quot;http://www.w3.org/TR/SVG11/feature#Extensibility&quot; style=&quot;overflow: visible; text-align: left;&quot;&gt;
                    &lt;div xmlns=&quot;http://www.w3.org/1999/xhtml&quot; style=&quot;display: flex; align-items: unsafe center; justify-content: unsafe center; width: 258px; height: 1px; padding-top: 276px; margin-left: 773px;&quot;&gt;
                        &lt;div data-drawio-colors=&quot;color: rgb(0, 0, 0); &quot; style=&quot;box-sizing: border-box; font-size: 0px; text-align: center;&quot;&gt;
                            &lt;div style=&quot;display: inline-block; font-size: 17px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; font-weight: bold; white-space: normal; overflow-wrap: normal;&quot;&gt;
                                DEVICE ORCHESTRATION SERVICE
                            &lt;/div&gt;
                        &lt;/div&gt;
                    &lt;/div&gt;
                &lt;/foreignObject&gt;
                &lt;text x=&quot;902&quot; y=&quot;281&quot; fill=&quot;rgb(0, 0, 0)&quot; font-family=&quot;Helvetica&quot; font-size=&quot;17px&quot; text-anchor=&quot;middle&quot; font-weight=&quot;bold&quot;&gt;
                    DEVICE ORCHESTRATION SERVICE
                &lt;/text&gt;
            &lt;/switch&gt;
        &lt;/g&gt;
        &lt;path d=&quot;M 901.99 353.11 L 902.09 377 L 832.27 377 L 832.29 421.69&quot; fill=&quot;none&quot; stroke=&quot;#001dbc&quot; stroke-width=&quot;2&quot; stroke-miterlimit=&quot;10&quot; pointer-events=&quot;stroke&quot;/&gt;
        &lt;path d=&quot;M 832.29 427.69 L 828.29 419.7 L 832.29 421.69 L 836.29 419.69 Z&quot; fill=&quot;#001dbc&quot; stroke=&quot;#001dbc&quot; stroke-width=&quot;2&quot; stroke-miterlimit=&quot;10&quot; pointer-events=&quot;all&quot;/&gt;
        &lt;path d=&quot;M 874.49 325.61 C 874.49 340.8 886.8 353.11 901.99 353.11 C 917.18 353.11 929.49 340.8 929.49 325.61 Z&quot; fill=&quot;#0050ef&quot; stroke=&quot;#001dbc&quot; stroke-miterlimit=&quot;10&quot; pointer-events=&quot;all&quot;/&gt;
        &lt;path d=&quot;M 509 60.5 L 509 37.5 L 730 37.5 L 730 60.5&quot; fill=&quot;#e1d5e7&quot; stroke=&quot;#9673a6&quot; stroke-miterlimit=&quot;10&quot; pointer-events=&quot;all&quot;/&gt;
        &lt;path d=&quot;M 509 60.5 L 509 117.5 L 730 117.5 L 730 60.5&quot; fill=&quot;none&quot; stroke=&quot;#9673a6&quot; stroke-miterlimit=&quot;10&quot; pointer-events=&quot;none&quot;/&gt;
        &lt;path d=&quot;M 509 60.5 L 730 60.5&quot; fill=&quot;none&quot; stroke=&quot;#9673a6&quot; stroke-miterlimit=&quot;10&quot; pointer-events=&quot;none&quot;/&gt;
        &lt;g transform=&quot;translate(-0.5 -0.5)&quot;&gt;
            &lt;switch&gt;
                &lt;foreignObject pointer-events=&quot;none&quot; width=&quot;100%&quot; height=&quot;100%&quot; requiredFeatures=&quot;http://www.w3.org/TR/SVG11/feature#Extensibility&quot; style=&quot;overflow: visible; text-align: left;&quot;&gt;
                    &lt;div xmlns=&quot;http://www.w3.org/1999/xhtml&quot; style=&quot;display: flex; align-items: unsafe center; justify-content: unsafe center; width: 219px; height: 1px; padding-top: 49px; margin-left: 510px;&quot;&gt;
                        &lt;div data-drawio-colors=&quot;color: rgb(0, 0, 0); &quot; style=&quot;box-sizing: border-box; font-size: 0px; text-align: center;&quot;&gt;
                            &lt;div style=&quot;display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: none; white-space: normal; overflow-wrap: normal;&quot;&gt;
                                Application Package
                            &lt;/div&gt;
                        &lt;/div&gt;
                    &lt;/div&gt;
                &lt;/foreignObject&gt;
                &lt;text x=&quot;620&quot; y=&quot;53&quot; fill=&quot;rgb(0, 0, 0)&quot; font-family=&quot;Helvetica&quot; font-size=&quot;12px&quot; text-anchor=&quot;middle&quot;&gt;
                    Application Package
                &lt;/text&gt;
            &lt;/switch&gt;
        &lt;/g&gt;
        &lt;path d=&quot;M 623.75 67.5 L 709.75 67.5 L 723.75 81.5 L 723.75 112.5 L 623.75 112.5 L 623.75 67.5 Z&quot; fill=&quot;#dae8fc&quot; stroke=&quot;#6c8ebf&quot; stroke-width=&quot;3&quot; stroke-miterlimit=&quot;10&quot; pointer-events=&quot;none&quot;/&gt;
        &lt;path d=&quot;M 709.75 67.5 L 709.75 81.5 L 723.75 81.5 Z&quot; fill-opacity=&quot;0.05&quot; fill=&quot;#000000&quot; stroke=&quot;none&quot; pointer-events=&quot;none&quot;/&gt;
        &lt;path d=&quot;M 709.75 67.5 L 709.75 81.5 L 723.75 81.5&quot; fill=&quot;none&quot; stroke=&quot;#6c8ebf&quot; stroke-width=&quot;3&quot; stroke-miterlimit=&quot;10&quot; pointer-events=&quot;none&quot;/&gt;
        &lt;g transform=&quot;translate(-0.5 -0.5)&quot;&gt;
            &lt;switch&gt;
                &lt;foreignObject pointer-events=&quot;none&quot; width=&quot;100%&quot; height=&quot;100%&quot; requiredFeatures=&quot;http://www.w3.org/TR/SVG11/feature#Extensibility&quot; style=&quot;overflow: visible; text-align: left;&quot;&gt;
                    &lt;div xmlns=&quot;http://www.w3.org/1999/xhtml&quot; style=&quot;display: flex; align-items: unsafe center; justify-content: unsafe center; width: 98px; height: 1px; padding-top: 90px; margin-left: 625px;&quot;&gt;
                        &lt;div data-drawio-colors=&quot;color: #004C99; &quot; style=&quot;box-sizing: border-box; font-size: 0px; text-align: center;&quot;&gt;
                            &lt;div style=&quot;display: inline-block; font-size: 13px; font-family: Helvetica; color: rgb(0, 76, 153); line-height: 1.2; pointer-events: none; font-weight: bold; white-space: normal; overflow-wrap: normal;&quot;&gt;
                                Application Manifest
                            &lt;/div&gt;
                        &lt;/div&gt;
                    &lt;/div&gt;
                &lt;/foreignObject&gt;
                &lt;text x=&quot;674&quot; y=&quot;94&quot; fill=&quot;#004C99&quot; font-family=&quot;Helvetica&quot; font-size=&quot;13px&quot; text-anchor=&quot;middle&quot; font-weight=&quot;bold&quot;&gt;
                    Application Man...
                &lt;/text&gt;
            &lt;/switch&gt;
        &lt;/g&gt;
        &lt;path d=&quot;M 517 67.5 L 602 67.5 L 617 82.5 L 617 112.5 L 517 112.5 L 517 67.5 Z&quot; fill=&quot;#dae8fc&quot; stroke=&quot;#6c8ebf&quot; stroke-width=&quot;3&quot; stroke-miterlimit=&quot;10&quot; pointer-events=&quot;none&quot;/&gt;
        &lt;path d=&quot;M 602 67.5 L 602 82.5 L 617 82.5 Z&quot; fill-opacity=&quot;0.05&quot; fill=&quot;#000000&quot; stroke=&quot;none&quot; pointer-events=&quot;none&quot;/&gt;
        &lt;path d=&quot;M 602 67.5 L 602 82.5 L 617 82.5&quot; fill=&quot;none&quot; stroke=&quot;#6c8ebf&quot; stroke-width=&quot;3&quot; stroke-miterlimit=&quot;10&quot; pointer-events=&quot;none&quot;/&gt;
        &lt;g transform=&quot;translate(-0.5 -0.5)&quot;&gt;
            &lt;switch&gt;
                &lt;foreignObject pointer-events=&quot;none&quot; width=&quot;100%&quot; height=&quot;100%&quot; requiredFeatures=&quot;http://www.w3.org/TR/SVG11/feature#Extensibility&quot; style=&quot;overflow: visible; text-align: left;&quot;&gt;
                    &lt;div xmlns=&quot;http://www.w3.org/1999/xhtml&quot; style=&quot;display: flex; align-items: unsafe center; justify-content: unsafe center; width: 98px; height: 1px; padding-top: 90px; margin-left: 518px;&quot;&gt;
                        &lt;div data-drawio-colors=&quot;color: #004C99; &quot; style=&quot;box-sizing: border-box; font-size: 0px; text-align: center;&quot;&gt;
                            &lt;div style=&quot;display: inline-block; font-size: 13px; font-family: Helvetica; color: rgb(0, 76, 153); line-height: 1.2; pointer-events: none; font-weight: bold; white-space: normal; overflow-wrap: normal;&quot;&gt;
                                Application Artifacts
                            &lt;/div&gt;
                        &lt;/div&gt;
                    &lt;/div&gt;
                &lt;/foreignObject&gt;
                &lt;text x=&quot;567&quot; y=&quot;94&quot; fill=&quot;#004C99&quot; font-family=&quot;Helvetica&quot; font-size=&quot;13px&quot; text-anchor=&quot;middle&quot; font-weight=&quot;bold&quot;&gt;
                    Application Art...
                &lt;/text&gt;
            &lt;/switch&gt;
        &lt;/g&gt;
        &lt;rect x=&quot;514&quot; y=&quot;591.62&quot; width=&quot;410.25&quot; height=&quot;30&quot; fill=&quot;#d5e8d4&quot; stroke=&quot;#82b366&quot; stroke-width=&quot;3&quot; pointer-events=&quot;none&quot;/&gt;
        &lt;g transform=&quot;translate(-0.5 -0.5)&quot;&gt;
            &lt;switch&gt;
                &lt;foreignObject pointer-events=&quot;none&quot; width=&quot;100%&quot; height=&quot;100%&quot; requiredFeatures=&quot;http://www.w3.org/TR/SVG11/feature#Extensibility&quot; style=&quot;overflow: visible; text-align: left;&quot;&gt;
                    &lt;div xmlns=&quot;http://www.w3.org/1999/xhtml&quot; style=&quot;display: flex; align-items: unsafe center; justify-content: unsafe center; width: 408px; height: 1px; padding-top: 607px; margin-left: 515px;&quot;&gt;
                        &lt;div data-drawio-colors=&quot;color: rgb(0, 0, 0); &quot; style=&quot;box-sizing: border-box; font-size: 0px; text-align: center;&quot;&gt;
                            &lt;div style=&quot;display: inline-block; font-size: 13px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: none; font-weight: bold; white-space: normal; overflow-wrap: normal;&quot;&gt;
                                KUBERNETES
                            &lt;/div&gt;
                        &lt;/div&gt;
                    &lt;/div&gt;
                &lt;/foreignObject&gt;
                &lt;text x=&quot;719&quot; y=&quot;611&quot; fill=&quot;rgb(0, 0, 0)&quot; font-family=&quot;Helvetica&quot; font-size=&quot;13px&quot; text-anchor=&quot;middle&quot; font-weight=&quot;bold&quot;&gt;
                    KUBERNETES
                &lt;/text&gt;
            &lt;/switch&gt;
        &lt;/g&gt;
        &lt;rect x=&quot;1053.74&quot; y=&quot;225.61&quot; width=&quot;270&quot; height=&quot;100&quot; fill=&quot;#f5f5f5&quot; stroke=&quot;#666666&quot; stroke-width=&quot;3&quot; pointer-events=&quot;none&quot;/&gt;
        &lt;g transform=&quot;translate(-0.5 -0.5)&quot;&gt;
            &lt;switch&gt;
                &lt;foreignObject pointer-events=&quot;none&quot; width=&quot;100%&quot; height=&quot;100%&quot; requiredFeatures=&quot;http://www.w3.org/TR/SVG11/feature#Extensibility&quot; style=&quot;overflow: visible; text-align: left;&quot;&gt;
                    &lt;div xmlns=&quot;http://www.w3.org/1999/xhtml&quot; style=&quot;display: flex; align-items: unsafe center; justify-content: unsafe center; width: 258px; height: 1px; padding-top: 276px; margin-left: 1060px;&quot;&gt;
                        &lt;div data-drawio-colors=&quot;color: #333333; &quot; style=&quot;box-sizing: border-box; font-size: 0px; text-align: center;&quot;&gt;
                            &lt;div style=&quot;display: inline-block; font-size: 17px; font-family: Helvetica; color: rgb(51, 51, 51); line-height: 1.2; pointer-events: none; font-weight: bold; white-space: normal; overflow-wrap: normal;&quot;&gt;
                                OBSERVABILITY PLATFORM
                            &lt;/div&gt;
                        &lt;/div&gt;
                    &lt;/div&gt;
                &lt;/foreignObject&gt;
                &lt;text x=&quot;1189&quot; y=&quot;281&quot; fill=&quot;#333333&quot; font-family=&quot;Helvetica&quot; font-size=&quot;17px&quot; text-anchor=&quot;middle&quot; font-weight=&quot;bold&quot;&gt;
                    OBSERVABILITY PLATFORM
                &lt;/text&gt;
            &lt;/switch&gt;
        &lt;/g&gt;
        &lt;path d=&quot;M 1188.72 361.35 L 1188.64 391.73 L 1054.64 391.73 L 1054.65 430.43&quot; fill=&quot;none&quot; stroke=&quot;#666666&quot; stroke-width=&quot;2&quot; stroke-miterlimit=&quot;10&quot; pointer-events=&quot;none&quot;/&gt;
        &lt;path d=&quot;M 1188.73 355.35 L 1192.71 363.36 L 1188.72 361.35 L 1184.71 363.34 Z&quot; fill=&quot;#666666&quot; stroke=&quot;#666666&quot; stroke-width=&quot;2&quot; stroke-miterlimit=&quot;10&quot; pointer-events=&quot;none&quot;/&gt;
        &lt;path d=&quot;M 1161.24 325.61 C 1161.24 340.8 1173.55 353.11 1188.74 353.11 C 1203.93 353.11 1216.24 340.8 1216.24 325.61 Z&quot; fill=&quot;#f5f5f5&quot; stroke=&quot;#666666&quot; stroke-width=&quot;3&quot; stroke-miterlimit=&quot;10&quot; pointer-events=&quot;none&quot;/&gt;
        &lt;rect x=&quot;1159.66&quot; y=&quot;458.43&quot; width=&quot;354&quot; height=&quot;166.57&quot; fill=&quot;rgb(255, 255, 255)&quot; stroke=&quot;rgb(0, 0, 0)&quot; stroke-width=&quot;3&quot; pointer-events=&quot;none&quot;/&gt;
        &lt;g transform=&quot;translate(-0.5 -0.5)&quot;&gt;
            &lt;switch&gt;
                &lt;foreignObject pointer-events=&quot;none&quot; width=&quot;100%&quot; height=&quot;100%&quot; requiredFeatures=&quot;http://www.w3.org/TR/SVG11/feature#Extensibility&quot; style=&quot;overflow: visible; text-align: left;&quot;&gt;
                    &lt;div xmlns=&quot;http://www.w3.org/1999/xhtml&quot; style=&quot;display: flex; align-items: unsafe flex-end; justify-content: unsafe center; width: 352px; height: 1px; padding-top: 622px; margin-left: 1161px;&quot;&gt;
                        &lt;div data-drawio-colors=&quot;color: rgb(0, 0, 0); &quot; style=&quot;box-sizing: border-box; font-size: 0px; text-align: center;&quot;&gt;
                            &lt;div style=&quot;display: inline-block; font-size: 20px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: none; font-weight: bold; white-space: normal; overflow-wrap: normal;&quot;&gt;
                                Cluster Worker
                            &lt;/div&gt;
                        &lt;/div&gt;
                    &lt;/div&gt;
                &lt;/foreignObject&gt;
                &lt;text x=&quot;1337&quot; y=&quot;622&quot; fill=&quot;rgb(0, 0, 0)&quot; font-family=&quot;Helvetica&quot; font-size=&quot;20px&quot; text-anchor=&quot;middle&quot; font-weight=&quot;bold&quot;&gt;
                    Cluster Worker
                &lt;/text&gt;
            &lt;/switch&gt;
        &lt;/g&gt;
        &lt;rect x=&quot;1176&quot; y=&quot;482.58&quot; width=&quot;64&quot; height=&quot;58.84&quot; fill=&quot;#d5e8d4&quot; stroke=&quot;#82b366&quot; stroke-width=&quot;3&quot; pointer-events=&quot;none&quot;/&gt;
        &lt;g transform=&quot;translate(-0.5 -0.5)&quot;&gt;
            &lt;switch&gt;
                &lt;foreignObject pointer-events=&quot;none&quot; width=&quot;100%&quot; height=&quot;100%&quot; requiredFeatures=&quot;http://www.w3.org/TR/SVG11/feature#Extensibility&quot; style=&quot;overflow: visible; text-align: left;&quot;&gt;
                    &lt;div xmlns=&quot;http://www.w3.org/1999/xhtml&quot; style=&quot;display: flex; align-items: unsafe center; justify-content: unsafe center; width: 62px; height: 1px; padding-top: 512px; margin-left: 1177px;&quot;&gt;
                        &lt;div data-drawio-colors=&quot;color: rgb(0, 0, 0); &quot; style=&quot;box-sizing: border-box; font-size: 0px; text-align: center;&quot;&gt;
                            &lt;div style=&quot;display: inline-block; font-size: 13px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: none; font-weight: bold; white-space: normal; overflow-wrap: normal;&quot;&gt;
                                Kublet
                            &lt;/div&gt;
                        &lt;/div&gt;
                    &lt;/div&gt;
                &lt;/foreignObject&gt;
                &lt;text x=&quot;1208&quot; y=&quot;516&quot; fill=&quot;rgb(0, 0, 0)&quot; font-family=&quot;Helvetica&quot; font-size=&quot;13px&quot; text-anchor=&quot;middle&quot; font-weight=&quot;bold&quot;&gt;
                    Kublet
                &lt;/text&gt;
            &lt;/switch&gt;
        &lt;/g&gt;
        &lt;path d=&quot;M 603.39 564.99 L 603.36 576.82 L 660.82 576.82 L 660.82 556.09 L 718.45 556.09 L 718.43 567.76&quot; fill=&quot;none&quot; stroke=&quot;#999999&quot; stroke-width=&quot;2&quot; stroke-miterlimit=&quot;10&quot; pointer-events=&quot;none&quot;/&gt;
        &lt;path d=&quot;M 603.4 558.99 L 607.39 567 L 603.39 564.99 L 599.39 566.98 Z&quot; fill=&quot;#999999&quot; stroke=&quot;#999999&quot; stroke-width=&quot;2&quot; stroke-miterlimit=&quot;10&quot; pointer-events=&quot;none&quot;/&gt;
        &lt;path d=&quot;M 718.42 573.76 L 714.43 565.76 L 718.43 567.76 L 722.43 565.77 Z&quot; fill=&quot;#999999&quot; stroke=&quot;#999999&quot; stroke-width=&quot;2&quot; stroke-miterlimit=&quot;10&quot; pointer-events=&quot;none&quot;/&gt;
        &lt;path d=&quot;M 705.91 576 C 705.91 584.7 711.51 591.75 718.41 591.75 C 725.31 591.75 730.91 584.7 730.91 576 Z&quot; fill=&quot;#f5f5f5&quot; stroke=&quot;#666666&quot; stroke-miterlimit=&quot;10&quot; transform=&quot;rotate(-180,718.41,583.88)&quot; pointer-events=&quot;none&quot;/&gt;
        &lt;rect x=&quot;478.78&quot; y=&quot;768&quot; width=&quot;665&quot; height=&quot;244&quot; fill=&quot;rgb(255, 255, 255)&quot; stroke=&quot;rgb(0, 0, 0)&quot; stroke-width=&quot;3&quot; pointer-events=&quot;none&quot;/&gt;
        &lt;g transform=&quot;translate(-0.5 -0.5)&quot;&gt;
            &lt;switch&gt;
                &lt;foreignObject pointer-events=&quot;none&quot; width=&quot;100%&quot; height=&quot;100%&quot; requiredFeatures=&quot;http://www.w3.org/TR/SVG11/feature#Extensibility&quot; style=&quot;overflow: visible; text-align: left;&quot;&gt;
                    &lt;div xmlns=&quot;http://www.w3.org/1999/xhtml&quot; style=&quot;display: flex; align-items: unsafe flex-end; justify-content: unsafe center; width: 663px; height: 1px; padding-top: 1009px; margin-left: 480px;&quot;&gt;
                        &lt;div data-drawio-colors=&quot;color: rgb(0, 0, 0); &quot; style=&quot;box-sizing: border-box; font-size: 0px; text-align: center;&quot;&gt;
                            &lt;div style=&quot;display: inline-block; font-size: 20px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: none; font-weight: bold; white-space: normal; overflow-wrap: normal;&quot;&gt;
                                Standalone Device
                            &lt;/div&gt;
                        &lt;/div&gt;
                    &lt;/div&gt;
                &lt;/foreignObject&gt;
                &lt;text x=&quot;811&quot; y=&quot;1009&quot; fill=&quot;rgb(0, 0, 0)&quot; font-family=&quot;Helvetica&quot; font-size=&quot;20px&quot; text-anchor=&quot;middle&quot; font-weight=&quot;bold&quot;&gt;
                    Standalone Device
                &lt;/text&gt;
            &lt;/switch&gt;
        &lt;/g&gt;
        &lt;rect x=&quot;980.78&quot; y=&quot;785.57&quot; width=&quot;140&quot; height=&quot;52&quot; fill=&quot;#d5e8d4&quot; stroke=&quot;#82b366&quot; stroke-width=&quot;3&quot; pointer-events=&quot;none&quot;/&gt;
        &lt;g transform=&quot;translate(-0.5 -0.5)&quot;&gt;
            &lt;switch&gt;
                &lt;foreignObject pointer-events=&quot;none&quot; width=&quot;100%&quot; height=&quot;100%&quot; requiredFeatures=&quot;http://www.w3.org/TR/SVG11/feature#Extensibility&quot; style=&quot;overflow: visible; text-align: left;&quot;&gt;
                    &lt;div xmlns=&quot;http://www.w3.org/1999/xhtml&quot; style=&quot;display: flex; align-items: unsafe center; justify-content: unsafe center; width: 138px; height: 1px; padding-top: 812px; margin-left: 982px;&quot;&gt;
                        &lt;div data-drawio-colors=&quot;color: rgb(0, 0, 0); &quot; style=&quot;box-sizing: border-box; font-size: 0px; text-align: center;&quot;&gt;
                            &lt;div style=&quot;display: inline-block; font-size: 13px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: none; font-weight: bold; white-space: normal; overflow-wrap: normal;&quot;&gt;
                                OTEL Collector
                            &lt;/div&gt;
                        &lt;/div&gt;
                    &lt;/div&gt;
                &lt;/foreignObject&gt;
                &lt;text x=&quot;1051&quot; y=&quot;815&quot; fill=&quot;rgb(0, 0, 0)&quot; font-family=&quot;Helvetica&quot; font-size=&quot;13px&quot; text-anchor=&quot;middle&quot; font-weight=&quot;bold&quot;&gt;
                    OTEL Collector
                &lt;/text&gt;
            &lt;/switch&gt;
        &lt;/g&gt;
        &lt;path d=&quot;M 1023.28 740.5 C 1023.28 755.69 1035.59 768 1050.78 768 C 1065.97 768 1078.28 755.69 1078.28 740.5 Z&quot; fill=&quot;#f5f5f5&quot; stroke=&quot;#666666&quot; stroke-width=&quot;3&quot; stroke-miterlimit=&quot;10&quot; transform=&quot;rotate(-180,1050.78,754.25)&quot; pointer-events=&quot;none&quot;/&gt;
        &lt;rect x=&quot;510.78&quot; y=&quot;785.57&quot; width=&quot;175&quot; height=&quot;65&quot; fill=&quot;#d5e8d4&quot; stroke=&quot;#82b366&quot; stroke-width=&quot;3&quot; pointer-events=&quot;none&quot;/&gt;
        &lt;g transform=&quot;translate(-0.5 -0.5)&quot;&gt;
            &lt;switch&gt;
                &lt;foreignObject pointer-events=&quot;none&quot; width=&quot;100%&quot; height=&quot;100%&quot; requiredFeatures=&quot;http://www.w3.org/TR/SVG11/feature#Extensibility&quot; style=&quot;overflow: visible; text-align: left;&quot;&gt;
                    &lt;div xmlns=&quot;http://www.w3.org/1999/xhtml&quot; style=&quot;display: flex; align-items: unsafe flex-start; justify-content: unsafe center; width: 173px; height: 1px; padding-top: 793px; margin-left: 512px;&quot;&gt;
                        &lt;div data-drawio-colors=&quot;color: rgb(0, 0, 0); &quot; style=&quot;box-sizing: border-box; font-size: 0px; text-align: center;&quot;&gt;
                            &lt;div style=&quot;display: inline-block; font-size: 13px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: none; font-weight: bold; white-space: normal; overflow-wrap: normal;&quot;&gt;
                                WORKLOAD
                                &lt;br/&gt;
                                ORCHESTRATION AGENT
                            &lt;/div&gt;
                        &lt;/div&gt;
                    &lt;/div&gt;
                &lt;/foreignObject&gt;
                &lt;text x=&quot;598&quot; y=&quot;806&quot; fill=&quot;rgb(0, 0, 0)&quot; font-family=&quot;Helvetica&quot; font-size=&quot;13px&quot; text-anchor=&quot;middle&quot; font-weight=&quot;bold&quot;&gt;
                    WORKLOAD...
                &lt;/text&gt;
            &lt;/switch&gt;
        &lt;/g&gt;
        &lt;path d=&quot;M 570.78 740 C 570.78 755.19 583.09 767.5 598.28 767.5 C 613.47 767.5 625.78 755.19 625.78 740 Z&quot; fill=&quot;#0050ef&quot; stroke=&quot;#001dbc&quot; stroke-miterlimit=&quot;10&quot; transform=&quot;rotate(-180,598.28,753.75)&quot; pointer-events=&quot;none&quot;/&gt;
        &lt;path d=&quot;M 1195.5 541.1 C 1195.5 549.8 1201.1 556.85 1208 556.85 C 1214.9 556.85 1220.5 549.8 1220.5 541.1 Z&quot; fill=&quot;#f5f5f5&quot; stroke=&quot;#666666&quot; stroke-miterlimit=&quot;10&quot; pointer-events=&quot;none&quot;/&gt;
        &lt;rect x=&quot;984.66&quot; y=&quot;538.93&quot; width=&quot;139&quot; height=&quot;47.5&quot; fill=&quot;#d5e8d4&quot; stroke=&quot;#82b366&quot; stroke-width=&quot;3&quot; pointer-events=&quot;none&quot;/&gt;
        &lt;g transform=&quot;translate(-0.5 -0.5)&quot;&gt;
            &lt;switch&gt;
                &lt;foreignObject pointer-events=&quot;none&quot; width=&quot;100%&quot; height=&quot;100%&quot; requiredFeatures=&quot;http://www.w3.org/TR/SVG11/feature#Extensibility&quot; style=&quot;overflow: visible; text-align: left;&quot;&gt;
                    &lt;div xmlns=&quot;http://www.w3.org/1999/xhtml&quot; style=&quot;display: flex; align-items: unsafe center; justify-content: unsafe center; width: 137px; height: 1px; padding-top: 563px; margin-left: 986px;&quot;&gt;
                        &lt;div data-drawio-colors=&quot;color: rgb(0, 0, 0); &quot; style=&quot;box-sizing: border-box; font-size: 0px; text-align: center;&quot;&gt;
                            &lt;div style=&quot;display: inline-block; font-size: 13px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: none; font-weight: bold; white-space: normal; overflow-wrap: normal;&quot;&gt;
                                Policy Agent
                            &lt;/div&gt;
                        &lt;/div&gt;
                    &lt;/div&gt;
                &lt;/foreignObject&gt;
                &lt;text x=&quot;1054&quot; y=&quot;567&quot; fill=&quot;rgb(0, 0, 0)&quot; font-family=&quot;Helvetica&quot; font-size=&quot;13px&quot; text-anchor=&quot;middle&quot; font-weight=&quot;bold&quot;&gt;
                    Policy Agent
                &lt;/text&gt;
            &lt;/switch&gt;
        &lt;/g&gt;
        &lt;rect x=&quot;984.66&quot; y=&quot;476&quot; width=&quot;140&quot; height=&quot;52&quot; fill=&quot;#d5e8d4&quot; stroke=&quot;#82b366&quot; stroke-width=&quot;3&quot; pointer-events=&quot;none&quot;/&gt;
        &lt;g transform=&quot;translate(-0.5 -0.5)&quot;&gt;
            &lt;switch&gt;
                &lt;foreignObject pointer-events=&quot;none&quot; width=&quot;100%&quot; height=&quot;100%&quot; requiredFeatures=&quot;http://www.w3.org/TR/SVG11/feature#Extensibility&quot; style=&quot;overflow: visible; text-align: left;&quot;&gt;
                    &lt;div xmlns=&quot;http://www.w3.org/1999/xhtml&quot; style=&quot;display: flex; align-items: unsafe center; justify-content: unsafe center; width: 138px; height: 1px; padding-top: 502px; margin-left: 986px;&quot;&gt;
                        &lt;div data-drawio-colors=&quot;color: rgb(0, 0, 0); &quot; style=&quot;box-sizing: border-box; font-size: 0px; text-align: center;&quot;&gt;
                            &lt;div style=&quot;display: inline-block; font-size: 13px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: none; font-weight: bold; white-space: normal; overflow-wrap: normal;&quot;&gt;
                                OTEL Collector
                            &lt;/div&gt;
                        &lt;/div&gt;
                    &lt;/div&gt;
                &lt;/foreignObject&gt;
                &lt;text x=&quot;1055&quot; y=&quot;506&quot; fill=&quot;rgb(0, 0, 0)&quot; font-family=&quot;Helvetica&quot; font-size=&quot;13px&quot; text-anchor=&quot;middle&quot; font-weight=&quot;bold&quot;&gt;
                    OTEL Collector
                &lt;/text&gt;
            &lt;/switch&gt;
        &lt;/g&gt;
        &lt;rect x=&quot;514&quot; y=&quot;476&quot; width=&quot;175&quot; height=&quot;65&quot; fill=&quot;#d5e8d4&quot; stroke=&quot;#82b366&quot; stroke-width=&quot;3&quot; pointer-events=&quot;none&quot;/&gt;
        &lt;g transform=&quot;translate(-0.5 -0.5)&quot;&gt;
            &lt;switch&gt;
                &lt;foreignObject pointer-events=&quot;none&quot; width=&quot;100%&quot; height=&quot;100%&quot; requiredFeatures=&quot;http://www.w3.org/TR/SVG11/feature#Extensibility&quot; style=&quot;overflow: visible; text-align: left;&quot;&gt;
                    &lt;div xmlns=&quot;http://www.w3.org/1999/xhtml&quot; style=&quot;display: flex; align-items: unsafe flex-start; justify-content: unsafe center; width: 173px; height: 1px; padding-top: 483px; margin-left: 515px;&quot;&gt;
                        &lt;div data-drawio-colors=&quot;color: rgb(0, 0, 0); &quot; style=&quot;box-sizing: border-box; font-size: 0px; text-align: center;&quot;&gt;
                            &lt;div style=&quot;display: inline-block; font-size: 13px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: none; font-weight: bold; white-space: normal; overflow-wrap: normal;&quot;&gt;
                                WORKLOAD
                                &lt;br/&gt;
                                ORCHESTRATION AGENT
                            &lt;/div&gt;
                        &lt;/div&gt;
                    &lt;/div&gt;
                &lt;/foreignObject&gt;
                &lt;text x=&quot;602&quot; y=&quot;496&quot; fill=&quot;rgb(0, 0, 0)&quot; font-family=&quot;Helvetica&quot; font-size=&quot;13px&quot; text-anchor=&quot;middle&quot; font-weight=&quot;bold&quot;&gt;
                    WORKLOAD...
                &lt;/text&gt;
            &lt;/switch&gt;
        &lt;/g&gt;
        &lt;path d=&quot;M 941.03 615.93 L 1208.09 615.91 L 1208.01 565.09&quot; fill=&quot;none&quot; stroke=&quot;#999999&quot; stroke-width=&quot;2&quot; stroke-miterlimit=&quot;10&quot; pointer-events=&quot;none&quot;/&gt;
        &lt;path d=&quot;M 1208 559.09 L 1212.02 567.08 L 1208.01 565.09 L 1204.02 567.09 Z&quot; fill=&quot;#999999&quot; stroke=&quot;#999999&quot; stroke-width=&quot;2&quot; stroke-miterlimit=&quot;10&quot; pointer-events=&quot;none&quot;/&gt;
        &lt;rect x=&quot;707.29&quot; y=&quot;476&quot; width=&quot;250&quot; height=&quot;65&quot; fill=&quot;#d5e8d4&quot; stroke=&quot;#82b366&quot; stroke-width=&quot;3&quot; pointer-events=&quot;none&quot;/&gt;
        &lt;rect x=&quot;707.29&quot; y=&quot;476&quot; width=&quot;250&quot; height=&quot;65&quot; fill=&quot;#d5e8d4&quot; stroke=&quot;#82b366&quot; stroke-width=&quot;3&quot; pointer-events=&quot;none&quot;/&gt;
        &lt;rect x=&quot;707.29&quot; y=&quot;476&quot; width=&quot;250&quot; height=&quot;65&quot; fill=&quot;#d5e8d4&quot; stroke=&quot;#82b366&quot; stroke-width=&quot;3&quot; pointer-events=&quot;none&quot;/&gt;
        &lt;g transform=&quot;translate(-0.5 -0.5)&quot;&gt;
            &lt;switch&gt;
                &lt;foreignObject pointer-events=&quot;none&quot; width=&quot;100%&quot; height=&quot;100%&quot; requiredFeatures=&quot;http://www.w3.org/TR/SVG11/feature#Extensibility&quot; style=&quot;overflow: visible; text-align: left;&quot;&gt;
                    &lt;div xmlns=&quot;http://www.w3.org/1999/xhtml&quot; style=&quot;display: flex; align-items: unsafe flex-start; justify-content: unsafe flex-start; width: 235px; height: 1px; padding-top: 483px; margin-left: 717px;&quot;&gt;
                        &lt;div data-drawio-colors=&quot;color: rgb(0, 0, 0); &quot; style=&quot;box-sizing: border-box; font-size: 0px; text-align: left;&quot;&gt;
                            &lt;div style=&quot;display: inline-block; font-size: 13px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: none; font-weight: bold; white-space: normal; overflow-wrap: normal;&quot;&gt;
                                DEVICE
                                &lt;br/&gt;
                                ORCHESTRATION
                                &lt;br/&gt;
                                AGENT
                            &lt;/div&gt;
                        &lt;/div&gt;
                    &lt;/div&gt;
                &lt;/foreignObject&gt;
                &lt;text x=&quot;717&quot; y=&quot;496&quot; fill=&quot;rgb(0, 0, 0)&quot; font-family=&quot;Helvetica&quot; font-size=&quot;13px&quot; font-weight=&quot;bold&quot;&gt;
                    DEVICE...
                &lt;/text&gt;
            &lt;/switch&gt;
        &lt;/g&gt;
        &lt;rect x=&quot;852.29&quot; y=&quot;488&quot; width=&quot;90&quot; height=&quot;40&quot; fill=&quot;#d5e8d4&quot; stroke=&quot;#82b366&quot; stroke-width=&quot;3&quot; stroke-dasharray=&quot;3 3&quot; pointer-events=&quot;none&quot;/&gt;
        &lt;g transform=&quot;translate(-0.5 -0.5)&quot;&gt;
            &lt;switch&gt;
                &lt;foreignObject pointer-events=&quot;none&quot; width=&quot;100%&quot; height=&quot;100%&quot; requiredFeatures=&quot;http://www.w3.org/TR/SVG11/feature#Extensibility&quot; style=&quot;overflow: visible; text-align: left;&quot;&gt;
                    &lt;div xmlns=&quot;http://www.w3.org/1999/xhtml&quot; style=&quot;display: flex; align-items: unsafe flex-start; justify-content: unsafe center; width: 75px; height: 1px; padding-top: 495px; margin-left: 861px;&quot;&gt;
                        &lt;div data-drawio-colors=&quot;color: rgb(0, 0, 0); &quot; style=&quot;box-sizing: border-box; font-size: 0px; text-align: center;&quot;&gt;
                            &lt;div style=&quot;display: inline-block; font-size: 13px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: none; font-weight: bold; white-space: normal; overflow-wrap: normal;&quot;&gt;
                                ONBOARDING SERVICE
                            &lt;/div&gt;
                        &lt;/div&gt;
                    &lt;/div&gt;
                &lt;/foreignObject&gt;
                &lt;text x=&quot;899&quot; y=&quot;508&quot; fill=&quot;rgb(0, 0, 0)&quot; font-family=&quot;Helvetica&quot; font-size=&quot;13px&quot; text-anchor=&quot;middle&quot; font-weight=&quot;bold&quot;&gt;
                    ONBOARDING S...
                &lt;/text&gt;
            &lt;/switch&gt;
        &lt;/g&gt;
        &lt;path d=&quot;M 802.16 740 C 802.16 755.19 814.47 767.5 829.66 767.5 C 844.85 767.5 857.16 755.19 857.16 740 Z&quot; fill=&quot;#0050ef&quot; stroke=&quot;#001dbc&quot; stroke-width=&quot;2&quot; stroke-miterlimit=&quot;10&quot; transform=&quot;rotate(-180,829.66,753.75)&quot; pointer-events=&quot;none&quot;/&gt;
        &lt;path d=&quot;M 1027.16 430.43 C 1027.16 445.62 1039.47 457.93 1054.66 457.93 C 1069.85 457.93 1082.16 445.62 1082.16 430.43 Z&quot; fill=&quot;#f5f5f5&quot; stroke=&quot;#666666&quot; stroke-width=&quot;3&quot; stroke-miterlimit=&quot;10&quot; transform=&quot;rotate(-180,1054.66,444.18)&quot; pointer-events=&quot;none&quot;/&gt;
        &lt;path d=&quot;M 581.53 429.93 C 581.53 445.12 593.84 457.43 609.03 457.43 C 624.22 457.43 636.53 445.12 636.53 429.93 Z&quot; fill=&quot;#0050ef&quot; stroke=&quot;#001dbc&quot; stroke-miterlimit=&quot;10&quot; transform=&quot;rotate(-180,609.03,443.68)&quot; pointer-events=&quot;none&quot;/&gt;
        &lt;path d=&quot;M 804.79 429.93 C 804.79 445.12 817.1 457.43 832.29 457.43 C 847.48 457.43 859.79 445.12 859.79 429.93 Z&quot; fill=&quot;#0050ef&quot; stroke=&quot;#001dbc&quot; stroke-miterlimit=&quot;10&quot; transform=&quot;rotate(-180,832.29,443.68)&quot; pointer-events=&quot;none&quot;/&gt;
        &lt;path d=&quot;M 609.03 353.82 L 609 421.69&quot; fill=&quot;none&quot; stroke=&quot;#001dbc&quot; stroke-width=&quot;2&quot; stroke-miterlimit=&quot;10&quot; pointer-events=&quot;none&quot;/&gt;
        &lt;path d=&quot;M 609 427.69 L 605 419.69 L 609 421.69 L 613 419.7 Z&quot; fill=&quot;#001dbc&quot; stroke=&quot;#001dbc&quot; stroke-width=&quot;2&quot; stroke-miterlimit=&quot;10&quot; pointer-events=&quot;none&quot;/&gt;
        &lt;path d=&quot;M 590.91 541 C 590.91 549.7 596.51 556.75 603.41 556.75 C 610.31 556.75 615.91 549.7 615.91 541 Z&quot; fill=&quot;#f5f5f5&quot; stroke=&quot;#666666&quot; stroke-miterlimit=&quot;10&quot; pointer-events=&quot;none&quot;/&gt;
        &lt;g transform=&quot;translate(-0.5 -0.5)&quot;&gt;
            &lt;switch&gt;
                &lt;foreignObject pointer-events=&quot;none&quot; width=&quot;100%&quot; height=&quot;100%&quot; requiredFeatures=&quot;http://www.w3.org/TR/SVG11/feature#Extensibility&quot; style=&quot;overflow: visible; text-align: left;&quot;&gt;
                    &lt;div xmlns=&quot;http://www.w3.org/1999/xhtml&quot; style=&quot;display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 707px; margin-left: 1419px;&quot;&gt;
                        &lt;div data-drawio-colors=&quot;color: rgb(0, 0, 0); &quot; style=&quot;box-sizing: border-box; font-size: 0px; text-align: center;&quot;&gt;
                            &lt;div style=&quot;display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: none; white-space: nowrap;&quot;&gt;
                                &lt;font style=&quot;font-size: 20px;&quot;&gt;
                                    &lt;b&gt;
                                        Kubernetes Cluster
                                    &lt;/b&gt;
                                &lt;/font&gt;
                            &lt;/div&gt;
                        &lt;/div&gt;
                    &lt;/div&gt;
                &lt;/foreignObject&gt;
                &lt;text x=&quot;1419&quot; y=&quot;710&quot; fill=&quot;rgb(0, 0, 0)&quot; font-family=&quot;Helvetica&quot; font-size=&quot;12px&quot; text-anchor=&quot;middle&quot;&gt;
                    Kubernetes Cluster
                &lt;/text&gt;
            &lt;/switch&gt;
        &lt;/g&gt;
        &lt;path d=&quot;M 534.13 143.19 L 452.09 143.18 L 452.09 607 L 505.85 607&quot; fill=&quot;none&quot; stroke=&quot;#999999&quot; stroke-width=&quot;2&quot; stroke-miterlimit=&quot;10&quot; pointer-events=&quot;none&quot;/&gt;
        &lt;path d=&quot;M 511.85 607 L 503.85 611 L 505.85 607 L 503.85 603 Z&quot; fill=&quot;#999999&quot; stroke=&quot;#999999&quot; stroke-width=&quot;2&quot; stroke-miterlimit=&quot;10&quot; pointer-events=&quot;none&quot;/&gt;
        &lt;rect x=&quot;913.66&quot; y=&quot;1&quot; width=&quot;355.5&quot; height=&quot;131&quot; fill=&quot;#d5e8d4&quot; stroke=&quot;#82b366&quot; stroke-width=&quot;3&quot; pointer-events=&quot;none&quot;/&gt;
        &lt;g transform=&quot;translate(-0.5 -0.5)&quot;&gt;
            &lt;switch&gt;
                &lt;foreignObject pointer-events=&quot;none&quot; width=&quot;100%&quot; height=&quot;100%&quot; requiredFeatures=&quot;http://www.w3.org/TR/SVG11/feature#Extensibility&quot; style=&quot;overflow: visible; text-align: left;&quot;&gt;
                    &lt;div xmlns=&quot;http://www.w3.org/1999/xhtml&quot; style=&quot;display: flex; align-items: unsafe flex-start; justify-content: unsafe center; width: 354px; height: 1px; padding-top: 8px; margin-left: 915px;&quot;&gt;
                        &lt;div data-drawio-colors=&quot;color: rgb(0, 0, 0); &quot; style=&quot;box-sizing: border-box; font-size: 0px; text-align: center;&quot;&gt;
                            &lt;div style=&quot;display: inline-block; font-size: 15px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: none; font-weight: bold; white-space: normal; overflow-wrap: normal;&quot;&gt;
                                Device Registry &amp;amp; Repository
                            &lt;/div&gt;
                        &lt;/div&gt;
                    &lt;/div&gt;
                &lt;/foreignObject&gt;
                &lt;text x=&quot;1091&quot; y=&quot;23&quot; fill=&quot;rgb(0, 0, 0)&quot; font-family=&quot;Helvetica&quot; font-size=&quot;15px&quot; text-anchor=&quot;middle&quot; font-weight=&quot;bold&quot;&gt;
                    Device Registry &amp;amp; Repository
                &lt;/text&gt;
            &lt;/switch&gt;
        &lt;/g&gt;
        &lt;path d=&quot;M 978 132 C 978 147.19 990.31 159.5 1005.5 159.5 C 1020.69 159.5 1033 147.19 1033 132 Z&quot; fill=&quot;#f5f5f5&quot; stroke=&quot;#666666&quot; stroke-miterlimit=&quot;10&quot; pointer-events=&quot;none&quot;/&gt;
        &lt;path d=&quot;M 1186.16 133.8 C 1186.16 148.99 1198.47 161.3 1213.66 161.3 C 1228.85 161.3 1241.16 148.99 1241.16 133.8 Z&quot; fill=&quot;#0050ef&quot; stroke=&quot;#001dbc&quot; stroke-miterlimit=&quot;10&quot; pointer-events=&quot;none&quot;/&gt;
        &lt;path d=&quot;M 920.66 60.5 L 920.66 37.5 L 1152 37.5 L 1152 60.5&quot; fill=&quot;#d5e8d4&quot; stroke=&quot;#82b366&quot; stroke-miterlimit=&quot;10&quot; pointer-events=&quot;none&quot;/&gt;
        &lt;path d=&quot;M 920.66 60.5 L 920.66 117.5 L 1152 117.5 L 1152 60.5&quot; fill=&quot;none&quot; stroke=&quot;#82b366&quot; stroke-miterlimit=&quot;10&quot; pointer-events=&quot;none&quot;/&gt;
        &lt;path d=&quot;M 920.66 60.5 L 1152 60.5&quot; fill=&quot;none&quot; stroke=&quot;#82b366&quot; stroke-miterlimit=&quot;10&quot; pointer-events=&quot;none&quot;/&gt;
        &lt;g transform=&quot;translate(-0.5 -0.5)&quot;&gt;
            &lt;switch&gt;
                &lt;foreignObject pointer-events=&quot;none&quot; width=&quot;100%&quot; height=&quot;100%&quot; requiredFeatures=&quot;http://www.w3.org/TR/SVG11/feature#Extensibility&quot; style=&quot;overflow: visible; text-align: left;&quot;&gt;
                    &lt;div xmlns=&quot;http://www.w3.org/1999/xhtml&quot; style=&quot;display: flex; align-items: unsafe center; justify-content: unsafe center; width: 229px; height: 1px; padding-top: 49px; margin-left: 922px;&quot;&gt;
                        &lt;div data-drawio-colors=&quot;color: rgb(0, 0, 0); &quot; style=&quot;box-sizing: border-box; font-size: 0px; text-align: center;&quot;&gt;
                            &lt;div style=&quot;display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: none; white-space: normal; overflow-wrap: normal;&quot;&gt;
                                Device Config Package
                            &lt;/div&gt;
                        &lt;/div&gt;
                    &lt;/div&gt;
                &lt;/foreignObject&gt;
                &lt;text x=&quot;1036&quot; y=&quot;53&quot; fill=&quot;rgb(0, 0, 0)&quot; font-family=&quot;Helvetica&quot; font-size=&quot;12px&quot; text-anchor=&quot;middle&quot;&gt;
                    Device Config Package
                &lt;/text&gt;
            &lt;/switch&gt;
        &lt;/g&gt;
        &lt;path d=&quot;M 932 66 L 1020 66 L 1032 78 L 1032 111 L 932 111 L 932 66 Z&quot; fill=&quot;#dae8fc&quot; stroke=&quot;#6c8ebf&quot; stroke-width=&quot;3&quot; stroke-miterlimit=&quot;10&quot; pointer-events=&quot;none&quot;/&gt;
        &lt;path d=&quot;M 1020 66 L 1020 78 L 1032 78 Z&quot; fill-opacity=&quot;0.05&quot; fill=&quot;#000000&quot; stroke=&quot;none&quot; pointer-events=&quot;none&quot;/&gt;
        &lt;path d=&quot;M 1020 66 L 1020 78 L 1032 78&quot; fill=&quot;none&quot; stroke=&quot;#6c8ebf&quot; stroke-width=&quot;3&quot; stroke-miterlimit=&quot;10&quot; pointer-events=&quot;none&quot;/&gt;
        &lt;g transform=&quot;translate(-0.5 -0.5)&quot;&gt;
            &lt;switch&gt;
                &lt;foreignObject pointer-events=&quot;none&quot; width=&quot;100%&quot; height=&quot;100%&quot; requiredFeatures=&quot;http://www.w3.org/TR/SVG11/feature#Extensibility&quot; style=&quot;overflow: visible; text-align: left;&quot;&gt;
                    &lt;div xmlns=&quot;http://www.w3.org/1999/xhtml&quot; style=&quot;display: flex; align-items: unsafe center; justify-content: unsafe center; width: 98px; height: 1px; padding-top: 89px; margin-left: 933px;&quot;&gt;
                        &lt;div data-drawio-colors=&quot;color: #004C99; &quot; style=&quot;box-sizing: border-box; font-size: 0px; text-align: center;&quot;&gt;
                            &lt;div style=&quot;display: inline-block; font-size: 13px; font-family: Helvetica; color: rgb(0, 76, 153); line-height: 1.2; pointer-events: none; font-weight: bold; white-space: normal; overflow-wrap: normal;&quot;&gt;
                                Device
                                &lt;br/&gt;
                                Artifacts
                            &lt;/div&gt;
                        &lt;/div&gt;
                    &lt;/div&gt;
                &lt;/foreignObject&gt;
                &lt;text x=&quot;982&quot; y=&quot;92&quot; fill=&quot;#004C99&quot; font-family=&quot;Helvetica&quot; font-size=&quot;13px&quot; text-anchor=&quot;middle&quot; font-weight=&quot;bold&quot;&gt;
                    Device...
                &lt;/text&gt;
            &lt;/switch&gt;
        &lt;/g&gt;
        &lt;path d=&quot;M 1043 66 L 1129 66 L 1143 80 L 1143 111 L 1043 111 L 1043 66 Z&quot; fill=&quot;#dae8fc&quot; stroke=&quot;#6c8ebf&quot; stroke-width=&quot;3&quot; stroke-miterlimit=&quot;10&quot; pointer-events=&quot;none&quot;/&gt;
        &lt;path d=&quot;M 1129 66 L 1129 80 L 1143 80 Z&quot; fill-opacity=&quot;0.05&quot; fill=&quot;#000000&quot; stroke=&quot;none&quot; pointer-events=&quot;none&quot;/&gt;
        &lt;path d=&quot;M 1129 66 L 1129 80 L 1143 80&quot; fill=&quot;none&quot; stroke=&quot;#6c8ebf&quot; stroke-width=&quot;3&quot; stroke-miterlimit=&quot;10&quot; pointer-events=&quot;none&quot;/&gt;
        &lt;g transform=&quot;translate(-0.5 -0.5)&quot;&gt;
            &lt;switch&gt;
                &lt;foreignObject pointer-events=&quot;none&quot; width=&quot;100%&quot; height=&quot;100%&quot; requiredFeatures=&quot;http://www.w3.org/TR/SVG11/feature#Extensibility&quot; style=&quot;overflow: visible; text-align: left;&quot;&gt;
                    &lt;div xmlns=&quot;http://www.w3.org/1999/xhtml&quot; style=&quot;display: flex; align-items: unsafe center; justify-content: unsafe center; width: 98px; height: 1px; padding-top: 89px; margin-left: 1044px;&quot;&gt;
                        &lt;div data-drawio-colors=&quot;color: #004C99; &quot; style=&quot;box-sizing: border-box; font-size: 0px; text-align: center;&quot;&gt;
                            &lt;div style=&quot;display: inline-block; font-size: 13px; font-family: Helvetica; color: rgb(0, 76, 153); line-height: 1.2; pointer-events: none; font-weight: bold; white-space: normal; overflow-wrap: normal;&quot;&gt;
                                Device Update
                                &lt;br/&gt;
                                Manifest
                            &lt;/div&gt;
                        &lt;/div&gt;
                    &lt;/div&gt;
                &lt;/foreignObject&gt;
                &lt;text x=&quot;1093&quot; y=&quot;92&quot; fill=&quot;#004C99&quot; font-family=&quot;Helvetica&quot; font-size=&quot;13px&quot; text-anchor=&quot;middle&quot; font-weight=&quot;bold&quot;&gt;
                    Device Update...
                &lt;/text&gt;
            &lt;/switch&gt;
        &lt;/g&gt;
        &lt;path d=&quot;M 532.53 132 C 532.53 147.19 544.84 159.5 560.03 159.5 C 575.22 159.5 587.53 147.19 587.53 132 Z&quot; fill=&quot;#f5f5f5&quot; stroke=&quot;#666666&quot; stroke-miterlimit=&quot;10&quot; pointer-events=&quot;none&quot;/&gt;
        &lt;path d=&quot;M 1213.69 169.54 L 1213.73 180.09 L 902.09 180.09 L 902.11 191.3&quot; fill=&quot;none&quot; stroke=&quot;#001dbc&quot; stroke-width=&quot;2&quot; stroke-miterlimit=&quot;10&quot; pointer-events=&quot;none&quot;/&gt;
        &lt;path d=&quot;M 1213.67 163.54 L 1217.7 171.52 L 1213.69 169.54 L 1209.7 171.55 Z&quot; fill=&quot;#001dbc&quot; stroke=&quot;#001dbc&quot; stroke-width=&quot;2&quot; stroke-miterlimit=&quot;10&quot; pointer-events=&quot;none&quot;/&gt;
        &lt;path d=&quot;M 902.12 197.3 L 898.1 189.31 L 902.11 191.3 L 906.1 189.3 Z&quot; fill=&quot;#001dbc&quot; stroke=&quot;#001dbc&quot; stroke-width=&quot;2&quot; stroke-miterlimit=&quot;10&quot; pointer-events=&quot;none&quot;/&gt;
        &lt;path d=&quot;M 874.62 199.54 C 874.62 214.73 886.93 227.04 902.12 227.04 C 917.31 227.04 929.62 214.73 929.62 199.54 Z&quot; fill=&quot;#0050ef&quot; stroke=&quot;#001dbc&quot; stroke-miterlimit=&quot;10&quot; transform=&quot;rotate(-180,902.12,213.29)&quot; pointer-events=&quot;none&quot;/&gt;
        &lt;path d=&quot;M 581.53 326.32 C 581.53 341.51 593.84 353.82 609.03 353.82 C 624.22 353.82 636.53 341.51 636.53 326.32 Z&quot; fill=&quot;#0050ef&quot; stroke=&quot;#001dbc&quot; stroke-miterlimit=&quot;10&quot; pointer-events=&quot;none&quot;/&gt;
        &lt;path d=&quot;M 349 399 L 1520 402&quot; fill=&quot;none&quot; stroke=&quot;rgb(0, 0, 0)&quot; stroke-width=&quot;2&quot; stroke-miterlimit=&quot;10&quot; stroke-dasharray=&quot;6 6&quot; pointer-events=&quot;none&quot;/&gt;
        &lt;rect x=&quot;347.75&quot; y=&quot;333&quot; width=&quot;77&quot; height=&quot;55&quot; fill=&quot;#f5f5f5&quot; stroke=&quot;#666666&quot; pointer-events=&quot;none&quot;/&gt;
        &lt;g transform=&quot;translate(-0.5 -0.5)&quot;&gt;
            &lt;switch&gt;
                &lt;foreignObject pointer-events=&quot;none&quot; width=&quot;100%&quot; height=&quot;100%&quot; requiredFeatures=&quot;http://www.w3.org/TR/SVG11/feature#Extensibility&quot; style=&quot;overflow: visible; text-align: left;&quot;&gt;
                    &lt;div xmlns=&quot;http://www.w3.org/1999/xhtml&quot; style=&quot;display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 361px; margin-left: 386px;&quot;&gt;
                        &lt;div data-drawio-colors=&quot;color: #333333; &quot; style=&quot;box-sizing: border-box; font-size: 0px; text-align: center;&quot;&gt;
                            &lt;div style=&quot;display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(51, 51, 51); line-height: 1.2; pointer-events: none; white-space: nowrap;&quot;&gt;
                                Cloud or
                                &lt;br/&gt;
                                On Prem
                                &lt;br/&gt;
                                Datacenter
                            &lt;/div&gt;
                        &lt;/div&gt;
                    &lt;/div&gt;
                &lt;/foreignObject&gt;
                &lt;text x=&quot;386&quot; y=&quot;364&quot; fill=&quot;#333333&quot; font-family=&quot;Helvetica&quot; font-size=&quot;12px&quot; text-anchor=&quot;middle&quot;&gt;
                    Cloud or...
                &lt;/text&gt;
            &lt;/switch&gt;
        &lt;/g&gt;
        &lt;rect x=&quot;347.75&quot; y=&quot;416&quot; width=&quot;77&quot; height=&quot;26&quot; fill=&quot;#f5f5f5&quot; stroke=&quot;#666666&quot; pointer-events=&quot;none&quot;/&gt;
        &lt;g transform=&quot;translate(-0.5 -0.5)&quot;&gt;
            &lt;switch&gt;
                &lt;foreignObject pointer-events=&quot;none&quot; width=&quot;100%&quot; height=&quot;100%&quot; requiredFeatures=&quot;http://www.w3.org/TR/SVG11/feature#Extensibility&quot; style=&quot;overflow: visible; text-align: left;&quot;&gt;
                    &lt;div xmlns=&quot;http://www.w3.org/1999/xhtml&quot; style=&quot;display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 429px; margin-left: 386px;&quot;&gt;
                        &lt;div data-drawio-colors=&quot;color: #333333; &quot; style=&quot;box-sizing: border-box; font-size: 0px; text-align: center;&quot;&gt;
                            &lt;div style=&quot;display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(51, 51, 51); line-height: 1.2; pointer-events: none; white-space: nowrap;&quot;&gt;
                                Shop Floor
                            &lt;/div&gt;
                        &lt;/div&gt;
                    &lt;/div&gt;
                &lt;/foreignObject&gt;
                &lt;text x=&quot;386&quot; y=&quot;433&quot; fill=&quot;#333333&quot; font-family=&quot;Helvetica&quot; font-size=&quot;12px&quot; text-anchor=&quot;middle&quot;&gt;
                    Shop Floor
                &lt;/text&gt;
            &lt;/switch&gt;
        &lt;/g&gt;
        &lt;path d=&quot;M 740 68 L 825 68 L 840 83 L 840 113 L 740 113 L 740 68 Z&quot; fill=&quot;#dae8fc&quot; stroke=&quot;#6c8ebf&quot; stroke-width=&quot;3&quot; stroke-miterlimit=&quot;10&quot; pointer-events=&quot;none&quot;/&gt;
        &lt;path d=&quot;M 825 68 L 825 83 L 840 83 Z&quot; fill-opacity=&quot;0.05&quot; fill=&quot;#000000&quot; stroke=&quot;none&quot; pointer-events=&quot;none&quot;/&gt;
        &lt;path d=&quot;M 825 68 L 825 83 L 840 83&quot; fill=&quot;none&quot; stroke=&quot;#6c8ebf&quot; stroke-width=&quot;3&quot; stroke-miterlimit=&quot;10&quot; pointer-events=&quot;none&quot;/&gt;
        &lt;g transform=&quot;translate(-0.5 -0.5)&quot;&gt;
            &lt;switch&gt;
                &lt;foreignObject pointer-events=&quot;none&quot; width=&quot;100%&quot; height=&quot;100%&quot; requiredFeatures=&quot;http://www.w3.org/TR/SVG11/feature#Extensibility&quot; style=&quot;overflow: visible; text-align: left;&quot;&gt;
                    &lt;div xmlns=&quot;http://www.w3.org/1999/xhtml&quot; style=&quot;display: flex; align-items: unsafe center; justify-content: unsafe center; width: 98px; height: 1px; padding-top: 91px; margin-left: 741px;&quot;&gt;
                        &lt;div data-drawio-colors=&quot;color: #004C99; &quot; style=&quot;box-sizing: border-box; font-size: 0px; text-align: center;&quot;&gt;
                            &lt;div style=&quot;display: inline-block; font-size: 13px; font-family: Helvetica; color: rgb(0, 76, 153); line-height: 1.2; pointer-events: none; font-weight: bold; white-space: normal; overflow-wrap: normal;&quot;&gt;
                                Application Description
                            &lt;/div&gt;
                        &lt;/div&gt;
                    &lt;/div&gt;
                &lt;/foreignObject&gt;
                &lt;text x=&quot;790&quot; y=&quot;94&quot; fill=&quot;#004C99&quot; font-family=&quot;Helvetica&quot; font-size=&quot;13px&quot; text-anchor=&quot;middle&quot; font-weight=&quot;bold&quot;&gt;
                    Application Des...
                &lt;/text&gt;
            &lt;/switch&gt;
        &lt;/g&gt;
        &lt;path d=&quot;M 493 279.92 L 528 279.92 L 539 290.92 L 539 325.61 L 493 325.61 L 493 279.92 Z&quot; fill=&quot;#dae8fc&quot; stroke=&quot;#6c8ebf&quot; stroke-width=&quot;3&quot; stroke-miterlimit=&quot;10&quot; pointer-events=&quot;none&quot;/&gt;
        &lt;path d=&quot;M 528 279.92 L 528 290.92 L 539 290.92 Z&quot; fill-opacity=&quot;0.05&quot; fill=&quot;#000000&quot; stroke=&quot;none&quot; pointer-events=&quot;none&quot;/&gt;
        &lt;path d=&quot;M 528 279.92 L 528 290.92 L 539 290.92&quot; fill=&quot;none&quot; stroke=&quot;#6c8ebf&quot; stroke-width=&quot;3&quot; stroke-miterlimit=&quot;10&quot; pointer-events=&quot;none&quot;/&gt;
        &lt;g transform=&quot;translate(-0.5 -0.5)&quot;&gt;
            &lt;switch&gt;
                &lt;foreignObject pointer-events=&quot;none&quot; width=&quot;100%&quot; height=&quot;100%&quot; requiredFeatures=&quot;http://www.w3.org/TR/SVG11/feature#Extensibility&quot; style=&quot;overflow: visible; text-align: left;&quot;&gt;
                    &lt;div xmlns=&quot;http://www.w3.org/1999/xhtml&quot; style=&quot;display: flex; align-items: unsafe flex-start; justify-content: unsafe center; width: 44px; height: 1px; padding-top: 287px; margin-left: 494px;&quot;&gt;
                        &lt;div data-drawio-colors=&quot;color: #004C99; &quot; style=&quot;box-sizing: border-box; font-size: 0px; text-align: center;&quot;&gt;
                            &lt;div style=&quot;display: inline-block; font-size: 10px; font-family: Helvetica; color: rgb(0, 76, 153); line-height: 1.2; pointer-events: none; font-weight: bold; white-space: normal; overflow-wrap: normal;&quot;&gt;
                                App
                                &lt;br/&gt;
                                Instance
                                &lt;br/&gt;
                                config
                            &lt;/div&gt;
                        &lt;/div&gt;
                    &lt;/div&gt;
                &lt;/foreignObject&gt;
                &lt;text x=&quot;516&quot; y=&quot;297&quot; fill=&quot;#004C99&quot; font-family=&quot;Helvetica&quot; font-size=&quot;10px&quot; text-anchor=&quot;middle&quot; font-weight=&quot;bold&quot;&gt;
                    App...
                &lt;/text&gt;
            &lt;/switch&gt;
        &lt;/g&gt;
        &lt;path d=&quot;M 1159.16 68 L 1245.16 68 L 1259.16 82 L 1259.16 113 L 1159.16 113 L 1159.16 68 Z&quot; fill=&quot;#dae8fc&quot; stroke=&quot;#6c8ebf&quot; stroke-width=&quot;3&quot; stroke-miterlimit=&quot;10&quot; pointer-events=&quot;none&quot;/&gt;
        &lt;path d=&quot;M 1245.16 68 L 1245.16 82 L 1259.16 82 Z&quot; fill-opacity=&quot;0.05&quot; fill=&quot;#000000&quot; stroke=&quot;none&quot; pointer-events=&quot;none&quot;/&gt;
        &lt;path d=&quot;M 1245.16 68 L 1245.16 82 L 1259.16 82&quot; fill=&quot;none&quot; stroke=&quot;#6c8ebf&quot; stroke-width=&quot;3&quot; stroke-miterlimit=&quot;10&quot; pointer-events=&quot;none&quot;/&gt;
        &lt;g transform=&quot;translate(-0.5 -0.5)&quot;&gt;
            &lt;switch&gt;
                &lt;foreignObject pointer-events=&quot;none&quot; width=&quot;100%&quot; height=&quot;100%&quot; requiredFeatures=&quot;http://www.w3.org/TR/SVG11/feature#Extensibility&quot; style=&quot;overflow: visible; text-align: left;&quot;&gt;
                    &lt;div xmlns=&quot;http://www.w3.org/1999/xhtml&quot; style=&quot;display: flex; align-items: unsafe center; justify-content: unsafe center; width: 98px; height: 1px; padding-top: 91px; margin-left: 1160px;&quot;&gt;
                        &lt;div data-drawio-colors=&quot;color: #004C99; &quot; style=&quot;box-sizing: border-box; font-size: 0px; text-align: center;&quot;&gt;
                            &lt;div style=&quot;display: inline-block; font-size: 13px; font-family: Helvetica; color: rgb(0, 76, 153); line-height: 1.2; pointer-events: none; font-weight: bold; white-space: normal; overflow-wrap: normal;&quot;&gt;
                                Device
                                &lt;br/&gt;
                                Update
                            &lt;/div&gt;
                        &lt;/div&gt;
                    &lt;/div&gt;
                &lt;/foreignObject&gt;
                &lt;text x=&quot;1209&quot; y=&quot;94&quot; fill=&quot;#004C99&quot; font-family=&quot;Helvetica&quot; font-size=&quot;13px&quot; text-anchor=&quot;middle&quot; font-weight=&quot;bold&quot;&gt;
                    Device...
                &lt;/text&gt;
            &lt;/switch&gt;
        &lt;/g&gt;
        &lt;rect x=&quot;708.87&quot; y=&quot;784.98&quot; width=&quot;250&quot; height=&quot;65&quot; fill=&quot;#d5e8d4&quot; stroke=&quot;#82b366&quot; stroke-width=&quot;3&quot; pointer-events=&quot;none&quot;/&gt;
        &lt;rect x=&quot;708.87&quot; y=&quot;784.98&quot; width=&quot;250&quot; height=&quot;65&quot; fill=&quot;#d5e8d4&quot; stroke=&quot;#82b366&quot; stroke-width=&quot;3&quot; pointer-events=&quot;none&quot;/&gt;
        &lt;rect x=&quot;708.87&quot; y=&quot;784.98&quot; width=&quot;250&quot; height=&quot;65&quot; fill=&quot;#d5e8d4&quot; stroke=&quot;#82b366&quot; stroke-width=&quot;3&quot; pointer-events=&quot;none&quot;/&gt;
        &lt;g transform=&quot;translate(-0.5 -0.5)&quot;&gt;
            &lt;switch&gt;
                &lt;foreignObject pointer-events=&quot;none&quot; width=&quot;100%&quot; height=&quot;100%&quot; requiredFeatures=&quot;http://www.w3.org/TR/SVG11/feature#Extensibility&quot; style=&quot;overflow: visible; text-align: left;&quot;&gt;
                    &lt;div xmlns=&quot;http://www.w3.org/1999/xhtml&quot; style=&quot;display: flex; align-items: unsafe flex-start; justify-content: unsafe flex-start; width: 235px; height: 1px; padding-top: 792px; margin-left: 719px;&quot;&gt;
                        &lt;div data-drawio-colors=&quot;color: rgb(0, 0, 0); &quot; style=&quot;box-sizing: border-box; font-size: 0px; text-align: left;&quot;&gt;
                            &lt;div style=&quot;display: inline-block; font-size: 13px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: none; font-weight: bold; white-space: normal; overflow-wrap: normal;&quot;&gt;
                                DEVICE
                                &lt;br/&gt;
                                ORCHESTRATION
                                &lt;br/&gt;
                                AGENT
                            &lt;/div&gt;
                        &lt;/div&gt;
                    &lt;/div&gt;
                &lt;/foreignObject&gt;
                &lt;text x=&quot;719&quot; y=&quot;805&quot; fill=&quot;rgb(0, 0, 0)&quot; font-family=&quot;Helvetica&quot; font-size=&quot;13px&quot; font-weight=&quot;bold&quot;&gt;
                    DEVICE...
                &lt;/text&gt;
            &lt;/switch&gt;
        &lt;/g&gt;
        &lt;rect x=&quot;853.87&quot; y=&quot;796.98&quot; width=&quot;90&quot; height=&quot;40&quot; fill=&quot;#d5e8d4&quot; stroke=&quot;#82b366&quot; stroke-width=&quot;3&quot; stroke-dasharray=&quot;3 3&quot; pointer-events=&quot;none&quot;/&gt;
        &lt;g transform=&quot;translate(-0.5 -0.5)&quot;&gt;
            &lt;switch&gt;
                &lt;foreignObject pointer-events=&quot;none&quot; width=&quot;100%&quot; height=&quot;100%&quot; requiredFeatures=&quot;http://www.w3.org/TR/SVG11/feature#Extensibility&quot; style=&quot;overflow: visible; text-align: left;&quot;&gt;
                    &lt;div xmlns=&quot;http://www.w3.org/1999/xhtml&quot; style=&quot;display: flex; align-items: unsafe flex-start; justify-content: unsafe center; width: 75px; height: 1px; padding-top: 804px; margin-left: 863px;&quot;&gt;
                        &lt;div data-drawio-colors=&quot;color: rgb(0, 0, 0); &quot; style=&quot;box-sizing: border-box; font-size: 0px; text-align: center;&quot;&gt;
                            &lt;div style=&quot;display: inline-block; font-size: 13px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: none; font-weight: bold; white-space: normal; overflow-wrap: normal;&quot;&gt;
                                ONBOARDING SERRVICE
                            &lt;/div&gt;
                        &lt;/div&gt;
                    &lt;/div&gt;
                &lt;/foreignObject&gt;
                &lt;text x=&quot;900&quot; y=&quot;817&quot; fill=&quot;rgb(0, 0, 0)&quot; font-family=&quot;Helvetica&quot; font-size=&quot;13px&quot; text-anchor=&quot;middle&quot; font-weight=&quot;bold&quot;&gt;
                    ONBOARDING S...
                &lt;/text&gt;
            &lt;/switch&gt;
        &lt;/g&gt;
        &lt;rect x=&quot;980.03&quot; y=&quot;842&quot; width=&quot;140&quot; height=&quot;47.5&quot; fill=&quot;#d5e8d4&quot; stroke=&quot;#82b366&quot; stroke-width=&quot;3&quot; pointer-events=&quot;none&quot;/&gt;
        &lt;g transform=&quot;translate(-0.5 -0.5)&quot;&gt;
            &lt;switch&gt;
                &lt;foreignObject pointer-events=&quot;none&quot; width=&quot;100%&quot; height=&quot;100%&quot; requiredFeatures=&quot;http://www.w3.org/TR/SVG11/feature#Extensibility&quot; style=&quot;overflow: visible; text-align: left;&quot;&gt;
                    &lt;div xmlns=&quot;http://www.w3.org/1999/xhtml&quot; style=&quot;display: flex; align-items: unsafe center; justify-content: unsafe center; width: 138px; height: 1px; padding-top: 866px; margin-left: 981px;&quot;&gt;
                        &lt;div data-drawio-colors=&quot;color: rgb(0, 0, 0); &quot; style=&quot;box-sizing: border-box; font-size: 0px; text-align: center;&quot;&gt;
                            &lt;div style=&quot;display: inline-block; font-size: 13px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: none; font-weight: bold; white-space: normal; overflow-wrap: normal;&quot;&gt;
                                Policy Agent
                            &lt;/div&gt;
                        &lt;/div&gt;
                    &lt;/div&gt;
                &lt;/foreignObject&gt;
                &lt;text x=&quot;1050&quot; y=&quot;870&quot; fill=&quot;rgb(0, 0, 0)&quot; font-family=&quot;Helvetica&quot; font-size=&quot;13px&quot; text-anchor=&quot;middle&quot; font-weight=&quot;bold&quot;&gt;
                    Policy Agent
                &lt;/text&gt;
            &lt;/switch&gt;
        &lt;/g&gt;
        &lt;rect x=&quot;338.75&quot; y=&quot;692&quot; width=&quot;103&quot; height=&quot;26&quot; fill=&quot;#f5f5f5&quot; stroke=&quot;#666666&quot; pointer-events=&quot;none&quot;/&gt;
        &lt;g transform=&quot;translate(-0.5 -0.5)&quot;&gt;
            &lt;switch&gt;
                &lt;foreignObject pointer-events=&quot;none&quot; width=&quot;100%&quot; height=&quot;100%&quot; requiredFeatures=&quot;http://www.w3.org/TR/SVG11/feature#Extensibility&quot; style=&quot;overflow: visible; text-align: left;&quot;&gt;
                    &lt;div xmlns=&quot;http://www.w3.org/1999/xhtml&quot; style=&quot;display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 705px; margin-left: 390px;&quot;&gt;
                        &lt;div data-drawio-colors=&quot;color: #333333; &quot; style=&quot;box-sizing: border-box; font-size: 0px; text-align: center;&quot;&gt;
                            &lt;div style=&quot;display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(51, 51, 51); line-height: 1.2; pointer-events: none; white-space: nowrap;&quot;&gt;
                                Device Option 1
                            &lt;/div&gt;
                        &lt;/div&gt;
                    &lt;/div&gt;
                &lt;/foreignObject&gt;
                &lt;text x=&quot;390&quot; y=&quot;709&quot; fill=&quot;#333333&quot; font-family=&quot;Helvetica&quot; font-size=&quot;12px&quot; text-anchor=&quot;middle&quot;&gt;
                    Device Option 1
                &lt;/text&gt;
            &lt;/switch&gt;
        &lt;/g&gt;
        &lt;rect x=&quot;338.75&quot; y=&quot;969&quot; width=&quot;103&quot; height=&quot;26&quot; fill=&quot;#f5f5f5&quot; stroke=&quot;#666666&quot; pointer-events=&quot;none&quot;/&gt;
        &lt;g transform=&quot;translate(-0.5 -0.5)&quot;&gt;
            &lt;switch&gt;
                &lt;foreignObject pointer-events=&quot;none&quot; width=&quot;100%&quot; height=&quot;100%&quot; requiredFeatures=&quot;http://www.w3.org/TR/SVG11/feature#Extensibility&quot; style=&quot;overflow: visible; text-align: left;&quot;&gt;
                    &lt;div xmlns=&quot;http://www.w3.org/1999/xhtml&quot; style=&quot;display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 982px; margin-left: 390px;&quot;&gt;
                        &lt;div data-drawio-colors=&quot;color: #333333; &quot; style=&quot;box-sizing: border-box; font-size: 0px; text-align: center;&quot;&gt;
                            &lt;div style=&quot;display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(51, 51, 51); line-height: 1.2; pointer-events: none; white-space: nowrap;&quot;&gt;
                                Device Option 2
                            &lt;/div&gt;
                        &lt;/div&gt;
                    &lt;/div&gt;
                &lt;/foreignObject&gt;
                &lt;text x=&quot;390&quot; y=&quot;986&quot; fill=&quot;#333333&quot; font-family=&quot;Helvetica&quot; font-size=&quot;12px&quot; text-anchor=&quot;middle&quot;&gt;
                    Device Option 2
                &lt;/text&gt;
            &lt;/switch&gt;
        &lt;/g&gt;
        &lt;rect x=&quot;514.25&quot; y=&quot;652&quot; width=&quot;410&quot; height=&quot;30&quot; fill=&quot;#d5e8d4&quot; stroke=&quot;#82b366&quot; stroke-width=&quot;3&quot; pointer-events=&quot;none&quot;/&gt;
        &lt;g transform=&quot;translate(-0.5 -0.5)&quot;&gt;
            &lt;switch&gt;
                &lt;foreignObject pointer-events=&quot;none&quot; width=&quot;100%&quot; height=&quot;100%&quot; requiredFeatures=&quot;http://www.w3.org/TR/SVG11/feature#Extensibility&quot; style=&quot;overflow: visible; text-align: left;&quot;&gt;
                    &lt;div xmlns=&quot;http://www.w3.org/1999/xhtml&quot; style=&quot;display: flex; align-items: unsafe center; justify-content: unsafe center; width: 398px; height: 1px; padding-top: 667px; margin-left: 520px;&quot;&gt;
                        &lt;div data-drawio-colors=&quot;color: rgb(0, 0, 0); &quot; style=&quot;box-sizing: border-box; font-size: 0px; text-align: center;&quot;&gt;
                            &lt;div style=&quot;display: inline-block; font-size: 13px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: none; font-weight: bold; white-space: normal; overflow-wrap: normal;&quot;&gt;
                                OS
                            &lt;/div&gt;
                        &lt;/div&gt;
                    &lt;/div&gt;
                &lt;/foreignObject&gt;
                &lt;text x=&quot;719&quot; y=&quot;671&quot; fill=&quot;rgb(0, 0, 0)&quot; font-family=&quot;Helvetica&quot; font-size=&quot;13px&quot; text-anchor=&quot;middle&quot; font-weight=&quot;bold&quot;&gt;
                    OS
                &lt;/text&gt;
            &lt;/switch&gt;
        &lt;/g&gt;
        &lt;rect x=&quot;514.25&quot; y=&quot;622&quot; width=&quot;410&quot; height=&quot;30&quot; fill=&quot;#d5e8d4&quot; stroke=&quot;#82b366&quot; stroke-width=&quot;3&quot; pointer-events=&quot;none&quot;/&gt;
        &lt;g transform=&quot;translate(-0.5 -0.5)&quot;&gt;
            &lt;switch&gt;
                &lt;foreignObject pointer-events=&quot;none&quot; width=&quot;100%&quot; height=&quot;100%&quot; requiredFeatures=&quot;http://www.w3.org/TR/SVG11/feature#Extensibility&quot; style=&quot;overflow: visible; text-align: left;&quot;&gt;
                    &lt;div xmlns=&quot;http://www.w3.org/1999/xhtml&quot; style=&quot;display: flex; align-items: unsafe center; justify-content: unsafe center; width: 398px; height: 1px; padding-top: 637px; margin-left: 520px;&quot;&gt;
                        &lt;div data-drawio-colors=&quot;color: rgb(0, 0, 0); &quot; style=&quot;box-sizing: border-box; font-size: 0px; text-align: center;&quot;&gt;
                            &lt;div style=&quot;display: inline-block; font-size: 13px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: none; font-weight: bold; white-space: normal; overflow-wrap: normal;&quot;&gt;
                                OCI CONTAINER RUNTIME
                            &lt;/div&gt;
                        &lt;/div&gt;
                    &lt;/div&gt;
                &lt;/foreignObject&gt;
                &lt;text x=&quot;719&quot; y=&quot;641&quot; fill=&quot;rgb(0, 0, 0)&quot; font-family=&quot;Helvetica&quot; font-size=&quot;13px&quot; text-anchor=&quot;middle&quot; font-weight=&quot;bold&quot;&gt;
                    OCI CONTAINER RUNTIME
                &lt;/text&gt;
            &lt;/switch&gt;
        &lt;/g&gt;
        &lt;rect x=&quot;521&quot; y=&quot;626.44&quot; width=&quot;87.97&quot; height=&quot;21.12&quot; fill=&quot;#e1d5e7&quot; stroke=&quot;#9673a6&quot; stroke-width=&quot;3&quot; pointer-events=&quot;none&quot;/&gt;
        &lt;g transform=&quot;translate(-0.5 -0.5)&quot;&gt;
            &lt;switch&gt;
                &lt;foreignObject pointer-events=&quot;none&quot; width=&quot;100%&quot; height=&quot;100%&quot; requiredFeatures=&quot;http://www.w3.org/TR/SVG11/feature#Extensibility&quot; style=&quot;overflow: visible; text-align: left;&quot;&gt;
                    &lt;div xmlns=&quot;http://www.w3.org/1999/xhtml&quot; style=&quot;display: flex; align-items: unsafe center; justify-content: unsafe center; width: 86px; height: 1px; padding-top: 637px; margin-left: 522px;&quot;&gt;
                        &lt;div data-drawio-colors=&quot;color: rgb(0, 0, 0); &quot; style=&quot;box-sizing: border-box; font-size: 0px; text-align: center;&quot;&gt;
                            &lt;div style=&quot;display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: none; font-weight: bold; white-space: normal; overflow-wrap: normal;&quot;&gt;
                                Deployed App
                            &lt;/div&gt;
                        &lt;/div&gt;
                    &lt;/div&gt;
                &lt;/foreignObject&gt;
                &lt;text x=&quot;565&quot; y=&quot;641&quot; fill=&quot;rgb(0, 0, 0)&quot; font-family=&quot;Helvetica&quot; font-size=&quot;12px&quot; text-anchor=&quot;middle&quot; font-weight=&quot;bold&quot;&gt;
                    Deployed App
                &lt;/text&gt;
            &lt;/switch&gt;
        &lt;/g&gt;
        &lt;rect x=&quot;508.12&quot; y=&quot;937&quot; width=&quot;410&quot; height=&quot;30&quot; fill=&quot;#d5e8d4&quot; stroke=&quot;#82b366&quot; stroke-width=&quot;3&quot; pointer-events=&quot;none&quot;/&gt;
        &lt;g transform=&quot;translate(-0.5 -0.5)&quot;&gt;
            &lt;switch&gt;
                &lt;foreignObject pointer-events=&quot;none&quot; width=&quot;100%&quot; height=&quot;100%&quot; requiredFeatures=&quot;http://www.w3.org/TR/SVG11/feature#Extensibility&quot; style=&quot;overflow: visible; text-align: left;&quot;&gt;
                    &lt;div xmlns=&quot;http://www.w3.org/1999/xhtml&quot; style=&quot;display: flex; align-items: unsafe center; justify-content: unsafe center; width: 398px; height: 1px; padding-top: 952px; margin-left: 514px;&quot;&gt;
                        &lt;div data-drawio-colors=&quot;color: rgb(0, 0, 0); &quot; style=&quot;box-sizing: border-box; font-size: 0px; text-align: center;&quot;&gt;
                            &lt;div style=&quot;display: inline-block; font-size: 13px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: none; font-weight: bold; white-space: normal; overflow-wrap: normal;&quot;&gt;
                                OS
                            &lt;/div&gt;
                        &lt;/div&gt;
                    &lt;/div&gt;
                &lt;/foreignObject&gt;
                &lt;text x=&quot;713&quot; y=&quot;956&quot; fill=&quot;rgb(0, 0, 0)&quot; font-family=&quot;Helvetica&quot; font-size=&quot;13px&quot; text-anchor=&quot;middle&quot; font-weight=&quot;bold&quot;&gt;
                    OS
                &lt;/text&gt;
            &lt;/switch&gt;
        &lt;/g&gt;
        &lt;rect x=&quot;508.12&quot; y=&quot;907&quot; width=&quot;410&quot; height=&quot;30&quot; fill=&quot;#d5e8d4&quot; stroke=&quot;#82b366&quot; stroke-width=&quot;3&quot; pointer-events=&quot;none&quot;/&gt;
        &lt;g transform=&quot;translate(-0.5 -0.5)&quot;&gt;
            &lt;switch&gt;
                &lt;foreignObject pointer-events=&quot;none&quot; width=&quot;100%&quot; height=&quot;100%&quot; requiredFeatures=&quot;http://www.w3.org/TR/SVG11/feature#Extensibility&quot; style=&quot;overflow: visible; text-align: left;&quot;&gt;
                    &lt;div xmlns=&quot;http://www.w3.org/1999/xhtml&quot; style=&quot;display: flex; align-items: unsafe center; justify-content: unsafe center; width: 398px; height: 1px; padding-top: 922px; margin-left: 514px;&quot;&gt;
                        &lt;div data-drawio-colors=&quot;color: rgb(0, 0, 0); &quot; style=&quot;box-sizing: border-box; font-size: 0px; text-align: center;&quot;&gt;
                            &lt;div style=&quot;display: inline-block; font-size: 10px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: none; font-weight: bold; white-space: normal; overflow-wrap: normal;&quot;&gt;
                                OCI CONTAINER RUNTIME(Docker/Podman/...)
                            &lt;/div&gt;
                        &lt;/div&gt;
                    &lt;/div&gt;
                &lt;/foreignObject&gt;
                &lt;text x=&quot;713&quot; y=&quot;925&quot; fill=&quot;rgb(0, 0, 0)&quot; font-family=&quot;Helvetica&quot; font-size=&quot;10px&quot; text-anchor=&quot;middle&quot; font-weight=&quot;bold&quot;&gt;
                    OCI CONTAINER RUNTIME(Docker/Podman/...)
                &lt;/text&gt;
            &lt;/switch&gt;
        &lt;/g&gt;
        &lt;rect x=&quot;508.12&quot; y=&quot;911.44&quot; width=&quot;87.97&quot; height=&quot;21.12&quot; fill=&quot;#e1d5e7&quot; stroke=&quot;#9673a6&quot; stroke-width=&quot;3&quot; pointer-events=&quot;none&quot;/&gt;
        &lt;g transform=&quot;translate(-0.5 -0.5)&quot;&gt;
            &lt;switch&gt;
                &lt;foreignObject pointer-events=&quot;none&quot; width=&quot;100%&quot; height=&quot;100%&quot; requiredFeatures=&quot;http://www.w3.org/TR/SVG11/feature#Extensibility&quot; style=&quot;overflow: visible; text-align: left;&quot;&gt;
                    &lt;div xmlns=&quot;http://www.w3.org/1999/xhtml&quot; style=&quot;display: flex; align-items: unsafe center; justify-content: unsafe center; width: 86px; height: 1px; padding-top: 922px; margin-left: 509px;&quot;&gt;
                        &lt;div data-drawio-colors=&quot;color: rgb(0, 0, 0); &quot; style=&quot;box-sizing: border-box; font-size: 0px; text-align: center;&quot;&gt;
                            &lt;div style=&quot;display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: none; font-weight: bold; white-space: normal; overflow-wrap: normal;&quot;&gt;
                                Deployed App
                            &lt;/div&gt;
                        &lt;/div&gt;
                    &lt;/div&gt;
                &lt;/foreignObject&gt;
                &lt;text x=&quot;552&quot; y=&quot;926&quot; fill=&quot;rgb(0, 0, 0)&quot; font-family=&quot;Helvetica&quot; font-size=&quot;12px&quot; text-anchor=&quot;middle&quot; font-weight=&quot;bold&quot;&gt;
                    Deployed App
                &lt;/text&gt;
            &lt;/switch&gt;
        &lt;/g&gt;
        &lt;rect x=&quot;1236.84&quot; y=&quot;512&quot; width=&quot;260&quot; height=&quot;30&quot; fill=&quot;#d5e8d4&quot; stroke=&quot;#82b366&quot; stroke-width=&quot;3&quot; pointer-events=&quot;none&quot;/&gt;
        &lt;g transform=&quot;translate(-0.5 -0.5)&quot;&gt;
            &lt;switch&gt;
                &lt;foreignObject pointer-events=&quot;none&quot; width=&quot;100%&quot; height=&quot;100%&quot; requiredFeatures=&quot;http://www.w3.org/TR/SVG11/feature#Extensibility&quot; style=&quot;overflow: visible; text-align: left;&quot;&gt;
                    &lt;div xmlns=&quot;http://www.w3.org/1999/xhtml&quot; style=&quot;display: flex; align-items: unsafe center; justify-content: unsafe center; width: 248px; height: 1px; padding-top: 527px; margin-left: 1243px;&quot;&gt;
                        &lt;div data-drawio-colors=&quot;color: rgb(0, 0, 0); &quot; style=&quot;box-sizing: border-box; font-size: 0px; text-align: center;&quot;&gt;
                            &lt;div style=&quot;display: inline-block; font-size: 13px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: none; font-weight: bold; white-space: normal; overflow-wrap: normal;&quot;&gt;
                                OS
                            &lt;/div&gt;
                        &lt;/div&gt;
                    &lt;/div&gt;
                &lt;/foreignObject&gt;
                &lt;text x=&quot;1367&quot; y=&quot;531&quot; fill=&quot;rgb(0, 0, 0)&quot; font-family=&quot;Helvetica&quot; font-size=&quot;13px&quot; text-anchor=&quot;middle&quot; font-weight=&quot;bold&quot;&gt;
                    OS
                &lt;/text&gt;
            &lt;/switch&gt;
        &lt;/g&gt;
        &lt;rect x=&quot;1236.84&quot; y=&quot;482&quot; width=&quot;260&quot; height=&quot;30&quot; fill=&quot;#d5e8d4&quot; stroke=&quot;#82b366&quot; stroke-width=&quot;3&quot; pointer-events=&quot;none&quot;/&gt;
        &lt;g transform=&quot;translate(-0.5 -0.5)&quot;&gt;
            &lt;switch&gt;
                &lt;foreignObject pointer-events=&quot;none&quot; width=&quot;100%&quot; height=&quot;100%&quot; requiredFeatures=&quot;http://www.w3.org/TR/SVG11/feature#Extensibility&quot; style=&quot;overflow: visible; text-align: left;&quot;&gt;
                    &lt;div xmlns=&quot;http://www.w3.org/1999/xhtml&quot; style=&quot;display: flex; align-items: unsafe center; justify-content: unsafe center; width: 248px; height: 1px; padding-top: 497px; margin-left: 1243px;&quot;&gt;
                        &lt;div data-drawio-colors=&quot;color: rgb(0, 0, 0); &quot; style=&quot;box-sizing: border-box; font-size: 0px; text-align: center;&quot;&gt;
                            &lt;div style=&quot;display: inline-block; font-size: 13px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: none; font-weight: bold; white-space: normal; overflow-wrap: normal;&quot;&gt;
                                OCI CONTAINER RUNTIME
                            &lt;/div&gt;
                        &lt;/div&gt;
                    &lt;/div&gt;
                &lt;/foreignObject&gt;
                &lt;text x=&quot;1367&quot; y=&quot;501&quot; fill=&quot;rgb(0, 0, 0)&quot; font-family=&quot;Helvetica&quot; font-size=&quot;13px&quot; text-anchor=&quot;middle&quot; font-weight=&quot;bold&quot;&gt;
                    OCI CONTAINER RUNTIME
                &lt;/text&gt;
            &lt;/switch&gt;
        &lt;/g&gt;
        &lt;rect x=&quot;1236.84&quot; y=&quot;482&quot; width=&quot;55.79&quot; height=&quot;29.56&quot; fill=&quot;#e1d5e7&quot; stroke=&quot;#9673a6&quot; stroke-width=&quot;3&quot; pointer-events=&quot;none&quot;/&gt;
        &lt;g transform=&quot;translate(-0.5 -0.5)&quot;&gt;
            &lt;switch&gt;
                &lt;foreignObject pointer-events=&quot;none&quot; width=&quot;100%&quot; height=&quot;100%&quot; requiredFeatures=&quot;http://www.w3.org/TR/SVG11/feature#Extensibility&quot; style=&quot;overflow: visible; text-align: left;&quot;&gt;
                    &lt;div xmlns=&quot;http://www.w3.org/1999/xhtml&quot; style=&quot;display: flex; align-items: unsafe center; justify-content: unsafe center; width: 54px; height: 1px; padding-top: 497px; margin-left: 1238px;&quot;&gt;
                        &lt;div data-drawio-colors=&quot;color: rgb(0, 0, 0); &quot; style=&quot;box-sizing: border-box; font-size: 0px; text-align: center;&quot;&gt;
                            &lt;div style=&quot;display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: none; font-weight: bold; white-space: normal; overflow-wrap: normal;&quot;&gt;
                                Deployed App
                            &lt;/div&gt;
                        &lt;/div&gt;
                    &lt;/div&gt;
                &lt;/foreignObject&gt;
                &lt;text x=&quot;1265&quot; y=&quot;500&quot; fill=&quot;rgb(0, 0, 0)&quot; font-family=&quot;Helvetica&quot; font-size=&quot;12px&quot; text-anchor=&quot;middle&quot; font-weight=&quot;bold&quot;&gt;
                    Deployed...
                &lt;/text&gt;
            &lt;/switch&gt;
        &lt;/g&gt;
        &lt;path d=&quot;M 593.59 874.56 L 593.55 886.45 L 651.18 886.45 L 651.18 865.55 L 708.64 865.55 L 708.63 877.33&quot; fill=&quot;none&quot; stroke=&quot;#999999&quot; stroke-width=&quot;2&quot; stroke-miterlimit=&quot;10&quot; pointer-events=&quot;none&quot;/&gt;
        &lt;path d=&quot;M 593.61 868.56 L 597.58 876.57 L 593.59 874.56 L 589.58 876.54 Z&quot; fill=&quot;#999999&quot; stroke=&quot;#999999&quot; stroke-width=&quot;2&quot; stroke-miterlimit=&quot;10&quot; pointer-events=&quot;none&quot;/&gt;
        &lt;path d=&quot;M 708.62 883.33 L 704.63 875.33 L 708.63 877.33 L 712.63 875.34 Z&quot; fill=&quot;#999999&quot; stroke=&quot;#999999&quot; stroke-width=&quot;2&quot; stroke-miterlimit=&quot;10&quot; pointer-events=&quot;none&quot;/&gt;
        &lt;path d=&quot;M 696.12 885.57 C 696.12 894.27 701.72 901.32 708.62 901.32 C 715.52 901.32 721.12 894.27 721.12 885.57 Z&quot; fill=&quot;#f5f5f5&quot; stroke=&quot;#666666&quot; stroke-miterlimit=&quot;10&quot; transform=&quot;rotate(-180,708.62,893.44)&quot; pointer-events=&quot;none&quot;/&gt;
        &lt;path d=&quot;M 581.12 850.57 C 581.12 859.27 586.72 866.32 593.62 866.32 C 600.52 866.32 606.12 859.27 606.12 850.57 Z&quot; fill=&quot;#f5f5f5&quot; stroke=&quot;#666666&quot; stroke-miterlimit=&quot;10&quot; pointer-events=&quot;none&quot;/&gt;
        &lt;path d=&quot;M 920.66 608.06 C 920.66 616.76 926.26 623.81 933.16 623.81 C 940.06 623.81 945.66 616.76 945.66 608.06 Z&quot; fill=&quot;#f5f5f5&quot; stroke=&quot;#666666&quot; stroke-miterlimit=&quot;10&quot; transform=&quot;rotate(270,933.16,615.93)&quot; pointer-events=&quot;none&quot;/&gt;
        &lt;rect x=&quot;1&quot; y=&quot;120&quot; width=&quot;317.25&quot; height=&quot;553.98&quot; fill=&quot;none&quot; stroke=&quot;rgb(0, 0, 0)&quot; stroke-width=&quot;3&quot; pointer-events=&quot;none&quot;/&gt;
        &lt;g transform=&quot;translate(-0.5 -0.5)&quot;&gt;
            &lt;switch&gt;
                &lt;foreignObject pointer-events=&quot;none&quot; width=&quot;100%&quot; height=&quot;100%&quot; requiredFeatures=&quot;http://www.w3.org/TR/SVG11/feature#Extensibility&quot; style=&quot;overflow: visible; text-align: left;&quot;&gt;
                    &lt;div xmlns=&quot;http://www.w3.org/1999/xhtml&quot; style=&quot;display: flex; align-items: unsafe flex-start; justify-content: unsafe center; width: 315px; height: 1px; padding-top: 127px; margin-left: 2px;&quot;&gt;
                        &lt;div data-drawio-colors=&quot;color: rgb(0, 0, 0); &quot; style=&quot;box-sizing: border-box; font-size: 0px; text-align: center;&quot;&gt;
                            &lt;div style=&quot;display: inline-block; font-size: 20px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: none; font-weight: bold; white-space: normal; overflow-wrap: normal;&quot;&gt;
                                LEGEND
                            &lt;/div&gt;
                        &lt;/div&gt;
                    &lt;/div&gt;
                &lt;/foreignObject&gt;
                &lt;text x=&quot;160&quot; y=&quot;147&quot; fill=&quot;rgb(0, 0, 0)&quot; font-family=&quot;Helvetica&quot; font-size=&quot;20px&quot; text-anchor=&quot;middle&quot; font-weight=&quot;bold&quot;&gt;
                    LEGEND
                &lt;/text&gt;
            &lt;/switch&gt;
        &lt;/g&gt;
        &lt;rect x=&quot;24.75&quot; y=&quot;155&quot; width=&quot;40&quot; height=&quot;40&quot; fill=&quot;#e1d5e7&quot; stroke=&quot;#9673a6&quot; stroke-width=&quot;3&quot; pointer-events=&quot;none&quot;/&gt;
        &lt;path d=&quot;M 17.25 458 C 17.25 473.19 29.56 485.5 44.75 485.5 C 59.94 485.5 72.25 473.19 72.25 458 Z&quot; fill=&quot;#0050ef&quot; stroke=&quot;#001dbc&quot; stroke-miterlimit=&quot;10&quot; pointer-events=&quot;none&quot;/&gt;
        &lt;g transform=&quot;translate(-0.5 -0.5)&quot;&gt;
            &lt;switch&gt;
                &lt;foreignObject pointer-events=&quot;none&quot; width=&quot;100%&quot; height=&quot;100%&quot; requiredFeatures=&quot;http://www.w3.org/TR/SVG11/feature#Extensibility&quot; style=&quot;overflow: visible; text-align: left;&quot;&gt;
                    &lt;div xmlns=&quot;http://www.w3.org/1999/xhtml&quot; style=&quot;display: flex; align-items: unsafe center; justify-content: unsafe flex-start; width: 241px; height: 1px; padding-top: 175px; margin-left: 83px;&quot;&gt;
                        &lt;div data-drawio-colors=&quot;color: rgb(0, 0, 0); &quot; style=&quot;box-sizing: border-box; font-size: 0px; text-align: left;&quot;&gt;
                            &lt;div style=&quot;display: inline-block; font-size: 17px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: none; white-space: normal; overflow-wrap: normal;&quot;&gt;
                                App Developer
                                &lt;br style=&quot;font-size: 17px;&quot;/&gt;
                                Private
                            &lt;/div&gt;
                        &lt;/div&gt;
                    &lt;/div&gt;
                &lt;/foreignObject&gt;
                &lt;text x=&quot;83&quot; y=&quot;180&quot; fill=&quot;rgb(0, 0, 0)&quot; font-family=&quot;Helvetica&quot; font-size=&quot;17px&quot;&gt;
                    App Developer...
                &lt;/text&gt;
            &lt;/switch&gt;
        &lt;/g&gt;
        &lt;g transform=&quot;translate(-0.5 -0.5)&quot;&gt;
            &lt;switch&gt;
                &lt;foreignObject pointer-events=&quot;none&quot; width=&quot;100%&quot; height=&quot;100%&quot; requiredFeatures=&quot;http://www.w3.org/TR/SVG11/feature#Extensibility&quot; style=&quot;overflow: visible; text-align: left;&quot;&gt;
                    &lt;div xmlns=&quot;http://www.w3.org/1999/xhtml&quot; style=&quot;display: flex; align-items: unsafe center; justify-content: unsafe flex-start; width: 241px; height: 1px; padding-top: 472px; margin-left: 83px;&quot;&gt;
                        &lt;div data-drawio-colors=&quot;color: rgb(0, 0, 0); &quot; style=&quot;box-sizing: border-box; font-size: 0px; text-align: left;&quot;&gt;
                            &lt;div style=&quot;display: inline-block; font-size: 17px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: none; white-space: normal; overflow-wrap: normal;&quot;&gt;
                                Margo Envisioned Communication Mechanisms
                            &lt;/div&gt;
                        &lt;/div&gt;
                    &lt;/div&gt;
                &lt;/foreignObject&gt;
                &lt;text x=&quot;83&quot; y=&quot;477&quot; fill=&quot;rgb(0, 0, 0)&quot; font-family=&quot;Helvetica&quot; font-size=&quot;17px&quot;&gt;
                    Margo Envisioned Communicatio...
                &lt;/text&gt;
            &lt;/switch&gt;
        &lt;/g&gt;
        &lt;rect x=&quot;24.75&quot; y=&quot;303&quot; width=&quot;40&quot; height=&quot;40&quot; fill=&quot;#d5e8d4&quot; stroke=&quot;#82b366&quot; stroke-width=&quot;3&quot; pointer-events=&quot;none&quot;/&gt;
        &lt;g transform=&quot;translate(-0.5 -0.5)&quot;&gt;
            &lt;switch&gt;
                &lt;foreignObject pointer-events=&quot;none&quot; width=&quot;100%&quot; height=&quot;100%&quot; requiredFeatures=&quot;http://www.w3.org/TR/SVG11/feature#Extensibility&quot; style=&quot;overflow: visible; text-align: left;&quot;&gt;
                    &lt;div xmlns=&quot;http://www.w3.org/1999/xhtml&quot; style=&quot;display: flex; align-items: unsafe center; justify-content: unsafe flex-start; width: 241px; height: 1px; padding-top: 323px; margin-left: 83px;&quot;&gt;
                        &lt;div data-drawio-colors=&quot;color: rgb(0, 0, 0); &quot; style=&quot;box-sizing: border-box; font-size: 0px; text-align: left;&quot;&gt;
                            &lt;div style=&quot;display: inline-block; font-size: 17px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: none; white-space: normal; overflow-wrap: normal;&quot;&gt;
                                Device Manufacturer
                                &lt;br style=&quot;font-size: 17px;&quot;/&gt;
                                Private
                            &lt;/div&gt;
                        &lt;/div&gt;
                    &lt;/div&gt;
                &lt;/foreignObject&gt;
                &lt;text x=&quot;83&quot; y=&quot;328&quot; fill=&quot;rgb(0, 0, 0)&quot; font-family=&quot;Helvetica&quot; font-size=&quot;17px&quot;&gt;
                    Device Manufacturer...
                &lt;/text&gt;
            &lt;/switch&gt;
        &lt;/g&gt;
        &lt;rect x=&quot;23.5&quot; y=&quot;229&quot; width=&quot;42.5&quot; height=&quot;40&quot; fill=&quot;#fff2cc&quot; stroke=&quot;#d6b656&quot; stroke-width=&quot;3&quot; pointer-events=&quot;none&quot;/&gt;
        &lt;g transform=&quot;translate(-0.5 -0.5)&quot;&gt;
            &lt;switch&gt;
                &lt;foreignObject pointer-events=&quot;none&quot; width=&quot;100%&quot; height=&quot;100%&quot; requiredFeatures=&quot;http://www.w3.org/TR/SVG11/feature#Extensibility&quot; style=&quot;overflow: visible; text-align: left;&quot;&gt;
                    &lt;div xmlns=&quot;http://www.w3.org/1999/xhtml&quot; style=&quot;display: flex; align-items: unsafe center; justify-content: unsafe flex-start; width: 241px; height: 1px; padding-top: 249px; margin-left: 83px;&quot;&gt;
                        &lt;div data-drawio-colors=&quot;color: rgb(0, 0, 0); &quot; style=&quot;box-sizing: border-box; font-size: 0px; text-align: left;&quot;&gt;
                            &lt;div style=&quot;display: inline-block; font-size: 17px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: none; white-space: normal; overflow-wrap: normal;&quot;&gt;
                                Orchestration Management Platform Provider
                            &lt;/div&gt;
                        &lt;/div&gt;
                    &lt;/div&gt;
                &lt;/foreignObject&gt;
                &lt;text x=&quot;83&quot; y=&quot;254&quot; fill=&quot;rgb(0, 0, 0)&quot; font-family=&quot;Helvetica&quot; font-size=&quot;17px&quot;&gt;
                    Orchestration Management Plat...
                &lt;/text&gt;
            &lt;/switch&gt;
        &lt;/g&gt;
        &lt;path d=&quot;M 24.75 590.39 L 44.75 590.39 L 64.75 610.39 L 64.75 650.39 L 24.75 650.39 L 24.75 590.39 Z&quot; fill=&quot;#dae8fc&quot; stroke=&quot;#6c8ebf&quot; stroke-width=&quot;3&quot; stroke-miterlimit=&quot;10&quot; pointer-events=&quot;none&quot;/&gt;
        &lt;path d=&quot;M 44.75 590.39 L 44.75 610.39 L 64.75 610.39 Z&quot; fill-opacity=&quot;0.05&quot; fill=&quot;#000000&quot; stroke=&quot;none&quot; pointer-events=&quot;none&quot;/&gt;
        &lt;path d=&quot;M 44.75 590.39 L 44.75 610.39 L 64.75 610.39&quot; fill=&quot;none&quot; stroke=&quot;#6c8ebf&quot; stroke-width=&quot;3&quot; stroke-miterlimit=&quot;10&quot; pointer-events=&quot;none&quot;/&gt;
        &lt;g transform=&quot;translate(-0.5 -0.5)&quot;&gt;
            &lt;switch&gt;
                &lt;foreignObject pointer-events=&quot;none&quot; width=&quot;100%&quot; height=&quot;100%&quot; requiredFeatures=&quot;http://www.w3.org/TR/SVG11/feature#Extensibility&quot; style=&quot;overflow: visible; text-align: left;&quot;&gt;
                    &lt;div xmlns=&quot;http://www.w3.org/1999/xhtml&quot; style=&quot;display: flex; align-items: unsafe flex-end; justify-content: unsafe center; width: 38px; height: 1px; padding-top: 647px; margin-left: 26px;&quot;&gt;
                        &lt;div data-drawio-colors=&quot;color: #004C99; &quot; style=&quot;box-sizing: border-box; font-size: 0px; text-align: center;&quot;&gt;
                            &lt;div style=&quot;display: inline-block; font-size: 13px; font-family: Helvetica; color: rgb(0, 76, 153); line-height: 1.2; pointer-events: none; font-weight: bold; white-space: normal; overflow-wrap: normal;&quot;&gt;
                                xxxxx
                            &lt;/div&gt;
                        &lt;/div&gt;
                    &lt;/div&gt;
                &lt;/foreignObject&gt;
                &lt;text x=&quot;45&quot; y=&quot;647&quot; fill=&quot;#004C99&quot; font-family=&quot;Helvetica&quot; font-size=&quot;13px&quot; text-anchor=&quot;middle&quot; font-weight=&quot;bold&quot;&gt;
                    xxxxx
                &lt;/text&gt;
            &lt;/switch&gt;
        &lt;/g&gt;
        &lt;g transform=&quot;translate(-0.5 -0.5)&quot;&gt;
            &lt;switch&gt;
                &lt;foreignObject pointer-events=&quot;none&quot; width=&quot;100%&quot; height=&quot;100%&quot; requiredFeatures=&quot;http://www.w3.org/TR/SVG11/feature#Extensibility&quot; style=&quot;overflow: visible; text-align: left;&quot;&gt;
                    &lt;div xmlns=&quot;http://www.w3.org/1999/xhtml&quot; style=&quot;display: flex; align-items: unsafe center; justify-content: unsafe flex-start; width: 241px; height: 1px; padding-top: 625px; margin-left: 83px;&quot;&gt;
                        &lt;div data-drawio-colors=&quot;color: rgb(0, 0, 0); &quot; style=&quot;box-sizing: border-box; font-size: 0px; text-align: left;&quot;&gt;
                            &lt;div style=&quot;display: inline-block; font-size: 17px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: none; white-space: normal; overflow-wrap: normal;&quot;&gt;
                                Margo Defined File format
                            &lt;/div&gt;
                        &lt;/div&gt;
                    &lt;/div&gt;
                &lt;/foreignObject&gt;
                &lt;text x=&quot;83&quot; y=&quot;630&quot; fill=&quot;rgb(0, 0, 0)&quot; font-family=&quot;Helvetica&quot; font-size=&quot;17px&quot;&gt;
                    Margo Defined File format
                &lt;/text&gt;
            &lt;/switch&gt;
        &lt;/g&gt;
        &lt;path d=&quot;M 17.25 532 C 17.25 547.19 29.56 559.5 44.75 559.5 C 59.94 559.5 72.25 547.19 72.25 532 Z&quot; fill=&quot;#f5f5f5&quot; stroke=&quot;#666666&quot; stroke-miterlimit=&quot;10&quot; pointer-events=&quot;none&quot;/&gt;
        &lt;g transform=&quot;translate(-0.5 -0.5)&quot;&gt;
            &lt;switch&gt;
                &lt;foreignObject pointer-events=&quot;none&quot; width=&quot;100%&quot; height=&quot;100%&quot; requiredFeatures=&quot;http://www.w3.org/TR/SVG11/feature#Extensibility&quot; style=&quot;overflow: visible; text-align: left;&quot;&gt;
                    &lt;div xmlns=&quot;http://www.w3.org/1999/xhtml&quot; style=&quot;display: flex; align-items: unsafe center; justify-content: unsafe flex-start; width: 241px; height: 1px; padding-top: 546px; margin-left: 83px;&quot;&gt;
                        &lt;div data-drawio-colors=&quot;color: rgb(0, 0, 0); &quot; style=&quot;box-sizing: border-box; font-size: 0px; text-align: left;&quot;&gt;
                            &lt;div style=&quot;display: inline-block; font-size: 17px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: none; white-space: normal; overflow-wrap: normal;&quot;&gt;
                                Communication Mechanisms  Not defined via Margo
                            &lt;/div&gt;
                        &lt;/div&gt;
                    &lt;/div&gt;
                &lt;/foreignObject&gt;
                &lt;text x=&quot;83&quot; y=&quot;551&quot; fill=&quot;rgb(0, 0, 0)&quot; font-family=&quot;Helvetica&quot; font-size=&quot;17px&quot;&gt;
                    Communication Mechanisms  Not...
                &lt;/text&gt;
            &lt;/switch&gt;
        &lt;/g&gt;
        &lt;rect x=&quot;24.75&quot; y=&quot;378&quot; width=&quot;40&quot; height=&quot;40&quot; fill=&quot;#f5f5f5&quot; stroke=&quot;#666666&quot; stroke-width=&quot;3&quot; pointer-events=&quot;none&quot;/&gt;
        &lt;g transform=&quot;translate(-0.5 -0.5)&quot;&gt;
            &lt;switch&gt;
                &lt;foreignObject pointer-events=&quot;none&quot; width=&quot;100%&quot; height=&quot;100%&quot; requiredFeatures=&quot;http://www.w3.org/TR/SVG11/feature#Extensibility&quot; style=&quot;overflow: visible; text-align: left;&quot;&gt;
                    &lt;div xmlns=&quot;http://www.w3.org/1999/xhtml&quot; style=&quot;display: flex; align-items: unsafe center; justify-content: unsafe flex-start; width: 241px; height: 1px; padding-top: 398px; margin-left: 83px;&quot;&gt;
                        &lt;div data-drawio-colors=&quot;color: rgb(0, 0, 0); &quot; style=&quot;box-sizing: border-box; font-size: 0px; text-align: left;&quot;&gt;
                            &lt;div style=&quot;display: inline-block; font-size: 17px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: none; white-space: normal; overflow-wrap: normal;&quot;&gt;
                                Observability Platform
                                &lt;br/&gt;
                                Provider
                            &lt;/div&gt;
                        &lt;/div&gt;
                    &lt;/div&gt;
                &lt;/foreignObject&gt;
                &lt;text x=&quot;83&quot; y=&quot;403&quot; fill=&quot;rgb(0, 0, 0)&quot; font-family=&quot;Helvetica&quot; font-size=&quot;17px&quot;&gt;
                    Observability Platform...
                &lt;/text&gt;
            &lt;/switch&gt;
        &lt;/g&gt;
    &lt;/g&gt;
    &lt;switch&gt;
        &lt;g requiredFeatures=&quot;http://www.w3.org/TR/SVG11/feature#Extensibility&quot;/&gt;
        &lt;a transform=&quot;translate(0,-5)&quot; xlink:href=&quot;https://www.diagrams.net/doc/faq/svg-export-text-problems&quot; target=&quot;_blank&quot;&gt;
            &lt;text text-anchor=&quot;middle&quot; font-size=&quot;10px&quot; x=&quot;50%&quot; y=&quot;100%&quot;&gt;
                Text is not SVG - cannot display
            &lt;/text&gt;
        &lt;/a&gt;
    &lt;/switch&gt;
&lt;/svg&gt;&lt;/div&gt;
&lt;/p&gt;
&lt;/div&gt;

&lt;p&gt;
Margo 边缘设备必须符合以下要求：
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;支持硬件安全模块 TPM&lt;/li&gt;
&lt;li&gt;安全启动&lt;/li&gt;
&lt;li&gt;来源鉴权&lt;/li&gt;
&lt;li&gt;零信任网络访问&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
有了这些基本功能，一个 Margo 边缘设备就能安全连入客户网络，然后由工作负载编排软件给设备安装 Margo 应用。这时候，就要根据 Margo 设备的不同性能，区分为以下几种设备类型：
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;独立集群服务器&lt;/li&gt;
&lt;li&gt;集群主节点&lt;/li&gt;
&lt;li&gt;集群工作从节点&lt;/li&gt;
&lt;li&gt;独立设备&lt;/li&gt;
&lt;li&gt;嵌入式微设备&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
&lt;b&gt;集群主节点&lt;/b&gt; 可以管理一个或多个集群工作从节点组成的集群。集群主节点提供以下能力：
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;Kubernetes 集群主控节点功能&lt;/li&gt;
&lt;li&gt;最基本的 Kubernetes 控制节点 API&lt;/li&gt;
&lt;li&gt;工作负载编排代理功能（Workload Orchestration Agent），主要用于访问
Margo 应用的仓库&lt;/li&gt;
&lt;li&gt;监控访问 API&lt;/li&gt;
&lt;li&gt;策略代理 API&lt;/li&gt;
&lt;li&gt;设备编排代理 API&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
&lt;b&gt;集群工作从节点&lt;/b&gt; 运行资源比主节点少，运行 Margo 应用。由主节点进行编排。提供以下能力：
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;OCI 容器运行时环境&lt;/li&gt;
&lt;li&gt;OTEL 诊断收集功能&lt;/li&gt;
&lt;li&gt;策略代理&lt;/li&gt;
&lt;li&gt;设备编排代理&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
&lt;b&gt;独立集群服务器&lt;/b&gt; 功能更多一些：
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;在单独一个设备中既提供集群主节点服务，又提供工作从节点服务。&lt;/li&gt;
&lt;li&gt;部署好之后，可以在主节点或从节点之间切换&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
&lt;b&gt;独立设备&lt;/b&gt; 可以运行 Margo 应用，但是不支持边缘 Kubernetes 环境。
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;运行工作编排代理&lt;/li&gt;
&lt;li&gt;可以额外运行 OCI 容器运行时环境，OTEL 诊断收集，策略代理等&lt;/li&gt;
&lt;/ul&gt;
</content>
 </entry>
 
 <entry>
   <title>单词本：per diems</title>
   <link href="http://kimi.im/2024-05-18-per-diems"/>
   <updated>2024-05-18T00:00:00+00:00</updated>
   <id>http://kimi.im/per-diems</id>
   <content type="html">&lt;p&gt;
最近在学习自动化系统的模块化设计，了解到自动化领域有个叫 modular skid
的概念。skid 是滑轨的意思，姑且我们把modular skid翻译为模块化滑轨装备吧。
&lt;/p&gt;

&lt;p&gt;
传统的过程自动化系统的建设方法会要求把装备的各个部分运输到工厂现场，然后一个一个安装起来，进行调试。而模块化滑轨装备则是把过程处理的某个工序，如渗透过滤、离心提取、均匀搅拌等做成一个个预制的模块，在模块车间里就调试好装备，客户需要的时候，整个运输到工业现场简单调试就能工作了。这就好比自己去菜场买菜、加工、烧菜的方式，和预制菜的区别了。预制菜打开包装一加热就可以吃啦。
&lt;/p&gt;

&lt;p&gt;
那么，这种模块化滑轨装备的好处就显而易见了：安装快捷、维护方便、成本更低。这里说的成本主要是指劳动力成本。所以，《WHAT ARE MODULAR PROCESS
SKIDS?》这篇文章里这么写到：
&lt;/p&gt;

&lt;p&gt;
“When labor is a limiting factor, you’re left with the same amount of
work to be done with a smaller crew”Sipes said.“That crew has to
work more, which means paying premium overtime wages, as well as &lt;b&gt;per
diems&lt;/b&gt; and travel expenses. However, taking a modular approach can
spread the work out geographically to where the workforce is readily
available, lessening the impact of those costs.” &lt;sup&gt;&lt;a id=&quot;fnr.1&quot; class=&quot;footref&quot; href=&quot;#fn.1&quot; role=&quot;doc-backlink&quot;&gt;1&lt;/a&gt;&lt;/sup&gt;
&lt;/p&gt;

&lt;p&gt;
这里，&lt;b&gt;per diems&lt;/b&gt;的意思是就是日津贴了。
&lt;/p&gt;

&lt;p&gt;
传统的自动化装备，因为需要工程师进行现场，所以需要工程师出差，就会产生出差补贴，出差补贴一般是按出差天数计算的么。 &lt;b&gt;per diems&lt;/b&gt;正是这个。
&lt;/p&gt;

&lt;p&gt;
之前，我介绍过&lt;a href=&quot;./2022-06-07-latin-carpe-diem.html&quot;&gt;carpe diem&lt;/a&gt;，意思是是抓住今天，及时行乐。 diem 就是天的意思。per diems 也就是per days了。这就是文言和白话的区别了么。当然，
per diems 有专有的意思，就是 amount or allowance of so much every day。
&lt;/p&gt;
&lt;div id=&quot;footnotes&quot;&gt;
&lt;h2 class=&quot;footnotes&quot;&gt;Footnotes: &lt;/h2&gt;
&lt;div id=&quot;text-footnotes&quot;&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.1&quot; class=&quot;footnum&quot; href=&quot;#fnr.1&quot; role=&quot;doc-backlink&quot;&gt;1&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot; role=&quot;doc-footnote&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
WHAT ARE MODULAR PROCESS SKIDS? A SIMPLE GUIDE FOR MANUFACTURERS
by EPIC Systems | EPIC Modular Process
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;


&lt;/div&gt;
&lt;/div&gt;</content>
 </entry>
 
 <entry>
   <title>单词本：bane</title>
   <link href="http://kimi.im/2024-05-18-bane"/>
   <updated>2024-05-18T00:00:00+00:00</updated>
   <id>http://kimi.im/bane</id>
   <content type="html">&lt;p&gt;
我们工业连接的产品要开发前端配置工具的前端界面。用上了 TypeScript，于是，我找来相关的书，了解下 TypeScript。
&lt;/p&gt;

&lt;p&gt;
在比较 JavaScript 和 TypeScript 的时候，书中这么说：
&lt;/p&gt;

&lt;p&gt;
The kind of implicit conversion that JavaScript does can be a really
hard-to-track-down source of errors, and is the &lt;b&gt;bane&lt;/b&gt; of many
JavaScript programmers.
&lt;/p&gt;

&lt;p&gt;
这里用到 bane 表示 JavaScript 中的隐式类型转换是很多 JS 程序员的不幸的根源。这个 bane 表示毒药和祸害。
&lt;/p&gt;

&lt;p&gt;
经常组成短语the &lt;b&gt;bane&lt;/b&gt; of sb&amp;rsquo;s existence/life表示某人罹祸的根源。
&lt;/p&gt;

&lt;p&gt;
比如Those noisy neighbours are the &lt;b&gt;bane&lt;/b&gt; of my life.那些吵闹的邻居是我生活的一大忧患。
&lt;/p&gt;

&lt;p&gt;
Drinking was the &lt;b&gt;bane&lt;/b&gt; of his existence. 喝酒把他毁了。
&lt;/p&gt;

&lt;p&gt;
bane 本意是毒药、毒草。比如，有个毒草叫 walfsbane ，取这个名字，要么是这个毒草跟狼一样恶毒，要么是能毒死饿狼。walfsbane 又叫 badger&amp;rsquo;s
bane（獾毒草）, hare&amp;rsquo;s bane（野兔毒草）, bear&amp;rsquo;s bane（熊毒草），
foxbane（狐狸毒草）。据说，又叫平头哥的蜜獾解毒能力超强，专吃毒蛇，被毒蛇咬伤，睡一觉就没事了。然而，这个毒草连獾都能毒倒！
&lt;/p&gt;

&lt;p&gt;
walfsbane 其实上它的学名叫Aconitum napellus舟形乌头，是一种多年生草本植物，长着蓝紫色的花，相当好看。但是，它从花到根都有剧毒。富含一种叫乌头碱的剧毒成分。古时候，人们把舟形乌头的毒液涂在箭头上杀人。中毒后，会引起神经和心脏跳动紊乱。又因为这个神经毒性，也用于进行一些治疗，比如平缓心脏跳动等作用。
&lt;/p&gt;

&lt;p&gt;
还有一种 bane 叫 banewort，颠茄，学名 Atropa belladonna，一种黑色浆果，也是剧毒的。。 Atropos ，即阿特洛波斯，是希腊神话里命运三女神之一。她的两个姐姐分别负责纺织生命线和分配生命度数，而阿特洛波斯负责切断生命之线。有传说颠茄正是她用来切断生命之线的工具。
&lt;/p&gt;

&lt;p&gt;
还有 belladonna 是美丽夫人的意思，据说文艺复兴时候，女士们把颠茄的汁滴到眼睛里，因为有神经毒性，可以括瞳，能让眼睛看起来好看些，也就是美瞳效果啦。
&lt;/p&gt;

&lt;p&gt;
还有据说中世纪的女巫们将颠茄、天仙子等茄科植物制作成能够引发梦幻般状态的“飞行药膏”，在安息日（the Sabbath）当晚就会擦在身上去野外“与魔鬼做交易”。那么具体怎么交易，就不知道了。
&lt;/p&gt;

&lt;p&gt;
还有个毒草叫 oxbane，能毒死牛？中文叫毒芹。毒芹根部位置有毒芹素，食之数分钟即中毒，有非常显著的致痉挛作用，严重的甚至可能造成死亡。
&lt;/p&gt;

&lt;p&gt;
狗毒草dogbane oleander就是夹竹桃，也是剧毒。前几年的旧闻：女孩嘴含夹竹桃拍照后中毒送医，在郑州，有一位网友跟路边的鲜花合拍了一组照片，结果第二天就进了医院。有人也有类似经历，是这么形容的“我就说我当时怎么头开始晕起来了我还以为是自己身体虚低血糖，万幸的是因为当时花茎的味道有点奇怪我吐掉了一些口水，救我一命”。
&lt;/p&gt;

&lt;p&gt;
哦，对了，还有 baneberry，是白色小浆果，也是有毒的。
&lt;/p&gt;

&lt;p&gt;
不过新帛利商贸（上海）有限公司推出的 BABEBERRY 牌的衣服看起来质感不错。可惜被 BURBERRY 投诉侵权了。
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>单词本：impinge</title>
   <link href="http://kimi.im/2024-05-17-impinge"/>
   <updated>2024-05-17T00:00:00+00:00</updated>
   <id>http://kimi.im/impinge</id>
   <content type="html">&lt;p&gt;
昨天在看以太网高级物理层技术的时候，看到这句话：
&lt;/p&gt;

&lt;p&gt;
Importantly, Ethernet-APL also affords coexistence of application
protocols in the same architecture, even over the same pair of
wires. This means that using HART-IP to communicate with process
instruments and control valves doesn&amp;rsquo;t &lt;b&gt;impinge&lt;/b&gt; on using an alternative
protocol for other application domains.
&lt;/p&gt;

&lt;p&gt;
这里说用 Ethernet-APL 打通工业现场层后，就可以在同一根网线上面运行各种不同的基于 IP 的协议，而互相不影响。
&lt;/p&gt;

&lt;p&gt;
词组impinge on/upon sth的意思是have an effect on sth,对某事物起作用或有影响。
&lt;/p&gt;

&lt;p&gt;
比如爱沙尼亚反对欧盟的数字经济增值税法案，认为影响中小企业的业务，用到了 impinge： the deemed supplier model would &lt;b&gt;impinge on&lt;/b&gt; the principles
of VAT neutrality for SME&amp;rsquo;s who work with platforms within the
aforementioned sectors.
&lt;/p&gt;

&lt;p&gt;
还有苏格兰克拉克曼南郡的一位居民的一个 9 米多高的树，影响了邻居的花园生活：&amp;ldquo;The trees &lt;b&gt;impinge on&lt;/b&gt; the owner&amp;rsquo;s enjoyment of their rear
garden.
&lt;/p&gt;

&lt;p&gt;
还有丹佛大都会州立学院的学生正在调研影响个体建康和福利的各种因素：
Students examine the diverse factors that &lt;b&gt;impinge on&lt;/b&gt; an individual&amp;rsquo;s
health and well-being.
&lt;/p&gt;

&lt;p&gt;
这是一个比较书面的用语。一般我们口语里不太用。
&lt;/p&gt;

&lt;p&gt;
拆开来看，impinge 是由 im 和 pinge 组成的。 im ，in，en 等都表示里面的意思，pinge 则来自拉丁语 pangere 意思是用力紧固、固定等意思。连在一起，就是用力固定到里面，往里用力固定。稍一转化，就是起作用、影响到的意思了。
&lt;/p&gt;

&lt;p&gt;
而 pangere 也有变化形式 pact ，pac等。这就引出了很多词汇：
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;compact 集中紧固，就是紧凑、坚实的意思了。比如
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;a compact mass of sand, 坚实的沙堆。&lt;/li&gt;
&lt;li&gt;Stamp the soil down so that it&amp;rsquo;s compact.&lt;/li&gt;
&lt;li&gt;a compact car, 紧凑型汽车&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;impact 这个和 impinge 有点类似，有撞击、冲击、压入等意思。比如：
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;The bomb exploded on impact. 炸弹在撞击时立即爆炸。&lt;/li&gt;
&lt;li&gt;He collapsed under the full impact of the blow. 他受重击而倒下。&lt;/li&gt;
&lt;li&gt;Her speech made a tremendous impact on everyone. 她的演讲（在精神上）对大家冲击很大。&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;pacific 平和的、和平的，其实是被压平了。太平洋 The pacific ocean.&lt;/li&gt;
&lt;li&gt;pacify 使某人息怒，压平火气。
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;He tried to pacify his creditors by repaying part of the money. 他为了安抚债权人偿还了部分借款。&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;page 也是从 pact 延伸过来的，一页纸，那是压平的纸浆呀。&lt;/li&gt;
&lt;/ul&gt;
</content>
 </entry>
 
 <entry>
   <title>Moon</title>
   <link href="http://kimi.im/2024-05-16-moon"/>
   <updated>2024-05-16T00:00:00+00:00</updated>
   <id>http://kimi.im/moon</id>
   <content type="html">&lt;p&gt;
我们管夜空明亮的圆盘叫月亮，英语里叫 moon ，德语叫 der Mond，法语叫 la
luna。奇怪的是，德语的月亮是阳性的，而法语的月亮是阴性的。一般来说，人们会觉得月亮是女生，而太阳是男生，比如罗马神话里，月神叫 Diana 狄安娜女神，而希腊神话叫 Artemis 阿尔忒弥斯女神。而罗马神话里太阳神叫 Apollo
阿波罗，希腊神话里叫 Phobos 福波斯，都是男神。所以，德语月亮是阳性的有点奇怪。不过，其实德语的阴性和阳性更多的是语法上的概念，所以并不是和实际东西的性别相符，且月亮实际上应该只能算中性的。
&lt;/p&gt;

&lt;p&gt;
难怪，马克·吐温说 &amp;ldquo;In German, a young lady has no sex, while a turnip
has.&amp;rdquo; 德语女孩子是中性的，而萝卜die Rü be 则是阴性的。
&lt;/p&gt;

&lt;p&gt;
其实，星期一，Monday is the week day named after god of the
moon. Since Tang dynasty, ancient Chinese also learned this from
western country. In《宿曜历经·七曜直日历品第八》, it said &amp;ldquo;夫七曜者，所谓日月五星，下直人间。一日一易，七日周而复始。故今列诸国人呼七曜如后：日曜太阳，胡名蜜，波斯名曜森勿，天竺名阿儞底耶。月曜太阴，胡名莫，波斯名娄祸森勿，天竺名苏上摩&amp;rdquo;. So 月曜日means Monday, it is called莫 or
Maq in Sogdiana language. Sogdiana is an ancient country called 索格狄亚那 or 康居国, now located in Uzbekistan(乌兹别克斯坦共和国). Maq 估计跟 Moon 是有些渊源的。
&lt;/p&gt;

&lt;p&gt;
Originally, the names of week days are from Roman gods&amp;rsquo; or goddesses&amp;rsquo;
names:
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;Monday, 星期一, Lunes, 月曜日, Lundi, 月神Luna, Montag,日耳曼月神
Mona, Luna, 月亮&lt;/li&gt;
&lt;li&gt;Tuesday, 星期二, Martes, 火曜日, Mardi, Dienstag, 北欧神话中的战神
Tiw/Tyr, Marte, 火星&lt;/li&gt;
&lt;li&gt;Wednesday, 星期三, Miércoles, mercredi, 日尔曼主神 Woden ，即大神奥丁（ Odin ）, 德语 Mittwoch 表示一周的中间，并没用上神的名字, 水曜日,
Mercurio, 水星&lt;/li&gt;
&lt;li&gt;Thursday, 星期四, Jueves, 木曜日, Jeudi, 日尔曼雷神索尔 Thor,
Jupiter,木星&lt;/li&gt;
&lt;li&gt;Friday, 星期五, Viernes, 金曜日, Vendredi, 英语「 Friday 」和德语「 Freitag 」则来自日尔曼神话中的大神奥丁的妻子、爱与美女神 Frigg,
Venus, 金星&lt;/li&gt;
&lt;li&gt;Saturday, 星期六, Sábado, 土曜日, 罗马主神朱庇特之父，农神 Saturn,
语Samedi,德语Samstag,源自希伯来语shabbat, Saturno,土星&lt;/li&gt;
&lt;li&gt;Sunday, 星期日, Domingo, 日曜日, dimanche, 太阳神是主神 Domingo 是上帝, Sonntag&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
Month in German is Monat, and in French is mois.
&lt;/p&gt;

&lt;p&gt;
The Grimm brothers analyzed the pronunciation of European languages
and they found some rules:
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;l, m, n, s, c are exchangeable&lt;/li&gt;
&lt;li&gt;oo, u are exchangeable&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
Then we can see, for &amp;ldquo;moon&amp;rdquo;, if we change m to l and oo to u, it
becomes lun, when we add -e, it is &amp;ldquo;lune&amp;rdquo;, which is moon in French.
&lt;/p&gt;

&lt;p&gt;
In English we have:
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;luna, God of moon, 月神露娜&lt;/li&gt;
&lt;li&gt;lune, 半月形&lt;/li&gt;
&lt;li&gt;lunette, 半月形，lunettes 眼镜&lt;/li&gt;
&lt;li&gt;lunar, adjective, of the moon, 月亮的，月球的，lunar rock 月岩，a
lunar eclipse 月食，lunar calendar 月历，阴历&lt;/li&gt;
&lt;li&gt;lunaria, 月经&lt;/li&gt;
&lt;li&gt;sublunary, 月下的；地上的；现世的. A marriage where not only esteem,
but passion is kept awake, is, I am convinced, the most perfect
state of sublunary happiness.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
Moon may cause some mind problem, so:
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;lunatic, 精神失常的&lt;/li&gt;
&lt;li&gt;lunatical&lt;/li&gt;
&lt;li&gt;lunacy&lt;/li&gt;
&lt;li&gt;moonhead&lt;/li&gt;
&lt;li&gt;mooncalf&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
If we change n to m, we get lum-
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;luminous, 发光的，易懂的，清楚的. luminous clothing 夜光服. The library was lit by the luminous glow of laptops.&lt;/li&gt;
&lt;li&gt;luminant, 发亮的，发光体&lt;/li&gt;
&lt;li&gt;luminare, luminary, 发光体，引申为知识渊博的人&lt;/li&gt;
&lt;li&gt;luminate, 发光&lt;/li&gt;
&lt;li&gt;luminarism, 印象主义画派的光色主义&lt;/li&gt;
&lt;li&gt;luminarist 光色主义画家&lt;/li&gt;
&lt;li&gt;luminance, 亮度&lt;/li&gt;
&lt;li&gt;lumination, 光照亮&lt;/li&gt;
&lt;li&gt;luminescence, 冷光. A variety of lighting elements are used, from
LED to chemical luminescence.&lt;/li&gt;
&lt;li&gt;luminesce, （物质）发冷光. Solids that luminesce are called phosphors.&lt;/li&gt;
&lt;li&gt;luculent透明的；明白的&lt;/li&gt;
&lt;li&gt;translucent 半透明&lt;/li&gt;
&lt;li&gt;lucubrate, (在灯下)刻苦钻研；苦思冥想；学究式地写作；详细论述&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
光照单位：
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;光通量 (Luminous Flux)：能够被人的视觉系统所感受到的那部分光辐射功率的大小，单位为 lm 。&lt;/li&gt;
&lt;li&gt;照度(luminance)：表面上一点的光照度是入射在包含该点的面元上的光通量 d φ除以该面元面积 dA 。&lt;/li&gt;
&lt;li&gt;光照强度（ illumination ）是指单位面积上所接受可见光的能量，简称照度，光学中一般用 E 表示，是用于表示光照的强弱和物体表面积被照明程度的量，单位为勒克斯（ Lux 或1x）&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
Extended from concrete light to abstract light, we get light in the mind:
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;illumine, 启发&lt;/li&gt;
&lt;li&gt;illumination, 照亮，阐明，启发&lt;/li&gt;
&lt;li&gt;allumette is the French word for “ matchstick ” as allume means to
“light up”.&lt;/li&gt;
&lt;li&gt;illustrate 阐明，插画&lt;/li&gt;
&lt;li&gt;illustrator 插画家&lt;/li&gt;
&lt;li&gt;illusion, 幻影，幻觉&lt;/li&gt;
&lt;li&gt;illusive, illusory, 幻觉的，错觉的，骗人的&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
???  
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;delusion, 欺骗&lt;/li&gt;
&lt;li&gt;delusive, 欺瞒的&lt;/li&gt;
&lt;li&gt;allusion, 映射，暗示，典故. Her novels are packed with literary
allusions. 她的小说充满了文学典故。&lt;/li&gt;
&lt;li&gt;allusive, 影射的，暗指的；间接提到的；引用典故的. Her music is
witty, ironic, and allusive. 她的音乐作品诙谐、讽刺，富含典故。&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;
Others
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;over the moon, 欣喜若狂,月亮之上,乐疯了. I am over the moon right
now . He is planning on coming in 4 weeks and said he would stay for
as long as I let him.&lt;/li&gt;
&lt;li&gt;Reach for the moon, if you miss, you will land among the stars. 把目标放在到达月亮，如果达不到目标，你至少还会登上星星。&lt;/li&gt;
&lt;li&gt;once in a blue moon. 难得；罕见；千载难逢. How can you let such a
golden opportunity to make big money slip through your fingers? It
was an opportunity that comes once in a blue moon. 这样一个发大财的机会千载难逢，你怎么能眼睁睁地让它溜掉呢。&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
There are many more words have relationship with moon!
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>边缘计算新标准 Margo</title>
   <link href="http://kimi.im/2024-05-16-margo"/>
   <updated>2024-05-16T00:00:00+00:00</updated>
   <id>http://kimi.im/margo</id>
   <content type="html">&lt;p&gt;
Linux 基金会近日联合 ABB ，B&amp;amp;R， Capgemini ，微软，罗克韦尔自动化，施耐德电气，以及西门子，发起了一个新的开放标准项目 Margo。目的是定义一套灵活、简单、易扩展的边缘接口标准。通过边缘编排软件，把边缘应用和边缘设备进行有效的管理起来。
&lt;/p&gt;

&lt;p&gt;
从项目成员来看，已经囊括了 IT 和 OT 的代表厂商了。IT 战队有 Linux 基金会、 Capgemini 、微软。OT 战队有 ABB、罗克韦尔、施耐德和西门子。可谓阵容强大。
&lt;/p&gt;

&lt;p&gt;
Margo 项目的输出有两部分，一部分是边缘互操作标准；另一部分是一个参考实现。为后续行业应用推广铺平道路。
&lt;/p&gt;

&lt;p&gt;
Margo 系统设计的整体架构可以概括为“ 2-2-3 ”，即两套仓库，两套编排服务和三种边缘节点。
&lt;/p&gt;

&lt;p&gt;
两套仓库分别存放
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;边缘计算应用相关的描述文件和程序镜像，&lt;/li&gt;
&lt;li&gt;设备的描述文件和设备升级程序。&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
两套编排服务
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;工作负载编排服务在不同设备部署应用&lt;/li&gt;
&lt;li&gt;设备编排服务用于发现设备、接入设备、更新设备&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
三种边缘节点
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;独立设备节点&lt;/li&gt;
&lt;li&gt;集群设备主节点&lt;/li&gt;
&lt;li&gt;集群设备工作节点&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
每个设备节点上面运行工作编排和设备编排代理。Margo 定义了这些代理和编排服务的标准接口。这样，对于不同设备厂商和编排服务提供商，双方遵循标准的应用描述文件格式，设备描述文件格式，以及编排接口，就能一起工作了。这就是所谓的“develop once, deploy many”开发一次，部署多次。
&lt;/p&gt;



&lt;div id=&quot;orgfc2dcd5&quot; class=&quot;figure&quot;&gt;
&lt;p&gt;&lt;div align=&quot;center&quot;&gt;&lt;svg host=&quot;65bd71144e&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; xmlns:xlink=&quot;http://www.w3.org/1999/xlink&quot; version=&quot;1.1&quot;  viewBox=&quot;-0.5 -0.5 1524 1014&quot; content=&quot;&amp;lt;mxfile&amp;gt;&amp;lt;diagram name=&amp;quot;Page-1&amp;quot; id=&amp;quot;LR4Trw0PSKodyMa7JcZJ&amp;quot;&amp;gt;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&amp;lt;/diagram&amp;gt;&amp;lt;/mxfile&amp;gt;&quot;&gt;
    &lt;defs/&gt;
    &lt;g&gt;
        &lt;rect x=&quot;471.66&quot; y=&quot;451&quot; width=&quot;1049&quot; height=&quot;274&quot; fill=&quot;none&quot; stroke=&quot;rgb(0, 0, 0)&quot; stroke-width=&quot;2&quot; stroke-dasharray=&quot;6 6&quot; pointer-events=&quot;all&quot;/&gt;
        &lt;rect x=&quot;478.78&quot; y=&quot;457.93&quot; width=&quot;665&quot; height=&quot;260.07&quot; fill=&quot;rgb(255, 255, 255)&quot; stroke=&quot;rgb(0, 0, 0)&quot; stroke-width=&quot;3&quot; pointer-events=&quot;all&quot;/&gt;
        &lt;g transform=&quot;translate(-0.5 -0.5)&quot;&gt;
            &lt;switch&gt;
                &lt;foreignObject pointer-events=&quot;none&quot; width=&quot;100%&quot; height=&quot;100%&quot; requiredFeatures=&quot;http://www.w3.org/TR/SVG11/feature#Extensibility&quot; style=&quot;overflow: visible; text-align: left;&quot;&gt;
                    &lt;div xmlns=&quot;http://www.w3.org/1999/xhtml&quot; style=&quot;display: flex; align-items: unsafe flex-end; justify-content: unsafe center; width: 663px; height: 1px; padding-top: 715px; margin-left: 480px;&quot;&gt;
                        &lt;div data-drawio-colors=&quot;color: rgb(0, 0, 0); &quot; style=&quot;box-sizing: border-box; font-size: 0px; text-align: center;&quot;&gt;
                            &lt;div style=&quot;display: inline-block; font-size: 20px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; font-weight: bold; white-space: normal; overflow-wrap: normal;&quot;&gt;
                                Standalone Cluster(Leader and/or Worker)
                            &lt;/div&gt;
                        &lt;/div&gt;
                    &lt;/div&gt;
                &lt;/foreignObject&gt;
                &lt;text x=&quot;811&quot; y=&quot;715&quot; fill=&quot;rgb(0, 0, 0)&quot; font-family=&quot;Helvetica&quot; font-size=&quot;20px&quot; text-anchor=&quot;middle&quot; font-weight=&quot;bold&quot;&gt;
                    Standalone Cluster(Leader and/or Worker)
                &lt;/text&gt;
            &lt;/switch&gt;
        &lt;/g&gt;
        &lt;rect x=&quot;499.66&quot; y=&quot;1&quot; width=&quot;355.5&quot; height=&quot;131&quot; fill=&quot;#e1d5e7&quot; stroke=&quot;#9673a6&quot; stroke-width=&quot;3&quot; pointer-events=&quot;all&quot;/&gt;
        &lt;g transform=&quot;translate(-0.5 -0.5)&quot;&gt;
            &lt;switch&gt;
                &lt;foreignObject pointer-events=&quot;none&quot; width=&quot;100%&quot; height=&quot;100%&quot; requiredFeatures=&quot;http://www.w3.org/TR/SVG11/feature#Extensibility&quot; style=&quot;overflow: visible; text-align: left;&quot;&gt;
                    &lt;div xmlns=&quot;http://www.w3.org/1999/xhtml&quot; style=&quot;display: flex; align-items: unsafe flex-start; justify-content: unsafe center; width: 354px; height: 1px; padding-top: 8px; margin-left: 501px;&quot;&gt;
                        &lt;div data-drawio-colors=&quot;color: rgb(0, 0, 0); &quot; style=&quot;box-sizing: border-box; font-size: 0px; text-align: center;&quot;&gt;
                            &lt;div style=&quot;display: inline-block; font-size: 15px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; font-weight: bold; white-space: normal; overflow-wrap: normal;&quot;&gt;
                                Application Registry &amp;amp; Repository
                            &lt;/div&gt;
                        &lt;/div&gt;
                    &lt;/div&gt;
                &lt;/foreignObject&gt;
                &lt;text x=&quot;677&quot; y=&quot;23&quot; fill=&quot;rgb(0, 0, 0)&quot; font-family=&quot;Helvetica&quot; font-size=&quot;15px&quot; text-anchor=&quot;middle&quot; font-weight=&quot;bold&quot;&gt;
                    Application Registry &amp;amp; Repository
                &lt;/text&gt;
            &lt;/switch&gt;
        &lt;/g&gt;
        &lt;path d=&quot;M 764.65 167.74 L 764.64 178.09 L 612.82 178.09 L 612.87 189.58&quot; fill=&quot;none&quot; stroke=&quot;#001dbc&quot; stroke-width=&quot;2&quot; stroke-miterlimit=&quot;10&quot; pointer-events=&quot;stroke&quot;/&gt;
        &lt;path d=&quot;M 764.66 161.74 L 768.65 169.74 L 764.65 167.74 L 760.65 169.73 Z&quot; fill=&quot;#001dbc&quot; stroke=&quot;#001dbc&quot; stroke-width=&quot;2&quot; stroke-miterlimit=&quot;10&quot; pointer-events=&quot;all&quot;/&gt;
        &lt;path d=&quot;M 612.9 195.58 L 608.86 187.6 L 612.87 189.58 L 616.86 187.57 Z&quot; fill=&quot;#001dbc&quot; stroke=&quot;#001dbc&quot; stroke-width=&quot;2&quot; stroke-miterlimit=&quot;10&quot; pointer-events=&quot;all&quot;/&gt;
        &lt;path d=&quot;M 737.16 132 C 737.16 147.19 749.47 159.5 764.66 159.5 C 779.85 159.5 792.16 147.19 792.16 132 Z&quot; fill=&quot;#0050ef&quot; stroke=&quot;#001dbc&quot; stroke-miterlimit=&quot;10&quot; pointer-events=&quot;all&quot;/&gt;
        &lt;rect x=&quot;478.78&quot; y=&quot;226.32&quot; width=&quot;270&quot; height=&quot;100&quot; fill=&quot;#fff2cc&quot; stroke=&quot;#d6b656&quot; stroke-width=&quot;3&quot; pointer-events=&quot;all&quot;/&gt;
        &lt;g transform=&quot;translate(-0.5 -0.5)&quot;&gt;
            &lt;switch&gt;
                &lt;foreignObject pointer-events=&quot;none&quot; width=&quot;100%&quot; height=&quot;100%&quot; requiredFeatures=&quot;http://www.w3.org/TR/SVG11/feature#Extensibility&quot; style=&quot;overflow: visible; text-align: left;&quot;&gt;
                    &lt;div xmlns=&quot;http://www.w3.org/1999/xhtml&quot; style=&quot;display: flex; align-items: unsafe center; justify-content: unsafe center; width: 258px; height: 1px; padding-top: 276px; margin-left: 485px;&quot;&gt;
                        &lt;div data-drawio-colors=&quot;color: rgb(0, 0, 0); &quot; style=&quot;box-sizing: border-box; font-size: 0px; text-align: center;&quot;&gt;
                            &lt;div style=&quot;display: inline-block; font-size: 17px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; font-weight: bold; white-space: normal; overflow-wrap: normal;&quot;&gt;
                                WORKLOAD ORCHESTRATION SERVICE
                            &lt;/div&gt;
                        &lt;/div&gt;
                    &lt;/div&gt;
                &lt;/foreignObject&gt;
                &lt;text x=&quot;614&quot; y=&quot;281&quot; fill=&quot;rgb(0, 0, 0)&quot; font-family=&quot;Helvetica&quot; font-size=&quot;17px&quot; text-anchor=&quot;middle&quot; font-weight=&quot;bold&quot;&gt;
                    WORKLOAD ORCHESTRATION SERVICE
                &lt;/text&gt;
            &lt;/switch&gt;
        &lt;/g&gt;
        &lt;path d=&quot;M 585.41 197.82 C 585.41 213.01 597.72 225.32 612.91 225.32 C 628.1 225.32 640.41 213.01 640.41 197.82 Z&quot; fill=&quot;#0050ef&quot; stroke=&quot;#001dbc&quot; stroke-miterlimit=&quot;10&quot; transform=&quot;rotate(-180,612.91,211.57)&quot; pointer-events=&quot;all&quot;/&gt;
        &lt;rect x=&quot;767.12&quot; y=&quot;225.61&quot; width=&quot;270&quot; height=&quot;100&quot; fill=&quot;#fff2cc&quot; stroke=&quot;#d6b656&quot; stroke-width=&quot;3&quot; pointer-events=&quot;all&quot;/&gt;
        &lt;g transform=&quot;translate(-0.5 -0.5)&quot;&gt;
            &lt;switch&gt;
                &lt;foreignObject pointer-events=&quot;none&quot; width=&quot;100%&quot; height=&quot;100%&quot; requiredFeatures=&quot;http://www.w3.org/TR/SVG11/feature#Extensibility&quot; style=&quot;overflow: visible; text-align: left;&quot;&gt;
                    &lt;div xmlns=&quot;http://www.w3.org/1999/xhtml&quot; style=&quot;display: flex; align-items: unsafe center; justify-content: unsafe center; width: 258px; height: 1px; padding-top: 276px; margin-left: 773px;&quot;&gt;
                        &lt;div data-drawio-colors=&quot;color: rgb(0, 0, 0); &quot; style=&quot;box-sizing: border-box; font-size: 0px; text-align: center;&quot;&gt;
                            &lt;div style=&quot;display: inline-block; font-size: 17px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; font-weight: bold; white-space: normal; overflow-wrap: normal;&quot;&gt;
                                DEVICE ORCHESTRATION SERVICE
                            &lt;/div&gt;
                        &lt;/div&gt;
                    &lt;/div&gt;
                &lt;/foreignObject&gt;
                &lt;text x=&quot;902&quot; y=&quot;281&quot; fill=&quot;rgb(0, 0, 0)&quot; font-family=&quot;Helvetica&quot; font-size=&quot;17px&quot; text-anchor=&quot;middle&quot; font-weight=&quot;bold&quot;&gt;
                    DEVICE ORCHESTRATION SERVICE
                &lt;/text&gt;
            &lt;/switch&gt;
        &lt;/g&gt;
        &lt;path d=&quot;M 901.99 353.11 L 902.09 377 L 832.27 377 L 832.29 421.69&quot; fill=&quot;none&quot; stroke=&quot;#001dbc&quot; stroke-width=&quot;2&quot; stroke-miterlimit=&quot;10&quot; pointer-events=&quot;stroke&quot;/&gt;
        &lt;path d=&quot;M 832.29 427.69 L 828.29 419.7 L 832.29 421.69 L 836.29 419.69 Z&quot; fill=&quot;#001dbc&quot; stroke=&quot;#001dbc&quot; stroke-width=&quot;2&quot; stroke-miterlimit=&quot;10&quot; pointer-events=&quot;all&quot;/&gt;
        &lt;path d=&quot;M 874.49 325.61 C 874.49 340.8 886.8 353.11 901.99 353.11 C 917.18 353.11 929.49 340.8 929.49 325.61 Z&quot; fill=&quot;#0050ef&quot; stroke=&quot;#001dbc&quot; stroke-miterlimit=&quot;10&quot; pointer-events=&quot;all&quot;/&gt;
        &lt;path d=&quot;M 509 60.5 L 509 37.5 L 730 37.5 L 730 60.5&quot; fill=&quot;#e1d5e7&quot; stroke=&quot;#9673a6&quot; stroke-miterlimit=&quot;10&quot; pointer-events=&quot;all&quot;/&gt;
        &lt;path d=&quot;M 509 60.5 L 509 117.5 L 730 117.5 L 730 60.5&quot; fill=&quot;none&quot; stroke=&quot;#9673a6&quot; stroke-miterlimit=&quot;10&quot; pointer-events=&quot;none&quot;/&gt;
        &lt;path d=&quot;M 509 60.5 L 730 60.5&quot; fill=&quot;none&quot; stroke=&quot;#9673a6&quot; stroke-miterlimit=&quot;10&quot; pointer-events=&quot;none&quot;/&gt;
        &lt;g transform=&quot;translate(-0.5 -0.5)&quot;&gt;
            &lt;switch&gt;
                &lt;foreignObject pointer-events=&quot;none&quot; width=&quot;100%&quot; height=&quot;100%&quot; requiredFeatures=&quot;http://www.w3.org/TR/SVG11/feature#Extensibility&quot; style=&quot;overflow: visible; text-align: left;&quot;&gt;
                    &lt;div xmlns=&quot;http://www.w3.org/1999/xhtml&quot; style=&quot;display: flex; align-items: unsafe center; justify-content: unsafe center; width: 219px; height: 1px; padding-top: 49px; margin-left: 510px;&quot;&gt;
                        &lt;div data-drawio-colors=&quot;color: rgb(0, 0, 0); &quot; style=&quot;box-sizing: border-box; font-size: 0px; text-align: center;&quot;&gt;
                            &lt;div style=&quot;display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: none; white-space: normal; overflow-wrap: normal;&quot;&gt;
                                Application Package
                            &lt;/div&gt;
                        &lt;/div&gt;
                    &lt;/div&gt;
                &lt;/foreignObject&gt;
                &lt;text x=&quot;620&quot; y=&quot;53&quot; fill=&quot;rgb(0, 0, 0)&quot; font-family=&quot;Helvetica&quot; font-size=&quot;12px&quot; text-anchor=&quot;middle&quot;&gt;
                    Application Package
                &lt;/text&gt;
            &lt;/switch&gt;
        &lt;/g&gt;
        &lt;path d=&quot;M 623.75 67.5 L 709.75 67.5 L 723.75 81.5 L 723.75 112.5 L 623.75 112.5 L 623.75 67.5 Z&quot; fill=&quot;#dae8fc&quot; stroke=&quot;#6c8ebf&quot; stroke-width=&quot;3&quot; stroke-miterlimit=&quot;10&quot; pointer-events=&quot;none&quot;/&gt;
        &lt;path d=&quot;M 709.75 67.5 L 709.75 81.5 L 723.75 81.5 Z&quot; fill-opacity=&quot;0.05&quot; fill=&quot;#000000&quot; stroke=&quot;none&quot; pointer-events=&quot;none&quot;/&gt;
        &lt;path d=&quot;M 709.75 67.5 L 709.75 81.5 L 723.75 81.5&quot; fill=&quot;none&quot; stroke=&quot;#6c8ebf&quot; stroke-width=&quot;3&quot; stroke-miterlimit=&quot;10&quot; pointer-events=&quot;none&quot;/&gt;
        &lt;g transform=&quot;translate(-0.5 -0.5)&quot;&gt;
            &lt;switch&gt;
                &lt;foreignObject pointer-events=&quot;none&quot; width=&quot;100%&quot; height=&quot;100%&quot; requiredFeatures=&quot;http://www.w3.org/TR/SVG11/feature#Extensibility&quot; style=&quot;overflow: visible; text-align: left;&quot;&gt;
                    &lt;div xmlns=&quot;http://www.w3.org/1999/xhtml&quot; style=&quot;display: flex; align-items: unsafe center; justify-content: unsafe center; width: 98px; height: 1px; padding-top: 90px; margin-left: 625px;&quot;&gt;
                        &lt;div data-drawio-colors=&quot;color: #004C99; &quot; style=&quot;box-sizing: border-box; font-size: 0px; text-align: center;&quot;&gt;
                            &lt;div style=&quot;display: inline-block; font-size: 13px; font-family: Helvetica; color: rgb(0, 76, 153); line-height: 1.2; pointer-events: none; font-weight: bold; white-space: normal; overflow-wrap: normal;&quot;&gt;
                                Application Manifest
                            &lt;/div&gt;
                        &lt;/div&gt;
                    &lt;/div&gt;
                &lt;/foreignObject&gt;
                &lt;text x=&quot;674&quot; y=&quot;94&quot; fill=&quot;#004C99&quot; font-family=&quot;Helvetica&quot; font-size=&quot;13px&quot; text-anchor=&quot;middle&quot; font-weight=&quot;bold&quot;&gt;
                    Application Man...
                &lt;/text&gt;
            &lt;/switch&gt;
        &lt;/g&gt;
        &lt;path d=&quot;M 517 67.5 L 602 67.5 L 617 82.5 L 617 112.5 L 517 112.5 L 517 67.5 Z&quot; fill=&quot;#dae8fc&quot; stroke=&quot;#6c8ebf&quot; stroke-width=&quot;3&quot; stroke-miterlimit=&quot;10&quot; pointer-events=&quot;none&quot;/&gt;
        &lt;path d=&quot;M 602 67.5 L 602 82.5 L 617 82.5 Z&quot; fill-opacity=&quot;0.05&quot; fill=&quot;#000000&quot; stroke=&quot;none&quot; pointer-events=&quot;none&quot;/&gt;
        &lt;path d=&quot;M 602 67.5 L 602 82.5 L 617 82.5&quot; fill=&quot;none&quot; stroke=&quot;#6c8ebf&quot; stroke-width=&quot;3&quot; stroke-miterlimit=&quot;10&quot; pointer-events=&quot;none&quot;/&gt;
        &lt;g transform=&quot;translate(-0.5 -0.5)&quot;&gt;
            &lt;switch&gt;
                &lt;foreignObject pointer-events=&quot;none&quot; width=&quot;100%&quot; height=&quot;100%&quot; requiredFeatures=&quot;http://www.w3.org/TR/SVG11/feature#Extensibility&quot; style=&quot;overflow: visible; text-align: left;&quot;&gt;
                    &lt;div xmlns=&quot;http://www.w3.org/1999/xhtml&quot; style=&quot;display: flex; align-items: unsafe center; justify-content: unsafe center; width: 98px; height: 1px; padding-top: 90px; margin-left: 518px;&quot;&gt;
                        &lt;div data-drawio-colors=&quot;color: #004C99; &quot; style=&quot;box-sizing: border-box; font-size: 0px; text-align: center;&quot;&gt;
                            &lt;div style=&quot;display: inline-block; font-size: 13px; font-family: Helvetica; color: rgb(0, 76, 153); line-height: 1.2; pointer-events: none; font-weight: bold; white-space: normal; overflow-wrap: normal;&quot;&gt;
                                Application Artifacts
                            &lt;/div&gt;
                        &lt;/div&gt;
                    &lt;/div&gt;
                &lt;/foreignObject&gt;
                &lt;text x=&quot;567&quot; y=&quot;94&quot; fill=&quot;#004C99&quot; font-family=&quot;Helvetica&quot; font-size=&quot;13px&quot; text-anchor=&quot;middle&quot; font-weight=&quot;bold&quot;&gt;
                    Application Art...
                &lt;/text&gt;
            &lt;/switch&gt;
        &lt;/g&gt;
        &lt;rect x=&quot;514&quot; y=&quot;591.62&quot; width=&quot;410.25&quot; height=&quot;30&quot; fill=&quot;#d5e8d4&quot; stroke=&quot;#82b366&quot; stroke-width=&quot;3&quot; pointer-events=&quot;none&quot;/&gt;
        &lt;g transform=&quot;translate(-0.5 -0.5)&quot;&gt;
            &lt;switch&gt;
                &lt;foreignObject pointer-events=&quot;none&quot; width=&quot;100%&quot; height=&quot;100%&quot; requiredFeatures=&quot;http://www.w3.org/TR/SVG11/feature#Extensibility&quot; style=&quot;overflow: visible; text-align: left;&quot;&gt;
                    &lt;div xmlns=&quot;http://www.w3.org/1999/xhtml&quot; style=&quot;display: flex; align-items: unsafe center; justify-content: unsafe center; width: 408px; height: 1px; padding-top: 607px; margin-left: 515px;&quot;&gt;
                        &lt;div data-drawio-colors=&quot;color: rgb(0, 0, 0); &quot; style=&quot;box-sizing: border-box; font-size: 0px; text-align: center;&quot;&gt;
                            &lt;div style=&quot;display: inline-block; font-size: 13px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: none; font-weight: bold; white-space: normal; overflow-wrap: normal;&quot;&gt;
                                KUBERNETES
                            &lt;/div&gt;
                        &lt;/div&gt;
                    &lt;/div&gt;
                &lt;/foreignObject&gt;
                &lt;text x=&quot;719&quot; y=&quot;611&quot; fill=&quot;rgb(0, 0, 0)&quot; font-family=&quot;Helvetica&quot; font-size=&quot;13px&quot; text-anchor=&quot;middle&quot; font-weight=&quot;bold&quot;&gt;
                    KUBERNETES
                &lt;/text&gt;
            &lt;/switch&gt;
        &lt;/g&gt;
        &lt;rect x=&quot;1053.74&quot; y=&quot;225.61&quot; width=&quot;270&quot; height=&quot;100&quot; fill=&quot;#f5f5f5&quot; stroke=&quot;#666666&quot; stroke-width=&quot;3&quot; pointer-events=&quot;none&quot;/&gt;
        &lt;g transform=&quot;translate(-0.5 -0.5)&quot;&gt;
            &lt;switch&gt;
                &lt;foreignObject pointer-events=&quot;none&quot; width=&quot;100%&quot; height=&quot;100%&quot; requiredFeatures=&quot;http://www.w3.org/TR/SVG11/feature#Extensibility&quot; style=&quot;overflow: visible; text-align: left;&quot;&gt;
                    &lt;div xmlns=&quot;http://www.w3.org/1999/xhtml&quot; style=&quot;display: flex; align-items: unsafe center; justify-content: unsafe center; width: 258px; height: 1px; padding-top: 276px; margin-left: 1060px;&quot;&gt;
                        &lt;div data-drawio-colors=&quot;color: #333333; &quot; style=&quot;box-sizing: border-box; font-size: 0px; text-align: center;&quot;&gt;
                            &lt;div style=&quot;display: inline-block; font-size: 17px; font-family: Helvetica; color: rgb(51, 51, 51); line-height: 1.2; pointer-events: none; font-weight: bold; white-space: normal; overflow-wrap: normal;&quot;&gt;
                                OBSERVABILITY PLATFORM
                            &lt;/div&gt;
                        &lt;/div&gt;
                    &lt;/div&gt;
                &lt;/foreignObject&gt;
                &lt;text x=&quot;1189&quot; y=&quot;281&quot; fill=&quot;#333333&quot; font-family=&quot;Helvetica&quot; font-size=&quot;17px&quot; text-anchor=&quot;middle&quot; font-weight=&quot;bold&quot;&gt;
                    OBSERVABILITY PLATFORM
                &lt;/text&gt;
            &lt;/switch&gt;
        &lt;/g&gt;
        &lt;path d=&quot;M 1188.72 361.35 L 1188.64 391.73 L 1054.64 391.73 L 1054.65 430.43&quot; fill=&quot;none&quot; stroke=&quot;#666666&quot; stroke-width=&quot;2&quot; stroke-miterlimit=&quot;10&quot; pointer-events=&quot;none&quot;/&gt;
        &lt;path d=&quot;M 1188.73 355.35 L 1192.71 363.36 L 1188.72 361.35 L 1184.71 363.34 Z&quot; fill=&quot;#666666&quot; stroke=&quot;#666666&quot; stroke-width=&quot;2&quot; stroke-miterlimit=&quot;10&quot; pointer-events=&quot;none&quot;/&gt;
        &lt;path d=&quot;M 1161.24 325.61 C 1161.24 340.8 1173.55 353.11 1188.74 353.11 C 1203.93 353.11 1216.24 340.8 1216.24 325.61 Z&quot; fill=&quot;#f5f5f5&quot; stroke=&quot;#666666&quot; stroke-width=&quot;3&quot; stroke-miterlimit=&quot;10&quot; pointer-events=&quot;none&quot;/&gt;
        &lt;rect x=&quot;1159.66&quot; y=&quot;458.43&quot; width=&quot;354&quot; height=&quot;166.57&quot; fill=&quot;rgb(255, 255, 255)&quot; stroke=&quot;rgb(0, 0, 0)&quot; stroke-width=&quot;3&quot; pointer-events=&quot;none&quot;/&gt;
        &lt;g transform=&quot;translate(-0.5 -0.5)&quot;&gt;
            &lt;switch&gt;
                &lt;foreignObject pointer-events=&quot;none&quot; width=&quot;100%&quot; height=&quot;100%&quot; requiredFeatures=&quot;http://www.w3.org/TR/SVG11/feature#Extensibility&quot; style=&quot;overflow: visible; text-align: left;&quot;&gt;
                    &lt;div xmlns=&quot;http://www.w3.org/1999/xhtml&quot; style=&quot;display: flex; align-items: unsafe flex-end; justify-content: unsafe center; width: 352px; height: 1px; padding-top: 622px; margin-left: 1161px;&quot;&gt;
                        &lt;div data-drawio-colors=&quot;color: rgb(0, 0, 0); &quot; style=&quot;box-sizing: border-box; font-size: 0px; text-align: center;&quot;&gt;
                            &lt;div style=&quot;display: inline-block; font-size: 20px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: none; font-weight: bold; white-space: normal; overflow-wrap: normal;&quot;&gt;
                                Cluster Worker
                            &lt;/div&gt;
                        &lt;/div&gt;
                    &lt;/div&gt;
                &lt;/foreignObject&gt;
                &lt;text x=&quot;1337&quot; y=&quot;622&quot; fill=&quot;rgb(0, 0, 0)&quot; font-family=&quot;Helvetica&quot; font-size=&quot;20px&quot; text-anchor=&quot;middle&quot; font-weight=&quot;bold&quot;&gt;
                    Cluster Worker
                &lt;/text&gt;
            &lt;/switch&gt;
        &lt;/g&gt;
        &lt;rect x=&quot;1176&quot; y=&quot;482.58&quot; width=&quot;64&quot; height=&quot;58.84&quot; fill=&quot;#d5e8d4&quot; stroke=&quot;#82b366&quot; stroke-width=&quot;3&quot; pointer-events=&quot;none&quot;/&gt;
        &lt;g transform=&quot;translate(-0.5 -0.5)&quot;&gt;
            &lt;switch&gt;
                &lt;foreignObject pointer-events=&quot;none&quot; width=&quot;100%&quot; height=&quot;100%&quot; requiredFeatures=&quot;http://www.w3.org/TR/SVG11/feature#Extensibility&quot; style=&quot;overflow: visible; text-align: left;&quot;&gt;
                    &lt;div xmlns=&quot;http://www.w3.org/1999/xhtml&quot; style=&quot;display: flex; align-items: unsafe center; justify-content: unsafe center; width: 62px; height: 1px; padding-top: 512px; margin-left: 1177px;&quot;&gt;
                        &lt;div data-drawio-colors=&quot;color: rgb(0, 0, 0); &quot; style=&quot;box-sizing: border-box; font-size: 0px; text-align: center;&quot;&gt;
                            &lt;div style=&quot;display: inline-block; font-size: 13px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: none; font-weight: bold; white-space: normal; overflow-wrap: normal;&quot;&gt;
                                Kublet
                            &lt;/div&gt;
                        &lt;/div&gt;
                    &lt;/div&gt;
                &lt;/foreignObject&gt;
                &lt;text x=&quot;1208&quot; y=&quot;516&quot; fill=&quot;rgb(0, 0, 0)&quot; font-family=&quot;Helvetica&quot; font-size=&quot;13px&quot; text-anchor=&quot;middle&quot; font-weight=&quot;bold&quot;&gt;
                    Kublet
                &lt;/text&gt;
            &lt;/switch&gt;
        &lt;/g&gt;
        &lt;path d=&quot;M 603.39 564.99 L 603.36 576.82 L 660.82 576.82 L 660.82 556.09 L 718.45 556.09 L 718.43 567.76&quot; fill=&quot;none&quot; stroke=&quot;#999999&quot; stroke-width=&quot;2&quot; stroke-miterlimit=&quot;10&quot; pointer-events=&quot;none&quot;/&gt;
        &lt;path d=&quot;M 603.4 558.99 L 607.39 567 L 603.39 564.99 L 599.39 566.98 Z&quot; fill=&quot;#999999&quot; stroke=&quot;#999999&quot; stroke-width=&quot;2&quot; stroke-miterlimit=&quot;10&quot; pointer-events=&quot;none&quot;/&gt;
        &lt;path d=&quot;M 718.42 573.76 L 714.43 565.76 L 718.43 567.76 L 722.43 565.77 Z&quot; fill=&quot;#999999&quot; stroke=&quot;#999999&quot; stroke-width=&quot;2&quot; stroke-miterlimit=&quot;10&quot; pointer-events=&quot;none&quot;/&gt;
        &lt;path d=&quot;M 705.91 576 C 705.91 584.7 711.51 591.75 718.41 591.75 C 725.31 591.75 730.91 584.7 730.91 576 Z&quot; fill=&quot;#f5f5f5&quot; stroke=&quot;#666666&quot; stroke-miterlimit=&quot;10&quot; transform=&quot;rotate(-180,718.41,583.88)&quot; pointer-events=&quot;none&quot;/&gt;
        &lt;rect x=&quot;478.78&quot; y=&quot;768&quot; width=&quot;665&quot; height=&quot;244&quot; fill=&quot;rgb(255, 255, 255)&quot; stroke=&quot;rgb(0, 0, 0)&quot; stroke-width=&quot;3&quot; pointer-events=&quot;none&quot;/&gt;
        &lt;g transform=&quot;translate(-0.5 -0.5)&quot;&gt;
            &lt;switch&gt;
                &lt;foreignObject pointer-events=&quot;none&quot; width=&quot;100%&quot; height=&quot;100%&quot; requiredFeatures=&quot;http://www.w3.org/TR/SVG11/feature#Extensibility&quot; style=&quot;overflow: visible; text-align: left;&quot;&gt;
                    &lt;div xmlns=&quot;http://www.w3.org/1999/xhtml&quot; style=&quot;display: flex; align-items: unsafe flex-end; justify-content: unsafe center; width: 663px; height: 1px; padding-top: 1009px; margin-left: 480px;&quot;&gt;
                        &lt;div data-drawio-colors=&quot;color: rgb(0, 0, 0); &quot; style=&quot;box-sizing: border-box; font-size: 0px; text-align: center;&quot;&gt;
                            &lt;div style=&quot;display: inline-block; font-size: 20px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: none; font-weight: bold; white-space: normal; overflow-wrap: normal;&quot;&gt;
                                Standalone Device
                            &lt;/div&gt;
                        &lt;/div&gt;
                    &lt;/div&gt;
                &lt;/foreignObject&gt;
                &lt;text x=&quot;811&quot; y=&quot;1009&quot; fill=&quot;rgb(0, 0, 0)&quot; font-family=&quot;Helvetica&quot; font-size=&quot;20px&quot; text-anchor=&quot;middle&quot; font-weight=&quot;bold&quot;&gt;
                    Standalone Device
                &lt;/text&gt;
            &lt;/switch&gt;
        &lt;/g&gt;
        &lt;rect x=&quot;980.78&quot; y=&quot;785.57&quot; width=&quot;140&quot; height=&quot;52&quot; fill=&quot;#d5e8d4&quot; stroke=&quot;#82b366&quot; stroke-width=&quot;3&quot; pointer-events=&quot;none&quot;/&gt;
        &lt;g transform=&quot;translate(-0.5 -0.5)&quot;&gt;
            &lt;switch&gt;
                &lt;foreignObject pointer-events=&quot;none&quot; width=&quot;100%&quot; height=&quot;100%&quot; requiredFeatures=&quot;http://www.w3.org/TR/SVG11/feature#Extensibility&quot; style=&quot;overflow: visible; text-align: left;&quot;&gt;
                    &lt;div xmlns=&quot;http://www.w3.org/1999/xhtml&quot; style=&quot;display: flex; align-items: unsafe center; justify-content: unsafe center; width: 138px; height: 1px; padding-top: 812px; margin-left: 982px;&quot;&gt;
                        &lt;div data-drawio-colors=&quot;color: rgb(0, 0, 0); &quot; style=&quot;box-sizing: border-box; font-size: 0px; text-align: center;&quot;&gt;
                            &lt;div style=&quot;display: inline-block; font-size: 13px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: none; font-weight: bold; white-space: normal; overflow-wrap: normal;&quot;&gt;
                                OTEL Collector
                            &lt;/div&gt;
                        &lt;/div&gt;
                    &lt;/div&gt;
                &lt;/foreignObject&gt;
                &lt;text x=&quot;1051&quot; y=&quot;815&quot; fill=&quot;rgb(0, 0, 0)&quot; font-family=&quot;Helvetica&quot; font-size=&quot;13px&quot; text-anchor=&quot;middle&quot; font-weight=&quot;bold&quot;&gt;
                    OTEL Collector
                &lt;/text&gt;
            &lt;/switch&gt;
        &lt;/g&gt;
        &lt;path d=&quot;M 1023.28 740.5 C 1023.28 755.69 1035.59 768 1050.78 768 C 1065.97 768 1078.28 755.69 1078.28 740.5 Z&quot; fill=&quot;#f5f5f5&quot; stroke=&quot;#666666&quot; stroke-width=&quot;3&quot; stroke-miterlimit=&quot;10&quot; transform=&quot;rotate(-180,1050.78,754.25)&quot; pointer-events=&quot;none&quot;/&gt;
        &lt;rect x=&quot;510.78&quot; y=&quot;785.57&quot; width=&quot;175&quot; height=&quot;65&quot; fill=&quot;#d5e8d4&quot; stroke=&quot;#82b366&quot; stroke-width=&quot;3&quot; pointer-events=&quot;none&quot;/&gt;
        &lt;g transform=&quot;translate(-0.5 -0.5)&quot;&gt;
            &lt;switch&gt;
                &lt;foreignObject pointer-events=&quot;none&quot; width=&quot;100%&quot; height=&quot;100%&quot; requiredFeatures=&quot;http://www.w3.org/TR/SVG11/feature#Extensibility&quot; style=&quot;overflow: visible; text-align: left;&quot;&gt;
                    &lt;div xmlns=&quot;http://www.w3.org/1999/xhtml&quot; style=&quot;display: flex; align-items: unsafe flex-start; justify-content: unsafe center; width: 173px; height: 1px; padding-top: 793px; margin-left: 512px;&quot;&gt;
                        &lt;div data-drawio-colors=&quot;color: rgb(0, 0, 0); &quot; style=&quot;box-sizing: border-box; font-size: 0px; text-align: center;&quot;&gt;
                            &lt;div style=&quot;display: inline-block; font-size: 13px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: none; font-weight: bold; white-space: normal; overflow-wrap: normal;&quot;&gt;
                                WORKLOAD
                                &lt;br/&gt;
                                ORCHESTRATION AGENT
                            &lt;/div&gt;
                        &lt;/div&gt;
                    &lt;/div&gt;
                &lt;/foreignObject&gt;
                &lt;text x=&quot;598&quot; y=&quot;806&quot; fill=&quot;rgb(0, 0, 0)&quot; font-family=&quot;Helvetica&quot; font-size=&quot;13px&quot; text-anchor=&quot;middle&quot; font-weight=&quot;bold&quot;&gt;
                    WORKLOAD...
                &lt;/text&gt;
            &lt;/switch&gt;
        &lt;/g&gt;
        &lt;path d=&quot;M 570.78 740 C 570.78 755.19 583.09 767.5 598.28 767.5 C 613.47 767.5 625.78 755.19 625.78 740 Z&quot; fill=&quot;#0050ef&quot; stroke=&quot;#001dbc&quot; stroke-miterlimit=&quot;10&quot; transform=&quot;rotate(-180,598.28,753.75)&quot; pointer-events=&quot;none&quot;/&gt;
        &lt;path d=&quot;M 1195.5 541.1 C 1195.5 549.8 1201.1 556.85 1208 556.85 C 1214.9 556.85 1220.5 549.8 1220.5 541.1 Z&quot; fill=&quot;#f5f5f5&quot; stroke=&quot;#666666&quot; stroke-miterlimit=&quot;10&quot; pointer-events=&quot;none&quot;/&gt;
        &lt;rect x=&quot;984.66&quot; y=&quot;538.93&quot; width=&quot;139&quot; height=&quot;47.5&quot; fill=&quot;#d5e8d4&quot; stroke=&quot;#82b366&quot; stroke-width=&quot;3&quot; pointer-events=&quot;none&quot;/&gt;
        &lt;g transform=&quot;translate(-0.5 -0.5)&quot;&gt;
            &lt;switch&gt;
                &lt;foreignObject pointer-events=&quot;none&quot; width=&quot;100%&quot; height=&quot;100%&quot; requiredFeatures=&quot;http://www.w3.org/TR/SVG11/feature#Extensibility&quot; style=&quot;overflow: visible; text-align: left;&quot;&gt;
                    &lt;div xmlns=&quot;http://www.w3.org/1999/xhtml&quot; style=&quot;display: flex; align-items: unsafe center; justify-content: unsafe center; width: 137px; height: 1px; padding-top: 563px; margin-left: 986px;&quot;&gt;
                        &lt;div data-drawio-colors=&quot;color: rgb(0, 0, 0); &quot; style=&quot;box-sizing: border-box; font-size: 0px; text-align: center;&quot;&gt;
                            &lt;div style=&quot;display: inline-block; font-size: 13px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: none; font-weight: bold; white-space: normal; overflow-wrap: normal;&quot;&gt;
                                Policy Agent
                            &lt;/div&gt;
                        &lt;/div&gt;
                    &lt;/div&gt;
                &lt;/foreignObject&gt;
                &lt;text x=&quot;1054&quot; y=&quot;567&quot; fill=&quot;rgb(0, 0, 0)&quot; font-family=&quot;Helvetica&quot; font-size=&quot;13px&quot; text-anchor=&quot;middle&quot; font-weight=&quot;bold&quot;&gt;
                    Policy Agent
                &lt;/text&gt;
            &lt;/switch&gt;
        &lt;/g&gt;
        &lt;rect x=&quot;984.66&quot; y=&quot;476&quot; width=&quot;140&quot; height=&quot;52&quot; fill=&quot;#d5e8d4&quot; stroke=&quot;#82b366&quot; stroke-width=&quot;3&quot; pointer-events=&quot;none&quot;/&gt;
        &lt;g transform=&quot;translate(-0.5 -0.5)&quot;&gt;
            &lt;switch&gt;
                &lt;foreignObject pointer-events=&quot;none&quot; width=&quot;100%&quot; height=&quot;100%&quot; requiredFeatures=&quot;http://www.w3.org/TR/SVG11/feature#Extensibility&quot; style=&quot;overflow: visible; text-align: left;&quot;&gt;
                    &lt;div xmlns=&quot;http://www.w3.org/1999/xhtml&quot; style=&quot;display: flex; align-items: unsafe center; justify-content: unsafe center; width: 138px; height: 1px; padding-top: 502px; margin-left: 986px;&quot;&gt;
                        &lt;div data-drawio-colors=&quot;color: rgb(0, 0, 0); &quot; style=&quot;box-sizing: border-box; font-size: 0px; text-align: center;&quot;&gt;
                            &lt;div style=&quot;display: inline-block; font-size: 13px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: none; font-weight: bold; white-space: normal; overflow-wrap: normal;&quot;&gt;
                                OTEL Collector
                            &lt;/div&gt;
                        &lt;/div&gt;
                    &lt;/div&gt;
                &lt;/foreignObject&gt;
                &lt;text x=&quot;1055&quot; y=&quot;506&quot; fill=&quot;rgb(0, 0, 0)&quot; font-family=&quot;Helvetica&quot; font-size=&quot;13px&quot; text-anchor=&quot;middle&quot; font-weight=&quot;bold&quot;&gt;
                    OTEL Collector
                &lt;/text&gt;
            &lt;/switch&gt;
        &lt;/g&gt;
        &lt;rect x=&quot;514&quot; y=&quot;476&quot; width=&quot;175&quot; height=&quot;65&quot; fill=&quot;#d5e8d4&quot; stroke=&quot;#82b366&quot; stroke-width=&quot;3&quot; pointer-events=&quot;none&quot;/&gt;
        &lt;g transform=&quot;translate(-0.5 -0.5)&quot;&gt;
            &lt;switch&gt;
                &lt;foreignObject pointer-events=&quot;none&quot; width=&quot;100%&quot; height=&quot;100%&quot; requiredFeatures=&quot;http://www.w3.org/TR/SVG11/feature#Extensibility&quot; style=&quot;overflow: visible; text-align: left;&quot;&gt;
                    &lt;div xmlns=&quot;http://www.w3.org/1999/xhtml&quot; style=&quot;display: flex; align-items: unsafe flex-start; justify-content: unsafe center; width: 173px; height: 1px; padding-top: 483px; margin-left: 515px;&quot;&gt;
                        &lt;div data-drawio-colors=&quot;color: rgb(0, 0, 0); &quot; style=&quot;box-sizing: border-box; font-size: 0px; text-align: center;&quot;&gt;
                            &lt;div style=&quot;display: inline-block; font-size: 13px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: none; font-weight: bold; white-space: normal; overflow-wrap: normal;&quot;&gt;
                                WORKLOAD
                                &lt;br/&gt;
                                ORCHESTRATION AGENT
                            &lt;/div&gt;
                        &lt;/div&gt;
                    &lt;/div&gt;
                &lt;/foreignObject&gt;
                &lt;text x=&quot;602&quot; y=&quot;496&quot; fill=&quot;rgb(0, 0, 0)&quot; font-family=&quot;Helvetica&quot; font-size=&quot;13px&quot; text-anchor=&quot;middle&quot; font-weight=&quot;bold&quot;&gt;
                    WORKLOAD...
                &lt;/text&gt;
            &lt;/switch&gt;
        &lt;/g&gt;
        &lt;path d=&quot;M 941.03 615.93 L 1208.09 615.91 L 1208.01 565.09&quot; fill=&quot;none&quot; stroke=&quot;#999999&quot; stroke-width=&quot;2&quot; stroke-miterlimit=&quot;10&quot; pointer-events=&quot;none&quot;/&gt;
        &lt;path d=&quot;M 1208 559.09 L 1212.02 567.08 L 1208.01 565.09 L 1204.02 567.09 Z&quot; fill=&quot;#999999&quot; stroke=&quot;#999999&quot; stroke-width=&quot;2&quot; stroke-miterlimit=&quot;10&quot; pointer-events=&quot;none&quot;/&gt;
        &lt;rect x=&quot;707.29&quot; y=&quot;476&quot; width=&quot;250&quot; height=&quot;65&quot; fill=&quot;#d5e8d4&quot; stroke=&quot;#82b366&quot; stroke-width=&quot;3&quot; pointer-events=&quot;none&quot;/&gt;
        &lt;rect x=&quot;707.29&quot; y=&quot;476&quot; width=&quot;250&quot; height=&quot;65&quot; fill=&quot;#d5e8d4&quot; stroke=&quot;#82b366&quot; stroke-width=&quot;3&quot; pointer-events=&quot;none&quot;/&gt;
        &lt;rect x=&quot;707.29&quot; y=&quot;476&quot; width=&quot;250&quot; height=&quot;65&quot; fill=&quot;#d5e8d4&quot; stroke=&quot;#82b366&quot; stroke-width=&quot;3&quot; pointer-events=&quot;none&quot;/&gt;
        &lt;g transform=&quot;translate(-0.5 -0.5)&quot;&gt;
            &lt;switch&gt;
                &lt;foreignObject pointer-events=&quot;none&quot; width=&quot;100%&quot; height=&quot;100%&quot; requiredFeatures=&quot;http://www.w3.org/TR/SVG11/feature#Extensibility&quot; style=&quot;overflow: visible; text-align: left;&quot;&gt;
                    &lt;div xmlns=&quot;http://www.w3.org/1999/xhtml&quot; style=&quot;display: flex; align-items: unsafe flex-start; justify-content: unsafe flex-start; width: 235px; height: 1px; padding-top: 483px; margin-left: 717px;&quot;&gt;
                        &lt;div data-drawio-colors=&quot;color: rgb(0, 0, 0); &quot; style=&quot;box-sizing: border-box; font-size: 0px; text-align: left;&quot;&gt;
                            &lt;div style=&quot;display: inline-block; font-size: 13px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: none; font-weight: bold; white-space: normal; overflow-wrap: normal;&quot;&gt;
                                DEVICE
                                &lt;br/&gt;
                                ORCHESTRATION
                                &lt;br/&gt;
                                AGENT
                            &lt;/div&gt;
                        &lt;/div&gt;
                    &lt;/div&gt;
                &lt;/foreignObject&gt;
                &lt;text x=&quot;717&quot; y=&quot;496&quot; fill=&quot;rgb(0, 0, 0)&quot; font-family=&quot;Helvetica&quot; font-size=&quot;13px&quot; font-weight=&quot;bold&quot;&gt;
                    DEVICE...
                &lt;/text&gt;
            &lt;/switch&gt;
        &lt;/g&gt;
        &lt;rect x=&quot;852.29&quot; y=&quot;488&quot; width=&quot;90&quot; height=&quot;40&quot; fill=&quot;#d5e8d4&quot; stroke=&quot;#82b366&quot; stroke-width=&quot;3&quot; stroke-dasharray=&quot;3 3&quot; pointer-events=&quot;none&quot;/&gt;
        &lt;g transform=&quot;translate(-0.5 -0.5)&quot;&gt;
            &lt;switch&gt;
                &lt;foreignObject pointer-events=&quot;none&quot; width=&quot;100%&quot; height=&quot;100%&quot; requiredFeatures=&quot;http://www.w3.org/TR/SVG11/feature#Extensibility&quot; style=&quot;overflow: visible; text-align: left;&quot;&gt;
                    &lt;div xmlns=&quot;http://www.w3.org/1999/xhtml&quot; style=&quot;display: flex; align-items: unsafe flex-start; justify-content: unsafe center; width: 75px; height: 1px; padding-top: 495px; margin-left: 861px;&quot;&gt;
                        &lt;div data-drawio-colors=&quot;color: rgb(0, 0, 0); &quot; style=&quot;box-sizing: border-box; font-size: 0px; text-align: center;&quot;&gt;
                            &lt;div style=&quot;display: inline-block; font-size: 13px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: none; font-weight: bold; white-space: normal; overflow-wrap: normal;&quot;&gt;
                                ONBOARDING SERVICE
                            &lt;/div&gt;
                        &lt;/div&gt;
                    &lt;/div&gt;
                &lt;/foreignObject&gt;
                &lt;text x=&quot;899&quot; y=&quot;508&quot; fill=&quot;rgb(0, 0, 0)&quot; font-family=&quot;Helvetica&quot; font-size=&quot;13px&quot; text-anchor=&quot;middle&quot; font-weight=&quot;bold&quot;&gt;
                    ONBOARDING S...
                &lt;/text&gt;
            &lt;/switch&gt;
        &lt;/g&gt;
        &lt;path d=&quot;M 802.16 740 C 802.16 755.19 814.47 767.5 829.66 767.5 C 844.85 767.5 857.16 755.19 857.16 740 Z&quot; fill=&quot;#0050ef&quot; stroke=&quot;#001dbc&quot; stroke-width=&quot;2&quot; stroke-miterlimit=&quot;10&quot; transform=&quot;rotate(-180,829.66,753.75)&quot; pointer-events=&quot;none&quot;/&gt;
        &lt;path d=&quot;M 1027.16 430.43 C 1027.16 445.62 1039.47 457.93 1054.66 457.93 C 1069.85 457.93 1082.16 445.62 1082.16 430.43 Z&quot; fill=&quot;#f5f5f5&quot; stroke=&quot;#666666&quot; stroke-width=&quot;3&quot; stroke-miterlimit=&quot;10&quot; transform=&quot;rotate(-180,1054.66,444.18)&quot; pointer-events=&quot;none&quot;/&gt;
        &lt;path d=&quot;M 581.53 429.93 C 581.53 445.12 593.84 457.43 609.03 457.43 C 624.22 457.43 636.53 445.12 636.53 429.93 Z&quot; fill=&quot;#0050ef&quot; stroke=&quot;#001dbc&quot; stroke-miterlimit=&quot;10&quot; transform=&quot;rotate(-180,609.03,443.68)&quot; pointer-events=&quot;none&quot;/&gt;
        &lt;path d=&quot;M 804.79 429.93 C 804.79 445.12 817.1 457.43 832.29 457.43 C 847.48 457.43 859.79 445.12 859.79 429.93 Z&quot; fill=&quot;#0050ef&quot; stroke=&quot;#001dbc&quot; stroke-miterlimit=&quot;10&quot; transform=&quot;rotate(-180,832.29,443.68)&quot; pointer-events=&quot;none&quot;/&gt;
        &lt;path d=&quot;M 609.03 353.82 L 609 421.69&quot; fill=&quot;none&quot; stroke=&quot;#001dbc&quot; stroke-width=&quot;2&quot; stroke-miterlimit=&quot;10&quot; pointer-events=&quot;none&quot;/&gt;
        &lt;path d=&quot;M 609 427.69 L 605 419.69 L 609 421.69 L 613 419.7 Z&quot; fill=&quot;#001dbc&quot; stroke=&quot;#001dbc&quot; stroke-width=&quot;2&quot; stroke-miterlimit=&quot;10&quot; pointer-events=&quot;none&quot;/&gt;
        &lt;path d=&quot;M 590.91 541 C 590.91 549.7 596.51 556.75 603.41 556.75 C 610.31 556.75 615.91 549.7 615.91 541 Z&quot; fill=&quot;#f5f5f5&quot; stroke=&quot;#666666&quot; stroke-miterlimit=&quot;10&quot; pointer-events=&quot;none&quot;/&gt;
        &lt;g transform=&quot;translate(-0.5 -0.5)&quot;&gt;
            &lt;switch&gt;
                &lt;foreignObject pointer-events=&quot;none&quot; width=&quot;100%&quot; height=&quot;100%&quot; requiredFeatures=&quot;http://www.w3.org/TR/SVG11/feature#Extensibility&quot; style=&quot;overflow: visible; text-align: left;&quot;&gt;
                    &lt;div xmlns=&quot;http://www.w3.org/1999/xhtml&quot; style=&quot;display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 707px; margin-left: 1419px;&quot;&gt;
                        &lt;div data-drawio-colors=&quot;color: rgb(0, 0, 0); &quot; style=&quot;box-sizing: border-box; font-size: 0px; text-align: center;&quot;&gt;
                            &lt;div style=&quot;display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: none; white-space: nowrap;&quot;&gt;
                                &lt;font style=&quot;font-size: 20px;&quot;&gt;
                                    &lt;b&gt;
                                        Kubernetes Cluster
                                    &lt;/b&gt;
                                &lt;/font&gt;
                            &lt;/div&gt;
                        &lt;/div&gt;
                    &lt;/div&gt;
                &lt;/foreignObject&gt;
                &lt;text x=&quot;1419&quot; y=&quot;710&quot; fill=&quot;rgb(0, 0, 0)&quot; font-family=&quot;Helvetica&quot; font-size=&quot;12px&quot; text-anchor=&quot;middle&quot;&gt;
                    Kubernetes Cluster
                &lt;/text&gt;
            &lt;/switch&gt;
        &lt;/g&gt;
        &lt;path d=&quot;M 534.13 143.19 L 452.09 143.18 L 452.09 607 L 505.85 607&quot; fill=&quot;none&quot; stroke=&quot;#999999&quot; stroke-width=&quot;2&quot; stroke-miterlimit=&quot;10&quot; pointer-events=&quot;none&quot;/&gt;
        &lt;path d=&quot;M 511.85 607 L 503.85 611 L 505.85 607 L 503.85 603 Z&quot; fill=&quot;#999999&quot; stroke=&quot;#999999&quot; stroke-width=&quot;2&quot; stroke-miterlimit=&quot;10&quot; pointer-events=&quot;none&quot;/&gt;
        &lt;rect x=&quot;913.66&quot; y=&quot;1&quot; width=&quot;355.5&quot; height=&quot;131&quot; fill=&quot;#d5e8d4&quot; stroke=&quot;#82b366&quot; stroke-width=&quot;3&quot; pointer-events=&quot;none&quot;/&gt;
        &lt;g transform=&quot;translate(-0.5 -0.5)&quot;&gt;
            &lt;switch&gt;
                &lt;foreignObject pointer-events=&quot;none&quot; width=&quot;100%&quot; height=&quot;100%&quot; requiredFeatures=&quot;http://www.w3.org/TR/SVG11/feature#Extensibility&quot; style=&quot;overflow: visible; text-align: left;&quot;&gt;
                    &lt;div xmlns=&quot;http://www.w3.org/1999/xhtml&quot; style=&quot;display: flex; align-items: unsafe flex-start; justify-content: unsafe center; width: 354px; height: 1px; padding-top: 8px; margin-left: 915px;&quot;&gt;
                        &lt;div data-drawio-colors=&quot;color: rgb(0, 0, 0); &quot; style=&quot;box-sizing: border-box; font-size: 0px; text-align: center;&quot;&gt;
                            &lt;div style=&quot;display: inline-block; font-size: 15px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: none; font-weight: bold; white-space: normal; overflow-wrap: normal;&quot;&gt;
                                Device Registry &amp;amp; Repository
                            &lt;/div&gt;
                        &lt;/div&gt;
                    &lt;/div&gt;
                &lt;/foreignObject&gt;
                &lt;text x=&quot;1091&quot; y=&quot;23&quot; fill=&quot;rgb(0, 0, 0)&quot; font-family=&quot;Helvetica&quot; font-size=&quot;15px&quot; text-anchor=&quot;middle&quot; font-weight=&quot;bold&quot;&gt;
                    Device Registry &amp;amp; Repository
                &lt;/text&gt;
            &lt;/switch&gt;
        &lt;/g&gt;
        &lt;path d=&quot;M 978 132 C 978 147.19 990.31 159.5 1005.5 159.5 C 1020.69 159.5 1033 147.19 1033 132 Z&quot; fill=&quot;#f5f5f5&quot; stroke=&quot;#666666&quot; stroke-miterlimit=&quot;10&quot; pointer-events=&quot;none&quot;/&gt;
        &lt;path d=&quot;M 1186.16 133.8 C 1186.16 148.99 1198.47 161.3 1213.66 161.3 C 1228.85 161.3 1241.16 148.99 1241.16 133.8 Z&quot; fill=&quot;#0050ef&quot; stroke=&quot;#001dbc&quot; stroke-miterlimit=&quot;10&quot; pointer-events=&quot;none&quot;/&gt;
        &lt;path d=&quot;M 920.66 60.5 L 920.66 37.5 L 1152 37.5 L 1152 60.5&quot; fill=&quot;#d5e8d4&quot; stroke=&quot;#82b366&quot; stroke-miterlimit=&quot;10&quot; pointer-events=&quot;none&quot;/&gt;
        &lt;path d=&quot;M 920.66 60.5 L 920.66 117.5 L 1152 117.5 L 1152 60.5&quot; fill=&quot;none&quot; stroke=&quot;#82b366&quot; stroke-miterlimit=&quot;10&quot; pointer-events=&quot;none&quot;/&gt;
        &lt;path d=&quot;M 920.66 60.5 L 1152 60.5&quot; fill=&quot;none&quot; stroke=&quot;#82b366&quot; stroke-miterlimit=&quot;10&quot; pointer-events=&quot;none&quot;/&gt;
        &lt;g transform=&quot;translate(-0.5 -0.5)&quot;&gt;
            &lt;switch&gt;
                &lt;foreignObject pointer-events=&quot;none&quot; width=&quot;100%&quot; height=&quot;100%&quot; requiredFeatures=&quot;http://www.w3.org/TR/SVG11/feature#Extensibility&quot; style=&quot;overflow: visible; text-align: left;&quot;&gt;
                    &lt;div xmlns=&quot;http://www.w3.org/1999/xhtml&quot; style=&quot;display: flex; align-items: unsafe center; justify-content: unsafe center; width: 229px; height: 1px; padding-top: 49px; margin-left: 922px;&quot;&gt;
                        &lt;div data-drawio-colors=&quot;color: rgb(0, 0, 0); &quot; style=&quot;box-sizing: border-box; font-size: 0px; text-align: center;&quot;&gt;
                            &lt;div style=&quot;display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: none; white-space: normal; overflow-wrap: normal;&quot;&gt;
                                Device Config Package
                            &lt;/div&gt;
                        &lt;/div&gt;
                    &lt;/div&gt;
                &lt;/foreignObject&gt;
                &lt;text x=&quot;1036&quot; y=&quot;53&quot; fill=&quot;rgb(0, 0, 0)&quot; font-family=&quot;Helvetica&quot; font-size=&quot;12px&quot; text-anchor=&quot;middle&quot;&gt;
                    Device Config Package
                &lt;/text&gt;
            &lt;/switch&gt;
        &lt;/g&gt;
        &lt;path d=&quot;M 932 66 L 1020 66 L 1032 78 L 1032 111 L 932 111 L 932 66 Z&quot; fill=&quot;#dae8fc&quot; stroke=&quot;#6c8ebf&quot; stroke-width=&quot;3&quot; stroke-miterlimit=&quot;10&quot; pointer-events=&quot;none&quot;/&gt;
        &lt;path d=&quot;M 1020 66 L 1020 78 L 1032 78 Z&quot; fill-opacity=&quot;0.05&quot; fill=&quot;#000000&quot; stroke=&quot;none&quot; pointer-events=&quot;none&quot;/&gt;
        &lt;path d=&quot;M 1020 66 L 1020 78 L 1032 78&quot; fill=&quot;none&quot; stroke=&quot;#6c8ebf&quot; stroke-width=&quot;3&quot; stroke-miterlimit=&quot;10&quot; pointer-events=&quot;none&quot;/&gt;
        &lt;g transform=&quot;translate(-0.5 -0.5)&quot;&gt;
            &lt;switch&gt;
                &lt;foreignObject pointer-events=&quot;none&quot; width=&quot;100%&quot; height=&quot;100%&quot; requiredFeatures=&quot;http://www.w3.org/TR/SVG11/feature#Extensibility&quot; style=&quot;overflow: visible; text-align: left;&quot;&gt;
                    &lt;div xmlns=&quot;http://www.w3.org/1999/xhtml&quot; style=&quot;display: flex; align-items: unsafe center; justify-content: unsafe center; width: 98px; height: 1px; padding-top: 89px; margin-left: 933px;&quot;&gt;
                        &lt;div data-drawio-colors=&quot;color: #004C99; &quot; style=&quot;box-sizing: border-box; font-size: 0px; text-align: center;&quot;&gt;
                            &lt;div style=&quot;display: inline-block; font-size: 13px; font-family: Helvetica; color: rgb(0, 76, 153); line-height: 1.2; pointer-events: none; font-weight: bold; white-space: normal; overflow-wrap: normal;&quot;&gt;
                                Device
                                &lt;br/&gt;
                                Artifacts
                            &lt;/div&gt;
                        &lt;/div&gt;
                    &lt;/div&gt;
                &lt;/foreignObject&gt;
                &lt;text x=&quot;982&quot; y=&quot;92&quot; fill=&quot;#004C99&quot; font-family=&quot;Helvetica&quot; font-size=&quot;13px&quot; text-anchor=&quot;middle&quot; font-weight=&quot;bold&quot;&gt;
                    Device...
                &lt;/text&gt;
            &lt;/switch&gt;
        &lt;/g&gt;
        &lt;path d=&quot;M 1043 66 L 1129 66 L 1143 80 L 1143 111 L 1043 111 L 1043 66 Z&quot; fill=&quot;#dae8fc&quot; stroke=&quot;#6c8ebf&quot; stroke-width=&quot;3&quot; stroke-miterlimit=&quot;10&quot; pointer-events=&quot;none&quot;/&gt;
        &lt;path d=&quot;M 1129 66 L 1129 80 L 1143 80 Z&quot; fill-opacity=&quot;0.05&quot; fill=&quot;#000000&quot; stroke=&quot;none&quot; pointer-events=&quot;none&quot;/&gt;
        &lt;path d=&quot;M 1129 66 L 1129 80 L 1143 80&quot; fill=&quot;none&quot; stroke=&quot;#6c8ebf&quot; stroke-width=&quot;3&quot; stroke-miterlimit=&quot;10&quot; pointer-events=&quot;none&quot;/&gt;
        &lt;g transform=&quot;translate(-0.5 -0.5)&quot;&gt;
            &lt;switch&gt;
                &lt;foreignObject pointer-events=&quot;none&quot; width=&quot;100%&quot; height=&quot;100%&quot; requiredFeatures=&quot;http://www.w3.org/TR/SVG11/feature#Extensibility&quot; style=&quot;overflow: visible; text-align: left;&quot;&gt;
                    &lt;div xmlns=&quot;http://www.w3.org/1999/xhtml&quot; style=&quot;display: flex; align-items: unsafe center; justify-content: unsafe center; width: 98px; height: 1px; padding-top: 89px; margin-left: 1044px;&quot;&gt;
                        &lt;div data-drawio-colors=&quot;color: #004C99; &quot; style=&quot;box-sizing: border-box; font-size: 0px; text-align: center;&quot;&gt;
                            &lt;div style=&quot;display: inline-block; font-size: 13px; font-family: Helvetica; color: rgb(0, 76, 153); line-height: 1.2; pointer-events: none; font-weight: bold; white-space: normal; overflow-wrap: normal;&quot;&gt;
                                Device Update
                                &lt;br/&gt;
                                Manifest
                            &lt;/div&gt;
                        &lt;/div&gt;
                    &lt;/div&gt;
                &lt;/foreignObject&gt;
                &lt;text x=&quot;1093&quot; y=&quot;92&quot; fill=&quot;#004C99&quot; font-family=&quot;Helvetica&quot; font-size=&quot;13px&quot; text-anchor=&quot;middle&quot; font-weight=&quot;bold&quot;&gt;
                    Device Update...
                &lt;/text&gt;
            &lt;/switch&gt;
        &lt;/g&gt;
        &lt;path d=&quot;M 532.53 132 C 532.53 147.19 544.84 159.5 560.03 159.5 C 575.22 159.5 587.53 147.19 587.53 132 Z&quot; fill=&quot;#f5f5f5&quot; stroke=&quot;#666666&quot; stroke-miterlimit=&quot;10&quot; pointer-events=&quot;none&quot;/&gt;
        &lt;path d=&quot;M 1213.69 169.54 L 1213.73 180.09 L 902.09 180.09 L 902.11 191.3&quot; fill=&quot;none&quot; stroke=&quot;#001dbc&quot; stroke-width=&quot;2&quot; stroke-miterlimit=&quot;10&quot; pointer-events=&quot;none&quot;/&gt;
        &lt;path d=&quot;M 1213.67 163.54 L 1217.7 171.52 L 1213.69 169.54 L 1209.7 171.55 Z&quot; fill=&quot;#001dbc&quot; stroke=&quot;#001dbc&quot; stroke-width=&quot;2&quot; stroke-miterlimit=&quot;10&quot; pointer-events=&quot;none&quot;/&gt;
        &lt;path d=&quot;M 902.12 197.3 L 898.1 189.31 L 902.11 191.3 L 906.1 189.3 Z&quot; fill=&quot;#001dbc&quot; stroke=&quot;#001dbc&quot; stroke-width=&quot;2&quot; stroke-miterlimit=&quot;10&quot; pointer-events=&quot;none&quot;/&gt;
        &lt;path d=&quot;M 874.62 199.54 C 874.62 214.73 886.93 227.04 902.12 227.04 C 917.31 227.04 929.62 214.73 929.62 199.54 Z&quot; fill=&quot;#0050ef&quot; stroke=&quot;#001dbc&quot; stroke-miterlimit=&quot;10&quot; transform=&quot;rotate(-180,902.12,213.29)&quot; pointer-events=&quot;none&quot;/&gt;
        &lt;path d=&quot;M 581.53 326.32 C 581.53 341.51 593.84 353.82 609.03 353.82 C 624.22 353.82 636.53 341.51 636.53 326.32 Z&quot; fill=&quot;#0050ef&quot; stroke=&quot;#001dbc&quot; stroke-miterlimit=&quot;10&quot; pointer-events=&quot;none&quot;/&gt;
        &lt;path d=&quot;M 349 399 L 1520 402&quot; fill=&quot;none&quot; stroke=&quot;rgb(0, 0, 0)&quot; stroke-width=&quot;2&quot; stroke-miterlimit=&quot;10&quot; stroke-dasharray=&quot;6 6&quot; pointer-events=&quot;none&quot;/&gt;
        &lt;rect x=&quot;347.75&quot; y=&quot;333&quot; width=&quot;77&quot; height=&quot;55&quot; fill=&quot;#f5f5f5&quot; stroke=&quot;#666666&quot; pointer-events=&quot;none&quot;/&gt;
        &lt;g transform=&quot;translate(-0.5 -0.5)&quot;&gt;
            &lt;switch&gt;
                &lt;foreignObject pointer-events=&quot;none&quot; width=&quot;100%&quot; height=&quot;100%&quot; requiredFeatures=&quot;http://www.w3.org/TR/SVG11/feature#Extensibility&quot; style=&quot;overflow: visible; text-align: left;&quot;&gt;
                    &lt;div xmlns=&quot;http://www.w3.org/1999/xhtml&quot; style=&quot;display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 361px; margin-left: 386px;&quot;&gt;
                        &lt;div data-drawio-colors=&quot;color: #333333; &quot; style=&quot;box-sizing: border-box; font-size: 0px; text-align: center;&quot;&gt;
                            &lt;div style=&quot;display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(51, 51, 51); line-height: 1.2; pointer-events: none; white-space: nowrap;&quot;&gt;
                                Cloud or
                                &lt;br/&gt;
                                On Prem
                                &lt;br/&gt;
                                Datacenter
                            &lt;/div&gt;
                        &lt;/div&gt;
                    &lt;/div&gt;
                &lt;/foreignObject&gt;
                &lt;text x=&quot;386&quot; y=&quot;364&quot; fill=&quot;#333333&quot; font-family=&quot;Helvetica&quot; font-size=&quot;12px&quot; text-anchor=&quot;middle&quot;&gt;
                    Cloud or...
                &lt;/text&gt;
            &lt;/switch&gt;
        &lt;/g&gt;
        &lt;rect x=&quot;347.75&quot; y=&quot;416&quot; width=&quot;77&quot; height=&quot;26&quot; fill=&quot;#f5f5f5&quot; stroke=&quot;#666666&quot; pointer-events=&quot;none&quot;/&gt;
        &lt;g transform=&quot;translate(-0.5 -0.5)&quot;&gt;
            &lt;switch&gt;
                &lt;foreignObject pointer-events=&quot;none&quot; width=&quot;100%&quot; height=&quot;100%&quot; requiredFeatures=&quot;http://www.w3.org/TR/SVG11/feature#Extensibility&quot; style=&quot;overflow: visible; text-align: left;&quot;&gt;
                    &lt;div xmlns=&quot;http://www.w3.org/1999/xhtml&quot; style=&quot;display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 429px; margin-left: 386px;&quot;&gt;
                        &lt;div data-drawio-colors=&quot;color: #333333; &quot; style=&quot;box-sizing: border-box; font-size: 0px; text-align: center;&quot;&gt;
                            &lt;div style=&quot;display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(51, 51, 51); line-height: 1.2; pointer-events: none; white-space: nowrap;&quot;&gt;
                                Shop Floor
                            &lt;/div&gt;
                        &lt;/div&gt;
                    &lt;/div&gt;
                &lt;/foreignObject&gt;
                &lt;text x=&quot;386&quot; y=&quot;433&quot; fill=&quot;#333333&quot; font-family=&quot;Helvetica&quot; font-size=&quot;12px&quot; text-anchor=&quot;middle&quot;&gt;
                    Shop Floor
                &lt;/text&gt;
            &lt;/switch&gt;
        &lt;/g&gt;
        &lt;path d=&quot;M 740 68 L 825 68 L 840 83 L 840 113 L 740 113 L 740 68 Z&quot; fill=&quot;#dae8fc&quot; stroke=&quot;#6c8ebf&quot; stroke-width=&quot;3&quot; stroke-miterlimit=&quot;10&quot; pointer-events=&quot;none&quot;/&gt;
        &lt;path d=&quot;M 825 68 L 825 83 L 840 83 Z&quot; fill-opacity=&quot;0.05&quot; fill=&quot;#000000&quot; stroke=&quot;none&quot; pointer-events=&quot;none&quot;/&gt;
        &lt;path d=&quot;M 825 68 L 825 83 L 840 83&quot; fill=&quot;none&quot; stroke=&quot;#6c8ebf&quot; stroke-width=&quot;3&quot; stroke-miterlimit=&quot;10&quot; pointer-events=&quot;none&quot;/&gt;
        &lt;g transform=&quot;translate(-0.5 -0.5)&quot;&gt;
            &lt;switch&gt;
                &lt;foreignObject pointer-events=&quot;none&quot; width=&quot;100%&quot; height=&quot;100%&quot; requiredFeatures=&quot;http://www.w3.org/TR/SVG11/feature#Extensibility&quot; style=&quot;overflow: visible; text-align: left;&quot;&gt;
                    &lt;div xmlns=&quot;http://www.w3.org/1999/xhtml&quot; style=&quot;display: flex; align-items: unsafe center; justify-content: unsafe center; width: 98px; height: 1px; padding-top: 91px; margin-left: 741px;&quot;&gt;
                        &lt;div data-drawio-colors=&quot;color: #004C99; &quot; style=&quot;box-sizing: border-box; font-size: 0px; text-align: center;&quot;&gt;
                            &lt;div style=&quot;display: inline-block; font-size: 13px; font-family: Helvetica; color: rgb(0, 76, 153); line-height: 1.2; pointer-events: none; font-weight: bold; white-space: normal; overflow-wrap: normal;&quot;&gt;
                                Application Description
                            &lt;/div&gt;
                        &lt;/div&gt;
                    &lt;/div&gt;
                &lt;/foreignObject&gt;
                &lt;text x=&quot;790&quot; y=&quot;94&quot; fill=&quot;#004C99&quot; font-family=&quot;Helvetica&quot; font-size=&quot;13px&quot; text-anchor=&quot;middle&quot; font-weight=&quot;bold&quot;&gt;
                    Application Des...
                &lt;/text&gt;
            &lt;/switch&gt;
        &lt;/g&gt;
        &lt;path d=&quot;M 493 279.92 L 528 279.92 L 539 290.92 L 539 325.61 L 493 325.61 L 493 279.92 Z&quot; fill=&quot;#dae8fc&quot; stroke=&quot;#6c8ebf&quot; stroke-width=&quot;3&quot; stroke-miterlimit=&quot;10&quot; pointer-events=&quot;none&quot;/&gt;
        &lt;path d=&quot;M 528 279.92 L 528 290.92 L 539 290.92 Z&quot; fill-opacity=&quot;0.05&quot; fill=&quot;#000000&quot; stroke=&quot;none&quot; pointer-events=&quot;none&quot;/&gt;
        &lt;path d=&quot;M 528 279.92 L 528 290.92 L 539 290.92&quot; fill=&quot;none&quot; stroke=&quot;#6c8ebf&quot; stroke-width=&quot;3&quot; stroke-miterlimit=&quot;10&quot; pointer-events=&quot;none&quot;/&gt;
        &lt;g transform=&quot;translate(-0.5 -0.5)&quot;&gt;
            &lt;switch&gt;
                &lt;foreignObject pointer-events=&quot;none&quot; width=&quot;100%&quot; height=&quot;100%&quot; requiredFeatures=&quot;http://www.w3.org/TR/SVG11/feature#Extensibility&quot; style=&quot;overflow: visible; text-align: left;&quot;&gt;
                    &lt;div xmlns=&quot;http://www.w3.org/1999/xhtml&quot; style=&quot;display: flex; align-items: unsafe flex-start; justify-content: unsafe center; width: 44px; height: 1px; padding-top: 287px; margin-left: 494px;&quot;&gt;
                        &lt;div data-drawio-colors=&quot;color: #004C99; &quot; style=&quot;box-sizing: border-box; font-size: 0px; text-align: center;&quot;&gt;
                            &lt;div style=&quot;display: inline-block; font-size: 10px; font-family: Helvetica; color: rgb(0, 76, 153); line-height: 1.2; pointer-events: none; font-weight: bold; white-space: normal; overflow-wrap: normal;&quot;&gt;
                                App
                                &lt;br/&gt;
                                Instance
                                &lt;br/&gt;
                                config
                            &lt;/div&gt;
                        &lt;/div&gt;
                    &lt;/div&gt;
                &lt;/foreignObject&gt;
                &lt;text x=&quot;516&quot; y=&quot;297&quot; fill=&quot;#004C99&quot; font-family=&quot;Helvetica&quot; font-size=&quot;10px&quot; text-anchor=&quot;middle&quot; font-weight=&quot;bold&quot;&gt;
                    App...
                &lt;/text&gt;
            &lt;/switch&gt;
        &lt;/g&gt;
        &lt;path d=&quot;M 1159.16 68 L 1245.16 68 L 1259.16 82 L 1259.16 113 L 1159.16 113 L 1159.16 68 Z&quot; fill=&quot;#dae8fc&quot; stroke=&quot;#6c8ebf&quot; stroke-width=&quot;3&quot; stroke-miterlimit=&quot;10&quot; pointer-events=&quot;none&quot;/&gt;
        &lt;path d=&quot;M 1245.16 68 L 1245.16 82 L 1259.16 82 Z&quot; fill-opacity=&quot;0.05&quot; fill=&quot;#000000&quot; stroke=&quot;none&quot; pointer-events=&quot;none&quot;/&gt;
        &lt;path d=&quot;M 1245.16 68 L 1245.16 82 L 1259.16 82&quot; fill=&quot;none&quot; stroke=&quot;#6c8ebf&quot; stroke-width=&quot;3&quot; stroke-miterlimit=&quot;10&quot; pointer-events=&quot;none&quot;/&gt;
        &lt;g transform=&quot;translate(-0.5 -0.5)&quot;&gt;
            &lt;switch&gt;
                &lt;foreignObject pointer-events=&quot;none&quot; width=&quot;100%&quot; height=&quot;100%&quot; requiredFeatures=&quot;http://www.w3.org/TR/SVG11/feature#Extensibility&quot; style=&quot;overflow: visible; text-align: left;&quot;&gt;
                    &lt;div xmlns=&quot;http://www.w3.org/1999/xhtml&quot; style=&quot;display: flex; align-items: unsafe center; justify-content: unsafe center; width: 98px; height: 1px; padding-top: 91px; margin-left: 1160px;&quot;&gt;
                        &lt;div data-drawio-colors=&quot;color: #004C99; &quot; style=&quot;box-sizing: border-box; font-size: 0px; text-align: center;&quot;&gt;
                            &lt;div style=&quot;display: inline-block; font-size: 13px; font-family: Helvetica; color: rgb(0, 76, 153); line-height: 1.2; pointer-events: none; font-weight: bold; white-space: normal; overflow-wrap: normal;&quot;&gt;
                                Device
                                &lt;br/&gt;
                                Update
                            &lt;/div&gt;
                        &lt;/div&gt;
                    &lt;/div&gt;
                &lt;/foreignObject&gt;
                &lt;text x=&quot;1209&quot; y=&quot;94&quot; fill=&quot;#004C99&quot; font-family=&quot;Helvetica&quot; font-size=&quot;13px&quot; text-anchor=&quot;middle&quot; font-weight=&quot;bold&quot;&gt;
                    Device...
                &lt;/text&gt;
            &lt;/switch&gt;
        &lt;/g&gt;
        &lt;rect x=&quot;708.87&quot; y=&quot;784.98&quot; width=&quot;250&quot; height=&quot;65&quot; fill=&quot;#d5e8d4&quot; stroke=&quot;#82b366&quot; stroke-width=&quot;3&quot; pointer-events=&quot;none&quot;/&gt;
        &lt;rect x=&quot;708.87&quot; y=&quot;784.98&quot; width=&quot;250&quot; height=&quot;65&quot; fill=&quot;#d5e8d4&quot; stroke=&quot;#82b366&quot; stroke-width=&quot;3&quot; pointer-events=&quot;none&quot;/&gt;
        &lt;rect x=&quot;708.87&quot; y=&quot;784.98&quot; width=&quot;250&quot; height=&quot;65&quot; fill=&quot;#d5e8d4&quot; stroke=&quot;#82b366&quot; stroke-width=&quot;3&quot; pointer-events=&quot;none&quot;/&gt;
        &lt;g transform=&quot;translate(-0.5 -0.5)&quot;&gt;
            &lt;switch&gt;
                &lt;foreignObject pointer-events=&quot;none&quot; width=&quot;100%&quot; height=&quot;100%&quot; requiredFeatures=&quot;http://www.w3.org/TR/SVG11/feature#Extensibility&quot; style=&quot;overflow: visible; text-align: left;&quot;&gt;
                    &lt;div xmlns=&quot;http://www.w3.org/1999/xhtml&quot; style=&quot;display: flex; align-items: unsafe flex-start; justify-content: unsafe flex-start; width: 235px; height: 1px; padding-top: 792px; margin-left: 719px;&quot;&gt;
                        &lt;div data-drawio-colors=&quot;color: rgb(0, 0, 0); &quot; style=&quot;box-sizing: border-box; font-size: 0px; text-align: left;&quot;&gt;
                            &lt;div style=&quot;display: inline-block; font-size: 13px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: none; font-weight: bold; white-space: normal; overflow-wrap: normal;&quot;&gt;
                                DEVICE
                                &lt;br/&gt;
                                ORCHESTRATION
                                &lt;br/&gt;
                                AGENT
                            &lt;/div&gt;
                        &lt;/div&gt;
                    &lt;/div&gt;
                &lt;/foreignObject&gt;
                &lt;text x=&quot;719&quot; y=&quot;805&quot; fill=&quot;rgb(0, 0, 0)&quot; font-family=&quot;Helvetica&quot; font-size=&quot;13px&quot; font-weight=&quot;bold&quot;&gt;
                    DEVICE...
                &lt;/text&gt;
            &lt;/switch&gt;
        &lt;/g&gt;
        &lt;rect x=&quot;853.87&quot; y=&quot;796.98&quot; width=&quot;90&quot; height=&quot;40&quot; fill=&quot;#d5e8d4&quot; stroke=&quot;#82b366&quot; stroke-width=&quot;3&quot; stroke-dasharray=&quot;3 3&quot; pointer-events=&quot;none&quot;/&gt;
        &lt;g transform=&quot;translate(-0.5 -0.5)&quot;&gt;
            &lt;switch&gt;
                &lt;foreignObject pointer-events=&quot;none&quot; width=&quot;100%&quot; height=&quot;100%&quot; requiredFeatures=&quot;http://www.w3.org/TR/SVG11/feature#Extensibility&quot; style=&quot;overflow: visible; text-align: left;&quot;&gt;
                    &lt;div xmlns=&quot;http://www.w3.org/1999/xhtml&quot; style=&quot;display: flex; align-items: unsafe flex-start; justify-content: unsafe center; width: 75px; height: 1px; padding-top: 804px; margin-left: 863px;&quot;&gt;
                        &lt;div data-drawio-colors=&quot;color: rgb(0, 0, 0); &quot; style=&quot;box-sizing: border-box; font-size: 0px; text-align: center;&quot;&gt;
                            &lt;div style=&quot;display: inline-block; font-size: 13px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: none; font-weight: bold; white-space: normal; overflow-wrap: normal;&quot;&gt;
                                ONBOARDING SERRVICE
                            &lt;/div&gt;
                        &lt;/div&gt;
                    &lt;/div&gt;
                &lt;/foreignObject&gt;
                &lt;text x=&quot;900&quot; y=&quot;817&quot; fill=&quot;rgb(0, 0, 0)&quot; font-family=&quot;Helvetica&quot; font-size=&quot;13px&quot; text-anchor=&quot;middle&quot; font-weight=&quot;bold&quot;&gt;
                    ONBOARDING S...
                &lt;/text&gt;
            &lt;/switch&gt;
        &lt;/g&gt;
        &lt;rect x=&quot;980.03&quot; y=&quot;842&quot; width=&quot;140&quot; height=&quot;47.5&quot; fill=&quot;#d5e8d4&quot; stroke=&quot;#82b366&quot; stroke-width=&quot;3&quot; pointer-events=&quot;none&quot;/&gt;
        &lt;g transform=&quot;translate(-0.5 -0.5)&quot;&gt;
            &lt;switch&gt;
                &lt;foreignObject pointer-events=&quot;none&quot; width=&quot;100%&quot; height=&quot;100%&quot; requiredFeatures=&quot;http://www.w3.org/TR/SVG11/feature#Extensibility&quot; style=&quot;overflow: visible; text-align: left;&quot;&gt;
                    &lt;div xmlns=&quot;http://www.w3.org/1999/xhtml&quot; style=&quot;display: flex; align-items: unsafe center; justify-content: unsafe center; width: 138px; height: 1px; padding-top: 866px; margin-left: 981px;&quot;&gt;
                        &lt;div data-drawio-colors=&quot;color: rgb(0, 0, 0); &quot; style=&quot;box-sizing: border-box; font-size: 0px; text-align: center;&quot;&gt;
                            &lt;div style=&quot;display: inline-block; font-size: 13px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: none; font-weight: bold; white-space: normal; overflow-wrap: normal;&quot;&gt;
                                Policy Agent
                            &lt;/div&gt;
                        &lt;/div&gt;
                    &lt;/div&gt;
                &lt;/foreignObject&gt;
                &lt;text x=&quot;1050&quot; y=&quot;870&quot; fill=&quot;rgb(0, 0, 0)&quot; font-family=&quot;Helvetica&quot; font-size=&quot;13px&quot; text-anchor=&quot;middle&quot; font-weight=&quot;bold&quot;&gt;
                    Policy Agent
                &lt;/text&gt;
            &lt;/switch&gt;
        &lt;/g&gt;
        &lt;rect x=&quot;338.75&quot; y=&quot;692&quot; width=&quot;103&quot; height=&quot;26&quot; fill=&quot;#f5f5f5&quot; stroke=&quot;#666666&quot; pointer-events=&quot;none&quot;/&gt;
        &lt;g transform=&quot;translate(-0.5 -0.5)&quot;&gt;
            &lt;switch&gt;
                &lt;foreignObject pointer-events=&quot;none&quot; width=&quot;100%&quot; height=&quot;100%&quot; requiredFeatures=&quot;http://www.w3.org/TR/SVG11/feature#Extensibility&quot; style=&quot;overflow: visible; text-align: left;&quot;&gt;
                    &lt;div xmlns=&quot;http://www.w3.org/1999/xhtml&quot; style=&quot;display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 705px; margin-left: 390px;&quot;&gt;
                        &lt;div data-drawio-colors=&quot;color: #333333; &quot; style=&quot;box-sizing: border-box; font-size: 0px; text-align: center;&quot;&gt;
                            &lt;div style=&quot;display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(51, 51, 51); line-height: 1.2; pointer-events: none; white-space: nowrap;&quot;&gt;
                                Device Option 1
                            &lt;/div&gt;
                        &lt;/div&gt;
                    &lt;/div&gt;
                &lt;/foreignObject&gt;
                &lt;text x=&quot;390&quot; y=&quot;709&quot; fill=&quot;#333333&quot; font-family=&quot;Helvetica&quot; font-size=&quot;12px&quot; text-anchor=&quot;middle&quot;&gt;
                    Device Option 1
                &lt;/text&gt;
            &lt;/switch&gt;
        &lt;/g&gt;
        &lt;rect x=&quot;338.75&quot; y=&quot;969&quot; width=&quot;103&quot; height=&quot;26&quot; fill=&quot;#f5f5f5&quot; stroke=&quot;#666666&quot; pointer-events=&quot;none&quot;/&gt;
        &lt;g transform=&quot;translate(-0.5 -0.5)&quot;&gt;
            &lt;switch&gt;
                &lt;foreignObject pointer-events=&quot;none&quot; width=&quot;100%&quot; height=&quot;100%&quot; requiredFeatures=&quot;http://www.w3.org/TR/SVG11/feature#Extensibility&quot; style=&quot;overflow: visible; text-align: left;&quot;&gt;
                    &lt;div xmlns=&quot;http://www.w3.org/1999/xhtml&quot; style=&quot;display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 982px; margin-left: 390px;&quot;&gt;
                        &lt;div data-drawio-colors=&quot;color: #333333; &quot; style=&quot;box-sizing: border-box; font-size: 0px; text-align: center;&quot;&gt;
                            &lt;div style=&quot;display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(51, 51, 51); line-height: 1.2; pointer-events: none; white-space: nowrap;&quot;&gt;
                                Device Option 2
                            &lt;/div&gt;
                        &lt;/div&gt;
                    &lt;/div&gt;
                &lt;/foreignObject&gt;
                &lt;text x=&quot;390&quot; y=&quot;986&quot; fill=&quot;#333333&quot; font-family=&quot;Helvetica&quot; font-size=&quot;12px&quot; text-anchor=&quot;middle&quot;&gt;
                    Device Option 2
                &lt;/text&gt;
            &lt;/switch&gt;
        &lt;/g&gt;
        &lt;rect x=&quot;514.25&quot; y=&quot;652&quot; width=&quot;410&quot; height=&quot;30&quot; fill=&quot;#d5e8d4&quot; stroke=&quot;#82b366&quot; stroke-width=&quot;3&quot; pointer-events=&quot;none&quot;/&gt;
        &lt;g transform=&quot;translate(-0.5 -0.5)&quot;&gt;
            &lt;switch&gt;
                &lt;foreignObject pointer-events=&quot;none&quot; width=&quot;100%&quot; height=&quot;100%&quot; requiredFeatures=&quot;http://www.w3.org/TR/SVG11/feature#Extensibility&quot; style=&quot;overflow: visible; text-align: left;&quot;&gt;
                    &lt;div xmlns=&quot;http://www.w3.org/1999/xhtml&quot; style=&quot;display: flex; align-items: unsafe center; justify-content: unsafe center; width: 398px; height: 1px; padding-top: 667px; margin-left: 520px;&quot;&gt;
                        &lt;div data-drawio-colors=&quot;color: rgb(0, 0, 0); &quot; style=&quot;box-sizing: border-box; font-size: 0px; text-align: center;&quot;&gt;
                            &lt;div style=&quot;display: inline-block; font-size: 13px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: none; font-weight: bold; white-space: normal; overflow-wrap: normal;&quot;&gt;
                                OS
                            &lt;/div&gt;
                        &lt;/div&gt;
                    &lt;/div&gt;
                &lt;/foreignObject&gt;
                &lt;text x=&quot;719&quot; y=&quot;671&quot; fill=&quot;rgb(0, 0, 0)&quot; font-family=&quot;Helvetica&quot; font-size=&quot;13px&quot; text-anchor=&quot;middle&quot; font-weight=&quot;bold&quot;&gt;
                    OS
                &lt;/text&gt;
            &lt;/switch&gt;
        &lt;/g&gt;
        &lt;rect x=&quot;514.25&quot; y=&quot;622&quot; width=&quot;410&quot; height=&quot;30&quot; fill=&quot;#d5e8d4&quot; stroke=&quot;#82b366&quot; stroke-width=&quot;3&quot; pointer-events=&quot;none&quot;/&gt;
        &lt;g transform=&quot;translate(-0.5 -0.5)&quot;&gt;
            &lt;switch&gt;
                &lt;foreignObject pointer-events=&quot;none&quot; width=&quot;100%&quot; height=&quot;100%&quot; requiredFeatures=&quot;http://www.w3.org/TR/SVG11/feature#Extensibility&quot; style=&quot;overflow: visible; text-align: left;&quot;&gt;
                    &lt;div xmlns=&quot;http://www.w3.org/1999/xhtml&quot; style=&quot;display: flex; align-items: unsafe center; justify-content: unsafe center; width: 398px; height: 1px; padding-top: 637px; margin-left: 520px;&quot;&gt;
                        &lt;div data-drawio-colors=&quot;color: rgb(0, 0, 0); &quot; style=&quot;box-sizing: border-box; font-size: 0px; text-align: center;&quot;&gt;
                            &lt;div style=&quot;display: inline-block; font-size: 13px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: none; font-weight: bold; white-space: normal; overflow-wrap: normal;&quot;&gt;
                                OCI CONTAINER RUNTIME
                            &lt;/div&gt;
                        &lt;/div&gt;
                    &lt;/div&gt;
                &lt;/foreignObject&gt;
                &lt;text x=&quot;719&quot; y=&quot;641&quot; fill=&quot;rgb(0, 0, 0)&quot; font-family=&quot;Helvetica&quot; font-size=&quot;13px&quot; text-anchor=&quot;middle&quot; font-weight=&quot;bold&quot;&gt;
                    OCI CONTAINER RUNTIME
                &lt;/text&gt;
            &lt;/switch&gt;
        &lt;/g&gt;
        &lt;rect x=&quot;521&quot; y=&quot;626.44&quot; width=&quot;87.97&quot; height=&quot;21.12&quot; fill=&quot;#e1d5e7&quot; stroke=&quot;#9673a6&quot; stroke-width=&quot;3&quot; pointer-events=&quot;none&quot;/&gt;
        &lt;g transform=&quot;translate(-0.5 -0.5)&quot;&gt;
            &lt;switch&gt;
                &lt;foreignObject pointer-events=&quot;none&quot; width=&quot;100%&quot; height=&quot;100%&quot; requiredFeatures=&quot;http://www.w3.org/TR/SVG11/feature#Extensibility&quot; style=&quot;overflow: visible; text-align: left;&quot;&gt;
                    &lt;div xmlns=&quot;http://www.w3.org/1999/xhtml&quot; style=&quot;display: flex; align-items: unsafe center; justify-content: unsafe center; width: 86px; height: 1px; padding-top: 637px; margin-left: 522px;&quot;&gt;
                        &lt;div data-drawio-colors=&quot;color: rgb(0, 0, 0); &quot; style=&quot;box-sizing: border-box; font-size: 0px; text-align: center;&quot;&gt;
                            &lt;div style=&quot;display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: none; font-weight: bold; white-space: normal; overflow-wrap: normal;&quot;&gt;
                                Deployed App
                            &lt;/div&gt;
                        &lt;/div&gt;
                    &lt;/div&gt;
                &lt;/foreignObject&gt;
                &lt;text x=&quot;565&quot; y=&quot;641&quot; fill=&quot;rgb(0, 0, 0)&quot; font-family=&quot;Helvetica&quot; font-size=&quot;12px&quot; text-anchor=&quot;middle&quot; font-weight=&quot;bold&quot;&gt;
                    Deployed App
                &lt;/text&gt;
            &lt;/switch&gt;
        &lt;/g&gt;
        &lt;rect x=&quot;508.12&quot; y=&quot;937&quot; width=&quot;410&quot; height=&quot;30&quot; fill=&quot;#d5e8d4&quot; stroke=&quot;#82b366&quot; stroke-width=&quot;3&quot; pointer-events=&quot;none&quot;/&gt;
        &lt;g transform=&quot;translate(-0.5 -0.5)&quot;&gt;
            &lt;switch&gt;
                &lt;foreignObject pointer-events=&quot;none&quot; width=&quot;100%&quot; height=&quot;100%&quot; requiredFeatures=&quot;http://www.w3.org/TR/SVG11/feature#Extensibility&quot; style=&quot;overflow: visible; text-align: left;&quot;&gt;
                    &lt;div xmlns=&quot;http://www.w3.org/1999/xhtml&quot; style=&quot;display: flex; align-items: unsafe center; justify-content: unsafe center; width: 398px; height: 1px; padding-top: 952px; margin-left: 514px;&quot;&gt;
                        &lt;div data-drawio-colors=&quot;color: rgb(0, 0, 0); &quot; style=&quot;box-sizing: border-box; font-size: 0px; text-align: center;&quot;&gt;
                            &lt;div style=&quot;display: inline-block; font-size: 13px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: none; font-weight: bold; white-space: normal; overflow-wrap: normal;&quot;&gt;
                                OS
                            &lt;/div&gt;
                        &lt;/div&gt;
                    &lt;/div&gt;
                &lt;/foreignObject&gt;
                &lt;text x=&quot;713&quot; y=&quot;956&quot; fill=&quot;rgb(0, 0, 0)&quot; font-family=&quot;Helvetica&quot; font-size=&quot;13px&quot; text-anchor=&quot;middle&quot; font-weight=&quot;bold&quot;&gt;
                    OS
                &lt;/text&gt;
            &lt;/switch&gt;
        &lt;/g&gt;
        &lt;rect x=&quot;508.12&quot; y=&quot;907&quot; width=&quot;410&quot; height=&quot;30&quot; fill=&quot;#d5e8d4&quot; stroke=&quot;#82b366&quot; stroke-width=&quot;3&quot; pointer-events=&quot;none&quot;/&gt;
        &lt;g transform=&quot;translate(-0.5 -0.5)&quot;&gt;
            &lt;switch&gt;
                &lt;foreignObject pointer-events=&quot;none&quot; width=&quot;100%&quot; height=&quot;100%&quot; requiredFeatures=&quot;http://www.w3.org/TR/SVG11/feature#Extensibility&quot; style=&quot;overflow: visible; text-align: left;&quot;&gt;
                    &lt;div xmlns=&quot;http://www.w3.org/1999/xhtml&quot; style=&quot;display: flex; align-items: unsafe center; justify-content: unsafe center; width: 398px; height: 1px; padding-top: 922px; margin-left: 514px;&quot;&gt;
                        &lt;div data-drawio-colors=&quot;color: rgb(0, 0, 0); &quot; style=&quot;box-sizing: border-box; font-size: 0px; text-align: center;&quot;&gt;
                            &lt;div style=&quot;display: inline-block; font-size: 10px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: none; font-weight: bold; white-space: normal; overflow-wrap: normal;&quot;&gt;
                                OCI CONTAINER RUNTIME(Docker/Podman/...)
                            &lt;/div&gt;
                        &lt;/div&gt;
                    &lt;/div&gt;
                &lt;/foreignObject&gt;
                &lt;text x=&quot;713&quot; y=&quot;925&quot; fill=&quot;rgb(0, 0, 0)&quot; font-family=&quot;Helvetica&quot; font-size=&quot;10px&quot; text-anchor=&quot;middle&quot; font-weight=&quot;bold&quot;&gt;
                    OCI CONTAINER RUNTIME(Docker/Podman/...)
                &lt;/text&gt;
            &lt;/switch&gt;
        &lt;/g&gt;
        &lt;rect x=&quot;508.12&quot; y=&quot;911.44&quot; width=&quot;87.97&quot; height=&quot;21.12&quot; fill=&quot;#e1d5e7&quot; stroke=&quot;#9673a6&quot; stroke-width=&quot;3&quot; pointer-events=&quot;none&quot;/&gt;
        &lt;g transform=&quot;translate(-0.5 -0.5)&quot;&gt;
            &lt;switch&gt;
                &lt;foreignObject pointer-events=&quot;none&quot; width=&quot;100%&quot; height=&quot;100%&quot; requiredFeatures=&quot;http://www.w3.org/TR/SVG11/feature#Extensibility&quot; style=&quot;overflow: visible; text-align: left;&quot;&gt;
                    &lt;div xmlns=&quot;http://www.w3.org/1999/xhtml&quot; style=&quot;display: flex; align-items: unsafe center; justify-content: unsafe center; width: 86px; height: 1px; padding-top: 922px; margin-left: 509px;&quot;&gt;
                        &lt;div data-drawio-colors=&quot;color: rgb(0, 0, 0); &quot; style=&quot;box-sizing: border-box; font-size: 0px; text-align: center;&quot;&gt;
                            &lt;div style=&quot;display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: none; font-weight: bold; white-space: normal; overflow-wrap: normal;&quot;&gt;
                                Deployed App
                            &lt;/div&gt;
                        &lt;/div&gt;
                    &lt;/div&gt;
                &lt;/foreignObject&gt;
                &lt;text x=&quot;552&quot; y=&quot;926&quot; fill=&quot;rgb(0, 0, 0)&quot; font-family=&quot;Helvetica&quot; font-size=&quot;12px&quot; text-anchor=&quot;middle&quot; font-weight=&quot;bold&quot;&gt;
                    Deployed App
                &lt;/text&gt;
            &lt;/switch&gt;
        &lt;/g&gt;
        &lt;rect x=&quot;1236.84&quot; y=&quot;512&quot; width=&quot;260&quot; height=&quot;30&quot; fill=&quot;#d5e8d4&quot; stroke=&quot;#82b366&quot; stroke-width=&quot;3&quot; pointer-events=&quot;none&quot;/&gt;
        &lt;g transform=&quot;translate(-0.5 -0.5)&quot;&gt;
            &lt;switch&gt;
                &lt;foreignObject pointer-events=&quot;none&quot; width=&quot;100%&quot; height=&quot;100%&quot; requiredFeatures=&quot;http://www.w3.org/TR/SVG11/feature#Extensibility&quot; style=&quot;overflow: visible; text-align: left;&quot;&gt;
                    &lt;div xmlns=&quot;http://www.w3.org/1999/xhtml&quot; style=&quot;display: flex; align-items: unsafe center; justify-content: unsafe center; width: 248px; height: 1px; padding-top: 527px; margin-left: 1243px;&quot;&gt;
                        &lt;div data-drawio-colors=&quot;color: rgb(0, 0, 0); &quot; style=&quot;box-sizing: border-box; font-size: 0px; text-align: center;&quot;&gt;
                            &lt;div style=&quot;display: inline-block; font-size: 13px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: none; font-weight: bold; white-space: normal; overflow-wrap: normal;&quot;&gt;
                                OS
                            &lt;/div&gt;
                        &lt;/div&gt;
                    &lt;/div&gt;
                &lt;/foreignObject&gt;
                &lt;text x=&quot;1367&quot; y=&quot;531&quot; fill=&quot;rgb(0, 0, 0)&quot; font-family=&quot;Helvetica&quot; font-size=&quot;13px&quot; text-anchor=&quot;middle&quot; font-weight=&quot;bold&quot;&gt;
                    OS
                &lt;/text&gt;
            &lt;/switch&gt;
        &lt;/g&gt;
        &lt;rect x=&quot;1236.84&quot; y=&quot;482&quot; width=&quot;260&quot; height=&quot;30&quot; fill=&quot;#d5e8d4&quot; stroke=&quot;#82b366&quot; stroke-width=&quot;3&quot; pointer-events=&quot;none&quot;/&gt;
        &lt;g transform=&quot;translate(-0.5 -0.5)&quot;&gt;
            &lt;switch&gt;
                &lt;foreignObject pointer-events=&quot;none&quot; width=&quot;100%&quot; height=&quot;100%&quot; requiredFeatures=&quot;http://www.w3.org/TR/SVG11/feature#Extensibility&quot; style=&quot;overflow: visible; text-align: left;&quot;&gt;
                    &lt;div xmlns=&quot;http://www.w3.org/1999/xhtml&quot; style=&quot;display: flex; align-items: unsafe center; justify-content: unsafe center; width: 248px; height: 1px; padding-top: 497px; margin-left: 1243px;&quot;&gt;
                        &lt;div data-drawio-colors=&quot;color: rgb(0, 0, 0); &quot; style=&quot;box-sizing: border-box; font-size: 0px; text-align: center;&quot;&gt;
                            &lt;div style=&quot;display: inline-block; font-size: 13px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: none; font-weight: bold; white-space: normal; overflow-wrap: normal;&quot;&gt;
                                OCI CONTAINER RUNTIME
                            &lt;/div&gt;
                        &lt;/div&gt;
                    &lt;/div&gt;
                &lt;/foreignObject&gt;
                &lt;text x=&quot;1367&quot; y=&quot;501&quot; fill=&quot;rgb(0, 0, 0)&quot; font-family=&quot;Helvetica&quot; font-size=&quot;13px&quot; text-anchor=&quot;middle&quot; font-weight=&quot;bold&quot;&gt;
                    OCI CONTAINER RUNTIME
                &lt;/text&gt;
            &lt;/switch&gt;
        &lt;/g&gt;
        &lt;rect x=&quot;1236.84&quot; y=&quot;482&quot; width=&quot;55.79&quot; height=&quot;29.56&quot; fill=&quot;#e1d5e7&quot; stroke=&quot;#9673a6&quot; stroke-width=&quot;3&quot; pointer-events=&quot;none&quot;/&gt;
        &lt;g transform=&quot;translate(-0.5 -0.5)&quot;&gt;
            &lt;switch&gt;
                &lt;foreignObject pointer-events=&quot;none&quot; width=&quot;100%&quot; height=&quot;100%&quot; requiredFeatures=&quot;http://www.w3.org/TR/SVG11/feature#Extensibility&quot; style=&quot;overflow: visible; text-align: left;&quot;&gt;
                    &lt;div xmlns=&quot;http://www.w3.org/1999/xhtml&quot; style=&quot;display: flex; align-items: unsafe center; justify-content: unsafe center; width: 54px; height: 1px; padding-top: 497px; margin-left: 1238px;&quot;&gt;
                        &lt;div data-drawio-colors=&quot;color: rgb(0, 0, 0); &quot; style=&quot;box-sizing: border-box; font-size: 0px; text-align: center;&quot;&gt;
                            &lt;div style=&quot;display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: none; font-weight: bold; white-space: normal; overflow-wrap: normal;&quot;&gt;
                                Deployed App
                            &lt;/div&gt;
                        &lt;/div&gt;
                    &lt;/div&gt;
                &lt;/foreignObject&gt;
                &lt;text x=&quot;1265&quot; y=&quot;500&quot; fill=&quot;rgb(0, 0, 0)&quot; font-family=&quot;Helvetica&quot; font-size=&quot;12px&quot; text-anchor=&quot;middle&quot; font-weight=&quot;bold&quot;&gt;
                    Deployed...
                &lt;/text&gt;
            &lt;/switch&gt;
        &lt;/g&gt;
        &lt;path d=&quot;M 593.59 874.56 L 593.55 886.45 L 651.18 886.45 L 651.18 865.55 L 708.64 865.55 L 708.63 877.33&quot; fill=&quot;none&quot; stroke=&quot;#999999&quot; stroke-width=&quot;2&quot; stroke-miterlimit=&quot;10&quot; pointer-events=&quot;none&quot;/&gt;
        &lt;path d=&quot;M 593.61 868.56 L 597.58 876.57 L 593.59 874.56 L 589.58 876.54 Z&quot; fill=&quot;#999999&quot; stroke=&quot;#999999&quot; stroke-width=&quot;2&quot; stroke-miterlimit=&quot;10&quot; pointer-events=&quot;none&quot;/&gt;
        &lt;path d=&quot;M 708.62 883.33 L 704.63 875.33 L 708.63 877.33 L 712.63 875.34 Z&quot; fill=&quot;#999999&quot; stroke=&quot;#999999&quot; stroke-width=&quot;2&quot; stroke-miterlimit=&quot;10&quot; pointer-events=&quot;none&quot;/&gt;
        &lt;path d=&quot;M 696.12 885.57 C 696.12 894.27 701.72 901.32 708.62 901.32 C 715.52 901.32 721.12 894.27 721.12 885.57 Z&quot; fill=&quot;#f5f5f5&quot; stroke=&quot;#666666&quot; stroke-miterlimit=&quot;10&quot; transform=&quot;rotate(-180,708.62,893.44)&quot; pointer-events=&quot;none&quot;/&gt;
        &lt;path d=&quot;M 581.12 850.57 C 581.12 859.27 586.72 866.32 593.62 866.32 C 600.52 866.32 606.12 859.27 606.12 850.57 Z&quot; fill=&quot;#f5f5f5&quot; stroke=&quot;#666666&quot; stroke-miterlimit=&quot;10&quot; pointer-events=&quot;none&quot;/&gt;
        &lt;path d=&quot;M 920.66 608.06 C 920.66 616.76 926.26 623.81 933.16 623.81 C 940.06 623.81 945.66 616.76 945.66 608.06 Z&quot; fill=&quot;#f5f5f5&quot; stroke=&quot;#666666&quot; stroke-miterlimit=&quot;10&quot; transform=&quot;rotate(270,933.16,615.93)&quot; pointer-events=&quot;none&quot;/&gt;
        &lt;rect x=&quot;1&quot; y=&quot;120&quot; width=&quot;317.25&quot; height=&quot;553.98&quot; fill=&quot;none&quot; stroke=&quot;rgb(0, 0, 0)&quot; stroke-width=&quot;3&quot; pointer-events=&quot;none&quot;/&gt;
        &lt;g transform=&quot;translate(-0.5 -0.5)&quot;&gt;
            &lt;switch&gt;
                &lt;foreignObject pointer-events=&quot;none&quot; width=&quot;100%&quot; height=&quot;100%&quot; requiredFeatures=&quot;http://www.w3.org/TR/SVG11/feature#Extensibility&quot; style=&quot;overflow: visible; text-align: left;&quot;&gt;
                    &lt;div xmlns=&quot;http://www.w3.org/1999/xhtml&quot; style=&quot;display: flex; align-items: unsafe flex-start; justify-content: unsafe center; width: 315px; height: 1px; padding-top: 127px; margin-left: 2px;&quot;&gt;
                        &lt;div data-drawio-colors=&quot;color: rgb(0, 0, 0); &quot; style=&quot;box-sizing: border-box; font-size: 0px; text-align: center;&quot;&gt;
                            &lt;div style=&quot;display: inline-block; font-size: 20px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: none; font-weight: bold; white-space: normal; overflow-wrap: normal;&quot;&gt;
                                LEGEND
                            &lt;/div&gt;
                        &lt;/div&gt;
                    &lt;/div&gt;
                &lt;/foreignObject&gt;
                &lt;text x=&quot;160&quot; y=&quot;147&quot; fill=&quot;rgb(0, 0, 0)&quot; font-family=&quot;Helvetica&quot; font-size=&quot;20px&quot; text-anchor=&quot;middle&quot; font-weight=&quot;bold&quot;&gt;
                    LEGEND
                &lt;/text&gt;
            &lt;/switch&gt;
        &lt;/g&gt;
        &lt;rect x=&quot;24.75&quot; y=&quot;155&quot; width=&quot;40&quot; height=&quot;40&quot; fill=&quot;#e1d5e7&quot; stroke=&quot;#9673a6&quot; stroke-width=&quot;3&quot; pointer-events=&quot;none&quot;/&gt;
        &lt;path d=&quot;M 17.25 458 C 17.25 473.19 29.56 485.5 44.75 485.5 C 59.94 485.5 72.25 473.19 72.25 458 Z&quot; fill=&quot;#0050ef&quot; stroke=&quot;#001dbc&quot; stroke-miterlimit=&quot;10&quot; pointer-events=&quot;none&quot;/&gt;
        &lt;g transform=&quot;translate(-0.5 -0.5)&quot;&gt;
            &lt;switch&gt;
                &lt;foreignObject pointer-events=&quot;none&quot; width=&quot;100%&quot; height=&quot;100%&quot; requiredFeatures=&quot;http://www.w3.org/TR/SVG11/feature#Extensibility&quot; style=&quot;overflow: visible; text-align: left;&quot;&gt;
                    &lt;div xmlns=&quot;http://www.w3.org/1999/xhtml&quot; style=&quot;display: flex; align-items: unsafe center; justify-content: unsafe flex-start; width: 241px; height: 1px; padding-top: 175px; margin-left: 83px;&quot;&gt;
                        &lt;div data-drawio-colors=&quot;color: rgb(0, 0, 0); &quot; style=&quot;box-sizing: border-box; font-size: 0px; text-align: left;&quot;&gt;
                            &lt;div style=&quot;display: inline-block; font-size: 17px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: none; white-space: normal; overflow-wrap: normal;&quot;&gt;
                                App Developer
                                &lt;br style=&quot;font-size: 17px;&quot;/&gt;
                                Private
                            &lt;/div&gt;
                        &lt;/div&gt;
                    &lt;/div&gt;
                &lt;/foreignObject&gt;
                &lt;text x=&quot;83&quot; y=&quot;180&quot; fill=&quot;rgb(0, 0, 0)&quot; font-family=&quot;Helvetica&quot; font-size=&quot;17px&quot;&gt;
                    App Developer...
                &lt;/text&gt;
            &lt;/switch&gt;
        &lt;/g&gt;
        &lt;g transform=&quot;translate(-0.5 -0.5)&quot;&gt;
            &lt;switch&gt;
                &lt;foreignObject pointer-events=&quot;none&quot; width=&quot;100%&quot; height=&quot;100%&quot; requiredFeatures=&quot;http://www.w3.org/TR/SVG11/feature#Extensibility&quot; style=&quot;overflow: visible; text-align: left;&quot;&gt;
                    &lt;div xmlns=&quot;http://www.w3.org/1999/xhtml&quot; style=&quot;display: flex; align-items: unsafe center; justify-content: unsafe flex-start; width: 241px; height: 1px; padding-top: 472px; margin-left: 83px;&quot;&gt;
                        &lt;div data-drawio-colors=&quot;color: rgb(0, 0, 0); &quot; style=&quot;box-sizing: border-box; font-size: 0px; text-align: left;&quot;&gt;
                            &lt;div style=&quot;display: inline-block; font-size: 17px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: none; white-space: normal; overflow-wrap: normal;&quot;&gt;
                                Margo Envisioned Communication Mechanisms
                            &lt;/div&gt;
                        &lt;/div&gt;
                    &lt;/div&gt;
                &lt;/foreignObject&gt;
                &lt;text x=&quot;83&quot; y=&quot;477&quot; fill=&quot;rgb(0, 0, 0)&quot; font-family=&quot;Helvetica&quot; font-size=&quot;17px&quot;&gt;
                    Margo Envisioned Communicatio...
                &lt;/text&gt;
            &lt;/switch&gt;
        &lt;/g&gt;
        &lt;rect x=&quot;24.75&quot; y=&quot;303&quot; width=&quot;40&quot; height=&quot;40&quot; fill=&quot;#d5e8d4&quot; stroke=&quot;#82b366&quot; stroke-width=&quot;3&quot; pointer-events=&quot;none&quot;/&gt;
        &lt;g transform=&quot;translate(-0.5 -0.5)&quot;&gt;
            &lt;switch&gt;
                &lt;foreignObject pointer-events=&quot;none&quot; width=&quot;100%&quot; height=&quot;100%&quot; requiredFeatures=&quot;http://www.w3.org/TR/SVG11/feature#Extensibility&quot; style=&quot;overflow: visible; text-align: left;&quot;&gt;
                    &lt;div xmlns=&quot;http://www.w3.org/1999/xhtml&quot; style=&quot;display: flex; align-items: unsafe center; justify-content: unsafe flex-start; width: 241px; height: 1px; padding-top: 323px; margin-left: 83px;&quot;&gt;
                        &lt;div data-drawio-colors=&quot;color: rgb(0, 0, 0); &quot; style=&quot;box-sizing: border-box; font-size: 0px; text-align: left;&quot;&gt;
                            &lt;div style=&quot;display: inline-block; font-size: 17px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: none; white-space: normal; overflow-wrap: normal;&quot;&gt;
                                Device Manufacturer
                                &lt;br style=&quot;font-size: 17px;&quot;/&gt;
                                Private
                            &lt;/div&gt;
                        &lt;/div&gt;
                    &lt;/div&gt;
                &lt;/foreignObject&gt;
                &lt;text x=&quot;83&quot; y=&quot;328&quot; fill=&quot;rgb(0, 0, 0)&quot; font-family=&quot;Helvetica&quot; font-size=&quot;17px&quot;&gt;
                    Device Manufacturer...
                &lt;/text&gt;
            &lt;/switch&gt;
        &lt;/g&gt;
        &lt;rect x=&quot;23.5&quot; y=&quot;229&quot; width=&quot;42.5&quot; height=&quot;40&quot; fill=&quot;#fff2cc&quot; stroke=&quot;#d6b656&quot; stroke-width=&quot;3&quot; pointer-events=&quot;none&quot;/&gt;
        &lt;g transform=&quot;translate(-0.5 -0.5)&quot;&gt;
            &lt;switch&gt;
                &lt;foreignObject pointer-events=&quot;none&quot; width=&quot;100%&quot; height=&quot;100%&quot; requiredFeatures=&quot;http://www.w3.org/TR/SVG11/feature#Extensibility&quot; style=&quot;overflow: visible; text-align: left;&quot;&gt;
                    &lt;div xmlns=&quot;http://www.w3.org/1999/xhtml&quot; style=&quot;display: flex; align-items: unsafe center; justify-content: unsafe flex-start; width: 241px; height: 1px; padding-top: 249px; margin-left: 83px;&quot;&gt;
                        &lt;div data-drawio-colors=&quot;color: rgb(0, 0, 0); &quot; style=&quot;box-sizing: border-box; font-size: 0px; text-align: left;&quot;&gt;
                            &lt;div style=&quot;display: inline-block; font-size: 17px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: none; white-space: normal; overflow-wrap: normal;&quot;&gt;
                                Orchestration Management Platform Provider
                            &lt;/div&gt;
                        &lt;/div&gt;
                    &lt;/div&gt;
                &lt;/foreignObject&gt;
                &lt;text x=&quot;83&quot; y=&quot;254&quot; fill=&quot;rgb(0, 0, 0)&quot; font-family=&quot;Helvetica&quot; font-size=&quot;17px&quot;&gt;
                    Orchestration Management Plat...
                &lt;/text&gt;
            &lt;/switch&gt;
        &lt;/g&gt;
        &lt;path d=&quot;M 24.75 590.39 L 44.75 590.39 L 64.75 610.39 L 64.75 650.39 L 24.75 650.39 L 24.75 590.39 Z&quot; fill=&quot;#dae8fc&quot; stroke=&quot;#6c8ebf&quot; stroke-width=&quot;3&quot; stroke-miterlimit=&quot;10&quot; pointer-events=&quot;none&quot;/&gt;
        &lt;path d=&quot;M 44.75 590.39 L 44.75 610.39 L 64.75 610.39 Z&quot; fill-opacity=&quot;0.05&quot; fill=&quot;#000000&quot; stroke=&quot;none&quot; pointer-events=&quot;none&quot;/&gt;
        &lt;path d=&quot;M 44.75 590.39 L 44.75 610.39 L 64.75 610.39&quot; fill=&quot;none&quot; stroke=&quot;#6c8ebf&quot; stroke-width=&quot;3&quot; stroke-miterlimit=&quot;10&quot; pointer-events=&quot;none&quot;/&gt;
        &lt;g transform=&quot;translate(-0.5 -0.5)&quot;&gt;
            &lt;switch&gt;
                &lt;foreignObject pointer-events=&quot;none&quot; width=&quot;100%&quot; height=&quot;100%&quot; requiredFeatures=&quot;http://www.w3.org/TR/SVG11/feature#Extensibility&quot; style=&quot;overflow: visible; text-align: left;&quot;&gt;
                    &lt;div xmlns=&quot;http://www.w3.org/1999/xhtml&quot; style=&quot;display: flex; align-items: unsafe flex-end; justify-content: unsafe center; width: 38px; height: 1px; padding-top: 647px; margin-left: 26px;&quot;&gt;
                        &lt;div data-drawio-colors=&quot;color: #004C99; &quot; style=&quot;box-sizing: border-box; font-size: 0px; text-align: center;&quot;&gt;
                            &lt;div style=&quot;display: inline-block; font-size: 13px; font-family: Helvetica; color: rgb(0, 76, 153); line-height: 1.2; pointer-events: none; font-weight: bold; white-space: normal; overflow-wrap: normal;&quot;&gt;
                                xxxxx
                            &lt;/div&gt;
                        &lt;/div&gt;
                    &lt;/div&gt;
                &lt;/foreignObject&gt;
                &lt;text x=&quot;45&quot; y=&quot;647&quot; fill=&quot;#004C99&quot; font-family=&quot;Helvetica&quot; font-size=&quot;13px&quot; text-anchor=&quot;middle&quot; font-weight=&quot;bold&quot;&gt;
                    xxxxx
                &lt;/text&gt;
            &lt;/switch&gt;
        &lt;/g&gt;
        &lt;g transform=&quot;translate(-0.5 -0.5)&quot;&gt;
            &lt;switch&gt;
                &lt;foreignObject pointer-events=&quot;none&quot; width=&quot;100%&quot; height=&quot;100%&quot; requiredFeatures=&quot;http://www.w3.org/TR/SVG11/feature#Extensibility&quot; style=&quot;overflow: visible; text-align: left;&quot;&gt;
                    &lt;div xmlns=&quot;http://www.w3.org/1999/xhtml&quot; style=&quot;display: flex; align-items: unsafe center; justify-content: unsafe flex-start; width: 241px; height: 1px; padding-top: 625px; margin-left: 83px;&quot;&gt;
                        &lt;div data-drawio-colors=&quot;color: rgb(0, 0, 0); &quot; style=&quot;box-sizing: border-box; font-size: 0px; text-align: left;&quot;&gt;
                            &lt;div style=&quot;display: inline-block; font-size: 17px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: none; white-space: normal; overflow-wrap: normal;&quot;&gt;
                                Margo Defined File format
                            &lt;/div&gt;
                        &lt;/div&gt;
                    &lt;/div&gt;
                &lt;/foreignObject&gt;
                &lt;text x=&quot;83&quot; y=&quot;630&quot; fill=&quot;rgb(0, 0, 0)&quot; font-family=&quot;Helvetica&quot; font-size=&quot;17px&quot;&gt;
                    Margo Defined File format
                &lt;/text&gt;
            &lt;/switch&gt;
        &lt;/g&gt;
        &lt;path d=&quot;M 17.25 532 C 17.25 547.19 29.56 559.5 44.75 559.5 C 59.94 559.5 72.25 547.19 72.25 532 Z&quot; fill=&quot;#f5f5f5&quot; stroke=&quot;#666666&quot; stroke-miterlimit=&quot;10&quot; pointer-events=&quot;none&quot;/&gt;
        &lt;g transform=&quot;translate(-0.5 -0.5)&quot;&gt;
            &lt;switch&gt;
                &lt;foreignObject pointer-events=&quot;none&quot; width=&quot;100%&quot; height=&quot;100%&quot; requiredFeatures=&quot;http://www.w3.org/TR/SVG11/feature#Extensibility&quot; style=&quot;overflow: visible; text-align: left;&quot;&gt;
                    &lt;div xmlns=&quot;http://www.w3.org/1999/xhtml&quot; style=&quot;display: flex; align-items: unsafe center; justify-content: unsafe flex-start; width: 241px; height: 1px; padding-top: 546px; margin-left: 83px;&quot;&gt;
                        &lt;div data-drawio-colors=&quot;color: rgb(0, 0, 0); &quot; style=&quot;box-sizing: border-box; font-size: 0px; text-align: left;&quot;&gt;
                            &lt;div style=&quot;display: inline-block; font-size: 17px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: none; white-space: normal; overflow-wrap: normal;&quot;&gt;
                                Communication Mechanisms  Not defined via Margo
                            &lt;/div&gt;
                        &lt;/div&gt;
                    &lt;/div&gt;
                &lt;/foreignObject&gt;
                &lt;text x=&quot;83&quot; y=&quot;551&quot; fill=&quot;rgb(0, 0, 0)&quot; font-family=&quot;Helvetica&quot; font-size=&quot;17px&quot;&gt;
                    Communication Mechanisms  Not...
                &lt;/text&gt;
            &lt;/switch&gt;
        &lt;/g&gt;
        &lt;rect x=&quot;24.75&quot; y=&quot;378&quot; width=&quot;40&quot; height=&quot;40&quot; fill=&quot;#f5f5f5&quot; stroke=&quot;#666666&quot; stroke-width=&quot;3&quot; pointer-events=&quot;none&quot;/&gt;
        &lt;g transform=&quot;translate(-0.5 -0.5)&quot;&gt;
            &lt;switch&gt;
                &lt;foreignObject pointer-events=&quot;none&quot; width=&quot;100%&quot; height=&quot;100%&quot; requiredFeatures=&quot;http://www.w3.org/TR/SVG11/feature#Extensibility&quot; style=&quot;overflow: visible; text-align: left;&quot;&gt;
                    &lt;div xmlns=&quot;http://www.w3.org/1999/xhtml&quot; style=&quot;display: flex; align-items: unsafe center; justify-content: unsafe flex-start; width: 241px; height: 1px; padding-top: 398px; margin-left: 83px;&quot;&gt;
                        &lt;div data-drawio-colors=&quot;color: rgb(0, 0, 0); &quot; style=&quot;box-sizing: border-box; font-size: 0px; text-align: left;&quot;&gt;
                            &lt;div style=&quot;display: inline-block; font-size: 17px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: none; white-space: normal; overflow-wrap: normal;&quot;&gt;
                                Observability Platform
                                &lt;br/&gt;
                                Provider
                            &lt;/div&gt;
                        &lt;/div&gt;
                    &lt;/div&gt;
                &lt;/foreignObject&gt;
                &lt;text x=&quot;83&quot; y=&quot;403&quot; fill=&quot;rgb(0, 0, 0)&quot; font-family=&quot;Helvetica&quot; font-size=&quot;17px&quot;&gt;
                    Observability Platform...
                &lt;/text&gt;
            &lt;/switch&gt;
        &lt;/g&gt;
    &lt;/g&gt;
    &lt;switch&gt;
        &lt;g requiredFeatures=&quot;http://www.w3.org/TR/SVG11/feature#Extensibility&quot;/&gt;
        &lt;a transform=&quot;translate(0,-5)&quot; xlink:href=&quot;https://www.diagrams.net/doc/faq/svg-export-text-problems&quot; target=&quot;_blank&quot;&gt;
            &lt;text text-anchor=&quot;middle&quot; font-size=&quot;10px&quot; x=&quot;50%&quot; y=&quot;100%&quot;&gt;
                Text is not SVG - cannot display
            &lt;/text&gt;
        &lt;/a&gt;
    &lt;/switch&gt;
&lt;/svg&gt;&lt;/div&gt;
&lt;/p&gt;
&lt;/div&gt;


&lt;p&gt;
项目官网地址：&lt;a href=&quot;https://margo.org&quot;&gt;https://margo.org&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
顺便说一下，margo 是拉丁语中的边缘的意思。
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>单词本：decimate</title>
   <link href="http://kimi.im/2024-05-15-decimate"/>
   <updated>2024-05-15T00:00:00+00:00</updated>
   <id>http://kimi.im/decimate</id>
   <content type="html">&lt;p&gt;
Yuval Noah Harari 的《人类简史》(&lt;a href=&quot;#citeproc_bib_item_2&quot;&gt;&lt;i&gt;Sapiens: A Brief History of Humankind&lt;/i&gt; 2014&lt;/a&gt;) 中谈及货币的产生过程以及以物易物时代。设想一个场景，如果因为疫情，牲畜大量病死，皮草就变得稀少，这时候怎么设定定价物就不容易了。
&lt;/p&gt;

&lt;p&gt;
Besides, in recent weeks a disease has &lt;b&gt;decimated&lt;/b&gt; the focks around
town, and skins are becoming scarce.
&lt;/p&gt;

&lt;p&gt;
这里， decimate 是大肆杀戮的意思。而 decimate 看起来和 decimal 很像，而 decimal 则是十进制，源于拉丁语 decimalis 。而 decimus是第十的意思，
decem 则是十的意思。
&lt;/p&gt;

&lt;p&gt;
那么，为什么 decimate 是大肆杀戮呢？
&lt;/p&gt;

&lt;p&gt;
原来古罗马对叛军或征服的城市会实施 decimatus 惩罚。而 decimatus 就是说是个人里面要找出一个人杀掉，即十抽一杀掉。
&lt;/p&gt;

&lt;p&gt;
所以， decimate 的几个意思，都和十抽一相关：
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;从十个里抽一个，本意。&lt;/li&gt;
&lt;li&gt;大批杀死、大量毁灭。这是后来传播的时候对十抽一杀死的误解，变而成为大量杀死。其实本意是少量杀死么。&lt;/li&gt;
&lt;li&gt;征收。这可能和古代的十一税有关，即十份收成征收一份税。&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
比如：
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;In the New World, European colonists initially enslaved Native
Americans, &lt;b&gt;decimating&lt;/b&gt; the indigenous(土生土长的) populations to
one-tenth(这里说欧洲殖民者屠杀了9/10的土著，远远超过了 decimate 十抽一屠杀的数量。所以这里 decimate 就是大批杀死的意思) of their
original sizes.&lt;/li&gt;
&lt;li&gt;African slaves were needed to replace Native American populations
that had been &lt;b&gt;decimated&lt;/b&gt; (literally reduced to one-tenth their size)
by European conquest.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
再比如，美国有个Section 230法案，It is a law that protects online
platforms from liability for user posts and moderation decisions. 最近有讨论要废弃这个法案，意味着小的在线企业要支付大笔法律顾问费用。所以有新闻这么写：
&lt;/p&gt;

&lt;p&gt;
Sunsetting Competition: Scraping Section 230 Would &lt;b&gt;Decimate&lt;/b&gt; Small
Tech, Discourage Free Speech Online &lt;sup&gt;&lt;a id=&quot;fnr.1&quot; class=&quot;footref&quot; href=&quot;#fn.1&quot; role=&quot;doc-backlink&quot;&gt;1&lt;/a&gt;&lt;/sup&gt;
&lt;/p&gt;

&lt;p&gt;
这里 decimate 指的是会消灭大批小技术企业。
&lt;/p&gt;

&lt;p&gt;
Israel and Hamas have been entrenched in a deadly war since that has
&lt;b&gt;decimated&lt;/b&gt; Gaza; more than 34,500 Palestinians have been killed, per
the AP, and more than 1,700 people in Israel have been killed, per ABC
News. &amp;#x2013; Michael Saponara, Billboard, 7 May 2024
&lt;/p&gt;

&lt;p&gt;
这里说以色列哈马斯战争导致加沙地区人口大量死亡。
&lt;/p&gt;

&lt;p&gt;
另外，我们还要区分 annihilate 和 decimate 的区别。正如前面说的，
decimate 是一种十抽一的惩罚机制，所以不是完全消灭。而 annihilate 则是完全消灭，完全歼灭的意思。注意区分两者的区别。
&lt;/p&gt;

&lt;p&gt;
比如 annihilate 往往后面跟着 entire 或 all，表示完全消灭。
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;The bomb was powerful enough to &lt;b&gt;annihilate&lt;/b&gt; the entire city.&lt;/li&gt;
&lt;li&gt;The disease threatened to &lt;b&gt;annihilate&lt;/b&gt; the entire population.&lt;/li&gt;
&lt;li&gt;The army was ordered to &lt;b&gt;annihilate&lt;/b&gt; the enemy forces.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
而 decimate 往往跟着消灭数量的比例：
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;The hurricane &lt;b&gt;decimated&lt;/b&gt; the coastal town, leaving only 10% of the
buildings standing.&lt;/li&gt;
&lt;li&gt;The virus &lt;b&gt;decimated&lt;/b&gt; the population, killing 50% of the infected
individuals.&lt;/li&gt;
&lt;li&gt;The economic crisis &lt;b&gt;decimated&lt;/b&gt; the company’s profits, reducing them
by 90%.&lt;/li&gt;
&lt;li&gt;In late 2019 and early 2020, Australia was facing one of its worst
bushfire seasons in living memory.  The states of Queensland, New
South Wales, Victoria and South Australia experienced weeks and
months of massive bushfires. Many lives and a huge amount of
property were lost, and wildlife was
&lt;b&gt;decimated&lt;/b&gt;. (&lt;a href=&quot;#citeproc_bib_item_1&quot;&gt;&lt;i&gt;Political Leadership in Disaster and Crisis Communication and Management International Perspectives and Practices&lt;/i&gt; 2020&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
另外，在统计学和信号采样技术中，有个术语叫 decimate ，它的意思是下采样（ downsampling ），或者说是减少采样点，比如，我们可以在 R语言里调用这个函数进行下采样，蓝色线条就是 decimate 之后的效果：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-R&quot;&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;# &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;install.packages(&apos;signal&apos;, repos = &quot;http://cran.r-project.org&quot;)&lt;/span&gt;
&lt;span style=&quot;color: #110099;&quot;&gt;library&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #2A00FF;&quot;&gt;&apos;signal&apos;&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
t &lt;span style=&quot;color: #110099;&quot;&gt;&amp;lt;-&lt;/span&gt; seq&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;0, 2, by = 0.01&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
x &lt;span style=&quot;color: #110099;&quot;&gt;&amp;lt;-&lt;/span&gt; chirp&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;t, 2, 0.5, 10, &lt;span style=&quot;color: #2A00FF;&quot;&gt;&apos;quadratic&apos;&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt; + sin&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;2*pi*t*0.4&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
y &lt;span style=&quot;color: #110099;&quot;&gt;&amp;lt;-&lt;/span&gt; decimate&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;x, 4&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;# &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;factor of 4 decimation&lt;/span&gt;
plot&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;t, x, type = &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;l&quot;&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
lines&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;t&lt;span style=&quot;color: #7388d6;&quot;&gt;[&lt;/span&gt;seq&lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;1, length&lt;span style=&quot;color: #709870;&quot;&gt;(&lt;/span&gt;t&lt;span style=&quot;color: #709870;&quot;&gt;)&lt;/span&gt;, by = 4&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;]&lt;/span&gt;, y, col = &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;blue&quot;&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;


&lt;div id=&quot;orgb44b631&quot; class=&quot;figure&quot;&gt;
&lt;p&gt;&lt;div align=&quot;center&quot;&gt;&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; xmlns:xlink=&quot;http://www.w3.org/1999/xlink&quot;  viewBox=&quot;0 0 504 504&quot;&gt;
&lt;defs&gt;
&lt;g&gt;
&lt;g id=&quot;glyph-0-0&quot;&gt;
&lt;path d=&quot;M 3.25 -8.390625 C 4.332031 -8.390625 5.117188 -7.941406 5.609375 -7.046875 C 5.984375 -6.359375 6.171875 -5.410156 6.171875 -4.203125 C 6.171875 -3.066406 6 -2.125 5.65625 -1.375 C 5.164062 -0.300781 4.359375 0.234375 3.234375 0.234375 C 2.234375 0.234375 1.484375 -0.203125 0.984375 -1.078125 C 0.578125 -1.816406 0.375 -2.800781 0.375 -4.03125 C 0.375 -4.976562 0.5 -5.796875 0.75 -6.484375 C 1.207031 -7.753906 2.039062 -8.390625 3.25 -8.390625 Z M 3.234375 -0.734375 C 3.785156 -0.734375 4.222656 -0.972656 4.546875 -1.453125 C 4.867188 -1.941406 5.03125 -2.847656 5.03125 -4.171875 C 5.03125 -5.117188 4.910156 -5.898438 4.671875 -6.515625 C 4.441406 -7.128906 3.988281 -7.4375 3.3125 -7.4375 C 2.6875 -7.4375 2.226562 -7.144531 1.9375 -6.5625 C 1.65625 -5.976562 1.515625 -5.117188 1.515625 -3.984375 C 1.515625 -3.128906 1.609375 -2.441406 1.796875 -1.921875 C 2.078125 -1.128906 2.554688 -0.734375 3.234375 -0.734375 Z M 3.234375 -0.734375 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-0-1&quot;&gt;
&lt;path d=&quot;M 1.03125 -1.28125 L 2.25 -1.28125 L 2.25 0 L 1.03125 0 Z M 1.03125 -1.28125 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-0-2&quot;&gt;
&lt;path d=&quot;M 1.484375 -2.140625 C 1.554688 -1.535156 1.835938 -1.117188 2.328125 -0.890625 C 2.578125 -0.773438 2.863281 -0.71875 3.1875 -0.71875 C 3.8125 -0.71875 4.273438 -0.914062 4.578125 -1.3125 C 4.878906 -1.707031 5.03125 -2.148438 5.03125 -2.640625 C 5.03125 -3.222656 4.847656 -3.675781 4.484375 -4 C 4.128906 -4.320312 3.703125 -4.484375 3.203125 -4.484375 C 2.835938 -4.484375 2.523438 -4.410156 2.265625 -4.265625 C 2.003906 -4.128906 1.785156 -3.9375 1.609375 -3.6875 L 0.6875 -3.734375 L 1.328125 -8.25 L 5.6875 -8.25 L 5.6875 -7.234375 L 2.125 -7.234375 L 1.765625 -4.90625 C 1.960938 -5.050781 2.148438 -5.160156 2.328125 -5.234375 C 2.640625 -5.359375 3 -5.421875 3.40625 -5.421875 C 4.175781 -5.421875 4.828125 -5.171875 5.359375 -4.671875 C 5.898438 -4.179688 6.171875 -3.554688 6.171875 -2.796875 C 6.171875 -2.003906 5.921875 -1.300781 5.421875 -0.6875 C 4.929688 -0.0820312 4.148438 0.21875 3.078125 0.21875 C 2.398438 0.21875 1.796875 0.0234375 1.265625 -0.359375 C 0.742188 -0.742188 0.453125 -1.335938 0.390625 -2.140625 Z M 1.484375 -2.140625 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-0-3&quot;&gt;
&lt;path d=&quot;M 1.15625 -5.9375 L 1.15625 -6.75 C 1.914062 -6.820312 2.441406 -6.945312 2.734375 -7.125 C 3.035156 -7.300781 3.265625 -7.710938 3.421875 -8.359375 L 4.25 -8.359375 L 4.25 0 L 3.125 0 L 3.125 -5.9375 Z M 1.15625 -5.9375 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-0-4&quot;&gt;
&lt;path d=&quot;M 0.375 0 C 0.414062 -0.71875 0.566406 -1.34375 0.828125 -1.875 C 1.085938 -2.414062 1.59375 -2.90625 2.34375 -3.34375 L 3.46875 -4 C 3.96875 -4.289062 4.320312 -4.539062 4.53125 -4.75 C 4.851562 -5.070312 5.015625 -5.441406 5.015625 -5.859375 C 5.015625 -6.347656 4.863281 -6.734375 4.5625 -7.015625 C 4.269531 -7.304688 3.882812 -7.453125 3.40625 -7.453125 C 2.675781 -7.453125 2.175781 -7.179688 1.90625 -6.640625 C 1.75 -6.335938 1.664062 -5.929688 1.65625 -5.421875 L 0.578125 -5.421875 C 0.585938 -6.148438 0.722656 -6.742188 0.984375 -7.203125 C 1.441406 -8.015625 2.25 -8.421875 3.40625 -8.421875 C 4.363281 -8.421875 5.0625 -8.160156 5.5 -7.640625 C 5.945312 -7.117188 6.171875 -6.539062 6.171875 -5.90625 C 6.171875 -5.238281 5.9375 -4.664062 5.46875 -4.1875 C 5.195312 -3.90625 4.707031 -3.566406 4 -3.171875 L 3.1875 -2.734375 C 2.8125 -2.523438 2.515625 -2.320312 2.296875 -2.125 C 1.898438 -1.789062 1.648438 -1.414062 1.546875 -1 L 6.140625 -1 L 6.140625 0 Z M 0.375 0 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-0-5&quot;&gt;
&lt;path d=&quot;M 0.984375 -8.03125 L 2.046875 -8.03125 L 2.046875 -6.28125 L 3.046875 -6.28125 L 3.046875 -5.421875 L 2.046875 -5.421875 L 2.046875 -1.3125 C 2.046875 -1.09375 2.125 -0.945312 2.28125 -0.875 C 2.351562 -0.832031 2.488281 -0.8125 2.6875 -0.8125 C 2.738281 -0.8125 2.789062 -0.8125 2.84375 -0.8125 C 2.90625 -0.820312 2.972656 -0.828125 3.046875 -0.828125 L 3.046875 0 C 2.929688 0.03125 2.804688 0.0507812 2.671875 0.0625 C 2.546875 0.0820312 2.40625 0.09375 2.25 0.09375 C 1.757812 0.09375 1.425781 -0.03125 1.25 -0.28125 C 1.070312 -0.53125 0.984375 -0.859375 0.984375 -1.265625 L 0.984375 -5.421875 L 0.140625 -5.421875 L 0.140625 -6.28125 L 0.984375 -6.28125 Z M 0.984375 -8.03125 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-1-0&quot;&gt;
&lt;path d=&quot;M -3.890625 -0.5 L -3.890625 -3.4375 L -2.796875 -3.4375 L -2.796875 -0.5 Z M -3.890625 -0.5 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-1-1&quot;&gt;
&lt;path d=&quot;M 0 -0.375 C -0.71875 -0.414062 -1.34375 -0.566406 -1.875 -0.828125 C -2.414062 -1.085938 -2.90625 -1.59375 -3.34375 -2.34375 L -4 -3.46875 C -4.289062 -3.96875 -4.539062 -4.320312 -4.75 -4.53125 C -5.070312 -4.851562 -5.441406 -5.015625 -5.859375 -5.015625 C -6.347656 -5.015625 -6.734375 -4.863281 -7.015625 -4.5625 C -7.304688 -4.269531 -7.453125 -3.882812 -7.453125 -3.40625 C -7.453125 -2.675781 -7.179688 -2.175781 -6.640625 -1.90625 C -6.335938 -1.75 -5.929688 -1.664062 -5.421875 -1.65625 L -5.421875 -0.578125 C -6.148438 -0.585938 -6.742188 -0.722656 -7.203125 -0.984375 C -8.015625 -1.441406 -8.421875 -2.25 -8.421875 -3.40625 C -8.421875 -4.363281 -8.160156 -5.0625 -7.640625 -5.5 C -7.117188 -5.945312 -6.539062 -6.171875 -5.90625 -6.171875 C -5.238281 -6.171875 -4.664062 -5.9375 -4.1875 -5.46875 C -3.90625 -5.195312 -3.566406 -4.707031 -3.171875 -4 L -2.734375 -3.1875 C -2.523438 -2.8125 -2.320312 -2.515625 -2.125 -2.296875 C -1.789062 -1.898438 -1.414062 -1.648438 -1 -1.546875 L -1 -6.140625 L 0 -6.140625 Z M 0 -0.375 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-1-2&quot;&gt;
&lt;path d=&quot;M -5.9375 -1.15625 L -6.75 -1.15625 C -6.820312 -1.914062 -6.945312 -2.441406 -7.125 -2.734375 C -7.300781 -3.035156 -7.710938 -3.265625 -8.359375 -3.421875 L -8.359375 -4.25 L 0 -4.25 L 0 -3.125 L -5.9375 -3.125 Z M -5.9375 -1.15625 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-1-3&quot;&gt;
&lt;path d=&quot;M -8.390625 -3.25 C -8.390625 -4.332031 -7.941406 -5.117188 -7.046875 -5.609375 C -6.359375 -5.984375 -5.410156 -6.171875 -4.203125 -6.171875 C -3.066406 -6.171875 -2.125 -6 -1.375 -5.65625 C -0.300781 -5.164062 0.234375 -4.359375 0.234375 -3.234375 C 0.234375 -2.234375 -0.203125 -1.484375 -1.078125 -0.984375 C -1.816406 -0.578125 -2.800781 -0.375 -4.03125 -0.375 C -4.976562 -0.375 -5.796875 -0.5 -6.484375 -0.75 C -7.753906 -1.207031 -8.390625 -2.039062 -8.390625 -3.25 Z M -0.734375 -3.234375 C -0.734375 -3.785156 -0.972656 -4.222656 -1.453125 -4.546875 C -1.941406 -4.867188 -2.847656 -5.03125 -4.171875 -5.03125 C -5.117188 -5.03125 -5.898438 -4.910156 -6.515625 -4.671875 C -7.128906 -4.441406 -7.4375 -3.988281 -7.4375 -3.3125 C -7.4375 -2.6875 -7.144531 -2.226562 -6.5625 -1.9375 C -5.976562 -1.65625 -5.117188 -1.515625 -3.984375 -1.515625 C -3.128906 -1.515625 -2.441406 -1.609375 -1.921875 -1.796875 C -1.128906 -2.078125 -0.734375 -2.554688 -0.734375 -3.234375 Z M -0.734375 -3.234375 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-1-4&quot;&gt;
&lt;path d=&quot;M -6.28125 -0.171875 L -6.28125 -1.546875 L -4.0625 -2.984375 L -6.28125 -4.4375 L -6.25 -5.71875 L -3.21875 -3.609375 L 0 -5.8125 L 0 -4.46875 L -2.359375 -2.90625 L 0 -1.40625 L 0 -0.0625 L -3.21875 -2.28125 Z M -6.28125 -0.171875 &quot;/&gt;
&lt;/g&gt;
&lt;/g&gt;
&lt;/defs&gt;
&lt;rect x=&quot;-50.4&quot; y=&quot;-50.4&quot; width=&quot;604.8&quot; height=&quot;604.8&quot; fill=&quot;rgb(100%, 100%, 100%)&quot; fill-opacity=&quot;1&quot;/&gt;
&lt;path fill=&quot;none&quot; stroke-width=&quot;0.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; stroke=&quot;rgb(0%, 0%, 0%)&quot; stroke-opacity=&quot;1&quot; stroke-miterlimit=&quot;10&quot; d=&quot;M 74.398438 157.910156 L 76.320312 156.421875 L 78.238281 156.296875 L 80.160156 157.527344 L 82.078125 160.105469 L 84 164.007812 L 85.921875 169.203125 L 87.839844 175.648438 L 89.761719 183.273438 L 91.679688 191.984375 L 93.601562 201.660156 L 95.519531 212.125 L 97.441406 223.175781 L 99.359375 234.546875 L 101.28125 245.910156 L 103.199219 256.882812 L 105.121094 267.023438 L 107.039062 275.824219 L 108.960938 282.742188 L 110.878906 287.199219 L 112.800781 288.628906 L 114.71875 286.507812 L 116.640625 280.402344 L 118.558594 270.039062 L 120.480469 255.375 L 122.398438 236.671875 L 124.320312 214.558594 L 126.238281 190.082031 L 128.160156 164.738281 L 130.078125 140.417969 L 132 119.320312 L 133.921875 103.761719 L 135.839844 95.90625 L 137.761719 97.414062 L 139.679688 109.039062 L 141.601562 130.246094 L 143.519531 158.941406 L 145.441406 191.382812 L 147.359375 222.433594 L 149.28125 246.222656 L 151.199219 257.179688 L 153.121094 251.417969 L 155.039062 228.117188 L 156.960938 190.554688 L 158.878906 146.328125 L 160.800781 106.238281 L 162.71875 81.84375 L 164.640625 81.847656 L 166.558594 108.398438 L 168.480469 154.667969 L 170.398438 205.308594 L 172.320312 240.71875 L 174.238281 244.550781 L 176.160156 211.976562 L 178.078125 154.660156 L 180 98.519531 L 181.921875 72.800781 L 183.839844 94.113281 L 185.761719 153.6875 L 187.679688 217.628906 L 189.601562 244.394531 L 191.519531 212.535156 L 193.441406 140.589844 L 195.359375 80.464844 L 197.28125 81.34375 L 199.199219 146.902344 L 201.121094 223.589844 L 203.039062 240.882812 L 204.960938 178.128906 L 206.878906 94.621094 L 208.800781 78.902344 L 210.71875 153.21875 L 212.640625 236.359375 L 214.558594 227.59375 L 216.480469 133.582031 L 218.398438 75.796875 L 220.320312 137.402344 L 222.238281 236.390625 L 224.160156 226.613281 L 226.078125 119.386719 L 228 86.121094 L 229.921875 187.867188 L 231.839844 253.644531 L 233.761719 164.207031 L 235.679688 83.882812 L 237.601562 171.714844 L 239.519531 258.839844 L 241.441406 166.167969 L 243.359375 90.136719 L 245.28125 202.875 L 247.199219 254.40625 L 249.121094 124.898438 L 251.039062 128.089844 L 252.960938 262.296875 L 254.878906 189.242188 L 256.800781 102.289062 L 258.71875 240.597656 L 260.640625 227.496094 L 262.558594 103.71875 L 264.480469 233.289062 L 266.398438 236.671875 L 268.320312 109.101562 L 270.238281 251.921875 L 272.160156 217.34375 L 274.078125 124.734375 L 276 284.429688 L 277.921875 165.777344 L 279.839844 183.53125 L 281.761719 279.289062 L 283.679688 124.191406 L 285.601562 281.457031 L 287.519531 183.691406 L 289.441406 203.515625 L 291.359375 268.957031 L 293.28125 145.859375 L 295.199219 308.246094 L 297.121094 140.125 L 299.039062 303.65625 L 300.960938 164.132812 L 302.878906 284.210938 L 304.800781 190.886719 L 306.71875 270.695312 L 308.640625 206.445312 L 310.558594 271.316406 L 312.480469 206.640625 L 314.398438 287.421875 L 316.320312 192.503906 L 318.238281 314.914062 L 320.160156 172.71875 L 322.078125 338.433594 L 324 170.773438 L 325.921875 327.1875 L 327.839844 219.199219 L 329.761719 258.894531 L 331.679688 312.195312 L 333.601562 184.671875 L 335.519531 349.671875 L 337.441406 227.246094 L 339.359375 249.039062 L 341.28125 351.328125 L 343.199219 197.757812 L 345.121094 293.675781 L 347.039062 343.609375 L 348.960938 200.140625 L 350.878906 294.484375 L 352.800781 361.152344 L 354.71875 223.371094 L 356.640625 251.410156 L 358.558594 375.171875 L 360.480469 301.242188 L 362.398438 208.660156 L 364.320312 299.554688 L 366.238281 384.785156 L 368.160156 307.425781 L 370.078125 217.796875 L 372 265.941406 L 373.921875 369.644531 L 375.839844 381.800781 L 377.761719 298.539062 L 379.679688 228.429688 L 381.601562 244.019531 L 383.519531 320.265625 L 385.441406 386.464844 L 387.359375 397.589844 L 389.28125 357.589844 L 391.199219 298.84375 L 393.121094 252.632812 L 395.039062 233.695312 L 396.960938 240.679688 L 398.878906 263.9375 L 400.800781 292.957031 L 402.71875 320.242188 L 404.640625 342.011719 L 406.558594 357.21875 L 408.480469 366.1875 L 410.398438 369.535156 L 412.320312 367.515625 L 414.238281 359.8125 L 416.160156 345.726562 L 418.078125 324.859375 L 420 298.289062 L 421.921875 270.113281 L 423.839844 248.582031 L 425.761719 245.28125 L 427.679688 270.382812 L 429.601562 323.554688 L 431.519531 384.917969 L 433.441406 416.800781 L 435.359375 387.066406 L 437.28125 307.203125 L 439.199219 246.445312 L 441.121094 276.894531 L 443.039062 375.136719 L 444.960938 412.933594 L 446.878906 323.246094 L 448.800781 242.832031 L 450.71875 320.53125 L 452.640625 414.332031 L 454.558594 322.804688 L 456.480469 243.34375 L 458.398438 369.535156 &quot;/&gt;
&lt;path fill=&quot;none&quot; stroke-width=&quot;0.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; stroke=&quot;rgb(0%, 0%, 0%)&quot; stroke-opacity=&quot;1&quot; stroke-miterlimit=&quot;10&quot; d=&quot;M 74.398438 430.558594 L 458.398438 430.558594 &quot;/&gt;
&lt;path fill=&quot;none&quot; stroke-width=&quot;0.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; stroke=&quot;rgb(0%, 0%, 0%)&quot; stroke-opacity=&quot;1&quot; stroke-miterlimit=&quot;10&quot; d=&quot;M 74.398438 430.558594 L 74.398438 437.761719 &quot;/&gt;
&lt;path fill=&quot;none&quot; stroke-width=&quot;0.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; stroke=&quot;rgb(0%, 0%, 0%)&quot; stroke-opacity=&quot;1&quot; stroke-miterlimit=&quot;10&quot; d=&quot;M 170.398438 430.558594 L 170.398438 437.761719 &quot;/&gt;
&lt;path fill=&quot;none&quot; stroke-width=&quot;0.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; stroke=&quot;rgb(0%, 0%, 0%)&quot; stroke-opacity=&quot;1&quot; stroke-miterlimit=&quot;10&quot; d=&quot;M 266.398438 430.558594 L 266.398438 437.761719 &quot;/&gt;
&lt;path fill=&quot;none&quot; stroke-width=&quot;0.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; stroke=&quot;rgb(0%, 0%, 0%)&quot; stroke-opacity=&quot;1&quot; stroke-miterlimit=&quot;10&quot; d=&quot;M 362.398438 430.558594 L 362.398438 437.761719 &quot;/&gt;
&lt;path fill=&quot;none&quot; stroke-width=&quot;0.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; stroke=&quot;rgb(0%, 0%, 0%)&quot; stroke-opacity=&quot;1&quot; stroke-miterlimit=&quot;10&quot; d=&quot;M 458.398438 430.558594 L 458.398438 437.761719 &quot;/&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-0-0&quot; x=&quot;66.058594&quot; y=&quot;456.480469&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-1&quot; x=&quot;72.732422&quot; y=&quot;456.480469&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-0&quot; x=&quot;76.066406&quot; y=&quot;456.480469&quot;/&gt;
&lt;/g&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-0-0&quot; x=&quot;162.058594&quot; y=&quot;456.480469&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-1&quot; x=&quot;168.732422&quot; y=&quot;456.480469&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-2&quot; x=&quot;172.066406&quot; y=&quot;456.480469&quot;/&gt;
&lt;/g&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-0-3&quot; x=&quot;258.058594&quot; y=&quot;456.480469&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-1&quot; x=&quot;264.732422&quot; y=&quot;456.480469&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-0&quot; x=&quot;268.066406&quot; y=&quot;456.480469&quot;/&gt;
&lt;/g&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-0-3&quot; x=&quot;354.058594&quot; y=&quot;456.480469&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-1&quot; x=&quot;360.732422&quot; y=&quot;456.480469&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-2&quot; x=&quot;364.066406&quot; y=&quot;456.480469&quot;/&gt;
&lt;/g&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-0-4&quot; x=&quot;450.058594&quot; y=&quot;456.480469&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-1&quot; x=&quot;456.732422&quot; y=&quot;456.480469&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-0&quot; x=&quot;460.066406&quot; y=&quot;456.480469&quot;/&gt;
&lt;/g&gt;
&lt;path fill=&quot;none&quot; stroke-width=&quot;0.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; stroke=&quot;rgb(0%, 0%, 0%)&quot; stroke-opacity=&quot;1&quot; stroke-miterlimit=&quot;10&quot; d=&quot;M 59.039062 416.929688 L 59.039062 71.574219 &quot;/&gt;
&lt;path fill=&quot;none&quot; stroke-width=&quot;0.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; stroke=&quot;rgb(0%, 0%, 0%)&quot; stroke-opacity=&quot;1&quot; stroke-miterlimit=&quot;10&quot; d=&quot;M 59.039062 416.929688 L 51.839844 416.929688 &quot;/&gt;
&lt;path fill=&quot;none&quot; stroke-width=&quot;0.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; stroke=&quot;rgb(0%, 0%, 0%)&quot; stroke-opacity=&quot;1&quot; stroke-miterlimit=&quot;10&quot; d=&quot;M 59.039062 330.589844 L 51.839844 330.589844 &quot;/&gt;
&lt;path fill=&quot;none&quot; stroke-width=&quot;0.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; stroke=&quot;rgb(0%, 0%, 0%)&quot; stroke-opacity=&quot;1&quot; stroke-miterlimit=&quot;10&quot; d=&quot;M 59.039062 244.25 L 51.839844 244.25 &quot;/&gt;
&lt;path fill=&quot;none&quot; stroke-width=&quot;0.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; stroke=&quot;rgb(0%, 0%, 0%)&quot; stroke-opacity=&quot;1&quot; stroke-miterlimit=&quot;10&quot; d=&quot;M 59.039062 157.910156 L 51.839844 157.910156 &quot;/&gt;
&lt;path fill=&quot;none&quot; stroke-width=&quot;0.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; stroke=&quot;rgb(0%, 0%, 0%)&quot; stroke-opacity=&quot;1&quot; stroke-miterlimit=&quot;10&quot; d=&quot;M 59.039062 71.574219 L 51.839844 71.574219 &quot;/&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-1-0&quot; x=&quot;41.761719&quot; y=&quot;422.265625&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-1-1&quot; x=&quot;41.761719&quot; y=&quot;418.269531&quot;/&gt;
&lt;/g&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-1-0&quot; x=&quot;41.761719&quot; y=&quot;335.925781&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-1-2&quot; x=&quot;41.761719&quot; y=&quot;331.929688&quot;/&gt;
&lt;/g&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-1-3&quot; x=&quot;41.761719&quot; y=&quot;247.585938&quot;/&gt;
&lt;/g&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-1-2&quot; x=&quot;41.761719&quot; y=&quot;161.246094&quot;/&gt;
&lt;/g&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-1-1&quot; x=&quot;41.761719&quot; y=&quot;74.910156&quot;/&gt;
&lt;/g&gt;
&lt;path fill=&quot;none&quot; stroke-width=&quot;0.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; stroke=&quot;rgb(0%, 0%, 0%)&quot; stroke-opacity=&quot;1&quot; stroke-miterlimit=&quot;10&quot; d=&quot;M 59.039062 430.558594 L 473.761719 430.558594 L 473.761719 59.039062 L 59.039062 59.039062 Z M 59.039062 430.558594 &quot;/&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-0-5&quot; x=&quot;264.730469&quot; y=&quot;485.28125&quot;/&gt;
&lt;/g&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-1-4&quot; x=&quot;12.960938&quot; y=&quot;247.800781&quot;/&gt;
&lt;/g&gt;
&lt;path fill=&quot;none&quot; stroke-width=&quot;0.75&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; stroke=&quot;rgb(0%, 0%, 100%)&quot; stroke-opacity=&quot;1&quot; stroke-miterlimit=&quot;10&quot; d=&quot;M 74.398438 193.351562 L 82.078125 152.054688 L 89.761719 187.148438 L 97.441406 224.074219 L 105.121094 263.128906 L 112.800781 295.0625 L 120.480469 248.039062 L 128.160156 172.621094 L 135.839844 92.90625 L 143.519531 159.308594 L 151.199219 264.691406 L 158.878906 130.679688 L 166.558594 136.78125 L 174.238281 203.789062 L 181.921875 132.476562 L 189.601562 168.992188 L 197.28125 160.886719 L 204.960938 151.636719 L 212.640625 170.441406 L 220.320312 155.953125 L 228 172.148438 L 235.679688 168.449219 L 243.359375 175.9375 L 251.039062 182.742188 L 258.71875 185.050781 L 266.398438 196.273438 L 274.078125 199.578125 L 281.761719 209.734375 L 289.441406 216.511719 L 297.121094 225.195312 L 304.800781 233.335938 L 312.480469 242.53125 L 320.160156 250.152344 L 327.839844 259.617188 L 335.519531 267.53125 L 343.199219 274.925781 L 350.878906 285.976562 L 358.558594 286.417969 L 366.238281 304.488281 L 373.921875 296.339844 L 381.601562 315.492188 L 389.28125 329.894531 L 396.960938 254.066406 L 404.640625 327.386719 L 412.320312 384.167969 L 420 273.046875 L 427.679688 306.320312 L 435.359375 350.871094 L 443.039062 318.519531 L 450.71875 335.800781 L 458.398438 293.511719 &quot;/&gt;
&lt;/svg&gt;
&lt;/div&gt;
&lt;/p&gt;
&lt;/div&gt;


&lt;p&gt;
还有，当时罗马人十个里面杀一个叛徒或俘虏，是通过抽签决定的。抽签 draw
lots或 by lot。比如
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;If no one volunteers to be the club&amp;rsquo;s secretary, then we&amp;rsquo;ll have to pick someone &lt;b&gt;by lot&lt;/b&gt;.&lt;/li&gt;
&lt;li&gt;We &lt;b&gt;drew lots&lt;/b&gt; to decide who would go.&lt;/li&gt;
&lt;li&gt;Competitors &lt;b&gt;draw lots&lt;/b&gt; to see who gets which boat.&lt;/li&gt;
&lt;li&gt;We &lt;b&gt;drew lots&lt;/b&gt; to decide the order in which we would perform.&lt;/li&gt;
&lt;li&gt;He suggested &lt;b&gt;drawing lots&lt;/b&gt; for the best seats.&lt;/li&gt;
&lt;li&gt;There were only two beds, so we &lt;b&gt;drew lots&lt;/b&gt; to decide who would get them.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
在英语里，也常说pick out of hat,或 a name from a hat, taken from a
hat 表示抽签。也许是因为古时候人人都会戴一顶帽子，帽子就能代替人了。
&lt;/p&gt;

&lt;p&gt;
&lt;b&gt;References&lt;/b&gt;
&lt;/p&gt;
&lt;style&gt;.csl-entry{text-indent: -1.5em; margin-left: 1.5em;}&lt;/style&gt;&lt;div class=&quot;csl-bib-body&quot;&gt;
  &lt;div class=&quot;csl-entry&quot;&gt;&lt;a id=&quot;citeproc_bib_item_1&quot;&gt;&lt;/a&gt;&lt;i&gt;Political Leadership in Disaster and Crisis Communication and Management International Perspectives and Practices&lt;/i&gt;. 2020.&lt;/div&gt;
  &lt;div class=&quot;csl-entry&quot;&gt;&lt;a id=&quot;citeproc_bib_item_2&quot;&gt;&lt;/a&gt;&lt;i&gt;Sapiens: A Brief History of Humankind&lt;/i&gt;. 2014. Harper Perennial.&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;footnotes&quot;&gt;
&lt;h2 class=&quot;footnotes&quot;&gt;Footnotes: &lt;/h2&gt;
&lt;div id=&quot;text-footnotes&quot;&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.1&quot; class=&quot;footnum&quot; href=&quot;#fnr.1&quot; role=&quot;doc-backlink&quot;&gt;1&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot; role=&quot;doc-footnote&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
Sunsetting Competition: Scraping Section 230 Would Decimate Small Tech, Discourage Free Speech Online by Krista Chavez
&lt;/p&gt;

&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;https://netchoice.org/sunsetting-competition-scraping-section-230-would-decimate-small-tech-discourage-free-speech-online/&quot;&gt;https://netchoice.org/sunsetting-competition-scraping-section-230-would-decimate-small-tech-discourage-free-speech-online/&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;


&lt;/div&gt;
&lt;/div&gt;</content>
 </entry>
 
 <entry>
   <title>单词本：tour de force</title>
   <link href="http://kimi.im/2024-05-14-tour-de-force"/>
   <updated>2024-05-14T00:00:00+00:00</updated>
   <id>http://kimi.im/tour-de-force</id>
   <content type="html">&lt;p&gt;
最近看了一遍离散数学，发现华人中还是有不少数学大牛的。比如这位 Terence
Tao 陶哲轩。说他在 2006 年证明的素数猜想时，用到了&lt;b&gt;tour de force&lt;/b&gt;这个词组： In 2006, Ben Green and Terence Tao were able to prove this
conjecture. Their proof, considered to be a mathematical &lt;b&gt;tour de
force&lt;/b&gt;, is a nonconstructive proof that combines powerful ideas from
several advanced areas of mathematics.
&lt;/p&gt;

&lt;p&gt;
这个词组来自法语。环法自行车赛叫tour de France。这里的 tour是 trip，
round 的意思。其实 tour 除了环绕、巡回之外，还有 trick 的意思。比如
jouer un &lt;b&gt;tour&lt;/b&gt; à qn. to play trick on sb.
&lt;/p&gt;

&lt;p&gt;
所以，tour de force 的意思是amazing feat惊人的壮举。
&lt;/p&gt;

&lt;p&gt;
比如：
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;The painting/book/film is a &lt;b&gt;tour de force&lt;/b&gt;. 这画/书/电影是个杰作。&lt;/li&gt;
&lt;li&gt;Nash: Munster can&amp;rsquo;t waste &lt;b&gt;tour de force&lt;/b&gt; in South Africa&lt;/li&gt;
&lt;/ul&gt;
</content>
 </entry>
 
 <entry>
   <title>单词本：naught</title>
   <link href="http://kimi.im/2024-05-14-naught"/>
   <updated>2024-05-14T00:00:00+00:00</updated>
   <id>http://kimi.im/naught</id>
   <content type="html">&lt;p&gt;
最近在看工业协议的发展历史，在(&lt;a href=&quot;#citeproc_bib_item_1&quot;&gt;Powell and Vandelinde 2012&lt;/a&gt;)中，读到这句话：In fact, from the control engineer&amp;rsquo;s point of view, where the code
is executed matters &lt;b&gt;naught&lt;/b&gt; since it is really just one system to look
at and modify at will.
&lt;/p&gt;

&lt;p&gt;
这里是说，对于控制工程师来说，控制代码在哪里执行并不重要。 &lt;b&gt;matter
naught&lt;/b&gt; 就是无关紧要的意思。
&lt;/p&gt;

&lt;p&gt;
美国英语里 0 是 zero, 而英国英语则叫 naught ，比如，英国英语 0.56读作
&lt;b&gt;naught&lt;/b&gt; point five six. 0.009 读作 &lt;b&gt;naught&lt;/b&gt; point &lt;b&gt;naught&lt;/b&gt; &lt;b&gt;naught&lt;/b&gt; nine.
&lt;/p&gt;

&lt;p&gt;
所以，naught 的引申意就是nothing.但是，其实 naught 和 nothing 是同源的。古英语里 nawit 就是 nothing 的意思，字面看是no whit。 whit 的意思是一些些、小生物的意思。nowhit 就是连这些小东西都没有了。德语里 nicht
(not, nothing) 差不多也是他们的小兄弟吧。
&lt;/p&gt;

&lt;p&gt;
比如All our effort was for &lt;b&gt;naught&lt;/b&gt;.我们的努力都白费了。All their
plans came to &lt;b&gt;naught&lt;/b&gt;. 他们的计划都不奏效了。
&lt;/p&gt;

&lt;p&gt;
我还找到了一首诗的英译版本，其中“无妨”就是翻译为 matters naught：
&lt;/p&gt;

&lt;p class=&quot;verse&quot;&gt;
柳梢青茅舍疏篱(杨无咎)&lt;br /&gt;
Liushaoqing Theme: Straw Hut with Sparse Hedges (Yang Wujiu)&lt;br /&gt;
(prepared by: alexcwlin; edited by: Adam Lam)&lt;br /&gt;
&lt;br /&gt;
茅舍疏篱。&lt;br /&gt;
Straw hut has sparse hedges.&lt;br /&gt;
半飘残雪，斜卧低枝。&lt;br /&gt;
Blooms resemble halfway fallen snow.&lt;br /&gt;
They lie on trees’ slanting low branches.&lt;br /&gt;
可更相宜，烟笼修竹，月在寒溪。&lt;br /&gt;
The scene is so very fitting.&lt;br /&gt;
Mist shrouds a lush growth of bamboo.&lt;br /&gt;
Moon is reflected off a chill creek.&lt;br /&gt;
&lt;br /&gt;
宁宁伫立移时。&lt;br /&gt;
I stand musing absorbedly as time passes.&lt;br /&gt;
判瘦损、无妨为伊。&lt;br /&gt;
In slimming down while focusing,&lt;br /&gt;
it &lt;b&gt;matters naught&lt;/b&gt; since that is for you.&lt;br /&gt;
谁赋才情，画成幽思，写入新诗。&lt;br /&gt;
Who possesses the talent and feelings,&lt;br /&gt;
to put your serene mood into painting,&lt;br /&gt;
or compose such into a new poem.&lt;br /&gt;
&lt;/p&gt;

&lt;p&gt;
naught 是什么都没有，但是 naughty 却是调皮的意思。比如，our boss
treats us all like &lt;b&gt;naughty&lt;/b&gt; children.
&lt;/p&gt;

&lt;p&gt;
naughty 除了调皮的意思，却还有少儿不宜的意思，真是奇怪：The film was
shown on television but they cut out all the &lt;b&gt;naughty&lt;/b&gt; scenes. 电影在电视机上放映，但是去掉了少儿不宜的部分。还比如 He always buys her
&lt;b&gt;naughty&lt;/b&gt; underwear for her birthday.
&lt;/p&gt;

&lt;p&gt;
&lt;b&gt;References&lt;/b&gt;
&lt;/p&gt;
&lt;style&gt;.csl-entry{text-indent: -1.5em; margin-left: 1.5em;}&lt;/style&gt;&lt;div class=&quot;csl-bib-body&quot;&gt;
  &lt;div class=&quot;csl-entry&quot;&gt;&lt;a id=&quot;citeproc_bib_item_1&quot;&gt;&lt;/a&gt;Powell, James, and Henry Vandelinde. 2012. &lt;i&gt;Catching the Process Fieldbus: An Introduction to Profibus for Process Automation&lt;/i&gt;. &lt;a href=&quot;https://api.semanticscholar.org/CorpusID:114833484&quot;&gt;https://api.semanticscholar.org/CorpusID:114833484&lt;/a&gt;.&lt;/div&gt;
&lt;/div&gt;
</content>
 </entry>
 
 <entry>
   <title>在 macOS 上使用 emacs</title>
   <link href="http://kimi.im/2024-04-20-emacs-in-macos"/>
   <updated>2024-04-20T00:00:00+00:00</updated>
   <id>http://kimi.im/emacs-in-macos</id>
   <content type="html">&lt;p&gt;
上周末（ 2024 年4月 14 日）买的 Macbook M3 Air，拿回家，装上 homebrew。
&lt;/p&gt;


&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-shell&quot;&gt;brew tap railwaycat/emacsmacport
brew install emacs-mac --with-native-compilation &lt;span style=&quot;color: #2A00FF;&quot;&gt;\&lt;/span&gt;
     --with-natural-title-bar --with-imagemagick --with-librsvgemacs-mac
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
解决了一些在 macOS 上的配置问题。
&lt;/p&gt;

&lt;p&gt;
Emacs 无法获得系统环境变量
&lt;/p&gt;

&lt;p&gt;
原因是 GUI 应用不能从.zsh继承环境变量，而是有 &lt;code&gt;launchctl&lt;/code&gt; 控制的。需要在&lt;code&gt;/etc/launchd.conf&lt;/code&gt;中设置环境变量，比如：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-shell&quot;&gt;setenv JAVA_HOME /opt/homebrew/opt/openjdk
setenv PATH /opt/homebrew/bin:$&lt;span style=&quot;color: #000000;&quot;&gt;JAVA_HOME&lt;/span&gt;/bin:/opt/homebrew/Caskroom/drawio/24.2.5/draw.io.app/Contents/MacOS:$&lt;span style=&quot;color: #000000;&quot;&gt;PATH&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
也可以这样给 launchd 配置环境变量进行测试：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-shell&quot;&gt;launchctl setenv PATH /opt/homebrew/bin:$&lt;span style=&quot;color: #000000;&quot;&gt;JAVA_HOME&lt;/span&gt;/bin:/opt/homebrew/Caskroom/drawio/24.2.5/draw.io.app/Contents/MacOS:$&lt;span style=&quot;color: #000000;&quot;&gt;PATH&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
另外，还有一个奇怪的问题。
&lt;/p&gt;

&lt;p&gt;
一开始，我发现 emacs-mac 的最大化按钮无法进行最大化，靠左靠右分屏。后来发现是因为把 &lt;code&gt;menu-bar&lt;/code&gt; 给取消掉的缘故，加回来就可以了。
&lt;/p&gt;

&lt;p&gt;
还有一个更奇怪的问题， &lt;code&gt;sis&lt;/code&gt; 在 inline 英文切换中文的时候，会多添加一个英文句号点。不知道是怎么回事，写文章多的话，觉得挺讨厌的。
&lt;/p&gt;

&lt;p&gt;
我一开始以为是 &lt;code&gt;sis&lt;/code&gt; 的问题，后来发现是 macOS 系统自带的功能，连续快速的两个 space 空格会自动添加一个标点符号。可以在系统设置-&amp;gt;键盘 Keyboard
-&amp;gt; 输入Text Input -&amp;gt;输入源Input Source中关掉 &amp;ldquo;Add period with
double space&amp;rdquo;.
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>单词本：drohen</title>
   <link href="http://kimi.im/2024-04-09-drohen"/>
   <updated>2024-04-09T00:00:00+00:00</updated>
   <id>http://kimi.im/drohen</id>
   <content type="html">&lt;p&gt;
今天，美国财政部长耶伦结束了在中国的五天访问。德意志日报 Deutsche
Tageszeitung 有一则新闻报道：
&lt;/p&gt;

&lt;p&gt;
Grundsätzlich wurde Yellens Besuch in China aber als weiterer Schritt
hin zu einer Stabilisierung der Beziehungen zwischen den USA und der
Volksrepublik gewertet. Beide Seiten vereinbarten weitere Gespräche,
um das Problem &lt;b&gt;drohender&lt;/b&gt; Überkapazitäten zu lösen. [DT2024Yellen]
&lt;/p&gt;

&lt;p&gt;
这里提到了美丽国关心的事情，即中国在新能源领域对美国造成的威胁：das
Problem &lt;b&gt;drohender&lt;/b&gt; Überkapazitäten.
&lt;/p&gt;

&lt;p&gt;
&lt;b&gt;drohend&lt;/b&gt; 的意思是有威胁的。动词形式是 &lt;b&gt;drohen&lt;/b&gt; 威胁。
&lt;/p&gt;

&lt;p&gt;
做及物动词的时候，如jdm mit etw drohen用某事威胁某人。
&lt;/p&gt;

&lt;p&gt;
Meine Frau droht mir mit der Scheidung. 我妻子用离婚威胁我。顺便说下，上次我们了解到 Entscheidung 是决策的意思，源于拉丁语 caedere 切开。切开的名词形式 Scheidung 就有分离、离婚之意了。
&lt;/p&gt;

&lt;p&gt;
还有如：
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;jdm mit der Faust drohen 用拳头威胁某人&lt;/li&gt;
&lt;li&gt;jdm mit Selbstmord drohen 用自杀威胁某人&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
另外，今天的新闻提到南非议会选举，执政党 ANC 非洲国民大会可能遭遇丢失多数党统治地位的威胁。这里也用到了 &lt;b&gt;drohen&lt;/b&gt; 这个词：
&lt;/p&gt;

&lt;p&gt;
Der seit Ende der Apartheid regierende Afrikanische Nationalkongress
(ANC) &lt;b&gt;droht&lt;/b&gt; den Umfragen zufolge erstmals die Mehrheit im Parlament zu
verlieren. [DT2024Zuma]
&lt;/p&gt;

&lt;p&gt;
其实德语 drohen 和英语 throe 是同源的，而 throe 是分娩阵痛的意思。是不是可以理解 drohen 的意思就是用 throe 一样的痛苦来吓唬他人，就是德语里的威胁之意。
&lt;/p&gt;

&lt;p&gt;
不过 throe 这个词似乎在英语里用的不多，找到一首阿里斯托芬（古希腊作家喜剧之父）的诗，用到了 throe，应该也是后人翻译成英语的。说地球母亲的镇痛带来了水果的丰收。
&lt;/p&gt;

&lt;p class=&quot;verse&quot;&gt;
The Harvest&lt;br /&gt;
&amp;#xa0;&amp;#xa0;&amp;#xa0;&amp;#xa0;&amp;#xa0;&amp;#xa0;&amp;#xa0;&amp;#xa0;&amp;#xa0;&amp;#xa0;&amp;#xa0;&amp;#xa0;by Aristophanes&lt;br /&gt;
&lt;br /&gt;
Oh, &amp;rsquo;tis sweet, when fields are ringing&lt;br /&gt;
With the merry cricket&amp;rsquo;s singing,&lt;br /&gt;
Oft to mark with curious eye&lt;br /&gt;
If the vine-tree&amp;rsquo;s time be nigh:&lt;br /&gt;
Here is now the fruit whose birth&lt;br /&gt;
Cost a throe to Mother Earth.&lt;br /&gt;
Sweet it is, too, to be telling,&lt;br /&gt;
How the luscious figs are swelling;&lt;br /&gt;
Then to riot without measure&lt;br /&gt;
In the rich, nectareous treasure,&lt;br /&gt;
While our grateful voices chime,&amp;#x2013;&lt;br /&gt;
Happy season! blessed time.&lt;br /&gt;
&lt;/p&gt;

&lt;p&gt;
另外，drohen 作为不及物动词有即将来临之意：
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;Es droht zu regnen. 恐怕要下雨了。&lt;/li&gt;
&lt;li&gt;Das Haus droht einzufallen. 房子恐怕要倒了。&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;
&lt;b&gt;References&lt;/b&gt;
&lt;/p&gt;

&lt;style&gt;.csl-entry{text-indent: -1.5em; margin-left: 1.5em;}&lt;/style&gt;&lt;div class=&quot;csl-bib-body&quot;&gt;
&lt;/div&gt;


&lt;p&gt;
[DT2024Yellen] US-FINANZMINISTERIN YELLEN WARNT CHINA VOR INDUSTRIELLEN ÜBERKAPAZITÄTEN, Deutsche Tageszeitung, 08.04.2024
&lt;/p&gt;

&lt;p&gt;
[DT2024Zuma] SÜDAFRIKANISCHES GERICHT ENTSCHEIDET ÜBER WAHLAUSSCHLUSS
VON EX-PRÄSIDENT ZUMA, Deutsche Tageszeitung, 08.04.2024
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>单词本：villain</title>
   <link href="http://kimi.im/2024-04-01-villain"/>
   <updated>2024-04-01T00:00:00+00:00</updated>
   <id>http://kimi.im/villain</id>
   <content type="html">&lt;p&gt;
前几天在 Emacs 开源社区论坛看到开源大佬 manateelazycat 分享的技术升华经验。他推荐大家看《练习的心态》(&lt;a href=&quot;#citeproc_bib_item_1&quot;&gt;Sterner 2012&lt;/a&gt;)。这本书是钢琴调音师Thomas Sterner在多年练习钢琴、练习高尔夫球、给钢琴调音的工作学习实践中，总结出的生活经验。当我们能跳出对自己对他人对正在做的事情的进行评价的习惯，从一个旁观者的角度看待这些事情，就能够摆脱情绪的影响，从而专注眼前做的事情，更慢，却更好的提升技能。在提到情绪对运动练习的影响时，Sterner 写道：
&lt;/p&gt;

&lt;p&gt;
It&amp;rsquo;s a game of sorts, and you are not letting the &lt;b&gt;villain&lt;/b&gt; of emotions
play in your game. Soon the enjoyment that you experience from staying
in the present moment will make hitting the target smack in the middle
irrelevant. 
&lt;/p&gt;

&lt;p&gt;
意思是，当你以一个旁观者的角度观察自己的练习时，就能摆脱情绪这个恶棍的影响，从而享受当前时刻练习的快乐，不断调整，从而提升自己的技能。
&lt;/p&gt;

&lt;p&gt;
这里用到的单词 &lt;b&gt;villain&lt;/b&gt; 是恶棍、歹徒、坏人、淘气鬼、坏蛋的意思。比如：
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;get off my car, you little &lt;b&gt;villain&lt;/b&gt;! 你这个淘气鬼，快离开我的车子。&lt;/li&gt;
&lt;li&gt;A faulty fuse was the &lt;b&gt;villain of the piece&lt;/b&gt;. 毛病就出在这个坏掉的保险丝上。villain of the piece连在一起指惹祸的、为害的人或物。&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
这个词最早原子拉丁语 villa 乡村别墅、农场。
&lt;/p&gt;

&lt;p&gt;
而拉丁语 -anus ，-nus表示来源、属于的意思，比如 Roma 是罗马的意思，而
Romanus 则是罗马人；Christus 基督，而 Christanus 则是基督徒。同样的，
villanus 则表示来自农场的，即农民。
&lt;/p&gt;

&lt;p&gt;
后来，到了法语里，就变成了 vilain，农民、平民、农夫的意思。这时候还没太多贬义。
&lt;/p&gt;

&lt;p&gt;
之后，大概 1300 年，vilain 从法语走到英语里，成了 villain ，意思变成了小丑、无赖、守财奴、恶棍的意思了。villain 就成了一个 pejorative 贬义词。
&lt;/p&gt;

&lt;p&gt;
相关的还有
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;villainous 恶棍似的、邪恶的、糟糕的&lt;/li&gt;
&lt;li&gt;villainy 极其坏的事情&lt;/li&gt;
&lt;li&gt;villainage 农奴身份、农奴地位&lt;/li&gt;
&lt;li&gt;villainess 阴性词：女恶棍、女反派&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
&lt;b&gt;References&lt;/b&gt;
&lt;/p&gt;

&lt;style&gt;.csl-entry{text-indent: -1.5em; margin-left: 1.5em;}&lt;/style&gt;&lt;div class=&quot;csl-bib-body&quot;&gt;
  &lt;div class=&quot;csl-entry&quot;&gt;&lt;a id=&quot;citeproc_bib_item_1&quot;&gt;&lt;/a&gt;Sterner, Thomas M. 2012. &lt;i&gt;The Practicing Mind: Developing Focus and Discipline in Your Life Master Any Skill or Challenge by Learning to Love the Process&lt;/i&gt;. New World Library.&lt;/div&gt;
&lt;/div&gt;
</content>
 </entry>
 
 <entry>
   <title>单词本：Entscheidung</title>
   <link href="http://kimi.im/2024-03-28-entscheidung"/>
   <updated>2024-03-28T00:00:00+00:00</updated>
   <id>http://kimi.im/entscheidung</id>
   <content type="html">&lt;p&gt;
今天看到新闻说心理学家Daniel Kahneman去世了，享年 90 岁。他曾得过诺贝尔经济学奖，研究社会心理学，写了一本畅销书《Thinking, fast and slow》，讲的是我们大脑的两个决策系统。一个无意识系统，它基于情感、记忆和经验，能迅速做出判断，但往往会上当受骗；另一个有意识系统，它调动注意力来分析和解决问题。新闻是这么介绍Daniel Kahneman的：
&lt;/p&gt;

&lt;p&gt;
Der Autor des Bestsellers &amp;ldquo;Schnelles Denken, langsames Denken&amp;rdquo; vertrat
die Ansicht, dass das Verhalten von Menschen nicht auf einem
rationalen &lt;b&gt;Entscheidungsprozess&lt;/b&gt;, sondern oft auf instinktivem Handeln
basiert.
&lt;/p&gt;


&lt;p&gt;
这里，我们看到个德语单词 &lt;b&gt;Entscheidungsprozess&lt;/b&gt; ，即决策过程的意思。它是由 Enscheidung 和 Prozess 组成的。Enscheidung 在德语里就是 Decision 决策的名词形式。
&lt;/p&gt;

&lt;p&gt;
比如Sie werden dann in Kü rze über die &lt;b&gt;Entscheidung&lt;/b&gt; des
Kunden informiert. You will then be quickly informed about the
client&amp;rsquo;s decision.
&lt;/p&gt;

&lt;p&gt;
Wir haben den angemessenen &lt;b&gt;Entscheidungsprozess&lt;/b&gt; und maximieren das
kollektive Wohlergehen. (We have the reasonable decision making
process, maximizing the collective welfare.)
&lt;/p&gt;

&lt;p&gt;
如果我们把英语 Decision 和德语 Entscheidung 放在一起，越看会觉得它们越像。de- 是分开的意思，而 ent- 也是分开的意思。cision 源自拉丁语
caedere 切开的意思，而 scheidung 比 cision 更像拉丁语 caedere 。
decision，Entscheidung 就是 cut off，也就是作决定。正如我们常说的快刀斩乱麻、斩钉截铁、当机立断等。
&lt;/p&gt;

&lt;p&gt;
所以，为了更好的做出决策，还是值得看一看《Schnelles Denken, langsames
Denken》这本书的。
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>单词本：greenwashing</title>
   <link href="http://kimi.im/2024-03-27-greenwashing"/>
   <updated>2024-03-27T00:00:00+00:00</updated>
   <id>http://kimi.im/greenwashing</id>
   <content type="html">&lt;p&gt;
昨天看到新闻说德国联邦消费者协会指出了拼多多海外平台 Temu 的一些诱导消费者的问题：
&lt;/p&gt;

&lt;p&gt;
Der Verbraucherzentrale Bundesverband (vzbv) hat den chinesischen
Online-Händler Temu abgemahnt. &amp;ldquo;Die Plattform Temu verunsichert und
übervorteilt Verbraucherinnen und Verbraucher mit willkürlich
erscheinenden Rabatten, fragwürdigen Bewertungen und manipulativen
Designs, das muss aufhören&amp;rdquo;, sagte vzbv-Chefin Ramona Pop den
Zeitungen der Funke Mediengruppe vom Dienstag. Das Unternehmen
verstoße gegen EU-Verbraucherschutzgesetze und betreibe darüber hinaus
&lt;b&gt;Greenwashing&lt;/b&gt;.
&lt;/p&gt;

&lt;p&gt;
主要说的是一些看起来是在操作消费者的折扣策略，有问题的评分机制，还有诱导性的设计等。最后他们认为 Temu 违反了欧盟消费者保护法，还涉嫌
Greenwashing。
&lt;/p&gt;

&lt;p&gt;
我查了下，Greenwashing 是从英语里过来的，意思是企业夸大自身环保行为，从而误导消费者。中文有翻译为“漂绿”。
&lt;/p&gt;

&lt;p&gt;
这个词出现的背景是现在全球都在提倡可持续性发展，很多负责任的企业会在生产经营过程中追求绿色环保。而有些企业则热衷于宣传自己的绿色环保属性，期望得到消费者的好感，提出各种绿色环保概念。儒家提倡中庸，很多过度宣传的行为，往往隐藏着不好的目的。greenwashing 漂绿就是描述这种企业过度宣传自身绿色环保属性诱导消费者的行为。
&lt;/p&gt;

&lt;p&gt;
greenwashing 是从更早的 whitewash 演变而来。Whitewash 指的大概是在
1960 年代，酒店为了节约毛巾而宣称环保的行为：
&lt;/p&gt;

&lt;p&gt;
The term originated in the 1960s, when the hotel industry devised one
of the most blatant examples of greenwashing. They placed notices in
hotel rooms asking guests to reuse their towels to save the
environment. The hotels enjoyed the benefit of lower laundry costs.
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>单词本：raison d'être</title>
   <link href="http://kimi.im/2024-03-23-raison-d-etre"/>
   <updated>2024-03-23T00:00:00+00:00</updated>
   <id>http://kimi.im/raison-d-etre</id>
   <content type="html">---
layout: post
title: 单词本：raison d&apos;être
tags: [English,Français]
categories: [language]
---
&lt;p&gt;
去年担任了一个市场占有率第一的工业总线产品的产品负责人（Product Owner）角色。所以补补课，了解下产品负责人的职责有哪些。于是上个星期又看了一遍
Allan Kelly 的书《The Art of Agile Product Ownership》
(&lt;a href=&quot;#citeproc_bib_item_1&quot;&gt;Kelly 2019&lt;/a&gt;)。
&lt;/p&gt;

&lt;p&gt;
项目经理关心的是什么时候交付产品，而产品负责人要关心的是，我们要交付什么样的产品。Allan 写到：
&lt;/p&gt;

&lt;p&gt;
Since the &amp;ldquo;what are we building?&amp;rdquo; question is the &lt;b&gt;raison d&amp;rsquo;être&lt;/b&gt; for
the Product Owner role, the role becomes very important.
&lt;/p&gt;

&lt;p&gt;
这里，我们遇到了一个法语词组&lt;b&gt;raison d&amp;rsquo;ê tre&lt;/b&gt; ，字面意思就是存在的理由。上面这句话，就可以翻译成：因为“我们要构建什么产品？”这个问题是产品负责人角色存在的理由，所以这个角色很重要。
&lt;/p&gt;

&lt;p&gt;
很巧的是，昨天看到一个新的开源项目，叫
lispx（&lt;a href=&quot;https://github.com/lispx/lispx&quot;&gt;https://github.com/lispx/lispx&lt;/a&gt;），在项目介绍里也用到了这个词：
&lt;/p&gt;

&lt;p&gt;
LispX&amp;rsquo;s &lt;b&gt;raison d&amp;rsquo;être&lt;/b&gt; is to solve JavaScript&amp;rsquo;s async problem. It does
this with delimited continuations. It faithfully implements the
delimcc API as well as delimited dynamic binding by Oleg et al. and
can run the full test suite from the delimcc distribution. With
continuations, all async JS APIs (promise- and callback-based) can be
used as if they were synchronous.
&lt;/p&gt;

&lt;p&gt;
这里说到 LispX 存在的理由就是为了解决 JavaScript 的异步操作问题。
&lt;/p&gt;

&lt;p&gt;
这里还有篇文章“Raison d&amp;rsquo;être, vision, mission: quelles différences?”说的是企业存在的理由，愿景，使命之间的差异。 (
&lt;a href=&quot;https://www.lesaffaires.com/strategie-d-entreprise/entreprendre/raison-d-etre-vision-mission-quelles-differences/648136&quot;&gt;https://www.lesaffaires.com/strategie-d-entreprise/entreprendre/raison-d-etre-vision-mission-quelles-differences/648136&lt;/a&gt;
)
&lt;/p&gt;

&lt;p&gt;
Raison d&amp;rsquo;être 存在的理由回答的是le pourquoir?为什么的问题。
&lt;/p&gt;

&lt;p&gt;
vision 回答的是le où?方向问题。
&lt;/p&gt;

&lt;p&gt;
mission 回答的是le quoi?做什么的问题。
&lt;/p&gt;

&lt;p&gt;
ambition 回答的是le combien?怎么做的问题。
&lt;/p&gt;

&lt;p&gt;
Raison d&amp;rsquo;être 这一节，作者这么写：
&lt;/p&gt;

&lt;p&gt;
Elle exprime la contribution de l’entreprise à la socié t é. Elle a une
portée très large et à long terme. C’est, comme le nom le dit, sa
«raison d’exister». Des exemples? «Créateur de convivialités» (Ricard,
boissons); «On nourrit le monde» (Olymel); «Rapprocher les gens»
(Facebook); «Divertir le monde» (Netflix); «Créer des produits
innovants qui changent le monde» (Apple). La raison d’être est le
«pourquoi nous existons comme organisation».
&lt;/p&gt;

&lt;p&gt;
Raison d&amp;rsquo;être 也就是«raison d’exister»。比如，Ricard, boissons一个酒品饮料品牌的存在理由是“宴会快乐的创造者”。Olymel 香肠品牌的存在理由是“哺育世界”。 Facebook 的存在理由是“为人们构建连接”。奈飞的存在理由“为世界带来娱乐”。苹果“创造创新产品改变世界”。
&lt;/p&gt;

&lt;p&gt;
容我想想。我负责的产品的raison d&amp;rsquo;ê tre 是什么？
&lt;/p&gt;

&lt;p&gt;
大概是：方便快捷且安全地连接工业设备。
&lt;/p&gt;

&lt;p&gt;
那么，你做的产品的raison d&amp;rsquo;ê tre 是什么？你所在的组织的 raison d&amp;rsquo;être
是什么？
&lt;/p&gt;

&lt;p&gt;
&lt;b&gt;References&lt;/b&gt;
&lt;/p&gt;
&lt;style&gt;.csl-entry{text-indent: -1.5em; margin-left: 1.5em;}&lt;/style&gt;&lt;div class=&quot;csl-bib-body&quot;&gt;
  &lt;div class=&quot;csl-entry&quot;&gt;&lt;a id=&quot;citeproc_bib_item_1&quot;&gt;&lt;/a&gt;Kelly, Allan. 2019. &lt;i&gt;The Art of Agile Product Ownership, a Guide for Product Managers, Business Analysts, and Entrepreneurs&lt;/i&gt;. Springer.&lt;/div&gt;
&lt;/div&gt;
</content>
 </entry>
 
 <entry>
   <title>单词本：parlance</title>
   <link href="http://kimi.im/2024-02-19-parlance"/>
   <updated>2024-02-19T00:00:00+00:00</updated>
   <id>http://kimi.im/parlance</id>
   <content type="html">&lt;p&gt;
David Myers 的《犹太简史》(&lt;a href=&quot;#citeproc_bib_item_1&quot;&gt;Myers 2017&lt;/a&gt;) 中提到犹太人之间的关系时，用到了 parlance 这个词：
&lt;/p&gt;

&lt;p&gt;
In jocular &lt;b&gt;parlance&lt;/b&gt; today, Jews often refer to one another as &amp;ldquo;members
of the tribe&amp;rdquo; (MOTs).
&lt;/p&gt;

&lt;p&gt;
这句话的意思是说，根据开玩笑的说法，犹太人把自己的同伴称为部落成员（ MOT ）。
&lt;/p&gt;

&lt;p&gt;
学法语的同学看到这个 parlance 是不是觉得很熟悉呀？ 法语“说”的动作
parler 似乎跟这个词同源的么。而 parlance 则是说的名词化，即“说法”。
&lt;/p&gt;

&lt;p&gt;
再举个例子，这篇关于错误信息传播的文章中用到了这个词：According to the
European Union, these concepts are &amp;ldquo;modern &lt;b&gt;parlance&lt;/b&gt; for perennial
phenomena such as propaganda and conspiracy theories&amp;rdquo;. 即根据现代的说法，误导信息传播是一个一直存在的现象。
&lt;/p&gt;

&lt;p&gt;
再比如：The network perimeter protection idea comes from the ancient
technique of using walls such as Hadrian&amp;rsquo;s Wall or the Great Wall for
protecting a city. In networking &lt;b&gt;parlance&lt;/b&gt;, a zone called a
Demilitarised Zone (DMZ), aka a perimeter network, is
created. (&lt;a href=&quot;#citeproc_bib_item_2&quot;&gt;Rashid et al. 2021&lt;/a&gt;)
&lt;/p&gt;

&lt;p&gt;
In the &lt;b&gt;parlance&lt;/b&gt; of the IEEE standard, tininess is detected after
rounding: Detecting tininess after rounding results in fewer spurious
underflow signals. (&lt;a href=&quot;#citeproc_bib_item_3&quot;&gt;Waterman and Asanović 2019&lt;/a&gt;)
&lt;/p&gt;

&lt;p&gt;
另外一个词，parley 似乎也是和parler, parlance同源，它的意思是和谈。比如说：We arranged a &lt;b&gt;parley&lt;/b&gt; with her. 我们跟她安排了一场和谈/谈判。
&lt;/p&gt;

&lt;p&gt;
&lt;b&gt;References&lt;/b&gt;
&lt;/p&gt;

&lt;style&gt;.csl-entry{text-indent: -1.5em; margin-left: 1.5em;}&lt;/style&gt;&lt;div class=&quot;csl-bib-body&quot;&gt;
  &lt;div class=&quot;csl-entry&quot;&gt;&lt;a id=&quot;citeproc_bib_item_1&quot;&gt;&lt;/a&gt;Myers, David N. 2017. &lt;i&gt;Jewish History: A Very Short Introduction&lt;/i&gt;. Oxford University Press.&lt;/div&gt;
  &lt;div class=&quot;csl-entry&quot;&gt;&lt;a id=&quot;citeproc_bib_item_2&quot;&gt;&lt;/a&gt;Rashid, Awais, Howard Chivers, Emil Lupu, Andrew Martin, and Steve Schneider. 2021. &lt;i&gt;The Cyber Security Body of Knowledge&lt;/i&gt;.&lt;/div&gt;
  &lt;div class=&quot;csl-entry&quot;&gt;&lt;a id=&quot;citeproc_bib_item_3&quot;&gt;&lt;/a&gt;Waterman, Andrew, and Asanović Krste. 2019. “The RISC-V Instruction Set Manual.”&lt;/div&gt;
&lt;/div&gt;
</content>
 </entry>
 
 <entry>
   <title>单词本：caprice</title>
   <link href="http://kimi.im/2024-02-17-caprice"/>
   <updated>2024-02-17T00:00:00+00:00</updated>
   <id>http://kimi.im/caprice</id>
   <content type="html">&lt;p&gt;
还是来自人类简史(&lt;a href=&quot;#citeproc_bib_item_2&quot;&gt;Harari 2014&lt;/a&gt;)的一句话：
&lt;/p&gt;

&lt;p&gt;
Religions assert that our laws are not the result of human &lt;b&gt;caprice&lt;/b&gt;,
but are ordained by an absolute and supreme authority.
&lt;/p&gt;

&lt;p&gt;
Yuval Noah Harari 的意思是说宗教强调说我们的法律不是源自人类的突发奇想，而是由绝对的神的权威颁布规定的。
&lt;/p&gt;

&lt;p&gt;
单词 caprice 指的是人类的反复无常、任性、怪想和突发奇想。
&lt;/p&gt;

&lt;p&gt;
比如说：A hailstorm in July is a &lt;b&gt;caprice&lt;/b&gt; of nature. 七月时节的冰雹风暴是大自然的突发奇想。
&lt;/p&gt;

&lt;p&gt;
这个词据有两种可能的来源。
&lt;/p&gt;

&lt;p&gt;
其一，拉丁语 capreolus 是野山羊的意思。野山羊灵活矫健，能很快地跳腾一下。Capricornus 摩羯座大概就是野山羊变过来的。还有一个词 capric 意为“公羊的”。
&lt;/p&gt;

&lt;p&gt;
其二，意大利语 capo 为头，riccio 为卷曲，人在受惊吓的时候会头发卷曲。就像刺猬 hedgehog 受到惊吓会竖起它的刺。而 riccio 则来自拉丁语 ericius，
ericius 正是拉丁语刺猬。
&lt;/p&gt;

&lt;p&gt;
不管是由于惊吓还是自身活跃，caprice 就是一种任性的想法和行为。
&lt;/p&gt;

&lt;p&gt;
caprice 还是音乐术语：幻想曲。
&lt;/p&gt;

&lt;p&gt;
caprice 的形容词形式 capricious 反复无常的、任性的、变化莫测的、不合逻辑的。
&lt;/p&gt;

&lt;p&gt;
保罗·科埃略（Paulo Coelho）在《牧羊少年奇幻之旅》（the Alchemist）
(&lt;a href=&quot;#citeproc_bib_item_1&quot;&gt;Coelho 1988&lt;/a&gt;) 中写到过：The desert is a &lt;b&gt;capricious&lt;/b&gt; lady,
and sometimes she drives men crazy. 沙漠是个反复无常的女士，有时候却会让男人发狂。
&lt;/p&gt;

&lt;p&gt;
&lt;b&gt;References&lt;/b&gt;
&lt;/p&gt;

&lt;style&gt;.csl-entry{text-indent: -1.5em; margin-left: 1.5em;}&lt;/style&gt;&lt;div class=&quot;csl-bib-body&quot;&gt;
  &lt;div class=&quot;csl-entry&quot;&gt;&lt;a id=&quot;citeproc_bib_item_1&quot;&gt;&lt;/a&gt;Coelho, Paulo. 1988. &lt;i&gt;The Alchemist&lt;/i&gt;.&lt;/div&gt;
  &lt;div class=&quot;csl-entry&quot;&gt;&lt;a id=&quot;citeproc_bib_item_2&quot;&gt;&lt;/a&gt;Harari, Yuval Noah. 2014. &lt;i&gt;Sapiens: A Brief History of Humankind&lt;/i&gt;. Harper Perennial.&lt;/div&gt;
&lt;/div&gt;
</content>
 </entry>
 
 <entry>
   <title>单词本：acquiesce</title>
   <link href="http://kimi.im/2024-02-17-acquiesce"/>
   <updated>2024-02-17T00:00:00+00:00</updated>
   <id>http://kimi.im/acquiesce</id>
   <content type="html">&lt;p&gt;
《人类简史》(&lt;a href=&quot;#citeproc_bib_item_1&quot;&gt;&lt;i&gt;Sapiens: A Brief History of Humankind&lt;/i&gt; 2014&lt;/a&gt;) 写到美国在 1860 年通过一场血腥的内战才让南方各州勉强接受了非洲奴隶也是应当享有自由权利的人类：
&lt;/p&gt;

&lt;p&gt;
When, in 1860, a majority of American citizens concluded that African
slaves are human beings and must therefore enjoy the right of liberty,
it took a bloody civil war to make the southern states &lt;b&gt;acquiesce&lt;/b&gt;.
&lt;/p&gt;

&lt;p&gt;
&lt;b&gt;acquiesce&lt;/b&gt; 这个单词的意思是默许、勉强同意。
&lt;/p&gt;

&lt;p&gt;
其实，从词源上看，ac- 源自拉丁语 ad- 即英语 to 的意思，而 quiesce 则源自 quiescere 安静。那么，连在一起就是become quiet的意思，也就是静下来。所以，看起来有些被动的意味，所以可以表达被迫的勉强的静下来接受他人的要求的意思。
&lt;/p&gt;

&lt;p&gt;
法语的 acquiescer 也是这个意思。比如 il &lt;b&gt;acquiesça&lt;/b&gt; d&amp;rsquo;un signe de tête
他点头答应了。
&lt;/p&gt;

&lt;p&gt;
但是，因为英语 -er 后缀是行动者的意思，所以英语里 acquiescer 是默许者，就是那种不表示反对或抗议，而默认接受他人意见或决定的人。
&lt;/p&gt;

&lt;p&gt;
acquiesce 的名词化单词为 acquiescence，譬如说：An alternative
characterization of &lt;b&gt;acquiescence&lt;/b&gt; might well be considered &amp;ldquo;public
spiritedness,&amp;rdquo; as attempted by Zuckerberg in his recent Congressional
apology – or perhaps better PR. (from Life v. Liberty Goes to Court:
Social-Media &amp;rsquo;Anti-Vaxx-Misinformation&amp;rsquo; Case).
&lt;/p&gt;

&lt;p&gt;
acquiescent 则是 acquiesce 的形容词，比如：But insiders believe Hudson
does not want to be seen as too &lt;b&gt;acquiescent&lt;/b&gt; to industrial action.
&lt;/p&gt;

&lt;p&gt;
&lt;b&gt;References&lt;/b&gt;
&lt;/p&gt;
&lt;style&gt;.csl-entry{text-indent: -1.5em; margin-left: 1.5em;}&lt;/style&gt;&lt;div class=&quot;csl-bib-body&quot;&gt;
  &lt;div class=&quot;csl-entry&quot;&gt;&lt;a id=&quot;citeproc_bib_item_1&quot;&gt;&lt;/a&gt;&lt;i&gt;Sapiens: A Brief History of Humankind&lt;/i&gt;. 2014. Harper Perennial.&lt;/div&gt;
&lt;/div&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines NL.27 用 .cpp 作代码文件名，用 .h 作接口文件名</title>
   <link href="http://kimi.im/2024-02-08-cppcoreguidelines-nl27"/>
   <updated>2024-02-08T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-nl27</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;Use a &lt;code&gt;.cpp&lt;/code&gt; suffix for code files and &lt;code&gt;.h&lt;/code&gt; for interface files&amp;rdquo;
&lt;/p&gt;

&lt;p&gt;
理由
&lt;/p&gt;

&lt;p&gt;
这是一个用了很久的设计约定。但是，一致性更重要，如果你的项目有其他约定，那么请遵循项目约定。
&lt;/p&gt;


&lt;p&gt;
注意
&lt;/p&gt;

&lt;p&gt;
这个约定也反映了一个使用模式：头文件通常会在 C 和 C++ 中共享。这样，用一样的&lt;code&gt;.h&lt;/code&gt;作为头文件的结尾，比不同的结尾，可以更好的进行共享。另一方面，代码实现在 C 和 C++ 之间不太会共享，所以用&lt;code&gt;.c&lt;/code&gt;和 &lt;code&gt;.cpp&lt;/code&gt; 把两者区分开来就比较好。
&lt;/p&gt;

&lt;p&gt;
当然，用&lt;code&gt;.h&lt;/code&gt;和 &lt;code&gt;.cpp&lt;/code&gt; 两个后缀也不是强制的。只是作为默认选项。还有其他很多选项也有广泛的应用。比如&lt;code&gt;.hh&lt;/code&gt; &lt;code&gt;.C&lt;/code&gt; &lt;code&gt;.cxx&lt;/code&gt;等。用起来没太大差别。在这个文档中，我们选择&lt;code&gt;.h&lt;/code&gt;和 &lt;code&gt;.cpp&lt;/code&gt; 作为头文件和实现文件的简称。实际后缀可能会不同。
&lt;/p&gt;

&lt;p&gt;
你用的IDE 可能对于文件后缀有很强的要求：
&lt;/p&gt;


&lt;p&gt;
例子
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-C++&quot;&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;// foo.h:&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;extern&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;a&lt;/span&gt;;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// a declaration&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;extern&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;foo&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;;

&lt;span style=&quot;color: #3F7F5F;&quot;&gt;// foo.cpp:&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;a&lt;/span&gt;;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// a definition&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;foo&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;++&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;a&lt;/span&gt;; &lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
&lt;code&gt;foo.h&lt;/code&gt; 提供&lt;code&gt;foo.cpp&lt;/code&gt;的接口。最好避免全局变量。
&lt;/p&gt;



&lt;p&gt;
坏例子
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-bad src-C++&quot;&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;// foo.h:&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;a&lt;/span&gt;;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// a definition&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;foo&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;++&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;a&lt;/span&gt;; &lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
在程序中添加&lt;code&gt;#include &amp;lt;foo.h&amp;gt;&lt;/code&gt;两次，会导致链接错误，因为违反了“单次定义规则”。
&lt;/p&gt;


&lt;p&gt;
强化
&lt;/p&gt;

&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;标记非约定的文件名&lt;/li&gt;
&lt;li&gt;检查是不是遵循&lt;code&gt;.h&lt;/code&gt;  &lt;code&gt;.cpp&lt;/code&gt; 文件命名规则&lt;/li&gt;
&lt;/ul&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines NL.26 用常规的 const 标记方式</title>
   <link href="http://kimi.im/2024-02-07-cppcoreguidelines-nl26"/>
   <updated>2024-02-07T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-nl26</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;Use conventional &lt;code&gt;const&lt;/code&gt; notation“
&lt;/p&gt;

&lt;p&gt;
理由
&lt;/p&gt;

&lt;p&gt;
程序员更熟悉常规的 &lt;code&gt;const&lt;/code&gt; 标记方式。在很大的代码库中一致性更好。
&lt;/p&gt;


&lt;p&gt;
例子
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;x&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;7&lt;/span&gt;;    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// OK&lt;/span&gt;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;p&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #110099; font-weight: bold;&quot;&gt;nullptr&lt;/span&gt;;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// OK, constant pointer to constant int&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-bad src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;y&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;9&lt;/span&gt;;    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// bad&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;p&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #110099; font-weight: bold;&quot;&gt;nullptr&lt;/span&gt;;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// bad, constant pointer to constant int&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
注意
&lt;/p&gt;

&lt;p&gt;
我们也注意到了，用不建议的常量声明方式好想更符合逻辑。但是，会令很多人迷惑，尤其是那些刚学好学校资料的人。他们更熟悉这种通常的、常规的风格。
&lt;/p&gt;

&lt;p&gt;
还要注意，这里的一些命名规则和代码布局很多时候是一种美学考量，不同的人有不同的审美风格。
&lt;/p&gt;

&lt;p&gt;
如果没有其他更好的想法的话，请遵循这条规则。这条规则是很多人要求添加的。
&lt;/p&gt;


&lt;p&gt;
强化
&lt;/p&gt;

&lt;p&gt;
标记把 &lt;code&gt;const&lt;/code&gt; 放在类型后面的情况
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines NL.25 不要用 void 作为参数类型</title>
   <link href="http://kimi.im/2024-02-06-cppcoreguidelines-nl25"/>
   <updated>2024-02-06T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-nl25</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;Don’t use &lt;code&gt;void&lt;/code&gt; as an argument type&amp;rdquo;
&lt;/p&gt;

&lt;p&gt;
理由
&lt;/p&gt;

&lt;p&gt;
很繁琐，只有和 C 兼容的时候才需要。
&lt;/p&gt;


&lt;p&gt;
例子
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-bad src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// bad&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;g&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;;       &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// better&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;
注意
&lt;/p&gt;

&lt;p&gt;
Dennis Ritchie 都认为应该淘汰&lt;code&gt;f(void)&lt;/code&gt;。你可能认为淘汰掉这个函数声明方式会导致一些奇怪的问题：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-bad src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;;
&lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;1&lt;/span&gt;, &lt;span style=&quot;color: #110099;&quot;&gt;2&lt;/span&gt;, &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;weird but valid C89&quot;&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;
&lt;span style=&quot;color: #3F7F5F;&quot;&gt;// hope that f() is defined int f(a, b, c) char* c; { /* ... */ }&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
其实可以放心。在 21 世纪，以及在C++中不会出现这个问题。
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines NL.21 一次只声明一个变量名</title>
   <link href="http://kimi.im/2024-02-04-cppcoreguidelines-nl21"/>
   <updated>2024-02-04T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-nl21</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;Declare one name (only) per declaration&amp;rdquo;
&lt;/p&gt;

&lt;p&gt;
理由
&lt;/p&gt;

&lt;p&gt;
可读性。减小声明语法的误读。
&lt;/p&gt;

&lt;p&gt;
详细查看：&lt;a href=&quot;./2023-03-18-cppcoreguidelines-es10&quot;&gt;CppCoreGuidelines ES.10 一个声明语句只声明一个变量&lt;/a&gt;
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines NL.20 不要在同一行写两个表达式语句</title>
   <link href="http://kimi.im/2024-02-03-cppcoreguidelines-nl20"/>
   <updated>2024-02-03T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-nl20</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;Don&amp;rsquo;t place two statements on the same line&amp;rdquo;
&lt;/p&gt;

&lt;p&gt;
理由
&lt;/p&gt;

&lt;p&gt;
可读性。如果没有单独的一行，很容易忽略其中一个表达式。
&lt;/p&gt;

&lt;p&gt;
例子
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-bad src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;x&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;7&lt;/span&gt;; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;char&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;*&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;p&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;29&lt;/span&gt;;    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// don&apos;t&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;x&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;7&lt;/span&gt;; &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;x&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;  &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;++&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;x&lt;/span&gt;;      &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// don&apos;t&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
强化
&lt;/p&gt;

&lt;p&gt;
很容易
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines NL.19 避免很容易误读的名字</title>
   <link href="http://kimi.im/2024-02-02-cppcoreguidelines-nl19"/>
   <updated>2024-02-02T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-nl19</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;Avoid names that are easily misread&amp;rdquo;
&lt;/p&gt;

&lt;p&gt;
理由
&lt;/p&gt;

&lt;p&gt;
可读性。并非每个人的显示器和打印机能很好区分所有字符。对于相似的拼写和细小的错拼，我们很容易误读。
&lt;/p&gt;


&lt;p&gt;
例子
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-bad src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;oO01lL&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;6&lt;/span&gt;; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// bad&lt;/span&gt;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;splunk&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;7&lt;/span&gt;;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;splonk&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;8&lt;/span&gt;; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// bad: splunk and splonk are easily confused&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines NL.18 用 C++ 风格的声明布局</title>
   <link href="http://kimi.im/2024-02-01-cppcoreguidelines-nl18"/>
   <updated>2024-02-01T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-nl18</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;Use C++-style declarator layout&amp;rdquo;
&lt;/p&gt;

&lt;p&gt;
理由
&lt;/p&gt;

&lt;p&gt;
C 风格的布局强调表达式和语法，而 C++ 风格的布局则强调类型。对表达式的要求不适用于引用。
&lt;/p&gt;

&lt;p&gt;
例子
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-C++&quot;&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt; operator&lt;span style=&quot;color: #707183;&quot;&gt;[]&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;size_t&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// OK&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-bad src-C++&quot;&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt;operator&lt;span style=&quot;color: #707183;&quot;&gt;[]&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;size_t&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// just strange&lt;/span&gt;
&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt; operator&lt;span style=&quot;color: #707183;&quot;&gt;[]&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;size_t&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// undecided&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
注意
&lt;/p&gt;

&lt;p&gt;
如果没有其他更好的想法的话，请遵循这条规则。这条规则是很多人要求添加的。
&lt;/p&gt;

&lt;p&gt;
强化
&lt;/p&gt;

&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;因为历史原因，很难强化。&lt;/li&gt;
&lt;/ul&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines NL.17 用 K&R 风格的代码布局</title>
   <link href="http://kimi.im/2024-01-31-cppcoreguidelines-nl17"/>
   <updated>2024-01-31T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-nl17</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;Use K&amp;amp;R-derived layout&amp;rdquo;
&lt;/p&gt;

&lt;p&gt;
理由
&lt;/p&gt;

&lt;p&gt;
K&amp;amp;R 风格是 C 和 C++ 的传统布局。保留足够的垂直空间。很好地区分不同的语言结构，如函数和类。
&lt;/p&gt;


&lt;p&gt;
注意
&lt;/p&gt;

&lt;p&gt;
在 C++ 中，这种风格经常称为 “Stroustrup” 风格。
&lt;/p&gt;

&lt;p&gt;
这条只是个建议。如果没有其他更好的想法的话，请遵循这条规则。这条规则是很多人要求添加的。
&lt;/p&gt;


&lt;p&gt;
例子
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;struct&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Cable&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;x&lt;/span&gt;;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ...&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;double&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;foo&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;x&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;0&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt; x&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;
        &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ...&lt;/span&gt;
    &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;

    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;switch&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;x&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;case&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;0&lt;/span&gt;:
        &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ...&lt;/span&gt;
        &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;break&lt;/span&gt;;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;case&lt;/span&gt; amazing:
        &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ...&lt;/span&gt;
        &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;break&lt;/span&gt;;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;default&lt;/span&gt;:
        &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ...&lt;/span&gt;
        &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;break&lt;/span&gt;;
    &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;

    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;0&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt; x&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;
        &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;++&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;x&lt;/span&gt;;

    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;x &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;
        &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;something&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt;;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;else&lt;/span&gt;
        &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;something_else&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt;;

    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; some_value;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
注意 &lt;code&gt;if&lt;/code&gt; 和 &lt;code&gt;(&lt;/code&gt; 之间的空格。
&lt;/p&gt;



&lt;p&gt;
注意
&lt;/p&gt;

&lt;p&gt;
每个语句之间的空行， &lt;code&gt;if&lt;/code&gt; 语句的分支，以及 &lt;code&gt;if&lt;/code&gt; 语句的内部。
&lt;/p&gt;


&lt;p&gt;
注意
&lt;/p&gt;

&lt;p&gt;
类定义的 &lt;code&gt;{&lt;/code&gt; 不新开一行。而函数的 &lt;code&gt;{&lt;/code&gt; 会另起一行。
&lt;/p&gt;


&lt;p&gt;
注意
&lt;/p&gt;

&lt;p&gt;
用户自定义的类型首字母大写，以区分标准库类型。
&lt;/p&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;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines NL.16 遵循常规的类成员声明顺序</title>
   <link href="http://kimi.im/2024-01-30-cppcoreguidelines-nl16"/>
   <updated>2024-01-30T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-nl16</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;Use a conventional class member declaration order&amp;rdquo;
&lt;/p&gt;

&lt;p&gt;
理由
&lt;/p&gt;

&lt;p&gt;
常规的类成员顺序提升可读性。
&lt;/p&gt;


&lt;p&gt;
声明类成员的时候，遵循以下顺序：
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;类型：类类型、枚举类型、别名（using）&lt;/li&gt;
&lt;li&gt;构造函数、赋值函数、析构函数&lt;/li&gt;
&lt;li&gt;成员函数&lt;/li&gt;
&lt;li&gt;成员数据&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
先 &lt;code&gt;public&lt;/code&gt;  再 &lt;code&gt;protected&lt;/code&gt;  最后 &lt;code&gt;private&lt;/code&gt;
&lt;/p&gt;

&lt;p&gt;
如果没有其他更好的想法的话，请遵循这条规则。这条规则是很多人要求添加的。
&lt;/p&gt;


&lt;p&gt;
例子
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;X&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;public&lt;/span&gt;:
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// interface&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;protected&lt;/span&gt;:
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// unchecked function for use by derived class implementations&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;private&lt;/span&gt;:
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// implementation details&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;
&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;
例子
&lt;/p&gt;

&lt;p&gt;
有时候，默认的声明顺序违反了公开接口和实现细节分开的想法，这个时候，私有类型和函数定义可以放在 &lt;code&gt;private&lt;/code&gt; 下。
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;X&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;public&lt;/span&gt;:
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// interface&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;protected&lt;/span&gt;:
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// unchecked function for use by derived class implementations&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;private&lt;/span&gt;:
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// implementation details (types, functions, and data)&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;
&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;
坏例子
&lt;/p&gt;

&lt;p&gt;
不要连续放多个一样的访问设定，如 &lt;code&gt;public&lt;/code&gt; 。或者交替使用不同的访问设定。
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-bad src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;X&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// bad&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;public&lt;/span&gt;:
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold; font-style: italic;&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt;;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;public&lt;/span&gt;:
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold; font-style: italic;&quot;&gt;g&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt;;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ...&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
用宏定义声明一组成员往往会违反此规则。其实宏定义还混淆了我们所要表达的程序意图。
&lt;/p&gt;


&lt;p&gt;
强化
&lt;/p&gt;

&lt;p&gt;
标记违反本规则建议的顺序的情况。可能会有很多老的代码违反了此规则。
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines NL.15 节约使用空格</title>
   <link href="http://kimi.im/2024-01-29-cppcoreguidelines-nl15"/>
   <updated>2024-01-29T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-nl15</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;Use spaces sparingly&amp;rdquo;
&lt;/p&gt;

&lt;p&gt;
理由
&lt;/p&gt;

&lt;p&gt;
空格太多的话，代码显得很长，很分散。
&lt;/p&gt;

&lt;p&gt;
坏例子
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-bad src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;#include&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&amp;lt; map &amp;gt;&lt;/span&gt;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;main&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;argc&lt;/span&gt;, &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;char&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;*&lt;/span&gt; argv &lt;span style=&quot;color: #7388d6;&quot;&gt;[&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;]&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ...&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
好例子
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;#include&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&amp;lt;map&amp;gt;&lt;/span&gt;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;main&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;argc&lt;/span&gt;, &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;char&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;*&lt;/span&gt; argv&lt;span style=&quot;color: #7388d6;&quot;&gt;[]&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ...&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;
注意
&lt;/p&gt;

&lt;p&gt;
有些 IDE 有自己的设定，会添加一些额外的空格。
&lt;/p&gt;

&lt;p&gt;
如果没有其他更好的想法的话，请遵循这条规则。这条规则是很多人要求添加的。
&lt;/p&gt;


&lt;p&gt;
注意
&lt;/p&gt;

&lt;p&gt;
我们鼓励恰当好处的空格。可以提升可读性。但是不要过多。
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines NL.11 字面量要容易读</title>
   <link href="http://kimi.im/2024-01-28-cppcoreguidelines-nl11"/>
   <updated>2024-01-28T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-nl11</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;Make literals readable&amp;rdquo;
&lt;/p&gt;

&lt;p&gt;
理由
&lt;/p&gt;

&lt;p&gt;
可读性。
&lt;/p&gt;


&lt;p&gt;
例子
&lt;/p&gt;

&lt;p&gt;
用数字分隔号把长数字分隔开。
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;auto&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;c&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;299&apos;792&apos;458&lt;/span&gt;; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// m/s2&lt;/span&gt;
&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;auto&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;q2&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;0b0000&apos;1111&apos;0000&apos;0000&lt;/span&gt;;
&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;auto&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;ss_number&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;123&apos;456&apos;7890&lt;/span&gt;;
&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;
例子
&lt;/p&gt;

&lt;p&gt;
用字面量后缀区分不同类型。
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;auto&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;hello&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;Hello!&quot;&lt;/span&gt;s; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// a std::string&lt;/span&gt;
&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;auto&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;world&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;world&quot;&lt;/span&gt;;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// a C-style string&lt;/span&gt;
&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;auto&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;interval&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;100&lt;/span&gt;ms;  &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// using &amp;lt;chrono&amp;gt;&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;
注意
&lt;/p&gt;

&lt;p&gt;
字面量不应该作为&lt;a href=&quot;./2023-04-19-cppcoreguidelines-es45&quot;&gt;神秘常量&lt;/a&gt;在代码里到处分散开来。但是，在其定义的地方把他们变的更容易读取还是值得的。对于很长的数字，很容易写错。
&lt;/p&gt;


&lt;p&gt;
强化
&lt;/p&gt;

&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;标记很长的数字序列。很难定义什么是“长”，或许超过 7 个数字就算长了。&lt;/li&gt;
&lt;/ul&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines NL.10 建议用下划线命名风格 underscore_style</title>
   <link href="http://kimi.im/2024-01-27-cppcoreguidelines-nl10"/>
   <updated>2024-01-27T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-nl10</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;Prefer underscore_style names&amp;rdquo;
&lt;/p&gt;

&lt;p&gt;
理由
&lt;/p&gt;

&lt;p&gt;
C 和 C++ 传统风格是用下划线分隔名称中的单词。 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;
Stroustrup 说：这条符合 ISO 标准。但是在自己定义的类型和概念 concept
中用大写字母开头：
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;&lt;code&gt;int&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;vector&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;My_map&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
强化  
&lt;/p&gt;

&lt;p&gt;
没法强化。
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines NL.9 全大写只用于宏名字</title>
   <link href="http://kimi.im/2024-01-25-cppcoreguidelines-nl9"/>
   <updated>2024-01-25T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-nl9</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;Use &lt;code&gt;ALL_CAPS&lt;/code&gt; for macro names only&amp;rdquo;
&lt;/p&gt;

&lt;p&gt;
理由
&lt;/p&gt;

&lt;p&gt;
避免宏名字和其他的变量和类型名字混淆。
&lt;/p&gt;


&lt;p&gt;
例子
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;SIZE&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;1000&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;;  &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// Bad, use &apos;size&apos; instead&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;v&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;SIZE&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;]&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;
注意
&lt;/p&gt;

&lt;p&gt;
此规则不适用于不是宏定义的符号常量：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;enum&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;bad&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;BAD&lt;/span&gt;, &lt;span style=&quot;color: #000000;&quot;&gt;WORSE&lt;/span&gt;, &lt;span style=&quot;color: #000000;&quot;&gt;HORRIBLE&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// BAD&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
强化
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;标记用小写字母的宏名字&lt;/li&gt;
&lt;li&gt;标记用全大写的非宏定义名字&lt;/li&gt;
&lt;/ul&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines NL.8 遵循一致的命名风格</title>
   <link href="http://kimi.im/2024-01-24-cppcoreguidelines-nl8"/>
   <updated>2024-01-24T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-nl8</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;Use a consistent naming style&amp;rdquo;
&lt;/p&gt;

&lt;p&gt;
理由
&lt;/p&gt;

&lt;p&gt;
一致的命名风格增加可读性。
&lt;/p&gt;


&lt;p&gt;
注意
&lt;/p&gt;

&lt;p&gt;
可能在不同的库里用了不同的命名风格。你无法遵循不同的命名风格。所以，自己写的代码用自己的风格，库代码用其原来的风格。
&lt;/p&gt;


&lt;p&gt;
例子
&lt;/p&gt;

&lt;p&gt;
ISO 标准中，只用到小写字母、数字和下划线区分单词。
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;&lt;code&gt;int&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;vector&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;my_map&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
请避免双下划线  &lt;code&gt;__&lt;/code&gt;
&lt;/p&gt;


&lt;p&gt;
例子
&lt;/p&gt;

&lt;p&gt;
Stroustrup 说的：遵循 ISO 标准。但是自己的类型和概念 concept 用大写字母：
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;&lt;code&gt;int&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;vector&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;My_map&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
例子
&lt;/p&gt;

&lt;p&gt;
CamelCase：把多个单词组成的标识符中的每个单词首字母大写：
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;&lt;code&gt;int&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;vector&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;MyMap&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;myMap&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
有些约定会把第一个字母大写，有些不这么做。
&lt;/p&gt;


&lt;p&gt;
注意
&lt;/p&gt;

&lt;p&gt;
尽量保持使用相同的缩写，标识符的长度也一致。
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;mtbf&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;12&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;mean_time_between_failures&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;12&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// make up your mind&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
强化
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;可能可以，除了库函数会用到不同的命名约定&lt;/li&gt;
&lt;/ul&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines NL.7 名字的长短和其作用范围匹配</title>
   <link href="http://kimi.im/2024-01-23-cppcoreguidelines-nl7"/>
   <updated>2024-01-23T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-nl7</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;Make the length of a name roughly proportional to the length of its
scope&amp;rdquo;
&lt;/p&gt;

&lt;p&gt;
理由
&lt;/p&gt;

&lt;p&gt;
越大的作用域范围，会容易出现混淆和不小心的名字冲突。
&lt;/p&gt;


&lt;p&gt;
例子
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;double&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;sqrt&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;double&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;x&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// return the square root of x; x must be non-negative&lt;/span&gt;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;length&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;char&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;*&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;p&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;  &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// return the number of characters in a zero-terminated C-style string&lt;/span&gt;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;length_of_string&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;char&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;zero_terminated_array_of_char&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;[]&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// bad: verbose&lt;/span&gt;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;g&lt;/span&gt;;      &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// bad: global variable with a cryptic name&lt;/span&gt;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;open&lt;/span&gt;;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// bad: global variable with a short, popular name&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
用 &lt;code&gt;p&lt;/code&gt; 做指针，用 &lt;code&gt;x&lt;/code&gt; 做浮点变量是常见的约定，不太会产生混淆。
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines NL.5 避免把类型信息编码到变量名中</title>
   <link href="http://kimi.im/2024-01-22-cppcoreguidelines-nl5"/>
   <updated>2024-01-22T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-nl5</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;Avoid encoding type information in names&amp;rdquo;
&lt;/p&gt;

&lt;p&gt;
理由
&lt;/p&gt;

&lt;p&gt;
如果变量名隐含了类型信息而不是功能，那么，要保持变量的功能，而修改变量的类型就变的困难了。另外，如果变量的类型改变了，那么使用这个带类型名字的变量就得修改。请尽量减少不必要的转换。
&lt;/p&gt;


&lt;p&gt;
坏例子
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;print_int&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;i&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;print_string&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;char&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;

&lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;print_int&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;          &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// repetitive, manual type matching&lt;/span&gt;
&lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;print_string&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;xyzzy&quot;&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// repetitive, manual type matching&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
好例子
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;print&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;i&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;print&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;string_view&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// also works on any string-like sequence&lt;/span&gt;

&lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;print&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;              &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// clear, automatic type matching&lt;/span&gt;
&lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;print&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;xyzzy&quot;&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;        &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// clear, automatic type matching&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;
注意
&lt;/p&gt;

&lt;p&gt;
带类型的变量名要么繁琐，要么难懂。
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;printS&lt;/span&gt;  &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// print a std::string&lt;/span&gt;
prints  &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// print a C-style string&lt;/span&gt;
printi  &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// print an int&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;
以前，在无类型语言中，要求用匈牙利命名法把类型编码到变量命中，但是在
C++ 之类静态强类型语言中，这种做法一般来说是没必要的，而且可能会导致不好的影响。因为类型信息可能跟不上代码改动。而且也组织了语言中的好用的重载机制。
&lt;/p&gt;


&lt;p&gt;
注意
&lt;/p&gt;

&lt;p&gt;
有些风格会添加一些通用信息到变量中
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;auto&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;p&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;User&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;;
&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;auto&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;p&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;make_unique&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;User&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;;
&lt;span style=&quot;color: #3F7F5F;&quot;&gt;// note: &quot;p&quot; is not being used to say &quot;raw pointer to type User,&quot;&lt;/span&gt;
&lt;span style=&quot;color: #3F7F5F;&quot;&gt;//       just generally to say &quot;this is an indirection&quot;&lt;/span&gt;

&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;auto&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;cntHits&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;calc_total_of_hits&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;/*...*/&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;
&lt;span style=&quot;color: #3F7F5F;&quot;&gt;// note: &quot;cnt&quot; is not being used to encode a type,&lt;/span&gt;
&lt;span style=&quot;color: #3F7F5F;&quot;&gt;//       just generally to say &quot;this is a count of something&quot;&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
这种做法没有坏处。不属于本指南的范畴。因为他们没有把类型编码到变量中。
&lt;/p&gt;


&lt;p&gt;
注意
&lt;/p&gt;

&lt;p&gt;
有些风格会区分成员变量、局部变量和全局变量。
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;struct&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;S&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;m_&lt;/span&gt;;
    &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;S&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;m&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; : &lt;span style=&quot;color: #110099; font-style: italic;&quot;&gt;m_&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;abs&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;m&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
这种做法没有坏处。不属于本指南的范畴。因为他们没有把类型编码到变量中。
&lt;/p&gt;


&lt;p&gt;
注意
&lt;/p&gt;

&lt;p&gt;
有些风格会区分区分类型和非类型的名字，比如在类型名上添加大小写字母，但是函数和变量名不添加。
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;typename&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;typename&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;HashTable&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// maps string to T&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ...&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;

&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;HashTable&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;index&lt;/span&gt;;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
这种做法没有坏处。不属于本指南的范畴。因为他们没有把类型编码到变量中。
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines NL.4 维护一致的缩进风格</title>
   <link href="http://kimi.im/2024-01-21-cppcoreguidelines-nl4"/>
   <updated>2024-01-21T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-nl4</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;Maintain a consistent indentation style&amp;rdquo;
&lt;/p&gt;

&lt;p&gt;
理由
&lt;/p&gt;


&lt;p&gt;
可读性。避免愚蠢的错误。
&lt;/p&gt;

&lt;p&gt;
坏例子
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;i&lt;/span&gt;;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;for&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;i&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;0&lt;/span&gt;; i &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt; max; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;++&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;i&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// bug waiting to happen&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;i &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;==&lt;/span&gt; j&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; i;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
注意
&lt;/p&gt;

&lt;p&gt;
最好在 &lt;code&gt;if (...)&lt;/code&gt; ， &lt;code&gt;for (...)&lt;/code&gt;  和 &lt;code&gt;while (...)&lt;/code&gt;  之后缩进。
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;i &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;error&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;negative argument&quot;&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;i &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
    &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;error&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;negative argument&quot;&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;
&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;
强化
&lt;/p&gt;

&lt;p&gt;
使用工具
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines NL.3 注释清晰</title>
   <link href="http://kimi.im/2024-01-20-cppcoreguidelines-nl3"/>
   <updated>2024-01-20T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-nl3</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;Keep comments crisp&amp;rdquo;
&lt;/p&gt;

&lt;p&gt;
理由
&lt;/p&gt;

&lt;p&gt;
太细致的注释理解起来很慢，代码里太多的注释使得代码很难解读。
&lt;/p&gt;


&lt;p&gt;
注意
&lt;/p&gt;

&lt;p&gt;
用可理解的英语。我可能德语流利，但是大部分程序员不是。维护我的代码的人可能不会。避免短信用语，检查你的语法、标点、大小写。争取做到专业，而不是酷。
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines NL.2 在注释中表明意图</title>
   <link href="http://kimi.im/2024-01-17-cppcoreguidelines-nl2"/>
   <updated>2024-01-17T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-nl2</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;State intent in comments&amp;rdquo;
&lt;/p&gt;

&lt;p&gt;
理由
&lt;/p&gt;

&lt;p&gt;
代码说明做了什么，而不是打算要做什么。通常代码意图能比代码实现说明地更清晰准确。
&lt;/p&gt;


&lt;p&gt;
例子
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;stable_sort&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Sortable&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;c&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// sort c in the order determined by &amp;lt;, keep equal elements (as&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// defined by ==) in their original relative order&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ... quite a few lines of non-trivial code ...&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;
注意
&lt;/p&gt;

&lt;p&gt;
如果代码和注释冲突，那么两者可能都出错了。
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>单词本：corpse</title>
   <link href="http://kimi.im/2024-01-17-corpse"/>
   <updated>2024-01-17T00:00:00+00:00</updated>
   <id>http://kimi.im/corpse</id>
   <content type="html">&lt;p&gt;
西风颂第一节第三小段中出现一个单词 &lt;b&gt;corpse&lt;/b&gt; ：
&lt;/p&gt;

&lt;p class=&quot;verse&quot;&gt;
The winged seeds, where they lie cold and low,&lt;br /&gt;
Each like a corpse within its grave, until&lt;br /&gt;
Thine azure sister of the Spring shall blow&lt;br /&gt;
&lt;/p&gt;

&lt;p&gt;
与这个单词相关的内容，我们之前学到过两次：
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;&lt;a href=&quot;./2023-10-28-corpus&quot;&gt;单词本：corpus&lt;/a&gt; 全体、全集&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;./2021-03-12-francais-esprit-de-corps&quot;&gt;单词本：Esprit de corps&lt;/a&gt; 集体精神&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
这里 corpse 其实是尸体的意思。比如之前学到过的 Corpse Bride 僵尸新娘，还有瑜伽的 corpse pose 平躺在地姿势。
&lt;/p&gt;

&lt;p&gt;
总之，这个词来自拉丁语 corpus 本来指的就是身体，包括活的以及死的。然后流转到古法语 cors，以及现代法语 corps 。它的意思还是指身体。比如 robe
près du corps 很贴身紧身的衣服，corps gras 身体很肥，corps à corps 身体扭打在一起，se battre au corps à corps 近身肉搏。
&lt;/p&gt;

&lt;p&gt;
在德语里变了个字母 der Körper 还是身体的意思。比如 Körpergeruch 体味，
Körpergröße 身高，Körperverletzung 身体受伤。
&lt;/p&gt;

&lt;p&gt;
然而，不知道怎么的，从法语流转到英语就变成尸体的意思了。
&lt;/p&gt;

&lt;p&gt;
最后，前面提到的那一段，我们来试着翻译下：
&lt;/p&gt;

&lt;p class=&quot;verse&quot;&gt;
种有翼兮，寒且潜。&lt;br /&gt;
若死灰兮，墓中眠。&lt;br /&gt;
待春姊兮，忽吹还。&lt;br /&gt;
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines NL.1 如果能在代码中清晰说明的不要放在注释中</title>
   <link href="http://kimi.im/2024-01-16-cppcoreguidelines-nl1"/>
   <updated>2024-01-16T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-nl1</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;Don’t say in comments what can be clearly stated in code&amp;rdquo;
&lt;/p&gt;

&lt;p&gt;
理由
&lt;/p&gt;

&lt;p&gt;
编译器不读取注释。注释比代码精确度低。注释不一定跟代码保持一致。
&lt;/p&gt;

&lt;p&gt;
坏例子
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;auto&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;x&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; m &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;*&lt;/span&gt; v1 &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;+&lt;/span&gt; vv;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// multiply m with v1 and add the result to vv&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
强化
&lt;/p&gt;

&lt;p&gt;
查看是否能在 C++ 中更好地表达
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines NR.7 不要把所有数据车内隔音设置为 protected</title>
   <link href="http://kimi.im/2024-01-15-cppcoreguidelines-nr7"/>
   <updated>2024-01-15T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-nr7</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;Don’t make all data members protected&amp;rdquo;
&lt;/p&gt;

&lt;p&gt;
理由
&lt;/p&gt;

&lt;p&gt;
&lt;code&gt;protected&lt;/code&gt; 数据成员是很多错误的根源。我们可以在很多地方操作 &lt;code&gt;protected&lt;/code&gt;
数据。 &lt;code&gt;protected&lt;/code&gt;  数据在类层级中类似于全局变量。
&lt;/p&gt;


&lt;p&gt;
其他方案
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;&lt;a href=&quot;./2022-12-18-cppcoreguidelines-c133&quot;&gt;把类成员数据设置为 &lt;code&gt;public&lt;/code&gt; 或（最好是） &lt;code&gt;private&lt;/code&gt; &lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</content>
 </entry>
 
 <entry>
   <title>单词本：pestilence</title>
   <link href="http://kimi.im/2024-01-15-pestilence"/>
   <updated>2024-01-15T00:00:00+00:00</updated>
   <id>http://kimi.im/pestilence</id>
   <content type="html">&lt;p&gt;
上一篇，我们在西风颂的第一节第二段中学了 hectic, 后面跟着的 pestilence
也值得学一学。
&lt;/p&gt;

&lt;p class=&quot;verse&quot;&gt;
Yellow, and black, and pale, and hectic red,&lt;br /&gt;
&lt;b&gt;Pestilence&lt;/b&gt;-stricken multitudes: O thou,&lt;br /&gt;
Who chariotest to their dark wintry bed&lt;br /&gt;
&lt;/p&gt;

&lt;p&gt;
pestilence 瘟疫，尤其指腺鼠疫（bubonic plague）。
&lt;/p&gt;

&lt;p&gt;
本单词源自拉丁语 pestilentia 传入病、不健康的空气。而拉丁语单词 pestis
指的是致命的瘟疫。所以很多与 pest 相关的词都不太好：
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;pest 害虫&lt;/li&gt;
&lt;li&gt;pesticide 杀虫剂，我们之前了解过，cide 是从拉丁语 caedere（切割）来的。在&lt;a href=&quot;./2023-03-06-taurus&quot;&gt;单词本：taurus&lt;/a&gt;，我们认识了tauricide 牛磺酸杀虫剂。还有&lt;a href=&quot;./2023-04-05-auspicious&quot;&gt;单词本： auspicious&lt;/a&gt;中，认识的 avicide 杀鸟剂。以及&lt;a href=&quot;./2023-02-26-english-circumcision&quot;&gt;circumcision&lt;/a&gt; 环切手术。&lt;/li&gt;
&lt;li&gt;pestilent 似瘟疫的、致命的、极其讨厌的&lt;/li&gt;
&lt;li&gt;pestology 害虫学、害虫防治学&lt;/li&gt;
&lt;li&gt;pestiferous 传播疾病的、邪恶的&lt;/li&gt;
&lt;li&gt;pestilential 引起瘟疫的、危害社会的&lt;/li&gt;
&lt;/ul&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines NR.6 不要在函数末尾实施清理动作以及 goto exit</title>
   <link href="http://kimi.im/2024-01-14-cppcoreguidelines-nr6"/>
   <updated>2024-01-14T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-nr6</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;Don’t place all cleanup actions at the end of a function and goto exit&amp;rdquo;
&lt;/p&gt;

&lt;p&gt;
理由
&lt;/p&gt;

&lt;p&gt;
&lt;code&gt;goto&lt;/code&gt;  很容易导致错误。这个技术是在没有异常之前，用于 RAII  类型的资源、进行错误处理的方法。
&lt;/p&gt;

&lt;p&gt;
坏例子
&lt;/p&gt;


&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;do_something&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;n&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;n &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;100&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;goto&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;exit&lt;/span&gt;;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ...&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;*&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;p&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;malloc&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;n&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ...&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;some_error&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; goto_exit;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ...&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;exit&lt;/span&gt;:
    &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;free&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;p&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
你能找到错误吗？
&lt;/p&gt;


&lt;p&gt;
其他方案
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;使用异常和 &lt;a href=&quot;./2023-07-28-cppcoreguidelines-e6&quot;&gt;RAII&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;对于非 RAII  资源，用 &lt;a href=&quot;./2023-08-10-cppcoreguidelines-e19&quot;&gt;finally&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</content>
 </entry>
 
 <entry>
   <title>单词本：hectic</title>
   <link href="http://kimi.im/2024-01-14-hectic"/>
   <updated>2024-01-14T00:00:00+00:00</updated>
   <id>http://kimi.im/hectic</id>
   <content type="html">&lt;p&gt;
在《西风颂 Ode to the West Wind》第一节的第二段中，我们读到了 hectic：
&lt;/p&gt;

&lt;p class=&quot;verse&quot;&gt;
Yellow, and black, and pale, and &lt;b&gt;hectic&lt;/b&gt; red,&lt;br /&gt;
Pestilence-stricken multitudes: O thou,&lt;br /&gt;
Who chariotest to their dark wintry bed&lt;br /&gt;
&lt;/p&gt;

&lt;p&gt;
这里应该是形容被西风狂吹的树叶。这些树叶有各种颜色：黄色、黑色、苍白还有潮热发红的。
&lt;/p&gt;

&lt;p&gt;
&lt;b&gt;hectic&lt;/b&gt; red 是形容那种因为肺结核而导致的持续发烧导致脸色发红。
&lt;/p&gt;

&lt;p&gt;
这个词本意是持续的意思。来自希腊语 hexis 身体和心的一种习惯性的状态。
&lt;b&gt;hectic&lt;/b&gt; fever 指的是 a fever of irritation and debility, occurring
usually at a advanced stage of exhausting disease, as a in pulmonary
consumption. 一种因为肺部疾病、持续身体损耗导致的虚弱持续的发烧。
&lt;/p&gt;

&lt;p&gt;
除了脸上发红之外，hectic 还有忙乱、忙碌的意思。
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;He leads a &lt;b&gt;hectic&lt;/b&gt; life in this big city. 他在这个大城市里，过着忙忙碌碌的生活。&lt;/li&gt;
&lt;li&gt;Today was &lt;b&gt;hectic&lt;/b&gt;. 今天真是忙得不亦乐乎。&lt;/li&gt;
&lt;li&gt;Soldiers from the Israel Defense Forces killed two Hamas fighters
during &lt;b&gt;hectic&lt;/b&gt; close-quarters combat that broke out inside a building
in southern Gaza 以色列士兵在一阵忙乱的近身搏击战斗中，杀死了两名哈马斯战士。&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
最后，让我试着翻译西风颂的这一段：
&lt;/p&gt;

&lt;p class=&quot;verse&quot;&gt;
灰黄、漆黑、苍白、病红，&lt;br /&gt;
瘟疫袭击苍生：哦，你啊&lt;br /&gt;
把它们赶向黑暗的寒洞&lt;br /&gt;
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines NR.5 不要用两阶段初始化</title>
   <link href="http://kimi.im/2024-01-13-cppcoreguidelines-nr5"/>
   <updated>2024-01-13T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-nr5</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;Don’t use two-phase initialization&amp;rdquo;
&lt;/p&gt;

&lt;p&gt;
理由
&lt;/p&gt;

&lt;p&gt;
把初始化过程分成两个阶段会导致更弱的不变式、更复杂的代码（需要处理半构造的对象），更多的错误（如果我们没有正确一致地处理半构造的对象）。
&lt;/p&gt;


&lt;p&gt;
坏例子
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;// Old conventional style: many problems&lt;/span&gt;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Picture&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;mx&lt;/span&gt;;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;my&lt;/span&gt;;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;*&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;data&lt;/span&gt;;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;public&lt;/span&gt;:
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// main problem: constructor does not fully construct&lt;/span&gt;
    &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;Picture&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;x&lt;/span&gt;, &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;y&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;
    &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;
        &lt;span style=&quot;color: #000000;&quot;&gt;mx&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; x;         &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// also bad: assignment in constructor body&lt;/span&gt;
                        &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// rather than in member initializer&lt;/span&gt;
        &lt;span style=&quot;color: #000000;&quot;&gt;my&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; y;
        &lt;span style=&quot;color: #000000;&quot;&gt;data&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #110099; font-weight: bold;&quot;&gt;nullptr&lt;/span&gt;; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// also bad: constant initialization in constructor&lt;/span&gt;
                        &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// rather than in member initializer&lt;/span&gt;
    &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;

    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;~&lt;/span&gt;Picture&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt;
    &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;
        &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;Cleanup&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;()&lt;/span&gt;;
    &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;

    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ...&lt;/span&gt;

    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// bad: two-phase initialization&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;bool&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold; font-style: italic;&quot;&gt;Init&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt;
    &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;
        &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// invariant checks&lt;/span&gt;
        &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;mx &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;=&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;0&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;||&lt;/span&gt; my &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;=&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #909183;&quot;&gt;{&lt;/span&gt;
            &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;false&lt;/span&gt;;
        &lt;span style=&quot;color: #909183;&quot;&gt;}&lt;/span&gt;
        &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;data&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #909183;&quot;&gt;{&lt;/span&gt;
            &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;false&lt;/span&gt;;
        &lt;span style=&quot;color: #909183;&quot;&gt;}&lt;/span&gt;
        &lt;span style=&quot;color: #000000;&quot;&gt;data&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;malloc&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;mx&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;*&lt;/span&gt;my&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;sizeof&lt;/span&gt;&lt;span style=&quot;color: #709870;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #709870;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt;;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// also bad: owning&lt;/span&gt;
                                                   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// raw * and malloc&lt;/span&gt;
        &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; data &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;!=&lt;/span&gt; &lt;span style=&quot;color: #110099; font-weight: bold;&quot;&gt;nullptr&lt;/span&gt;;
    &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;

    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// also bad: no reason to make cleanup a separate function&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold; font-style: italic;&quot;&gt;Cleanup&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt;
    &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;
        &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;data&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;free&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;data&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt;;
        &lt;span style=&quot;color: #000000;&quot;&gt;data&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #110099; font-weight: bold;&quot;&gt;nullptr&lt;/span&gt;;
    &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;

&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Picture&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;picture&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;100&lt;/span&gt;, &lt;span style=&quot;color: #110099;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// not ready-to-use picture here&lt;/span&gt;
&lt;span style=&quot;color: #3F7F5F;&quot;&gt;// this will fail..&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;!&lt;/span&gt;picture.&lt;span style=&quot;color: #3a5fcd; font-weight: bold; font-style: italic;&quot;&gt;Init&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;puts&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;Error, invalid picture&quot;&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: #3F7F5F;&quot;&gt;// now have an invalid picture object instance.&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;
好例子
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Picture&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;mx&lt;/span&gt;;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;my&lt;/span&gt;;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;vector&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;data&lt;/span&gt;;

    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;static&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold; font-style: italic;&quot;&gt;check_size&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;size&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;
    &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;
        &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// invariant check&lt;/span&gt;
        &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;Expects&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;size &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt;;
        &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; size;
    &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;public&lt;/span&gt;:
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// even better would be a class for a 2D Size as one single parameter&lt;/span&gt;
    &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;Picture&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;x&lt;/span&gt;, &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;y&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;
        : &lt;span style=&quot;color: #110099; font-style: italic;&quot;&gt;mx&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;check_size&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;x&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;
        , &lt;span style=&quot;color: #110099; font-style: italic;&quot;&gt;my&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;check_size&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;y&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;
        &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// now we know x and y have a valid size&lt;/span&gt;
        , &lt;span style=&quot;color: #110099; font-style: italic;&quot;&gt;data&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;mx &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;*&lt;/span&gt; my&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// will throw std::bad_alloc on error&lt;/span&gt;
    &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;
        &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// picture is ready-to-use&lt;/span&gt;
    &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;

    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// compiler generated dtor does the job. (also see C.21)&lt;/span&gt;

    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ...&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;

&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Picture&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;picture1&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;100&lt;/span&gt;, &lt;span style=&quot;color: #110099;&quot;&gt;100&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;
&lt;span style=&quot;color: #3F7F5F;&quot;&gt;// picture1 is ready-to-use here...&lt;/span&gt;

&lt;span style=&quot;color: #3F7F5F;&quot;&gt;// not a valid size for y,&lt;/span&gt;
&lt;span style=&quot;color: #3F7F5F;&quot;&gt;// default contract violation behavior will call std::terminate then&lt;/span&gt;
&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Picture&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;picture2&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;100&lt;/span&gt;, &lt;span style=&quot;color: #110099;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;
&lt;span style=&quot;color: #3F7F5F;&quot;&gt;// not reach here...&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;
其他方案
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;总是在构造函数中构造类的不变式&lt;/li&gt;
&lt;li&gt;不要在需要使用对象之前定义对象&lt;/li&gt;
&lt;/ul&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines NR.4 不要坚持把每个类定义放在单独的源码文件中</title>
   <link href="http://kimi.im/2024-01-12-cppcoreguidelines-nr4"/>
   <updated>2024-01-12T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-nr4</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;Don’t insist on placing each class definition in its own source file&amp;rdquo;
&lt;/p&gt;

&lt;p&gt;
理由
&lt;/p&gt;

&lt;p&gt;
把每个类定义放在单独的文件中会产生大量文件，难以管理，编译变慢。单独一个类很少情况下是一个好的逻辑单元和分发单元。
&lt;/p&gt;


&lt;p&gt;
其他方案
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;在名字空间中包含逻辑上关联的类和函数&lt;/li&gt;
&lt;/ul&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines NR.3 不要避免异常</title>
   <link href="http://kimi.im/2024-01-11-cppcoreguidelines-nr3"/>
   <updated>2024-01-11T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-nr3</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;Don’t avoid exceptions&amp;rdquo;
&lt;/p&gt;

&lt;p&gt;
理由
&lt;/p&gt;

&lt;p&gt;
似乎有四个理由认为不应该用异常：
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;异常效率低&lt;/li&gt;
&lt;li&gt;异常导致内存泄漏和错误&lt;/li&gt;
&lt;li&gt;异常的性能不稳定&lt;/li&gt;
&lt;li&gt;异常处理需要很多运行时空间&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
我们无法做到人人都满意。尽管，关于异常的讨论已经有 40 多年的历史了。有些语言甚至无法去掉异常单独使用，而另一些则不支持异常。这就导致了一些不同的传统，有的倾向于用异常，有的倾向于不用。然后互相争执不休。
&lt;/p&gt;

&lt;p&gt;
然而，我们还是要简单讨论下为什么我们认为本指南认为编程里使用异常是最好的方案。简单的支持或反的的争论互相不相容。实际上，有一些应用场合中，其实是不建议使用异常的。比如没有可靠的运行时估算的异常是不能用于硬实时系统的。
&lt;/p&gt;

&lt;p&gt;
考虑下反对异常的主要讨论：
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;异常效率低：相比于什么？我们要保证在进行比较的时候，要处理同一组错误，处理效果一样。如果一个程序遇到错误直接终止，而另一个仔细清理资源，然后记录一个错误日志。这就不能放在一起比较了。是的，有的系统的错误处理过程很差；有时候，这种系统强制我们用其他的错误处理方式，但是这不是异常的根本问题。任何情况，当我们在讨论效率问题的时候，一定要小心，我们是否有足够好的数据进行讨论。&lt;/li&gt;
&lt;li&gt;异常导致内存泄漏和错误：不会的。如果你的代码是一个指针的耗子窝（a
rat&amp;rsquo;s nest of pointers），没有一个全局的资源管理策略的话，不管你怎么做，都会出问题。如果你的系统中有成千上万行这样的代码，你可能都没办法用异常。但是，这里的问题是过度的、肆无忌惮的使用指针，而不是异常。我们认为，你需要 RAII 来保证基于异常的错误处理过程简单又安全。这时候，使用异常就比其他错误处理方式更简单更安全。&lt;/li&gt;
&lt;li&gt;异常的性能不稳定：如果你运行硬实时系统，你必须保证在确定的时间结束任务，你需要工具支持这种实时保障。就我们所知，此类工具目前还没有（至少对于大多数程序员来说还没有）。&lt;/li&gt;
&lt;li&gt;异常处理需要很多运行时空间：对于小的嵌入式系统来说可能存在这个问题。但是，在抛弃异常之前，请考虑下，用错误码的方式处理错误需要多少空间，没捕捉到错误会造成什么样的故障。&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
很多，可能是大部分的关于异常的问题，都是因为需要处理老旧混乱代码造成的。  
&lt;/p&gt;

&lt;p&gt;
支持使用异常的基本论断是：
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;他们清晰的分清错误的函数返回和普通的函数返回。&lt;/li&gt;
&lt;li&gt;你无法忘记或忽略异常。&lt;/li&gt;
&lt;li&gt;你可以系统的使用异常。&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;
记住
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;异常用于报告错误（在 C++ 语言中），其他语言里异常可能有其他用处。&lt;/li&gt;
&lt;li&gt;异常用于无法局部处理的错误。&lt;/li&gt;
&lt;li&gt;不要尝试在每个函数中捕捉每个异常（那会很繁琐，笨拙，代码速度变慢）。&lt;/li&gt;
&lt;li&gt;异常不用于因为某个无法恢复的错误而立即结束一个模块/系统。&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;
其他方案
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;&lt;a href=&quot;./2023-03-13-cppcoreguidelines-es6&quot;&gt;RAII&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;合约/断言：用 GSL 的 &lt;code&gt;Expects&lt;/code&gt; 和 &lt;code&gt;Ensures&lt;/code&gt; ，直到我们的语言支持合约。&lt;/li&gt;
&lt;/ul&gt;
</content>
 </entry>
 
 <entry>
   <title>单词本：enchanter</title>
   <link href="http://kimi.im/2024-01-11-enchanter"/>
   <updated>2024-01-11T00:00:00+00:00</updated>
   <id>http://kimi.im/enchanter</id>
   <content type="html">&lt;p&gt;
春节快到了。公司又能开年会了。这次年会，我们外语文化学习小组表演诗歌朗诵，雪莱的《西风颂》。
&lt;/p&gt;

&lt;p&gt;
诗人是文字游戏高手，所以选词造句都是很精妙的。所以，西风颂里很多单词，我们都感觉很陌生。
&lt;/p&gt;

&lt;p&gt;
第一节的前两段是这么写的：
&lt;/p&gt;

&lt;p class=&quot;verse&quot;&gt;
O wild West Wind, thou breath of Autumn&amp;rsquo;s being,&lt;br /&gt;
Thou, from whose unseen presence the leaves dead&lt;br /&gt;
Are driven, like ghosts from an &lt;b&gt;enchanter&lt;/b&gt; fleeing,&lt;br /&gt;
&lt;/p&gt;

&lt;p&gt;
我试着翻译下
&lt;/p&gt;

&lt;p class=&quot;verse&quot;&gt;
啊！狂野的西风。你是秋灵的呼吸，&lt;br /&gt;
你，用无形的威力，把枯叶驱使，&lt;br /&gt;
像孤魂野鬼从法师处逃离。&lt;br /&gt;
&lt;/p&gt;

&lt;p&gt;
或者翻译的文诌诌一些
&lt;/p&gt;

&lt;p class=&quot;verse&quot;&gt;
呜呼，西风飙兮，其秋之噫气，&lt;br /&gt;
隐其无形兮，驱败叶，&lt;br /&gt;
若孤魂兮，自尸祝而逃匿。&lt;br /&gt;
&lt;/p&gt;

&lt;p&gt;
这里，enchanter 的意思是行巫术的人、巫师、魔法师、使人着迷的人。
&lt;/p&gt;

&lt;p&gt;
因为，这个词来自法语，所以保留了一些些法语的调调 [in&amp;rsquo;tʃɑ:ntә]。
enchanter 是 en + chant + er 组成的。en 是进入，chant 是歌唱。大概是能唱出美妙歌声，让人入迷的那种人。来自拉丁语 incantator。
&lt;/p&gt;

&lt;p&gt;
其他类似意思的还有
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;sorcerer&lt;/li&gt;
&lt;li&gt;magician&lt;/li&gt;
&lt;li&gt;wizard&lt;/li&gt;
&lt;li&gt;necromancer&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
sorcerer 来自中世纪拉丁语的 sortarius 算命的人。漫威漫画中有至尊法师
sorcerer supreme。歌德有个诗作《Der Zauberlehrling 魔法师的学徒》，这里 Zauber 就是魔法的意思，好像和 sorcerer 有点点相似。
&lt;/p&gt;

&lt;p&gt;
magic 来自希腊语 magos: person with magic powers. magic 的意思可以是魔力，魔法，妙不可言。比如 Her piano playing is absolute &lt;b&gt;magic&lt;/b&gt;. magician
是施展 magic 的人，就是变戏法的人、魔术师。
&lt;/p&gt;

&lt;p&gt;
wizard 是男巫，这个来自古英语 wys + ard，wys 是 wise 聪明的意思，所以是聪明的巫师。绿野仙踪翻译自 Wizard of Oz 或者奥兹国历险记。
&lt;/p&gt;

&lt;p&gt;
necromancer 是通灵人，指那种擅长黑魔法的巫师。
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines NR.2 不要坚持在一个函数中只能有一个返回语句</title>
   <link href="http://kimi.im/2024-01-10-cppcoreguidelines-nr2"/>
   <updated>2024-01-10T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-nr2</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;Don’t insist to have only a single return-statement in a function&amp;rdquo;
&lt;/p&gt;

&lt;p&gt;
理由
&lt;/p&gt;

&lt;p&gt;
如果坚持只能有一个返回值的话，会导致代码逻辑很绕，还要引入额外的状态变量。尤其是，这种“只有一个返回值规则”会导致很难在函数的顶部进行错误检测。
&lt;/p&gt;


&lt;p&gt;
例子
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;template&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: #3F7F5F;&quot;&gt;//  requires Number&amp;lt;T&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;string&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;sign&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;x&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;x &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;
        &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;negative&quot;&lt;/span&gt;;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;x &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;
        &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;positive&quot;&lt;/span&gt;;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;zero&quot;&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
如果只能有一个返回值的话。我们可能要这样写：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;template&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: #3F7F5F;&quot;&gt;//  requires Number&amp;lt;T&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;string&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;sign&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;x&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;        &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// bad&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;string&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;res&lt;/span&gt;;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;x &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;
        &lt;span style=&quot;color: #000000;&quot;&gt;res&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;negative&quot;&lt;/span&gt;;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;else&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;x &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;
        &lt;span style=&quot;color: #000000;&quot;&gt;res&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;positive&quot;&lt;/span&gt;;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;else&lt;/span&gt;
        &lt;span style=&quot;color: #000000;&quot;&gt;res&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;zero&quot;&lt;/span&gt;;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; res;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
这种写法一方面代码更长，另一方面效率更低。代码越长越复杂，就会越痛苦。当然，有些简单的函数本身就只有一个返回语句。因为其本身就只是简单的逻辑。
&lt;/p&gt;

&lt;p&gt;
例子
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;index&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;char&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;*&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;p&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;!&lt;/span&gt;p&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;-1&lt;/span&gt;;  &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// error indicator: alternatively &quot;throw&lt;/span&gt;
                        &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// nullptr_error{}&quot;&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ... do a lookup to find the index for p&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; i;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
如果我们遵循一个返回语句规则的话，就成这样了：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;index2&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;char&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;*&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;p&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;i&lt;/span&gt;;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;!&lt;/span&gt;p&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;
        &lt;span style=&quot;color: #000000;&quot;&gt;i&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;-1&lt;/span&gt;;  &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// error indicator&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;else&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;
        &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ... do a lookup to find the index for p&lt;/span&gt;
    &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; i;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
注意，这里我们故意违反了变量应当初始化规则。因为一个返回语句规则很容易导致变量为初始化错误。而且，这种风格的代码很容易倾向于用 &lt;code&gt;goto exit&lt;/code&gt; 方式结束函数。
&lt;/p&gt;


&lt;p&gt;
其他方案
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;保持函数简单短小。&lt;/li&gt;
&lt;li&gt;放心使用多个返回语句（以及抛出异常）&lt;/li&gt;
&lt;/ul&gt;
</content>
 </entry>
 
 <entry>
   <title>单词本：detour</title>
   <link href="http://kimi.im/2024-01-10-detour"/>
   <updated>2024-01-10T00:00:00+00:00</updated>
   <id>http://kimi.im/detour</id>
   <content type="html">&lt;p&gt;
今天看文档，读到这段：
&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;
This function enables direct and time-saving communication between
slaves using broadcast communication without the &lt;b&gt;detour&lt;/b&gt; over a
master. (PROFIBUS, Slave-to-slave Communication).
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;
这里，有一个词 detour 意思是绕行路线、迂回路线。比如 we had to &lt;b&gt;make a
detour&lt;/b&gt; round the floods. 我们绕道避开洪水。
&lt;/p&gt;

&lt;p&gt;
前面那段文字的意思是通过 slave-to-slave 的通信机制，可以绕开 master 节点。因为一般的，主从通信协议，所以从设备都是被动的设备，只响应主设备的请求。PROFIBUS 扩展了 DP-V2 可以直接发起从设备到从设备的通信，所以说，可以绕道主设备进行通信。
&lt;/p&gt;

&lt;p&gt;
另外，在 (&lt;a href=&quot;#citeproc_bib_item_1&quot;&gt;Friedl et al. 2020&lt;/a&gt;) 的一篇论文中，提出了一个信息模型转换生成方法，因为没有用到 UML 作为中间模型，所以作者说 The approach
proposed here is a direct use of OPC UA without a &lt;b&gt;detour&lt;/b&gt; via UML.
&lt;/p&gt;

&lt;p&gt;
其实，从这个词的拼写来看，它是来自法语的 détour ，早期的读音应该是
[ˊdeituә] 后来读音才变成 [&amp;rsquo;di:tuә]。而法语则又从拉丁语里的 destorner
转变而来。
&lt;/p&gt;

&lt;p&gt;
一般组成词组使用：
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;You&amp;rsquo;d be wise to &lt;b&gt;make a detour&lt;/b&gt; to avoid the roadworks. 绕道。&lt;/li&gt;
&lt;li&gt;While discussing education, she &lt;b&gt;took&lt;/b&gt; a sharp &lt;b&gt;detour into&lt;/b&gt; trade
policy. &lt;b&gt;take a detour&lt;/b&gt; 绕道，这里是岔开主题的意思。&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
最近的新闻：The &lt;b&gt;detour&lt;/b&gt; south around the African continent causes
additional costs for Hapag-Lloyd in the double-digit millions every
month, according to the spokesman. 
&lt;/p&gt;

&lt;p&gt;
因为苏伊士运河“堵”了，货船必须绕道非洲，导致每个月数千万额外的成本。
&lt;/p&gt;

&lt;p&gt;
&lt;b&gt;References&lt;/b&gt;
&lt;/p&gt;
&lt;style&gt;.csl-entry{text-indent: -1.5em; margin-left: 1.5em;}&lt;/style&gt;&lt;div class=&quot;csl-bib-body&quot;&gt;
  &lt;div class=&quot;csl-entry&quot;&gt;&lt;a id=&quot;citeproc_bib_item_1&quot;&gt;&lt;/a&gt;Friedl, Sebastian, Christian von Arnim, Armin Lechler, and Alexander Verl. 2020. “Generation of OPC UA Companion Specification with Eclipse Modeling Framework.” In &lt;i&gt;2020 16th IEEE International Conference on Factory Communication Systems (WFCS)&lt;/i&gt;, 1–7. doi:&lt;a href=&quot;https://doi.org/10.1109/WFCS47810.2020.9114448&quot;&gt;10.1109/WFCS47810.2020.9114448&lt;/a&gt;.&lt;/div&gt;
&lt;/div&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines NR.1 不要坚持把声明放在函数开头</title>
   <link href="http://kimi.im/2024-01-09-cppcoreguidelines-nr1"/>
   <updated>2024-01-09T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-nr1</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;Don’t insist that all declarations should be at the top of a function&amp;rdquo;
&lt;/p&gt;

&lt;p&gt;
理由
&lt;/p&gt;

&lt;p&gt;
“所有声明都要放在开始处”是一个过时的编程规则。老的编程语言不允许在语句之后初始化变量和常量。这个限制会导致代码很长，很容易因为未初始化或错误的初始化导致错误。
&lt;/p&gt;

&lt;p&gt;
坏例子
&lt;/p&gt;


&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;use&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;x&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;i&lt;/span&gt;;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;char&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;c&lt;/span&gt;;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;double&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;d&lt;/span&gt;;

    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ... some stuff ...&lt;/span&gt;

    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;x &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt; i&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;
        &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ...&lt;/span&gt;
        &lt;span style=&quot;color: #000000;&quot;&gt;i&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;x, d&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt;;
    &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;i &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt; x&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;
        &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ...&lt;/span&gt;
        &lt;span style=&quot;color: #000000;&quot;&gt;i&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;g&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;x, c&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt;;
    &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; i;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
变量声明和变量使用的位置越远，越容易出现 bug。幸运的是，编译器能捕捉很多“设置之前使用”的错误。但是，遗憾的是，编译器不能捕捉到所有这类错误。就算在这个小例子中，我们也很难发现错误。
&lt;/p&gt;


&lt;p&gt;
其他要求
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;&lt;a href=&quot;./2023-03-27-cppcoreguidelines-es20&quot;&gt;总是把对象初始化&lt;/a&gt;。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;./2023-03-28-cppcoreguidelines-es.21&quot;&gt;CppCoreGuidelines ES.21 不要在需要使用之前引入一个变量或常量&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines A.4 代码库之间不能有循环依赖关系</title>
   <link href="http://kimi.im/2024-01-08-cppcoreguidelines-a4"/>
   <updated>2024-01-08T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-a4</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;There should be no cycles among libraries&amp;rdquo;
&lt;/p&gt;

&lt;p&gt;
理由
&lt;/p&gt;

&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;循环依赖会导致编译过程变的复杂&lt;/li&gt;
&lt;li&gt;循环不好理解，容易引入不确定性行为。&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;
注意
&lt;/p&gt;

&lt;p&gt;
库的组件的定义中可以包含循环引用。
&lt;/p&gt;

&lt;p&gt;
然而，库不能依赖于另一个库，而另一个库又依赖于这个库。
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines A.2 把可能能重用的代码做成库</title>
   <link href="http://kimi.im/2024-01-07-cppcoreguidelines-a2"/>
   <updated>2024-01-07T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-a2</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;Express potentially reusable parts as a library&amp;rdquo;
&lt;/p&gt;


&lt;p&gt;
注意
&lt;/p&gt;

&lt;p&gt;
所谓的代码库，就是一组带版本的、有人维护的、有文档的、一起发布的代码声明和定义。代码库可以是一组头文件（纯头文件库），也可以是一组头文件加一组对象文件。你可以把库静态或动态链接到程序中。或者你通过 &lt;code&gt;#include&lt;/code&gt; 包含使用纯头文件库。
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines A.1 把稳定和不太稳定的代码分开处理</title>
   <link href="http://kimi.im/2024-01-05-cppcoreguidelines-a1"/>
   <updated>2024-01-05T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-a1</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;Separate stable code from less stable code&amp;rdquo;
&lt;/p&gt;

&lt;p&gt;
把不太稳定的代码分开，可以对它们单独进行单元测试、接口改进、重构、最终可能还会移除不用。
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines SL.C.1 不要用 setjmp/longjmp</title>
   <link href="http://kimi.im/2024-01-04-cppcoreguidelines-slc1"/>
   <updated>2024-01-04T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-slc1</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;Don’t use setjmp/longjmp&amp;rdquo;
&lt;/p&gt;


&lt;p&gt;
理由
&lt;/p&gt;

&lt;p&gt;
&lt;code&gt;longjmp&lt;/code&gt; 会略过析构函数，这样就破坏了 RAII 资源管理策略。
&lt;/p&gt;


&lt;p&gt;
强化
&lt;/p&gt;

&lt;p&gt;
标记出现 &lt;code&gt;longjmp&lt;/code&gt; 和 &lt;code&gt;setjmp&lt;/code&gt; 的地方。
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines SL.chrono Time</title>
   <link href="http://kimi.im/2024-01-03-cppcoreguidelines-slchrono"/>
   <updated>2024-01-03T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-slchrono</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;Time&amp;rdquo;
&lt;/p&gt;

&lt;p&gt;
&lt;code&gt;&amp;lt;chrono&amp;gt;&lt;/code&gt; （在 &lt;code&gt;std::chrono&lt;/code&gt; 名字空间)，提供时间点 &lt;code&gt;time_point&lt;/code&gt; 和时间段
&lt;code&gt;duration&lt;/code&gt; 两种类型。再加上各种支持时间单元输出的函数。这个库还提供注册时间点 &lt;code&gt;time_point&lt;/code&gt; 的时钟。
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Emacs 与 GnuPG 版本不兼容</title>
   <link href="http://kimi.im/2024-01-02-emacs-and-gnupg"/>
   <updated>2024-01-02T00:00:00+00:00</updated>
   <id>http://kimi.im/emacs-and-gnupg</id>
   <content type="html">&lt;p&gt;
最近升级 msys64 ，emacs出现了一个奇怪的问题。GnuPG加密的文件可以打开，但是无法保存。
&lt;/p&gt;

&lt;p&gt;
原因是 Emacs 和 GnuPG 2.4.1 以上的版本之间命令行解析不兼容：
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;https://www.gnu.org/software/emacs/manual/html_node/auth/GnuPG-and-EasyPG-Assistant-Configuration.html&quot;&gt;Appendix A GnuPG and EasyPG Assistant Configuration&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;https://dev.gnupg.org/T6481&quot;&gt;https://dev.gnupg.org/T6481&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
在两者匹配之前，最简单的办法是把 GnuPG 版本降级到 2.4.0 以下。
&lt;/p&gt;

&lt;ol class=&quot;org-ol&quot;&gt;
&lt;li&gt;下载 &lt;a href=&quot;https://repo.msys2.org/msys/x86_64/gnupg-2.2.41-1-x86_64.pkg.tar.zst&quot;&gt;gnupg-2.2.41-1-x86_64.pkg.tar.zst&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;
降级安装：
&lt;/p&gt;
&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-shell&quot;&gt;pacman -U gnupg-2.2.41-1-x86_64.pkg.tar.zst
&lt;/pre&gt;
&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;
为了避免每次更新都自动升级 gnupg, 可以将它加入到 &lt;code&gt;/etc/pacman.conf&lt;/code&gt; 配置中
&lt;/p&gt;
&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-conf&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;IgnorePkg&lt;/span&gt;   = gnupg
&lt;/pre&gt;
&lt;/div&gt;&lt;/li&gt;
&lt;/ol&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines SL.regex Regex</title>
   <link href="http://kimi.im/2024-01-02-cppcoreguidelines-slregex"/>
   <updated>2024-01-02T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-slregex</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;Regex&amp;rdquo;
&lt;/p&gt;

&lt;p&gt;
&lt;code&gt;&amp;lt;regex&amp;gt;&lt;/code&gt; 是 C++ 标准库的正则表达式库。支持多种正则表达式模式。
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines SL.io.50 避免使用 endl</title>
   <link href="http://kimi.im/2024-01-01-cppcoreguidelines-slio50"/>
   <updated>2024-01-01T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-slio50</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;Avoid &lt;code&gt;endl&lt;/code&gt;&amp;rdquo;
&lt;/p&gt;

&lt;p&gt;
理由
&lt;/p&gt;

&lt;p&gt;
&lt;code&gt;endl&lt;/code&gt; 这个输入输出操作符跟 &lt;code&gt;&apos;\n&apos;&lt;/code&gt; 和 &lt;code&gt;&quot;\n&quot;&lt;/code&gt; 的效果是等价的。但是往往速度更慢，因为它会进行一次额外的 &lt;code&gt;flush()&lt;/code&gt; 操作。相比 &lt;code&gt;prinf&lt;/code&gt; 风格的代码，速度减慢会很明显。
&lt;/p&gt;


&lt;p&gt;
例子
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;cout &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;Hello, World!&quot;&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; endl;    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// two output operations and a flush&lt;/span&gt;
cout &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;Hello, World!\n&quot;&lt;/span&gt;;          &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// one output operation and no flush&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;
注意
&lt;/p&gt;

&lt;p&gt;
对于 &lt;code&gt;cin&lt;/code&gt; 和 &lt;code&gt;cout&lt;/code&gt; 等操作，不太需要 &lt;code&gt;flush&lt;/code&gt; 。因为 &lt;code&gt;flush&lt;/code&gt; 一般都是自动完成的。往文件写东西的时候，很少需要用到 &lt;code&gt;flush&lt;/code&gt; 。
&lt;/p&gt;


&lt;p&gt;
注意
&lt;/p&gt;

&lt;p&gt;
对于字符串流（尤其是 &lt;code&gt;ostringstream&lt;/code&gt; ），插入一个 &lt;code&gt;endl&lt;/code&gt; 完全等价于插入一个 &lt;code&gt;&apos;\n&apos;&lt;/code&gt; 字符。然而， &lt;code&gt;endl&lt;/code&gt; 会严重拖慢程序速度。
&lt;/p&gt;

&lt;p&gt;
&lt;code&gt;endl&lt;/code&gt; 也不会产生一个操作系统平台相关的行结束符（比如 Windows 上是
&amp;ldquo;\r\n&amp;rdquo;）。所以，对于字符串流， &lt;code&gt;s &amp;lt;&amp;lt; endl&lt;/code&gt; 只是插入了一个 &lt;code&gt;&apos;\n&apos;&lt;/code&gt; 字符。
&lt;/p&gt;


&lt;p&gt;
注意
&lt;/p&gt;

&lt;p&gt;
除了很重要的性能上的考量，选择 &lt;code&gt;&apos;\n&apos;&lt;/code&gt; 还是 &lt;code&gt;endl&lt;/code&gt; 完全是一种美学偏好。
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines SL.io.10 除非你用只用 prinft 函数，不然请先调用 ios_base::sync_with_stdio(false)</title>
   <link href="http://kimi.im/2023-12-31-cppcoreguidelines-slio10"/>
   <updated>2023-12-31T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-slio10</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;Unless you use printf-family functions call &lt;code&gt;ios_base::sync_with_stdio(false)&lt;/code&gt;&amp;rdquo;
&lt;/p&gt;


&lt;p&gt;
理由
&lt;/p&gt;

&lt;p&gt;
让 &lt;code&gt;iostream&lt;/code&gt; 和 &lt;code&gt;prinf&lt;/code&gt; 风格的 I/O 操作同步成本很高。 &lt;code&gt;cin&lt;/code&gt; 和 &lt;code&gt;cout&lt;/code&gt; 默认和
&lt;code&gt;prinft&lt;/code&gt; 同步。
&lt;/p&gt;


&lt;p&gt;
例子
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;main&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;ios_base&lt;/span&gt;::&lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;sync_with_stdio&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;false&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ... use iostreams ...&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines SL.io.3 首选 iostream 处理 I/O</title>
   <link href="http://kimi.im/2023-12-30-cppcoreguidelines-slio3"/>
   <updated>2023-12-30T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-slio3</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;Prefer &lt;code&gt;iostream&lt;/code&gt; s for I/O
&lt;/p&gt;

&lt;p&gt;
理由
&lt;/p&gt;

&lt;p&gt;
&lt;code&gt;iostream&lt;/code&gt; 更安全、灵活、可扩展。
&lt;/p&gt;


&lt;p&gt;
例子
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;// write a complex number:&lt;/span&gt;
&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;complex&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;double&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;z&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;3&lt;/span&gt;, &lt;span style=&quot;color: #110099;&quot;&gt;4&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;
cout &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; z &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;&apos;\n&apos;&lt;/span&gt;;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
&lt;code&gt;complex&lt;/code&gt; 是用户定义类型，它的 I/O 的定义都不需要修改 &lt;code&gt;iostream&lt;/code&gt; 程序库。
&lt;/p&gt;


&lt;p&gt;
例子
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;// read a file of complex numbers:&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;for&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;complex&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;double&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;z&lt;/span&gt;; cin &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;gt;&amp;gt;&lt;/span&gt; z; &lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
    v.&lt;span style=&quot;color: #3a5fcd; font-weight: bold; font-style: italic;&quot;&gt;push_back&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;z&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;
&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;
讨论
&lt;/p&gt;

&lt;p&gt;
&lt;code&gt;iostream&lt;/code&gt; 与 &lt;code&gt;printf()&lt;/code&gt; 系列的对比。人们经常提到的是 &lt;code&gt;printf()&lt;/code&gt; 系列相比
&lt;code&gt;iostream&lt;/code&gt; 有两个优势：灵活的格式化，较好的性能。我们在讨论这两点的时候，也要权衡一下 &lt;code&gt;iostream&lt;/code&gt; 的一些其他优势：可扩展性优势、安全性、隐式内存管理、 &lt;code&gt;locale&lt;/code&gt; 本地语言处理。
&lt;/p&gt;

&lt;p&gt;
在 I/O 性能上， &lt;code&gt;iostream&lt;/code&gt; 很多时候也比 &lt;code&gt;printf()&lt;/code&gt; 好。
&lt;/p&gt;

&lt;p&gt;
&lt;code&gt;gets()&lt;/code&gt; 、 &lt;code&gt;scanf()&lt;/code&gt; 、 &lt;code&gt;printf()&lt;/code&gt; 用到了 &lt;code&gt;%s&lt;/code&gt; 。这里存在严重的安全隐患（比如缓冲区溢出漏洞、容易出错）。C11 定义了一些额外的扩展，可以检查输入的参数。如果 C 程序库里有 &lt;code&gt;gets_s()&lt;/code&gt; 、 &lt;code&gt;scanf_s()&lt;/code&gt; 、 &lt;code&gt;prinf_s()&lt;/code&gt; 等函数，可以考虑用这些函数，他们相对更安全些，但是他们仍然不是类型安全的。
&lt;/p&gt;


&lt;p&gt;
强化
&lt;/p&gt;

&lt;p&gt;
标记 &lt;code&gt;&amp;lt;cstdio&amp;gt;&lt;/code&gt;  和 &lt;code&gt;&amp;lt;stdio.h&amp;gt;&lt;/code&gt;
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines SL.io.2 输入读取的时候，一定要考虑可能结构不对的输入值</title>
   <link href="http://kimi.im/2023-12-29-cppcoreguidelines-slio2"/>
   <updated>2023-12-29T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-slio2</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;When reading, always consider ill-formed input&amp;rdquo;
&lt;/p&gt;

&lt;p&gt;
理由
&lt;/p&gt;

&lt;p&gt;
越早处理错误越好。如果输入是无效，每个函数都要写一段处理错误数据的代码，很不现实。
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>单词本：dairy</title>
   <link href="http://kimi.im/2023-12-29-dairy"/>
   <updated>2023-12-29T00:00:00+00:00</updated>
   <id>http://kimi.im/dairy</id>
   <content type="html">&lt;p&gt;
前不久，瑞典的一位同事来杭州出差。聊起他的上一份工作。他是在当地的食品饮料自动化装备公司工作，作为项目经理，主要负责在奶制品行业实施自动化生产线。奶制品加工工业，英文是 &lt;b&gt;Dairy&lt;/b&gt; Industry 。
&lt;/p&gt;

&lt;p&gt;
刚提到这个词的时候，我费了一些脑子，搜索记忆，才想起来。在人类简史中讲到人类从食物采集者转变为农业社会的时候，提到一些家畜家禽的利用：
Egg-laying hens, &lt;b&gt;dairy&lt;/b&gt; cows and draught animals are sometimes allowed
to live for many years. 这里 dairy cows 指的就是产奶的奶牛了。
&lt;/p&gt;

&lt;p&gt;
之前，一直把日记 dairy 和 daily 混淆了！所以，我们小时候吃的冰淇凌
&lt;b&gt;Dairy&lt;/b&gt; Queen 是乳制品皇后，而不是皇后日记啊。
&lt;/p&gt;

&lt;p&gt;
至于，这个 dairy 的来源，可能源自 1150-1500 年的中古英语 Middle
English。有个词 daie 是女仆或农场女工的意思。后来这个词的词义窄化，成为在农场挤奶的女工。在加上场地后缀 -ery 就成了 dairy 牛奶场。
&lt;/p&gt;

&lt;p&gt;
因为 daie 是仆人的意思， 所以，现在英语中，很多以 -day 结尾的姓，祖上可能是做仆人、佣人的。比如拉第 Faraday 可能是搬运工，Doubleday 可能是给双胞胎做仆人的。
&lt;/p&gt;

&lt;p&gt;
所以，不难猜到，dairyman 是挤奶男工，dairywoman 是挤奶女工，nondairy
是不含奶制品的。
&lt;/p&gt;

&lt;p&gt;
话说回来，瑞典同事讲了一次有趣的经历。有一回他在奶制品生产线。牛奶管道出现裂缝，薄薄的一层鲜奶，喷射出来，在空中形成乳白色的薄纱般的一个扇形，到处都是奶香味。然后，他们这些人都在暗暗期许，让这鲜奶继续喷洒吧，多么美的景观啊。
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines SL.io.1 只有在必要的时候用字符级别的输入流</title>
   <link href="http://kimi.im/2023-12-28-cppcoreguidelines-slio1"/>
   <updated>2023-12-28T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-slio1</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;Use character-level input only when you have to&amp;rdquo;
&lt;/p&gt;

&lt;p&gt;
理由
&lt;/p&gt;

&lt;p&gt;
除非真的很需要处理单个字符，不然不要用字符级别的输入流。因为很容易出错，而且要从单个字符组成字符串串效率很低。
&lt;/p&gt;


&lt;p&gt;
例子
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;char&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;c&lt;/span&gt;;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;char&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;buf&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;128&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;]&lt;/span&gt;;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;i&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;0&lt;/span&gt;;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;while&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;cin.&lt;span style=&quot;color: #3a5fcd; font-weight: bold; font-style: italic;&quot;&gt;get&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;c&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;!&lt;/span&gt;&lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;isspace&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;c&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; i &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;128&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
    &lt;span style=&quot;color: #000000;&quot;&gt;buf&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;i&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;++&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;]&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; c;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;i &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;==&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;128&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ... handle too long string ....&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
更简单更安全的写法：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;string&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;s&lt;/span&gt;;
s.&lt;span style=&quot;color: #3a5fcd; font-weight: bold; font-style: italic;&quot;&gt;reserve&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;128&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;
cin &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;gt;&amp;gt;&lt;/span&gt; s;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
这里可能不需要用到 &lt;code&gt;reserve(128)&lt;/code&gt;
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines SL.str.12 用 s 后缀字面量标识标准库的字符串</title>
   <link href="http://kimi.im/2023-12-27-cppcoreguidelines-slstr12"/>
   <updated>2023-12-27T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-slstr12</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;Use the &lt;code&gt;s&lt;/code&gt; suffix for string literals meant to be standard-library
&lt;code&gt;string&lt;/code&gt; s&amp;rdquo;
&lt;/p&gt;

&lt;p&gt;
理由
&lt;/p&gt;

&lt;p&gt;
直接表达意图，避免误解。
&lt;/p&gt;


&lt;p&gt;
例子
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;auto&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;pp1&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;make_pair&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;Tokyo&quot;&lt;/span&gt;, &lt;span style=&quot;color: #110099;&quot;&gt;9.00&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;         &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// {C-style string,double} intended?&lt;/span&gt;
&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;pair&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;string&lt;/span&gt;, &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;double&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;pp2&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;Tokyo&quot;&lt;/span&gt;, &lt;span style=&quot;color: #110099;&quot;&gt;9.00&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;  &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// a bit verbose&lt;/span&gt;
&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;auto&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;pp3&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;make_pair&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;Tokyo&quot;&lt;/span&gt;s, &lt;span style=&quot;color: #110099;&quot;&gt;9.00&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;        &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// {std::string,double}    // C++14&lt;/span&gt;
&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;pair&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;pp4&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;Tokyo&quot;&lt;/span&gt;s, &lt;span style=&quot;color: #110099;&quot;&gt;9.00&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;                 &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// {std::string,double}    // C++17&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines SL.str.11 如果要修改某个字符串，用 gsl:span<char> 不要用 std::string_view</title>
   <link href="http://kimi.im/2023-12-26-cppcoreguidelines-slstr11"/>
   <updated>2023-12-26T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-slstr11</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;Use gsl::span&amp;lt;char&amp;gt; rather than std::string_view when you need to
mutate a string&amp;rdquo;
&lt;/p&gt;

&lt;p&gt;
理由
&lt;/p&gt;

&lt;p&gt;
&lt;code&gt;str::string_view&lt;/code&gt; 是只读的。
&lt;/p&gt;


&lt;p&gt;
强化
&lt;/p&gt;

&lt;p&gt;
如果改写 &lt;code&gt;string_view&lt;/code&gt; 编译器会警告
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines SL.str.10 如果要处理一些本地语言相关的字符串操作，可以用 std::string</title>
   <link href="http://kimi.im/2023-12-25-cppcoreguidelines-slstr10"/>
   <updated>2023-12-25T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-slstr10</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;Use std::string when you need to perform locale-sensitive string
operations&amp;rdquo;
&lt;/p&gt;

&lt;p&gt;
理由
&lt;/p&gt;

&lt;p&gt;
&lt;code&gt;std::string&lt;/code&gt; 支持一些标准库的本地语言工具。
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines SL.str.5 用 std::byte 访问非字符的字节数值</title>
   <link href="http://kimi.im/2023-12-24-cppcoreguidelines-slstr5"/>
   <updated>2023-12-24T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-slstr5</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;Use std::byte to refer to byte values that do not necessarily
represent characters&amp;rdquo;
&lt;/p&gt;

&lt;p&gt;
理由
&lt;/p&gt;

&lt;p&gt;
用 &lt;code&gt;char*&lt;/code&gt; 标识指向非字符的数值的指针，会引起混淆，阻碍数值的优化。
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines SL.str.4 用 char* 访问单个字符</title>
   <link href="http://kimi.im/2023-12-22-cppcoreguidelines-slstr4"/>
   <updated>2023-12-22T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-slstr4</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;Use char* to refer to a single character&amp;rdquo;
&lt;/p&gt;

&lt;p&gt;
理由
&lt;/p&gt;

&lt;p&gt;
目前代码中大部分用到 &lt;code&gt;char*&lt;/code&gt; 的地方都是错误的根源。
&lt;/p&gt;

&lt;p&gt;
坏例子
&lt;/p&gt;


&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;char&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;arr&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;[]&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;&apos;a&apos;&lt;/span&gt;, &lt;span style=&quot;color: #110099;&quot;&gt;&apos;b&apos;&lt;/span&gt;, &lt;span style=&quot;color: #110099;&quot;&gt;&apos;c&apos;&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;print&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;char&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;*&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;p&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    cout &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; p &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;&apos;\n&apos;&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;use&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;print&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;arr&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// run-time error; potentially very bad&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
数组 &lt;code&gt;arr&lt;/code&gt; 不是一个 C 风格字符串，因为它不是空字符结束的。
&lt;/p&gt;


&lt;p&gt;
其他建议
&lt;/p&gt;

&lt;p&gt;
请查看 &lt;code&gt;zstring&lt;/code&gt;, &lt;code&gt;string&lt;/code&gt;, &lt;code&gt;string_view&lt;/code&gt;
&lt;/p&gt;


&lt;p&gt;
强化
&lt;/p&gt;

&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;标记在 &lt;code&gt;char*&lt;/code&gt; 上使用 &lt;code&gt;[]&lt;/code&gt; 的情况&lt;/li&gt;
&lt;/ul&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines SL.str.3 用 zstring 或 czstring 访问 C 风格，空字符结尾的字符串序列</title>
   <link href="http://kimi.im/2023-12-21-cppcoreguidelines-slstr3"/>
   <updated>2023-12-21T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-slstr3</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;Use &lt;code&gt;zstring&lt;/code&gt; or &lt;code&gt;czstring&lt;/code&gt; to refer to a C-style, zero-terminated,
sequence of characters&amp;rdquo;
&lt;/p&gt;

&lt;p&gt;
理由
&lt;/p&gt;

&lt;p&gt;
可读性更好。表达了程序意图。一个普通的 &lt;code&gt;char*&lt;/code&gt; 可以标识指向单独字符的指针，指向字符数组的指针，或者指向控制符结束的 C 风格字符串，甚至是一个小整数。把这些区分开来，可以避免理解错误，减少 bug。
&lt;/p&gt;


&lt;p&gt;
例子
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;f1&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;char&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;*&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;s&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// s is probably a string&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
我们只知道这里 &lt;code&gt;s&lt;/code&gt; 可能是个 &lt;code&gt;nullptr&lt;/code&gt; 或者指向至少一个字符的东西。
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;f1&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;zstring&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;s&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;     &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// s is a C-style string or the nullptr&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;f1&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;czstring&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;s&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// s is a C-style string constant or the nullptr&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;f1&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;std&lt;/span&gt;::&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;byte&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;*&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;s&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;  &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// s is a pointer to a byte (C++17)&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;
注意
&lt;/p&gt;

&lt;p&gt;
不要把 C 风格字符串转换成 &lt;code&gt;string&lt;/code&gt; ，除非有特定的理由。
&lt;/p&gt;


&lt;p&gt;
注意
&lt;/p&gt;

&lt;p&gt;
跟其他任何普通指针一样， &lt;code&gt;zstring&lt;/code&gt; 不表达所有权。
&lt;/p&gt;


&lt;p&gt;
注意
&lt;/p&gt;

&lt;p&gt;
世界上有成百上千万的 C++ 代码，用到了 &lt;code&gt;char*&lt;/code&gt; 和 &lt;code&gt;const char*&lt;/code&gt; ，而且还没有文档注释说明。这些类型以很多不同的方式使用。比如有表达所有权的，有指向内存的泛型指针（本该是 &lt;code&gt;void*&lt;/code&gt; ）。这就导致我们很难区分他们的使用意图，所以，这条指南也很难遵循。这是 C 和 C++ 中很重要的 bug 来源。所以，尽可能地遵循本规则。
&lt;/p&gt;


&lt;p&gt;
强化
&lt;/p&gt;

&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;标记在 &lt;code&gt;char*&lt;/code&gt; 上使用 &lt;code&gt;[]&lt;/code&gt; 的情况&lt;/li&gt;
&lt;li&gt;标记对 &lt;code&gt;char*&lt;/code&gt; 使用 &lt;code&gt;delete&lt;/code&gt; 的情况&lt;/li&gt;
&lt;li&gt;标记对 &lt;code&gt;char*&lt;/code&gt; 进行 &lt;code&gt;free()&lt;/code&gt; 的情况&lt;/li&gt;
&lt;/ul&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines SL.str.2 用 std::string_view 或 gsl::span<char> 访问字符序列</title>
   <link href="http://kimi.im/2023-12-20-cppcoreguidelines-slstr2"/>
   <updated>2023-12-20T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-slstr2</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;Use std::string_view or gsl::span&amp;lt;char&amp;gt; to refer to character
sequences&amp;rdquo;
&lt;/p&gt;

&lt;p&gt;
理由
&lt;/p&gt;

&lt;p&gt;
&lt;code&gt;std::string_view&lt;/code&gt; 或 &lt;code&gt;gsl::span&amp;lt;char&amp;gt;&lt;/code&gt; 提供了简单、安全的访问字符串序列的方式。而且不管字符串序列是怎么分配的怎么存储的。
&lt;/p&gt;


&lt;p&gt;
例子
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;vector&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;string&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;read_until&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;string_view&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;terminator&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;user&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;zstring&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;p&lt;/span&gt;, &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;string&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;s&lt;/span&gt;, &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;string_view&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;ss&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;auto&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;v1&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;read_until&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;p&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;auto&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;v2&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;read_until&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;s&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;auto&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;v3&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;read_until&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;ss&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ...&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;
注意
&lt;/p&gt;

&lt;p&gt;
C++17 的 &lt;code&gt;std::string_view&lt;/code&gt; 是只读的。
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines SL.str.1 用 std::string 表达字符串序列的所有权</title>
   <link href="http://kimi.im/2023-12-17-cppcoreguidelines-slstr1"/>
   <updated>2023-12-17T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-slstr1</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;Use std::string to own character sequences&amp;rdquo;
&lt;/p&gt;

&lt;p&gt;
理由
&lt;/p&gt;

&lt;p&gt;
&lt;code&gt;string&lt;/code&gt; 提供了正确处理分配、所有权转移、复制、逐渐扩展以及其他很多有用的操作。
&lt;/p&gt;


&lt;p&gt;
例子
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;vector&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;string&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;read_until&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;string&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;terminator&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;vector&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;string&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;res&lt;/span&gt;;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;for&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;string&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;s&lt;/span&gt;; cin &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;gt;&amp;gt;&lt;/span&gt; s &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; s &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;!=&lt;/span&gt; terminator; &lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// read a word&lt;/span&gt;
        res.&lt;span style=&quot;color: #3a5fcd; font-weight: bold; font-style: italic;&quot;&gt;push_back&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;s&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; res;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
注意看， &lt;code&gt;&amp;gt;&amp;gt;&lt;/code&gt; 操作是如何提供给 &lt;code&gt;string&lt;/code&gt; 的。看看这些操作是多么有用。这里没有用到任何显式的分配、销毁、边界检测等操作。字符串都自己处理好了。
&lt;/p&gt;

&lt;p&gt;
在 C++17 中，我们可以用 &lt;code&gt;string_view&lt;/code&gt; 来作为参数，而不用 &lt;code&gt;const string&amp;amp;&lt;/code&gt;
，这允许调用更灵活的使用函数。
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;vector&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;string&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;read_until&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;string_view&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;terminator&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// C++17&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;vector&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;string&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;res&lt;/span&gt;;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;for&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;string&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;s&lt;/span&gt;; cin &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;gt;&amp;gt;&lt;/span&gt; s &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; s &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;!=&lt;/span&gt; terminator; &lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// read a word&lt;/span&gt;
        res.&lt;span style=&quot;color: #3a5fcd; font-weight: bold; font-style: italic;&quot;&gt;push_back&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;s&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; res;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;
坏例子
&lt;/p&gt;

&lt;p&gt;
不要用 C  风格的字符串，因为这个方式需要繁琐的内存操作。
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;char&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;*&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;cat&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;char&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;*&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;s1&lt;/span&gt;, &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;char&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;*&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;s2&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// beware!&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// return s1 + &apos;.&apos; + s2&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;l1&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;strlen&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;s1&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;l2&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;strlen&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;s2&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;char&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;*&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;p&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;char&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;malloc&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;l1 &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;+&lt;/span&gt; l2 &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;+&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;2&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
    &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;strcpy&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;p, s1, l1&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
    &lt;span style=&quot;color: #000000;&quot;&gt;p&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;[&lt;/span&gt;l1&lt;span style=&quot;color: #7388d6;&quot;&gt;]&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;&apos;.&apos;&lt;/span&gt;;
    &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;strcpy&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;p &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;+&lt;/span&gt; l1 &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;+&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;1&lt;/span&gt;, s2, l2&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
    &lt;span style=&quot;color: #000000;&quot;&gt;p&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;[&lt;/span&gt;l1 &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;+&lt;/span&gt; l2 &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;+&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;]&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;0&lt;/span&gt;;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; p;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
我们写对代码了吗？调用 &lt;code&gt;cat&lt;/code&gt; 的人会不会忘记 &lt;code&gt;free()&lt;/code&gt; 掉返回的指针？这段代码能通过信息安全评审吗？
&lt;/p&gt;


&lt;p&gt;
注意
&lt;/p&gt;

&lt;p&gt;
没有测量的话，不要认为字符串 &lt;code&gt;string&lt;/code&gt; 类比底层技术速度更慢。记住，不是所有代码都是性能敏感的关键代码。不要在还没实际还不成熟的时候进行优化。
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines SL.con.4 不要给 memset 或 memcpy 传平凡可复制的类型</title>
   <link href="http://kimi.im/2023-12-16-cppcoreguidelines-slcon4"/>
   <updated>2023-12-16T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-slcon4</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;don’t use memset or memcpy for arguments that are not
trivially-copyable&amp;rdquo;
&lt;/p&gt;

&lt;p&gt;
理由
&lt;/p&gt;

&lt;p&gt;
违背此规则会搅乱对象的语义（比如覆盖了 &lt;code&gt;vptr&lt;/code&gt; ）。
&lt;/p&gt;


&lt;p&gt;
注意
&lt;/p&gt;

&lt;p&gt;
此规则也适用于 &lt;code&gt;(w)memset&lt;/code&gt;, &lt;code&gt;(w)memcpy&lt;/code&gt;, &lt;code&gt;(w)memmove&lt;/code&gt;, &lt;code&gt;(w)memcmp&lt;/code&gt;
&lt;/p&gt;


&lt;p&gt;
例子
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;struct&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;base&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;virtual&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold; font-style: italic;&quot;&gt;update&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;0&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;struct&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;derived&lt;/span&gt; : &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;base&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold; font-style: italic;&quot;&gt;update&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;override&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{}&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;


&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;derived&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;a&lt;/span&gt;, &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;derived&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;b&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// goodbye v-tables&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;memset&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt;a, &lt;span style=&quot;color: #110099;&quot;&gt;0&lt;/span&gt;, &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;sizeof&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;derived&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
    &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;memcpy&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt;a, &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt;b, &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;sizeof&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;derived&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
    &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;memcmp&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt;a, &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt;b, &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;sizeof&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;derived&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
相反，应该定义恰当的默认初始化函数、复制函数、比较函数。
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;g&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;derived&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;a&lt;/span&gt;, &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;derived&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;b&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #000000;&quot;&gt;a&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{}&lt;/span&gt;;    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// default initialize&lt;/span&gt;
    &lt;span style=&quot;color: #000000;&quot;&gt;b&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; a;     &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// copy&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;a &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;==&lt;/span&gt; b&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;do_something&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;a, b&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;
强化
&lt;/p&gt;

&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;标记在非平凡可复制类型使用以上这些函数的情况&lt;/li&gt;
&lt;/ul&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines SL.con.3 避免边界错误</title>
   <link href="http://kimi.im/2023-12-15-cppcoreguidelines-slcon3"/>
   <updated>2023-12-15T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-slcon3</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;Avoid bounds errors&amp;rdquo;
&lt;/p&gt;

&lt;p&gt;
理由
&lt;/p&gt;

&lt;p&gt;
超出边界读写容器的元素，往往会导致严重的错误、错误的结果、程序崩溃或安全漏洞。
&lt;/p&gt;


&lt;p&gt;
注意
&lt;/p&gt;

&lt;p&gt;
应用于有范围的容器的标准库函数，往往会有边界安全的函数重载。像 &lt;code&gt;vector&lt;/code&gt;
这样的标准类型，可以简单修改为边界检测版本（比如添加一个合约 contract），或者用 &lt;code&gt;at()&lt;/code&gt; 函数。
&lt;/p&gt;


&lt;p&gt;
理想情况下，是否在边界范围内应该能静态的强化。比如：
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;带范围的 &lt;code&gt;for&lt;/code&gt;  循环不能运行超出容器边界。&lt;/li&gt;
&lt;li&gt;可以用 &lt;code&gt;v.begin()&lt;/code&gt; 和 &lt;code&gt;v.end()&lt;/code&gt; 确定是否超出边界。&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
此类循环和不检测的，不安全的版本应该运行速度一样快。 
&lt;/p&gt;

&lt;p&gt;
通常，简单的预先检测可以避免对每个下标进行检测。比如： &lt;code&gt;v.begin(),
v.begin()+i&lt;/code&gt; 中的 &lt;code&gt;i&lt;/code&gt; 可以先跟 &lt;code&gt;v.size()&lt;/code&gt; 进行比较。
&lt;/p&gt;

&lt;p&gt;
这样写的循环比每次访问元素都进行检测的版本要快很多。
&lt;/p&gt;


&lt;p&gt;
坏例子
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;array&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt;, &lt;span style=&quot;color: #110099;&quot;&gt;10&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;a&lt;/span&gt;, &lt;span style=&quot;color: #000000;&quot;&gt;b&lt;/span&gt;;
    &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;memset&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;a.&lt;span style=&quot;color: #3a5fcd; font-weight: bold; font-style: italic;&quot;&gt;data&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;()&lt;/span&gt;, &lt;span style=&quot;color: #110099;&quot;&gt;0&lt;/span&gt;, &lt;span style=&quot;color: #110099;&quot;&gt;10&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;         &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// BAD, and contains a length error (length = 10 * sizeof(int))&lt;/span&gt;
    &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;memcmp&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;a.&lt;span style=&quot;color: #3a5fcd; font-weight: bold; font-style: italic;&quot;&gt;data&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;()&lt;/span&gt;, b.&lt;span style=&quot;color: #3a5fcd; font-weight: bold; font-style: italic;&quot;&gt;data&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;()&lt;/span&gt;, &lt;span style=&quot;color: #110099;&quot;&gt;10&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;  &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// BAD, and contains a length error (length = 10 * sizeof(int))&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;
还有， &lt;code&gt;std::array&amp;lt;&amp;gt;::fill()&lt;/code&gt; 或 &lt;code&gt;std::fill()&lt;/code&gt; 或者甚至是空的初始化，都比
&lt;code&gt;memset()&lt;/code&gt; 还要好。
&lt;/p&gt;

&lt;p&gt;
好例子
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;array&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt;, &lt;span style=&quot;color: #110099;&quot;&gt;10&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;a&lt;/span&gt;, &lt;span style=&quot;color: #000000;&quot;&gt;b&lt;/span&gt;, &lt;span style=&quot;color: #000000;&quot;&gt;c&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;{}&lt;/span&gt;;       &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// c is initialized to zero&lt;/span&gt;
    a.&lt;span style=&quot;color: #3a5fcd; font-weight: bold; font-style: italic;&quot;&gt;fill&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
    &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;fill&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;b.&lt;span style=&quot;color: #3a5fcd; font-weight: bold; font-style: italic;&quot;&gt;begin&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;()&lt;/span&gt;, b.&lt;span style=&quot;color: #3a5fcd; font-weight: bold; font-style: italic;&quot;&gt;end&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;()&lt;/span&gt;, &lt;span style=&quot;color: #110099;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// std::fill()&lt;/span&gt;
    &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;fill&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;b, &lt;span style=&quot;color: #110099;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;                     &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// std::ranges::fill()&lt;/span&gt;

    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt; a &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;==&lt;/span&gt; b &lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;
      &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ...&lt;/span&gt;
    &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;
例子
&lt;/p&gt;

&lt;p&gt;
如果代码里已经用了没修改过的标准库，我们还有其他临时方案以边界安全的方式使用 &lt;code&gt;std::array&lt;/code&gt; 和 &lt;code&gt;std::vector&lt;/code&gt; 。代码里可以调用 &lt;code&gt;.at()&lt;/code&gt; 成员函数。这样，如果超出边界访问，就会抛出 &lt;code&gt;std::out_of_range&lt;/code&gt; 异常。另外，代码里也能调用 &lt;code&gt;at()&lt;/code&gt; 函数，有越界访问的话，会直接出错，或者你可以设定出错行为。
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;std&lt;/span&gt;::&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;vector&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;v&lt;/span&gt;, &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;std&lt;/span&gt;::&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;array&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt;, &lt;span style=&quot;color: #110099;&quot;&gt;12&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;a&lt;/span&gt;, &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;i&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #000000;&quot;&gt;v&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;]&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; a&lt;span style=&quot;color: #7388d6;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;]&lt;/span&gt;;        &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// BAD&lt;/span&gt;
    v.&lt;span style=&quot;color: #3a5fcd; font-weight: bold; font-style: italic;&quot;&gt;at&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; a&lt;span style=&quot;color: #7388d6;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;]&lt;/span&gt;;     &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// OK (alternative 1)&lt;/span&gt;
    &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;at&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;v, &lt;span style=&quot;color: #110099;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; a&lt;span style=&quot;color: #7388d6;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;]&lt;/span&gt;;    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// OK (alternative 2)&lt;/span&gt;

    v.&lt;span style=&quot;color: #3a5fcd; font-weight: bold; font-style: italic;&quot;&gt;at&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; a&lt;span style=&quot;color: #7388d6;&quot;&gt;[&lt;/span&gt;i&lt;span style=&quot;color: #7388d6;&quot;&gt;]&lt;/span&gt;;     &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// BAD&lt;/span&gt;
    v.&lt;span style=&quot;color: #3a5fcd; font-weight: bold; font-style: italic;&quot;&gt;at&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; a.&lt;span style=&quot;color: #3a5fcd; font-weight: bold; font-style: italic;&quot;&gt;at&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;i&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;  &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// OK (alternative 1)&lt;/span&gt;
    v.&lt;span style=&quot;color: #3a5fcd; font-weight: bold; font-style: italic;&quot;&gt;at&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;at&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;a, i&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// OK (alternative 2)&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;
强化
&lt;/p&gt;

&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;诊断发现调用到无边界检测的标准库函数。&lt;/li&gt;
&lt;/ul&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines SL.con.2 一般使用 STL vector，除非你有其他特殊需求</title>
   <link href="http://kimi.im/2023-12-14-cppcoreguidelines-slcon2"/>
   <updated>2023-12-14T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-slcon2</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;Prefer using STL vector by default unless you have a reason to use a
different container&amp;rdquo;
&lt;/p&gt;

&lt;p&gt;
理由
&lt;/p&gt;

&lt;p&gt;
标准容器中的 &lt;code&gt;vector&lt;/code&gt; 和 &lt;code&gt;std::array&lt;/code&gt; 有以下优势：
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;访问速度快（随机访问、支持向量式访问）&lt;/li&gt;
&lt;li&gt;各种访问模式都很快（从前到后，从后到前，支持预读取）&lt;/li&gt;
&lt;li&gt;空间开销最小（连续的内存布局，各元素之间没有额外开销，有效利用缓存）&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
通常来说，你需要在容器里添加或删除元素，所以首选选择 &lt;code&gt;vector&lt;/code&gt; 。如果你不修改容器的大小，就可以用 &lt;code&gt;std::array&lt;/code&gt;
&lt;/p&gt;

&lt;p&gt;
尽管有时候，其他容器看起来更合适，比如 &lt;code&gt;map&lt;/code&gt; 的查询开销是 &lt;code&gt;O(log N)&lt;/code&gt; ，
&lt;code&gt;list&lt;/code&gt; 的中间插入效率很高。但是，如果存储 KB 的元素， &lt;code&gt;vector&lt;/code&gt; 的性能还是很不错的。
&lt;/p&gt;


&lt;p&gt;
注意
&lt;/p&gt;

&lt;p&gt;
&lt;code&gt;string&lt;/code&gt; 不能作为单独字符的容器。 &lt;code&gt;string&lt;/code&gt; 就是一个字符串。如果你需要字符的容器，可以用 &lt;code&gt;vector&amp;lt;/*char_type*/&amp;gt;&lt;/code&gt; 或 &lt;code&gt;array&amp;lt;/*char_type*/&amp;gt;&lt;/code&gt;
&lt;/p&gt;


&lt;p&gt;
例外
&lt;/p&gt;

&lt;p&gt;
如果你有充分的理由用其他容器更好用，那么就用吧。比如：
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;如果 &lt;code&gt;vector&lt;/code&gt;  满足你的需求，但是你不想要可变大小的容器，可以用 &lt;code&gt;std::array&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;如果你想要一个字典式可查找的容器，确保满足 &lt;code&gt;O(K)&lt;/code&gt; 或 &lt;code&gt;O(log N)&lt;/code&gt; 查询速度，或者容器很大，远远大于几 KB ，而且你还要经常进行元素插入操作，这时候，要维护一个排序的 &lt;code&gt;vector&lt;/code&gt; 就很不合理了。可以用 &lt;code&gt;unordered_map&lt;/code&gt; 或 &lt;code&gt;map&lt;/code&gt; 。&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;
注意
&lt;/p&gt;

&lt;p&gt;
初始化一个特定大小的 &lt;code&gt;vector&lt;/code&gt; ，用 &lt;code&gt;()&lt;/code&gt; 来初始化。用一个列表初始化 &lt;code&gt;vector&lt;/code&gt;
，请使用 &lt;code&gt;{}&lt;/code&gt; 。
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;vector&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;v1&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;20&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;  &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// v1 has 20 elements with the value 0 (vector&amp;lt;int&amp;gt;{})&lt;/span&gt;
&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;vector&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;v2&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;20&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// v2 has 1 element with the value 20&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
&lt;a href=&quot;./2023-03-30-cppcoreguidelines-es23&quot;&gt;首选 &lt;code&gt;{}&lt;/code&gt; 初始化语法&lt;/a&gt;。
&lt;/p&gt;


&lt;p&gt;
强化
&lt;/p&gt;

&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;标记初始化后大小不改变的 &lt;code&gt;vector&lt;/code&gt; ，比如它是 &lt;code&gt;const&lt;/code&gt; 的，或者是没有非
&lt;code&gt;const&lt;/code&gt; 函数访问它。可以改为 &lt;code&gt;array&lt;/code&gt; 。&lt;/li&gt;
&lt;/ul&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines SL.con.1 用 STL array 或 vector，不要用 C 数组</title>
   <link href="http://kimi.im/2023-12-13-cppcoreguidelines-slcon1"/>
   <updated>2023-12-13T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-slcon1</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;Prefer using STL array or vector instead of a C array&amp;rdquo;
&lt;/p&gt;

&lt;p&gt;
理由
&lt;/p&gt;

&lt;p&gt;
C 数组不够安全，相比 STL array 和 vector 也没有任何优势。需要固定长度数组的话，可以用 &lt;code&gt;std::array&lt;/code&gt; ，它在传递给函数的时候不会退化成指针，也包含了自身的大小。另外，也跟内置数组一样，堆栈分配的 &lt;code&gt;std::array&lt;/code&gt; 的元素保存在堆栈中。对于变长数组，可以使用 &lt;code&gt;std::vector&lt;/code&gt; ，它会根据需要从分配新的内存。
&lt;/p&gt;


&lt;p&gt;
例子
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;v&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;SIZE&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;]&lt;/span&gt;;                        &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// BAD&lt;/span&gt;

&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;std&lt;/span&gt;::&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;array&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt;, &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;SIZE&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;w&lt;/span&gt;;            &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ok&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;
例子
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;*&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;v&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;[&lt;/span&gt;initial_size&lt;span style=&quot;color: #707183;&quot;&gt;]&lt;/span&gt;;     &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// BAD, owning raw pointer&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;delete&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;[]&lt;/span&gt; v;                         &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// BAD, manual delete&lt;/span&gt;

&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;std&lt;/span&gt;::&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;vector&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;w&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;initial_size&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ok&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;
注意
&lt;/p&gt;

&lt;p&gt;
对于无需所有权的容器，可以用 &lt;code&gt;gsl::span&lt;/code&gt; 
&lt;/p&gt;


&lt;p&gt;
注意
&lt;/p&gt;

&lt;p&gt;
比较堆栈上分配的固定长度数组和自由存储区上分配元素的 &lt;code&gt;vector&lt;/code&gt; 是一个伪命题。你只要比较下在堆栈上分配内存的 &lt;code&gt;std::array&lt;/code&gt; 和 &lt;code&gt;malloc()&lt;/code&gt; 内存以指针访问的方式就知道了。对于大部分代码，堆栈分配内存还是自由存储区分配内存其实没有太大差别。但是从安全性和便捷性上看， &lt;code&gt;vector&lt;/code&gt; 还是胜出的。对于两种内存分配方式差别很大的地方，工作人员也很清楚应该怎么选择数组和 &lt;code&gt;vector&lt;/code&gt;
。
&lt;/p&gt;


&lt;p&gt;
强化
&lt;/p&gt;

&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;标记在函数和类中声明 C 数组的地方，同时也声明 STL 容器的情况。至少要把 C 数组改为 &lt;code&gt;std::array&lt;/code&gt; 。&lt;/li&gt;
&lt;/ul&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines SL.4 以类型安全的方式使用标准库</title>
   <link href="http://kimi.im/2023-12-12-cppcoreguidelines-sl4"/>
   <updated>2023-12-12T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-sl4</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;Use the standard library in a type-safe manner&amp;rdquo;
&lt;/p&gt;

&lt;p&gt;
理由
&lt;/p&gt;

&lt;p&gt;
很显然，违反此规则，会导致未定义的行为、内存错乱、以及多种严重的错误。
&lt;/p&gt;


&lt;p&gt;
注意
&lt;/p&gt;

&lt;p&gt;
这是一条半哲学的元规则。需要一些列具体的支持规则。我们以这条作为其他很多具体规则的一个总领。
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines SL.3 不要把非标准库的实体放在 std 名字空间里</title>
   <link href="http://kimi.im/2023-12-11-cppcoreguidelines-sl3"/>
   <updated>2023-12-11T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-sl3</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;Do not add non-standard entities to namespace &lt;code&gt;std&lt;/code&gt;&amp;rdquo;
&lt;/p&gt;

&lt;p&gt;
理由
&lt;/p&gt;

&lt;p&gt;
添加到 &lt;code&gt;std&lt;/code&gt; 会使得代码不符合标准，还可能导致将来的版本出错。
&lt;/p&gt;


&lt;p&gt;
例子
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;namespace&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;std&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// BAD: violates standard&lt;/span&gt;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;My_vector&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;//     . . .&lt;/span&gt;
&lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;;

&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;namespace&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Foo&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// GOOD: user namespace is allowed&lt;/span&gt;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;My_vector&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;//     . . .&lt;/span&gt;
&lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;;

&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines SL.2 优先使用标准库</title>
   <link href="http://kimi.im/2023-12-05-cppcoreguidelines-sl2"/>
   <updated>2023-12-05T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-sl2</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;Prefer the standard library to other libraries&amp;rdquo;
&lt;/p&gt;

&lt;p&gt;
理由
&lt;/p&gt;

&lt;p&gt;
标准库大家都在用。更稳定。维护支持的更好。比你自己的代码和别的库用的地方更多。
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines SL.1 尽量用程序库</title>
   <link href="http://kimi.im/2023-12-03-cppcoreguidelines-sl1"/>
   <updated>2023-12-03T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-sl1</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;Use libraries wherever possible&amp;rdquo;
&lt;/p&gt;

&lt;p&gt;
理由
&lt;/p&gt;

&lt;p&gt;
节省时间。不要重复造轮子。不要重复他人的工作。别人做了改进你也能直接受益。你做了改进，也要提供出去帮助他人。
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines SF.22 匿名 namespace 中放内部的、不导出实体</title>
   <link href="http://kimi.im/2023-11-27-cppcoreguidelines-sf22"/>
   <updated>2023-11-27T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-sf22</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;Use an unnamed (anonymous) namespace for all internal/non-exported
entities&amp;rdquo;
&lt;/p&gt;

&lt;p&gt;
理由
&lt;/p&gt;

&lt;p&gt;
外部程序不该依赖于嵌套的匿名 namespace 中的实体。考虑把具体实现的代码文件中用到的定义放到匿名 namespace，除非某个实例需要导出供外部使用。
&lt;/p&gt;


&lt;p&gt;
坏例子
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;static&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;g&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;static&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;bool&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;h&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;k&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;;
&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;
好例子
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;namespace&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt;;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;bool&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;h&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;g&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;k&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;;
&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;
例子
&lt;/p&gt;

&lt;p&gt;
API 类和成员不能放在匿名 namespace；但是定义在具体实现的代码文件中的辅助类和函数应当放在匿名 namespace 范围
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines SF.21 不要在头文件中用匿名 namespace</title>
   <link href="http://kimi.im/2023-11-23-cppcoreguidelines-sf21"/>
   <updated>2023-11-23T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-sf21</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;Don’t use an unnamed (anonymous) namespace in a header&amp;rdquo;
&lt;/p&gt;

&lt;p&gt;
理由
&lt;/p&gt;

&lt;p&gt;
在头文件中用到匿名 namespace  基本上都是一种 bug
&lt;/p&gt;


&lt;p&gt;
例子
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;// file foo.h:&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;namespace&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;double&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;x&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;1.234&lt;/span&gt;;  &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// bad&lt;/span&gt;

    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;double&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;foo&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;double&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;y&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;     &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// bad&lt;/span&gt;
    &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;
        &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; y &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;+&lt;/span&gt; x;
    &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;namespace&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Foo&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;double&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;x&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;1.234&lt;/span&gt;; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// good&lt;/span&gt;

    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;inline&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;double&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;foo&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;double&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;y&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;        &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// good&lt;/span&gt;
    &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;
        &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; y &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;+&lt;/span&gt; x;
    &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;
强化
&lt;/p&gt;

&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;标记在头文件中用到匿名 namespace 的情况&lt;/li&gt;
&lt;/ul&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines SF.20 用 namespace 表达逻辑结构</title>
   <link href="http://kimi.im/2023-11-22-cppcoreguidelines-sf20"/>
   <updated>2023-11-22T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-sf20</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;Use namespaces to express logical structure&amp;rdquo;
&lt;/p&gt;

&lt;p&gt;
未完待续。
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines SF.12 相对路径的头文件用引号包含，其他情况用尖括号</title>
   <link href="http://kimi.im/2023-11-21-cppcoreguidelines-sf12"/>
   <updated>2023-11-21T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-sf12</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;Prefer the quoted form of #include for files relative to the
including file and the angle bracket form everywhere else&amp;rdquo;
&lt;/p&gt;

&lt;p&gt;
理由
&lt;/p&gt;

&lt;p&gt;
C++ 标准规定两种形式的 &lt;code&gt;#include&lt;/code&gt; 一种是尖括号（&amp;lt;&amp;gt;），一种是双引号（&amp;ldquo;&amp;rdquo;），编译器可以灵活选择进行实现。工具厂商也可以利用两种形式的差别，选择不同的路径搜索算法。
&lt;/p&gt;

&lt;p&gt;
然而，本指南建议，头文件的路径如果是相对路径，则使用引号形式。其他情况则使用尖括号。这样的使用方式，可以清晰区分相对路径的头文件和其他需要特定搜索算法的头文件。这样也可以清晰区分哪些头文件是相对的局部头文件，哪些是标准库的头文件。
&lt;/p&gt;


&lt;p&gt;
例子
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;// foo.cpp:&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;#include&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&amp;lt;string&amp;gt;&lt;/span&gt;                &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// From the standard library, requires the &amp;lt;&amp;gt; form&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;#include&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&amp;lt;some_library/common.h&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// A file that is not locally relative, included from another library; use the &amp;lt;&amp;gt; form&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;#include&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;foo.h&quot;&lt;/span&gt;                 &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// A file locally relative to foo.cpp in the same project, use the &quot;&quot; form&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;#include&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;foo_utils/utils.h&quot;&lt;/span&gt;     &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// A file locally relative to foo.cpp in the same project, use the &quot;&quot; form&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;#include&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&amp;lt;component_b/bar.h&amp;gt;&lt;/span&gt;     &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// A file in the same project located via a search path, use the &amp;lt;&amp;gt; form&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;
注意
&lt;/p&gt;

&lt;p&gt;
不遵循这条指南的话，会很难诊断出是否选用了错误的头文件。比如说，
&lt;code&gt;#include &quot;&quot;&lt;/code&gt; 一般会优先选择局部的相对的路径，然后查找非局部的非相对的路径。这就意味着，如果之前局部相对路径没有某个头文件，后来添加了这个头文件，编译器就会选用这个新添加的头文件。这时候，就会得到预料之外的结果了。
&lt;/p&gt;

&lt;p&gt;
程序库的作者应当把头文件放在特定系统路径，然后要求使用者以尖括号的方式包含到代码中： &lt;code&gt;#include &amp;lt;some_library/common.h&amp;gt;&lt;/code&gt;
&lt;/p&gt;


&lt;p&gt;
强化
&lt;/p&gt;

&lt;p&gt;
要能检测出本该用 &lt;code&gt;&amp;lt;&amp;gt;&lt;/code&gt;  的地方，用了 &lt;code&gt;&quot;&quot;&lt;/code&gt;
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines SF.11 头文件应当自包含</title>
   <link href="http://kimi.im/2023-11-20-cppcoreguidelines-sf11"/>
   <updated>2023-11-20T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-sf11</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;Header files should be self-contained&amp;rdquo;
&lt;/p&gt;

&lt;p&gt;
理由
&lt;/p&gt;

&lt;p&gt;
可用性。头文件应该用起来很简单、工作起来很方便。头文件应该是子包含的，也就是说包含了自身能正常工作的相关其他头文件。头文件应当封装了它能提供的功能。头文件的用户不需要管理头文件的依赖关系。
&lt;/p&gt;


&lt;p&gt;
例子
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;#include&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;helpers.h&quot;&lt;/span&gt;
&lt;span style=&quot;color: #3F7F5F;&quot;&gt;// helpers.h depends on std::string and includes &amp;lt;string&amp;gt;&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;
注意
&lt;/p&gt;

&lt;p&gt;
违背此规则，会导致头文件的用户在诊断错误的时候遇到麻烦。
&lt;/p&gt;


&lt;p&gt;
注意
&lt;/p&gt;

&lt;p&gt;
头文件应当包含自己依赖的所有东西。注意相对路径。因为 C++ 中的相对路径有特殊的意义。
&lt;/p&gt;


&lt;p&gt;
强化
&lt;/p&gt;

&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;需要测试一下，头文件本身是否可以编译，或者一个 &lt;code&gt;cpp&lt;/code&gt; 文件只包含了某个头文件，也可以编译。&lt;/li&gt;
&lt;/ul&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines SF.10 避免依赖于隐式包含的变量名</title>
   <link href="http://kimi.im/2023-11-19-cppcoreguidelines-sf10"/>
   <updated>2023-11-19T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-sf10</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;Avoid dependencies on implicitly &lt;code&gt;#include&lt;/code&gt; d names&amp;rdquo;
&lt;/p&gt;

&lt;p&gt;
理由
&lt;/p&gt;

&lt;p&gt;
避免惊讶。避免因为一个包含的头文件改动了，不得不修改 &lt;code&gt;#include&lt;/code&gt; 列表。避免因为头文件，造成逻辑上独立的实现细节之家互相依赖。
&lt;/p&gt;


&lt;p&gt;
坏例子
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;#include&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&amp;lt;iostream&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;using&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;namespace&lt;/span&gt; std;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;use&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;string&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;s&lt;/span&gt;;
    cin &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;gt;&amp;gt;&lt;/span&gt; s;               &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// fine&lt;/span&gt;
    &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;getline&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;cin, s&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;        &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// error: getline() not defined&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;s &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;==&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;surprise&quot;&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;  &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// error == not defined&lt;/span&gt;
        &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ...&lt;/span&gt;
    &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
&lt;code&gt;&amp;lt;iostream&amp;gt;&lt;/code&gt; 会暴露 &lt;code&gt;std::string&lt;/code&gt; 的定义（为何？）。但是不会包含整个
&lt;code&gt;&amp;lt;string&amp;gt;&lt;/code&gt; 头文件。于是会引起一些初学者的问题：为何 &lt;code&gt;getline(cin, s);&lt;/code&gt; 无法工作？为什么 &lt;code&gt;string&lt;/code&gt; 无法通过 &lt;code&gt;==&lt;/code&gt; 进行比较判断？
&lt;/p&gt;

&lt;p&gt;
解决方案是显式的添加 &lt;code&gt;#include &amp;lt;string&amp;gt;;&lt;/code&gt;
&lt;/p&gt;


&lt;p&gt;
好例子
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;#include&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&amp;lt;iostream&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;#include&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&amp;lt;string&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;using&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;namespace&lt;/span&gt; std;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;use&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;string&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;s&lt;/span&gt;;
    cin &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;gt;&amp;gt;&lt;/span&gt; s;               &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// fine&lt;/span&gt;
    &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;getline&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;cin, s&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;        &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// fine&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;s &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;==&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;surprise&quot;&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;  &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// fine&lt;/span&gt;
        &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ...&lt;/span&gt;
    &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;
注意
&lt;/p&gt;

&lt;p&gt;
有些头文件就是用来收集多个不同头文件的，比如：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;// basic_std_lib.h:&lt;/span&gt;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;#include&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&amp;lt;string&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;#include&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&amp;lt;map&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;#include&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&amp;lt;iostream&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;#include&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&amp;lt;random&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;#include&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&amp;lt;vector&amp;gt;&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
用户可以通过单个 &lt;code&gt;#include&lt;/code&gt; 就把以上头文件都包含进来了。
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;#include&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;basic_std_lib.h&quot;&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
此条规则反对隐式包含，但是并不阻止这种有意的头文件聚合设计。
&lt;/p&gt;


&lt;p&gt;
强化
&lt;/p&gt;

&lt;p&gt;
强化手段需要知道头文件里哪些是导出的，哪些是实现细节相关的。在我们有
 C++ module 之前，暂时没有什么好的解决方案。
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines SF.9 避免源代码之间循环依赖</title>
   <link href="http://kimi.im/2023-11-18-cppcoreguidelines-sf9"/>
   <updated>2023-11-18T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-sf9</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;Avoid cyclic dependencies among source files&amp;rdquo;
&lt;/p&gt;

&lt;p&gt;
理由
&lt;/p&gt;

&lt;p&gt;
循环依赖不好理解，减慢编译速度。也不利于将来切换到语言支持的模块
module。
&lt;/p&gt;


&lt;p&gt;
注意
&lt;/p&gt;

&lt;p&gt;
避免循环，不是仅仅通过 &lt;code&gt;#include&lt;/code&gt; 包含保护来避免。
&lt;/p&gt;


&lt;p&gt;
坏例子
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;// file1.h:&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;#include&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;file2.h&quot;&lt;/span&gt;

&lt;span style=&quot;color: #3F7F5F;&quot;&gt;// file2.h:&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;#include&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;file3.h&quot;&lt;/span&gt;

&lt;span style=&quot;color: #3F7F5F;&quot;&gt;// file3.h:&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;#include&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;file1.h&quot;&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;
强化
&lt;/p&gt;

&lt;p&gt;
标记所有的循环依赖。
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines SF.8 每个头文件都要加上</title>
   <link href="http://kimi.im/2023-11-17-cppcoreguidelines-sf8"/>
   <updated>2023-11-17T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-sf8</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;Use &lt;code&gt;#include&lt;/code&gt; guards for all header files&amp;rdquo;
&lt;/p&gt;

&lt;p&gt;
理由
&lt;/p&gt;

&lt;p&gt;
避免头文件被包含了多次。为了避免头文件包含保护本身的冲突，不要仅仅按照头文件名来命名包含保护宏。最好包含一个关键字和可区分的名字。比如代码库或组件的名字。
&lt;/p&gt;


&lt;p&gt;
例子
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;// file foobar.h:&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;#ifndef&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;LIBRARY_FOOBAR_H&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;#define&lt;/span&gt; &lt;span style=&quot;color: #FF0000;&quot;&gt;LIBRARY_FOOBAR_H&lt;/span&gt;
&lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ... declarations ...&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;#endif&lt;/span&gt; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// LIBRARY_FOOBAR_H&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;
强化
&lt;/p&gt;

&lt;p&gt;
标记没有 &lt;code&gt;#include&lt;/code&gt; 包含保护的 &lt;code&gt;.h&lt;/code&gt; 头文件。
&lt;/p&gt;


&lt;p&gt;
注意
&lt;/p&gt;

&lt;p&gt;
有些语言的实现通过像 &lt;code&gt;@pragma once&lt;/code&gt; 这种方式来进行包含保护。但是，这种方式不是标准定义的，缺少移植性。它是在你的程序中注入主机文件系统语义信息来实现的。用这种方式，也会让你的程序锁定在特定语言实现厂商。我们还是建议按照 ISO C++ 进行开发。请查看规则：&lt;a href=&quot;./2021-12-20-cppcoreguidelines-p2&quot;&gt;P.2&lt;/a&gt;
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines SF.7 不要在头文件全局使用 using namespace</title>
   <link href="http://kimi.im/2023-11-16-cppcoreguidelines-sf7"/>
   <updated>2023-11-16T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-sf7</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;Don’t write &lt;code&gt;using namespace&lt;/code&gt; at global scope in a header file&amp;rdquo;
&lt;/p&gt;

&lt;p&gt;
理由
&lt;/p&gt;

&lt;p&gt;
这么做的话，就剥夺了 &lt;code&gt;#include&lt;/code&gt; 的好处：有效的避免模糊，使用其他选项。这样也导致按照不同顺序包含进来的头文件有不同的效果。
&lt;/p&gt;


&lt;p&gt;
例子
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;// bad.h&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;#include&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&amp;lt;iostream&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;using&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;namespace&lt;/span&gt; std; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// bad&lt;/span&gt;

&lt;span style=&quot;color: #3F7F5F;&quot;&gt;// user.cpp&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;#include&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;bad.h&quot;&lt;/span&gt;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;bool&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;copy&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;/*... some parameters ...*/&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// some function that&lt;/span&gt;
                                           &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// happens to be named copy&lt;/span&gt;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;main&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;copy&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;/*...*/&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// now overloads local ::copy and std::copy,&lt;/span&gt;
                      &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// could be ambiguous&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;
注意
&lt;/p&gt;

&lt;p&gt;
&lt;code&gt;using namespace std::literals;&lt;/code&gt; 是个例外情况。很多情况需要在头文件里使用字符串字面量。根据规则，用户必须自己定义 UDL（user defined literal），不能跟标准库冲突。
&lt;/p&gt;


&lt;p&gt;
强化
&lt;/p&gt;

&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;标记在头文件全局范围内用了 &lt;code&gt;using namespace&lt;/code&gt; 的情况。&lt;/li&gt;
&lt;/ul&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines SF.6 在过渡期，基础的库可以用 using namespace，而其他则限制在局部范围使用</title>
   <link href="http://kimi.im/2023-11-14-cppcoreguidelines-sf6"/>
   <updated>2023-11-14T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-sf6</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;Use using namespace directives for transition, for foundation
libraries (such as std), or within a local scope (only)&amp;rdquo;
&lt;/p&gt;

&lt;p&gt;
理由
&lt;/p&gt;

&lt;p&gt;
&lt;code&gt;using namespace&lt;/code&gt; 可能会导致名字冲突，所以应该少用用。然而，我们也很难在用户代码中写全每个名字空间。有时候，在代码中名字空间太普遍了，以至于，没法一直用，不然的话，就太繁琐、影响注意力了。
&lt;/p&gt;


&lt;p&gt;
例子
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;#include&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&amp;lt;string&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;#include&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&amp;lt;vector&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;#include&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&amp;lt;iostream&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;#include&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&amp;lt;memory&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;#include&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&amp;lt;algorithm&amp;gt;&lt;/span&gt;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;using&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;namespace&lt;/span&gt; std;

&lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ...&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;
这里，很显然，到处都要用到了标准库，也没有用到其他库，所以要求每个地方都添加 &lt;code&gt;std::&lt;/code&gt; 就显得太繁琐了。
&lt;/p&gt;


&lt;p&gt;
例子
&lt;/p&gt;

&lt;p&gt;
用上 &lt;code&gt;using namespace std;&lt;/code&gt; 有可能会导致代码中的变量名和标准库冲突。
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;#include&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&amp;lt;cmath&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;using&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;namespace&lt;/span&gt; std;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;g&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;x&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;sqrt&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;7&lt;/span&gt;;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ...&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;sqrt&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;x&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// error&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
不过，一般不太会出现这种错误，会用 &lt;code&gt;using namespace std&lt;/code&gt; 的人，一般也熟悉 &lt;code&gt;std&lt;/code&gt; ，也知道这个风险。
&lt;/p&gt;


&lt;p&gt;
注意
&lt;/p&gt;

&lt;p&gt;
&lt;code&gt;.cpp&lt;/code&gt; 文件是一种局部范围的形式。变量名冲突发生的概率在以下两种情况里没太大差别：
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;N 行的 &lt;code&gt;.cpp&lt;/code&gt; 文件里有个 &lt;code&gt;using namespace X&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;N 行的函数中有一个 &lt;code&gt;using namespace X&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;M 个函数，每个函数中包含了 &lt;code&gt;using namespace X&lt;/code&gt; ，总的代码行数是 N 行&lt;/li&gt;
&lt;/ul&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines SF.5 一个 .cpp 文件必须包含为其定义了接口的头文件</title>
   <link href="http://kimi.im/2023-11-12-cppcoreguidelines-sf5"/>
   <updated>2023-11-12T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-sf5</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;A .cpp file must include the header file(s) that defines its
interface&amp;rdquo;
&lt;/p&gt;

&lt;p&gt;
理由
&lt;/p&gt;

&lt;p&gt;
这样做就允许编译器进行早起的一致性检查。
&lt;/p&gt;


&lt;p&gt;
坏例子
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;// foo.h:&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;foo&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;bar&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;long&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;foobar&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;

&lt;span style=&quot;color: #3F7F5F;&quot;&gt;// foo.cpp:&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;foo&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;/* ... */&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;bar&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;double&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;/* ... */&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;double&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;foobar&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
在早起捕捉不到错误，只有在链接时，一个程序调用了 &lt;code&gt;bar&lt;/code&gt; 或 &lt;code&gt;foobar&lt;/code&gt; 的时候才会报错。
&lt;/p&gt;


&lt;p&gt;
例子
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;// foo.h:&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;foo&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;bar&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;long&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;foobar&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;

&lt;span style=&quot;color: #3F7F5F;&quot;&gt;// foo.cpp:&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;#include&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;foo.h&quot;&lt;/span&gt;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;foo&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;/* ... */&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;bar&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;double&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;/* ... */&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;double&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;foobar&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// error: wrong return type&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
现在， &lt;code&gt;foobar&lt;/code&gt; 的返回值错误在编译的时候就能立即捕捉到。但是 &lt;code&gt;bar&lt;/code&gt; 的参数类型错误还不能马上捕捉到，因为有可能存在重载，但是链接时还是会捕获到的。不管怎么样，系统化的使用 &lt;code&gt;.h&lt;/code&gt; 文件可以尽量提前捕捉到错误。
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>单词本：linkisch</title>
   <link href="http://kimi.im/2023-11-12-linkischen"/>
   <updated>2023-11-12T00:00:00+00:00</updated>
   <id>http://kimi.im/linkischen</id>
   <content type="html">&lt;p&gt;
我们之前了解到，&lt;a href=&quot;./2022-11-02-english-dexterous.html&quot;&gt;dexterous&lt;/a&gt; 是双手灵巧的意思，而英语中 right 和德语中
recht 都有正确、合适的意思。
&lt;/p&gt;

&lt;p&gt;
这次，我们来看看 recht 的反面，link。威廉·豪夫 Wilhelm Hauff 《豪夫童话》中有一篇讽刺童话故事，叫做《Der junge Engländer oder Der Affe als
Mensch》（《年轻英国人或者作为人的猴子》）。故事讲的是一个魔法师厌倦小镇的无聊社交活动，训练出了一只猴子参与到 Grünwiesel 小镇居民的无聊社交活动中。（Grünwiesel 是不是绿黄鼠狼小镇？）
&lt;/p&gt;

&lt;p&gt;
随着，扮演成英国小青年的猴子得到小镇居民的认可，小镇青年也开始向猴子学习，变得庸俗粗鲁：
&lt;/p&gt;

&lt;p&gt;
Als nämlich die junge Welt sah, wie derselbe mit seinem &lt;b&gt;linkischen&lt;/b&gt;
Wesen, mit seinem rohen Lachen und Schwatzen, mit seinen groben
Antworten gegen ältere eher geschätzt als getadelt werde, daß man dies
alles sogar sehr geistreich finde, so dachten sie bei sich: »Es ist
mir ein leichtes, auch solch ein geistreicher Schlingel zu werden.«
&lt;/p&gt;

&lt;p&gt;
这里，我们看到 linkisch 这个词，用来修饰 Wesen，是说绿黄鼠狼小镇青年的笨拙的认知。
&lt;/p&gt;

&lt;p&gt;
link 在德语里是左边，而 linkisch 是笨拙。是不是和 recht 形成鲜明的对比呢？
&lt;/p&gt;

&lt;p&gt;
德语和英语里 gauche 也有笨手笨脚、不擅社交的意思。而 gauche 在法语里正是左边，英语的 left，德语的 link 。
&lt;/p&gt;

&lt;p&gt;
大概，在右撇子主导的世界里，左撇子的行为习惯就显得很不合时宜、古怪、笨拙了。
&lt;/p&gt;

&lt;p&gt;
英语 awkward 就是尴尬、笨拙、别扭的意思。awkward 本来的意思也正是朝相反方向转的意思。右边是恰当的方向，左边就是相反的方向了。所以
linkisch, gauche 就很 awkward.
&lt;/p&gt;

&lt;p&gt;
相反的，德语 recht，英语 right 就很对，法语右边 droit 就很直很正确很诚实。
&lt;/p&gt;

&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;une ligne droite 一条直线&lt;/li&gt;
&lt;li&gt;C&amp;rsquo;est quelqu&amp;rsquo;un de très droit. 这是个很诚实的人。&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
英语 adroit 就很灵巧：he was &lt;b&gt;adroit&lt;/b&gt; at tax avoidance.
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines SF.4 在其他声明之前包含头文件</title>
   <link href="http://kimi.im/2023-11-11-cppcoreguidelines-sf4"/>
   <updated>2023-11-11T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-sf4</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;Include header files before other declarations in a file&amp;rdquo;
&lt;/p&gt;

&lt;p&gt;
理由
&lt;/p&gt;

&lt;p&gt;
减少互相依赖，增加可读性。
&lt;/p&gt;


&lt;p&gt;
例子
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;#include&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&amp;lt;vector&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;#include&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&amp;lt;algorithm&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;#include&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&amp;lt;string&amp;gt;&lt;/span&gt;

&lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ... my code here ...&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;
坏例子
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;#include&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&amp;lt;vector&amp;gt;&lt;/span&gt;

&lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ... my code here ...&lt;/span&gt;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;#include&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&amp;lt;algorithm&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;#include&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&amp;lt;string&amp;gt;&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;
注意
&lt;/p&gt;

&lt;p&gt;
对 .h 和 .cpp 文件都适用。
&lt;/p&gt;


&lt;p&gt;
注意
&lt;/p&gt;

&lt;p&gt;
也有一些讨论认为应该在我们要保护的代码之后再 &lt;code&gt;#include&lt;/code&gt; 头文件。就像坏例子中做的那样。然而，这种方式
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;只在一层一个文件的时候有效：这么处理的头文件包含到其他头文件中就出问题了。&lt;/li&gt;
&lt;li&gt;名字空间（一个实现的名字空间）能保护很多这种上下文依赖的情况。&lt;/li&gt;
&lt;li&gt;完全的保护和灵活性需要模块设计。&lt;/li&gt;
&lt;/ul&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines SF.3 多个源码文件中用到的声明要用放在头文件里</title>
   <link href="http://kimi.im/2023-11-08-cppcoreguidelines-sf3"/>
   <updated>2023-11-08T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-sf3</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;Use header files for all declarations used in multiple source files&amp;rdquo;
&lt;/p&gt;


&lt;p&gt;
理由
&lt;/p&gt;

&lt;p&gt;
可维护性。可读性。
&lt;/p&gt;


&lt;p&gt;
坏例子
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;// bar.cpp:&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;bar&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt; cout &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;bar\n&quot;&lt;/span&gt;; &lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;

&lt;span style=&quot;color: #3F7F5F;&quot;&gt;// foo.cpp:&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;extern&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;bar&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;foo&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;bar&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt;; &lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
&lt;code&gt;bar&lt;/code&gt; 的维护者无法找到所有 &lt;code&gt;bar&lt;/code&gt; 用到的定义，在修改代码的时候会遇到麻烦。
&lt;code&gt;bar&lt;/code&gt; 的用户无法知道用到的接口是否是完整的且正确的。最后，可能会在链接的时候收到错误信息。
&lt;/p&gt;


&lt;p&gt;
强化
&lt;/p&gt;

&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;标记不在头文件，而是在其他源文件中的声明。&lt;/li&gt;
&lt;/ul&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines SF.2 头文件里不能包含对象定义或非 inline 的函数定义</title>
   <link href="http://kimi.im/2023-11-06-cppcoreguidelines-sf2"/>
   <updated>2023-11-06T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-sf2</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;A header file must not contain object definitions or non-inline
function definitions&amp;rdquo;
&lt;/p&gt;

&lt;p&gt;
理由
&lt;/p&gt;

&lt;p&gt;
包含一些只能定义一次的东西会导致链接错误。
&lt;/p&gt;


&lt;p&gt;
例子
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;// file.h:&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;namespace&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Foo&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;x&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;7&lt;/span&gt;;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;xx&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; x&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;+&lt;/span&gt;x; &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;

&lt;span style=&quot;color: #3F7F5F;&quot;&gt;// file1.cpp:&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;#include&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&amp;lt;file.h&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ... more ...&lt;/span&gt;

 &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// file2.cpp:&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;#include&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&amp;lt;file.h&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ... more ...&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
链接 file1.cpp  与 file2.cpp  会导致两个链接错误。
&lt;/p&gt;


&lt;p&gt;
其他指南：
&lt;/p&gt;

&lt;p&gt;
头文件只能包含以下内容：
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;&lt;code&gt;#include&lt;/code&gt; 其他文件（需要包含 include 保护）&lt;/li&gt;
&lt;li&gt;模板&lt;/li&gt;
&lt;li&gt;类定义&lt;/li&gt;
&lt;li&gt;函数声明&lt;/li&gt;
&lt;li&gt;&lt;code&gt;extern&lt;/code&gt; 声明&lt;/li&gt;
&lt;li&gt;&lt;code&gt;inline&lt;/code&gt; 函数定义&lt;/li&gt;
&lt;li&gt;&lt;code&gt;constexpr&lt;/code&gt; 定义&lt;/li&gt;
&lt;li&gt;&lt;code&gt;const&lt;/code&gt; 定义&lt;/li&gt;
&lt;li&gt;&lt;code&gt;using&lt;/code&gt; 别名定义&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;
强化
&lt;/p&gt;

&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;检查上述清单是否满足。&lt;/li&gt;
&lt;/ul&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines SF.1 如果项目里没有其他约定，请用 .cpp 作为代码文件后缀，.h 作为接口文件后缀</title>
   <link href="http://kimi.im/2023-11-04-cppcoreguidelines-sf1"/>
   <updated>2023-11-04T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-sf1</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;Use a .cpp suffix for code files and .h for interface files if your
project doesn’t already follow another convention&amp;rdquo;
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines CPL.3 如果必须用 C 实现接口，在调用这些接口的时候用 C++</title>
   <link href="http://kimi.im/2023-10-31-cppcoreguidelines-cpl3"/>
   <updated>2023-10-31T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-cpl3</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;If you must use C for interfaces, use C++ in the calling code using
such interfaces&amp;rdquo;
&lt;/p&gt;

&lt;p&gt;
理由
&lt;/p&gt;

&lt;p&gt;
C++ 比 C 表达能力更好，提供更多类型支持。
&lt;/p&gt;


&lt;p&gt;
例子
&lt;/p&gt;

&lt;p&gt;
比如说，要用到第三方 C 程序库，或 C 系统接口，可以用 C 与 C++ 的公共子集定义底层接口，这样类型检测会处理的更好。尽可能遵循 C++ 指南来防撞底层接口。然后在 C++ 代码里用这些 C++ 封装的接口。这样，在抽象，内存安全，资源安全方面会做的更好。
&lt;/p&gt;


&lt;p&gt;
例子
&lt;/p&gt;

&lt;p&gt;
你可以在 C++ 中调用 C
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;// in C:&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;double&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;sqrt&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;double&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;

&lt;span style=&quot;color: #3F7F5F;&quot;&gt;// in C++:&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;extern&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;C&quot;&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;double&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;sqrt&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;double&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;

&lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;sqrt&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;2&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
你也可以在 C 中调用 C++
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;// in C:&lt;/span&gt;
&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;X&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;call_f&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;struct&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Y&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;*&lt;/span&gt;, &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;

&lt;span style=&quot;color: #3F7F5F;&quot;&gt;// in C++:&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;extern&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;C&quot;&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;X&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;call_f&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Y&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;*&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;p&lt;/span&gt;, &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;i&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; p&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #3a5fcd; font-weight: bold; font-style: italic;&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;i&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// possibly a virtual function call&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines CPL.2 如果一定要用 C，用 C 和 C++  的公共子集，以 C++ 编译 C</title>
   <link href="http://kimi.im/2023-10-30-cppcoreguidelines-cpl2"/>
   <updated>2023-10-30T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-cpl2</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;If you must use C, use the common subset of C and C++, and compile
the C code as C++&amp;rdquo;
&lt;/p&gt;

&lt;p&gt;
理由
&lt;/p&gt;

&lt;p&gt;
这个子集可以由 C 或 C++ 编译器编译。通过 C++ 方式编译，可以不纯 C 的类型检测做的更好
&lt;/p&gt;


&lt;p&gt;
例子
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;*&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;p1&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;malloc&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;10&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;*&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;sizeof&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;                      &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// not C++&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;*&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;p2&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;static_cast&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;malloc&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;10&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;*&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;sizeof&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// not C, C-style C++&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;*&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;p3&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;10&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;]&lt;/span&gt;;                                   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// not C&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;*&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;p4&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;malloc&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;10&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;*&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;sizeof&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;               &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// both C and C++&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;
强化
&lt;/p&gt;

&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;标记以 C 方式编译代码的地方。
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;C++ 编译器要求代码是有效的 C++，除非你用了 C 扩展选项。&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;/ul&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines CPL.1 能用 C++ 的时候就不要用 C</title>
   <link href="http://kimi.im/2023-10-29-cppcoreguidelines-cpl1"/>
   <updated>2023-10-29T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-cpl1</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;Prefer C++ to C&amp;rdquo;
&lt;/p&gt;

&lt;p&gt;
C 和 C++ 是关系紧密的语言。他们都源自 1978 年的经典 C，都在 ISO 标准委员会不断发展。人们做了很多尝试，使得他们互相兼容，但是互相都不是对方的一个子集。
&lt;/p&gt;

&lt;p&gt;
理由
&lt;/p&gt;

&lt;p&gt;
C++ 提供更好的类型检测，更多的标记符号支持。C++ 支持更好的高级语言特性，经常产生速度更快的代码。
&lt;/p&gt;


&lt;p&gt;
例子
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;char&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;ch&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;7&lt;/span&gt;;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;*&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;pv&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt;ch;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;*&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;pi&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;pv&lt;/span&gt;;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// not C++&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;pi&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;999&lt;/span&gt;;      &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// overwrite sizeof(int) bytes near &amp;amp;ch&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
C 中隐式的从 &lt;code&gt;void*&lt;/code&gt; 转换类型很难发现，也没有任何强化。尤其是本例子中，我们违反了规则，不该转换类型到更严格的字节对齐。
&lt;/p&gt;


&lt;p&gt;
强化
&lt;/p&gt;

&lt;p&gt;
用 C++ 编译器。
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines T.150 通过 static_assert 检查一个类是否符合某个概念</title>
   <link href="http://kimi.im/2023-10-28-cppcoreguidelines-t150"/>
   <updated>2023-10-28T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-t150</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;Check that a class matches a concept using static_assert&amp;rdquo;
&lt;/p&gt;

&lt;p&gt;
理由
&lt;/p&gt;

&lt;p&gt;
如果你想要某个类符合某个概念，尽量在早期进行验证，可以减少用户的痛苦。
&lt;/p&gt;


&lt;p&gt;
例子
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;X&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;public&lt;/span&gt;:
    &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;X&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;delete&lt;/span&gt;;
    &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;X&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;X&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;default&lt;/span&gt;;
    &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;X&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;X&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;default&lt;/span&gt;;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;X&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt; operator&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;X&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;default&lt;/span&gt;;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ...&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
可以在实现文件的某处，让编译器去检查我们需要的 &lt;code&gt;X&lt;/code&gt; 的属性：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;// error: X has no default constructor&lt;/span&gt;
static_assert&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;Default_constructible&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;X&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;
&lt;span style=&quot;color: #3F7F5F;&quot;&gt;// error: we forgot to define X&apos;s move constructor&lt;/span&gt;
static_assert&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;Copyable&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;X&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;
&lt;/pre&gt;
&lt;/div&gt;
</content>
 </entry>
 
 <entry>
   <title>单词本：corpus</title>
   <link href="http://kimi.im/2023-10-28-corpus"/>
   <updated>2023-10-28T00:00:00+00:00</updated>
   <id>http://kimi.im/corpus</id>
   <content type="html">&lt;p&gt;
最近工作真是忙，晚上好多在线会议，都没时间好好看论文文，写文章了。昨天看到个知识图谱（Knowledge Graph）相关论文（ (&lt;a href=&quot;#citeproc_bib_item_1&quot;&gt;Fionda and Pirrò 2018&lt;/a&gt;)），其中提到现行的大部分知识挖掘模式：Most of existing computational
approaches (e.g., [Zubiaga et al., 2017; Hassan et al., 2017]) detect
facts in large corpora (e.g., the Web, Twitter) and leverage
indicators (e.g., tweet popularity) and other (mostly syntactic)
features to measure their credibility.
&lt;/p&gt;

&lt;p&gt;
这里，我们看到一个单词，corpora [&amp;rsquo;kɔ:pәrә]，意思是“事物之全体”。它的单数形式是 corpus 。其实 corpus 的本意是身体器官的主要部分结构，引伸意是文学作品的全集，比如 he edited the Lu Xun corpus. 他编辑了鲁迅全集。
&lt;/p&gt;

&lt;p&gt;
corpus 这个词来自拉丁语，意思就是身体。从这个词衍生来的还有以下这些：
&lt;/p&gt;

&lt;p&gt;
corps 军团、军队、学生联合会、团队。这个词应该是从法语里来的，所以ps
是不发音的，读若 [kɔ:]。例如 the Diplomatic Corps 外交使团；the press
corps 记者团。以前我介绍过亨利·法约尔提出的14条管理原则中有一条就是&lt;a href=&quot;./2021-03-12-francais-esprit-de-corps&quot;&gt;团队精神原则（esprit de corps）&lt;/a&gt;。这个法语词组中的 corps 就是团队的意思。例句：Working and collaborating together builds a camaraderie and
esprit de corps.
&lt;/p&gt;

&lt;p&gt;
corpse 则是尸体的意思。这个词的 pse 倒是要发音的，读若 [kɔ:ps] 。以前有个动画片叫 Corpse Bride 僵尸新娘。瑜伽动作 corpse pose 平躺在地，两手摊开，状若尸体。corpse candle 尸体蜡烛，即鬼火。
&lt;/p&gt;

&lt;p&gt;
corpuscle 小体，微粒，如原子、电子、细胞、红白血球之类。
&lt;/p&gt;

&lt;p&gt;
corpulent 肥大的，肥胖的。-ulentus 表示满满的，身体满满的，就是肥胖肥大的。
&lt;/p&gt;

&lt;p&gt;
corporal：身体的。corporal punishment 身体的惩罚，体罚。
&lt;/p&gt;

&lt;p&gt;
corporeal：肉体的，相对精神而言。corporeal needs 维持身体的必需品，He
is very religious, corporeal world has little interest for him. 他信奉宗教，对物质世界不感兴趣。
&lt;/p&gt;

&lt;p&gt;
corporate：全体的组织。公司法人团体。
&lt;/p&gt;

&lt;p&gt;
德语里，c 一转而成 K，Körper。der Körper 是身体的意思。比如 Beim
taijiquan bewegt man sich sanft und lansam; das ist gut für Körper und
Geist. 通过柔和舒缓的伸展运动，太极拳可以帮助人们提升身体和精神健康。
&lt;/p&gt;

&lt;p&gt;
在比如，庄子齐物论中顏成子游跟老师说的：何居乎？形固可使如槁木，而心固可使如死灰乎？Können wir wirklich bewirken, dass der &lt;b&gt;Körper&lt;/b&gt; wie
verdorrtes Holz und der Herz-Geist wie kalte Asche wird?
&lt;/p&gt;

&lt;p&gt;
形容词形式为 körperlich，比如 Jungen erhalten oft Namen, deren
Bestandteile &lt;b&gt;körperliche&lt;/b&gt; Gesundheit und Stärke bedeuten, wie
z. B. Kang, Jiang, Qiang. 中国的年轻取名字注重身体健康与强壮，所以很多以康、健、强取名。
&lt;/p&gt;

&lt;p&gt;
大概因为拉丁语里 -us 都是阳性名词的结尾，所以神圣罗马帝国延续下来的德语中 Körper 也是一个阳性词。
&lt;/p&gt;

&lt;p&gt;
&lt;b&gt;参考文献&lt;/b&gt;
&lt;/p&gt;


&lt;style&gt;.csl-entry{text-indent: -1.5em; margin-left: 1.5em;}&lt;/style&gt;&lt;div class=&quot;csl-bib-body&quot;&gt;
  &lt;div class=&quot;csl-entry&quot;&gt;&lt;a id=&quot;citeproc_bib_item_1&quot;&gt;&lt;/a&gt;Fionda, Valeria, and Giuseppe Pirrò. 2018. “Fact Checking via Evidence Patterns,” 3755–61. doi:&lt;a href=&quot;https://doi.org/10.24963/ijcai.2018/522&quot;&gt;10.24963/ijcai.2018/522&lt;/a&gt;.&lt;/div&gt;
&lt;/div&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines T.144 不要实例化函数模板</title>
   <link href="http://kimi.im/2023-10-27-cppcoreguidelines-t144"/>
   <updated>2023-10-27T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-t144</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;Don’t specialize function templates&amp;rdquo;
&lt;/p&gt;

&lt;p&gt;
理由
&lt;/p&gt;

&lt;p&gt;
根据语言规则，你无法部分实例化某个函数模板。你只能完全实例化函数模板，但是你肯定想要重载此函数。因为函数模板实例化不参与重载过程。他们无法按你的预期工作。在很少的情况下，你实际应该通过代理给类模板进行实例化，这样你才能正确的实例化函数。
&lt;/p&gt;


&lt;p&gt;
例外
&lt;/p&gt;

&lt;p&gt;
如果你没有合适的理由实例化一个函数模板，那么还是把函数模板代理给类模板，然后你只要实例化这个类模板就可以了。这时候也可以进行部分实例化。
&lt;/p&gt;



&lt;p&gt;
强化
&lt;/p&gt;

&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;标记所有实例化函数模板的情况。应该用函数重载。&lt;/li&gt;
&lt;/ul&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines T.143 不要无心地编写非泛型的代码</title>
   <link href="http://kimi.im/2023-10-24-cppcoreguidelines-t143"/>
   <updated>2023-10-24T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-t143</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;Don’t write unintentionally non-generic code&amp;rdquo;
&lt;/p&gt;

&lt;p&gt;
理由
&lt;/p&gt;

&lt;p&gt;
通用型。可重用性。不要无意义的深入了解细节。使用已有的最通用的工具。
&lt;/p&gt;


&lt;p&gt;
例子
&lt;/p&gt;

&lt;p&gt;
用 &lt;code&gt;!=&lt;/code&gt; 进行迭代器比较，而不要用 &lt;code&gt;&amp;lt;&lt;/code&gt; 。对于大部分对象来说， &lt;code&gt;!=&lt;/code&gt; 都使用，因为它不需要以排序为前提。
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;for&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;auto&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;i&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;first&lt;/span&gt;; i &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt; last; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;++&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;i&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// less generic&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ...&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;for&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;auto&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;i&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;first&lt;/span&gt;; i &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;!=&lt;/span&gt; last; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;++&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;i&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// good; more generic&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ...&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
当然，这里用范围 &lt;code&gt;for&lt;/code&gt; 更好。
&lt;/p&gt;


&lt;p&gt;
例子
&lt;/p&gt;

&lt;p&gt;
如果你需要的功能已经足够，请用派生得最少的类。
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Base&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;public&lt;/span&gt;:
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Bar&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold; font-style: italic;&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt;;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Bar&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold; font-style: italic;&quot;&gt;g&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Derived1&lt;/span&gt; : &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Base&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;public&lt;/span&gt;:
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Bar&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold; font-style: italic;&quot;&gt;h&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Derived2&lt;/span&gt; : &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Base&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;public&lt;/span&gt;:
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Bar&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold; font-style: italic;&quot;&gt;j&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;

&lt;span style=&quot;color: #3F7F5F;&quot;&gt;// bad, unless there is a specific reason for limiting to Derived1 objects only&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;my_func&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Derived1&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;param&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;use&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;param.&lt;span style=&quot;color: #3a5fcd; font-weight: bold; font-style: italic;&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;()&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
    &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;use&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;param.&lt;span style=&quot;color: #3a5fcd; font-weight: bold; font-style: italic;&quot;&gt;g&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;()&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;

&lt;span style=&quot;color: #3F7F5F;&quot;&gt;// good, uses only Base interface so only commit to that&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;my_func&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Base&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;param&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;use&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;param.&lt;span style=&quot;color: #3a5fcd; font-weight: bold; font-style: italic;&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;()&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
    &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;use&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;param.&lt;span style=&quot;color: #3a5fcd; font-weight: bold; font-style: italic;&quot;&gt;g&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;()&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;
强化
&lt;/p&gt;

&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;标记用 &lt;code&gt;&amp;lt;&lt;/code&gt; 而不是用 &lt;code&gt;!=&lt;/code&gt; 对迭代器进行比较的地方。&lt;/li&gt;
&lt;li&gt;标记出现了 &lt;code&gt;x.size() == 0&lt;/code&gt; ，而其实有 &lt;code&gt;x.empty()&lt;/code&gt; 或 &lt;code&gt;x.is_empty()&lt;/code&gt; 的情况。检查是否为空比容器的 &lt;code&gt;size()&lt;/code&gt; 使用范围更广。因为有些容器不知道自己里面有多少元素，而有的没有大小的概念。&lt;/li&gt;
&lt;li&gt;标记函数中用到指针或引用指向派生层级更深等等子类型，而实际只用了基类的一组接口的情况。&lt;/li&gt;
&lt;/ul&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines T.142 用模板变量简化标记符号</title>
   <link href="http://kimi.im/2023-10-23-cppcoreguidelines-t142"/>
   <updated>2023-10-23T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-t142</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;Use template variables to simplify notation&amp;rdquo;
&lt;/p&gt;

&lt;p&gt;
理由
&lt;/p&gt;

&lt;p&gt;
提升可读性。
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines T.141 如果你在单独一个地方需要一个简单的函数对象，用匿名 lambda</title>
   <link href="http://kimi.im/2023-10-22-cppcoreguidelines-t141"/>
   <updated>2023-10-22T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-t141</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;Use an unnamed lambda if you need a simple function object in one
place only&amp;rdquo;
&lt;/p&gt;

&lt;p&gt;
查看 F.11
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines T.140 如果某个操作可以重用，赋予它一个名字</title>
   <link href="http://kimi.im/2023-10-21-cppcoreguidelines-t140"/>
   <updated>2023-10-21T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-t140</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;If an operation can be reused, give it a name&amp;rdquo;
&lt;/p&gt;

&lt;p&gt;
请查看 F.10
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines T.125 如果你需要标准库之外的 TMP 工具，尽量用现有的库</title>
   <link href="http://kimi.im/2023-10-20-cppcoreguidelines-t125"/>
   <updated>2023-10-20T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-t125</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;If you need to go beyond the standard-library TMP facilities, use an
existing library&amp;rdquo;
&lt;/p&gt;

&lt;p&gt;
理由
&lt;/p&gt;

&lt;p&gt;
实现高级的 TMP 设施工具很难，而库中的工具有很好的社区支持。只有你确实需要的时候，才编写高级的 TMP 工具。
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines T.124 选择使用标准库的模板元编程（TMP）工具</title>
   <link href="http://kimi.im/2023-10-19-cppcoreguidelines-t124"/>
   <updated>2023-10-19T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-t124</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;Prefer to use standard-library TMP facilities&amp;rdquo;
&lt;/p&gt;

&lt;p&gt;
理由
&lt;/p&gt;

&lt;p&gt;
标准库中的工具，如 &lt;code&gt;conditional&lt;/code&gt; ， &lt;code&gt;enable_if&lt;/code&gt; 以及 &lt;code&gt;tupple&lt;/code&gt; 可移植性更好，大家都知道。
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines T.123 在编译时用 constexpr 函数计算值</title>
   <link href="http://kimi.im/2023-10-18-cppcoreguidelines-t123"/>
   <updated>2023-10-18T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-t123</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;Use constexpr functions to compute values at compile time&amp;rdquo;
&lt;/p&gt;

&lt;p&gt;
理由
&lt;/p&gt;

&lt;p&gt;
函数是最显著、最普通的方式表达值的计算过程。 &lt;code&gt;constexpr&lt;/code&gt; 函数经常意味着更少的编译时开销。
&lt;/p&gt;


&lt;p&gt;
注意
&lt;/p&gt;

&lt;p&gt;
大部分“trait”技术已经通过这些方式替代掉了：
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;由模板别名计算出类型&lt;/li&gt;
&lt;li&gt;由 &lt;code&gt;constexpr&lt;/code&gt; 函数计算出值&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;
例子
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;template&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;typename&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// requires Number&amp;lt;T&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;constexpr&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;pow&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;v&lt;/span&gt;, &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;n&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// power/exponential&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;res&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;1&lt;/span&gt;;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;while&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;n&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;--&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;res&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;*=&lt;/span&gt; v;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; res;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;constexpr&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;auto&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;f7&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;pow&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;pi, &lt;span style=&quot;color: #110099;&quot;&gt;7&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
强化
&lt;/p&gt;

&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;标记模板元编程计算出值的情况。这些应该通过 &lt;code&gt;constexpr&lt;/code&gt; 函数来实现。&lt;/li&gt;
&lt;/ul&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines T.122 用模板（一般是模板别名）在运行时计算类型</title>
   <link href="http://kimi.im/2023-10-17-cppcoreguidelines-t122"/>
   <updated>2023-10-17T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-t122</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;Use templates (usually template aliases) to compute types at compile
time&amp;rdquo;
&lt;/p&gt;

&lt;p&gt;
理由
&lt;/p&gt;

&lt;p&gt;
模板元编程是唯一直接支持的，在运行时生成类型的方式。
&lt;/p&gt;


&lt;p&gt;
注意
&lt;/p&gt;

&lt;p&gt;
大部分“trait”技术已经通过这些方式替代掉了：
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;由模板别名计算出类型&lt;/li&gt;
&lt;li&gt;由 &lt;code&gt;constexpr&lt;/code&gt; 函数计算出值&lt;/li&gt;
&lt;/ul&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines T.121 主要用模板元编程模拟 concept 机制</title>
   <link href="http://kimi.im/2023-10-16-cppcoreguidelines-t121"/>
   <updated>2023-10-16T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-t121</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;Use template metaprogramming primarily to emulate concepts&amp;rdquo;
&lt;/p&gt;

&lt;p&gt;
理由
&lt;/p&gt;

&lt;p&gt;
当 C++20 还没好的时候，我们需要用 TMP 模拟 concept。最常见的使用 TMP
的例子是基于 concept 的重载。
&lt;/p&gt;


&lt;p&gt;
例子
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;template&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;typename&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Iter&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;/*requires*/&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;enable_if&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;random_access_iterator&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Iter&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;, &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;advance&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Iter&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;p&lt;/span&gt;, &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;n&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;p&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;+=&lt;/span&gt; n; &lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;template&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;typename&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Iter&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;/*requires*/&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;enable_if&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;forward_iterator&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Iter&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;, &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;advance&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Iter&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;p&lt;/span&gt;, &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;n&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;assert&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;n &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;gt;=&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;while&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;n&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;--&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;++&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;p&lt;/span&gt;;&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
注意
&lt;/p&gt;

&lt;p&gt;
此类代码用 concept 实现会更简单。
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;advance&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;random_access_iterator&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;auto&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;p&lt;/span&gt;, &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;n&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;p&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;+=&lt;/span&gt; n; &lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;advance&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;forward_iterator&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;auto&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;p&lt;/span&gt;, &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;n&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;assert&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;n &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;gt;=&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;while&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;n&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;--&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;++&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;p&lt;/span&gt;;&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines T.120 只有真的需要的时候，才使用模板元编程</title>
   <link href="http://kimi.im/2023-10-15-cppcoreguidelines-t120"/>
   <updated>2023-10-15T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-t120</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;Use template metaprogramming only when you really need to&amp;rdquo;
&lt;/p&gt;

&lt;p&gt;
理由
&lt;/p&gt;

&lt;p&gt;
模板元编程很难写正确，降低编译速度，经常很难维护。然而，也有一些实际使用的例子。比如，模板元编程可以比专家级别的汇编代码提供更好的性能。也有一些实际例子中，模板元编程可比运行时代码更好的表达基础思想。比如，你真的需要在编译时进行 AST 操作（比如，可选的矩阵运算符折叠）。这些情况，在 C++ 中可能没有其他方法了。
&lt;/p&gt;

&lt;p&gt;
坏例子
&lt;/p&gt;

&lt;p&gt;
&lt;code&gt;enable_if&lt;/code&gt;
&lt;/p&gt;

&lt;p&gt;
其他方案，也可以使用概念 concept。
&lt;/p&gt;

&lt;p&gt;
其他方案
&lt;/p&gt;

&lt;p&gt;
如果结果是个数值，而不是个类型，可以用 &lt;code&gt;constexpr&lt;/code&gt; 函数。
&lt;/p&gt;


&lt;p&gt;
注意
&lt;/p&gt;

&lt;p&gt;
如果你感觉需要宏定义隐藏模板元编程，很可能你已经走得太远了。
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines T.103 不要用可变参数模板处理同类的参数列表</title>
   <link href="http://kimi.im/2023-10-10-cppcoreguidelines-t103"/>
   <updated>2023-10-10T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-t103</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;Don’t use variadic templates for homogeneous argument lists&amp;rdquo;
&lt;/p&gt;

&lt;p&gt;
理由
&lt;/p&gt;

&lt;p&gt;
有更精确的方式指定同类的序列，比如 &lt;code&gt;initializer_list&lt;/code&gt;
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines T.102 如何处理可变参数模板的参数</title>
   <link href="http://kimi.im/2023-10-09-cppcoreguidelines-t102"/>
   <updated>2023-10-09T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-t102</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;How to process arguments to a variadic template&amp;rdquo;
&lt;/p&gt;

&lt;p&gt;
未完待续。
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines T.101 如何传递参数给可变参数模板</title>
   <link href="http://kimi.im/2023-10-08-cppcoreguidelines-t101"/>
   <updated>2023-10-08T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-t101</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;How to pass arguments to a variadic template&amp;rdquo;
&lt;/p&gt;

&lt;p&gt;
未完待续。
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines T.100 如果需要接受多个不同类型的参数，可以用可变模板参数</title>
   <link href="http://kimi.im/2023-10-07-cppcoreguidelines-t100"/>
   <updated>2023-10-07T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-t100</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;Use variadic templates when you need a function that takes a variable
number of arguments of a variety of types&amp;rdquo;
&lt;/p&gt;

&lt;p&gt;
理由
&lt;/p&gt;

&lt;p&gt;
可变参数模板是处理这个问题的最通用的机制。既效率高，又类型安全。不要使用 C 的变长参数。
&lt;/p&gt;

&lt;p&gt;
强化
&lt;/p&gt;

&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;标记使用 &lt;code&gt;va_arg&lt;/code&gt; 的用户代码。&lt;/li&gt;
&lt;/ul&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines T.84 用非模板的内核实现提供 ABI 稳定的接口</title>
   <link href="http://kimi.im/2023-10-06-cppcoreguidelines-t84"/>
   <updated>2023-10-06T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-t84</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;Use a non-template core implementation to provide an ABI-stable interface&amp;rdquo;
&lt;/p&gt;

&lt;p&gt;
理由
&lt;/p&gt;

&lt;p&gt;
提升代码可读性。避免代码膨胀。
&lt;/p&gt;


&lt;p&gt;
例子
&lt;/p&gt;

&lt;p&gt;
可以是一个基类。
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;struct&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Link_base&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// stable&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Link_base&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;*&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;suc&lt;/span&gt;;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Link_base&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;*&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;pre&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;template&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;typename&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// templated wrapper to add type safety&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;struct&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Link&lt;/span&gt; : &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Link_base&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;val&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;struct&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;List_base&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Link_base&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;*&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;first&lt;/span&gt;;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// first element (if any)&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;sz&lt;/span&gt;;             &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// number of elements&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold; font-style: italic;&quot;&gt;add_front&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Link_base&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;*&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;p&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ...&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;template&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;typename&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;List&lt;/span&gt; : &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;List_base&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;public&lt;/span&gt;:
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold; font-style: italic;&quot;&gt;put_front&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;e&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;add_front&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Link&lt;/span&gt;&lt;span style=&quot;color: #709870; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt;&lt;span style=&quot;color: #709870; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #709870;&quot;&gt;{&lt;/span&gt;e&lt;span style=&quot;color: #709870;&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt;; &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// implicit cast to Link_base&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold; font-style: italic;&quot;&gt;front&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;static_cast&lt;/span&gt;&lt;span style=&quot;color: #909183; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Link&lt;/span&gt;&lt;span style=&quot;color: #709870; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt;&lt;span style=&quot;color: #709870; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color: #909183; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;first&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt;.&lt;span style=&quot;color: #110099; font-style: italic;&quot;&gt;val&lt;/span&gt;; &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// explicit cast back to Link&amp;lt;T&amp;gt;&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ...&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;

&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;List&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;li&lt;/span&gt;;
&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;List&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;string&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;ls&lt;/span&gt;;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
这样，就只有一份添加/删除 &lt;code&gt;List&lt;/code&gt; 元素的操作。 &lt;code&gt;Link&lt;/code&gt; 和 &lt;code&gt;List&lt;/code&gt; 啥也不做，只是处理类型信息。
&lt;/p&gt;

&lt;p&gt;
除了这种单独的基础类型，另一个常用的技术是把 &lt;code&gt;void&lt;/code&gt; 和 &lt;code&gt;void*&lt;/code&gt; 实例化，然后通过模板参数 &lt;code&gt;T&lt;/code&gt; 来安全地进行封装类型转换。
&lt;/p&gt;


&lt;p&gt;
其他方案
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;使用 &lt;a href=&quot;./2022-04-02-cppcoreguidelines-i27&quot;&gt;Pimpl&lt;/a&gt; 实现方式。&lt;/li&gt;
&lt;/ul&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines T.83 不要声明成员函数为模板虚函数</title>
   <link href="http://kimi.im/2023-10-05-cppcoreguidelines-t83"/>
   <updated>2023-10-05T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-t83</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;Do not declare a member function template virtual&amp;rdquo;
&lt;/p&gt;

&lt;p&gt;
理由
&lt;/p&gt;

&lt;p&gt;
C++ 不支持这种用法。如果支持，也无法生成 &lt;code&gt;vtbls&lt;/code&gt; ，直到链接时间才可以生成。一般来说，实现方式必须处理动态链接。
&lt;/p&gt;


&lt;p&gt;
错误例子
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Shape&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ...&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;template&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;virtual&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;bool&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;intersect&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;*&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;p&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// error: template cannot be virtual&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
注意
&lt;/p&gt;

&lt;p&gt;
我们需要此规则，是因为很多人总是在提问。
&lt;/p&gt;


&lt;p&gt;
其他方案
&lt;/p&gt;

&lt;p&gt;
双重分派，访问者模式，计算调用了哪个函数。
&lt;/p&gt;


&lt;p&gt;
强化
&lt;/p&gt;

&lt;p&gt;
编译器会处理。
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines T.82 如果不需要虚函数，请使用线性的派生层级</title>
   <link href="http://kimi.im/2023-10-04-cppcoreguidelines-t82"/>
   <updated>2023-10-04T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-t82</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;Linearize a hierarchy when virtual functions are undesirable&amp;rdquo;
&lt;/p&gt;

&lt;p&gt;
未完待续。
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines T.81 不要混用层级和数组</title>
   <link href="http://kimi.im/2023-10-03-cppcoreguidelines-t81"/>
   <updated>2023-10-03T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-t81</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;Do not mix hierarchies and arrays&amp;rdquo;
&lt;/p&gt;

&lt;p&gt;
理由
&lt;/p&gt;

&lt;p&gt;
一个派生类的数组，很容易隐式的衰变为指向基类的指针，这样会导致可怕的结果。
&lt;/p&gt;


&lt;p&gt;
例子
&lt;/p&gt;

&lt;p&gt;
假设 &lt;code&gt;Apple&lt;/code&gt;  和 &lt;code&gt;Pear&lt;/code&gt;  是两类水果 &lt;code&gt;Fruit&lt;/code&gt;
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;maul&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Fruit&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;*&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;p&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;p&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Pear&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;{}&lt;/span&gt;;     &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// put a Pear into *p&lt;/span&gt;
    &lt;span style=&quot;color: #000000;&quot;&gt;p&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;]&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Pear&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;{}&lt;/span&gt;;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// put a Pear into p[1]&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;

&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Apple&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;aa&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;[]&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt; an_apple, another_apple &lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// aa contains Apples (obviously!)&lt;/span&gt;

&lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;maul&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;aa&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;
&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Apple&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;a0&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt;aa&lt;span style=&quot;color: #707183;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;]&lt;/span&gt;;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// a Pear?&lt;/span&gt;
&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Apple&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;a1&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt;aa&lt;span style=&quot;color: #707183;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;]&lt;/span&gt;;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// a Pear?&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
很可能 &lt;code&gt;aa[0]&lt;/code&gt; 还是个梨子（ &lt;code&gt;Pear&lt;/code&gt; ）（无需类型转换！）如果 &lt;code&gt;sizeof(Apple)
!= sizeof(Pear)&lt;/code&gt; 那么访问 &lt;code&gt;aa[1]&lt;/code&gt; 就无法对其数组中的对象访问起点。我们遇到了类型不一致，可能会导致内存毁坏。永远不要写这样的代码。
&lt;/p&gt;

&lt;p&gt;
注意， &lt;code&gt;maul()&lt;/code&gt; 违反了 &lt;a href=&quot;./2022-06-07-cppcoreguidelines-f22&quot;&gt;CppCoreGuidelines F.22 用 T* 或 owner&amp;lt;T*&amp;gt; 表示单个对象&lt;/a&gt;
&lt;/p&gt;


&lt;p&gt;
替代方案
&lt;/p&gt;

&lt;p&gt;
使用正确模板化的容器。
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;maul2&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Fruit&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;*&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;p&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;p&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Pear&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;{}&lt;/span&gt;;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// put a Pear into *p&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;

&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;vector&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Apple&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;va&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt; an_apple, another_apple &lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// va contains Apples (obviously!)&lt;/span&gt;

&lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;maul2&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;va&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;       &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// error: cannot convert a vector&amp;lt;Apple&amp;gt; to a Fruit*&lt;/span&gt;
&lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;maul2&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt;va&lt;span style=&quot;color: #7388d6;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;]&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// you asked for it&lt;/span&gt;

&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Apple&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;a0&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt;va&lt;span style=&quot;color: #707183;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;]&lt;/span&gt;;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// a Pear?&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
注意，这里 &lt;code&gt;maul2()&lt;/code&gt; 中的复制操作违反了 &lt;a href=&quot;./2023-05-01-cppcoreguidelines-es63&quot;&gt;CppCoreGuidelines ES.63 不要进行对象切片&lt;/a&gt;
&lt;/p&gt;


&lt;p&gt;
强化
&lt;/p&gt;

&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;一定要检测这些情况。&lt;/li&gt;
&lt;/ul&gt;
</content>
 </entry>
 
 <entry>
   <title>工业物联网的现况、趋势和商业洞察</title>
   <link href="http://kimi.im/2023-10-02-iiot-trends"/>
   <updated>2023-10-02T00:00:00+00:00</updated>
   <id>http://kimi.im/iiot-trends</id>
   <content type="html">&lt;p&gt;
从全球范围来看，工业物联网有三个大的发展趋势：以美国为代表的工业互联网模式，以欧洲为代表的工业4.0，以及以中国为代表的工业互联网平台模式。
&lt;/p&gt;

&lt;p&gt;
美国结合自身互联网革命的发展成果，推出了工业互联网模式，目的是通过工业互联网把工业系统连接在一起，融合工业系统、工业传感器和互联网的连接能力，提升工业生产效率。
&lt;/p&gt;

&lt;p&gt;
美国的工业公司进一步建立了 OPAF 开放过程自动化论坛，并不断推进 OPAS 开发过程自动化系统标准，通过云和虚拟化技术，以快捷可扩展的方式部署过程自动化系统。
&lt;/p&gt;

&lt;p&gt;
以德国为代表的欧洲则提出了工业4.0概念，即以物联网为基础，融合互联网与制造业，构建智能工厂、实现智能制造。其目的是通过云计算的数据处理能力，优化工业生产过程。以德国化工行业联盟为代表的制造业联盟提出了 NOA NAMUR
开放架构。NOA 在现有的过程自动化系统之上，以标准化的方式，开放自动化系统的数据，以 PA-DIM 接口建立第二条数据通路。这样可以在核心自动化系统安全可靠的基础上，最大程度的以标准化的方式开放数据、利用数据。
&lt;/p&gt;

&lt;p&gt;
以中国为代表的企业则基于中国强大的计算基础设施，推出工业互联网平台架构，以网络、数据、安全为三大基础体系，推进工业互联网平台建设。
&lt;/p&gt;

&lt;p&gt;
工业物联网有利也有弊。因为连接的更广泛，会使得工业系统更容易受到各种形式的网络攻击。一方面需要政府的引导和规范，加强工业物联网系统的安全法规；另一方面，也需要工业物联网企业加深加大工业物联网安全的建设。
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines T.80 不要把类层级模板化</title>
   <link href="http://kimi.im/2023-10-01-cppcoreguidelines-t80"/>
   <updated>2023-10-01T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-t80</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;Do not naively templatize a class hierarchy&amp;rdquo;
&lt;/p&gt;

&lt;p&gt;
模板是 C++ 支持泛型编程的基础，而类层级则是 C++ 支持面向对象编程的基础。两个语言机制的组合有很多好处，但是我们也要避免设计陷阱。
&lt;/p&gt;

&lt;p&gt;
理由
&lt;/p&gt;

&lt;p&gt;
把有很多函数，尤其是虚函数的类层级模板化，会导致代码量剧增。
&lt;/p&gt;


&lt;p&gt;
坏例子
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;template&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;typename&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;struct&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Container&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;         &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// an interface&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;virtual&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;*&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold; font-style: italic;&quot;&gt;get&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;i&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;virtual&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;*&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold; font-style: italic;&quot;&gt;first&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt;;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;virtual&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;*&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold; font-style: italic;&quot;&gt;next&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt;;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;virtual&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold; font-style: italic;&quot;&gt;sort&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;template&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;typename&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Vector&lt;/span&gt; : &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Container&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;public&lt;/span&gt;:
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ...&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;

&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Vector&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;vi&lt;/span&gt;;
&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Vector&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;string&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;vs&lt;/span&gt;;
&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;
把 &lt;code&gt;sort&lt;/code&gt; 定义成容器的成员函数不是个好主意。
&lt;/p&gt;

&lt;p&gt;
这里，编译器无法知道 &lt;code&gt;vector&amp;lt;int&amp;gt;::sort()&lt;/code&gt; 是否被调用了，所以，总是会为之生成代码。对于 &lt;code&gt;vector&amp;lt;string&amp;gt;::sort()&lt;/code&gt; 也一样。除非，这两个函数确实调用了，不然，就是产生多余的代码了。想象下，如果这个类层级中有几十个这类成员函数，有几十个派生类，那么会实例化多少个这些函数？
&lt;/p&gt;


&lt;p&gt;
注意
&lt;/p&gt;

&lt;p&gt;
很多情况下，我们可以提供一个稳定的基类，而这个基类不需要参数化。
&lt;/p&gt;


&lt;p&gt;
强化
&lt;/p&gt;

&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;标记依赖于模板参数的虚函数。&lt;/li&gt;
&lt;/ul&gt;
</content>
 </entry>
 
 <entry>
   <title>单词本：Mazel</title>
   <link href="http://kimi.im/2023-10-01-mazel"/>
   <updated>2023-10-01T00:00:00+00:00</updated>
   <id>http://kimi.im/mazel</id>
   <content type="html">&lt;p&gt;
9 月底是我们公司创新黑客松比赛的截止日期。作为参加了两届比赛的老选手，我还是继续参赛。这次我们的参赛队伍扩展到多个产品研发部门。在确定参赛队伍名称的时候，我提议找一个单词，包含四个组员的姓氏首字母：M，M，Z，L。后来，我们找到了这个单词：Mazel。
&lt;/p&gt;

&lt;p&gt;
这个奇奇怪怪的词语来自 Yiddish，意第绪语，也就是犹太语。它的本意是来自上方的一点影响。或者说是，来自天空星座的影响力。是一种冥冥中的命运安排。在英语里一般会把它和运气联系在一起。但是，其实上，它仅仅指的是一种命运，命运可以是好的，也可以是坏的。
&lt;/p&gt;

&lt;p&gt;
然后，常常和 Mazel 连在一起用的是 Mazel Tov，是祝你好运的意思。但是，更多用于事后，比如当别人考试考满分，或者疾病痊愈从医院出来的时候，可以用 Mazel Tov 向他祝福。而当运动员刚入场，或者某人生病刚入院的时候，则不能用。
&lt;/p&gt;

&lt;p&gt;
Mazel Tov 本意是一种灵魂之光。犹太人认为人的躯体里住着人的一丝灵魂，而人的大部分灵魂其实是高高在上俯视着自己。可以类似的认为，我们在这个世界上的身体，是某个 RPG 游戏玩家在显示器前操控着的游戏角色。游戏结束后，这个游戏玩家可以选择再开一局，继续玩。如果以这种视角看待我们的人生，那就要珍惜这次机会，好好打怪，把这一局人生的游戏完好，赚更多的金币，等下次，可以玩更高级的装备。我们灵魂的主人也可以获得更多游戏的乐趣，才愿意继续开一局玩下去。
&lt;/p&gt;

&lt;p&gt;
那么，Mazel Tov 可以认为是我们肉体内的一丝丝灵魂和高高在上的灵魂主体建立了一霎那的连接。就好像是 RPG 游戏中的角色跟游戏玩家的鼠标键盘操纵形成了一种行云流水般的顺畅感。这是玩游戏的一个很享受的体验。
&lt;/p&gt;

&lt;p&gt;
但是 Mazel Tov 体验不是随随便便就能获得，往往是在一些高光时刻，竞赛获奖，生日宴会，大病初愈等时候，才会感受到。所以，Mazel Tov 就用来祝福这种时刻，比如：
&lt;/p&gt;

&lt;p&gt;
Mazel Tov on the birth of your lovely baby!
&lt;/p&gt;

&lt;p&gt;
“Suddenly Rebbe Hersh hose, removed his white kaftan, and wrapping it
around the Maggid’s shoulders, wished him mazel tov, mazel tov,
congratulations. After a moment of surprised silence, all those
present joined in approvingly: Mazel tov, mazel tov, may the good star
accompany our new leader.” — Elie Wiesel, Souls on Fire: Portraits and
Legends of Hasidic Masters (1982)
&lt;/p&gt;

&lt;p&gt;
Mazel Tov to Mazel team!
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>一亿有多大</title>
   <link href="http://kimi.im/2023-10-01-1yi"/>
   <updated>2023-10-01T00:00:00+00:00</updated>
   <id>http://kimi.im/1yi</id>
   <content type="html">&lt;p&gt;
一粒花生米重 1 克，1 亿颗花生米的重量是 1 亿克，也就是 10 万千克，100 吨。一辆车大概 1 吨重，100 吨就是 100 辆汽车的重量。也就是说一亿颗花生米有 100 辆汽车这么重。
&lt;/p&gt;

&lt;p&gt;
一张纸的厚度：0.1 mm，1 亿张纸的厚度：1000 万 mm，1 万米。一座 20 层楼的高度大概 50 米，1 万米是 200 幢楼加起来的高度。也就是说，1 一张纸叠起来有 200 幢
20 层楼这么高。或者说有 4000 层楼这么高。
&lt;/p&gt;

&lt;p&gt;
一张椅子 1 立方米，1 亿张椅子 1 亿立方米。西湖水 1400 万立方米。也就是说 1 亿张椅子放在一起有 7 个西湖水这么大。
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines T.69 在模板里，不要调用无限定的非成员函数，除非你有意以其作为定制点</title>
   <link href="http://kimi.im/2023-09-27-cppcoreguidelines-t69"/>
   <updated>2023-09-27T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-t69</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;Inside a template, don’t make an unqualified non-member function call
unless you intend it to be a customization point&amp;rdquo;
&lt;/p&gt;

&lt;p&gt;
理由
&lt;/p&gt;

&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;只提供必要的灵活性&lt;/li&gt;
&lt;li&gt;避免环境改变导致的漏洞&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;
例子
&lt;/p&gt;

&lt;p&gt;
主要有三种方式，让调用的代码定义一个模板
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;template&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// Call a member function&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;test1&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;t&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    t.&lt;span style=&quot;color: #3a5fcd; font-weight: bold; font-style: italic;&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt;;    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// require T to provide f()&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;template&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;test2&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;t&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// Call a non-member function without qualification&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;t&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;     &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// require f(/*T*/) be available in caller&apos;s scope or in T&apos;s namespace&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;template&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;test3&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;t&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// Invoke a &quot;trait&quot;&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;test_traits&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;::&lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;t&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// require customizing test_traits&amp;lt;&amp;gt;&lt;/span&gt;
                          &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// to get non-default functions/types&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
&lt;code&gt;trait&lt;/code&gt; 一般就是一个计算类型的类型别名，一个计算值的 &lt;code&gt;constexpr&lt;/code&gt; 函数，或者一个传统的 traits 模板，用于根据用户提供的类型实例化模板。
&lt;/p&gt;


&lt;p&gt;
注意
&lt;/p&gt;

&lt;p&gt;
如果你计划调用你自己定义的帮助函数 &lt;code&gt;helper(t)&lt;/code&gt; ，而且这个 &lt;code&gt;t&lt;/code&gt; 有依赖于模板类型参数。那么可以把 &lt;code&gt;helper&lt;/code&gt; 放在 &lt;code&gt;::detail&lt;/code&gt; 名字空间，然后通过限定的
&lt;code&gt;detail::helper(t)&lt;/code&gt; 调用。而一个未限定的调用则会成为一个定制化点，任何 &lt;code&gt;t&lt;/code&gt;
类型名字空间里的 &lt;code&gt;helper&lt;/code&gt; 函数都可以调用。这可能会造成问题，比如你不小心调用了未限定的函数模板。
&lt;/p&gt;


&lt;p&gt;
强化
&lt;/p&gt;

&lt;p&gt;
在模板中，标记调用未限定的非成员函数，且传入一个依赖于模板类型的变量，并且，在模板名字空间内还有一个一样名字的非成员函数。
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines T.68 为避免混淆，在模板中用 {} 不要用 ()</title>
   <link href="http://kimi.im/2023-09-26-cppcoreguidelines-t68"/>
   <updated>2023-09-26T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-t68</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;Use &lt;code&gt;{}&lt;/code&gt; rather than &lt;code&gt;()&lt;/code&gt; within templates to avoid ambiguities&amp;rdquo;
&lt;/p&gt;

&lt;p&gt;
理由
&lt;/p&gt;

&lt;p&gt;
&lt;code&gt;()&lt;/code&gt; 很容易导致语法模糊。
&lt;/p&gt;


&lt;p&gt;
例子
&lt;/p&gt;


&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;template&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;typename&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt;, &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;typename&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;U&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;t&lt;/span&gt;, &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;U&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;u&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;v1&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;u&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// mistake: oops, v1 is a function not a variable&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;v2&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;u&lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;;       &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// clear:   obviously a variable&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;auto&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;x&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;T&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;u&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// unclear: construction or cast?&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;

&lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;1&lt;/span&gt;, &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;asdf&quot;&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// bad: cast from const char* to int&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;
强化
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;标记通过 &lt;code&gt;()&lt;/code&gt; 初始化的地方&lt;/li&gt;
&lt;li&gt;标记函数风格的类型转换&lt;/li&gt;
&lt;/ul&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines T.67 通过特例化提供非正则类型的不同实现</title>
   <link href="http://kimi.im/2023-09-25-cppcoreguidelines-t67"/>
   <updated>2023-09-25T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-t67</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;Use specialization to provide alternative implementations for irregular types&amp;rdquo;
&lt;/p&gt;

&lt;p&gt;
此条未完待续。
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines T.65 通过标签分派机制提供函数的不同实现</title>
   <link href="http://kimi.im/2023-09-23-cppcoreguidelines-t65"/>
   <updated>2023-09-23T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-t65</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;Use tag dispatch to provide alternative implementations of a
function&amp;rdquo;
&lt;/p&gt;

&lt;p&gt;
理由
&lt;/p&gt;

&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;模板定义了通用接口&lt;/li&gt;
&lt;li&gt;标签分派机制允许我们基于参数的特定属性选择不同的实现&lt;/li&gt;
&lt;li&gt;性能更好&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;
例子
&lt;/p&gt;

&lt;p&gt;
这是 &lt;code&gt;std::copy&lt;/code&gt; 的简化版本。
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;struct&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;pod_tag&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{}&lt;/span&gt;;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;struct&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;non_pod_tag&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{}&lt;/span&gt;;

&lt;span style=&quot;color: #3F7F5F;&quot;&gt;// T is not &quot;plain old data&quot;&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;template&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;struct&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;copy_trait&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;using&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;tag&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;non_pod_tag&lt;/span&gt;; &lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;

&lt;span style=&quot;color: #3F7F5F;&quot;&gt;// int is &quot;plain old data&quot;&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;template&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;lt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;struct&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;copy_trait&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;using&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;tag&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;pod_tag&lt;/span&gt;; &lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;template&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Iter&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Out&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;copy_helper&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Iter&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;first&lt;/span&gt;, &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Iter&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;last&lt;/span&gt;, &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Iter&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;out&lt;/span&gt;, &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;pod_tag&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// use memmove&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;template&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Iter&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Out&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;copy_helper&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Iter&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;first&lt;/span&gt;, &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Iter&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;last&lt;/span&gt;, &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Iter&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;out&lt;/span&gt;, &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;non_pod_tag&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// use loop calling copy constructors&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;template&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Iter&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Out&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;copy&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Iter&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;first&lt;/span&gt;, &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Iter&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;last&lt;/span&gt;, &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Iter&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;out&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;copy_helper&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;first, last, out, typename &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;copy_trait&lt;/span&gt;&lt;span style=&quot;color: #909183; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Value_type&lt;/span&gt;&lt;span style=&quot;color: #709870; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Iter&lt;/span&gt;&lt;span style=&quot;color: #709870; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #909183; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;::&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;tag&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;{}&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;use&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;vector&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;vi&lt;/span&gt;, &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;vector&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;vi2&lt;/span&gt;,
         &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;vector&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;string&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;vs&lt;/span&gt;, &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;vector&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;string&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;vs2&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;copy&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;vi.&lt;span style=&quot;color: #3a5fcd; font-weight: bold; font-style: italic;&quot;&gt;begin&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;()&lt;/span&gt;, vi.&lt;span style=&quot;color: #3a5fcd; font-weight: bold; font-style: italic;&quot;&gt;end&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;()&lt;/span&gt;, vi2.&lt;span style=&quot;color: #3a5fcd; font-weight: bold; font-style: italic;&quot;&gt;begin&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;()&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// uses memmove&lt;/span&gt;
    &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;copy&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;vs.&lt;span style=&quot;color: #3a5fcd; font-weight: bold; font-style: italic;&quot;&gt;begin&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;()&lt;/span&gt;, vs.&lt;span style=&quot;color: #3a5fcd; font-weight: bold; font-style: italic;&quot;&gt;end&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;()&lt;/span&gt;, vs2.&lt;span style=&quot;color: #3a5fcd; font-weight: bold; font-style: italic;&quot;&gt;begin&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;()&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// uses a loop calling copy constructors&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
这是一个通用的、强大的编译时算法选择技术。
&lt;/p&gt;


&lt;p&gt;
注意
&lt;/p&gt;

&lt;p&gt;
当 &lt;code&gt;concept&lt;/code&gt;  大规模应用的时候，可以直接选择不同实现方式：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;template&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Iter&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;requires&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Pod&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Value_type&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Iter&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Out&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;copy_helper&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;In&lt;/span&gt;, &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;first&lt;/span&gt;, &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;In&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;last&lt;/span&gt;, &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Out&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;out&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// use memmove&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;template&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Iter&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Out&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;copy_helper&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;In&lt;/span&gt;, &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;first&lt;/span&gt;, &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;In&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;last&lt;/span&gt;, &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Out&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;out&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// use loop calling copy constructors&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines T.64 实例化提供了模板类的多个实现</title>
   <link href="http://kimi.im/2023-09-22-cppcoreguidelines-t64"/>
   <updated>2023-09-22T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-t64</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;Use specialization to provide alternative implementations of class
template&amp;rdquo;
&lt;/p&gt;

&lt;p&gt;
理由
&lt;/p&gt;

&lt;p&gt;
模板定义了通用的接口。实例化提供了一个强大的机制提供多个接口的实现方式。
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines T.62 把不相关的类模板成员放进非模板化的基类中</title>
   <link href="http://kimi.im/2023-09-21-cppcoreguidelines-t62"/>
   <updated>2023-09-21T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-t62</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;Place non-dependent class template members in a non-templated base
class&amp;rdquo;
&lt;/p&gt;

&lt;p&gt;
理由
&lt;/p&gt;

&lt;p&gt;
可以不用指定模板参数、不用实例化模板而使用基类成员
&lt;/p&gt;


&lt;p&gt;
例子
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;template&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;typename&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Foo&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;public&lt;/span&gt;:
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;enum&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;v1&lt;/span&gt;, &lt;span style=&quot;color: #000000;&quot;&gt;v2&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ...&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
尽管这个枚举不需要模板参数，但是你仍然要给出一个模板参数才可以使用。
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;struct&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Foo_base&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;enum&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;v1&lt;/span&gt;, &lt;span style=&quot;color: #000000;&quot;&gt;v2&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ...&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;template&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;typename&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Foo&lt;/span&gt; : &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Foo_base&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;public&lt;/span&gt;:
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ...&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
这样就不需要为基类指定模板参数了。
&lt;/p&gt;


&lt;p&gt;
注意
&lt;/p&gt;

&lt;p&gt;
本规则的一个更通用的版本是“如果一个类模板成员仅仅依赖于 M 个模板参数中的 N 个，那么就定义只用到 N 个模板参数的基类。”当 &lt;code&gt;N == 1&lt;/code&gt; 的时候，就得到了规则 T.61。
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines T.61 不要过度把成员参数化</title>
   <link href="http://kimi.im/2023-09-20-cppcoreguidelines-t61"/>
   <updated>2023-09-20T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-t61</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;Do not over-parameterize members (SCARY)&amp;rdquo;
&lt;/p&gt;

&lt;p&gt;
理由
&lt;/p&gt;

&lt;p&gt;
模板类成员要依赖使用模板参数，除非是一个特定参数。但是会限定模板的使用范围，而且会增加生成的代码量。
&lt;/p&gt;


&lt;p&gt;
坏例子
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;template&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;typename&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt;, &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;typename&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;A&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;std&lt;/span&gt;::&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;allocator&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// requires Regular&amp;lt;T&amp;gt; &amp;amp;&amp;amp; Allocator&amp;lt;A&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;List&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;public&lt;/span&gt;:
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;struct&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Link&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// does not depend on A&lt;/span&gt;
        &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;elem&lt;/span&gt;;
        &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Link&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;*&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;pre&lt;/span&gt;;
        &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Link&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;*&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;suc&lt;/span&gt;;
    &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;;

    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;using&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;iterator&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Link&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;*&lt;/span&gt;;

    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;iterator&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold; font-style: italic;&quot;&gt;first&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; head; &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;

    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ...&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;private&lt;/span&gt;:
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Link&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;*&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;head&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;

&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;List&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;lst1&lt;/span&gt;;
&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;List&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt;, &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;My_allocator&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;lst2&lt;/span&gt;;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
这段代码看起来人畜无害，但是现在 &lt;code&gt;Link&lt;/code&gt; 依赖于 &lt;code&gt;allocator&lt;/code&gt; （尽管它不使用
&lt;code&gt;allocator&lt;/code&gt; ）。这就强化了多余的实例化，在某些实际场景中可能会带来显著的开销。一个很典型的解决方案是把这个嵌套类改为非局部的，让它自己拥有一组最小的模板参数。
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;template&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;typename&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;struct&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Link&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;elem&lt;/span&gt;;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Link&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;*&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;pre&lt;/span&gt;;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Link&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;*&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;suc&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;template&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;typename&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt;, &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;typename&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;A&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;std&lt;/span&gt;::&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;allocator&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// requires Regular&amp;lt;T&amp;gt; &amp;amp;&amp;amp; Allocator&amp;lt;A&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;List2&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;public&lt;/span&gt;:
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;using&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;iterator&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Link&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;*&lt;/span&gt;;

    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;iterator&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold; font-style: italic;&quot;&gt;first&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; head; &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;

    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ...&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;private&lt;/span&gt;:
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Link&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;*&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;head&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;

&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;List2&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;lst1&lt;/span&gt;;
&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;List2&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt;, &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;My_allocator&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;lst2&lt;/span&gt;;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
有些人会觉得，这时候 &lt;code&gt;Link&lt;/code&gt; 不在隐藏在 list 之内很恐怖。所以我们称这种技术为 &lt;a href=&quot;https://www.open-std.org/jtc1/sc22/WG21/docs/papers/2009/n2911.pdf&quot;&gt;SCARY&lt;/a&gt; 。学术论文中提到：SCARY 描述的复制和初始化过程似乎是错误的（看起来受冲突的泛型参数约束），但是实际上是可以通过正确的实现正常工作的（因为减少依赖，从而不受冲突限制）。
&lt;/p&gt;


&lt;p&gt;
注意
&lt;/p&gt;

&lt;p&gt;
这个规则也适用于不依赖于所有模板参数的 lambda
&lt;/p&gt;


&lt;p&gt;
强化
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;标记不依赖于所有模板参数的成员变量类型&lt;/li&gt;
&lt;li&gt;标记不依赖于所有模板参数的成员函数类型&lt;/li&gt;
&lt;li&gt;标记不依赖于所有模板参数的 lambda 或变量模板&lt;/li&gt;
&lt;/ul&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines T.60 减少模板上下文依赖关系</title>
   <link href="http://kimi.im/2023-09-19-cppcoreguidelines-t60"/>
   <updated>2023-09-19T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-t60</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;Minimize a template’s context dependencies&amp;rdquo;
&lt;/p&gt;

&lt;p&gt;
理由
&lt;/p&gt;

&lt;p&gt;
更容易理解。减小不必要的依赖关系导致的错误。简化工具的支持。
&lt;/p&gt;


&lt;p&gt;
例子
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;template&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;typename&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;C&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;sort&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;C&lt;/span&gt;&amp;amp; &lt;span style=&quot;color: #000000;&quot;&gt;c&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #110099;&quot;&gt;std&lt;/span&gt;::sort&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;begin&lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;c&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt;, end&lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;c&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;necessary and useful dependency&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;template&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;typename&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Iter&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Iter&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;algo&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Iter&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;first&lt;/span&gt;, &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Iter&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;last&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;for&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;; first != last; ++first&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;
        &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;auto&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;x&lt;/span&gt; = sqrt&lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;*first&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt;; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;potentially surprising dependency: which sqrt()?&lt;/span&gt;
        helper&lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;first, x&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt;;      &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;potentially surprising dependency:&lt;/span&gt;
                               &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;helper is chosen based on first and x&lt;/span&gt;
        &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;TT&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;var&lt;/span&gt; = 7;            &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;potentially surprising dependency: which TT?&lt;/span&gt;
    &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
注意
&lt;/p&gt;

&lt;p&gt;
模板通常出现在头文件里，所以他们的上下文依赖关系会受 &lt;code&gt;#include&lt;/code&gt; 的顺序影响。
&lt;/p&gt;


&lt;p&gt;
注意
&lt;/p&gt;

&lt;p&gt;
有一个减小模板对外部依赖的方式是让模板的操作只处理自己本身的参数。但是这样一般很难管理。比如，算法经常需要用到其他算法，然后调用到一些其他操作。注意，不要开始考虑用宏定义。
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines T.49 如果可以，避免类型抹除</title>
   <link href="http://kimi.im/2023-09-18-cppcoreguidelines-t49"/>
   <updated>2023-09-18T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-t49</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;Where possible, avoid type-erasure&amp;rdquo;
&lt;/p&gt;

&lt;p&gt;
理由
&lt;/p&gt;

&lt;p&gt;
类型抹除会在多个编译边界隐藏类型信息，导致额外的不直接访问。
&lt;/p&gt;


&lt;p&gt;
例外
&lt;/p&gt;

&lt;p&gt;
类型抹除有时候是可以用的，比如 &lt;code&gt;std::function&lt;/code&gt;
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines T.48 如果你的编译器不支持 concept 那么就用 enable_if 来假装 concept</title>
   <link href="http://kimi.im/2023-09-16-cppcoreguidelines-t48"/>
   <updated>2023-09-16T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-t48</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;If your compiler does not support concepts, fake them with &lt;code&gt;enable_if&lt;/code&gt;&amp;rdquo;
&lt;/p&gt;

&lt;p&gt;
理由
&lt;/p&gt;

&lt;p&gt;
在没有 concept 的情况下，这是目前最好的方式了。 &lt;code&gt;enable_if&lt;/code&gt; 可以用来选择性的定义函数，选择函数集中的某个特定函数。
&lt;/p&gt;


&lt;p&gt;
例子
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;template&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;typename&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;enable_if_t&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;is_integral_v&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;v&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ...&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;

&lt;span style=&quot;color: #3F7F5F;&quot;&gt;// Equivalent to:&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;template&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Integral&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;T&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;v&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ...&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;
注意
&lt;/p&gt;

&lt;p&gt;
小心互补限定条件。用 &lt;code&gt;enable_if&lt;/code&gt; 假装 &lt;code&gt;concept&lt;/code&gt; 有时候会强制我们使用容易出错的设计技术。
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines T.47 高可见度的未限定的模板，避免用常见名字</title>
   <link href="http://kimi.im/2023-09-15-cppcoreguidelines-t47"/>
   <updated>2023-09-15T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-t47</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;Avoid highly visible unconstrained templates with common names&amp;rdquo;
&lt;/p&gt;

&lt;p&gt;
理由
&lt;/p&gt;

&lt;p&gt;
模板的未限定的参数可以匹配任何东西，所以会比特定类型的参数的模板更容易匹配到。在用了 ADL 的时候，会很讨厌、很危险。常见名字使得问题更糟糕。
&lt;/p&gt;


&lt;p&gt;
例子
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;namespace&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Bad&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;struct&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;S&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;m&lt;/span&gt;; &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;template&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;typename&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T1&lt;/span&gt;, &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;typename&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T2&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;bool&lt;/span&gt; operator&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;==&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T1&lt;/span&gt;, &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T2&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt; cout &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;Bad\n&quot;&lt;/span&gt;; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;true&lt;/span&gt;; &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;namespace&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T0&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;bool&lt;/span&gt; operator&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;==&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt;, &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Bad&lt;/span&gt;::&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;S&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt; cout &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;T0\n&quot;&lt;/span&gt;; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;true&lt;/span&gt;; &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;  &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// compare to int&lt;/span&gt;

    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;test&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt;
    &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;
        &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Bad&lt;/span&gt;::&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;S&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;bad&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;1&lt;/span&gt; &lt;span style=&quot;color: #909183;&quot;&gt;}&lt;/span&gt;;
        &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;vector&lt;/span&gt;&lt;span style=&quot;color: #909183; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #909183; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;v&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;10&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt;;
        &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;bool&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;b&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;1&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;==&lt;/span&gt; bad;          &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// T0&lt;/span&gt;
        &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;bool&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;b2&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; v.&lt;span style=&quot;color: #3a5fcd; font-weight: bold; font-style: italic;&quot;&gt;size&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;==&lt;/span&gt; bad;  &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// Bad&lt;/span&gt;
    &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;main&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T0&lt;/span&gt;::&lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;test&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;pre class=&quot;example&quot;&gt;
T0
Bad
&lt;/pre&gt;


&lt;p&gt;
这里， &lt;code&gt;Bad&lt;/code&gt; 中的 &lt;code&gt;==&lt;/code&gt; 引起了问题。但是你能在真实代码中发现这个问题吗？问题是这样的， &lt;code&gt;v.size()&lt;/code&gt; 返回一个无符号整型，所以如果要用 &lt;code&gt;T0&lt;/code&gt; 中的 &lt;code&gt;==&lt;/code&gt; 操作符，需要一次类型转换。而 &lt;code&gt;Bad&lt;/code&gt; 中的 &lt;code&gt;==&lt;/code&gt; 不需要类型转换。像标准库中的迭代器等真实类型就有这种反社会倾向。
&lt;/p&gt;


&lt;p&gt;
注意
&lt;/p&gt;

&lt;p&gt;
如果你在同一个名字空间中定义一个未限定的模板，ADL 会发现这个未定义的模板（正如例子中所发生的）。因为这个模板的可见度更高。
&lt;/p&gt;


&lt;p&gt;
注意
&lt;/p&gt;

&lt;p&gt;
本来不应该有这条规则，但是 C++ 标准委员会成员不同意把未定义的模板排除在 ADL 之外。
&lt;/p&gt;

&lt;p&gt;
很遗憾，这会导致很多误报。而且标准库也很大程度上违反此规则，把很多未限定的模板和类型放在单独的 &lt;code&gt;std&lt;/code&gt; 名字空间。
&lt;/p&gt;


&lt;p&gt;
强化
&lt;/p&gt;

&lt;p&gt;
标记在同一个名字空间里有具体类型又有未限定模板的情况（可能直到我们有
concepts 之后才可以做到）
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines T.46 要求模板参数至少是半正则的</title>
   <link href="http://kimi.im/2023-09-13-cppcoreguidelines-t46"/>
   <updated>2023-09-13T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-t46</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;Require template arguments to be at least semiregular&amp;rdquo;
&lt;/p&gt;

&lt;p&gt;
理由
&lt;/p&gt;

&lt;p&gt;
可读性。避免出现惊讶和错误。很多应用场合支持这个规则。
&lt;/p&gt;


&lt;p&gt;
例子
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;X&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;public&lt;/span&gt;:
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;explicit&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;X&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
    &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;X&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;X&lt;/span&gt;&amp;amp;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;            &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;copy&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;X&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;operator&lt;/span&gt;&lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;X&lt;/span&gt;&amp;amp;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
    &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;X&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;X&lt;/span&gt;&amp;amp;&amp;amp;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;noexcept&lt;/span&gt;;        &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;move&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;X&lt;/span&gt;&amp;amp; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;operator&lt;/span&gt;&lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;X&lt;/span&gt;&amp;amp;&amp;amp;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;noexcept&lt;/span&gt;;
    ~&lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;X&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt;;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;... no more constructors ...&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;

&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;X&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;x&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;1&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;              &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;fine&lt;/span&gt;
&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;X&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;y&lt;/span&gt; = x;              &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;fine&lt;/span&gt;
&lt;span style=&quot;color: #110099;&quot;&gt;std&lt;/span&gt;::&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;vector&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;X&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;v&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;10&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;error: no default constructor&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;
注意
&lt;/p&gt;

&lt;p&gt;
半正则需要默认可构造。
&lt;/p&gt;


&lt;p&gt;
强化
&lt;/p&gt;

&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;标注模板参数不是半正则的情况。&lt;/li&gt;
&lt;/ul&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines T.44 用函数模板推演出模板参数类型（尽可能的）</title>
   <link href="http://kimi.im/2023-09-12-cppcoreguidelines-t44"/>
   <updated>2023-09-12T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-t44</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;Use function templates to deduce class template argument types (where
feasible)&amp;rdquo;
&lt;/p&gt;

&lt;p&gt;
理由
&lt;/p&gt;

&lt;p&gt;
明确地写明模板参数类型会很繁琐，也没必要。
&lt;/p&gt;


&lt;p&gt;
例子
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;tuple&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt;, &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;string&lt;/span&gt;, &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;double&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;t1&lt;/span&gt; = &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;1, &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;Hamlet&quot;&lt;/span&gt;, 3.14&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;explicit type&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;auto&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;t2&lt;/span&gt; = make_tuple&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;1, &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;Ophelia&quot;&lt;/span&gt;s, 3.14&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;         &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;better; deduced type&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
注意这里用到的 &lt;code&gt;s&lt;/code&gt; 后缀。它强调这个字符串是 &lt;code&gt;std::string&lt;/code&gt; 而非 C 风格字符串。
&lt;/p&gt;


&lt;p&gt;
注意
&lt;/p&gt;

&lt;p&gt;
你可以很轻易写出一个 &lt;code&gt;make_T&lt;/code&gt; 函数，编译器也能办到。所以，未来 &lt;code&gt;make_T&lt;/code&gt; 函数可能是多余的。
&lt;/p&gt;


&lt;p&gt;
例外
&lt;/p&gt;

&lt;p&gt;
有时候，没有好办法可以推演出模板参数类型，所以，可能需要你指明参数：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;vector&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;double&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;v&lt;/span&gt; = &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt; 1, 2, 3, 7.9, 15.99 &lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;
&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;list&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Record&lt;/span&gt;*&lt;span style=&quot;color: #707183;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;lst&lt;/span&gt;;
&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;
注意
&lt;/p&gt;

&lt;p&gt;
C++17 允许模板参数直接从构造函数的参数中引出，所以这个规则可能变的多余。比如：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;tuple&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;t1&lt;/span&gt; = &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;1, &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;Hamlet&quot;&lt;/span&gt;s, 3.14&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;deduced: tuple&amp;lt;int, string, double&amp;gt;&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;
强化
&lt;/p&gt;

&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;标注明确指定的实例化类型的参数和模板参数一样的情况。&lt;/li&gt;
&lt;/ul&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines T.43 用 using 来定义别名，避免用 typedef</title>
   <link href="http://kimi.im/2023-09-11-cppcoreguidelines-t43"/>
   <updated>2023-09-11T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-t43</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;Prefer using over typedef for defining aliases&amp;rdquo;
&lt;/p&gt;

&lt;p&gt;
理由
&lt;/p&gt;

&lt;p&gt;
可读性：用 &lt;code&gt;using&lt;/code&gt; 的话，新的别名出现在最前面，而不是嵌入到声明的某个地方。
&lt;/p&gt;

&lt;p&gt;
通用性： &lt;code&gt;using&lt;/code&gt; 可以用于模板别名，而 &lt;code&gt;typedef&lt;/code&gt; 很难称为模板。
&lt;/p&gt;

&lt;p&gt;
统一性： &lt;code&gt;using&lt;/code&gt; 和 &lt;code&gt;auto&lt;/code&gt; 的语法差不多。
&lt;/p&gt;


&lt;p&gt;
例子
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;typedef&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;*&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;PFI&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;OK, but convoluted&lt;/span&gt;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;using&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;PFI2&lt;/span&gt; = &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;*&lt;span style=&quot;color: #707183;&quot;&gt;)(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;OK, preferred&lt;/span&gt;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;template&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;typename&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;typedef&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;*&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;PFT&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;      &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;error&lt;/span&gt;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;template&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;typename&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;using&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;PFT2&lt;/span&gt; = &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;*&lt;span style=&quot;color: #707183;&quot;&gt;)(&lt;/span&gt;T&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;OK&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;
强化
&lt;/p&gt;

&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;标记出现 &lt;code&gt;typedef&lt;/code&gt; 的地方。或许能给出不少“提示”。&lt;/li&gt;
&lt;/ul&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines T.42 用模板别名简化代码，隐藏实现细节</title>
   <link href="http://kimi.im/2023-09-10-cppcoreguidelines-t42"/>
   <updated>2023-09-10T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-t42</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;Use template aliases to simplify notation and hide implementation
details&amp;rdquo;
&lt;/p&gt;

&lt;p&gt;
理由
&lt;/p&gt;

&lt;p&gt;
提升可读性。隐藏实现细节。模板别名可以替代很多 &lt;code&gt;traits&lt;/code&gt; 和类型计算的应用。也可以用来封装一个 &lt;code&gt;traits&lt;/code&gt;
&lt;/p&gt;


&lt;p&gt;
例子
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;template&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;typename&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt;, &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;size_t&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;N&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Matrix&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;...&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;using&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Iterator&lt;/span&gt; = &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;typename&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;std&lt;/span&gt;::&lt;span style=&quot;color: #110099;&quot;&gt;vector&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;&amp;gt;&lt;/span&gt;::iterator;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;...&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
这样写， &lt;code&gt;Matrix&lt;/code&gt; 的用户不用关心元素是不是存在一个 &lt;code&gt;vector&lt;/code&gt; 中。用户也可以避免重复输入 &lt;code&gt;typename std::vector&amp;lt;T&amp;gt;::&lt;/code&gt;
&lt;/p&gt;


&lt;p&gt;
例子
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;template&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;typename&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;user&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt;&amp;amp; &lt;span style=&quot;color: #000000;&quot;&gt;c&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;...&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;typename&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;container_traits&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;&amp;gt;&lt;/span&gt;::&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;value_type&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;x&lt;/span&gt;; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;bad, verbose&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;...&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;template&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;typename&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;using&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Value_type&lt;/span&gt; = &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;typename&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;container_traits&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;gt;&lt;/span&gt;::value_type;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
这样写，用户就不需要知道实现 &lt;code&gt;value_type&lt;/code&gt; 的技术细节。
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;template&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;typename&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;user2&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt;&amp;amp; &lt;span style=&quot;color: #000000;&quot;&gt;c&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;...&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Value_type&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;x&lt;/span&gt;;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;...&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;
注意
&lt;/p&gt;

&lt;p&gt;
一个简单的，常用的情况，可以通过 &lt;code&gt;traits&lt;/code&gt; 封装实现。
&lt;/p&gt;


&lt;p&gt;
强化
&lt;/p&gt;

&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;标记在 &lt;code&gt;using&lt;/code&gt; 之外使用 &lt;code&gt;typename&lt;/code&gt; 来进行说明的情况。&lt;/li&gt;
&lt;/ul&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines T.41 只在模板概念中要求最基本的属性</title>
   <link href="http://kimi.im/2023-09-09-cppcoreguidelines-t41"/>
   <updated>2023-09-09T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-t41</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;Require only essential properties in a template’s concepts&amp;rdquo;
&lt;/p&gt;

&lt;p&gt;
理由
&lt;/p&gt;

&lt;p&gt;
确保接口简单稳定。
&lt;/p&gt;


&lt;p&gt;
例子
&lt;/p&gt;

&lt;p&gt;
考虑一个 &lt;code&gt;sort&lt;/code&gt; 函数，内置了一些调试支持：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;sort&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;sortable&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;auto&lt;/span&gt;&amp;amp; &lt;span style=&quot;color: #000000;&quot;&gt;s&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;  &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;sort sequence s&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;debug&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; cerr &amp;lt;&amp;lt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;enter sort( &quot;&lt;/span&gt; &amp;lt;&amp;lt; s &amp;lt;&amp;lt;  &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;)\n&quot;&lt;/span&gt;;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;...&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;debug&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; cerr &amp;lt;&amp;lt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;exit sort( &quot;&lt;/span&gt; &amp;lt;&amp;lt; s &amp;lt;&amp;lt;  &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;)\n&quot;&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
是不是应该重写改写成这样：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;template&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;sortable&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;S&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;gt;&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;requires&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Streamable&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;lt;&lt;/span&gt;S&lt;span style=&quot;color: #707183;&quot;&gt;&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;sort&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;S&lt;/span&gt;&amp;amp; &lt;span style=&quot;color: #000000;&quot;&gt;s&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;  &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;sort sequence s&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;debug&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; cerr &amp;lt;&amp;lt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;enter sort( &quot;&lt;/span&gt; &amp;lt;&amp;lt; s &amp;lt;&amp;lt;  &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;)\n&quot;&lt;/span&gt;;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;...&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;debug&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; cerr &amp;lt;&amp;lt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;exit sort( &quot;&lt;/span&gt; &amp;lt;&amp;lt; s &amp;lt;&amp;lt;  &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;)\n&quot;&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
毕竟，对于 &lt;code&gt;sortable&lt;/code&gt; 来说，它不需要 &lt;code&gt;iostream&lt;/code&gt; 的支持。但是从另一角度来看，排序的基本思想中并不包含任何调试内容。
&lt;/p&gt;


&lt;p&gt;
注意
&lt;/p&gt;

&lt;p&gt;
如果我们把每个操作都列在模板的要求清单中，接口会变的不稳定：每次我们修改调试机制、数据收集、测试支持、错误报告等，模板的定义可能也要对应的修改，而且还要重新编译。这就太麻烦了。有些时候还挺不现实的。相反的，如果我们在实现中用了一个不在概念中规定的操作，我们可能在后期编译时遇到编译错误。
&lt;/p&gt;

&lt;p&gt;
把不太重要的模板参数属性检查放到实例化时进行检测，是一种比较值得的妥协。
&lt;/p&gt;


&lt;p&gt;
注意
&lt;/p&gt;

&lt;p&gt;
在模板定义中，用了一些非局部的、非独立的变量（比如 &lt;code&gt;debug&lt;/code&gt; ， &lt;code&gt;cerr&lt;/code&gt; ），会引入一些对外部的依赖，可能会导致“神秘”的错误。
&lt;/p&gt;


&lt;p&gt;
注意
&lt;/p&gt;

&lt;p&gt;
很难确定模板参数类型的哪些属性是必要的，哪些是不重要的。
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines T.40 通过函数对象传递操作符给算法</title>
   <link href="http://kimi.im/2023-09-08-cppcoreguidelines-t40"/>
   <updated>2023-09-08T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-t40</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;Use function objects to pass operations to algorithms&amp;rdquo;
&lt;/p&gt;

&lt;p&gt;
理由
&lt;/p&gt;

&lt;p&gt;
相比普通指向函数的指针，函数对象能通过接口传递更更多信息。一般来说，传递函数对象比传递函数指针性能更好。
&lt;/p&gt;

&lt;p&gt;
例子
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;bool&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;greater&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;double&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;x&lt;/span&gt;, &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;double&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;y&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; x &amp;gt; y; &lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;pointer to function: potentially slow&lt;/span&gt;
sort&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;v, greater&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;
&lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;function object&lt;/span&gt;
sort&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;v, &lt;span style=&quot;color: #7388d6;&quot;&gt;[](&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;double&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;x&lt;/span&gt;, &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;double&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;y&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; x &amp;gt; y; &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;
&lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;function object&lt;/span&gt;
sort&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;v, &lt;span style=&quot;color: #110099;&quot;&gt;std&lt;/span&gt;::greater&lt;span style=&quot;color: #7388d6;&quot;&gt;{}&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;

&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;bool&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;greater_than_7&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;double&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;x&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; x &amp;gt; 7; &lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;pointer to function: inflexible&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;auto&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;x&lt;/span&gt; = find_if&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;v, greater_than_7&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;
&lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;function object: carries the needed data&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;auto&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;y&lt;/span&gt; = find_if&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;v, &lt;span style=&quot;color: #7388d6;&quot;&gt;[](&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;double&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;x&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; x &amp;gt; 7; &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;
&lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;function object: carries the needed data&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;auto&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;z&lt;/span&gt; = find_if&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;v, Greater_than&lt;span style=&quot;color: #7388d6;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;double&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;&amp;gt;(&lt;/span&gt;7&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
你当然也可以通过 &lt;code&gt;auto&lt;/code&gt;  和概念把这些函数泛化。比如：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;require an ordered type&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;auto&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;y1&lt;/span&gt; = find_if&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;v, &lt;span style=&quot;color: #7388d6;&quot;&gt;[](&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;totally_ordered&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;auto&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;x&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; x &amp;gt; 7; &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;
&lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;hope that the type has a &amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;auto&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;z1&lt;/span&gt; = find_if&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;v, &lt;span style=&quot;color: #7388d6;&quot;&gt;[](&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;auto&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;x&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; x &amp;gt; 7; &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
注意
&lt;/p&gt;

&lt;p&gt;
Lambda 会产生函数对象。
&lt;/p&gt;

&lt;p&gt;
注意
&lt;/p&gt;

&lt;p&gt;
性能最终由编译器和优化器确定。
&lt;/p&gt;

&lt;p&gt;
强化
&lt;/p&gt;

&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;标记模板参数中用到函数指针的情况&lt;/li&gt;
&lt;li&gt;标记给模板传递函数指针的情况（可能会有不少误报）&lt;/li&gt;
&lt;/ul&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines T.26 最好用使用形式来定义概念，而不要用简单的语法</title>
   <link href="http://kimi.im/2023-09-07-cppcoreguidelines-t26"/>
   <updated>2023-09-07T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-t26</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;Prefer to define concepts in terms of use-patterns rather than simple
syntax&amp;rdquo;
&lt;/p&gt;

&lt;p&gt;
理由
&lt;/p&gt;

&lt;p&gt;
这样的定义更容易读，也更直接的告诉用户怎么些代码。值转换也考虑进来了。你也不需要记住所有类型 &lt;code&gt;traits&lt;/code&gt; 的名字。
&lt;/p&gt;


&lt;p&gt;
例子
&lt;/p&gt;

&lt;p&gt;
你可能要定义一个 &lt;code&gt;Equality&lt;/code&gt; 概念，像这样：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;template&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;typename&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;concept&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Equality&lt;/span&gt; = &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;has_equal&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;gt;&lt;/span&gt; &amp;amp;&amp;amp; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;has_not_equal&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;gt;&lt;/span&gt;;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
很明显，如果你用标准库的 &lt;code&gt;equality_comparable&lt;/code&gt; 会更好更容易。但是，这里，我们仅仅作为例子来分析。其实，还是像以下这样的方式定义会更好：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;template&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;typename&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;concept&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Equality&lt;/span&gt; = &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;requires&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;a&lt;/span&gt;, &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;b&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt; a == b &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt; -&amp;gt; &lt;span style=&quot;color: #110099;&quot;&gt;std&lt;/span&gt;::&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;convertible_to&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;bool&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;&amp;gt;&lt;/span&gt;;
    &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt; a != b &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt; -&amp;gt; &lt;span style=&quot;color: #110099;&quot;&gt;std&lt;/span&gt;::&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;convertible_to&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;bool&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;&amp;gt;&lt;/span&gt;;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;axiom { !(a == b) == (a != b) }&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;axiom { a = b; =&amp;gt; a == b }  // =&amp;gt; means &quot;implies&quot;&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
相对的，我们不需要使用两个无意义的概念 &lt;code&gt;has_equal&lt;/code&gt; 和 &lt;code&gt;has_not_equal&lt;/code&gt; 来定义 &lt;code&gt;Equality&lt;/code&gt; 。这里，我们说“无意义”指的是，我们无法孤立的规定 &lt;code&gt;has_equal&lt;/code&gt;
的语义。
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines T.25 避免互补的约束</title>
   <link href="http://kimi.im/2023-09-06-cppcoreguidelines-t25"/>
   <updated>2023-09-06T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-t25</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;Avoid complementary constraints&amp;rdquo;
&lt;/p&gt;

&lt;p&gt;
理由
&lt;/p&gt;

&lt;p&gt;
清晰。可读性好。通过互补约束表达的相反的要求很容易弄错。
&lt;/p&gt;


&lt;p&gt;
例子
&lt;/p&gt;

&lt;p&gt;
一开始，人们尝试通过互补要求来定义函数。
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;template&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;typename&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;gt;&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;requires&lt;/span&gt; !&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;C&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;gt;&lt;/span&gt;    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;bad&lt;/span&gt;
&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;void&lt;/span&gt; f&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;template&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;typename&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;gt;&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;requires&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;C&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
其实这样写会更好：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;template&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;typename&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;gt;&lt;/span&gt;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;general template&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;template&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;typename&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;gt;&lt;/span&gt;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;specialization by concept&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;requires&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;C&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
如果限制条件 &lt;code&gt;C&amp;lt;T&amp;gt;&lt;/code&gt; 不满足要求，编译器会选择没有限制的那个模板。如果你不像或无法定义不受限制的版本的 &lt;code&gt;f()&lt;/code&gt; ，你可以删除它。
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;template&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;typename&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt; = &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;delete&lt;/span&gt;;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
编译器会选择重载的版本，或者抛出一个恰当的错误。
&lt;/p&gt;


&lt;p&gt;
注意
&lt;/p&gt;

&lt;p&gt;
互补限制条件在用到 &lt;code&gt;enable_if&lt;/code&gt; 的代码里很常见。
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;template&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;typename&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;enable_if&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;lt;&lt;/span&gt;!&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;C&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;&amp;gt;&lt;/span&gt;, &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;void&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;gt;&lt;/span&gt;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;bad&lt;/span&gt;
&lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;template&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;typename&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;enable_if&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;C&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;&amp;gt;&lt;/span&gt;, &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;void&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
注意
&lt;/p&gt;

&lt;p&gt;
针对某个单一的要求，大家似乎认为互补要求是可以管理好的。其实，对于 2
个以上的需求，需要的定义数量指数级增长。
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;C1&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;lt;&lt;/span&gt;T&lt;span style=&quot;color: #707183;&quot;&gt;&amp;gt;&lt;/span&gt; &amp;amp;&amp;amp; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;C2&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;T&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;gt;&lt;/span&gt;
!&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;C1&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;lt;&lt;/span&gt;T&lt;span style=&quot;color: #707183;&quot;&gt;&amp;gt;&lt;/span&gt; &amp;amp;&amp;amp; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;C2&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;lt;&lt;/span&gt;T&lt;span style=&quot;color: #707183;&quot;&gt;&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;C1&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;lt;&lt;/span&gt;T&lt;span style=&quot;color: #707183;&quot;&gt;&amp;gt;&lt;/span&gt; &amp;amp;&amp;amp; !&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;C2&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;lt;&lt;/span&gt;T&lt;span style=&quot;color: #707183;&quot;&gt;&amp;gt;&lt;/span&gt;
!&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;C1&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;lt;&lt;/span&gt;T&lt;span style=&quot;color: #707183;&quot;&gt;&amp;gt;&lt;/span&gt; &amp;amp;&amp;amp; !&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;C2&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;lt;&lt;/span&gt;T&lt;span style=&quot;color: #707183;&quot;&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
这样，出错的概率也不断增长。
&lt;/p&gt;


&lt;p&gt;
强化
&lt;/p&gt;

&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;标记函数中出现互补对的限制条件的情况 &lt;code&gt;C&amp;lt;T&amp;gt;&lt;/code&gt; 与 &lt;code&gt;C&amp;lt;T&amp;gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines T.24 通过 tag 标签类或 traits 区分语义不同的概念</title>
   <link href="http://kimi.im/2023-09-05-cppcoreguidelines-t24"/>
   <updated>2023-09-05T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-t24</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;Use tag classes or traits to differentiate concepts that differ only in semantics.&amp;rdquo;
&lt;/p&gt;

&lt;p&gt;
理由
&lt;/p&gt;

&lt;p&gt;
如果两个割爱年语法一样，但是语义不同，会导致混淆不清。除非程序员把他们区分开来。
&lt;/p&gt;


&lt;p&gt;
例子
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;template&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;typename&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;I&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;gt;&lt;/span&gt;    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;iterator providing random access&lt;/span&gt;
&lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;Note: random_access_iterator is defined in &amp;lt;iterator&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;concept&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;RA_iter&lt;/span&gt; = ...;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;template&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;typename&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;I&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;gt;&lt;/span&gt;    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;iterator providing random access to contiguous data&lt;/span&gt;
&lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;Note: contiguous_iterator is defined in &amp;lt;iterator&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;concept&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Contiguous_iter&lt;/span&gt; =
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;RA_iter&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;I&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;gt;&lt;/span&gt; &amp;amp;&amp;amp; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;is_contiguous_v&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;I&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;gt;&lt;/span&gt;;  &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;using is_contiguous trait&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
程序库的开发程序员必须定义 &lt;code&gt;is_contiguous_v&lt;/code&gt;
&lt;/p&gt;

&lt;p&gt;
把标签类封装进概念，可以简化表达式：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;template&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;typename&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;I&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;concept&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Contiguous&lt;/span&gt; = &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;is_contiguous_v&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;I&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;gt;&lt;/span&gt;;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;template&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;typename&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;I&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;concept&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Contiguous_iter&lt;/span&gt; = &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;RA_iter&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;I&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;gt;&lt;/span&gt; &amp;amp;&amp;amp; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Contiguous&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;I&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;gt;&lt;/span&gt;;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
注意
&lt;/p&gt;

&lt;p&gt;
Traits 可以是类或类型 &lt;code&gt;traits&lt;/code&gt; 。可以是用户定义的，也可以是标准库里的。尽量使用标准库里的。
&lt;/p&gt;


&lt;p&gt;
强化
&lt;/p&gt;

&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;编译器会标记混淆使用的等价的概念&lt;/li&gt;
&lt;li&gt;标记等价定义的概念&lt;/li&gt;
&lt;/ul&gt;
</content>
 </entry>
 
 <entry>
   <title>单词本：ageism</title>
   <link href="http://kimi.im/2023-09-05-ageism"/>
   <updated>2023-09-05T00:00:00+00:00</updated>
   <id>http://kimi.im/ageism</id>
   <content type="html">&lt;p&gt;
今年过去大半，才知道，联合国拟定的今年的主题是反对 ageism。何谓 ageism？就是年龄歧视 discrimination against middled-aged and elderly people。
&lt;/p&gt;

&lt;p&gt;
年龄歧视是全球各个国家都面临的一个很大的问题。根据联合国的统计，世界上每两个人当中，就有一个人是有年龄歧视的态度。年龄歧视严重影响了老年人的精神身体健康和生活质量。也导致了全球每年几十亿的损失。
&lt;/p&gt;

&lt;p&gt;
那么，在职场来说，主要是对老年人的年龄歧视。比如招聘的时候，设定年龄门槛，超过 35 岁就不招聘。当然，也有对年轻人的一些歧视。比如，有些组织不聆听年轻人的声音，忽视年轻人的要求。
&lt;/p&gt;

&lt;p&gt;
根据澳大利亚的估计，如果增加 5% 55 岁以上人员的就业，可以为他们带来480
亿的GDP。
&lt;/p&gt;

&lt;p&gt;
ageism 这个词是美国的老年病医生 Robert N. Butler 在 1969 年发明的。其他类似的歧视还有 racism 种族歧视，sexism 性别歧视。都是我们要避免的
-ism。
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines T.23 通过添加新的使用模式扩展通用的概念</title>
   <link href="http://kimi.im/2023-09-04-cppcoreguidelines-t23"/>
   <updated>2023-09-04T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-t23</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;Differentiate a refined concept from its more general case by adding
new use patterns.&amp;rdquo;
&lt;/p&gt;

&lt;p&gt;
理由
&lt;/p&gt;

&lt;p&gt;
不然的话，编译器无法自动区分。
&lt;/p&gt;


&lt;p&gt;
例子
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;template&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;typename&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;I&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;Note: input_iterator is defined in &amp;lt;iterator&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;concept&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Input_iter&lt;/span&gt; = &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;requires&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;I&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;iter&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt; ++iter; &lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;template&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;typename&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;I&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;Note: forward_iterator is defined in &amp;lt;iterator&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;concept&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Fwd_iter&lt;/span&gt; = &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Input_iter&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;I&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;gt;&lt;/span&gt; &amp;amp;&amp;amp; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;requires&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;I&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;iter&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt; iter++; &lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
编译器编译器可以根据新的操作符要求确定概念的细化定义。这样可以减少实现这些类型的人的额外工作，去声明新的类型。如果两个概念的要求是一样的，那么他们在逻辑上是等价的（并非细化）。
&lt;/p&gt;


&lt;p&gt;
强化
&lt;/p&gt;

&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;标记两个完全相同规定的概念。从而消除歧义。&lt;/li&gt;
&lt;/ul&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines T.22 为概念规定自明之公理</title>
   <link href="http://kimi.im/2023-09-03-cppcoreguidelines-t22"/>
   <updated>2023-09-03T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-t22</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;Specify axioms for concept&amp;rdquo;
&lt;/p&gt;

&lt;p&gt;
理由
&lt;/p&gt;

&lt;p&gt;
一个有意义的概念定义了语义信息。通过非正式的、半形式化的、或形式化的方式定义概念，可以让用户更好理解。并且这种表达方式可以捕捉概念上的错误。语义定义是很强大的设计工具。
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;template&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;typename&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;gt;&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;The operators +, -, *, and / for a number are assumed to follow&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;the usual mathematical rules&lt;/span&gt;

    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;axiom(T a, T b) { a + b == b + a; a - a == 0; a * (b + c) == a * b + a * c; /*...*/ }&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;concept&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Number&lt;/span&gt; = &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;requires&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;a&lt;/span&gt;, &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;b&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
        &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;a + b&lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt; -&amp;gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;convertible_to&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;&amp;gt;&lt;/span&gt;;
        &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;a - b&lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt; -&amp;gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;convertible_to&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;&amp;gt;&lt;/span&gt;;
        &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;a * b&lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt; -&amp;gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;convertible_to&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;&amp;gt;&lt;/span&gt;;
        &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;a / b&lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt; -&amp;gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;convertible_to&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;&amp;gt;&lt;/span&gt;;
    &lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
注意
&lt;/p&gt;

&lt;p&gt;
这个类似数学上的公理：某种不证自明的东西。一般来说，公理都是不可证明的。对公理的证明，往往超出了编译器的能力范围。一个公理可能并不是通用的，但是模板开发者可以假定所有的输入都是符合要求的（类似于前置条件
precondition）。
&lt;/p&gt;


&lt;p&gt;
注意
&lt;/p&gt;

&lt;p&gt;
在这里，我们说的公理是指真假布尔表达式。目前， C++ 不支持公理。所以，在很长一段时间内，你需要用到注释。一旦语言支持完成，公理前面的 &lt;code&gt;//&lt;/code&gt; 就可以移除了。
&lt;/p&gt;


&lt;p&gt;
注意
&lt;/p&gt;

&lt;p&gt;
GAL  的中的概念，具有很好的语义定义。
&lt;/p&gt;


&lt;p&gt;
例外
&lt;/p&gt;

&lt;p&gt;
早期版本的 “concept” 还处在开发中，只是定义了一些简单的限制条件。可能需要化不少精力和时间找到好的语义定义。不完全的限制条件也还是有点用的：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;balancer for a generic binary tree&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;template&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;typename&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Node&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;concept&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Balancer&lt;/span&gt; = &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;requires&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Node&lt;/span&gt;* &lt;span style=&quot;color: #000000;&quot;&gt;p&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    add_fixup&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;p&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
    touch&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;p&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
    detach&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;p&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
所以，这里 &lt;code&gt;Balancer&lt;/code&gt; 至少要提供针对树的 &lt;code&gt;Node&lt;/code&gt; 的一些操作。但是，我们还无法规定详细的语义细节。因为这里的平衡树可能要求其他的一些操作，我们无法在设计初期规定出来。
&lt;/p&gt;

&lt;p&gt;
一个“concept”不完备，或者没有规定好详细语义，也还是有些用的。比如说，可以在实验初期提供一些检查。不过，这个时候不能假定这些规定已经稳定了。每一次新的使用，可能会要求一些新的改进。
&lt;/p&gt;


&lt;p&gt;
强化
&lt;/p&gt;

&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;检查概念定义的注释中的 axiom 关键字&lt;/li&gt;
&lt;/ul&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines T.21  在概念中规定一组操作操作符号</title>
   <link href="http://kimi.im/2023-09-02-cppcoreguidelines-t21"/>
   <updated>2023-09-02T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-t21</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;Require a complete set of operations for a concept&amp;rdquo;
&lt;/p&gt;

&lt;p&gt;
理由
&lt;/p&gt;

&lt;p&gt;
更容易理解。提升互操作性。给实现人员和维护人员更多帮助信息。
&lt;/p&gt;


&lt;p&gt;
注意
&lt;/p&gt;

&lt;p&gt;
这条是通用规则“概念必须提供语义信息”的特定变体。
&lt;/p&gt;


&lt;p&gt;
坏例子
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;template&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;typename&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;concept&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Subtractable&lt;/span&gt; = &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;requires&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;a&lt;/span&gt;, &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;b&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt; a-b; &lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
这样其实没有语义信息。你需要至少定义 &lt;code&gt;+&lt;/code&gt; 和 &lt;code&gt;-&lt;/code&gt; 操作。
&lt;/p&gt;

&lt;p&gt;
定义完全的例子：
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;算术操作： &lt;code&gt;+&lt;/code&gt; ， &lt;code&gt;-&lt;/code&gt; ， &lt;code&gt;*&lt;/code&gt; ， &lt;code&gt;/&lt;/code&gt; ， &lt;code&gt;+=&lt;/code&gt; ， &lt;code&gt;-=&lt;/code&gt; ， &lt;code&gt;*=&lt;/code&gt; ， &lt;code&gt;/=&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;比较操作： &lt;code&gt;&amp;lt;&lt;/code&gt; ， &lt;code&gt;&amp;lt;=&lt;/code&gt; , &lt;code&gt;&amp;gt;=&lt;/code&gt; ， &lt;code&gt;==&lt;/code&gt; ， &lt;code&gt;!=&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;
注意
&lt;/p&gt;

&lt;p&gt;
此规则在没有 concept 语言支持的情况下，也适用。此规则是一般化的设计规则，对非模板也适用。
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Minimal&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;...&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;

&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;bool&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;operator&lt;/span&gt;&lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;==&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Minimal&lt;/span&gt;&amp;amp;, &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Minimal&lt;/span&gt;&amp;amp;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;
&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;bool&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;operator&lt;/span&gt;&lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Minimal&lt;/span&gt;&amp;amp;, &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Minimal&lt;/span&gt;&amp;amp;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;

&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Minimal&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;operator&lt;/span&gt;&lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Minimal&lt;/span&gt;&amp;amp;, &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Minimal&lt;/span&gt;&amp;amp;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;
&lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;no other operators&lt;/span&gt;

&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Minimal&lt;/span&gt;&amp;amp; &lt;span style=&quot;color: #000000;&quot;&gt;x&lt;/span&gt;, &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Minimal&lt;/span&gt;&amp;amp; &lt;span style=&quot;color: #000000;&quot;&gt;y&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;!&lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;x == y&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;/* &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;...&lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt; */&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;OK&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;x != y&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;/* &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;...&lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt; */&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;       &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;surprise! error&lt;/span&gt;

    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;while&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;!&lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;x &amp;lt; y&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;/* &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;...&lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt; */&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;  &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;OK&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;while&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;x &amp;gt;= y&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;/* &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;...&lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt; */&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;surprise! error&lt;/span&gt;

    x = x + y;          &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;OK&lt;/span&gt;
    x += y;             &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;surprise! error&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
这个例子限制了用户，用户会很吃惊。效率也很不好。
&lt;/p&gt;

&lt;p&gt;
这条规则的意思其实是说我们定义一个概念的时候，应该从数学角度映射一组一致的操作。
&lt;/p&gt;


&lt;p&gt;
例子
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Convenient&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;...&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;

&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;bool&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;operator&lt;/span&gt;&lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;==&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Convenient&lt;/span&gt;&amp;amp;, &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Convenient&lt;/span&gt;&amp;amp;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;
&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;bool&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;operator&lt;/span&gt;&lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Convenient&lt;/span&gt;&amp;amp;, &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Convenient&lt;/span&gt;&amp;amp;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;
&lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;... and the other comparison operators ...&lt;/span&gt;

&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Convenient&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;operator&lt;/span&gt;&lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Convenient&lt;/span&gt;&amp;amp;, &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Convenient&lt;/span&gt;&amp;amp;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;
&lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;... and the other arithmetic operators ...&lt;/span&gt;

&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Convenient&lt;/span&gt;&amp;amp; &lt;span style=&quot;color: #000000;&quot;&gt;x&lt;/span&gt;, &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Convenient&lt;/span&gt;&amp;amp; &lt;span style=&quot;color: #000000;&quot;&gt;y&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;!&lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;x == y&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;/* &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;...&lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt; */&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;OK&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;x != y&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;/* &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;...&lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt; */&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;       &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;OK&lt;/span&gt;

    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;while&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;!&lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;x &amp;lt; y&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;/* &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;...&lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt; */&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;  &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;OK&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;while&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;x &amp;gt;= y&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;/* &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;...&lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt; */&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;OK&lt;/span&gt;

    x = x + y;     &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;OK&lt;/span&gt;
    x += y;        &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;OK&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
要提供全部的操作符似乎是很繁琐，但是并不困难。理想的情况下，开发语言应当支持此规则，默认提供比较操作给你。
&lt;/p&gt;


&lt;p&gt;
强化
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;标记哪些提供一部分操作符子集的类，比如，提供了 &lt;code&gt;==&lt;/code&gt; 但是没有 &lt;code&gt;!=&lt;/code&gt; 或提供了 &lt;code&gt;+&lt;/code&gt; 但是不提供 &lt;code&gt;-&lt;/code&gt; 。是的， &lt;code&gt;std::string&lt;/code&gt; 只提供了部分操作符，但是现在修改的话太晚了。&lt;/li&gt;
&lt;/ul&gt;
</content>
 </entry>
 
 <entry>
   <title>单词本：lip service</title>
   <link href="http://kimi.im/2023-09-02-lip-service"/>
   <updated>2023-09-02T00:00:00+00:00</updated>
   <id>http://kimi.im/lip-service</id>
   <content type="html">&lt;p&gt;
讨论可持续发展的一本书 &amp;ldquo;Work to Restore&amp;rdquo; 中写道：
&lt;/p&gt;

&lt;p&gt;
Business has the power to affect the enormous challenges facing
humanity, including social justice, climate change, water shortages
and famine. But it will take more than &lt;b&gt;lip service&lt;/b&gt; made up of mission
statements and inspirational quotes.
&lt;/p&gt;

&lt;p&gt;
商业对我们面临的人道主义挑战有很大的影响力，这些挑战包括：社会公平、气候变化、水资源短缺以及饥饿问题等。但是，我们所要做的可不是一些使命陈述或激励人心的名言警句之类的风凉话。
&lt;/p&gt;

&lt;p&gt;
大家看到，这里有个词组 lip service，字面意思是“嘴唇服务”，看起来真是丈二和尚摸不到头脑。其实，在英语中，lip service 指的就是动动嘴皮子，说说风凉话，光说不做，画饼充饥之类的意思。
&lt;/p&gt;

&lt;p&gt;
比如 The UN through its assistance to some of the smallest countries, is
again showing that its commitment to Leaving No One Behind (LNOB) is
much more than &lt;b&gt;lip service&lt;/b&gt;.
&lt;/p&gt;

&lt;p&gt;
lip service 一般会搭配一个动词 to pay &lt;b&gt;lip service&lt;/b&gt; to something，比如说：
&lt;/p&gt;

&lt;p&gt;
She claims to be in favour of training, but so far she&amp;rsquo;s only &lt;b&gt;paid lip
service&lt;/b&gt; to the idea.
&lt;/p&gt;

&lt;p&gt;
It is all too easy to &lt;b&gt;pay lip service&lt;/b&gt; to human rights. 
&lt;/p&gt;

&lt;p&gt;
德语里，嘴唇是 die Lippe，所以他们管 lip service 叫 Lippenbekenntnis，
Bekenntnisse 是自白，表白，表明信仰的声明的意思。那么 pay &lt;b&gt;lip service&lt;/b&gt;
to something，就表达为 ein &lt;b&gt;Lippenbekenntnis&lt;/b&gt; zu etw. ablegen。
&lt;/p&gt;

&lt;p&gt;
另外，嘴唇是用来讲话的，所以 &lt;b&gt;None of your lip&lt;/b&gt; 就是闭嘴，别插话的意思。
&lt;/p&gt;

&lt;p&gt;
哦，对了，还有 read my lips，是“听好了”的意思。因为最说话的时候，嘴唇会动么，让别人看着你的嘴唇，就是让别人注意听好了你说的话。当然，这里可能有些不太礼貌比较唐突，命令别人的感觉。
&lt;/p&gt;

&lt;p&gt;
比如：forget about him, &lt;b&gt;read my lips&lt;/b&gt;, he wasn&amp;rsquo;t worth it.
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines T.20 避免添加无意义的 concept</title>
   <link href="http://kimi.im/2023-09-01-cppcoreguidelines-t20"/>
   <updated>2023-09-01T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-t20</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;Avoid “concepts” without meaningful semantics&amp;rdquo;
&lt;/p&gt;


&lt;p&gt;
理由
&lt;/p&gt;

&lt;p&gt;
concept 是用来表达某个语义的标记，比如某个数字，某些元素的范围，或者能完全排序。简单的约束，比如有一个 + 操作符，有一个 &amp;gt; 操作符，等等，不一定能孤立地用来表达某个特定的意义。而应该是用来建立某个有意义的 concept。
&lt;/p&gt;


&lt;p&gt;
坏例子
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;template&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;typename&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;bad; insufficient&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;concept&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Addable&lt;/span&gt; = &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;requires&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;a&lt;/span&gt;, &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;b&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt; a+b; &lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;template&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Addable&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;N&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;auto&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;algo&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;N&lt;/span&gt;&amp;amp; &lt;span style=&quot;color: #000000;&quot;&gt;a&lt;/span&gt;, &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;N&lt;/span&gt;&amp;amp; &lt;span style=&quot;color: #000000;&quot;&gt;b&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;use two numbers&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;...&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; a + b;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;

&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;x&lt;/span&gt; = 7;
&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;y&lt;/span&gt; = 9;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;auto&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;z&lt;/span&gt; = algo&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;x, y&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;z = 16&lt;/span&gt;

&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;string&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;xx&lt;/span&gt; = &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;7&quot;&lt;/span&gt;;
&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;string&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;yy&lt;/span&gt; = &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;9&quot;&lt;/span&gt;;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;auto&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;zz&lt;/span&gt; = algo&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;xx, yy&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;zz = &quot;79&quot;&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
这里可能可以对参数进行拼接。很可能会出错。定义对应的减号操作会给出完全不一样的可接受的类型参数。这个 &lt;code&gt;Addable&lt;/code&gt; 违反了数学规则中加法可交换法则：
&lt;code&gt;a+b == b+a&lt;/code&gt; 。
&lt;/p&gt;

&lt;p&gt;
注意
&lt;/p&gt;

&lt;p&gt;
一个正确的概念应该能够规定有意义的语义特性，而不是语法限制。
&lt;/p&gt;

&lt;p&gt;
例子
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;template&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;typename&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;The operators +, -, *, and / for a number are assumed to follow the usual mathematical rules&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;concept&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Number&lt;/span&gt; = &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;requires&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;a&lt;/span&gt;, &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;b&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt; a+b; a-b; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;a&lt;/span&gt;*&lt;span style=&quot;color: #000000;&quot;&gt;b&lt;/span&gt;; a/b; &lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;template&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Number&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;N&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;auto&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;algo&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;N&lt;/span&gt;&amp;amp; &lt;span style=&quot;color: #000000;&quot;&gt;a&lt;/span&gt;, &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;N&lt;/span&gt;&amp;amp; &lt;span style=&quot;color: #000000;&quot;&gt;b&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;...&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; a + b;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;

&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;x&lt;/span&gt; = 7;
&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;y&lt;/span&gt; = 9;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;auto&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;z&lt;/span&gt; = algo&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;x, y&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;z = 16&lt;/span&gt;

&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;string&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;xx&lt;/span&gt; = &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;7&quot;&lt;/span&gt;;
&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;string&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;yy&lt;/span&gt; = &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;9&quot;&lt;/span&gt;;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;auto&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;zz&lt;/span&gt; = algo&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;xx, yy&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;error: string is not a Number&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
注意
&lt;/p&gt;

&lt;p&gt;
在概念中，规定多个操作可以减少某个单独操作造成的类型多重匹配的情况。
&lt;/p&gt;


&lt;p&gt;
强化
&lt;/p&gt;

&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;标记在其他概念之外定义某个单独运算符操作的概念&lt;/li&gt;
&lt;li&gt;标记使用 &lt;code&gt;enable_if&lt;/code&gt; 模拟单独运算符操作的概念&lt;/li&gt;
&lt;/ul&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines T.13 对于简单单类型模板，建议使用简短格式</title>
   <link href="http://kimi.im/2023-08-31-cppcoreguidelines-t13"/>
   <updated>2023-08-31T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-t13</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;Prefer the shorthand notation for simple, single-type argument
concepts&amp;rdquo;
&lt;/p&gt;

&lt;p&gt;
理由
&lt;/p&gt;

&lt;p&gt;
可读性更好。直接表达想法。
&lt;/p&gt;


&lt;p&gt;
例子
&lt;/p&gt;

&lt;p&gt;
这里想表达的是 &lt;code&gt;T&lt;/code&gt; 是可排序的。
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;template&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;typename&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;gt;&lt;/span&gt;       &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;Correct but verbose: &quot;The parameter is&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;requires&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;sortable&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;gt;&lt;/span&gt;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;of type T which is the name of a type&lt;/span&gt;
&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;sort&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt;&amp;amp;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;             &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;that is sortable&quot;&lt;/span&gt;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;template&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;sortable&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;gt;&lt;/span&gt;       &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;Better: &quot;The parameter is of type T&lt;/span&gt;
&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;sort&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt;&amp;amp;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;             &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;which is Sortable&quot;&lt;/span&gt;

&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;sort&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;sortable&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;auto&lt;/span&gt;&amp;amp;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;Best: &quot;The parameter is Sortable&quot;&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
这个简短格式很符合我们所要表达的意思。注意，很多模板不需要用到
&lt;code&gt;template&lt;/code&gt; 关键字。
&lt;/p&gt;

&lt;p&gt;
强化
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;对于首先引入一个 &lt;code&gt;typename&lt;/code&gt; 然后用一个简单的、单类型的 &lt;code&gt;concept&lt;/code&gt; 进行限制的情况，标记之。&lt;/li&gt;
&lt;/ul&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines T.12 最好用 concept，不要用 auto 或局部变量</title>
   <link href="http://kimi.im/2023-08-31-cppcoreguidelines-t12"/>
   <updated>2023-08-31T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-t12</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;Prefer concept names over &lt;code&gt;auto&lt;/code&gt; for local variables&amp;rdquo;
&lt;/p&gt;

&lt;p&gt;
理由
&lt;/p&gt;

&lt;p&gt;
&lt;code&gt;auto&lt;/code&gt; 是最弱的 &lt;code&gt;concept&lt;/code&gt; 。 &lt;code&gt;concept&lt;/code&gt; 比 &lt;code&gt;auto&lt;/code&gt; 传递的信息更多。
&lt;/p&gt;

&lt;p&gt;
例子
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;vector&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;string&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;v&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;abc&quot;&lt;/span&gt;, &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;xyz&quot;&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;auto&lt;/span&gt;&amp;amp; &lt;span style=&quot;color: #000000;&quot;&gt;x&lt;/span&gt; = v.front&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;;        &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;bad&lt;/span&gt;
&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;String&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;auto&lt;/span&gt;&amp;amp; &lt;span style=&quot;color: #000000;&quot;&gt;s&lt;/span&gt; = v.front&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;good (String is a GSL concept)&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
这里 &lt;code&gt;String&lt;/code&gt; 是 GSL 中定义的 &lt;code&gt;concept&lt;/code&gt; 。当 &lt;code&gt;String&lt;/code&gt; 和 &lt;code&gt;auto&lt;/code&gt; 一起用的时候，这个 &lt;code&gt;String&lt;/code&gt; 就被当作 &lt;code&gt;concept&lt;/code&gt; 使用了。这里，其实 &lt;code&gt;String&lt;/code&gt; 这个 &lt;code&gt;concept&lt;/code&gt; 是用来约束 &lt;code&gt;auto&lt;/code&gt; 的，不然， &lt;code&gt;auto&lt;/code&gt; 就太自由了。
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines T.11 尽量使用标准的 concept</title>
   <link href="http://kimi.im/2023-08-30-cppcoreguidelines-t11"/>
   <updated>2023-08-30T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-t11</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;Whenever possible use standard concepts&amp;rdquo;
&lt;/p&gt;

&lt;p&gt;
理由
&lt;/p&gt;

&lt;p&gt;
GSL 和 ISO 标准提供的标准 concept 可以帮我们节省时间，避免自己去考虑细节。这些标准的 concept 往往比我们自己仓促中想出的 concept 更加周全，从而提互操作性。
&lt;/p&gt;


&lt;p&gt;
注意
&lt;/p&gt;

&lt;p&gt;
大部分的 &lt;code&gt;concept&lt;/code&gt; 都已经在标准库中定义了，除非是你要创建新的泛型库，你需要定义新的 &lt;code&gt;concept&lt;/code&gt; 。
&lt;/p&gt;


&lt;p&gt;
例子
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;template&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;typename&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;gt;&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;don&apos;t define this: sortable is in &amp;lt;iterator&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;concept&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Ordered_container&lt;/span&gt; = &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Sequence&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;gt;&lt;/span&gt; &amp;amp;&amp;amp; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Random_access&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Iterator&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;gt;&lt;/span&gt; &amp;amp;&amp;amp; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Ordered&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Value_type&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;gt;&lt;/span&gt;;

&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;sort&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Ordered_container&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;auto&lt;/span&gt;&amp;amp; &lt;span style=&quot;color: #000000;&quot;&gt;s&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
这里 &lt;code&gt;Ordered_container&lt;/code&gt; 似乎是挺合理的，但是跟标准库中的 &lt;code&gt;sortable&lt;/code&gt; 很相似。这个更好？更正确？是不是跟标准中对 &lt;code&gt;sort&lt;/code&gt; 的要求一致？那么，是不是最好直接用 &lt;code&gt;sortable&lt;/code&gt; ？
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;sort&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;sortable&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;auto&lt;/span&gt;&amp;amp; &lt;span style=&quot;color: #000000;&quot;&gt;s&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;better&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;
注意
&lt;/p&gt;

&lt;p&gt;
标准的 &lt;code&gt;concept&lt;/code&gt; 会随着 ISO 标准的开发不断完善。
&lt;/p&gt;


&lt;p&gt;
注意
&lt;/p&gt;

&lt;p&gt;
设计一个有用的 &lt;code&gt;concept&lt;/code&gt; 是很大的挑战。
&lt;/p&gt;


&lt;p&gt;
强化
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;检查没有限制的参数，用到不太常见的非标准的 &lt;code&gt;concept&lt;/code&gt; 的模板，用到没有证明的自己撸的 &lt;code&gt;concept&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;开发一个 &lt;code&gt;concept&lt;/code&gt; 拓展工具&lt;/li&gt;
&lt;/ul&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines T.10 对每个模板参数指定 concept</title>
   <link href="http://kimi.im/2023-08-29-cppcoreguidelines-t10"/>
   <updated>2023-08-29T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-t10</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;Specify concepts for all template arguments&amp;rdquo;
&lt;/p&gt;

&lt;p&gt;
理由
&lt;/p&gt;

&lt;p&gt;
更好的正确性和可读性。模板参数准确的语法和语义定义是模板接口的基础。概念（Concept）可以动态提升模板的意义，改进模板的错误处理。给模板参数指定概念是很强大的设计工具。
&lt;/p&gt;


&lt;p&gt;
例子
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;template&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;typename&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Iter&lt;/span&gt;, &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;typename&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Val&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;gt;&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;requires&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;input_iterator&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Iter&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;gt;&lt;/span&gt;
             &amp;amp;&amp;amp; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;equality_comparable_with&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;iter_value_t&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Iter&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;&amp;gt;&lt;/span&gt;, &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Val&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Iter&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;find&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Iter&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;b&lt;/span&gt;, &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Iter&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;e&lt;/span&gt;, &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Val&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;v&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;...&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
或者等价的，更严格的方式：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;template&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;input_iterator&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;Iter&lt;/span&gt;, &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;typename&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Val&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;gt;&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;requires&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;equality_comparable_with&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;iter_value_t&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;&amp;lt;&lt;/span&gt;Iter&lt;span style=&quot;color: #7388d6;&quot;&gt;&amp;gt;&lt;/span&gt;, &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Val&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Iter&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;find&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Iter&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;b&lt;/span&gt;, &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Iter&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;e&lt;/span&gt;, &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Val&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;v&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;...&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;
注意
&lt;/p&gt;

&lt;p&gt;
普通的 &lt;code&gt;typename&lt;/code&gt; 或 &lt;code&gt;auto&lt;/code&gt; 是限制最少的概念。只有在限制最少的情况下使用，标识这仅仅是一个类型。只有在我们纯粹的表达某种表达式树、延迟类型检查的时候才会用到。
&lt;/p&gt;

&lt;p&gt;
参考：TC++PL4
&lt;/p&gt;

&lt;p&gt;
强化
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;标记没有添加 concept 的模板类型。&lt;/li&gt;
&lt;/ul&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines T.5 根据各自的优势组合泛型和 OO 技术</title>
   <link href="http://kimi.im/2023-08-28-cppcoreguidelines-t5"/>
   <updated>2023-08-28T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-t5</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;Combine generic and OO techniques to amplify their strengths, not their costs&amp;rdquo;
&lt;/p&gt;

&lt;p&gt;
理由
&lt;/p&gt;

&lt;p&gt;
泛型和 OO 面向对象技术是互补的。
&lt;/p&gt;


&lt;p&gt;
例子
&lt;/p&gt;

&lt;p&gt;
静态可以辅助动态：用静态多态实现动态多态接口。
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Command&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;pure virtual functions&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;

&lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;implementations&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;template&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;/*&lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;...&lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;*/&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;ConcreteCommand&lt;/span&gt; : &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Command&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;implement virtuals&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;
&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;
例子
&lt;/p&gt;

&lt;p&gt;
静态可以辅助动态：提供更泛型、更舒适、更静态绑定的接口的同时，内部又可以做到动态分配。于是，你就可以提供一个统一的对象布局。比如，
&lt;code&gt;std::shared_ptr&lt;/code&gt; 的删除操作就可以抹掉类型信息。不过最好不要用到太多抹除类型信息的操作。
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;#include&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #2A00FF;&quot;&gt;memory&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;gt;&lt;/span&gt;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Object&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;public&lt;/span&gt;:
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;template&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;typename&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;&amp;gt;&lt;/span&gt;
    &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;Object&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt;&amp;amp;&amp;amp; &lt;span style=&quot;color: #000000;&quot;&gt;obj&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;
        : concept_&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;std&lt;/span&gt;::make_shared&lt;span style=&quot;color: #909183;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;ConcreteCommand&lt;/span&gt;&lt;span style=&quot;color: #709870;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt;&lt;span style=&quot;color: #709870;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;&amp;gt;(&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;std&lt;/span&gt;::forward&lt;span style=&quot;color: #709870;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt;&lt;span style=&quot;color: #709870;&quot;&gt;&amp;gt;(&lt;/span&gt;obj&lt;span style=&quot;color: #709870;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;  &lt;span style=&quot;color: #7388d6;&quot;&gt;{}&lt;/span&gt;

    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;get_id&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; concept_-&amp;gt;get_id&lt;span style=&quot;color: #909183;&quot;&gt;()&lt;/span&gt;; &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;private&lt;/span&gt;:
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;struct&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Command&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;
        &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;virtual&lt;/span&gt; ~&lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;Command&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: #909183;&quot;&gt;{}&lt;/span&gt;
        &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;virtual&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;get_id&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; = 0;
    &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;;

    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;template&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;typename&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;&amp;gt;&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;struct&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;ConcreteCommand&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;final&lt;/span&gt; : &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Command&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;
        &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;ConcreteCommand&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt;&amp;amp;&amp;amp; &lt;span style=&quot;color: #000000;&quot;&gt;obj&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;noexcept&lt;/span&gt; : object_&lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;std&lt;/span&gt;::forward&lt;span style=&quot;color: #709870;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt;&lt;span style=&quot;color: #709870;&quot;&gt;&amp;gt;(&lt;/span&gt;obj&lt;span style=&quot;color: #709870;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #909183;&quot;&gt;{}&lt;/span&gt;
        &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;get_id&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;final&lt;/span&gt; &lt;span style=&quot;color: #909183;&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; object_.get_id&lt;span style=&quot;color: #709870;&quot;&gt;()&lt;/span&gt;; &lt;span style=&quot;color: #909183;&quot;&gt;}&lt;/span&gt;

    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;private&lt;/span&gt;:
        &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;object_&lt;/span&gt;;
    &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;;

    &lt;span style=&quot;color: #110099;&quot;&gt;std&lt;/span&gt;::&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;shared_ptr&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Command&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;concept_&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Bar&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;public&lt;/span&gt;:
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;get_id&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; 1; &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;struct&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Foo&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;public&lt;/span&gt;:
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;get_id&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; 2; &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;

&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Object&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;o&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;Bar&lt;span style=&quot;color: #7388d6;&quot;&gt;{}&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;
&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Object&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;o2&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;Foo&lt;span style=&quot;color: #7388d6;&quot;&gt;{}&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
注意
&lt;/p&gt;

&lt;p&gt;
在类模板中， &lt;code&gt;non-virtual&lt;/code&gt; 函数只会在使用的时候实例化，而 &lt;code&gt;virtual&lt;/code&gt; 函数则每次都会实例化。这个特性会因为过度限制泛型类型，从而实例化了很多从来用不到的函数，于是导致代码量增大。可能标准库函数的设计中出现这个错误，但是请尽量避免这种情况。
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines T.4 用模板表达语法树操作</title>
   <link href="http://kimi.im/2023-08-27-cppcoreguidelines-t4"/>
   <updated>2023-08-27T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-t4</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;Use templates to express syntax tree manipulation&amp;rdquo;
&lt;/p&gt;

&lt;p&gt;
此条未完待续。
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines T.3 用模板表达容器和值域</title>
   <link href="http://kimi.im/2023-08-26-cppcoreguidelines-t3"/>
   <updated>2023-08-26T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-t3</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;Use templates to express containers and ranges&amp;rdquo;
&lt;/p&gt;

&lt;p&gt;
理由
&lt;/p&gt;

&lt;p&gt;
容器需要指定容器元素类型，从而使得模板参数通用化、可重用、类型安全。并且避免了低效率的、繁琐的临时解决方案。约定俗成的，我们要遵循 STL 的设计方式。
&lt;/p&gt;


&lt;p&gt;
例子
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;template&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;typename&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;gt;&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;requires Regular&amp;lt;T&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Vector&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;...&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt;* &lt;span style=&quot;color: #000000;&quot;&gt;elem&lt;/span&gt;;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;points to sz Ts&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;sz&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;

&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Vector&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;double&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;v&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;10&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;
v&lt;span style=&quot;color: #707183;&quot;&gt;[&lt;/span&gt;7&lt;span style=&quot;color: #707183;&quot;&gt;]&lt;/span&gt; = 9.9;
&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;
错误例子
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Container&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;...&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;void&lt;/span&gt;* &lt;span style=&quot;color: #000000;&quot;&gt;elem&lt;/span&gt;;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;points to size elements of some type&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;sz&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;

&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Container&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;c&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;10, &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;sizeof&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;double&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;double&lt;/span&gt;*&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; c.elem&lt;span style=&quot;color: #707183;&quot;&gt;)[&lt;/span&gt;7&lt;span style=&quot;color: #707183;&quot;&gt;]&lt;/span&gt; = 9.9;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
以上设计没法直接表达程序员的意图。隐藏了程序的结构，从而使得类型系统无法提供建议、优化器无法进行优化。
&lt;/p&gt;

&lt;p&gt;
通过宏定义替换 &lt;code&gt;void*&lt;/code&gt; 只会使得问题更复杂，导致更多的困惑。
&lt;/p&gt;


&lt;p&gt;
例外
&lt;/p&gt;

&lt;p&gt;
如果你需要稳定的 ABI 接口，你可能需要提供一个基础实现，然后基于这个实现，用模板设计类型安全的方案。
&lt;/p&gt;


&lt;p&gt;
强化
&lt;/p&gt;

&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;标记出现 &lt;code&gt;void*&lt;/code&gt; 且把其他底层实现类型强制转换成 &lt;code&gt;void*&lt;/code&gt; 的情况。&lt;/li&gt;
&lt;/ul&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines T.2 用模板表达哪种适用于多种数据类型的算法</title>
   <link href="http://kimi.im/2023-08-25-cppcoreguidelines-t2"/>
   <updated>2023-08-25T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-t2</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;Use templates to express algorithms that apply to many argument
types&amp;rdquo;
&lt;/p&gt;

&lt;p&gt;
理由
&lt;/p&gt;

&lt;p&gt;
通用化。精简代码。互操作。可重用。
&lt;/p&gt;


&lt;p&gt;
例子
&lt;/p&gt;

&lt;p&gt;
这个原则是 STL 的基础。一个简单的 &lt;code&gt;find&lt;/code&gt; 算法，可以适用于多种不同的输入类型。
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;template&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;typename&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Iter&lt;/span&gt;, &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;typename&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Val&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;gt;&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;requires Input_iterator&amp;lt;Iter&amp;gt;&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;//       &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;&amp;amp;&amp;amp; Equality_comparable&amp;lt;Value_type&amp;lt;Iter&amp;gt;, Val&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Iter&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;find&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Iter&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;b&lt;/span&gt;, &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Iter&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;e&lt;/span&gt;, &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Val&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;v&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;...&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;
注意
&lt;/p&gt;

&lt;p&gt;
只有确实需要适配多种参数类型的时候，才使用模板。不要过度抽象。
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines T.1 通过模板提升代码抽象层次</title>
   <link href="http://kimi.im/2023-08-24-cppcoreguidelines-t1"/>
   <updated>2023-08-24T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-t1</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;Use templates to raise the level of abstraction of code&amp;rdquo;
&lt;/p&gt;

&lt;p&gt;
理由
&lt;/p&gt;

&lt;p&gt;
泛化。重用。效率。孤立用户定义类型的一致性。
&lt;/p&gt;


&lt;p&gt;
坏例子
&lt;/p&gt;

&lt;p&gt;
从概念上来看，以下模板的要求是表达错了的。因为我们对类型 &lt;code&gt;T&lt;/code&gt; 的要求不仅仅是低层次的可增加。
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;template&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;typename&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;gt;&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;requires&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Incrementable&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;sum1&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;vector&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;&amp;gt;&lt;/span&gt;&amp;amp; &lt;span style=&quot;color: #000000;&quot;&gt;v&lt;/span&gt;, &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;s&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;for&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;auto&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;x&lt;/span&gt; : v&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; s += x;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; s;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;template&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;typename&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;gt;&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;requires&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Simple_number&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;sum2&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;vector&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;&amp;gt;&lt;/span&gt;&amp;amp; &lt;span style=&quot;color: #000000;&quot;&gt;v&lt;/span&gt;, &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;s&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;for&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;auto&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;x&lt;/span&gt; : v&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; s = s + x;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; s;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
假如， &lt;code&gt;Incrementable&lt;/code&gt; 不支持加号运算 &lt;code&gt;+&lt;/code&gt; ， &lt;code&gt;Simple_number&lt;/code&gt; 不支持 &lt;code&gt;+=&lt;/code&gt; 运算。那么我们就给 &lt;code&gt;sum1&lt;/code&gt; 和 &lt;code&gt;sum2&lt;/code&gt; 增加了过度的限制。于是就失去了进一步泛化的机会：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;template&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;typename&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;gt;&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;requires&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Arithmetic&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;sum&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;vector&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;&amp;gt;&lt;/span&gt;&amp;amp; &lt;span style=&quot;color: #000000;&quot;&gt;v&lt;/span&gt;, &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;s&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;for&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;auto&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;x&lt;/span&gt; : v&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; s += x;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; s;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
假设 &lt;code&gt;Arithmetic&lt;/code&gt; 类型必须实现 &lt;code&gt;+&lt;/code&gt; 和 &lt;code&gt;+=&lt;/code&gt; 操作，我们就限制 &lt;code&gt;sum&lt;/code&gt; 函数的用户提供完整的 &lt;code&gt;Arithmetic&lt;/code&gt; 类型。这个要求不是一个最小要求，但是这个要求给算法的实现者足够的自由度，确保 &lt;code&gt;Arithmetic&lt;/code&gt; 类型可用于多种不同的算法。
&lt;/p&gt;

&lt;p&gt;
另外，我们也可以用 &lt;code&gt;Container&lt;/code&gt; 或 &lt;code&gt;Range&lt;/code&gt; 来替换 &lt;code&gt;vector&lt;/code&gt; ，从而增加模板的一般性和可重用性。
&lt;/p&gt;


&lt;p&gt;
注意
&lt;/p&gt;

&lt;p&gt;
如果我们定义一个模板的时候，只是针对确切的操作和唯一的算法。我们就限制了未来的维护者，使得他们无法进行扩展了。我们应当尽量减少对模板参数的要求。不过也不能绝对化，太少的参数要求可能没太大意义。
&lt;/p&gt;


&lt;p&gt;
注意
&lt;/p&gt;

&lt;p&gt;
模板可以用来表达任何东西。模板是图灵完备的。但是模板的初衷是为了泛型编程。模板主要用为特定语义属性的类型集提供高效的通用化的操作和算法。
&lt;/p&gt;


&lt;p&gt;
强化
&lt;/p&gt;

&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;标记模板参数要求太过简单的情况。比如直接使用某个特定操作，而不是使用概念 Concept。&lt;/li&gt;
&lt;li&gt;不要标记某个太简单定义的概念本身。他们可能是更多其他有用概念的基础。&lt;/li&gt;
&lt;/ul&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines Con.5 用 constexpr 修饰编译时可以计算的变量</title>
   <link href="http://kimi.im/2023-08-23-cppcoreguidelines-con5"/>
   <updated>2023-08-23T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-con5</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;Use &lt;code&gt;constexpr&lt;/code&gt; for values that can be computed at compile time&amp;rdquo;
&lt;/p&gt;

&lt;p&gt;
理由
&lt;/p&gt;

&lt;p&gt;
提升性能。利用编译时检查。确保编译时计算。不会产生竞争条件。
&lt;/p&gt;

&lt;p&gt;
例子
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;double&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;x&lt;/span&gt; = f&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;2&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;            &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;possible run-time evaluation&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;double&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;y&lt;/span&gt; = f&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;2&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;      &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;possible run-time evaluation&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;constexpr&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;double&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;z&lt;/span&gt; = f&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;2&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;  &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;error unless f(2) can be evaluated at&lt;/span&gt;
                            &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;compile time&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
注意
&lt;/p&gt;

&lt;p&gt;
查看 &lt;a href=&quot;./2022-04-07-cppcoreguidelines-f4&quot;&gt;F.4 如果函数可以在编译期计算出结果，可以声明为 constexpr&lt;/a&gt;。
&lt;/p&gt;


&lt;p&gt;
强化
&lt;/p&gt;

&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;标记那些用了 &lt;code&gt;const&lt;/code&gt; 关键字修饰，但实际是通过常量表达式初始化的值。其实可以用 &lt;code&gt;constexpr&lt;/code&gt; 。&lt;/li&gt;
&lt;/ul&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines Con.4 用 const 定义哪些构造之后不会修改值的对象</title>
   <link href="http://kimi.im/2023-08-20-cppcoreguidelines-con4"/>
   <updated>2023-08-20T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-con4</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;Use &lt;code&gt;const&lt;/code&gt; to define objects with values that do not change after
construction&amp;rdquo;
&lt;/p&gt;

&lt;p&gt;
理由
&lt;/p&gt;

&lt;p&gt;
避免对对象的值进行意外值修改。
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;x&lt;/span&gt; = 7;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;y&lt;/span&gt; = 9;

    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;for&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;;;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;
        &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;...&lt;/span&gt;
    &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;...&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
因为 &lt;code&gt;x&lt;/code&gt; 不是一个 &lt;code&gt;const&lt;/code&gt; ，所以我们必须假定它会在循环的某个地方被修改了。
&lt;/p&gt;

&lt;p&gt;
强化
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;标记非 &lt;code&gt;const&lt;/code&gt; 但是又没有修改过的变量。&lt;/li&gt;
&lt;/ul&gt;
</content>
 </entry>
 
 <entry>
   <title>单词本：Geige</title>
   <link href="http://kimi.im/2023-08-20-geige"/>
   <updated>2023-08-20T00:00:00+00:00</updated>
   <id>http://kimi.im/geige</id>
   <content type="html">&lt;p&gt;
今天介绍的，还是在最近看的书，Wolfgang Amadeus Mozart 的爸爸 Leopold
Mozart 写的世界上最早的小提琴系统教材《Gründliche Violinschule》中，学到的几个新词语。
&lt;/p&gt;

&lt;p&gt;
首先是 Geige 这个词。在老莫扎特看来，这个是所有弓弦乐器的总称（Geigeninstrumente）。但是，现在来看，德语里 Geige 的意思就是小提琴了。这种想法在老莫看来是不妥的。英语的话，弓弦乐器的总称是 bowed stringed
instrument。
&lt;/p&gt;

&lt;p&gt;
然后，在 Geigeninstrumente 的大类下，有几种常见的弓弦乐器：
&lt;/p&gt;

&lt;p&gt;
第一种，Sachgeiglein 口袋小提琴，或 Spitzgeiglein 尖形小提琴。可以放进上衣口袋，随时拿出来鼓弄的弓弦乐器。这里 Sache 其实是小东西的意思。
&lt;/p&gt;

&lt;p&gt;
第二种，Brettgeigen 板式提琴。Brett 是德语的架子、搁板、棋盘的意思。
&lt;/p&gt;

&lt;p&gt;
第三种，儿童用的 1/4 或 1/2 小提琴。意大利语里叫作 Violino Piccolo。
&lt;/p&gt;

&lt;p&gt;
第四种，普通小提琴，又叫 Diskantgeigen。当然现在德语里，普通小提琴就叫作 Geige。英语叫 violin。Diskante 是高声部的意思。因为普通小提琴主要能发出高声部的音。
&lt;/p&gt;

&lt;p&gt;
第五种，中音提琴，Altgeigen 德语的字面意思是老提琴。意大利语里则是
Viola di Braccio，Braccio 源自手臂。英语叫 viola。
&lt;/p&gt;

&lt;p&gt;
第六种，大管提琴，Fagotgeige。
&lt;/p&gt;

&lt;p&gt;
第七种，小低音提琴 Bassel 或 Bassete。意大利语则是 Violoncello，德语相应的叫 Violoncell。英语随意大利语，也叫 violoncello。
&lt;/p&gt;

&lt;p&gt;
第八种，倍大提琴 il contra Basso。也叫 Violon。英语叫 double bass。
&lt;/p&gt;

&lt;p&gt;
第九种，低音维奥尔琴，Gamba，因为意大利人把它称为腿上的维奥尔 Viola da
Gamba 而得名。所以德语，也叫 Beingeige。即腿上提琴。das Bein 就是人或动物的腿的意思。
&lt;/p&gt;

&lt;p&gt;
第十种，低音维奥尔琴 Bordon。也叫 Barydon，源自意大利语 Viola di
Bordone。Bordone 是男高音，或者大黄蜂嗡嗡叫的声音。
&lt;/p&gt;

&lt;p&gt;
第十一种，抒情维奥尔琴，Viola d&amp;rsquo;armor。意大利语则叫 viola d&amp;rsquo;amore，法语叫 viole d&amp;rsquo;armour。很显然，amour，amore，armor 都是爱情的意思。
&lt;/p&gt;

&lt;p&gt;
第十二种，英式小维奥尔琴 violet das englische。
&lt;/p&gt;

&lt;p&gt;
最近放在办公室用的罗技 G613 按键出故障了，所以买了一个新的矮轴机械键盘
Keychron K1Pro。相比高轴机械键盘，似乎更适合舒适的打字。这篇文章，就是在我新的 Keychron K1Pro 上打出来的。
&lt;/p&gt;

&lt;p&gt;
我家里原来放的是 IKBC 的茶轴无线机械键盘。相比较而言，这个 Keychron
K1Pro-A3 矮茶轴机械键盘打字的话，用起来还是很轻松愉快的。键程短，打字速度快，且手指不累。
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines Con.3 默认传递指向常量的指针和引用给函数</title>
   <link href="http://kimi.im/2023-08-19-cppcoreguidelines-con3"/>
   <updated>2023-08-19T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-con3</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;By default, pass pointers and references to &lt;code&gt;const&lt;/code&gt; s&amp;rdquo;
&lt;/p&gt;

&lt;p&gt;
理由
&lt;/p&gt;

&lt;p&gt;
避免函数意外的修改了数值。被调用的函数不会修改输入参数的话，更容易对程序进行分析。
&lt;/p&gt;

&lt;p&gt;
例子
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;char&lt;/span&gt;* &lt;span style=&quot;color: #000000;&quot;&gt;p&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;        &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;does f modify *p? (assume it does)&lt;/span&gt;
&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;g&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;char&lt;/span&gt;* &lt;span style=&quot;color: #000000;&quot;&gt;p&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;  &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;g does not modify *p&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
注意
&lt;/p&gt;

&lt;p&gt;
并不是说给函数传递一个指向非 &lt;code&gt;const&lt;/code&gt; 的指针或引用不好。但是只能传递给确实要修改传入对象的函数。
&lt;/p&gt;

&lt;p&gt;
注意
&lt;/p&gt;

&lt;p&gt;
不要把 &lt;code&gt;const&lt;/code&gt; 强制类型转换掉。见 &lt;a href=&quot;./2023-04-25-cppcoreguidelines-es50&quot;&gt;ES.50: Don’t cast away const&lt;/a&gt;。
&lt;/p&gt;

&lt;p&gt;
强化
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;标记传入的参数是指向非 &lt;code&gt;const&lt;/code&gt;  的指针或引用，而函数却又不会修改传入对象。&lt;/li&gt;
&lt;li&gt;标记用强制类型转换把传入的是指向 &lt;code&gt;const&lt;/code&gt; 的指针或引用转换为指向非
&lt;code&gt;const&lt;/code&gt; 的情况。&lt;/li&gt;
&lt;/ul&gt;
</content>
 </entry>
 
 <entry>
   <title>单词本：Lyra</title>
   <link href="http://kimi.im/2023-08-19-lyra"/>
   <updated>2023-08-19T00:00:00+00:00</updated>
   <id>http://kimi.im/lyra</id>
   <content type="html">&lt;p&gt;
最近在看 Leopold Mozart 的《Gründliche Violinschule》。这个莫扎特就是那个更出名的莫扎特的爸爸，他写的《小提琴教学与演奏的基本论则》可以算得上是最早的小提琴教材了。也就是说，他培养出一个音乐家儿子，而他自己本身也算得上是个很不错的音乐家了。
&lt;/p&gt;

&lt;p&gt;
我刚开始看这本书。但是，作为本文的主题，所以我们主要是要学习学习一些新单词。在绪论的第六节中，老莫扎特介绍了弦乐器的起源。说是墨丘利发明了弦乐器。对的，就是那个 &lt;a href=&quot;./2022-12-15-english-mercenary&quot;&gt;Mercŭrĭus&lt;/a&gt;，他是商业、小偷、畜牧、交通、旅游、体育之神，在希腊的名字是爱马仕 Hermès。
&lt;/p&gt;

&lt;p&gt;
话说，古时候，尼罗河洪水泛滥，淹没了整个埃及。大水退去后，墨丘利在洪水退去的草丛里，发现了一个干枯经络的乌龟壳。当他触动这些长短粗细不一的经络时，就听到了高低不同的声音，于是，墨丘利受了启发，发明了一件类似的乐器，就是所谓的古里拉琴（Chelys Lyra，Leyer der Alten），里拉琴据说就是起源于古埃及的。
&lt;/p&gt;

&lt;p&gt;
在拉丁语里 Chelys 就是提琴的意思，而 Chelysta 则是演奏提琴的人。在希腊语里，χελυς 就是乌龟的意思。可以看看 scitechinstitute.org 的介绍：The
&lt;b&gt;Chelys-Lyra&lt;/b&gt; is a lyre consisting of a tortoise-shell sound compartment
with skin stretched over the opening. Two bars with a crossbar
attached extend from the shell and hold the strings. Compared to other
Greek instruments of the time, the Chelys-Lyra was small and light, a
versatile instrument which could be played sitting, standing or
walking. It was played by both men and women, although it is most
often depicted in art being played by a man.
&lt;/p&gt;

&lt;p&gt;
老莫扎特还举了一个论证，琴弦 chord 在拉丁语里是 Chorda，意大利语是
Corda，法语是 la Chorde，其实都是来自希腊语 χορδη，医学上就是内脏或肠子。因为那时候大部分的琴弦都用动物内脏做的，像那个干死的乌龟壳上的经络。
&lt;/p&gt;

&lt;p&gt;
再看看几个词，就知道 chelys 的意思了：
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;chelydroidea 蛇颈龟科，鳄龟科&lt;/li&gt;
&lt;li&gt;chelyocarpus 龟果榈属；龟果棕属&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
至于 Lyra 里拉琴，则引伸出了这些词：
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;Lyric 流行歌曲歌词，就是跟着 Lyra 哼唱的歌&lt;/li&gt;
&lt;li&gt;Lyrebird 澳大利亚一种尾巴像里拉琴的鸟，琴鸟&lt;/li&gt;
&lt;/ul&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines Con.2 请把成员函数默认设置为 const</title>
   <link href="http://kimi.im/2023-08-18-cppcoreguidelines-con2"/>
   <updated>2023-08-18T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-con2</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;By default, make member functions &lt;code&gt;const&lt;/code&gt;&amp;rdquo;
&lt;/p&gt;

&lt;p&gt;
理由
&lt;/p&gt;

&lt;p&gt;
如果成员函数不修改对象的外部可观测属性，我们就应该把成员变量标记为
&lt;code&gt;const&lt;/code&gt; 。这种方式更精确地表达了我们的设计目的，他人更容易理解代码，编译器可以捕捉更多错误，有时候，我们可以更好的对代码进行优化。
&lt;/p&gt;

&lt;p&gt;
错误例子
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Point&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;x&lt;/span&gt;, &lt;span style=&quot;color: #000000;&quot;&gt;y&lt;/span&gt;;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;public&lt;/span&gt;:
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;getx&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; x; &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;BAD, should be const as it doesn&apos;t&lt;/span&gt;
                                &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;modify the object&apos;s state&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;...&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;

&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Point&lt;/span&gt;&amp;amp; &lt;span style=&quot;color: #000000;&quot;&gt;pt&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;x&lt;/span&gt; = pt.getx&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt;;          &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;ERROR, doesn&apos;t compile because getx&lt;/span&gt;
                                &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;was not marked const&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
注意
&lt;/p&gt;

&lt;p&gt;
只有调用函数会修改传入的对象的时候，可以用非 &lt;code&gt;const&lt;/code&gt; 的方式传递指针或引用给函数。代码阅读者在看到这种以无修饰的 &lt;code&gt;T*&lt;/code&gt; 或 &lt;code&gt;T&amp;amp;&lt;/code&gt; 传递参数给函数的时候，就可以假定函数会修改所指向的对象。
&lt;/p&gt;

&lt;p&gt;
注意
&lt;/p&gt;

&lt;p&gt;
有些代码和库函数声明函数的参数是 &lt;code&gt;T*&lt;/code&gt; 但是并不修改 &lt;code&gt;T&lt;/code&gt; 对象。对于改进代码的人来说，这可能有些麻烦。你可以：
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;更新到正确使用 &lt;code&gt;const&lt;/code&gt;  修饰函数参数的库。这是最佳方案。&lt;/li&gt;
&lt;li&gt;使用强制类型转换，把 &lt;code&gt;const&lt;/code&gt; 转换掉。&lt;a href=&quot;./2023-04-25-cppcoreguidelines-es50&quot;&gt;最好避免这个方案&lt;/a&gt;。&lt;/li&gt;
&lt;li&gt;提供一个封装函数。&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
例子：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt;* &lt;span style=&quot;color: #000000;&quot;&gt;p&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;old code: f() does not modify `*p`&lt;/span&gt;
&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt;* &lt;span style=&quot;color: #000000;&quot;&gt;p&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt; f&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const_cast&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt;*&lt;span style=&quot;color: #909183;&quot;&gt;&amp;gt;(&lt;/span&gt;p&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;; &lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;wrapper&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
注意，这个封装函数方案只是一个补丁，只有当 &lt;code&gt;f()&lt;/code&gt; 函数声明不能修改的时候，才可以使用。比如 &lt;code&gt;f&lt;/code&gt; 函数是一个系统库函数，你无法修改。
&lt;/p&gt;

&lt;p&gt;
注意
&lt;/p&gt;

&lt;p&gt;
如果成员变量是 &lt;code&gt;mutable&lt;/code&gt; 或是通过成员的数据的指针所指向的， &lt;code&gt;const&lt;/code&gt; 成员函数是可以修改成员变量的值的。一个常见的应用场景是用于建立数据的缓存，从而避免重复的进行复杂计算。比如，这里有个 &lt;code&gt;Date&lt;/code&gt; 类型，它可以缓存日期的字符串表达形式。这样就可以避免重复的计算日期的字符串表达。
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Date&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;public&lt;/span&gt;:
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;...&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;string&lt;/span&gt;&amp;amp; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;string_ref&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt;
    &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;
        &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;string_val == &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;&quot;&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt; compute_string_rep&lt;span style=&quot;color: #909183;&quot;&gt;()&lt;/span&gt;;
        &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; string_val;
    &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;...&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;private&lt;/span&gt;:
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;compute_string_rep&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt;;    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;compute string&lt;/span&gt;
                                        &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;representation and place it&lt;/span&gt;
                                        &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;in string_val&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;mutable&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;string&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;string_val&lt;/span&gt;;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;...&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
换句话说，就是常量属性是不具备传导性的。你可以在 &lt;code&gt;const&lt;/code&gt; 成员函数中修改
&lt;code&gt;mutable&lt;/code&gt; 成员变量，也可以通过非 &lt;code&gt;const&lt;/code&gt; 的指针访问修改成员变量的值。这里，就需要由类本身确保，进行这些修改不会改变其向用户提供的根据其不变式语义。
&lt;/p&gt;

&lt;p&gt;
请查看： &lt;a href=&quot;./2022-04-02-cppcoreguidelines-i27&quot;&gt;Pimpl&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
强化
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;标记那些没有标记为 &lt;code&gt;const&lt;/code&gt; 的成员函数，但是却并没有对成员变量执行任何非 &lt;code&gt;const&lt;/code&gt; 的操作运算。也就是说，这些成员函数应当被标记为 &lt;code&gt;const&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines Con.1 默认把对象设置为不可变</title>
   <link href="http://kimi.im/2023-08-17-cppcoreguidelines-con1"/>
   <updated>2023-08-17T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-con1</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;By default, make objects immutable&amp;rdquo;
&lt;/p&gt;

&lt;p&gt;
理由
&lt;/p&gt;

&lt;p&gt;
更容易对不可变对象进行推理分析。只有在需要修改对象值的地方把对象设置为可变数据。使用不可变对象，可以避免偶然的或者很难注意到的值发生改变。
&lt;/p&gt;

&lt;p&gt;
例子
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;for&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;i&lt;/span&gt; : c&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt; cout &amp;lt;&amp;lt; i &amp;lt;&amp;lt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&apos;\n&apos;&lt;/span&gt;;    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;just reading: const&lt;/span&gt;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;for&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;i&lt;/span&gt; : c&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt; cout &amp;lt;&amp;lt; i &amp;lt;&amp;lt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&apos;\n&apos;&lt;/span&gt;;          &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;BAD: just reading, may change&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
例外
&lt;/p&gt;

&lt;p&gt;
通过值传递的函数参数不太会被改变。所以也很少设置为 &lt;code&gt;const&lt;/code&gt; 。为了避免混淆，为了减少误报，请不要在函数参数上应用此规则指南。
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;char&lt;/span&gt;* &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;p&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;pedantic&lt;/span&gt;
&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;g&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;i&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt; ... &lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;  &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;pedantic&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
注意，函数参数其实是函数的局部变量，所以修改这些参数只是修改局部数据。
&lt;/p&gt;

&lt;p&gt;
强化
&lt;/p&gt;

&lt;p&gt;
标记那些非 &lt;code&gt;const&lt;/code&gt; 的，但是值并不改变的变量。（为了避免误报，请排除函数参数）
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines E.31  妥善编排 catch 语句的顺序</title>
   <link href="http://kimi.im/2023-08-16-cppcoreguidelines-e31"/>
   <updated>2023-08-16T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-e31</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;Properly order your catch-clauses&amp;rdquo;
&lt;/p&gt;

&lt;p&gt;
理由
&lt;/p&gt;

&lt;p&gt;
&lt;code&gt;catch&lt;/code&gt;  语句是顺序执行的，前一个语句可能会覆盖后一个语句。
&lt;/p&gt;

&lt;p&gt;
错误例子
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;...&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;try&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;
            &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;...&lt;/span&gt;
    &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;catch&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;Base&amp;amp; b&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;/* &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;...&lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt; */&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;catch&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;Derived&amp;amp; d&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;/* &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;...&lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt; */&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;catch&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;...&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;/* &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;...&lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt; */&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;catch&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;std&lt;/span&gt;::exception&amp;amp; e&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;/* &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;...&lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt; */&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
如果 &lt;code&gt;Derive&lt;/code&gt; 是从 &lt;code&gt;Base&lt;/code&gt; 派生的，那么就无法调用 &lt;code&gt;Derive&lt;/code&gt; 的处理过程。还有
&lt;code&gt;...&lt;/code&gt; 表示捕获所有例外，这样的话，后面的 &lt;code&gt;std::exception&lt;/code&gt; 就永远不会被调用。
&lt;/p&gt;

&lt;p&gt;
强化
&lt;/p&gt;

&lt;p&gt;
标记所有会导致覆盖后续异常的异常处理。
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>怎么写 Epic</title>
   <link href="http://kimi.im/2023-08-16-writing-epics"/>
   <updated>2023-08-16T00:00:00+00:00</updated>
   <id>http://kimi.im/writing-epics</id>
   <content type="html">&lt;p&gt;
最近，公司又给我派了新的活，做一个大产品的负责人，大概就是大规模敏捷中的 Epic Owner 的角色。需要协调多个敏捷开发团队，完成一个产品的方方面面。
&lt;/p&gt;

&lt;p&gt;
所以呢，我就开始准备编写产品的 Epic 。
&lt;/p&gt;

&lt;p&gt;
那么，什么是 Epic 呢？Epic 字面意思是史诗、伟大事迹、英雄叙事诗。在大规模敏捷开发框架中，Epic 指的是产品解决方案的很大的一块开发工作。因为开发工作量很大，所以投资风险也就很高。投资风险很高，投资方向错了的话，组织的损失就会很大。因此，要有些措施保障 Epic 确实是有价值的。于是呢，我们就要为每一个 Epic 定义一个 MVP 即 Minimum Viable Product ，最小可行产品，并且要通过 LM 精益投资组合管理委员会的评审通过。LPM 是 Lean
Portfolio Management 的缩写，是为战略投资提供资金保障、为敏捷运营提供协调支持、为精益治理提供监督管控的核心部门。
&lt;/p&gt;

&lt;p&gt;
Epic 的开发周期通常是一个 PI(Planning Interval) 。而一个 PI 通常则是一个季度，三个月左右。
&lt;/p&gt;

&lt;p&gt;
从 Epic 的类别来看，又分为两种，一个是业务 Epic，另一个则是赋能 Epic。业务 Epic，Business Epic，顾名思义，就是能产生业务价值的大块开发工作。而赋能 Epic，Enabler Epic，则是用来提供业务和技术支撑的活动。一般来说，产品负责人拟定业务 Epic，而架构师则负责拟定赋能 Epic。
&lt;/p&gt;

&lt;p&gt;
史诗负责人 Epic Owener 和产品负责人 Product Owner，在定义 Epic 的时候可以参考 Epic 假设陈述（Epic Hypothesis Statement）的方式编写。Epic 假设陈述主要包括以下部分：
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;Epic 的拟定时间&lt;/li&gt;
&lt;li&gt;Epic 的精简名称&lt;/li&gt;
&lt;li&gt;Epic Owner 史诗负责人&lt;/li&gt;
&lt;li&gt;Epic 描述：针对【客户】，需要做的【事情】，本【方案】通过【某个新方案】，提供【价值】，不像【别的方案】，我们的方案【能够做的更好……】&lt;/li&gt;
&lt;li&gt;业务价值&lt;/li&gt;
&lt;li&gt;成效指示（Leading Indicator）&lt;/li&gt;
&lt;li&gt;相关非功能性需求&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
Epic 通过投资组合看板系统进行管理。每个 Epic 要经过不同阶段最终确定是否进行开发：
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;Epic 精益业务分析&lt;/li&gt;
&lt;li&gt;评审&lt;/li&gt;
&lt;li&gt;准备就绪，等待 ART 开发团队档期&lt;/li&gt;
&lt;li&gt;拆分 Epic 为 Feature/User Story&lt;/li&gt;
&lt;li&gt;评估 Feature/User Story 优先级&lt;/li&gt;
&lt;li&gt;开发实现&lt;/li&gt;
&lt;li&gt;测试验收&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
经过 Epic 精益业务分析、评审之后，Epic 假设陈述进一步细化，添加以下内容：
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;关键 Stakeholder，产品干系人&lt;/li&gt;
&lt;li&gt;Epic 范围内的 Feature&lt;/li&gt;
&lt;li&gt;Epic 范围外的 Feature&lt;/li&gt;
&lt;li&gt;非功能性需求&lt;/li&gt;
&lt;li&gt;分析汇总&lt;/li&gt;
&lt;li&gt;Epic 评审结果&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
SAFe 不建议使用基于预算的项目模型，而是基于精益投资组合的管理模型。每个产品负责人手握一把需要开发的 Epic，然后根据 Epic 的价值进行 PK，把
Epic 分配到各个敏捷发布火车（Agile Release Train，ART）中进行开发。
SAFe 中 Epic 的发布过程则以精益启动周期的方式进行。
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines E.30 不要使用异常规格说明</title>
   <link href="http://kimi.im/2023-08-15-cppcoreguidelines-e30"/>
   <updated>2023-08-15T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-e30</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;Don’t use exception specification&amp;rdquo;
&lt;/p&gt;

&lt;p&gt;
理由
&lt;/p&gt;

&lt;p&gt;
异常规格说明导致错误处理变的很脆弱，引起额外的运行时开销。所以这个功能已经从标准 C++ 中移除了。
&lt;/p&gt;

&lt;p&gt;
例子
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;use&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;arg&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;throw&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;X&lt;/span&gt;, &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Y&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;...&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;auto&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;x&lt;/span&gt; = f&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;arg&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;...&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
如果 &lt;code&gt;f()&lt;/code&gt; 抛出的异常不属于 &lt;code&gt;X&lt;/code&gt; 或 &lt;code&gt;Y&lt;/code&gt; 就会调用到未定义的出错处理过程，默认的行为是程序终止。这样看起来没问题，但是如果我们修改了 &lt;code&gt;f()&lt;/code&gt; ，让它抛出
&lt;code&gt;Z&lt;/code&gt; 异常，这时候，我们的 &lt;code&gt;use&lt;/code&gt; 会因为 &lt;code&gt;Z&lt;/code&gt; 异常而终止，除非我们修改 &lt;code&gt;use()&lt;/code&gt; 的异常规格说明，这时候可能还需要重新测试所有代码。困难的地方是，这个 &lt;code&gt;f()&lt;/code&gt;
函数可能是我们无法控制的程序库函数，它抛出的新的异常 &lt;code&gt;use()&lt;/code&gt; 可能不关心、也不知道怎么处理。这时候，我们可以修改 &lt;code&gt;use()&lt;/code&gt; 函数，让它把新的异常 &lt;code&gt;Z&lt;/code&gt; 转交给调用 &lt;code&gt;use()&lt;/code&gt; 的函数来处理。但是这时候，调用 &lt;code&gt;use()&lt;/code&gt; 的函数可能需要修改了。很快，这个事情就会变的很不可控。我们也可以在 &lt;code&gt;use()&lt;/code&gt; 中 &lt;code&gt;try-catch&lt;/code&gt; 捕捉 &lt;code&gt;Z&lt;/code&gt; 异常。但是这个方法也很快变的难以管理。请注意，修改总的异常种类可能涉及到系统的最底层。比如修改某些网络库或者中间件。所以，这些修改会像肥皂泡一样，一直上升到调用链的最上面。在大的代码库中，这就意味着，只有最后一个用户修改了代码之后，整个代码库才可以切换到最新版本的库。如果
&lt;code&gt;use()&lt;/code&gt; 属于程序库，可能会因为某些未知的客户在使用，我们就无法升级它。
&lt;/p&gt;

&lt;p&gt;
“让异常一直传递到某个能处理的函数”，这个策略多年来一直证明是有效的方法。
&lt;/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=&quot;./2023-08-01-cppcoreguidelines-e12&quot;&gt;noexcept&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
强化
&lt;/p&gt;

&lt;p&gt;
标记出现异常规格说明的地方。
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines E.28  避免基于全局状态的错误处理（比如 errno）</title>
   <link href="http://kimi.im/2023-08-14-cppcoreguidelines-e28"/>
   <updated>2023-08-14T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-e28</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;Avoid error handling based on global state (e.g. errno)&amp;rdquo;
&lt;/p&gt;

&lt;p&gt;
理由
&lt;/p&gt;

&lt;p&gt;
全局状态很难管理，容易忘记检查。你上一次什么时候测试过 &lt;code&gt;prinft()&lt;/code&gt; 的返回值？
&lt;/p&gt;

&lt;p&gt;
请查看：E.25 模拟 RAII
&lt;/p&gt;

&lt;p&gt;
坏例子
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;last_err&lt;/span&gt;;

&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;n&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;...&lt;/span&gt;
    p = &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;static_cast&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;X&lt;/span&gt;*&lt;span style=&quot;color: #7388d6;&quot;&gt;&amp;gt;(&lt;/span&gt;malloc&lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;n * &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;sizeof&lt;/span&gt;&lt;span style=&quot;color: #709870;&quot;&gt;(&lt;/span&gt;X&lt;span style=&quot;color: #709870;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;!p&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; last_err = -1;     &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;error if memory is exhausted&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;...&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
注意
&lt;/p&gt;

&lt;p&gt;
C 风格的错误处理机制是基于全局的 &lt;code&gt;errno&lt;/code&gt; 变量。所以，基本上无法避免这种风格。
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines E.27 如果无法抛出异常，请有系统的使用错误码</title>
   <link href="http://kimi.im/2023-08-13-cppcoreguidelines-e27"/>
   <updated>2023-08-13T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-e27</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;If you can’t throw exceptions, use error codes systematically&amp;rdquo;
&lt;/p&gt;

&lt;p&gt;
理由
&lt;/p&gt;

&lt;p&gt;
比较系统的应用出错处理策略，可以减小忘记处理错误的风险。
&lt;/p&gt;

&lt;p&gt;
请参考：模拟 RAII
&lt;/p&gt;

&lt;p&gt;
注意
&lt;/p&gt;

&lt;p&gt;
这里有几个问题需要澄清：
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;你打算怎么把错误标记传递出函数？&lt;/li&gt;
&lt;li&gt;你打算怎么在函数退出的时候释放所有资源？&lt;/li&gt;
&lt;li&gt;你打算怎么使用错误标记？&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
一般来说，返回错误标记意味着返回两个值：函数结果和错误标记。错误标记可以是对象的一部分，比如某个对象有一个 &lt;code&gt;valid()&lt;/code&gt; 函数，用来标记错误。或者返回成对的一对数值。
&lt;/p&gt;

&lt;p&gt;
例子
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Gadget&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;make_gadget&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;n&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;...&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;

&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;user&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Gadget&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;g&lt;/span&gt; = make_gadget&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;17&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;!g.valid&lt;span style=&quot;color: #909183;&quot;&gt;()&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;
            &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;error handling&lt;/span&gt;
    &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;...&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
这个方法属于模拟 RAII 资源管理。 &lt;code&gt;valid()&lt;/code&gt; 函数可以返回一个错误标记。错误标记可以是枚举类型的值。
&lt;/p&gt;


&lt;p&gt;
例子
&lt;/p&gt;

&lt;p&gt;
那么，如果我们不能或者不想要修改 &lt;code&gt;Gadget&lt;/code&gt; 类型呢？这种情况，我们只能返回一对数值。
&lt;/p&gt;

&lt;p&gt;
比如：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #110099;&quot;&gt;std&lt;/span&gt;::&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;pair&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;lt;&lt;/span&gt;Gadget, error_indicator&lt;span style=&quot;color: #707183;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;make_gadget&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;n&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;...&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;

&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;user&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;auto&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;r&lt;/span&gt; = make_gadget&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;17&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;!r.second&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;
            &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;error handling&lt;/span&gt;
    &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Gadget&lt;/span&gt;&amp;amp; &lt;span style=&quot;color: #000000;&quot;&gt;g&lt;/span&gt; = r.first;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;...&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
正如代码所展示的， &lt;code&gt;std::pair&lt;/code&gt; 可以作为返回类型。有些人更喜欢自定义类型。比如：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Gval&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;make_gadget&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;n&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;...&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;

&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;user&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;auto&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;r&lt;/span&gt; = make_gadget&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;17&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;!r.err&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;
            &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;error handling&lt;/span&gt;
    &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Gadget&lt;/span&gt;&amp;amp; &lt;span style=&quot;color: #000000;&quot;&gt;g&lt;/span&gt; = r.val;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;...&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
我们选择返回自定义类型是因为自定义类型可以给成员命名。这样就避免使用
&lt;code&gt;std::pair&lt;/code&gt; 出现的混淆。像 &lt;code&gt;first&lt;/code&gt; &lt;code&gt;second&lt;/code&gt; 之类的名字太晦涩。
&lt;/p&gt;

&lt;p&gt;
例子
&lt;/p&gt;

&lt;p&gt;
一般来说，你必须因为错误而退出之前进行清理工作。可能会看起来很杂乱：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #110099;&quot;&gt;std&lt;/span&gt;::&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;pair&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt;, error_indicator&lt;span style=&quot;color: #707183;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;user&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Gadget&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;g1&lt;/span&gt; = make_gadget&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;17&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;!g1.valid&lt;span style=&quot;color: #909183;&quot;&gt;()&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;
        &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #909183;&quot;&gt;{&lt;/span&gt;0, g1_error&lt;span style=&quot;color: #909183;&quot;&gt;}&lt;/span&gt;;
    &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;

    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Gadget&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;g2&lt;/span&gt; = make_gadget&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;31&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;!g2.valid&lt;span style=&quot;color: #909183;&quot;&gt;()&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;
        cleanup&lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;g1&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt;;
        &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #909183;&quot;&gt;{&lt;/span&gt;0, g2_error&lt;span style=&quot;color: #909183;&quot;&gt;}&lt;/span&gt;;
    &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;

    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;...&lt;/span&gt;

    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;all_foobar&lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;g1, g2&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;
        cleanup&lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;g2&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt;;
        cleanup&lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;g1&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt;;
        &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #909183;&quot;&gt;{&lt;/span&gt;0, foobar_error&lt;span style=&quot;color: #909183;&quot;&gt;}&lt;/span&gt;;
    &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;

    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;...&lt;/span&gt;

    cleanup&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;g2&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
    cleanup&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;g1&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;res, 0&lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
如果函数中有多个资源，多个出错点的时候，模拟 RAII 的工作量不小。一个常见的技术是把清理动作收集在一起放到函数后面，从而可以避免重复（注意，
&lt;code&gt;g2&lt;/code&gt; 的范围限定是不必要的，但是为了使得 &lt;code&gt;goto&lt;/code&gt; 正确工作，需要做这个范围限定。
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #110099;&quot;&gt;std&lt;/span&gt;::&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;pair&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt;, error_indicator&lt;span style=&quot;color: #707183;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;user&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;error_indicator&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;err&lt;/span&gt; = 0;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;res&lt;/span&gt; = 0;

    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Gadget&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;g1&lt;/span&gt; = make_gadget&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;17&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;!g1.valid&lt;span style=&quot;color: #909183;&quot;&gt;()&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;
        err = g1_error;
        &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;goto&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;g1_exit&lt;/span&gt;;
    &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;

    &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;
        &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Gadget&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;g2&lt;/span&gt; = make_gadget&lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;31&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt;;
        &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;!g2.valid&lt;span style=&quot;color: #709870;&quot;&gt;()&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #909183;&quot;&gt;{&lt;/span&gt;
            err = g2_error;
            &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;goto&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;g2_exit&lt;/span&gt;;
        &lt;span style=&quot;color: #909183;&quot;&gt;}&lt;/span&gt;

        &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;all_foobar&lt;span style=&quot;color: #709870;&quot;&gt;(&lt;/span&gt;g1, g2&lt;span style=&quot;color: #709870;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #909183;&quot;&gt;{&lt;/span&gt;
            err = foobar_error;
            &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;goto&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;g2_exit&lt;/span&gt;;
        &lt;span style=&quot;color: #909183;&quot;&gt;}&lt;/span&gt;

        &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;...&lt;/span&gt;

    &lt;span style=&quot;color: #110099;&quot;&gt;g2_exit&lt;/span&gt;:
        &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;g2.valid&lt;span style=&quot;color: #709870;&quot;&gt;()&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt; cleanup&lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;g2&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt;;
    &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;

&lt;span style=&quot;color: #110099;&quot;&gt;g1_exit&lt;/span&gt;:
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;g1.valid&lt;span style=&quot;color: #909183;&quot;&gt;()&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; cleanup&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;g1&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;res, err&lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
函数越长，奇技淫巧越多。 &lt;code&gt;finally&lt;/code&gt; 可以减轻一些痛苦。另外，程序越大，越难系统地实施这种基于错误标记的错误处理策略。
&lt;/p&gt;

&lt;p&gt;
我们建议使用&lt;a href=&quot;./2023-07-23-cppcoreguidelines-e2&quot;&gt;基于异常的错误处理&lt;/a&gt;，并建议&lt;a href=&quot;./2022-04-06-cppcoreguidelines-f3&quot;&gt;保持函数精简短小&lt;/a&gt;。
&lt;/p&gt;

&lt;p&gt;
请查看：&lt;a href=&quot;./2022-05-31-cppcoreguidelines-f21&quot;&gt;返回多个值&lt;/a&gt;
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>PROFIBUS 简介</title>
   <link href="http://kimi.im/2023-08-13-profibus-intro"/>
   <updated>2023-08-13T00:00:00+00:00</updated>
   <id>http://kimi.im/profibus-intro</id>
   <content type="html">&lt;p&gt;
PROFIBUS 是 PROFIBUS &amp;amp; PROFINET International (PI) 组织维护的工业现场总线标准。PROFIBUS 总线可以通过一根总线连接控制系统、控制器，以及传感器、执行器等现场设备。同时，又可以通过 PROFINET 与上层工厂管理运营系统连接进行数据交换。
&lt;/p&gt;

&lt;p&gt;
PROFIBUS 的支撑技术是统一的、标准的、支持多种应用的 PROFIBUS DP 通信协议。PROFIBUS DP 可以用于工厂自动化、流程自动化、运动控制、安全控制等场景。
&lt;/p&gt;

&lt;p&gt;
如图 &lt;a href=&quot;#org5989523&quot;&gt;1&lt;/a&gt; 所示，PROFIBUS 协议栈的设计是比较模块化的。
&lt;/p&gt;


&lt;div id=&quot;org5989523&quot; class=&quot;figure&quot;&gt;
&lt;p&gt;&lt;div align=&quot;center&quot;&gt;&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; xmlns:xlink=&quot;http://www.w3.org/1999/xlink&quot; width=&quot;594.95996&quot; height=&quot;420.95999&quot; viewBox=&quot;0 0 594.95996 420.95999&quot;&gt;
&lt;defs&gt;
&lt;g&gt;
&lt;g id=&quot;glyph-0-0&quot;&gt;
&lt;path d=&quot;M 0.75 0 L 0.75 -6.359375 L 5.25 -6.359375 L 5.25 0 Z M 1.421875 -0.671875 L 4.59375 -0.671875 L 4.59375 -5.6875 L 1.421875 -5.6875 Z M 1.421875 -0.671875 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-0-1&quot;&gt;
&lt;path d=&quot;M 2.5 1.09375 L 1.84375 1.09375 L 1.84375 -3.265625 C 1.425781 -2.785156 0.972656 -2.328125 0.484375 -1.890625 C 0.367188 -2.085938 0.234375 -2.289062 0.078125 -2.5 C 1.160156 -3.40625 2.007812 -4.410156 2.625 -5.515625 L 0.3125 -5.515625 L 0.3125 -6.140625 L 2.9375 -6.140625 C 3.09375 -6.492188 3.234375 -6.851562 3.359375 -7.21875 L 4.046875 -7.0625 C 3.941406 -6.75 3.820312 -6.441406 3.6875 -6.140625 L 8.4375 -6.140625 L 8.4375 -5.515625 L 3.375 -5.515625 C 3.195312 -5.191406 3.007812 -4.867188 2.8125 -4.546875 L 7.421875 -4.546875 L 7.421875 -0.0625 C 7.421875 0.632812 7.082031 0.984375 6.40625 0.984375 C 6.101562 0.992188 5.648438 1 5.046875 1 C 5.015625 0.8125 4.972656 0.582031 4.921875 0.3125 C 5.429688 0.34375 5.847656 0.359375 6.171875 0.359375 C 6.554688 0.359375 6.75 0.171875 6.75 -0.203125 L 6.75 -0.796875 L 2.5 -0.796875 Z M 2.5 -1.375 L 6.75 -1.375 L 6.75 -2.390625 L 2.5 -2.390625 Z M 6.75 -3.96875 L 2.5 -3.96875 L 2.5 -2.953125 L 6.75 -2.953125 Z M 6.75 -3.96875 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-0-2&quot;&gt;
&lt;path d=&quot;M 2.65625 0.46875 C 3.707031 0.09375 4.617188 -0.34375 5.390625 -0.84375 C 5.191406 -1.351562 5.035156 -1.957031 4.921875 -2.65625 L 3.125 -2.40625 L 3.03125 -3.015625 L 4.84375 -3.265625 C 4.789062 -3.660156 4.753906 -4.078125 4.734375 -4.515625 L 3.203125 -4.34375 L 3.109375 -4.953125 L 4.703125 -5.140625 C 4.671875 -5.722656 4.640625 -6.390625 4.609375 -7.140625 L 5.3125 -7.140625 C 5.320312 -6.421875 5.335938 -5.773438 5.359375 -5.203125 L 8.171875 -5.53125 L 8.25 -4.9375 L 5.390625 -4.59375 C 5.410156 -4.15625 5.441406 -3.742188 5.484375 -3.359375 L 8.390625 -3.765625 L 8.46875 -3.15625 L 5.5625 -2.75 C 5.65625 -2.164062 5.785156 -1.660156 5.953125 -1.234375 C 6.546875 -1.679688 7.039062 -2.171875 7.4375 -2.703125 L 7.984375 -2.296875 C 7.484375 -1.679688 6.894531 -1.128906 6.21875 -0.640625 C 6.4375 -0.253906 6.695312 0.0390625 7 0.25 C 7.375 0.46875 7.613281 0.351562 7.71875 -0.09375 C 7.789062 -0.445312 7.847656 -0.84375 7.890625 -1.28125 C 8.148438 -1.164062 8.367188 -1.085938 8.546875 -1.046875 C 8.441406 -0.429688 8.34375 0.0234375 8.25 0.328125 C 8.09375 0.804688 7.816406 1.046875 7.421875 1.046875 C 7.015625 1.046875 6.632812 0.878906 6.28125 0.546875 C 6.050781 0.328125 5.847656 0.0546875 5.671875 -0.265625 C 4.898438 0.234375 4.035156 0.671875 3.078125 1.046875 C 2.972656 0.878906 2.832031 0.6875 2.65625 0.46875 Z M 1.21875 -2.078125 C 1.71875 -2.148438 2.304688 -2.242188 2.984375 -2.359375 C 2.953125 -2.148438 2.925781 -1.9375 2.90625 -1.71875 C 1.96875 -1.570312 1.144531 -1.4375 0.4375 -1.3125 L 0.296875 -1.953125 C 0.691406 -2.367188 1.125 -2.960938 1.59375 -3.734375 C 1.132812 -3.710938 0.703125 -3.679688 0.296875 -3.640625 L 0.140625 -4.21875 C 0.660156 -4.925781 1.195312 -5.925781 1.75 -7.21875 L 2.390625 -6.96875 C 1.816406 -5.820312 1.320312 -4.921875 0.90625 -4.265625 C 1.238281 -4.273438 1.578125 -4.285156 1.921875 -4.296875 C 2.109375 -4.648438 2.304688 -5.023438 2.515625 -5.421875 L 3.140625 -5.109375 C 2.453125 -3.929688 1.8125 -2.921875 1.21875 -2.078125 Z M 0.140625 -0.125 C 1.128906 -0.34375 2.128906 -0.578125 3.140625 -0.828125 C 3.117188 -0.609375 3.109375 -0.394531 3.109375 -0.1875 C 2.171875 0.03125 1.242188 0.265625 0.328125 0.515625 Z M 6.015625 -6.703125 L 6.375 -7.125 C 6.769531 -6.875 7.195312 -6.570312 7.65625 -6.21875 L 7.25 -5.71875 C 6.78125 -6.125 6.367188 -6.453125 6.015625 -6.703125 Z M 6.015625 -6.703125 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-0-3&quot;&gt;
&lt;path d=&quot;M 0.234375 -3.625 L 3.953125 -3.625 L 3.953125 -7.15625 L 4.640625 -7.15625 L 4.640625 -3.625 L 8.4375 -3.625 L 8.4375 -3 L 5.671875 -3 L 5.671875 -0.296875 C 5.671875 -0.078125 5.695312 0.0703125 5.75 0.15625 C 5.832031 0.269531 6 0.328125 6.25 0.328125 L 7.078125 0.328125 C 7.484375 0.328125 7.707031 0.175781 7.75 -0.125 C 7.789062 -0.425781 7.820312 -0.828125 7.84375 -1.328125 C 8.050781 -1.234375 8.285156 -1.148438 8.546875 -1.078125 C 8.492188 -0.492188 8.441406 -0.078125 8.390625 0.171875 C 8.347656 0.453125 8.226562 0.644531 8.03125 0.75 C 7.851562 0.851562 7.550781 0.90625 7.125 0.90625 L 6.109375 0.90625 C 5.679688 0.90625 5.378906 0.8125 5.203125 0.625 C 5.054688 0.46875 4.984375 0.195312 4.984375 -0.1875 L 4.984375 -3 L 3.359375 -3 C 3.335938 -1.832031 3.109375 -0.953125 2.671875 -0.359375 C 2.210938 0.296875 1.488281 0.796875 0.5 1.140625 C 0.382812 0.960938 0.238281 0.757812 0.0625 0.53125 C 1.050781 0.1875 1.734375 -0.257812 2.109375 -0.8125 C 2.472656 -1.289062 2.664062 -2.019531 2.6875 -3 L 0.234375 -3 Z M 5.515625 -4.578125 C 6.160156 -5.191406 6.734375 -5.832031 7.234375 -6.5 L 7.84375 -6.0625 C 7.289062 -5.40625 6.691406 -4.757812 6.046875 -4.125 Z M 0.828125 -6.109375 L 1.34375 -6.5 C 1.914062 -5.882812 2.460938 -5.257812 2.984375 -4.625 L 2.359375 -4.15625 C 1.847656 -4.851562 1.335938 -5.503906 0.828125 -6.109375 Z M 0.828125 -6.109375 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-0-4&quot;&gt;
&lt;path d=&quot;M 3.234375 -3.40625 L 5.59375 -3.40625 L 5.59375 -5.84375 C 4.976562 -5.789062 4.332031 -5.75 3.65625 -5.71875 C 3.632812 -5.914062 3.597656 -6.125 3.546875 -6.34375 C 5.148438 -6.414062 6.660156 -6.535156 8.078125 -6.703125 L 8.203125 -6.0625 C 7.597656 -6 6.957031 -5.941406 6.28125 -5.890625 L 6.28125 -3.40625 L 8.515625 -3.40625 L 8.515625 -2.765625 L 6.28125 -2.765625 L 6.28125 1.109375 L 5.59375 1.109375 L 5.59375 -2.765625 L 3.234375 -2.765625 Z M 1.25 -2.0625 C 2.09375 -2.175781 2.8125 -2.285156 3.40625 -2.390625 C 3.363281 -2.171875 3.335938 -1.957031 3.328125 -1.75 C 2.210938 -1.601562 1.257812 -1.457031 0.46875 -1.3125 L 0.3125 -1.9375 C 0.863281 -2.476562 1.394531 -3.113281 1.90625 -3.84375 C 1.40625 -3.820312 0.894531 -3.785156 0.375 -3.734375 L 0.203125 -4.3125 C 0.804688 -5.070312 1.363281 -6.035156 1.875 -7.203125 L 2.515625 -6.953125 C 1.972656 -5.953125 1.457031 -5.085938 0.96875 -4.359375 C 1.445312 -4.359375 1.878906 -4.367188 2.265625 -4.390625 C 2.492188 -4.742188 2.722656 -5.113281 2.953125 -5.5 L 3.578125 -5.1875 C 2.960938 -4.21875 2.1875 -3.175781 1.25 -2.0625 Z M 0.140625 -0.140625 C 1.203125 -0.296875 2.351562 -0.488281 3.59375 -0.71875 C 3.5625 -0.425781 3.539062 -0.203125 3.53125 -0.046875 C 2.414062 0.128906 1.335938 0.320312 0.296875 0.53125 Z M 0.140625 -0.140625 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-0-5&quot;&gt;
&lt;path d=&quot;M 3.421875 -6.015625 L 5.625 -6.015625 L 5.625 -7.109375 L 6.203125 -7.109375 L 6.203125 -6.015625 L 8.25 -6.015625 L 8.25 -5.40625 L 8.078125 -4.25 C 7.835938 -4.300781 7.617188 -4.332031 7.421875 -4.34375 L 7.625 -5.421875 L 6.203125 -5.421875 L 6.203125 -3.8125 L 7.84375 -3.8125 L 7.84375 -3.234375 C 7.539062 -2.203125 7.066406 -1.328125 6.421875 -0.609375 C 6.972656 -0.109375 7.664062 0.273438 8.5 0.546875 C 8.320312 0.785156 8.171875 0.992188 8.046875 1.171875 C 7.222656 0.835938 6.53125 0.398438 5.96875 -0.140625 C 5.363281 0.398438 4.644531 0.835938 3.8125 1.171875 C 3.707031 1.003906 3.570312 0.800781 3.40625 0.5625 C 4.238281 0.28125 4.945312 -0.113281 5.53125 -0.625 C 4.957031 -1.34375 4.566406 -2.207031 4.359375 -3.21875 L 4.03125 -3.21875 L 4.03125 -2.765625 C 4.03125 -1.140625 3.585938 0.148438 2.703125 1.109375 C 2.566406 0.921875 2.414062 0.742188 2.25 0.578125 C 3.03125 -0.242188 3.421875 -1.367188 3.421875 -2.796875 Z M 0.09375 -0.6875 C 0.53125 -0.851562 0.957031 -1.007812 1.375 -1.15625 L 1.375 -3.3125 L 0.359375 -3.3125 L 0.359375 -3.890625 L 1.375 -3.890625 L 1.375 -5.765625 L 0.28125 -5.765625 L 0.28125 -6.34375 L 3.0625 -6.34375 L 3.0625 -5.765625 L 1.984375 -5.765625 L 1.984375 -3.890625 L 2.953125 -3.890625 L 2.953125 -3.3125 L 1.984375 -3.3125 L 1.984375 -1.390625 C 2.335938 -1.523438 2.6875 -1.660156 3.03125 -1.796875 C 3.039062 -1.546875 3.050781 -1.328125 3.0625 -1.140625 C 2.15625 -0.804688 1.238281 -0.4375 0.3125 -0.03125 Z M 7.1875 -3.21875 L 4.96875 -3.21875 C 5.15625 -2.375 5.492188 -1.660156 5.984375 -1.078125 C 6.515625 -1.671875 6.914062 -2.382812 7.1875 -3.21875 Z M 4.03125 -3.8125 L 5.625 -3.8125 L 5.625 -5.421875 L 4.03125 -5.421875 Z M 4.03125 -3.8125 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-0-6&quot;&gt;
&lt;path d=&quot;M 7.59375 -1.890625 L 5.46875 -1.890625 C 5.289062 -1.515625 5.109375 -1.171875 4.921875 -0.859375 C 5.160156 -0.859375 5.597656 -0.878906 6.234375 -0.921875 C 6.128906 -1.085938 6.019531 -1.257812 5.90625 -1.4375 L 6.390625 -1.703125 C 6.734375 -1.222656 7.039062 -0.726562 7.3125 -0.21875 L 6.8125 0.0625 C 6.71875 -0.101562 6.625 -0.273438 6.53125 -0.453125 C 6 -0.410156 5.5 -0.363281 5.03125 -0.3125 C 4.757812 -0.269531 4.507812 -0.222656 4.28125 -0.171875 L 4 -0.75 C 4.195312 -0.832031 4.363281 -0.984375 4.5 -1.203125 C 4.613281 -1.398438 4.734375 -1.628906 4.859375 -1.890625 L 3.6875 -1.890625 L 3.6875 1.09375 L 3.09375 1.09375 L 3.09375 -2.390625 L 5.09375 -2.390625 C 5.1875 -2.617188 5.28125 -2.863281 5.375 -3.125 L 5.96875 -2.96875 C 5.882812 -2.769531 5.800781 -2.578125 5.71875 -2.390625 L 8.1875 -2.390625 L 8.1875 0.03125 C 8.1875 0.6875 7.894531 1.015625 7.3125 1.015625 C 7.070312 1.015625 6.726562 1.007812 6.28125 1 C 6.257812 0.863281 6.21875 0.648438 6.15625 0.359375 C 6.507812 0.398438 6.828125 0.421875 7.109375 0.421875 C 7.429688 0.421875 7.59375 0.238281 7.59375 -0.125 Z M 0.09375 -0.453125 C 0.476562 -0.554688 0.859375 -0.65625 1.234375 -0.75 L 1.234375 -3.171875 L 0.25 -3.171875 L 0.25 -3.765625 L 1.234375 -3.765625 L 1.234375 -5.765625 L 0.21875 -5.765625 L 0.21875 -6.359375 L 2.84375 -6.359375 L 2.84375 -5.765625 L 1.84375 -5.765625 L 1.84375 -3.765625 L 2.75 -3.765625 L 2.75 -3.171875 L 1.84375 -3.171875 L 1.84375 -0.90625 C 2.164062 -1 2.488281 -1.09375 2.8125 -1.1875 C 2.8125 -0.925781 2.8125 -0.703125 2.8125 -0.515625 C 2.007812 -0.304688 1.171875 -0.0703125 0.296875 0.1875 Z M 7.453125 -2.921875 L 7.453125 -3.15625 L 3.265625 -3.15625 L 3.265625 -5.375 L 3.84375 -5.375 L 3.84375 -3.671875 L 7.453125 -3.671875 L 7.453125 -5.40625 L 8.015625 -5.40625 L 8.015625 -2.921875 Z M 3.140625 -6.296875 L 5.421875 -6.296875 C 5.304688 -6.523438 5.1875 -6.753906 5.0625 -6.984375 L 5.640625 -7.234375 C 5.816406 -6.898438 5.972656 -6.585938 6.109375 -6.296875 L 8.421875 -6.296875 L 8.421875 -5.78125 L 3.140625 -5.78125 Z M 4.25 -5.265625 L 4.546875 -5.65625 C 4.953125 -5.4375 5.335938 -5.21875 5.703125 -5 C 6.023438 -5.21875 6.332031 -5.445312 6.625 -5.6875 L 7.015625 -5.296875 C 6.742188 -5.085938 6.472656 -4.894531 6.203125 -4.71875 C 6.503906 -4.539062 6.796875 -4.363281 7.078125 -4.1875 L 6.765625 -3.75 C 6.410156 -3.976562 6.0625 -4.195312 5.71875 -4.40625 C 5.289062 -4.15625 4.851562 -3.929688 4.40625 -3.734375 C 4.351562 -3.835938 4.257812 -3.984375 4.125 -4.171875 C 4.507812 -4.328125 4.875 -4.503906 5.21875 -4.703125 C 4.894531 -4.898438 4.570312 -5.085938 4.25 -5.265625 Z M 4.25 -5.265625 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-0-7&quot;&gt;
&lt;path d=&quot;M 2.5625 -3.765625 C 3.289062 -4.765625 3.898438 -5.90625 4.390625 -7.1875 L 5.03125 -6.984375 C 4.8125 -6.492188 4.59375 -6.035156 4.375 -5.609375 L 8.328125 -5.609375 L 8.328125 -5.046875 L 6.484375 -5.046875 L 6.484375 -3.765625 L 8.25 -3.765625 L 8.25 -3.203125 L 6.484375 -3.203125 L 6.484375 -1.921875 L 8.25 -1.921875 L 8.25 -1.359375 L 6.484375 -1.359375 L 6.484375 -0.046875 L 8.421875 -0.046875 L 8.421875 0.53125 L 4.140625 0.53125 L 4.140625 1.09375 L 3.5 1.09375 L 3.5 -4.015625 C 3.320312 -3.722656 3.148438 -3.453125 2.984375 -3.203125 C 2.878906 -3.378906 2.738281 -3.566406 2.5625 -3.765625 Z M 1.0625 -2.171875 C 1.601562 -2.234375 2.191406 -2.300781 2.828125 -2.375 C 2.796875 -2.101562 2.773438 -1.898438 2.765625 -1.765625 C 1.734375 -1.648438 0.9375 -1.539062 0.375 -1.4375 L 0.25 -2.0625 C 0.5625 -2.363281 0.972656 -2.96875 1.484375 -3.875 C 0.984375 -3.832031 0.578125 -3.800781 0.265625 -3.78125 L 0.109375 -4.3125 C 0.648438 -5.164062 1.125 -6.128906 1.53125 -7.203125 L 2.1875 -6.96875 C 1.71875 -5.96875 1.265625 -5.097656 0.828125 -4.359375 C 1.023438 -4.359375 1.332031 -4.363281 1.75 -4.375 C 1.945312 -4.738281 2.15625 -5.148438 2.375 -5.609375 L 2.984375 -5.328125 C 2.191406 -3.929688 1.550781 -2.878906 1.0625 -2.171875 Z M 4.140625 -0.046875 L 5.84375 -0.046875 L 5.84375 -1.359375 L 4.140625 -1.359375 Z M 4.140625 -1.921875 L 5.84375 -1.921875 L 5.84375 -3.203125 L 4.140625 -3.203125 Z M 4.140625 -3.765625 L 5.84375 -3.765625 L 5.84375 -5.046875 L 4.140625 -5.046875 Z M 0.15625 -0.09375 C 1.050781 -0.25 2.023438 -0.441406 3.078125 -0.671875 C 3.066406 -0.441406 3.0625 -0.226562 3.0625 -0.03125 C 1.9375 0.207031 1.019531 0.394531 0.3125 0.53125 Z M 5.546875 -6.84375 L 6.078125 -7.171875 C 6.398438 -6.765625 6.664062 -6.382812 6.875 -6.03125 L 6.3125 -5.671875 C 6.113281 -6.035156 5.859375 -6.425781 5.546875 -6.84375 Z M 5.546875 -6.84375 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-0-8&quot;&gt;
&lt;path d=&quot;M 4.953125 -6.640625 L 7.9375 -6.640625 L 7.9375 -2.796875 C 7.9375 -2.179688 7.648438 -1.875 7.078125 -1.875 C 6.867188 -1.863281 6.523438 -1.859375 6.046875 -1.859375 C 6.035156 -1.898438 6 -2.117188 5.9375 -2.515625 C 6.269531 -2.492188 6.613281 -2.484375 6.96875 -2.484375 C 7.207031 -2.484375 7.328125 -2.617188 7.328125 -2.890625 L 7.328125 -3.34375 L 5.359375 -3.34375 C 5.191406 -2.757812 4.832031 -2.222656 4.28125 -1.734375 C 4.132812 -1.890625 3.96875 -2.039062 3.78125 -2.1875 C 4.25 -2.5625 4.5625 -2.972656 4.71875 -3.421875 C 4.875 -3.828125 4.953125 -4.519531 4.953125 -5.5 Z M 3.71875 -2.984375 L 3.71875 -3.21875 L 2.65625 -3.21875 C 2.5 -2.570312 2.015625 -1.972656 1.203125 -1.421875 C 1.097656 -1.585938 0.96875 -1.757812 0.8125 -1.9375 C 1.4375 -2.289062 1.84375 -2.71875 2.03125 -3.21875 L 0.796875 -3.21875 L 0.796875 -4.953125 L 1.34375 -4.953125 L 1.34375 -3.75 L 2.171875 -3.75 C 2.222656 -4.050781 2.25 -4.566406 2.25 -5.296875 L 0.421875 -5.296875 L 0.421875 -5.84375 L 1.640625 -5.84375 C 1.398438 -6.21875 1.179688 -6.53125 0.984375 -6.78125 L 1.453125 -7.09375 C 1.628906 -6.882812 1.863281 -6.578125 2.15625 -6.171875 L 1.671875 -5.84375 L 2.8125 -5.84375 C 3.082031 -6.3125 3.3125 -6.738281 3.5 -7.125 L 4.078125 -6.875 C 3.910156 -6.613281 3.675781 -6.269531 3.375 -5.84375 L 4.59375 -5.84375 L 4.59375 -5.296875 L 2.828125 -5.296875 C 2.828125 -4.578125 2.804688 -4.0625 2.765625 -3.75 L 3.71875 -3.75 L 3.71875 -4.984375 L 4.25 -4.984375 L 4.25 -2.984375 Z M 0.1875 0.21875 L 4.03125 0.21875 L 4.03125 -0.6875 L 1.234375 -0.6875 L 1.234375 -1.25 L 4.03125 -1.25 L 4.03125 -1.71875 L 4.65625 -1.71875 L 4.65625 -1.25 L 7.390625 -1.25 L 7.390625 -0.6875 L 4.65625 -0.6875 L 4.65625 0.21875 L 8.453125 0.21875 L 8.453125 0.78125 L 0.1875 0.78125 Z M 5.46875 -3.875 L 7.328125 -3.875 L 7.328125 -4.71875 L 5.546875 -4.71875 C 5.523438 -4.394531 5.5 -4.113281 5.46875 -3.875 Z M 7.328125 -6.09375 L 5.5625 -6.09375 L 5.5625 -5.25 L 7.328125 -5.25 Z M 7.328125 -6.09375 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-0-9&quot;&gt;
&lt;path d=&quot;M 0.125 -0.734375 C 0.71875 -1.492188 1.175781 -2.359375 1.5 -3.328125 L 0.203125 -3.328125 L 0.203125 -3.90625 L 1.609375 -3.90625 L 1.609375 -7.140625 L 2.234375 -7.140625 L 2.234375 -3.90625 L 3.609375 -3.90625 L 3.609375 -3.328125 L 2.234375 -3.328125 L 2.234375 -2.5 L 2.609375 -2.796875 C 2.992188 -2.390625 3.335938 -2.003906 3.640625 -1.640625 L 3.171875 -1.25 C 2.878906 -1.644531 2.566406 -2.023438 2.234375 -2.390625 L 2.234375 1.109375 L 1.609375 1.109375 L 1.609375 -2.28125 C 1.253906 -1.332031 0.84375 -0.59375 0.375 -0.0625 C 0.300781 -0.289062 0.21875 -0.515625 0.125 -0.734375 Z M 3.84375 -1.828125 L 6.53125 -2.15625 L 6.53125 -7.140625 L 7.1875 -7.140625 L 7.1875 -2.234375 L 8.46875 -2.390625 L 8.515625 -1.78125 L 7.1875 -1.609375 L 7.1875 1.109375 L 6.53125 1.109375 L 6.53125 -1.53125 L 3.921875 -1.21875 Z M 4.015625 -3.75 L 4.375 -4.1875 C 4.914062 -3.832031 5.414062 -3.472656 5.875 -3.109375 L 5.453125 -2.609375 C 5.023438 -2.972656 4.546875 -3.351562 4.015625 -3.75 Z M 2.4375 -4.515625 C 2.695312 -5.148438 2.910156 -5.734375 3.078125 -6.265625 L 3.6875 -6.078125 C 3.476562 -5.523438 3.234375 -4.929688 2.953125 -4.296875 Z M 4.203125 -5.890625 L 4.59375 -6.328125 C 5.070312 -5.984375 5.546875 -5.609375 6.015625 -5.203125 L 5.59375 -4.703125 C 5.226562 -5.054688 4.765625 -5.453125 4.203125 -5.890625 Z M 0.1875 -6.078125 L 0.703125 -6.28125 C 0.910156 -5.800781 1.132812 -5.242188 1.375 -4.609375 L 0.796875 -4.34375 C 0.546875 -5.101562 0.34375 -5.679688 0.1875 -6.078125 Z M 0.1875 -6.078125 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-0-10&quot;&gt;
&lt;path d=&quot;M 0.265625 -3.875 L 3.578125 -3.875 C 3.691406 -4.457031 3.757812 -5.109375 3.78125 -5.828125 L 0.90625 -5.828125 L 0.90625 -6.484375 L 7.75 -6.484375 L 7.75 -5.828125 L 4.484375 -5.828125 C 4.453125 -5.109375 4.378906 -4.457031 4.265625 -3.875 L 8.390625 -3.875 L 8.390625 -3.21875 L 4.125 -3.21875 C 3.695312 -1.320312 2.523438 0.144531 0.609375 1.1875 C 0.484375 1 0.332031 0.800781 0.15625 0.59375 C 1.820312 -0.238281 2.910156 -1.507812 3.421875 -3.21875 L 0.265625 -3.21875 Z M 4.578125 -2.609375 L 5.265625 -2.609375 L 5.265625 -0.40625 C 5.265625 0.0390625 5.46875 0.265625 5.875 0.265625 L 7.03125 0.265625 C 7.414062 0.265625 7.632812 0.0976562 7.6875 -0.234375 C 7.726562 -0.554688 7.757812 -0.972656 7.78125 -1.484375 C 8 -1.398438 8.234375 -1.316406 8.484375 -1.234375 C 8.429688 -0.679688 8.382812 -0.265625 8.34375 0.015625 C 8.269531 0.578125 7.867188 0.859375 7.140625 0.859375 L 5.6875 0.859375 C 4.945312 0.859375 4.578125 0.472656 4.578125 -0.296875 Z M 4.578125 -2.609375 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-0-11&quot;&gt;
&lt;path d=&quot;M 2.640625 -5.53125 L 6.265625 -5.53125 L 6.265625 -7.140625 L 6.9375 -7.140625 L 6.9375 -5.53125 L 8.390625 -5.53125 L 8.390625 -4.921875 L 6.9375 -4.921875 L 6.9375 -1.421875 C 6.9375 -0.703125 6.585938 -0.34375 5.890625 -0.34375 C 5.523438 -0.34375 5.097656 -0.34375 4.609375 -0.34375 C 4.585938 -0.5625 4.546875 -0.816406 4.484375 -1.109375 C 4.929688 -1.066406 5.351562 -1.046875 5.75 -1.046875 C 6.09375 -1.046875 6.265625 -1.238281 6.265625 -1.625 L 6.265625 -4.921875 L 2.640625 -4.921875 Z M 3.6875 0.203125 L 5.953125 0.234375 L 8.5 0.15625 C 8.40625 0.382812 8.316406 0.609375 8.234375 0.828125 L 5.765625 0.859375 L 3.609375 0.796875 C 2.648438 0.785156 1.941406 0.46875 1.484375 -0.15625 C 1.328125 -0.03125 1 0.320312 0.5 0.90625 L 0.15625 0.203125 C 0.582031 -0.203125 0.925781 -0.507812 1.1875 -0.71875 L 1.1875 -3.625 L 0.203125 -3.625 L 0.203125 -4.21875 L 1.84375 -4.21875 L 1.84375 -0.578125 C 2.25 -0.078125 2.863281 0.179688 3.6875 0.203125 Z M 2.984375 -3.921875 L 3.5 -4.296875 C 4.101562 -3.515625 4.570312 -2.898438 4.90625 -2.453125 L 4.328125 -2.03125 C 3.859375 -2.726562 3.410156 -3.359375 2.984375 -3.921875 Z M 1.015625 -7.109375 C 1.390625 -6.679688 1.796875 -6.160156 2.234375 -5.546875 C 2.003906 -5.410156 1.804688 -5.273438 1.640625 -5.140625 C 1.242188 -5.742188 0.867188 -6.28125 0.515625 -6.75 Z M 1.015625 -7.109375 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-0-12&quot;&gt;
&lt;path d=&quot;M 3.703125 -6.78125 L 7.890625 -6.78125 L 7.890625 -3.890625 L 7.25 -3.890625 L 7.25 -4.234375 L 4.34375 -4.234375 L 4.34375 -3.890625 L 3.703125 -3.890625 Z M 0.0625 -1.21875 C 0.613281 -2.03125 1.039062 -2.988281 1.34375 -4.09375 L 0.15625 -4.09375 L 0.15625 -4.65625 L 1.46875 -4.65625 L 1.46875 -5.96875 C 1.113281 -5.914062 0.753906 -5.867188 0.390625 -5.828125 C 0.335938 -6.023438 0.273438 -6.21875 0.203125 -6.40625 C 1.160156 -6.488281 2.125 -6.644531 3.09375 -6.875 L 3.28125 -6.28125 C 2.894531 -6.195312 2.492188 -6.125 2.078125 -6.0625 L 2.078125 -4.65625 L 3.25 -4.65625 L 3.25 -4.09375 L 2.078125 -4.09375 L 2.078125 -2.984375 L 2.40625 -3.265625 C 2.632812 -3.035156 2.960938 -2.671875 3.390625 -2.171875 L 2.890625 -1.75 C 2.566406 -2.164062 2.296875 -2.503906 2.078125 -2.765625 L 2.078125 1.140625 L 1.46875 1.140625 L 1.46875 -2.90625 C 1.175781 -1.9375 0.800781 -1.128906 0.34375 -0.484375 C 0.25 -0.722656 0.15625 -0.96875 0.0625 -1.21875 Z M 3.03125 0.109375 L 5.4375 0.109375 L 5.4375 -1.140625 L 3.53125 -1.140625 L 3.53125 -1.703125 L 5.4375 -1.703125 L 5.4375 -2.84375 L 3.328125 -2.84375 L 3.328125 -3.40625 L 8.234375 -3.40625 L 8.234375 -2.84375 L 6.109375 -2.84375 L 6.109375 -1.703125 L 8.03125 -1.703125 L 8.03125 -1.140625 L 6.109375 -1.140625 L 6.109375 0.109375 L 8.53125 0.109375 L 8.53125 0.671875 L 3.03125 0.671875 Z M 7.25 -6.203125 L 4.34375 -6.203125 L 4.34375 -4.8125 L 7.25 -4.8125 Z M 7.25 -6.203125 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-0-13&quot;&gt;
&lt;path d=&quot;M 1.046875 -6.015625 L 3.21875 -6.015625 C 3.34375 -6.335938 3.476562 -6.726562 3.625 -7.1875 L 4.34375 -6.96875 C 4.195312 -6.613281 4.054688 -6.296875 3.921875 -6.015625 L 7.578125 -6.015625 L 7.578125 1.109375 L 6.90625 1.109375 L 6.90625 0.609375 L 1.71875 0.609375 L 1.71875 1.109375 L 1.046875 1.109375 Z M 1.71875 0 L 6.90625 0 L 6.90625 -1.421875 L 1.71875 -1.421875 Z M 1.71875 -2.015625 L 6.90625 -2.015625 L 6.90625 -3.421875 L 1.71875 -3.421875 Z M 6.90625 -5.40625 L 1.71875 -5.40625 L 1.71875 -4.015625 L 6.90625 -4.015625 Z M 6.90625 -5.40625 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-0-14&quot;&gt;
&lt;path d=&quot;M 4.015625 -5.421875 L 5.265625 -5.421875 C 5.273438 -5.984375 5.273438 -6.5625 5.265625 -7.15625 L 5.96875 -7.15625 C 5.957031 -6.570312 5.945312 -5.992188 5.9375 -5.421875 L 8.21875 -5.421875 C 8.175781 -3.296875 8.117188 -1.585938 8.046875 -0.296875 C 7.984375 0.492188 7.613281 0.894531 6.9375 0.90625 C 6.59375 0.90625 6.210938 0.898438 5.796875 0.890625 C 5.765625 0.648438 5.722656 0.398438 5.671875 0.140625 C 6.054688 0.191406 6.410156 0.222656 6.734375 0.234375 C 7.148438 0.234375 7.363281 0 7.375 -0.46875 C 7.457031 -1.863281 7.507812 -3.300781 7.53125 -4.78125 L 5.9375 -4.78125 C 5.925781 -4.539062 5.914062 -4.300781 5.90625 -4.0625 C 5.882812 -1.851562 5.21875 -0.109375 3.90625 1.171875 C 3.75 0.984375 3.582031 0.796875 3.40625 0.609375 C 4.570312 -0.441406 5.179688 -2.003906 5.234375 -4.078125 C 5.242188 -4.304688 5.25 -4.539062 5.25 -4.78125 L 4.015625 -4.78125 Z M 3.15625 -2.515625 C 3.507812 -1.753906 3.832031 -0.992188 4.125 -0.234375 C 3.875 -0.128906 3.664062 -0.0390625 3.5 0.03125 C 3.457031 -0.0703125 3.414062 -0.175781 3.375 -0.28125 C 2.300781 -0.175781 1.328125 -0.078125 0.453125 0.015625 L 0.15625 -0.65625 C 0.40625 -0.800781 0.609375 -1.03125 0.765625 -1.34375 C 1.035156 -1.894531 1.320312 -2.597656 1.625 -3.453125 L 0.1875 -3.453125 L 0.1875 -4.078125 L 4.265625 -4.078125 L 4.265625 -3.453125 L 2.328125 -3.453125 C 1.847656 -2.253906 1.429688 -1.320312 1.078125 -0.65625 C 1.722656 -0.707031 2.414062 -0.769531 3.15625 -0.84375 C 2.96875 -1.320312 2.769531 -1.789062 2.5625 -2.25 Z M 0.546875 -6.4375 L 3.921875 -6.4375 L 3.921875 -5.8125 L 0.546875 -5.8125 Z M 0.546875 -6.4375 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-0-15&quot;&gt;
&lt;path d=&quot;M 2.484375 -1.953125 C 3.222656 -2.296875 3.910156 -2.691406 4.546875 -3.140625 L 4.546875 -7 L 5.265625 -7 L 5.265625 -3.6875 C 6.128906 -4.375 6.894531 -5.171875 7.5625 -6.078125 L 8.171875 -5.640625 C 7.359375 -4.554688 6.390625 -3.601562 5.265625 -2.78125 L 5.265625 -0.40625 C 5.265625 -0.0195312 5.46875 0.171875 5.875 0.171875 L 6.953125 0.171875 C 7.328125 0.171875 7.546875 -0.015625 7.609375 -0.390625 C 7.691406 -0.765625 7.742188 -1.203125 7.765625 -1.703125 C 8.003906 -1.617188 8.25 -1.539062 8.5 -1.46875 C 8.457031 -0.988281 8.398438 -0.554688 8.328125 -0.171875 C 8.222656 0.472656 7.820312 0.796875 7.125 0.796875 L 5.6875 0.796875 C 4.925781 0.796875 4.546875 0.421875 4.546875 -0.328125 L 4.546875 -2.296875 C 4.023438 -1.960938 3.472656 -1.65625 2.890625 -1.375 C 2.773438 -1.550781 2.640625 -1.742188 2.484375 -1.953125 Z M 0.125 -3 C 1.09375 -4.289062 1.8125 -5.664062 2.28125 -7.125 L 3 -6.921875 C 2.738281 -6.222656 2.453125 -5.566406 2.140625 -4.953125 L 2.140625 1.078125 L 1.4375 1.078125 L 1.4375 -3.6875 C 1.125 -3.175781 0.789062 -2.703125 0.4375 -2.265625 C 0.34375 -2.503906 0.238281 -2.75 0.125 -3 Z M 0.125 -3 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-0-16&quot;&gt;
&lt;path d=&quot;M 0.09375 -1.90625 C 0.71875 -2.863281 1.144531 -3.867188 1.375 -4.921875 L 0.15625 -4.921875 L 0.15625 -5.484375 L 1.4375 -5.484375 L 1.4375 -7.140625 L 2.03125 -7.140625 L 2.03125 -5.484375 L 3.171875 -5.484375 L 3.171875 -4.921875 L 2.03125 -4.921875 L 2.03125 -3.421875 L 2.390625 -3.796875 C 2.753906 -3.492188 3.070312 -3.195312 3.34375 -2.90625 L 2.890625 -2.453125 C 2.628906 -2.753906 2.34375 -3.0625 2.03125 -3.375 L 2.03125 1.078125 L 1.4375 1.078125 L 1.4375 -3.484375 C 1.144531 -2.515625 0.789062 -1.738281 0.375 -1.15625 C 0.300781 -1.394531 0.207031 -1.644531 0.09375 -1.90625 Z M 3.171875 -4.171875 L 8.421875 -4.171875 L 8.421875 -3.578125 L 6.09375 -3.578125 L 6.09375 -0.0625 C 6.09375 0.632812 5.769531 0.984375 5.125 0.984375 C 4.820312 0.992188 4.453125 0.992188 4.015625 0.984375 C 3.984375 0.773438 3.941406 0.539062 3.890625 0.28125 C 4.273438 0.320312 4.628906 0.34375 4.953125 0.34375 C 5.285156 0.34375 5.453125 0.132812 5.453125 -0.28125 L 5.453125 -3.578125 L 3.171875 -3.578125 Z M 3.546875 -6.640625 L 8.03125 -6.640625 L 8.03125 -6.046875 L 3.546875 -6.046875 Z M 6.65625 -2.5 L 7.25 -2.78125 C 7.78125 -1.757812 8.222656 -0.863281 8.578125 -0.09375 L 7.90625 0.203125 C 7.539062 -0.671875 7.125 -1.570312 6.65625 -2.5 Z M 3.953125 -2.78125 L 4.578125 -2.53125 C 4.117188 -1.5 3.660156 -0.585938 3.203125 0.203125 C 3.035156 0.109375 2.832031 0.0078125 2.59375 -0.09375 C 3.039062 -0.8125 3.492188 -1.707031 3.953125 -2.78125 Z M 3.953125 -2.78125 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-0-17&quot;&gt;
&lt;path d=&quot;M 3.28125 -6.578125 L 7.921875 -6.578125 L 7.921875 -2.15625 L 7.265625 -2.15625 L 7.265625 -2.65625 L 3.921875 -2.65625 L 3.921875 -2.15625 L 3.28125 -2.15625 Z M 7.265625 -6 L 3.921875 -6 L 3.921875 -3.25 L 7.265625 -3.25 Z M 3.109375 -1.765625 C 3.140625 -1.523438 3.175781 -1.289062 3.21875 -1.0625 C 2.71875 -0.6875 2.238281 -0.3125 1.78125 0.0625 C 1.675781 0.15625 1.554688 0.28125 1.421875 0.4375 L 0.921875 -0.078125 C 1.097656 -0.253906 1.1875 -0.503906 1.1875 -0.828125 L 1.1875 -3.734375 L 0.125 -3.734375 L 0.125 -4.34375 L 1.84375 -4.34375 L 1.84375 -0.765625 C 2.300781 -1.109375 2.722656 -1.441406 3.109375 -1.765625 Z M 6.015625 -1.34375 L 6.5625 -1.75 C 7.238281 -1.03125 7.914062 -0.257812 8.59375 0.5625 L 8 1.015625 C 7.363281 0.203125 6.703125 -0.582031 6.015625 -1.34375 Z M 4.453125 -1.78125 L 5.015625 -1.375 C 4.347656 -0.5625 3.601562 0.25 2.78125 1.0625 C 2.632812 0.925781 2.460938 0.773438 2.265625 0.609375 C 3.035156 -0.0976562 3.765625 -0.894531 4.453125 -1.78125 Z M 1.375 -7.015625 C 1.925781 -6.453125 2.367188 -5.988281 2.703125 -5.625 L 2.109375 -5.140625 C 1.679688 -5.691406 1.273438 -6.175781 0.890625 -6.59375 Z M 1.375 -7.015625 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-0-18&quot;&gt;
&lt;path d=&quot;M 6.0625 -3.703125 C 6.78125 -3.117188 7.515625 -2.484375 8.265625 -1.796875 C 8.078125 -1.617188 7.90625 -1.445312 7.75 -1.28125 C 7.519531 -1.507812 7.285156 -1.738281 7.046875 -1.96875 C 6.296875 -1.9375 5.523438 -1.898438 4.734375 -1.859375 L 4.734375 0.03125 C 4.734375 0.675781 4.398438 1 3.734375 1 C 3.453125 1 3.085938 0.992188 2.640625 0.984375 C 2.617188 0.773438 2.582031 0.546875 2.53125 0.296875 C 3.007812 0.335938 3.375 0.359375 3.625 0.359375 C 3.925781 0.359375 4.078125 0.207031 4.078125 -0.09375 L 4.078125 -1.828125 C 3.398438 -1.785156 2.707031 -1.742188 2 -1.703125 C 1.6875 -1.691406 1.367188 -1.65625 1.046875 -1.59375 L 0.78125 -2.328125 C 1.144531 -2.390625 1.492188 -2.5 1.828125 -2.65625 C 2.679688 -3.070312 3.476562 -3.492188 4.21875 -3.921875 C 3.238281 -3.847656 2.421875 -3.78125 1.765625 -3.71875 C 1.472656 -3.6875 1.25 -3.65625 1.09375 -3.625 L 0.828125 -4.328125 C 1.097656 -4.398438 1.347656 -4.5 1.578125 -4.625 C 2.285156 -5.019531 2.992188 -5.484375 3.703125 -6.015625 C 2.734375 -5.960938 1.757812 -5.910156 0.78125 -5.859375 C 0.738281 -6.054688 0.6875 -6.253906 0.625 -6.453125 C 3.300781 -6.554688 5.675781 -6.710938 7.75 -6.921875 L 7.890625 -6.328125 C 6.671875 -6.222656 5.429688 -6.128906 4.171875 -6.046875 L 4.515625 -5.8125 C 3.628906 -5.21875 2.816406 -4.71875 2.078125 -4.3125 C 3.328125 -4.382812 4.367188 -4.453125 5.203125 -4.515625 C 5.765625 -4.878906 6.28125 -5.242188 6.75 -5.609375 L 7.296875 -5.15625 C 5.890625 -4.15625 4.253906 -3.21875 2.390625 -2.34375 C 3.503906 -2.375 4.859375 -2.429688 6.453125 -2.515625 C 6.171875 -2.773438 5.890625 -3.023438 5.609375 -3.265625 Z M 5.5625 -0.9375 L 5.984375 -1.390625 C 6.691406 -0.921875 7.472656 -0.359375 8.328125 0.296875 L 7.828125 0.84375 C 7.035156 0.195312 6.28125 -0.394531 5.5625 -0.9375 Z M 2.265625 -1.390625 L 2.8125 -0.953125 C 2.09375 -0.304688 1.335938 0.3125 0.546875 0.90625 C 0.410156 0.75 0.253906 0.582031 0.078125 0.40625 C 0.804688 -0.09375 1.535156 -0.691406 2.265625 -1.390625 Z M 2.265625 -1.390625 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-0-19&quot;&gt;
&lt;path d=&quot;M 6.875 -4.90625 C 7.34375 -4.269531 7.828125 -3.554688 8.328125 -2.765625 C 8.128906 -2.648438 7.921875 -2.519531 7.703125 -2.375 C 7.554688 -2.613281 7.421875 -2.84375 7.296875 -3.0625 C 7.035156 -3.050781 6.765625 -3.035156 6.484375 -3.015625 L 6.484375 -0.171875 C 6.484375 0.171875 6.609375 0.34375 6.859375 0.34375 L 7.28125 0.34375 C 7.550781 0.34375 7.707031 0.203125 7.75 -0.078125 C 7.789062 -0.410156 7.816406 -0.773438 7.828125 -1.171875 C 8.015625 -1.085938 8.238281 -1.003906 8.5 -0.921875 C 8.457031 -0.429688 8.410156 -0.0507812 8.359375 0.21875 C 8.285156 0.707031 7.992188 0.953125 7.484375 0.953125 L 6.75 0.953125 C 6.144531 0.953125 5.84375 0.597656 5.84375 -0.109375 L 5.84375 -2.984375 C 5.519531 -2.960938 5.191406 -2.941406 4.859375 -2.921875 C 4.816406 -1.703125 4.660156 -0.847656 4.390625 -0.359375 C 4.066406 0.253906 3.46875 0.765625 2.59375 1.171875 C 2.46875 0.992188 2.328125 0.804688 2.171875 0.609375 C 2.984375 0.273438 3.523438 -0.160156 3.796875 -0.703125 C 4.046875 -1.128906 4.179688 -1.851562 4.203125 -2.875 C 4.085938 -2.875 3.972656 -2.867188 3.859375 -2.859375 C 3.617188 -2.835938 3.394531 -2.800781 3.1875 -2.75 L 2.890625 -3.40625 C 3.140625 -3.507812 3.335938 -3.644531 3.484375 -3.8125 C 3.898438 -4.3125 4.296875 -4.859375 4.671875 -5.453125 L 2.828125 -5.453125 L 2.828125 -6.046875 L 5.515625 -6.046875 C 5.304688 -6.367188 5.109375 -6.65625 4.921875 -6.90625 L 5.46875 -7.25 C 5.6875 -6.988281 5.925781 -6.675781 6.1875 -6.3125 L 5.796875 -6.046875 L 8.359375 -6.046875 L 8.359375 -5.453125 L 4.9375 -5.453125 L 5.40625 -5.25 C 4.9375 -4.625 4.476562 -4.046875 4.03125 -3.515625 C 5.082031 -3.554688 6.050781 -3.59375 6.9375 -3.625 C 6.726562 -3.96875 6.523438 -4.28125 6.328125 -4.5625 Z M 1.203125 -2.0625 C 1.648438 -2.125 2.226562 -2.210938 2.9375 -2.328125 C 2.894531 -2.097656 2.863281 -1.890625 2.84375 -1.703125 C 2.144531 -1.597656 1.34375 -1.472656 0.4375 -1.328125 L 0.296875 -1.9375 C 0.648438 -2.300781 1.066406 -2.890625 1.546875 -3.703125 C 0.960938 -3.660156 0.546875 -3.628906 0.296875 -3.609375 L 0.140625 -4.1875 C 0.628906 -4.832031 1.160156 -5.820312 1.734375 -7.15625 L 2.375 -6.90625 C 1.832031 -5.84375 1.335938 -4.953125 0.890625 -4.234375 C 1.253906 -4.234375 1.582031 -4.238281 1.875 -4.25 C 2.039062 -4.550781 2.21875 -4.878906 2.40625 -5.234375 L 3.046875 -4.953125 C 2.398438 -3.835938 1.785156 -2.875 1.203125 -2.0625 Z M 0.109375 -0.296875 C 1.035156 -0.472656 2 -0.675781 3 -0.90625 C 2.976562 -0.613281 2.96875 -0.410156 2.96875 -0.296875 C 1.945312 -0.078125 1.054688 0.132812 0.296875 0.34375 Z M 0.109375 -0.296875 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-0-20&quot;&gt;
&lt;path d=&quot;M 4.234375 1.078125 L 3.703125 1.078125 L 3.703125 -3.421875 L 8.15625 -3.421875 L 8.15625 0.3125 C 8.15625 0.800781 7.9375 1.046875 7.5 1.046875 C 7.1875 1.054688 6.941406 1.0625 6.765625 1.0625 C 6.742188 0.90625 6.710938 0.757812 6.671875 0.625 L 6.28125 0.625 L 6.28125 -1.078125 L 5.515625 -1.078125 L 5.515625 0.65625 L 5 0.65625 L 5 -1.078125 L 4.234375 -1.078125 Z M 0.09375 -0.46875 C 0.78125 -0.5625 1.59375 -0.679688 2.53125 -0.828125 C 2.75 -1.578125 2.859375 -2.492188 2.859375 -3.578125 L 2.859375 -6.3125 L 5.234375 -6.3125 C 5.097656 -6.550781 4.972656 -6.757812 4.859375 -6.9375 L 5.5 -7.234375 C 5.65625 -6.972656 5.835938 -6.664062 6.046875 -6.3125 L 8.03125 -6.3125 L 8.03125 -4 L 7.453125 -4 L 7.453125 -4.28125 L 3.4375 -4.28125 L 3.4375 -3.578125 C 3.4375 -1.410156 3.023438 0.15625 2.203125 1.125 C 2.078125 0.945312 1.9375 0.773438 1.78125 0.609375 C 1.988281 0.359375 2.164062 0.0664062 2.3125 -0.265625 C 1.445312 -0.0859375 0.757812 0.0546875 0.25 0.171875 Z M 1.09375 -2.203125 C 1.351562 -2.210938 1.835938 -2.253906 2.546875 -2.328125 C 2.523438 -2.085938 2.503906 -1.898438 2.484375 -1.765625 C 1.378906 -1.671875 0.679688 -1.601562 0.390625 -1.5625 L 0.265625 -2.09375 C 0.554688 -2.375 0.929688 -2.945312 1.390625 -3.8125 C 0.960938 -3.78125 0.585938 -3.75 0.265625 -3.71875 L 0.109375 -4.25 C 0.648438 -5.101562 1.125 -6.066406 1.53125 -7.140625 L 2.1875 -6.90625 C 1.71875 -5.90625 1.265625 -5.035156 0.828125 -4.296875 C 1.003906 -4.296875 1.273438 -4.300781 1.640625 -4.3125 C 1.796875 -4.601562 1.953125 -4.921875 2.109375 -5.265625 L 2.71875 -4.984375 C 2 -3.691406 1.457031 -2.765625 1.09375 -2.203125 Z M 7.453125 -5.78125 L 3.4375 -5.78125 L 3.4375 -4.8125 L 7.453125 -4.8125 Z M 7.265625 0.515625 C 7.484375 0.515625 7.59375 0.390625 7.59375 0.140625 L 7.59375 -1.078125 L 6.796875 -1.078125 L 6.796875 0.5 C 6.941406 0.507812 7.097656 0.515625 7.265625 0.515625 Z M 7.59375 -2.875 L 6.796875 -2.875 L 6.796875 -1.59375 L 7.59375 -1.59375 Z M 5.515625 -1.59375 L 6.28125 -1.59375 L 6.28125 -2.875 L 5.515625 -2.875 Z M 4.234375 -1.59375 L 5 -1.59375 L 5 -2.875 L 4.234375 -2.875 Z M 4.234375 -1.59375 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-0-21&quot;&gt;
&lt;path d=&quot;M 0.09375 -2.5 C 0.78125 -3.445312 1.28125 -4.53125 1.59375 -5.75 L 0.34375 -5.75 L 0.34375 -6.375 L 3.5 -6.375 L 3.5 -5.75 L 2.234375 -5.75 C 2.054688 -5.039062 1.832031 -4.382812 1.5625 -3.78125 L 3.1875 -3.78125 L 3.1875 0.78125 L 2.59375 0.78125 L 2.59375 0.203125 L 1.546875 0.203125 L 1.546875 0.890625 L 0.9375 0.890625 L 0.9375 -2.609375 C 0.789062 -2.367188 0.632812 -2.140625 0.46875 -1.921875 C 0.382812 -2.078125 0.257812 -2.269531 0.09375 -2.5 Z M 4.890625 -5.75 L 4.671875 -3.28125 L 6.65625 -3.28125 L 6.9375 -6.046875 L 3.828125 -6.046875 L 3.828125 -6.65625 L 7.640625 -6.65625 L 7.28125 -3.28125 L 8.171875 -3.28125 C 8.128906 -2.144531 8.085938 -1.15625 8.046875 -0.3125 C 7.992188 0.519531 7.59375 0.9375 6.84375 0.9375 C 6.46875 0.9375 6.046875 0.925781 5.578125 0.90625 C 5.546875 0.707031 5.507812 0.476562 5.46875 0.21875 C 5.925781 0.269531 6.335938 0.296875 6.703125 0.296875 C 7.128906 0.296875 7.359375 0.0546875 7.390625 -0.421875 C 7.441406 -1.046875 7.476562 -1.796875 7.5 -2.671875 L 3.984375 -2.671875 L 4.25 -5.75 Z M 2.59375 -3.203125 L 1.546875 -3.203125 L 1.546875 -0.34375 L 2.59375 -0.34375 Z M 3.53125 -1.53125 L 7.078125 -1.53125 L 7.078125 -0.9375 L 3.53125 -0.9375 Z M 3.53125 -1.53125 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-0-22&quot;&gt;
&lt;path d=&quot;M 0.40625 -3.625 L 3.8125 -3.625 C 3.894531 -3.832031 3.945312 -4.078125 3.96875 -4.359375 L 4.578125 -4.28125 C 4.546875 -4.039062 4.5 -3.820312 4.4375 -3.625 L 6.265625 -3.625 C 6.046875 -3.789062 5.8125 -3.953125 5.5625 -4.109375 L 5.90625 -4.484375 C 6.269531 -4.265625 6.601562 -4.046875 6.90625 -3.828125 L 6.71875 -3.625 L 8.28125 -3.625 L 8.28125 -3.0625 L 5.03125 -3.0625 C 5.6875 -2.4375 6.835938 -2.140625 8.484375 -2.171875 C 8.347656 -1.941406 8.234375 -1.722656 8.140625 -1.515625 C 7.992188 -1.523438 7.851562 -1.539062 7.71875 -1.5625 L 7.71875 1.015625 L 7.125 1.015625 L 7.125 0.546875 L 5.328125 0.546875 L 5.328125 1 L 4.734375 1 L 4.734375 -1.59375 L 7.421875 -1.59375 C 5.804688 -1.8125 4.78125 -2.300781 4.34375 -3.0625 L 4.1875 -3.0625 C 3.875 -2.394531 2.851562 -1.90625 1.125 -1.59375 L 3.828125 -1.59375 L 3.828125 1 L 3.234375 1 L 3.234375 0.546875 L 1.453125 0.546875 L 1.453125 1.015625 L 0.875 1.015625 L 0.875 -1.546875 C 0.71875 -1.515625 0.5625 -1.488281 0.40625 -1.46875 C 0.320312 -1.632812 0.210938 -1.832031 0.078125 -2.0625 C 1.953125 -2.300781 3.078125 -2.632812 3.453125 -3.0625 L 0.40625 -3.0625 Z M 4.71875 -6.6875 L 7.703125 -6.6875 L 7.703125 -4.203125 L 7.125 -4.203125 L 7.125 -4.5 L 5.3125 -4.5 L 5.3125 -4.234375 L 4.71875 -4.234375 Z M 0.859375 -6.6875 L 3.8125 -6.6875 L 3.8125 -4.234375 L 3.21875 -4.234375 L 3.21875 -4.5 L 1.453125 -4.5 L 1.453125 -4.15625 L 0.859375 -4.15625 Z M 7.125 -6.171875 L 5.3125 -6.171875 L 5.3125 -5.03125 L 7.125 -5.03125 Z M 3.21875 -6.171875 L 1.453125 -6.171875 L 1.453125 -5.03125 L 3.21875 -5.03125 Z M 7.125 -1.078125 L 5.328125 -1.078125 L 5.328125 0.03125 L 7.125 0.03125 Z M 3.234375 -1.078125 L 1.453125 -1.078125 L 1.453125 0.03125 L 3.234375 0.03125 Z M 3.234375 -1.078125 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-0-23&quot;&gt;
&lt;path d=&quot;M 0.15625 0.53125 C 2.226562 0.144531 3.5625 -0.46875 4.15625 -1.3125 L 0.28125 -1.3125 L 0.28125 -1.9375 L 4.46875 -1.9375 C 4.65625 -2.519531 4.738281 -3.535156 4.71875 -4.984375 L 5.4375 -4.984375 C 5.4375 -3.546875 5.359375 -2.53125 5.203125 -1.9375 L 8.390625 -1.9375 L 8.390625 -1.3125 L 4.96875 -1.3125 C 4.914062 -1.21875 4.859375 -1.117188 4.796875 -1.015625 C 6.003906 -0.515625 7.179688 0.00390625 8.328125 0.546875 L 7.953125 1.1875 C 6.753906 0.570312 5.566406 0 4.390625 -0.53125 C 3.628906 0.21875 2.351562 0.796875 0.5625 1.203125 C 0.425781 0.953125 0.289062 0.726562 0.15625 0.53125 Z M 0.453125 -5.953125 L 4.296875 -5.953125 C 4.160156 -6.210938 3.972656 -6.507812 3.734375 -6.84375 L 4.359375 -7.1875 C 4.535156 -6.9375 4.757812 -6.613281 5.03125 -6.21875 L 4.5625 -5.953125 L 8.171875 -5.953125 L 8.171875 -4.453125 L 7.5 -4.453125 L 7.5 -5.328125 L 1.125 -5.328125 L 1.125 -4.453125 L 0.453125 -4.453125 Z M 1.484375 -3.6875 C 2.128906 -3.394531 2.734375 -3.085938 3.296875 -2.765625 L 2.9375 -2.1875 C 2.375 -2.53125 1.78125 -2.847656 1.15625 -3.140625 Z M 2.234375 -4.96875 C 2.890625 -4.65625 3.484375 -4.335938 4.015625 -4.015625 L 3.640625 -3.453125 C 3.117188 -3.785156 2.539062 -4.128906 1.90625 -4.484375 Z M 2.234375 -4.96875 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-0-24&quot;&gt;
&lt;path d=&quot;M 1.296875 -5.546875 L 1.109375 -3.234375 L 1.953125 -3.234375 L 2.171875 -6.0625 L 0.265625 -6.0625 L 0.265625 -6.640625 L 2.8125 -6.640625 L 2.546875 -3.234375 L 3.078125 -3.234375 C 3.046875 -2.046875 3.007812 -1.070312 2.96875 -0.3125 C 2.957031 0.539062 2.585938 0.96875 1.859375 0.96875 C 1.554688 0.96875 1.203125 0.960938 0.796875 0.953125 C 0.765625 0.742188 0.726562 0.519531 0.6875 0.28125 C 1.082031 0.332031 1.441406 0.359375 1.765625 0.359375 C 2.148438 0.359375 2.359375 0.117188 2.390625 -0.359375 C 2.421875 -0.972656 2.445312 -1.738281 2.46875 -2.65625 L 0.453125 -2.65625 L 0.71875 -5.546875 Z M 3.15625 0.140625 L 6.1875 0.140625 C 6.59375 -0.859375 6.953125 -1.90625 7.265625 -3 L 7.90625 -2.796875 C 7.570312 -1.785156 7.222656 -0.804688 6.859375 0.140625 L 8.34375 0.140625 L 8.34375 0.71875 L 3.15625 0.71875 Z M 6.203125 -7.109375 L 6.046875 -6.84375 C 6.722656 -5.632812 7.566406 -4.753906 8.578125 -4.203125 C 8.398438 -3.984375 8.25 -3.789062 8.125 -3.625 C 7.132812 -4.351562 6.328125 -5.226562 5.703125 -6.25 C 5.140625 -5.238281 4.34375 -4.328125 3.3125 -3.515625 C 3.207031 -3.660156 3.066406 -3.835938 2.890625 -4.046875 C 4.003906 -4.816406 4.859375 -5.835938 5.453125 -7.109375 Z M 4.015625 -4.015625 L 7.484375 -4.015625 L 7.484375 -3.4375 L 4.015625 -3.4375 Z M 5.03125 -2.9375 L 5.625 -3.09375 C 5.863281 -2.25 6.054688 -1.515625 6.203125 -0.890625 L 5.59375 -0.71875 C 5.425781 -1.488281 5.238281 -2.226562 5.03125 -2.9375 Z M 3.578125 -2.5625 L 4.171875 -2.734375 C 4.441406 -1.941406 4.671875 -1.234375 4.859375 -0.609375 L 4.234375 -0.40625 C 4.046875 -1.125 3.828125 -1.84375 3.578125 -2.5625 Z M 0.046875 -1.390625 C 0.703125 -1.523438 1.421875 -1.679688 2.203125 -1.859375 C 2.191406 -1.640625 2.191406 -1.441406 2.203125 -1.265625 C 1.566406 -1.128906 0.890625 -0.960938 0.171875 -0.765625 Z M 0.046875 -1.390625 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-0-25&quot;&gt;
&lt;path d=&quot;M 0.171875 0.203125 L 3.96875 0.203125 L 3.96875 -0.78125 L 0.953125 -0.78125 L 0.953125 -1.375 L 3.96875 -1.375 L 3.96875 -2.34375 C 3.382812 -2.3125 2.8125 -2.285156 2.25 -2.265625 C 1.976562 -2.242188 1.703125 -2.207031 1.421875 -2.15625 L 1.125 -2.84375 C 1.34375 -2.9375 1.570312 -3.0625 1.8125 -3.21875 C 2.207031 -3.488281 2.570312 -3.757812 2.90625 -4.03125 L 1.375 -4.03125 L 1.375 -4.625 L 7.3125 -4.625 L 7.3125 -4.03125 L 3.890625 -4.03125 C 3.441406 -3.664062 2.925781 -3.28125 2.34375 -2.875 C 3.5625 -2.914062 4.773438 -2.960938 5.984375 -3.015625 C 5.804688 -3.171875 5.617188 -3.335938 5.421875 -3.515625 L 5.890625 -3.921875 C 6.597656 -3.367188 7.210938 -2.847656 7.734375 -2.359375 L 7.1875 -1.84375 C 7.007812 -2.03125 6.816406 -2.226562 6.609375 -2.4375 C 5.941406 -2.414062 5.289062 -2.390625 4.65625 -2.359375 L 4.65625 -1.375 L 7.6875 -1.375 L 7.6875 -0.78125 L 4.65625 -0.78125 L 4.65625 0.203125 L 8.46875 0.203125 L 8.46875 0.78125 L 0.171875 0.78125 Z M 0.484375 -6.0625 L 4.171875 -6.0625 C 4.015625 -6.375 3.835938 -6.675781 3.640625 -6.96875 L 4.234375 -7.25 C 4.441406 -6.945312 4.644531 -6.617188 4.84375 -6.265625 L 4.421875 -6.0625 L 8.171875 -6.0625 L 8.171875 -4.546875 L 7.5 -4.546875 L 7.5 -5.484375 L 1.15625 -5.484375 L 1.15625 -4.546875 L 0.484375 -4.546875 Z M 0.484375 -6.0625 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-0-26&quot;&gt;
&lt;path d=&quot;M 3.25 -0.921875 L 3.609375 -1.421875 C 4.253906 -1.066406 4.875 -0.71875 5.46875 -0.375 L 7.09375 -1.984375 L 3.515625 -1.984375 L 3.515625 -2.578125 C 3.628906 -2.929688 3.738281 -3.28125 3.84375 -3.625 L 2.515625 -3.625 L 2.515625 -4.21875 L 4.015625 -4.21875 C 4.117188 -4.59375 4.21875 -4.960938 4.3125 -5.328125 L 2.9375 -5.328125 L 2.9375 -5.921875 L 4.46875 -5.921875 C 4.5625 -6.316406 4.648438 -6.703125 4.734375 -7.078125 L 5.46875 -7.078125 C 5.375 -6.703125 5.28125 -6.316406 5.1875 -5.921875 L 8.15625 -5.921875 L 8.15625 -5.328125 L 5.03125 -5.328125 C 4.9375 -4.960938 4.832031 -4.59375 4.71875 -4.21875 L 8.484375 -4.21875 L 8.484375 -3.625 L 4.546875 -3.625 C 4.453125 -3.28125 4.347656 -2.929688 4.234375 -2.578125 L 7.953125 -2.578125 L 7.953125 -1.953125 L 6.046875 -0.03125 C 6.390625 0.175781 6.726562 0.390625 7.0625 0.609375 L 6.625 1.171875 C 5.4375 0.359375 4.3125 -0.335938 3.25 -0.921875 Z M 0.125 -3.015625 C 0.90625 -4.171875 1.523438 -5.546875 1.984375 -7.140625 L 2.65625 -6.9375 C 2.445312 -6.28125 2.222656 -5.671875 1.984375 -5.109375 L 1.984375 1.078125 L 1.328125 1.078125 L 1.328125 -3.71875 C 1.035156 -3.195312 0.726562 -2.71875 0.40625 -2.28125 C 0.320312 -2.519531 0.226562 -2.765625 0.125 -3.015625 Z M 0.125 -3.015625 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-0-27&quot;&gt;
&lt;path d=&quot;M 0.84375 -2.984375 L 1.59375 -2.984375 L 1.59375 -4.515625 L 2.15625 -4.515625 L 2.15625 -2.984375 L 2.96875 -2.984375 L 2.96875 -2.4375 L 2.15625 -2.4375 L 2.15625 -1.28125 C 2.457031 -1.3125 2.757812 -1.351562 3.0625 -1.40625 C 3.039062 -1.195312 3.019531 -1.003906 3 -0.828125 C 2.71875 -0.785156 2.4375 -0.75 2.15625 -0.71875 L 2.15625 1.171875 L 1.59375 1.171875 L 1.59375 -0.625 C 1.144531 -0.5625 0.691406 -0.492188 0.234375 -0.421875 L 0.140625 -1.03125 C 0.617188 -1.082031 1.101562 -1.140625 1.59375 -1.203125 L 1.59375 -2.4375 L 0.25 -2.4375 L 0.25 -3.015625 C 0.46875 -3.609375 0.691406 -4.367188 0.921875 -5.296875 L 0.171875 -5.296875 L 0.171875 -5.84375 L 1.046875 -5.84375 C 1.148438 -6.25 1.25 -6.679688 1.34375 -7.140625 L 1.953125 -7 C 1.847656 -6.59375 1.75 -6.207031 1.65625 -5.84375 L 3.171875 -5.84375 L 3.171875 -5.296875 L 1.5 -5.296875 C 1.257812 -4.390625 1.039062 -3.617188 0.84375 -2.984375 Z M 3.796875 1.15625 L 3.25 1.15625 L 3.25 -3.8125 L 5.484375 -3.8125 L 5.484375 0.328125 C 5.484375 0.828125 5.257812 1.078125 4.8125 1.078125 C 4.632812 1.078125 4.414062 1.070312 4.15625 1.0625 C 4.125 0.9375 4.082031 0.765625 4.03125 0.546875 C 4.257812 0.554688 4.46875 0.5625 4.65625 0.5625 C 4.851562 0.5625 4.953125 0.453125 4.953125 0.234375 L 4.953125 -0.75 L 3.796875 -0.75 Z M 6.21875 -7.078125 L 6.078125 -6.890625 C 6.734375 -5.898438 7.554688 -5.191406 8.546875 -4.765625 C 8.359375 -4.546875 8.210938 -4.351562 8.109375 -4.1875 C 7.722656 -4.40625 7.367188 -4.648438 7.046875 -4.921875 L 7.046875 -4.5 L 4.125 -4.5 L 4.125 -4.859375 C 3.789062 -4.585938 3.445312 -4.335938 3.09375 -4.109375 C 2.925781 -4.328125 2.773438 -4.5 2.640625 -4.625 C 3.765625 -5.269531 4.664062 -6.085938 5.34375 -7.078125 Z M 7.484375 -3.96875 L 8.046875 -3.96875 L 8.046875 0.140625 C 8.046875 0.765625 7.785156 1.078125 7.265625 1.078125 C 6.972656 1.085938 6.644531 1.082031 6.28125 1.0625 C 6.25 0.851562 6.207031 0.644531 6.15625 0.4375 C 6.507812 0.476562 6.8125 0.5 7.0625 0.5 C 7.34375 0.5 7.484375 0.351562 7.484375 0.0625 Z M 5.671875 -6.453125 C 5.242188 -5.929688 4.785156 -5.457031 4.296875 -5.03125 L 6.921875 -5.03125 C 6.441406 -5.4375 6.023438 -5.910156 5.671875 -6.453125 Z M 6.1875 -3.5625 L 6.734375 -3.5625 L 6.734375 -0.5 L 6.1875 -0.5 Z M 3.796875 -1.21875 L 4.953125 -1.21875 L 4.953125 -2.03125 L 3.796875 -2.03125 Z M 4.953125 -3.296875 L 3.796875 -3.296875 L 3.796875 -2.5 L 4.953125 -2.5 Z M 4.953125 -3.296875 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-0-28&quot;&gt;
&lt;path d=&quot;M 0.53125 1.140625 C 0.363281 0.921875 0.207031 0.722656 0.0625 0.546875 C 0.757812 -0.421875 1.109375 -1.820312 1.109375 -3.65625 L 1.109375 -6.765625 L 8.03125 -6.765625 L 8.03125 -4.109375 L 7.390625 -4.109375 L 7.390625 -4.421875 L 1.75 -4.421875 L 1.75 -3.515625 C 1.75 -1.617188 1.34375 -0.0664062 0.53125 1.140625 Z M 5.78125 -0.75 L 6.234375 -1.15625 C 7.066406 -0.4375 7.726562 0.1875 8.21875 0.71875 L 7.703125 1.171875 C 7.523438 0.984375 7.351562 0.796875 7.1875 0.609375 C 5.46875 0.617188 4.066406 0.664062 2.984375 0.75 C 2.828125 0.757812 2.628906 0.796875 2.390625 0.859375 L 2.109375 0.234375 C 2.441406 0.0976562 2.703125 -0.046875 2.890625 -0.203125 C 3.210938 -0.515625 3.554688 -0.910156 3.921875 -1.390625 L 1.859375 -1.390625 L 1.859375 -1.984375 L 8.46875 -1.984375 L 8.46875 -1.390625 L 4.78125 -1.390625 C 4.3125 -0.804688 3.875 -0.3125 3.46875 0.09375 C 4.519531 0.0820312 5.578125 0.0664062 6.640625 0.046875 C 6.359375 -0.222656 6.070312 -0.488281 5.78125 -0.75 Z M 1.75 -6.171875 L 1.75 -5.015625 L 7.390625 -5.015625 L 7.390625 -6.171875 Z M 2.453125 -3.515625 L 7.71875 -3.515625 L 7.71875 -2.921875 L 2.453125 -2.921875 Z M 2.453125 -3.515625 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-0-29&quot;&gt;
&lt;path d=&quot;M 3.21875 -3.328125 L 3.21875 -3.890625 L 5.390625 -3.890625 L 5.390625 -5.171875 L 3.1875 -5.171875 L 3.1875 -5.796875 L 5.390625 -5.796875 L 5.390625 -7.140625 L 6.0625 -7.140625 L 6.0625 -5.796875 L 8.359375 -5.796875 L 8.359375 -5.171875 L 6.0625 -5.171875 L 6.0625 -3.890625 L 7.859375 -3.890625 L 7.859375 -3.375 C 7.460938 -2.257812 6.898438 -1.351562 6.171875 -0.65625 C 6.804688 -0.15625 7.585938 0.222656 8.515625 0.484375 C 8.304688 0.734375 8.125 0.953125 7.96875 1.140625 C 7.0625 0.765625 6.289062 0.3125 5.65625 -0.21875 C 4.914062 0.332031 4.050781 0.804688 3.0625 1.203125 C 2.945312 1.023438 2.800781 0.828125 2.625 0.609375 C 3.625 0.273438 4.476562 -0.144531 5.1875 -0.65625 C 4.5625 -1.34375 4.09375 -2.234375 3.78125 -3.328125 Z M 0.09375 -2.703125 C 0.519531 -2.828125 0.929688 -2.945312 1.328125 -3.0625 L 1.328125 -4.875 L 0.203125 -4.875 L 0.203125 -5.46875 L 1.328125 -5.46875 L 1.328125 -7.09375 L 1.984375 -7.09375 L 1.984375 -5.46875 L 2.96875 -5.46875 L 2.96875 -4.875 L 1.984375 -4.875 L 1.984375 -3.265625 C 2.304688 -3.367188 2.617188 -3.472656 2.921875 -3.578125 C 2.921875 -3.304688 2.925781 -3.085938 2.9375 -2.921875 C 2.625 -2.816406 2.304688 -2.710938 1.984375 -2.609375 L 1.984375 0.109375 C 1.984375 0.703125 1.703125 1 1.140625 1 C 0.910156 1.007812 0.640625 1.007812 0.328125 1 C 0.296875 0.769531 0.257812 0.535156 0.21875 0.296875 C 0.550781 0.328125 0.800781 0.34375 0.96875 0.34375 C 1.207031 0.34375 1.328125 0.21875 1.328125 -0.03125 L 1.328125 -2.390625 C 0.953125 -2.265625 0.570312 -2.140625 0.1875 -2.015625 Z M 7.125 -3.328125 L 4.4375 -3.328125 C 4.6875 -2.441406 5.109375 -1.691406 5.703125 -1.078125 C 6.359375 -1.710938 6.832031 -2.460938 7.125 -3.328125 Z M 7.125 -3.328125 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-0-30&quot;&gt;
&lt;path d=&quot;M 8.5625 -0.546875 C 8.351562 -0.316406 8.171875 -0.09375 8.015625 0.125 C 6.617188 -0.863281 5.5 -2.265625 4.65625 -4.078125 L 4.65625 1.140625 L 3.984375 1.140625 L 3.984375 -4.09375 C 3.203125 -2.40625 2.054688 -0.960938 0.546875 0.234375 C 0.410156 0.0546875 0.242188 -0.15625 0.046875 -0.40625 C 1.554688 -1.5 2.757812 -2.867188 3.65625 -4.515625 L 0.3125 -4.515625 L 0.3125 -5.140625 L 3.984375 -5.140625 L 3.984375 -7.1875 L 4.65625 -7.1875 L 4.65625 -5.140625 L 8.34375 -5.140625 L 8.34375 -4.515625 L 4.96875 -4.515625 C 5.90625 -2.679688 7.101562 -1.359375 8.5625 -0.546875 Z M 5.484375 -6.578125 L 5.90625 -7.046875 C 6.394531 -6.722656 6.878906 -6.359375 7.359375 -5.953125 L 6.890625 -5.421875 C 6.421875 -5.835938 5.953125 -6.222656 5.484375 -6.578125 Z M 5.484375 -6.578125 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-0-31&quot;&gt;
&lt;path d=&quot;M 3.5 -0.203125 L 2.890625 -0.203125 L 2.890625 -4.9375 L 4.921875 -4.9375 C 4.503906 -5.15625 4.070312 -5.375 3.625 -5.59375 L 3.96875 -6 C 4.40625 -5.78125 4.816406 -5.570312 5.203125 -5.375 L 6.71875 -6.171875 L 2.765625 -6.171875 L 2.765625 -6.703125 L 7.828125 -6.703125 L 7.828125 -6.140625 L 5.796875 -5.09375 C 5.890625 -5.039062 5.984375 -4.988281 6.078125 -4.9375 L 7.890625 -4.9375 L 7.890625 -1.140625 C 7.890625 -0.492188 7.59375 -0.171875 7 -0.171875 C 6.707031 -0.171875 6.390625 -0.179688 6.046875 -0.203125 C 6.015625 -0.410156 5.972656 -0.625 5.921875 -0.84375 C 6.273438 -0.800781 6.578125 -0.78125 6.828125 -0.78125 C 7.128906 -0.78125 7.28125 -0.925781 7.28125 -1.21875 L 7.28125 -1.640625 L 5.671875 -1.640625 L 5.671875 -0.328125 L 5.078125 -0.328125 L 5.078125 -1.640625 L 3.5 -1.640625 Z M 3.59375 0.265625 L 5.6875 0.296875 L 8.484375 0.234375 C 8.421875 0.421875 8.34375 0.640625 8.25 0.890625 L 5.46875 0.90625 L 3.46875 0.859375 C 2.507812 0.847656 1.835938 0.519531 1.453125 -0.125 C 1.222656 0.09375 0.890625 0.46875 0.453125 1 L 0.09375 0.3125 C 0.59375 -0.164062 0.953125 -0.507812 1.171875 -0.71875 L 1.171875 -3.5625 L 0.171875 -3.5625 L 0.171875 -4.1875 L 1.828125 -4.1875 L 1.828125 -0.578125 C 2.171875 -0.0234375 2.757812 0.253906 3.59375 0.265625 Z M 1.15625 -7.015625 C 1.4375 -6.660156 1.828125 -6.128906 2.328125 -5.421875 L 1.734375 -5 C 1.273438 -5.707031 0.898438 -6.257812 0.609375 -6.65625 Z M 7.28125 -4.40625 L 5.671875 -4.40625 L 5.671875 -3.5625 L 7.28125 -3.5625 Z M 5.671875 -2.171875 L 7.28125 -2.171875 L 7.28125 -3.015625 L 5.671875 -3.015625 Z M 3.5 -3.5625 L 5.078125 -3.5625 L 5.078125 -4.40625 L 3.5 -4.40625 Z M 3.5 -2.171875 L 5.078125 -2.171875 L 5.078125 -3.015625 L 3.5 -3.015625 Z M 3.5 -2.171875 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-0-32&quot;&gt;
&lt;path d=&quot;M 3.09375 -1.9375 L 7.890625 -1.9375 L 7.890625 1.15625 L 7.25 1.15625 L 7.25 0.640625 L 3.75 0.640625 L 3.75 1.15625 L 3.09375 1.15625 Z M 0.109375 -3.109375 C 0.929688 -4.328125 1.550781 -5.675781 1.96875 -7.15625 L 2.625 -6.984375 C 2.382812 -6.222656 2.117188 -5.523438 1.828125 -4.890625 L 1.828125 1.15625 L 1.203125 1.15625 L 1.203125 -3.65625 C 0.941406 -3.207031 0.671875 -2.789062 0.390625 -2.40625 C 0.296875 -2.644531 0.203125 -2.878906 0.109375 -3.109375 Z M 7.25 -1.359375 L 3.75 -1.359375 L 3.75 0.078125 L 7.25 0.078125 Z M 2.546875 -6.03125 L 5.296875 -6.03125 C 5.128906 -6.3125 4.953125 -6.597656 4.765625 -6.890625 L 5.328125 -7.1875 C 5.535156 -6.875 5.738281 -6.550781 5.9375 -6.21875 L 5.5625 -6.03125 L 8.46875 -6.03125 L 8.46875 -5.4375 L 2.546875 -5.4375 Z M 3 -4.65625 L 7.96875 -4.65625 L 7.96875 -4.078125 L 3 -4.078125 Z M 3 -3.296875 L 7.96875 -3.296875 L 7.96875 -2.71875 L 3 -2.71875 Z M 3 -3.296875 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-0-33&quot;&gt;
&lt;path d=&quot;M 4.15625 0.984375 L 4.15625 -1.6875 L 1.703125 -1.6875 C 1.609375 -0.519531 1.269531 0.445312 0.6875 1.21875 C 0.539062 1.03125 0.375 0.835938 0.1875 0.640625 C 0.550781 0.117188 0.800781 -0.453125 0.9375 -1.078125 C 1.0625 -1.679688 1.125 -2.539062 1.125 -3.65625 L 1.125 -6.671875 L 7.984375 -6.671875 L 7.984375 0.03125 C 7.984375 0.695312 7.664062 1.03125 7.03125 1.03125 C 6.644531 1.03125 6.210938 1.019531 5.734375 1 C 5.703125 0.820312 5.65625 0.59375 5.59375 0.3125 C 6.082031 0.34375 6.476562 0.359375 6.78125 0.359375 C 7.132812 0.359375 7.3125 0.191406 7.3125 -0.140625 L 7.3125 -1.6875 L 4.828125 -1.6875 L 4.828125 0.984375 Z M 4.828125 -2.296875 L 7.3125 -2.296875 L 7.3125 -3.875 L 4.828125 -3.875 Z M 7.3125 -6.046875 L 4.828125 -6.046875 L 4.828125 -4.484375 L 7.3125 -4.484375 Z M 1.75 -2.296875 L 4.15625 -2.296875 L 4.15625 -3.875 L 1.796875 -3.875 C 1.804688 -3.320312 1.789062 -2.796875 1.75 -2.296875 Z M 1.796875 -6.046875 L 1.796875 -4.484375 L 4.15625 -4.484375 L 4.15625 -6.046875 Z M 1.796875 -6.046875 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-0-34&quot;&gt;
&lt;path d=&quot;M 4 -6.921875 L 4.609375 -7.25 C 4.859375 -6.9375 5.09375 -6.601562 5.3125 -6.25 L 4.890625 -6.015625 L 8.3125 -6.015625 L 8.3125 -5.375 L 1.75 -5.375 L 1.75 -3.3125 C 1.75 -1.320312 1.335938 0.164062 0.515625 1.15625 C 0.378906 0.96875 0.21875 0.769531 0.03125 0.5625 C 0.707031 -0.1875 1.046875 -1.472656 1.046875 -3.296875 L 1.046875 -6.015625 L 4.609375 -6.015625 C 4.421875 -6.316406 4.21875 -6.617188 4 -6.921875 Z M 1.703125 0.015625 L 5.59375 0.015625 C 6.03125 -1.109375 6.492188 -2.644531 6.984375 -4.59375 L 7.71875 -4.390625 C 7.195312 -2.535156 6.734375 -1.066406 6.328125 0.015625 L 8.40625 0.015625 L 8.40625 0.65625 L 1.703125 0.65625 Z M 2.15625 -4.125 L 2.796875 -4.34375 C 3.140625 -3.320312 3.476562 -2.175781 3.8125 -0.90625 L 3.09375 -0.6875 C 2.832031 -1.800781 2.519531 -2.945312 2.15625 -4.125 Z M 4.1875 -4.546875 L 4.828125 -4.734375 C 5.117188 -3.722656 5.378906 -2.585938 5.609375 -1.328125 L 4.875 -1.140625 C 4.707031 -2.253906 4.476562 -3.390625 4.1875 -4.546875 Z M 4.1875 -4.546875 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-0-35&quot;&gt;
&lt;path d=&quot;M 5.40625 -5.453125 L 6.015625 -5.453125 L 6.015625 -4.203125 C 6.015625 -3.441406 5.960938 -2.785156 5.859375 -2.234375 L 6.40625 -2.234375 L 6.40625 -0.140625 C 6.40625 0.179688 6.5625 0.34375 6.875 0.34375 L 7.28125 0.34375 C 7.5625 0.34375 7.71875 0.195312 7.75 -0.09375 C 7.789062 -0.414062 7.820312 -0.789062 7.84375 -1.21875 C 8.101562 -1.101562 8.320312 -1.015625 8.5 -0.953125 C 8.46875 -0.554688 8.425781 -0.203125 8.375 0.109375 C 8.289062 0.660156 7.96875 0.9375 7.40625 0.9375 L 6.703125 0.9375 C 6.097656 0.9375 5.796875 0.609375 5.796875 -0.046875 L 5.796875 -1.96875 C 5.546875 -0.863281 4.773438 0.1875 3.484375 1.1875 C 3.253906 0.925781 3.082031 0.742188 2.96875 0.640625 C 3.96875 -0.0859375 4.625 -0.800781 4.9375 -1.5 C 5.25 -2.09375 5.40625 -2.992188 5.40625 -4.203125 Z M 0.1875 -3.453125 L 1.484375 -3.453125 C 1.492188 -3.722656 1.5 -4.222656 1.5 -4.953125 L 0.296875 -4.953125 L 0.296875 -5.53125 L 1.5 -5.53125 L 1.5 -7.09375 L 2.125 -7.09375 L 2.125 -5.53125 L 3.34375 -5.53125 L 3.34375 -4.953125 L 2.125 -4.953125 C 2.125 -4.535156 2.117188 -4.035156 2.109375 -3.453125 L 3.484375 -3.453125 L 3.484375 -2.875 L 2.078125 -2.875 C 2.078125 -2.695312 2.0625 -2.515625 2.03125 -2.328125 C 2.570312 -1.835938 3.144531 -1.28125 3.75 -0.65625 L 3.234375 -0.171875 C 2.816406 -0.691406 2.378906 -1.191406 1.921875 -1.671875 C 1.671875 -0.609375 1.207031 0.316406 0.53125 1.109375 C 0.425781 0.953125 0.289062 0.753906 0.125 0.515625 C 0.96875 -0.535156 1.410156 -1.664062 1.453125 -2.875 L 0.1875 -2.875 Z M 3.71875 -6.75 L 7.8125 -6.75 L 7.8125 -1.703125 L 7.1875 -1.703125 L 7.1875 -6.140625 L 4.34375 -6.140625 L 4.34375 -1.578125 L 3.71875 -1.578125 Z M 3.71875 -6.75 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-0-36&quot;&gt;
&lt;path d=&quot;M 3.5 -4.5 L 7.515625 -4.5 C 7.472656 -3.664062 7.429688 -2.988281 7.390625 -2.46875 C 7.316406 -1.664062 6.894531 -1.265625 6.125 -1.265625 C 5.800781 -1.265625 5.425781 -1.273438 5 -1.296875 C 4.96875 -1.515625 4.925781 -1.757812 4.875 -2.03125 C 5.363281 -1.957031 5.773438 -1.921875 6.109375 -1.921875 C 6.460938 -1.921875 6.664062 -2.097656 6.71875 -2.453125 C 6.757812 -2.828125 6.789062 -3.3125 6.8125 -3.90625 L 4.171875 -3.90625 L 4.171875 -0.265625 C 4.171875 0.078125 4.347656 0.25 4.703125 0.25 L 6.90625 0.25 C 7.351562 0.269531 7.609375 0.101562 7.671875 -0.25 C 7.753906 -0.6875 7.804688 -1.113281 7.828125 -1.53125 C 8.054688 -1.4375 8.28125 -1.351562 8.5 -1.28125 C 8.457031 -0.894531 8.394531 -0.476562 8.3125 -0.03125 C 8.207031 0.59375 7.757812 0.890625 6.96875 0.859375 L 4.5 0.859375 C 3.832031 0.847656 3.5 0.515625 3.5 -0.140625 Z M 0.203125 -6.265625 L 2.515625 -6.265625 L 2.515625 -7.1875 L 3.1875 -7.1875 L 3.1875 -6.265625 L 5.453125 -6.265625 L 5.453125 -7.1875 L 6.125 -7.1875 L 6.125 -6.265625 L 8.453125 -6.265625 L 8.453125 -5.671875 L 6.125 -5.671875 L 6.125 -4.9375 L 5.453125 -4.9375 L 5.453125 -5.671875 L 3.1875 -5.671875 L 3.1875 -4.9375 L 2.515625 -4.9375 L 2.515625 -5.671875 L 0.203125 -5.671875 Z M 2.0625 -2.09375 C 2.21875 -1.976562 2.414062 -1.84375 2.65625 -1.6875 C 1.976562 -0.476562 1.457031 0.410156 1.09375 0.984375 L 0.46875 0.5625 C 1.039062 -0.25 1.570312 -1.132812 2.0625 -2.09375 Z M 1.5 -5.09375 C 2.101562 -4.675781 2.570312 -4.332031 2.90625 -4.0625 L 2.453125 -3.53125 C 1.960938 -3.96875 1.515625 -4.332031 1.109375 -4.625 Z M 0.578125 -3.703125 C 1.109375 -3.335938 1.5625 -2.992188 1.9375 -2.671875 L 1.515625 -2.140625 C 0.953125 -2.640625 0.503906 -2.992188 0.171875 -3.203125 Z M 0.578125 -3.703125 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-0-37&quot;&gt;
&lt;path d=&quot;M 2.21875 -1.40625 C 2.957031 -1.070312 3.757812 -0.703125 4.625 -0.296875 L 6.53125 -1.9375 L 1.8125 -1.9375 L 1.8125 -2.5625 L 2.21875 -3.609375 L 0.203125 -3.609375 L 0.203125 -4.25 L 2.46875 -4.25 L 2.921875 -5.40625 L 0.71875 -5.40625 L 0.71875 -6.046875 L 3.171875 -6.046875 L 3.625 -7.15625 L 4.390625 -7.15625 L 3.953125 -6.046875 L 7.9375 -6.046875 L 7.9375 -5.40625 L 3.6875 -5.40625 L 3.234375 -4.25 L 8.46875 -4.25 L 8.46875 -3.609375 L 2.984375 -3.609375 L 2.578125 -2.578125 L 7.484375 -2.578125 L 7.484375 -1.921875 L 5.25 0 C 5.625 0.175781 6.007812 0.363281 6.40625 0.5625 L 6 1.203125 C 4.59375 0.460938 3.210938 -0.21875 1.859375 -0.84375 Z M 2.21875 -1.40625 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-1-0&quot;&gt;
&lt;path d=&quot;M 1.078125 0 L 1.078125 -5.390625 L 5.390625 -5.390625 L 5.390625 0 Z M 1.21875 -0.140625 L 5.25 -0.140625 L 5.25 -5.25 L 1.21875 -5.25 Z M 1.21875 -0.140625 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-1-1&quot;&gt;
&lt;path d=&quot;M 0.671875 0 L 0.671875 -6.171875 L 3.421875 -6.171875 C 3.960938 -6.171875 4.375 -6.113281 4.65625 -6 C 4.945312 -5.894531 5.175781 -5.703125 5.34375 -5.421875 C 5.519531 -5.140625 5.609375 -4.828125 5.609375 -4.484375 C 5.609375 -4.046875 5.46875 -3.675781 5.1875 -3.375 C 4.90625 -3.082031 4.46875 -2.894531 3.875 -2.8125 C 4.09375 -2.707031 4.257812 -2.601562 4.375 -2.5 C 4.601562 -2.28125 4.828125 -2.007812 5.046875 -1.6875 L 6.125 0 L 5.09375 0 L 4.28125 -1.28125 C 4.039062 -1.65625 3.84375 -1.941406 3.6875 -2.140625 C 3.53125 -2.335938 3.390625 -2.472656 3.265625 -2.546875 C 3.148438 -2.628906 3.023438 -2.6875 2.890625 -2.71875 C 2.804688 -2.726562 2.65625 -2.734375 2.4375 -2.734375 L 1.5 -2.734375 L 1.5 0 Z M 1.5 -3.453125 L 3.25 -3.453125 C 3.625 -3.453125 3.914062 -3.488281 4.125 -3.5625 C 4.332031 -3.644531 4.488281 -3.769531 4.59375 -3.9375 C 4.707031 -4.101562 4.765625 -4.285156 4.765625 -4.484375 C 4.765625 -4.773438 4.660156 -5.015625 4.453125 -5.203125 C 4.242188 -5.390625 3.910156 -5.484375 3.453125 -5.484375 L 1.5 -5.484375 Z M 1.5 -3.453125 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-1-2&quot;&gt;
&lt;path d=&quot;M 0.390625 -1.984375 L 1.15625 -2.046875 C 1.195312 -1.742188 1.28125 -1.492188 1.40625 -1.296875 C 1.539062 -1.097656 1.75 -0.9375 2.03125 -0.8125 C 2.3125 -0.6875 2.628906 -0.625 2.984375 -0.625 C 3.296875 -0.625 3.570312 -0.671875 3.8125 -0.765625 C 4.050781 -0.859375 4.226562 -0.984375 4.34375 -1.140625 C 4.457031 -1.304688 4.515625 -1.484375 4.515625 -1.671875 C 4.515625 -1.867188 4.457031 -2.039062 4.34375 -2.1875 C 4.226562 -2.332031 4.046875 -2.453125 3.796875 -2.546875 C 3.628906 -2.609375 3.257812 -2.707031 2.6875 -2.84375 C 2.125 -2.976562 1.726562 -3.109375 1.5 -3.234375 C 1.207031 -3.390625 0.988281 -3.582031 0.84375 -3.8125 C 0.695312 -4.039062 0.625 -4.296875 0.625 -4.578125 C 0.625 -4.890625 0.710938 -5.179688 0.890625 -5.453125 C 1.066406 -5.722656 1.320312 -5.925781 1.65625 -6.0625 C 2 -6.207031 2.378906 -6.28125 2.796875 -6.28125 C 3.253906 -6.28125 3.65625 -6.207031 4 -6.0625 C 4.351562 -5.914062 4.625 -5.695312 4.8125 -5.40625 C 5 -5.125 5.097656 -4.800781 5.109375 -4.4375 L 4.328125 -4.375 C 4.285156 -4.769531 4.144531 -5.066406 3.90625 -5.265625 C 3.664062 -5.460938 3.304688 -5.5625 2.828125 -5.5625 C 2.335938 -5.5625 1.976562 -5.46875 1.75 -5.28125 C 1.519531 -5.101562 1.40625 -4.882812 1.40625 -4.625 C 1.40625 -4.40625 1.488281 -4.222656 1.65625 -4.078125 C 1.8125 -3.941406 2.21875 -3.796875 2.875 -3.640625 C 3.539062 -3.492188 4 -3.363281 4.25 -3.25 C 4.601562 -3.082031 4.863281 -2.867188 5.03125 -2.609375 C 5.207031 -2.359375 5.296875 -2.070312 5.296875 -1.75 C 5.296875 -1.414062 5.203125 -1.101562 5.015625 -0.8125 C 4.828125 -0.519531 4.554688 -0.289062 4.203125 -0.125 C 3.859375 0.03125 3.460938 0.109375 3.015625 0.109375 C 2.460938 0.109375 1.992188 0.0234375 1.609375 -0.140625 C 1.234375 -0.304688 0.9375 -0.550781 0.71875 -0.875 C 0.507812 -1.195312 0.398438 -1.566406 0.390625 -1.984375 Z M 0.390625 -1.984375 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-1-3&quot;&gt;
&lt;path d=&quot;M 2.78125 0 L 2.78125 -1.484375 L 0.109375 -1.484375 L 0.109375 -2.171875 L 2.921875 -6.171875 L 3.546875 -6.171875 L 3.546875 -2.171875 L 4.375 -2.171875 L 4.375 -1.484375 L 3.546875 -1.484375 L 3.546875 0 Z M 2.78125 -2.171875 L 2.78125 -4.953125 L 0.859375 -2.171875 Z M 2.78125 -2.171875 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-1-4&quot;&gt;
&lt;path d=&quot;M 1.53125 -3.34375 C 1.207031 -3.457031 0.96875 -3.617188 0.8125 -3.828125 C 0.664062 -4.046875 0.59375 -4.304688 0.59375 -4.609375 C 0.59375 -5.054688 0.753906 -5.429688 1.078125 -5.734375 C 1.398438 -6.046875 1.832031 -6.203125 2.375 -6.203125 C 2.90625 -6.203125 3.335938 -6.046875 3.671875 -5.734375 C 4.003906 -5.421875 4.171875 -5.039062 4.171875 -4.59375 C 4.171875 -4.300781 4.09375 -4.046875 3.9375 -3.828125 C 3.789062 -3.617188 3.5625 -3.457031 3.25 -3.34375 C 3.632812 -3.21875 3.925781 -3.019531 4.125 -2.75 C 4.320312 -2.476562 4.421875 -2.148438 4.421875 -1.765625 C 4.421875 -1.234375 4.234375 -0.785156 3.859375 -0.421875 C 3.484375 -0.0664062 2.992188 0.109375 2.390625 0.109375 C 1.773438 0.109375 1.28125 -0.0703125 0.90625 -0.4375 C 0.53125 -0.800781 0.34375 -1.25 0.34375 -1.78125 C 0.34375 -2.1875 0.441406 -2.523438 0.640625 -2.796875 C 0.847656 -3.066406 1.144531 -3.25 1.53125 -3.34375 Z M 1.375 -4.625 C 1.375 -4.332031 1.46875 -4.09375 1.65625 -3.90625 C 1.84375 -3.726562 2.085938 -3.640625 2.390625 -3.640625 C 2.679688 -3.640625 2.921875 -3.726562 3.109375 -3.90625 C 3.296875 -4.09375 3.390625 -4.320312 3.390625 -4.59375 C 3.390625 -4.863281 3.289062 -5.09375 3.09375 -5.28125 C 2.90625 -5.476562 2.664062 -5.578125 2.375 -5.578125 C 2.09375 -5.578125 1.851562 -5.484375 1.65625 -5.296875 C 1.46875 -5.109375 1.375 -4.882812 1.375 -4.625 Z M 1.125 -1.78125 C 1.125 -1.5625 1.175781 -1.347656 1.28125 -1.140625 C 1.382812 -0.941406 1.535156 -0.785156 1.734375 -0.671875 C 1.941406 -0.566406 2.160156 -0.515625 2.390625 -0.515625 C 2.753906 -0.515625 3.050781 -0.628906 3.28125 -0.859375 C 3.519531 -1.097656 3.640625 -1.394531 3.640625 -1.75 C 3.640625 -2.113281 3.519531 -2.414062 3.28125 -2.65625 C 3.039062 -2.894531 2.734375 -3.015625 2.359375 -3.015625 C 2.003906 -3.015625 1.707031 -2.894531 1.46875 -2.65625 C 1.238281 -2.425781 1.125 -2.132812 1.125 -1.78125 Z M 1.125 -1.78125 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-1-5&quot;&gt;
&lt;path d=&quot;M 0.359375 -1.625 L 1.15625 -1.6875 C 1.21875 -1.300781 1.351562 -1.007812 1.5625 -0.8125 C 1.78125 -0.613281 2.039062 -0.515625 2.34375 -0.515625 C 2.707031 -0.515625 3.015625 -0.648438 3.265625 -0.921875 C 3.515625 -1.203125 3.640625 -1.570312 3.640625 -2.03125 C 3.640625 -2.457031 3.519531 -2.796875 3.28125 -3.046875 C 3.039062 -3.296875 2.722656 -3.421875 2.328125 -3.421875 C 2.085938 -3.421875 1.867188 -3.363281 1.671875 -3.25 C 1.472656 -3.144531 1.316406 -3.003906 1.203125 -2.828125 L 0.5 -2.921875 L 1.09375 -6.09375 L 4.15625 -6.09375 L 4.15625 -5.359375 L 1.703125 -5.359375 L 1.359375 -3.703125 C 1.734375 -3.960938 2.125 -4.09375 2.53125 -4.09375 C 3.070312 -4.09375 3.523438 -3.90625 3.890625 -3.53125 C 4.265625 -3.15625 4.453125 -2.675781 4.453125 -2.09375 C 4.453125 -1.53125 4.289062 -1.046875 3.96875 -0.640625 C 3.570312 -0.140625 3.03125 0.109375 2.34375 0.109375 C 1.78125 0.109375 1.320312 -0.046875 0.96875 -0.359375 C 0.613281 -0.679688 0.410156 -1.101562 0.359375 -1.625 Z M 0.359375 -1.625 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-1-6&quot;&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-1-7&quot;&gt;
&lt;path d=&quot;M 0 0.109375 L 1.796875 -6.28125 L 2.390625 -6.28125 L 0.609375 0.109375 Z M 0 0.109375 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-1-8&quot;&gt;
&lt;path d=&quot;M 0.28125 -1.859375 L 0.28125 -2.609375 L 2.609375 -2.609375 L 2.609375 -1.859375 Z M 0.28125 -1.859375 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-1-9&quot;&gt;
&lt;path d=&quot;M 0.796875 0 L 0.796875 -6.171875 L 1.625 -6.171875 L 1.625 0 Z M 0.796875 0 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-1-10&quot;&gt;
&lt;path d=&quot;M 0.640625 0 L 0.640625 -6.171875 L 1.875 -6.171875 L 3.328125 -1.796875 C 3.460938 -1.390625 3.5625 -1.085938 3.625 -0.890625 C 3.695312 -1.109375 3.804688 -1.4375 3.953125 -1.875 L 5.4375 -6.171875 L 6.53125 -6.171875 L 6.53125 0 L 5.75 0 L 5.75 -5.171875 L 3.953125 0 L 3.21875 0 L 1.421875 -5.25 L 1.421875 0 Z M 0.640625 0 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-1-11&quot;&gt;
&lt;path d=&quot;M 0.625 0 L 0.625 -6.171875 L 2.953125 -6.171875 C 3.421875 -6.171875 3.796875 -6.109375 4.078125 -5.984375 C 4.367188 -5.859375 4.59375 -5.664062 4.75 -5.40625 C 4.914062 -5.144531 5 -4.875 5 -4.59375 C 5 -4.332031 4.925781 -4.082031 4.78125 -3.84375 C 4.632812 -3.613281 4.414062 -3.425781 4.125 -3.28125 C 4.5 -3.175781 4.785156 -2.988281 4.984375 -2.71875 C 5.191406 -2.457031 5.296875 -2.148438 5.296875 -1.796875 C 5.296875 -1.503906 5.234375 -1.234375 5.109375 -0.984375 C 4.984375 -0.734375 4.832031 -0.539062 4.65625 -0.40625 C 4.476562 -0.269531 4.253906 -0.164062 3.984375 -0.09375 C 3.710938 -0.03125 3.378906 0 2.984375 0 Z M 1.453125 -3.578125 L 2.78125 -3.578125 C 3.144531 -3.578125 3.40625 -3.601562 3.5625 -3.65625 C 3.769531 -3.71875 3.925781 -3.816406 4.03125 -3.953125 C 4.132812 -4.097656 4.1875 -4.28125 4.1875 -4.5 C 4.1875 -4.707031 4.132812 -4.882812 4.03125 -5.03125 C 3.9375 -5.1875 3.796875 -5.296875 3.609375 -5.359375 C 3.429688 -5.421875 3.125 -5.453125 2.6875 -5.453125 L 1.453125 -5.453125 Z M 1.453125 -0.734375 L 2.984375 -0.734375 C 3.242188 -0.734375 3.429688 -0.742188 3.546875 -0.765625 C 3.734375 -0.796875 3.890625 -0.847656 4.015625 -0.921875 C 4.140625 -1.003906 4.242188 -1.117188 4.328125 -1.265625 C 4.410156 -1.421875 4.453125 -1.597656 4.453125 -1.796875 C 4.453125 -2.023438 4.390625 -2.222656 4.265625 -2.390625 C 4.148438 -2.554688 3.988281 -2.671875 3.78125 -2.734375 C 3.570312 -2.804688 3.269531 -2.84375 2.875 -2.84375 L 1.453125 -2.84375 Z M 1.453125 -0.734375 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-1-12&quot;&gt;
&lt;path d=&quot;M 0.671875 0 L 0.671875 -6.171875 L 3 -6.171875 C 3.40625 -6.171875 3.71875 -6.148438 3.9375 -6.109375 C 4.238281 -6.066406 4.488281 -5.972656 4.6875 -5.828125 C 4.894531 -5.679688 5.0625 -5.476562 5.1875 -5.21875 C 5.3125 -4.96875 5.375 -4.691406 5.375 -4.390625 C 5.375 -3.859375 5.207031 -3.410156 4.875 -3.046875 C 4.539062 -2.691406 3.9375 -2.515625 3.0625 -2.515625 L 1.484375 -2.515625 L 1.484375 0 Z M 1.484375 -3.234375 L 3.078125 -3.234375 C 3.609375 -3.234375 3.984375 -3.332031 4.203125 -3.53125 C 4.421875 -3.726562 4.53125 -4.003906 4.53125 -4.359375 C 4.53125 -4.617188 4.460938 -4.835938 4.328125 -5.015625 C 4.203125 -5.203125 4.035156 -5.328125 3.828125 -5.390625 C 3.691406 -5.429688 3.4375 -5.453125 3.0625 -5.453125 L 1.484375 -5.453125 Z M 1.484375 -3.234375 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-1-13&quot;&gt;
&lt;path d=&quot;M 5.078125 -2.171875 L 5.890625 -1.953125 C 5.710938 -1.285156 5.398438 -0.773438 4.953125 -0.421875 C 4.515625 -0.0664062 3.972656 0.109375 3.328125 0.109375 C 2.660156 0.109375 2.117188 -0.0234375 1.703125 -0.296875 C 1.285156 -0.566406 0.96875 -0.957031 0.75 -1.46875 C 0.53125 -1.988281 0.421875 -2.546875 0.421875 -3.140625 C 0.421875 -3.773438 0.546875 -4.332031 0.796875 -4.8125 C 1.046875 -5.289062 1.394531 -5.65625 1.84375 -5.90625 C 2.300781 -6.15625 2.800781 -6.28125 3.34375 -6.28125 C 3.957031 -6.28125 4.472656 -6.117188 4.890625 -5.796875 C 5.316406 -5.484375 5.613281 -5.046875 5.78125 -4.484375 L 4.984375 -4.296875 C 4.835938 -4.742188 4.628906 -5.066406 4.359375 -5.265625 C 4.085938 -5.472656 3.742188 -5.578125 3.328125 -5.578125 C 2.847656 -5.578125 2.445312 -5.460938 2.125 -5.234375 C 1.8125 -5.003906 1.585938 -4.695312 1.453125 -4.3125 C 1.328125 -3.9375 1.265625 -3.546875 1.265625 -3.140625 C 1.265625 -2.609375 1.34375 -2.144531 1.5 -1.75 C 1.65625 -1.363281 1.894531 -1.070312 2.21875 -0.875 C 2.539062 -0.6875 2.890625 -0.59375 3.265625 -0.59375 C 3.722656 -0.59375 4.109375 -0.722656 4.421875 -0.984375 C 4.742188 -1.253906 4.960938 -1.648438 5.078125 -2.171875 Z M 5.078125 -2.171875 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-1-14&quot;&gt;
&lt;path d=&quot;M 0.703125 0 L 0.703125 -6.171875 L 4.875 -6.171875 L 4.875 -5.453125 L 1.53125 -5.453125 L 1.53125 -3.53125 L 4.421875 -3.53125 L 4.421875 -2.8125 L 1.53125 -2.8125 L 1.53125 0 Z M 0.703125 0 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-1-15&quot;&gt;
&lt;path d=&quot;M 0.421875 -3 C 0.421875 -4.03125 0.691406 -4.832031 1.234375 -5.40625 C 1.785156 -5.988281 2.5 -6.28125 3.375 -6.28125 C 3.945312 -6.28125 4.457031 -6.144531 4.90625 -5.875 C 5.363281 -5.601562 5.710938 -5.222656 5.953125 -4.734375 C 6.203125 -4.242188 6.328125 -3.691406 6.328125 -3.078125 C 6.328125 -2.453125 6.195312 -1.890625 5.9375 -1.390625 C 5.6875 -0.898438 5.328125 -0.523438 4.859375 -0.265625 C 4.398438 -0.015625 3.90625 0.109375 3.375 0.109375 C 2.789062 0.109375 2.269531 -0.03125 1.8125 -0.3125 C 1.351562 -0.59375 1.003906 -0.972656 0.765625 -1.453125 C 0.535156 -1.941406 0.421875 -2.457031 0.421875 -3 Z M 1.265625 -3 C 1.265625 -2.25 1.460938 -1.660156 1.859375 -1.234375 C 2.253906 -0.804688 2.753906 -0.59375 3.359375 -0.59375 C 3.972656 -0.59375 4.476562 -0.804688 4.875 -1.234375 C 5.28125 -1.671875 5.484375 -2.285156 5.484375 -3.078125 C 5.484375 -3.585938 5.394531 -4.03125 5.21875 -4.40625 C 5.050781 -4.78125 4.800781 -5.066406 4.46875 -5.265625 C 4.144531 -5.472656 3.78125 -5.578125 3.375 -5.578125 C 2.800781 -5.578125 2.304688 -5.378906 1.890625 -4.984375 C 1.472656 -4.585938 1.265625 -3.925781 1.265625 -3 Z M 1.265625 -3 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-1-16&quot;&gt;
&lt;path d=&quot;M 4.71875 -6.171875 L 5.53125 -6.171875 L 5.53125 -2.609375 C 5.53125 -1.984375 5.457031 -1.488281 5.3125 -1.125 C 5.175781 -0.757812 4.925781 -0.460938 4.5625 -0.234375 C 4.195312 -0.00390625 3.71875 0.109375 3.125 0.109375 C 2.539062 0.109375 2.066406 0.0078125 1.703125 -0.1875 C 1.335938 -0.394531 1.070312 -0.6875 0.90625 -1.0625 C 0.75 -1.4375 0.671875 -1.953125 0.671875 -2.609375 L 0.671875 -6.171875 L 1.5 -6.171875 L 1.5 -2.609375 C 1.5 -2.078125 1.546875 -1.679688 1.640625 -1.421875 C 1.742188 -1.171875 1.914062 -0.972656 2.15625 -0.828125 C 2.394531 -0.691406 2.691406 -0.625 3.046875 -0.625 C 3.648438 -0.625 4.078125 -0.757812 4.328125 -1.03125 C 4.585938 -1.3125 4.71875 -1.835938 4.71875 -2.609375 Z M 4.71875 -6.171875 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-1-17&quot;&gt;
&lt;path d=&quot;M 0.671875 0 L 0.671875 -6.171875 L 2.796875 -6.171875 C 3.273438 -6.171875 3.640625 -6.140625 3.890625 -6.078125 C 4.242188 -6.003906 4.546875 -5.859375 4.796875 -5.640625 C 5.117188 -5.367188 5.359375 -5.019531 5.515625 -4.59375 C 5.679688 -4.164062 5.765625 -3.675781 5.765625 -3.125 C 5.765625 -2.65625 5.707031 -2.238281 5.59375 -1.875 C 5.488281 -1.507812 5.347656 -1.207031 5.171875 -0.96875 C 5.003906 -0.738281 4.816406 -0.550781 4.609375 -0.40625 C 4.410156 -0.269531 4.164062 -0.164062 3.875 -0.09375 C 3.59375 -0.03125 3.265625 0 2.890625 0 Z M 1.484375 -0.734375 L 2.796875 -0.734375 C 3.203125 -0.734375 3.519531 -0.769531 3.75 -0.84375 C 3.988281 -0.914062 4.175781 -1.019531 4.3125 -1.15625 C 4.507812 -1.351562 4.660156 -1.613281 4.765625 -1.9375 C 4.867188 -2.269531 4.921875 -2.671875 4.921875 -3.140625 C 4.921875 -3.785156 4.816406 -4.28125 4.609375 -4.625 C 4.398438 -4.96875 4.144531 -5.195312 3.84375 -5.3125 C 3.625 -5.40625 3.269531 -5.453125 2.78125 -5.453125 L 1.484375 -5.453125 Z M 1.484375 -0.734375 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-1-18&quot;&gt;
&lt;path d=&quot;M 2.015625 1.8125 C 1.597656 1.28125 1.242188 0.664062 0.953125 -0.03125 C 0.660156 -0.738281 0.515625 -1.472656 0.515625 -2.234375 C 0.515625 -2.898438 0.625 -3.539062 0.84375 -4.15625 C 1.09375 -4.863281 1.484375 -5.570312 2.015625 -6.28125 L 2.5625 -6.28125 C 2.21875 -5.695312 1.992188 -5.28125 1.890625 -5.03125 C 1.710938 -4.644531 1.578125 -4.238281 1.484375 -3.8125 C 1.359375 -3.289062 1.296875 -2.765625 1.296875 -2.234375 C 1.296875 -0.878906 1.71875 0.46875 2.5625 1.8125 Z M 2.015625 1.8125 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-1-19&quot;&gt;
&lt;path d=&quot;M 2.4375 0 L 0.03125 -6.171875 L 0.921875 -6.171875 L 2.53125 -1.6875 C 2.65625 -1.332031 2.757812 -0.992188 2.84375 -0.671875 C 2.945312 -1.015625 3.0625 -1.351562 3.1875 -1.6875 L 4.859375 -6.171875 L 5.6875 -6.171875 L 3.265625 0 Z M 2.4375 0 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-1-20&quot;&gt;
&lt;path d=&quot;M 0.359375 -3.046875 C 0.359375 -3.773438 0.429688 -4.359375 0.578125 -4.796875 C 0.734375 -5.242188 0.957031 -5.585938 1.25 -5.828125 C 1.550781 -6.078125 1.925781 -6.203125 2.375 -6.203125 C 2.707031 -6.203125 3 -6.132812 3.25 -6 C 3.5 -5.863281 3.703125 -5.671875 3.859375 -5.421875 C 4.023438 -5.171875 4.15625 -4.863281 4.25 -4.5 C 4.34375 -4.144531 4.390625 -3.660156 4.390625 -3.046875 C 4.390625 -2.316406 4.3125 -1.726562 4.15625 -1.28125 C 4.007812 -0.84375 3.785156 -0.5 3.484375 -0.25 C 3.191406 -0.0078125 2.820312 0.109375 2.375 0.109375 C 1.78125 0.109375 1.3125 -0.101562 0.96875 -0.53125 C 0.5625 -1.050781 0.359375 -1.890625 0.359375 -3.046875 Z M 1.140625 -3.046875 C 1.140625 -2.035156 1.253906 -1.359375 1.484375 -1.015625 C 1.722656 -0.679688 2.019531 -0.515625 2.375 -0.515625 C 2.71875 -0.515625 3.007812 -0.679688 3.25 -1.015625 C 3.488281 -1.359375 3.609375 -2.035156 3.609375 -3.046875 C 3.609375 -4.054688 3.488281 -4.726562 3.25 -5.0625 C 3.007812 -5.40625 2.710938 -5.578125 2.359375 -5.578125 C 2.015625 -5.578125 1.738281 -5.425781 1.53125 -5.125 C 1.269531 -4.75 1.140625 -4.054688 1.140625 -3.046875 Z M 1.140625 -3.046875 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-1-21&quot;&gt;
&lt;path d=&quot;M 0.765625 0 L 0.765625 -0.859375 L 1.625 -0.859375 L 1.625 0 C 1.625 0.3125 1.566406 0.566406 1.453125 0.765625 C 1.347656 0.960938 1.171875 1.113281 0.921875 1.21875 L 0.71875 0.890625 C 0.875 0.828125 0.988281 0.726562 1.0625 0.59375 C 1.144531 0.457031 1.191406 0.257812 1.203125 0 Z M 0.765625 0 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-1-22&quot;&gt;
&lt;path d=&quot;M 3.21875 0 L 2.453125 0 L 2.453125 -4.828125 C 2.273438 -4.648438 2.035156 -4.472656 1.734375 -4.296875 C 1.441406 -4.128906 1.175781 -4.003906 0.9375 -3.921875 L 0.9375 -4.65625 C 1.363281 -4.851562 1.734375 -5.09375 2.046875 -5.375 C 2.367188 -5.65625 2.59375 -5.929688 2.71875 -6.203125 L 3.21875 -6.203125 Z M 3.21875 0 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-1-23&quot;&gt;
&lt;path d=&quot;M 4.34375 -0.734375 L 4.34375 0 L 0.265625 0 C 0.253906 -0.1875 0.28125 -0.363281 0.34375 -0.53125 C 0.445312 -0.800781 0.613281 -1.070312 0.84375 -1.34375 C 1.070312 -1.613281 1.40625 -1.925781 1.84375 -2.28125 C 2.507812 -2.832031 2.957031 -3.269531 3.1875 -3.59375 C 3.425781 -3.914062 3.546875 -4.21875 3.546875 -4.5 C 3.546875 -4.800781 3.4375 -5.054688 3.21875 -5.265625 C 3.007812 -5.472656 2.734375 -5.578125 2.390625 -5.578125 C 2.023438 -5.578125 1.734375 -5.46875 1.515625 -5.25 C 1.296875 -5.03125 1.1875 -4.722656 1.1875 -4.328125 L 0.40625 -4.40625 C 0.457031 -4.988281 0.65625 -5.429688 1 -5.734375 C 1.351562 -6.046875 1.820312 -6.203125 2.40625 -6.203125 C 3 -6.203125 3.46875 -6.035156 3.8125 -5.703125 C 4.15625 -5.378906 4.328125 -4.972656 4.328125 -4.484375 C 4.328125 -4.234375 4.273438 -3.988281 4.171875 -3.75 C 4.078125 -3.519531 3.910156 -3.269531 3.671875 -3 C 3.441406 -2.738281 3.054688 -2.378906 2.515625 -1.921875 C 2.054688 -1.535156 1.757812 -1.273438 1.625 -1.140625 C 1.5 -1.003906 1.394531 -0.867188 1.3125 -0.734375 Z M 4.34375 -0.734375 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-1-24&quot;&gt;
&lt;path d=&quot;M 1.0625 1.8125 L 0.515625 1.8125 C 1.359375 0.46875 1.78125 -0.878906 1.78125 -2.234375 C 1.78125 -2.765625 1.71875 -3.285156 1.59375 -3.796875 C 1.5 -4.222656 1.367188 -4.628906 1.203125 -5.015625 C 1.085938 -5.265625 0.859375 -5.6875 0.515625 -6.28125 L 1.0625 -6.28125 C 1.59375 -5.570312 1.984375 -4.863281 2.234375 -4.15625 C 2.453125 -3.539062 2.5625 -2.898438 2.5625 -2.234375 C 2.5625 -1.472656 2.414062 -0.738281 2.125 -0.03125 C 1.832031 0.664062 1.476562 1.28125 1.0625 1.8125 Z M 1.0625 1.8125 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-1-25&quot;&gt;
&lt;path d=&quot;M 0.265625 -1.328125 L 1.015625 -1.453125 C 1.054688 -1.148438 1.171875 -0.914062 1.359375 -0.75 C 1.554688 -0.59375 1.828125 -0.515625 2.171875 -0.515625 C 2.523438 -0.515625 2.785156 -0.585938 2.953125 -0.734375 C 3.117188 -0.878906 3.203125 -1.046875 3.203125 -1.234375 C 3.203125 -1.398438 3.128906 -1.535156 2.984375 -1.640625 C 2.878906 -1.703125 2.617188 -1.785156 2.203125 -1.890625 C 1.648438 -2.035156 1.265625 -2.15625 1.046875 -2.25 C 0.828125 -2.351562 0.660156 -2.492188 0.546875 -2.671875 C 0.441406 -2.859375 0.390625 -3.0625 0.390625 -3.28125 C 0.390625 -3.476562 0.4375 -3.660156 0.53125 -3.828125 C 0.625 -4.003906 0.75 -4.148438 0.90625 -4.265625 C 1.019531 -4.347656 1.175781 -4.421875 1.375 -4.484375 C 1.582031 -4.546875 1.800781 -4.578125 2.03125 -4.578125 C 2.382812 -4.578125 2.691406 -4.523438 2.953125 -4.421875 C 3.222656 -4.316406 3.421875 -4.175781 3.546875 -4 C 3.671875 -3.832031 3.757812 -3.601562 3.8125 -3.3125 L 3.0625 -3.21875 C 3.03125 -3.445312 2.929688 -3.625 2.765625 -3.75 C 2.609375 -3.882812 2.382812 -3.953125 2.09375 -3.953125 C 1.75 -3.953125 1.5 -3.894531 1.34375 -3.78125 C 1.195312 -3.664062 1.125 -3.53125 1.125 -3.375 C 1.125 -3.269531 1.15625 -3.179688 1.21875 -3.109375 C 1.28125 -3.023438 1.375 -2.957031 1.5 -2.90625 C 1.582031 -2.875 1.804688 -2.8125 2.171875 -2.71875 C 2.710938 -2.570312 3.085938 -2.453125 3.296875 -2.359375 C 3.515625 -2.265625 3.679688 -2.128906 3.796875 -1.953125 C 3.921875 -1.785156 3.984375 -1.570312 3.984375 -1.3125 C 3.984375 -1.0625 3.90625 -0.820312 3.75 -0.59375 C 3.601562 -0.375 3.390625 -0.203125 3.109375 -0.078125 C 2.835938 0.0351562 2.523438 0.09375 2.171875 0.09375 C 1.597656 0.09375 1.15625 -0.0234375 0.84375 -0.265625 C 0.539062 -0.503906 0.347656 -0.859375 0.265625 -1.328125 Z M 0.265625 -1.328125 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-1-26&quot;&gt;
&lt;path d=&quot;M 3.484375 -0.546875 C 3.203125 -0.304688 2.929688 -0.140625 2.671875 -0.046875 C 2.410156 0.046875 2.132812 0.09375 1.84375 0.09375 C 1.351562 0.09375 0.972656 -0.0234375 0.703125 -0.265625 C 0.441406 -0.503906 0.3125 -0.804688 0.3125 -1.171875 C 0.3125 -1.390625 0.359375 -1.585938 0.453125 -1.765625 C 0.554688 -1.953125 0.6875 -2.097656 0.84375 -2.203125 C 1.007812 -2.316406 1.191406 -2.40625 1.390625 -2.46875 C 1.546875 -2.5 1.773438 -2.535156 2.078125 -2.578125 C 2.679688 -2.648438 3.128906 -2.738281 3.421875 -2.84375 C 3.421875 -2.945312 3.421875 -3.007812 3.421875 -3.03125 C 3.421875 -3.34375 3.351562 -3.5625 3.21875 -3.6875 C 3.019531 -3.863281 2.726562 -3.953125 2.34375 -3.953125 C 1.988281 -3.953125 1.726562 -3.890625 1.5625 -3.765625 C 1.394531 -3.640625 1.269531 -3.414062 1.1875 -3.09375 L 0.4375 -3.203125 C 0.507812 -3.515625 0.617188 -3.765625 0.765625 -3.953125 C 0.921875 -4.148438 1.144531 -4.300781 1.4375 -4.40625 C 1.726562 -4.519531 2.066406 -4.578125 2.453125 -4.578125 C 2.835938 -4.578125 3.148438 -4.53125 3.390625 -4.4375 C 3.628906 -4.34375 3.800781 -4.226562 3.90625 -4.09375 C 4.019531 -3.957031 4.101562 -3.785156 4.15625 -3.578125 C 4.175781 -3.453125 4.1875 -3.222656 4.1875 -2.890625 L 4.1875 -1.875 C 4.1875 -1.164062 4.203125 -0.71875 4.234375 -0.53125 C 4.265625 -0.34375 4.332031 -0.164062 4.4375 0 L 3.640625 0 C 3.554688 -0.15625 3.503906 -0.335938 3.484375 -0.546875 Z M 3.421875 -2.25 C 3.148438 -2.132812 2.738281 -2.035156 2.1875 -1.953125 C 1.875 -1.910156 1.648438 -1.859375 1.515625 -1.796875 C 1.390625 -1.742188 1.289062 -1.660156 1.21875 -1.546875 C 1.15625 -1.441406 1.125 -1.328125 1.125 -1.203125 C 1.125 -0.992188 1.195312 -0.820312 1.34375 -0.6875 C 1.5 -0.5625 1.722656 -0.5 2.015625 -0.5 C 2.304688 -0.5 2.566406 -0.5625 2.796875 -0.6875 C 3.023438 -0.8125 3.191406 -0.984375 3.296875 -1.203125 C 3.378906 -1.378906 3.421875 -1.632812 3.421875 -1.96875 Z M 3.421875 -2.25 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-1-27&quot;&gt;
&lt;path d=&quot;M 0.75 0 L 0.75 -3.890625 L 0.078125 -3.890625 L 0.078125 -4.46875 L 0.75 -4.46875 L 0.75 -4.953125 C 0.75 -5.253906 0.773438 -5.476562 0.828125 -5.625 C 0.898438 -5.8125 1.023438 -5.96875 1.203125 -6.09375 C 1.390625 -6.21875 1.648438 -6.28125 1.984375 -6.28125 C 2.203125 -6.28125 2.441406 -6.253906 2.703125 -6.203125 L 2.578125 -5.546875 C 2.421875 -5.566406 2.273438 -5.578125 2.140625 -5.578125 C 1.910156 -5.578125 1.742188 -5.53125 1.640625 -5.4375 C 1.546875 -5.34375 1.5 -5.160156 1.5 -4.890625 L 1.5 -4.46875 L 2.375 -4.46875 L 2.375 -3.890625 L 1.5 -3.890625 L 1.5 0 Z M 0.75 0 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-1-28&quot;&gt;
&lt;path d=&quot;M 3.625 -1.4375 L 4.40625 -1.34375 C 4.289062 -0.882812 4.0625 -0.53125 3.71875 -0.28125 C 3.382812 -0.03125 2.960938 0.09375 2.453125 0.09375 C 1.796875 0.09375 1.273438 -0.101562 0.890625 -0.5 C 0.503906 -0.90625 0.3125 -1.472656 0.3125 -2.203125 C 0.3125 -2.953125 0.503906 -3.535156 0.890625 -3.953125 C 1.285156 -4.367188 1.789062 -4.578125 2.40625 -4.578125 C 3 -4.578125 3.484375 -4.375 3.859375 -3.96875 C 4.242188 -3.5625 4.4375 -2.988281 4.4375 -2.25 C 4.4375 -2.195312 4.4375 -2.128906 4.4375 -2.046875 L 1.09375 -2.046875 C 1.125 -1.554688 1.265625 -1.175781 1.515625 -0.90625 C 1.765625 -0.644531 2.078125 -0.515625 2.453125 -0.515625 C 2.734375 -0.515625 2.96875 -0.585938 3.15625 -0.734375 C 3.351562 -0.878906 3.507812 -1.113281 3.625 -1.4375 Z M 1.140625 -2.671875 L 3.640625 -2.671875 C 3.609375 -3.046875 3.515625 -3.328125 3.359375 -3.515625 C 3.109375 -3.804688 2.789062 -3.953125 2.40625 -3.953125 C 2.0625 -3.953125 1.769531 -3.832031 1.53125 -3.59375 C 1.289062 -3.363281 1.160156 -3.054688 1.140625 -2.671875 Z M 1.140625 -2.671875 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-1-29&quot;&gt;
&lt;path d=&quot;M 4.09375 -0.734375 C 3.84375 -0.453125 3.570312 -0.238281 3.28125 -0.09375 C 2.988281 0.0390625 2.671875 0.109375 2.328125 0.109375 C 1.691406 0.109375 1.191406 -0.101562 0.828125 -0.53125 C 0.523438 -0.882812 0.375 -1.273438 0.375 -1.703125 C 0.375 -2.085938 0.492188 -2.429688 0.734375 -2.734375 C 0.984375 -3.046875 1.351562 -3.316406 1.84375 -3.546875 C 1.5625 -3.867188 1.375 -4.128906 1.28125 -4.328125 C 1.1875 -4.523438 1.140625 -4.71875 1.140625 -4.90625 C 1.140625 -5.269531 1.285156 -5.585938 1.578125 -5.859375 C 1.867188 -6.140625 2.234375 -6.28125 2.671875 -6.28125 C 3.097656 -6.28125 3.441406 -6.148438 3.703125 -5.890625 C 3.972656 -5.628906 4.109375 -5.320312 4.109375 -4.96875 C 4.109375 -4.375 3.722656 -3.867188 2.953125 -3.453125 L 4.0625 -2.046875 C 4.1875 -2.296875 4.28125 -2.582031 4.34375 -2.90625 L 5.140625 -2.734375 C 5.003906 -2.191406 4.820312 -1.75 4.59375 -1.40625 C 4.875 -1.03125 5.195312 -0.710938 5.5625 -0.453125 L 5.046875 0.140625 C 4.742188 -0.0546875 4.425781 -0.347656 4.09375 -0.734375 Z M 2.5625 -3.953125 C 2.882812 -4.140625 3.09375 -4.304688 3.1875 -4.453125 C 3.289062 -4.597656 3.34375 -4.757812 3.34375 -4.9375 C 3.34375 -5.144531 3.273438 -5.316406 3.140625 -5.453125 C 3.003906 -5.585938 2.835938 -5.65625 2.640625 -5.65625 C 2.429688 -5.65625 2.257812 -5.585938 2.125 -5.453125 C 1.988281 -5.328125 1.921875 -5.164062 1.921875 -4.96875 C 1.921875 -4.875 1.945312 -4.773438 2 -4.671875 C 2.050781 -4.566406 2.125 -4.457031 2.21875 -4.34375 Z M 3.625 -1.328125 L 2.234375 -3.046875 C 1.828125 -2.804688 1.550781 -2.582031 1.40625 -2.375 C 1.257812 -2.164062 1.1875 -1.957031 1.1875 -1.75 C 1.1875 -1.5 1.285156 -1.238281 1.484375 -0.96875 C 1.679688 -0.695312 1.960938 -0.5625 2.328125 -0.5625 C 2.554688 -0.5625 2.789062 -0.628906 3.03125 -0.765625 C 3.28125 -0.910156 3.476562 -1.097656 3.625 -1.328125 Z M 3.625 -1.328125 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-1-30&quot;&gt;
&lt;path d=&quot;M 0.578125 -5.296875 L 0.578125 -6.171875 L 1.328125 -6.171875 L 1.328125 -5.296875 Z M 0.578125 0 L 0.578125 -4.46875 L 1.328125 -4.46875 L 1.328125 0 Z M 0.578125 0 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-1-31&quot;&gt;
&lt;path d=&quot;M 0.5625 0 L 0.5625 -4.46875 L 1.25 -4.46875 L 1.25 -3.796875 C 1.414062 -4.109375 1.570312 -4.316406 1.71875 -4.421875 C 1.875 -4.523438 2.039062 -4.578125 2.21875 -4.578125 C 2.46875 -4.578125 2.722656 -4.492188 2.984375 -4.328125 L 2.734375 -3.625 C 2.546875 -3.738281 2.359375 -3.796875 2.171875 -3.796875 C 2.003906 -3.796875 1.851562 -3.742188 1.71875 -3.640625 C 1.59375 -3.535156 1.5 -3.394531 1.4375 -3.21875 C 1.351562 -2.957031 1.3125 -2.664062 1.3125 -2.34375 L 1.3125 0 Z M 0.5625 0 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-1-32&quot;&gt;
&lt;path d=&quot;M 1.8125 0 L 0.109375 -4.46875 L 0.90625 -4.46875 L 1.875 -1.796875 C 1.976562 -1.503906 2.070312 -1.203125 2.15625 -0.890625 C 2.21875 -1.128906 2.3125 -1.414062 2.4375 -1.75 L 3.4375 -4.46875 L 4.21875 -4.46875 L 2.515625 0 Z M 1.8125 0 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-1-33&quot;&gt;
&lt;path d=&quot;M 2.234375 0 L 2.234375 -5.453125 L 0.203125 -5.453125 L 0.203125 -6.171875 L 5.09375 -6.171875 L 5.09375 -5.453125 L 3.046875 -5.453125 L 3.046875 0 Z M 2.234375 0 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-1-34&quot;&gt;
&lt;path d=&quot;M 0.5625 0 L 0.5625 -4.46875 L 1.25 -4.46875 L 1.25 -3.84375 C 1.382812 -4.0625 1.566406 -4.238281 1.796875 -4.375 C 2.035156 -4.507812 2.304688 -4.578125 2.609375 -4.578125 C 2.929688 -4.578125 3.195312 -4.503906 3.40625 -4.359375 C 3.625 -4.222656 3.773438 -4.035156 3.859375 -3.796875 C 4.210938 -4.316406 4.675781 -4.578125 5.25 -4.578125 C 5.6875 -4.578125 6.023438 -4.453125 6.265625 -4.203125 C 6.503906 -3.960938 6.625 -3.582031 6.625 -3.0625 L 6.625 0 L 5.875 0 L 5.875 -2.8125 C 5.875 -3.113281 5.847656 -3.332031 5.796875 -3.46875 C 5.753906 -3.601562 5.664062 -3.710938 5.53125 -3.796875 C 5.40625 -3.878906 5.253906 -3.921875 5.078125 -3.921875 C 4.765625 -3.921875 4.503906 -3.816406 4.296875 -3.609375 C 4.085938 -3.398438 3.984375 -3.0625 3.984375 -2.59375 L 3.984375 0 L 3.21875 0 L 3.21875 -2.90625 C 3.21875 -3.238281 3.15625 -3.488281 3.03125 -3.65625 C 2.914062 -3.832031 2.71875 -3.921875 2.4375 -3.921875 C 2.21875 -3.921875 2.019531 -3.863281 1.84375 -3.75 C 1.664062 -3.632812 1.535156 -3.46875 1.453125 -3.25 C 1.367188 -3.039062 1.328125 -2.734375 1.328125 -2.328125 L 1.328125 0 Z M 0.5625 0 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-1-35&quot;&gt;
&lt;path d=&quot;M 2.21875 -0.671875 L 2.328125 -0.015625 C 2.117188 0.0351562 1.929688 0.0625 1.765625 0.0625 C 1.484375 0.0625 1.265625 0.0195312 1.109375 -0.0625 C 0.960938 -0.15625 0.859375 -0.269531 0.796875 -0.40625 C 0.734375 -0.550781 0.703125 -0.851562 0.703125 -1.3125 L 0.703125 -3.890625 L 0.15625 -3.890625 L 0.15625 -4.46875 L 0.703125 -4.46875 L 0.703125 -5.578125 L 1.46875 -6.03125 L 1.46875 -4.46875 L 2.21875 -4.46875 L 2.21875 -3.890625 L 1.46875 -3.890625 L 1.46875 -1.265625 C 1.46875 -1.046875 1.476562 -0.90625 1.5 -0.84375 C 1.53125 -0.789062 1.570312 -0.742188 1.625 -0.703125 C 1.6875 -0.671875 1.773438 -0.65625 1.890625 -0.65625 C 1.972656 -0.65625 2.082031 -0.660156 2.21875 -0.671875 Z M 2.21875 -0.671875 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-1-36&quot;&gt;
&lt;path d=&quot;M 0.5625 1.71875 L 0.5625 -4.46875 L 1.265625 -4.46875 L 1.265625 -3.890625 C 1.421875 -4.117188 1.601562 -4.289062 1.8125 -4.40625 C 2.019531 -4.519531 2.269531 -4.578125 2.5625 -4.578125 C 2.9375 -4.578125 3.269531 -4.476562 3.5625 -4.28125 C 3.851562 -4.082031 4.070312 -3.800781 4.21875 -3.4375 C 4.375 -3.082031 4.453125 -2.691406 4.453125 -2.265625 C 4.453125 -1.804688 4.367188 -1.394531 4.203125 -1.03125 C 4.035156 -0.664062 3.796875 -0.382812 3.484375 -0.1875 C 3.171875 0 2.84375 0.09375 2.5 0.09375 C 2.25 0.09375 2.019531 0.0390625 1.8125 -0.0625 C 1.613281 -0.164062 1.453125 -0.300781 1.328125 -0.46875 L 1.328125 1.71875 Z M 1.25 -2.21875 C 1.25 -1.632812 1.363281 -1.203125 1.59375 -0.921875 C 1.832031 -0.648438 2.117188 -0.515625 2.453125 -0.515625 C 2.785156 -0.515625 3.070312 -0.65625 3.3125 -0.9375 C 3.550781 -1.226562 3.671875 -1.675781 3.671875 -2.28125 C 3.671875 -2.84375 3.550781 -3.265625 3.3125 -3.546875 C 3.082031 -3.835938 2.804688 -3.984375 2.484375 -3.984375 C 2.160156 -3.984375 1.875 -3.832031 1.625 -3.53125 C 1.375 -3.226562 1.25 -2.789062 1.25 -2.21875 Z M 1.25 -2.21875 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-1-37&quot;&gt;
&lt;path d=&quot;M 3.46875 0 L 3.46875 -0.5625 C 3.1875 -0.125 2.769531 0.09375 2.21875 0.09375 C 1.863281 0.09375 1.535156 0 1.234375 -0.1875 C 0.929688 -0.382812 0.695312 -0.660156 0.53125 -1.015625 C 0.375 -1.367188 0.296875 -1.773438 0.296875 -2.234375 C 0.296875 -2.679688 0.367188 -3.085938 0.515625 -3.453125 C 0.660156 -3.816406 0.882812 -4.09375 1.1875 -4.28125 C 1.488281 -4.476562 1.820312 -4.578125 2.1875 -4.578125 C 2.457031 -4.578125 2.695312 -4.519531 2.90625 -4.40625 C 3.113281 -4.289062 3.285156 -4.140625 3.421875 -3.953125 L 3.421875 -6.171875 L 4.171875 -6.171875 L 4.171875 0 Z M 1.078125 -2.234375 C 1.078125 -1.660156 1.195312 -1.226562 1.4375 -0.9375 C 1.675781 -0.65625 1.960938 -0.515625 2.296875 -0.515625 C 2.617188 -0.515625 2.894531 -0.648438 3.125 -0.921875 C 3.363281 -1.191406 3.484375 -1.609375 3.484375 -2.171875 C 3.484375 -2.785156 3.363281 -3.234375 3.125 -3.515625 C 2.894531 -3.804688 2.601562 -3.953125 2.25 -3.953125 C 1.914062 -3.953125 1.632812 -3.8125 1.40625 -3.53125 C 1.1875 -3.257812 1.078125 -2.828125 1.078125 -2.234375 Z M 1.078125 -2.234375 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-1-38&quot;&gt;
&lt;path d=&quot;M 3.5 0 L 3.5 -0.65625 C 3.15625 -0.15625 2.679688 0.09375 2.078125 0.09375 C 1.816406 0.09375 1.570312 0.046875 1.34375 -0.046875 C 1.113281 -0.148438 0.941406 -0.273438 0.828125 -0.421875 C 0.722656 -0.578125 0.644531 -0.769531 0.59375 -1 C 0.5625 -1.144531 0.546875 -1.378906 0.546875 -1.703125 L 0.546875 -4.46875 L 1.3125 -4.46875 L 1.3125 -1.984375 C 1.3125 -1.585938 1.328125 -1.320312 1.359375 -1.1875 C 1.398438 -0.988281 1.5 -0.832031 1.65625 -0.71875 C 1.8125 -0.601562 2.003906 -0.546875 2.234375 -0.546875 C 2.460938 -0.546875 2.675781 -0.601562 2.875 -0.71875 C 3.070312 -0.84375 3.210938 -1.003906 3.296875 -1.203125 C 3.378906 -1.398438 3.421875 -1.691406 3.421875 -2.078125 L 3.421875 -4.46875 L 4.171875 -4.46875 L 4.171875 0 Z M 3.5 0 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-1-39&quot;&gt;
&lt;path d=&quot;M 0.5625 0 L 0.5625 -4.46875 L 1.25 -4.46875 L 1.25 -3.84375 C 1.582031 -4.332031 2.054688 -4.578125 2.671875 -4.578125 C 2.941406 -4.578125 3.1875 -4.523438 3.40625 -4.421875 C 3.632812 -4.328125 3.804688 -4.203125 3.921875 -4.046875 C 4.035156 -3.890625 4.113281 -3.703125 4.15625 -3.484375 C 4.1875 -3.347656 4.203125 -3.101562 4.203125 -2.75 L 4.203125 0 L 3.4375 0 L 3.4375 -2.71875 C 3.4375 -3.03125 3.40625 -3.257812 3.34375 -3.40625 C 3.289062 -3.5625 3.1875 -3.6875 3.03125 -3.78125 C 2.882812 -3.875 2.710938 -3.921875 2.515625 -3.921875 C 2.191406 -3.921875 1.910156 -3.816406 1.671875 -3.609375 C 1.441406 -3.398438 1.328125 -3.007812 1.328125 -2.4375 L 1.328125 0 Z M 0.5625 0 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-1-40&quot;&gt;
&lt;path d=&quot;M 3.484375 -1.640625 L 4.234375 -1.546875 C 4.148438 -1.023438 3.941406 -0.617188 3.609375 -0.328125 C 3.273438 -0.046875 2.863281 0.09375 2.375 0.09375 C 1.757812 0.09375 1.265625 -0.101562 0.890625 -0.5 C 0.523438 -0.894531 0.34375 -1.46875 0.34375 -2.21875 C 0.34375 -2.695312 0.421875 -3.117188 0.578125 -3.484375 C 0.734375 -3.847656 0.972656 -4.117188 1.296875 -4.296875 C 1.628906 -4.484375 1.988281 -4.578125 2.375 -4.578125 C 2.863281 -4.578125 3.257812 -4.453125 3.5625 -4.203125 C 3.875 -3.960938 4.070312 -3.613281 4.15625 -3.15625 L 3.421875 -3.046875 C 3.347656 -3.347656 3.222656 -3.570312 3.046875 -3.71875 C 2.867188 -3.875 2.65625 -3.953125 2.40625 -3.953125 C 2.019531 -3.953125 1.707031 -3.8125 1.46875 -3.53125 C 1.226562 -3.257812 1.109375 -2.828125 1.109375 -2.234375 C 1.109375 -1.640625 1.222656 -1.203125 1.453125 -0.921875 C 1.691406 -0.648438 1.992188 -0.515625 2.359375 -0.515625 C 2.660156 -0.515625 2.910156 -0.601562 3.109375 -0.78125 C 3.304688 -0.96875 3.429688 -1.253906 3.484375 -1.640625 Z M 3.484375 -1.640625 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-1-41&quot;&gt;
&lt;path d=&quot;M 0.53125 1.71875 L 0.453125 1.015625 C 0.617188 1.054688 0.765625 1.078125 0.890625 1.078125 C 1.054688 1.078125 1.1875 1.046875 1.28125 0.984375 C 1.382812 0.929688 1.46875 0.859375 1.53125 0.765625 C 1.582031 0.679688 1.660156 0.488281 1.765625 0.1875 C 1.785156 0.144531 1.8125 0.0859375 1.84375 0.015625 L 0.140625 -4.46875 L 0.953125 -4.46875 L 1.890625 -1.875 C 2.003906 -1.550781 2.113281 -1.207031 2.21875 -0.84375 C 2.300781 -1.195312 2.398438 -1.535156 2.515625 -1.859375 L 3.484375 -4.46875 L 4.234375 -4.46875 L 2.53125 0.078125 C 2.351562 0.566406 2.210938 0.90625 2.109375 1.09375 C 1.972656 1.34375 1.816406 1.523438 1.640625 1.640625 C 1.472656 1.753906 1.265625 1.8125 1.015625 1.8125 C 0.867188 1.8125 0.707031 1.78125 0.53125 1.71875 Z M 0.53125 1.71875 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-1-42&quot;&gt;
&lt;path d=&quot;M 0.78125 0 L 0.78125 -0.859375 L 1.640625 -0.859375 L 1.640625 0 Z M 0.78125 0 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-2-0&quot;&gt;
&lt;path d=&quot;M 0 -1.078125 L -5.390625 -1.078125 L -5.390625 -5.390625 L 0 -5.390625 Z M -0.140625 -1.21875 L -0.140625 -5.25 L -5.25 -5.25 L -5.25 -1.21875 Z M -0.140625 -1.21875 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-2-1&quot;&gt;
&lt;path d=&quot;M 0 -0.671875 L -6.171875 -0.671875 L -6.171875 -3 C -6.171875 -3.40625 -6.148438 -3.71875 -6.109375 -3.9375 C -6.066406 -4.238281 -5.972656 -4.488281 -5.828125 -4.6875 C -5.679688 -4.894531 -5.476562 -5.0625 -5.21875 -5.1875 C -4.96875 -5.3125 -4.691406 -5.375 -4.390625 -5.375 C -3.859375 -5.375 -3.410156 -5.207031 -3.046875 -4.875 C -2.691406 -4.539062 -2.515625 -3.9375 -2.515625 -3.0625 L -2.515625 -1.484375 L 0 -1.484375 Z M -3.234375 -1.484375 L -3.234375 -3.078125 C -3.234375 -3.609375 -3.332031 -3.984375 -3.53125 -4.203125 C -3.726562 -4.421875 -4.003906 -4.53125 -4.359375 -4.53125 C -4.617188 -4.53125 -4.835938 -4.460938 -5.015625 -4.328125 C -5.203125 -4.203125 -5.328125 -4.035156 -5.390625 -3.828125 C -5.429688 -3.691406 -5.453125 -3.4375 -5.453125 -3.0625 L -5.453125 -1.484375 Z M -3.234375 -1.484375 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-2-2&quot;&gt;
&lt;path d=&quot;M 0 -0.671875 L -6.171875 -0.671875 L -6.171875 -3.421875 C -6.171875 -3.960938 -6.113281 -4.375 -6 -4.65625 C -5.894531 -4.945312 -5.703125 -5.175781 -5.421875 -5.34375 C -5.140625 -5.519531 -4.828125 -5.609375 -4.484375 -5.609375 C -4.046875 -5.609375 -3.675781 -5.46875 -3.375 -5.1875 C -3.082031 -4.90625 -2.894531 -4.46875 -2.8125 -3.875 C -2.707031 -4.09375 -2.601562 -4.257812 -2.5 -4.375 C -2.28125 -4.601562 -2.007812 -4.828125 -1.6875 -5.046875 L 0 -6.125 L 0 -5.09375 L -1.28125 -4.28125 C -1.65625 -4.039062 -1.941406 -3.84375 -2.140625 -3.6875 C -2.335938 -3.53125 -2.472656 -3.390625 -2.546875 -3.265625 C -2.628906 -3.148438 -2.6875 -3.023438 -2.71875 -2.890625 C -2.726562 -2.804688 -2.734375 -2.65625 -2.734375 -2.4375 L -2.734375 -1.5 L 0 -1.5 Z M -3.453125 -1.5 L -3.453125 -3.25 C -3.453125 -3.625 -3.488281 -3.914062 -3.5625 -4.125 C -3.644531 -4.332031 -3.769531 -4.488281 -3.9375 -4.59375 C -4.101562 -4.707031 -4.285156 -4.765625 -4.484375 -4.765625 C -4.773438 -4.765625 -5.015625 -4.660156 -5.203125 -4.453125 C -5.390625 -4.242188 -5.484375 -3.910156 -5.484375 -3.453125 L -5.484375 -1.5 Z M -3.453125 -1.5 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-2-3&quot;&gt;
&lt;path d=&quot;M -3 -0.421875 C -4.03125 -0.421875 -4.832031 -0.691406 -5.40625 -1.234375 C -5.988281 -1.785156 -6.28125 -2.5 -6.28125 -3.375 C -6.28125 -3.945312 -6.144531 -4.457031 -5.875 -4.90625 C -5.601562 -5.363281 -5.222656 -5.710938 -4.734375 -5.953125 C -4.242188 -6.203125 -3.691406 -6.328125 -3.078125 -6.328125 C -2.453125 -6.328125 -1.890625 -6.195312 -1.390625 -5.9375 C -0.898438 -5.6875 -0.523438 -5.328125 -0.265625 -4.859375 C -0.015625 -4.398438 0.109375 -3.90625 0.109375 -3.375 C 0.109375 -2.789062 -0.03125 -2.269531 -0.3125 -1.8125 C -0.59375 -1.351562 -0.972656 -1.003906 -1.453125 -0.765625 C -1.941406 -0.535156 -2.457031 -0.421875 -3 -0.421875 Z M -3 -1.265625 C -2.25 -1.265625 -1.660156 -1.460938 -1.234375 -1.859375 C -0.804688 -2.253906 -0.59375 -2.753906 -0.59375 -3.359375 C -0.59375 -3.972656 -0.804688 -4.476562 -1.234375 -4.875 C -1.671875 -5.28125 -2.285156 -5.484375 -3.078125 -5.484375 C -3.585938 -5.484375 -4.03125 -5.394531 -4.40625 -5.21875 C -4.78125 -5.050781 -5.066406 -4.800781 -5.265625 -4.46875 C -5.472656 -4.144531 -5.578125 -3.78125 -5.578125 -3.375 C -5.578125 -2.800781 -5.378906 -2.304688 -4.984375 -1.890625 C -4.585938 -1.472656 -3.925781 -1.265625 -3 -1.265625 Z M -3 -1.265625 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-2-4&quot;&gt;
&lt;path d=&quot;M 0 -0.703125 L -6.171875 -0.703125 L -6.171875 -4.875 L -5.453125 -4.875 L -5.453125 -1.53125 L -3.53125 -1.53125 L -3.53125 -4.421875 L -2.8125 -4.421875 L -2.8125 -1.53125 L 0 -1.53125 Z M 0 -0.703125 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-2-5&quot;&gt;
&lt;path d=&quot;M 0 -0.796875 L -6.171875 -0.796875 L -6.171875 -1.625 L 0 -1.625 Z M 0 -0.796875 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-2-6&quot;&gt;
&lt;path d=&quot;M 0 -3.46875 L -0.5625 -3.46875 C -0.125 -3.1875 0.09375 -2.769531 0.09375 -2.21875 C 0.09375 -1.863281 0 -1.535156 -0.1875 -1.234375 C -0.382812 -0.929688 -0.660156 -0.695312 -1.015625 -0.53125 C -1.367188 -0.375 -1.773438 -0.296875 -2.234375 -0.296875 C -2.679688 -0.296875 -3.085938 -0.367188 -3.453125 -0.515625 C -3.816406 -0.660156 -4.09375 -0.882812 -4.28125 -1.1875 C -4.476562 -1.488281 -4.578125 -1.820312 -4.578125 -2.1875 C -4.578125 -2.457031 -4.519531 -2.695312 -4.40625 -2.90625 C -4.289062 -3.113281 -4.140625 -3.285156 -3.953125 -3.421875 L -6.171875 -3.421875 L -6.171875 -4.171875 L 0 -4.171875 Z M -2.234375 -1.078125 C -1.660156 -1.078125 -1.226562 -1.195312 -0.9375 -1.4375 C -0.65625 -1.675781 -0.515625 -1.960938 -0.515625 -2.296875 C -0.515625 -2.617188 -0.648438 -2.894531 -0.921875 -3.125 C -1.191406 -3.363281 -1.609375 -3.484375 -2.171875 -3.484375 C -2.785156 -3.484375 -3.234375 -3.363281 -3.515625 -3.125 C -3.804688 -2.894531 -3.953125 -2.601562 -3.953125 -2.25 C -3.953125 -1.914062 -3.8125 -1.632812 -3.53125 -1.40625 C -3.257812 -1.1875 -2.828125 -1.078125 -2.234375 -1.078125 Z M -2.234375 -1.078125 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-2-7&quot;&gt;
&lt;path d=&quot;M 0 -0.5625 L -4.46875 -0.5625 L -4.46875 -1.25 L -3.796875 -1.25 C -4.109375 -1.414062 -4.316406 -1.570312 -4.421875 -1.71875 C -4.523438 -1.875 -4.578125 -2.039062 -4.578125 -2.21875 C -4.578125 -2.46875 -4.492188 -2.722656 -4.328125 -2.984375 L -3.625 -2.734375 C -3.738281 -2.546875 -3.796875 -2.359375 -3.796875 -2.171875 C -3.796875 -2.003906 -3.742188 -1.851562 -3.640625 -1.71875 C -3.535156 -1.59375 -3.394531 -1.5 -3.21875 -1.4375 C -2.957031 -1.351562 -2.664062 -1.3125 -2.34375 -1.3125 L 0 -1.3125 Z M 0 -0.5625 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-2-8&quot;&gt;
&lt;path d=&quot;M -5.296875 -0.578125 L -6.171875 -0.578125 L -6.171875 -1.328125 L -5.296875 -1.328125 Z M 0 -0.578125 L -4.46875 -0.578125 L -4.46875 -1.328125 L 0 -1.328125 Z M 0 -0.578125 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-2-9&quot;&gt;
&lt;path d=&quot;M 0 -1.8125 L -4.46875 -0.109375 L -4.46875 -0.90625 L -1.796875 -1.875 C -1.503906 -1.976562 -1.203125 -2.070312 -0.890625 -2.15625 C -1.128906 -2.21875 -1.414062 -2.3125 -1.75 -2.4375 L -4.46875 -3.4375 L -4.46875 -4.21875 L 0 -2.515625 Z M 0 -1.8125 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-2-10&quot;&gt;
&lt;path d=&quot;M -1.4375 -3.625 L -1.34375 -4.40625 C -0.882812 -4.289062 -0.53125 -4.0625 -0.28125 -3.71875 C -0.03125 -3.382812 0.09375 -2.960938 0.09375 -2.453125 C 0.09375 -1.796875 -0.101562 -1.273438 -0.5 -0.890625 C -0.90625 -0.503906 -1.472656 -0.3125 -2.203125 -0.3125 C -2.953125 -0.3125 -3.535156 -0.503906 -3.953125 -0.890625 C -4.367188 -1.285156 -4.578125 -1.789062 -4.578125 -2.40625 C -4.578125 -3 -4.375 -3.484375 -3.96875 -3.859375 C -3.5625 -4.242188 -2.988281 -4.4375 -2.25 -4.4375 C -2.195312 -4.4375 -2.128906 -4.4375 -2.046875 -4.4375 L -2.046875 -1.09375 C -1.554688 -1.125 -1.175781 -1.265625 -0.90625 -1.515625 C -0.644531 -1.765625 -0.515625 -2.078125 -0.515625 -2.453125 C -0.515625 -2.734375 -0.585938 -2.96875 -0.734375 -3.15625 C -0.878906 -3.351562 -1.113281 -3.507812 -1.4375 -3.625 Z M -2.671875 -1.140625 L -2.671875 -3.640625 C -3.046875 -3.609375 -3.328125 -3.515625 -3.515625 -3.359375 C -3.804688 -3.109375 -3.953125 -2.789062 -3.953125 -2.40625 C -3.953125 -2.0625 -3.832031 -1.769531 -3.59375 -1.53125 C -3.363281 -1.289062 -3.054688 -1.160156 -2.671875 -1.140625 Z M -2.671875 -1.140625 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-2-11&quot;&gt;
&lt;path d=&quot;M 0 -0.6875 L -6.171875 -0.6875 L -6.171875 -1.5 L -3.640625 -1.5 L -3.640625 -4.71875 L -6.171875 -4.71875 L -6.171875 -5.53125 L 0 -5.53125 L 0 -4.71875 L -2.90625 -4.71875 L -2.90625 -1.5 L 0 -1.5 Z M 0 -0.6875 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-2-12&quot;&gt;
&lt;path d=&quot;M 0 0.015625 L -6.171875 -2.359375 L -6.171875 -3.234375 L 0 -5.765625 L 0 -4.828125 L -1.875 -4.109375 L -1.875 -1.53125 L 0 -0.859375 Z M -2.53125 -1.765625 L -2.53125 -3.859375 L -4.25 -3.21875 C -4.769531 -3.019531 -5.195312 -2.875 -5.53125 -2.78125 C -5.132812 -2.695312 -4.738281 -2.585938 -4.34375 -2.453125 Z M -2.53125 -1.765625 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-2-13&quot;&gt;
&lt;path d=&quot;M 0 -2.234375 L -5.453125 -2.234375 L -5.453125 -0.203125 L -6.171875 -0.203125 L -6.171875 -5.09375 L -5.453125 -5.09375 L -5.453125 -3.046875 L 0 -3.046875 Z M 0 -2.234375 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-2-14&quot;&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-2-15&quot;&gt;
&lt;path d=&quot;M -2.234375 -0.28125 C -3.066406 -0.28125 -3.679688 -0.515625 -4.078125 -0.984375 C -4.410156 -1.359375 -4.578125 -1.828125 -4.578125 -2.390625 C -4.578125 -3.003906 -4.375 -3.503906 -3.96875 -3.890625 C -3.5625 -4.285156 -3.003906 -4.484375 -2.296875 -4.484375 C -1.722656 -4.484375 -1.269531 -4.394531 -0.9375 -4.21875 C -0.613281 -4.039062 -0.359375 -3.785156 -0.171875 -3.453125 C 0.00390625 -3.128906 0.09375 -2.773438 0.09375 -2.390625 C 0.09375 -1.753906 -0.101562 -1.242188 -0.5 -0.859375 C -0.90625 -0.472656 -1.484375 -0.28125 -2.234375 -0.28125 Z M -2.234375 -1.0625 C -1.660156 -1.0625 -1.226562 -1.1875 -0.9375 -1.4375 C -0.65625 -1.6875 -0.515625 -2.003906 -0.515625 -2.390625 C -0.515625 -2.765625 -0.65625 -3.078125 -0.9375 -3.328125 C -1.226562 -3.578125 -1.671875 -3.703125 -2.265625 -3.703125 C -2.816406 -3.703125 -3.234375 -3.570312 -3.515625 -3.3125 C -3.804688 -3.0625 -3.953125 -2.753906 -3.953125 -2.390625 C -3.953125 -2.003906 -3.804688 -1.6875 -3.515625 -1.4375 C -3.234375 -1.1875 -2.804688 -1.0625 -2.234375 -1.0625 Z M -2.234375 -1.0625 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-2-16&quot;&gt;
&lt;path d=&quot;M 0 -0.625 L -6.171875 -0.625 L -6.171875 -2.953125 C -6.171875 -3.421875 -6.109375 -3.796875 -5.984375 -4.078125 C -5.859375 -4.367188 -5.664062 -4.59375 -5.40625 -4.75 C -5.144531 -4.914062 -4.875 -5 -4.59375 -5 C -4.332031 -5 -4.082031 -4.925781 -3.84375 -4.78125 C -3.613281 -4.632812 -3.425781 -4.414062 -3.28125 -4.125 C -3.175781 -4.5 -2.988281 -4.785156 -2.71875 -4.984375 C -2.457031 -5.191406 -2.148438 -5.296875 -1.796875 -5.296875 C -1.503906 -5.296875 -1.234375 -5.234375 -0.984375 -5.109375 C -0.734375 -4.984375 -0.539062 -4.832031 -0.40625 -4.65625 C -0.269531 -4.476562 -0.164062 -4.253906 -0.09375 -3.984375 C -0.03125 -3.710938 0 -3.378906 0 -2.984375 Z M -3.578125 -1.453125 L -3.578125 -2.78125 C -3.578125 -3.144531 -3.601562 -3.40625 -3.65625 -3.5625 C -3.71875 -3.769531 -3.816406 -3.925781 -3.953125 -4.03125 C -4.097656 -4.132812 -4.28125 -4.1875 -4.5 -4.1875 C -4.707031 -4.1875 -4.882812 -4.132812 -5.03125 -4.03125 C -5.1875 -3.9375 -5.296875 -3.796875 -5.359375 -3.609375 C -5.421875 -3.429688 -5.453125 -3.125 -5.453125 -2.6875 L -5.453125 -1.453125 Z M -0.734375 -1.453125 L -0.734375 -2.984375 C -0.734375 -3.242188 -0.742188 -3.429688 -0.765625 -3.546875 C -0.796875 -3.734375 -0.847656 -3.890625 -0.921875 -4.015625 C -1.003906 -4.140625 -1.117188 -4.242188 -1.265625 -4.328125 C -1.421875 -4.410156 -1.597656 -4.453125 -1.796875 -4.453125 C -2.023438 -4.453125 -2.222656 -4.390625 -2.390625 -4.265625 C -2.554688 -4.148438 -2.671875 -3.988281 -2.734375 -3.78125 C -2.804688 -3.570312 -2.84375 -3.269531 -2.84375 -2.875 L -2.84375 -1.453125 Z M -0.734375 -1.453125 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-2-17&quot;&gt;
&lt;path d=&quot;M -6.171875 -4.71875 L -6.171875 -5.53125 L -2.609375 -5.53125 C -1.984375 -5.53125 -1.488281 -5.457031 -1.125 -5.3125 C -0.757812 -5.175781 -0.460938 -4.925781 -0.234375 -4.5625 C -0.00390625 -4.195312 0.109375 -3.71875 0.109375 -3.125 C 0.109375 -2.539062 0.0078125 -2.066406 -0.1875 -1.703125 C -0.394531 -1.335938 -0.6875 -1.070312 -1.0625 -0.90625 C -1.4375 -0.75 -1.953125 -0.671875 -2.609375 -0.671875 L -6.171875 -0.671875 L -6.171875 -1.5 L -2.609375 -1.5 C -2.078125 -1.5 -1.679688 -1.546875 -1.421875 -1.640625 C -1.171875 -1.742188 -0.972656 -1.914062 -0.828125 -2.15625 C -0.691406 -2.394531 -0.625 -2.691406 -0.625 -3.046875 C -0.625 -3.648438 -0.757812 -4.078125 -1.03125 -4.328125 C -1.3125 -4.585938 -1.835938 -4.71875 -2.609375 -4.71875 Z M -6.171875 -4.71875 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-2-18&quot;&gt;
&lt;path d=&quot;M -1.984375 -0.390625 L -2.046875 -1.15625 C -1.742188 -1.195312 -1.492188 -1.28125 -1.296875 -1.40625 C -1.097656 -1.539062 -0.9375 -1.75 -0.8125 -2.03125 C -0.6875 -2.3125 -0.625 -2.628906 -0.625 -2.984375 C -0.625 -3.296875 -0.671875 -3.570312 -0.765625 -3.8125 C -0.859375 -4.050781 -0.984375 -4.226562 -1.140625 -4.34375 C -1.304688 -4.457031 -1.484375 -4.515625 -1.671875 -4.515625 C -1.867188 -4.515625 -2.039062 -4.457031 -2.1875 -4.34375 C -2.332031 -4.226562 -2.453125 -4.046875 -2.546875 -3.796875 C -2.609375 -3.628906 -2.707031 -3.257812 -2.84375 -2.6875 C -2.976562 -2.125 -3.109375 -1.726562 -3.234375 -1.5 C -3.390625 -1.207031 -3.582031 -0.988281 -3.8125 -0.84375 C -4.039062 -0.695312 -4.296875 -0.625 -4.578125 -0.625 C -4.890625 -0.625 -5.179688 -0.710938 -5.453125 -0.890625 C -5.722656 -1.066406 -5.925781 -1.320312 -6.0625 -1.65625 C -6.207031 -2 -6.28125 -2.378906 -6.28125 -2.796875 C -6.28125 -3.253906 -6.207031 -3.65625 -6.0625 -4 C -5.914062 -4.351562 -5.695312 -4.625 -5.40625 -4.8125 C -5.125 -5 -4.800781 -5.097656 -4.4375 -5.109375 L -4.375 -4.328125 C -4.769531 -4.285156 -5.066406 -4.144531 -5.265625 -3.90625 C -5.460938 -3.664062 -5.5625 -3.304688 -5.5625 -2.828125 C -5.5625 -2.335938 -5.46875 -1.976562 -5.28125 -1.75 C -5.101562 -1.519531 -4.882812 -1.40625 -4.625 -1.40625 C -4.40625 -1.40625 -4.222656 -1.488281 -4.078125 -1.65625 C -3.941406 -1.8125 -3.796875 -2.21875 -3.640625 -2.875 C -3.492188 -3.539062 -3.363281 -4 -3.25 -4.25 C -3.082031 -4.601562 -2.867188 -4.863281 -2.609375 -5.03125 C -2.359375 -5.207031 -2.070312 -5.296875 -1.75 -5.296875 C -1.414062 -5.296875 -1.101562 -5.203125 -0.8125 -5.015625 C -0.519531 -4.828125 -0.289062 -4.554688 -0.125 -4.203125 C 0.03125 -3.859375 0.109375 -3.460938 0.109375 -3.015625 C 0.109375 -2.460938 0.0234375 -1.992188 -0.140625 -1.609375 C -0.304688 -1.234375 -0.550781 -0.9375 -0.875 -0.71875 C -1.195312 -0.507812 -1.566406 -0.398438 -1.984375 -0.390625 Z M -1.984375 -0.390625 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-2-19&quot;&gt;
&lt;path d=&quot;M -2.421875 -3.546875 L -3.140625 -3.546875 L -3.15625 -6.171875 L -0.859375 -6.171875 C -0.535156 -5.765625 -0.289062 -5.347656 -0.125 -4.921875 C 0.03125 -4.492188 0.109375 -4.054688 0.109375 -3.609375 C 0.109375 -3.003906 -0.0195312 -2.453125 -0.28125 -1.953125 C -0.539062 -1.460938 -0.914062 -1.085938 -1.40625 -0.828125 C -1.894531 -0.578125 -2.445312 -0.453125 -3.0625 -0.453125 C -3.65625 -0.453125 -4.210938 -0.578125 -4.734375 -0.828125 C -5.253906 -1.085938 -5.640625 -1.453125 -5.890625 -1.921875 C -6.148438 -2.390625 -6.28125 -2.929688 -6.28125 -3.546875 C -6.28125 -3.992188 -6.207031 -4.394531 -6.0625 -4.75 C -5.914062 -5.113281 -5.710938 -5.398438 -5.453125 -5.609375 C -5.203125 -5.816406 -4.867188 -5.972656 -4.453125 -6.078125 L -4.25 -5.34375 C -4.5625 -5.25 -4.804688 -5.128906 -4.984375 -4.984375 C -5.160156 -4.847656 -5.300781 -4.648438 -5.40625 -4.390625 C -5.519531 -4.140625 -5.578125 -3.859375 -5.578125 -3.546875 C -5.578125 -3.179688 -5.519531 -2.859375 -5.40625 -2.578125 C -5.289062 -2.304688 -5.140625 -2.085938 -4.953125 -1.921875 C -4.773438 -1.753906 -4.570312 -1.625 -4.34375 -1.53125 C -3.96875 -1.375 -3.554688 -1.296875 -3.109375 -1.296875 C -2.554688 -1.296875 -2.09375 -1.390625 -1.71875 -1.578125 C -1.351562 -1.773438 -1.078125 -2.050781 -0.890625 -2.40625 C -0.710938 -2.769531 -0.625 -3.15625 -0.625 -3.5625 C -0.625 -3.914062 -0.691406 -4.257812 -0.828125 -4.59375 C -0.972656 -4.9375 -1.117188 -5.195312 -1.265625 -5.375 L -2.421875 -5.375 Z M -2.421875 -3.546875 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-2-20&quot;&gt;
&lt;path d=&quot;M 0 -0.671875 L -6.171875 -0.671875 L -6.171875 -2.796875 C -6.171875 -3.273438 -6.140625 -3.640625 -6.078125 -3.890625 C -6.003906 -4.242188 -5.859375 -4.546875 -5.640625 -4.796875 C -5.367188 -5.117188 -5.019531 -5.359375 -4.59375 -5.515625 C -4.164062 -5.679688 -3.675781 -5.765625 -3.125 -5.765625 C -2.65625 -5.765625 -2.238281 -5.707031 -1.875 -5.59375 C -1.507812 -5.488281 -1.207031 -5.347656 -0.96875 -5.171875 C -0.738281 -5.003906 -0.550781 -4.816406 -0.40625 -4.609375 C -0.269531 -4.410156 -0.164062 -4.164062 -0.09375 -3.875 C -0.03125 -3.59375 0 -3.265625 0 -2.890625 Z M -0.734375 -1.484375 L -0.734375 -2.796875 C -0.734375 -3.203125 -0.769531 -3.519531 -0.84375 -3.75 C -0.914062 -3.988281 -1.019531 -4.175781 -1.15625 -4.3125 C -1.351562 -4.507812 -1.613281 -4.660156 -1.9375 -4.765625 C -2.269531 -4.867188 -2.671875 -4.921875 -3.140625 -4.921875 C -3.785156 -4.921875 -4.28125 -4.816406 -4.625 -4.609375 C -4.96875 -4.398438 -5.195312 -4.144531 -5.3125 -3.84375 C -5.40625 -3.625 -5.453125 -3.269531 -5.453125 -2.78125 L -5.453125 -1.484375 Z M -0.734375 -1.484375 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-2-21&quot;&gt;
&lt;path d=&quot;M 0 -0.6875 L -6.171875 -0.6875 L -6.171875 -5.140625 L -5.453125 -5.140625 L -5.453125 -1.5 L -3.546875 -1.5 L -3.546875 -4.921875 L -2.828125 -4.921875 L -2.828125 -1.5 L -0.734375 -1.5 L -0.734375 -5.296875 L 0 -5.296875 Z M 0 -0.6875 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-2-22&quot;&gt;
&lt;path d=&quot;M 0.109375 0 L -6.28125 -1.796875 L -6.28125 -2.390625 L 0.109375 -0.609375 Z M 0.109375 0 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-2-23&quot;&gt;
&lt;path d=&quot;M 0 -0.640625 L -6.171875 -0.640625 L -6.171875 -1.875 L -1.796875 -3.328125 C -1.390625 -3.460938 -1.085938 -3.5625 -0.890625 -3.625 C -1.109375 -3.695312 -1.4375 -3.804688 -1.875 -3.953125 L -6.171875 -5.4375 L -6.171875 -6.53125 L 0 -6.53125 L 0 -5.75 L -5.171875 -5.75 L 0 -3.953125 L 0 -3.21875 L -5.25 -1.421875 L 0 -1.421875 Z M 0 -0.640625 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-2-24&quot;&gt;
&lt;path d=&quot;M -2.171875 -5.078125 L -1.953125 -5.890625 C -1.285156 -5.710938 -0.773438 -5.398438 -0.421875 -4.953125 C -0.0664062 -4.515625 0.109375 -3.972656 0.109375 -3.328125 C 0.109375 -2.660156 -0.0234375 -2.117188 -0.296875 -1.703125 C -0.566406 -1.285156 -0.957031 -0.96875 -1.46875 -0.75 C -1.988281 -0.53125 -2.546875 -0.421875 -3.140625 -0.421875 C -3.773438 -0.421875 -4.332031 -0.546875 -4.8125 -0.796875 C -5.289062 -1.046875 -5.65625 -1.394531 -5.90625 -1.84375 C -6.15625 -2.300781 -6.28125 -2.800781 -6.28125 -3.34375 C -6.28125 -3.957031 -6.117188 -4.472656 -5.796875 -4.890625 C -5.484375 -5.316406 -5.046875 -5.613281 -4.484375 -5.78125 L -4.296875 -4.984375 C -4.742188 -4.835938 -5.066406 -4.628906 -5.265625 -4.359375 C -5.472656 -4.085938 -5.578125 -3.742188 -5.578125 -3.328125 C -5.578125 -2.847656 -5.460938 -2.445312 -5.234375 -2.125 C -5.003906 -1.8125 -4.695312 -1.585938 -4.3125 -1.453125 C -3.9375 -1.328125 -3.546875 -1.265625 -3.140625 -1.265625 C -2.609375 -1.265625 -2.144531 -1.34375 -1.75 -1.5 C -1.363281 -1.65625 -1.070312 -1.894531 -0.875 -2.21875 C -0.6875 -2.539062 -0.59375 -2.890625 -0.59375 -3.265625 C -0.59375 -3.722656 -0.722656 -4.109375 -0.984375 -4.421875 C -1.253906 -4.742188 -1.648438 -4.960938 -2.171875 -5.078125 Z M -2.171875 -5.078125 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-3-0&quot;&gt;
&lt;path d=&quot;M 0 -0.75 L -6.359375 -0.75 L -6.359375 -5.25 L 0 -5.25 Z M -0.671875 -1.421875 L -0.671875 -4.59375 L -5.6875 -4.59375 L -5.6875 -1.421875 Z M -0.671875 -1.421875 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-3-1&quot;&gt;
&lt;path d=&quot;M -0.125 -0.25 L -0.125 -3.9375 L -5.75 -3.9375 L -5.75 -0.71875 L -6.421875 -0.71875 L -6.421875 -7.90625 L -5.75 -7.90625 L -5.75 -4.671875 L -0.125 -4.671875 L -0.125 -8.375 L 0.53125 -8.375 L 0.53125 -0.25 Z M -0.125 -0.25 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-3-2&quot;&gt;
&lt;path d=&quot;M -6.78125 -3.703125 L -6.78125 -7.890625 L -3.890625 -7.890625 L -3.890625 -7.25 L -4.234375 -7.25 L -4.234375 -4.34375 L -3.890625 -4.34375 L -3.890625 -3.703125 Z M -1.21875 -0.0625 C -2.03125 -0.613281 -2.988281 -1.039062 -4.09375 -1.34375 L -4.09375 -0.15625 L -4.65625 -0.15625 L -4.65625 -1.46875 L -5.96875 -1.46875 C -5.914062 -1.113281 -5.867188 -0.753906 -5.828125 -0.390625 C -6.023438 -0.335938 -6.21875 -0.273438 -6.40625 -0.203125 C -6.488281 -1.160156 -6.644531 -2.125 -6.875 -3.09375 L -6.28125 -3.28125 C -6.195312 -2.894531 -6.125 -2.492188 -6.0625 -2.078125 L -4.65625 -2.078125 L -4.65625 -3.25 L -4.09375 -3.25 L -4.09375 -2.078125 L -2.984375 -2.078125 L -3.265625 -2.40625 C -3.035156 -2.632812 -2.671875 -2.960938 -2.171875 -3.390625 L -1.75 -2.890625 C -2.164062 -2.566406 -2.503906 -2.296875 -2.765625 -2.078125 L 1.140625 -2.078125 L 1.140625 -1.46875 L -2.90625 -1.46875 C -1.9375 -1.175781 -1.128906 -0.800781 -0.484375 -0.34375 C -0.722656 -0.25 -0.96875 -0.15625 -1.21875 -0.0625 Z M 0.109375 -3.03125 L 0.109375 -5.4375 L -1.140625 -5.4375 L -1.140625 -3.53125 L -1.703125 -3.53125 L -1.703125 -5.4375 L -2.84375 -5.4375 L -2.84375 -3.328125 L -3.40625 -3.328125 L -3.40625 -8.234375 L -2.84375 -8.234375 L -2.84375 -6.109375 L -1.703125 -6.109375 L -1.703125 -8.03125 L -1.140625 -8.03125 L -1.140625 -6.109375 L 0.109375 -6.109375 L 0.109375 -8.53125 L 0.671875 -8.53125 L 0.671875 -3.03125 Z M -6.203125 -7.25 L -6.203125 -4.34375 L -4.8125 -4.34375 L -4.8125 -7.25 Z M -6.203125 -7.25 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-3-3&quot;&gt;
&lt;path d=&quot;M -4.984375 -0.515625 L -4.984375 -1.671875 L -6.078125 -1.671875 L -6.078125 -0.265625 L -6.640625 -0.265625 L -6.640625 -4.71875 L -6.078125 -4.71875 L -6.078125 -3.328125 L -4.984375 -3.328125 L -4.984375 -4.546875 L 1.03125 -4.546875 L 1.03125 -3.984375 L 0.5 -3.984375 L 0.5 -1.09375 L 1.046875 -1.09375 L 1.046875 -0.515625 Z M -3.921875 -5.15625 L -3.921875 -7.390625 L -6.125 -7.390625 L -6.125 -5.015625 L -6.703125 -5.015625 L -6.703125 -8 L -3.015625 -8 L -3.015625 -7.390625 L -3.34375 -7.390625 L -3.34375 -5.765625 L -0.421875 -5.765625 C 0.015625 -5.765625 0.234375 -5.957031 0.234375 -6.34375 L 0.234375 -7.140625 C 0.234375 -7.472656 0.0703125 -7.660156 -0.25 -7.703125 C -0.632812 -7.773438 -1.09375 -7.828125 -1.625 -7.859375 C -1.539062 -8.015625 -1.445312 -8.222656 -1.34375 -8.484375 C -0.882812 -8.453125 -0.453125 -8.394531 -0.046875 -8.3125 C 0.546875 -8.21875 0.84375 -7.863281 0.84375 -7.25 L 0.84375 -6.171875 C 0.84375 -5.492188 0.445312 -5.15625 -0.34375 -5.15625 Z M -3.09375 -2.78125 L -4.4375 -2.78125 L -4.4375 -2.21875 L -4.109375 -2.21875 C -3.210938 -2.21875 -2.46875 -1.984375 -1.875 -1.515625 C -2.007812 -1.378906 -2.144531 -1.238281 -2.28125 -1.09375 L -1.59375 -1.09375 L -1.59375 -3.984375 L -2.390625 -3.984375 L -2.390625 -3.390625 C -2.390625 -2.984375 -2.625 -2.78125 -3.09375 -2.78125 Z M -0.046875 -1.09375 L -0.046875 -3.984375 L -1.0625 -3.984375 L -1.0625 -1.09375 Z M -4.4375 -3.984375 L -4.4375 -3.328125 L -3.265625 -3.328125 C -3.015625 -3.316406 -2.898438 -3.421875 -2.921875 -3.640625 L -2.921875 -3.984375 Z M -2.34375 -1.09375 C -2.789062 -1.476562 -3.390625 -1.671875 -4.140625 -1.671875 L -4.4375 -1.671875 L -4.4375 -1.09375 Z M -4.984375 -2.21875 L -4.984375 -2.78125 L -6.078125 -2.78125 L -6.078125 -2.21875 Z M -4.984375 -2.21875 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-3-4&quot;&gt;
&lt;path d=&quot;M 0.390625 -0.125 L 0.390625 -1.375 L -3.515625 -1.375 L -3.515625 -3.953125 L -4.0625 -3.953125 L -4.0625 -0.328125 L -4.53125 -0.328125 L -4.53125 -3.953125 L -4.984375 -3.953125 L -4.984375 -4.5625 L -4.53125 -4.5625 L -4.53125 -8.28125 L -4.0625 -8.28125 L -4.0625 -4.5625 L -3.515625 -4.5625 L -3.515625 -7.3125 L 0.390625 -7.3125 L 0.390625 -8.484375 L 0.875 -8.484375 L 0.875 -0.125 Z M -6.78125 -0.859375 L -6.78125 -7.75 L -4.90625 -7.75 L -4.90625 -7.1875 L -5.09375 -7.1875 L -5.09375 -1.4375 L -4.90625 -1.4375 L -4.90625 -0.859375 Z M 0.390625 -1.96875 L 0.390625 -6.734375 L -0.15625 -6.734375 L -0.15625 -1.96875 Z M -0.59375 -1.96875 L -0.59375 -6.734375 L -1.125 -6.734375 L -1.125 -1.96875 Z M -1.5625 -1.96875 L -1.5625 -6.734375 L -2.09375 -6.734375 L -2.09375 -1.96875 Z M -3.0625 -6.734375 L -3.0625 -1.96875 L -2.53125 -1.96875 L -2.53125 -6.734375 Z M -6.328125 -7.1875 L -6.328125 -5.640625 L -5.5625 -5.640625 L -5.5625 -7.1875 Z M -5.5625 -3.53125 L -5.5625 -5.078125 L -6.328125 -5.078125 L -6.328125 -3.53125 Z M -5.5625 -1.4375 L -5.5625 -2.984375 L -6.328125 -2.984375 L -6.328125 -1.4375 Z M -5.5625 -1.4375 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-3-5&quot;&gt;
&lt;path d=&quot;M -3.328125 -3.21875 L -3.890625 -3.21875 L -3.890625 -5.390625 L -5.171875 -5.390625 L -5.171875 -3.1875 L -5.796875 -3.1875 L -5.796875 -5.390625 L -7.140625 -5.390625 L -7.140625 -6.0625 L -5.796875 -6.0625 L -5.796875 -8.359375 L -5.171875 -8.359375 L -5.171875 -6.0625 L -3.890625 -6.0625 L -3.890625 -7.859375 L -3.375 -7.859375 C -2.257812 -7.460938 -1.351562 -6.898438 -0.65625 -6.171875 C -0.15625 -6.804688 0.222656 -7.585938 0.484375 -8.515625 C 0.734375 -8.304688 0.953125 -8.125 1.140625 -7.96875 C 0.765625 -7.0625 0.3125 -6.289062 -0.21875 -5.65625 C 0.332031 -4.914062 0.804688 -4.050781 1.203125 -3.0625 C 1.023438 -2.945312 0.828125 -2.800781 0.609375 -2.625 C 0.273438 -3.625 -0.144531 -4.476562 -0.65625 -5.1875 C -1.34375 -4.5625 -2.234375 -4.09375 -3.328125 -3.78125 Z M -2.703125 -0.09375 C -2.828125 -0.519531 -2.945312 -0.929688 -3.0625 -1.328125 L -4.875 -1.328125 L -4.875 -0.203125 L -5.46875 -0.203125 L -5.46875 -1.328125 L -7.09375 -1.328125 L -7.09375 -1.984375 L -5.46875 -1.984375 L -5.46875 -2.96875 L -4.875 -2.96875 L -4.875 -1.984375 L -3.265625 -1.984375 C -3.367188 -2.304688 -3.472656 -2.617188 -3.578125 -2.921875 C -3.304688 -2.921875 -3.085938 -2.925781 -2.921875 -2.9375 C -2.816406 -2.625 -2.710938 -2.304688 -2.609375 -1.984375 L 0.109375 -1.984375 C 0.703125 -1.984375 1 -1.703125 1 -1.140625 C 1.007812 -0.910156 1.007812 -0.640625 1 -0.328125 C 0.769531 -0.296875 0.535156 -0.257812 0.296875 -0.21875 C 0.328125 -0.550781 0.34375 -0.800781 0.34375 -0.96875 C 0.34375 -1.207031 0.21875 -1.328125 -0.03125 -1.328125 L -2.390625 -1.328125 C -2.265625 -0.953125 -2.140625 -0.570312 -2.015625 -0.1875 Z M -3.328125 -7.125 L -3.328125 -4.4375 C -2.441406 -4.6875 -1.691406 -5.109375 -1.078125 -5.703125 C -1.710938 -6.359375 -2.460938 -6.832031 -3.328125 -7.125 Z M -3.328125 -7.125 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-3-6&quot;&gt;
&lt;path d=&quot;M -0.546875 -8.5625 C -0.316406 -8.351562 -0.09375 -8.171875 0.125 -8.015625 C -0.863281 -6.617188 -2.265625 -5.5 -4.078125 -4.65625 L 1.140625 -4.65625 L 1.140625 -3.984375 L -4.09375 -3.984375 C -2.40625 -3.203125 -0.960938 -2.054688 0.234375 -0.546875 C 0.0546875 -0.410156 -0.15625 -0.242188 -0.40625 -0.046875 C -1.5 -1.554688 -2.867188 -2.757812 -4.515625 -3.65625 L -4.515625 -0.3125 L -5.140625 -0.3125 L -5.140625 -3.984375 L -7.1875 -3.984375 L -7.1875 -4.65625 L -5.140625 -4.65625 L -5.140625 -8.34375 L -4.515625 -8.34375 L -4.515625 -4.96875 C -2.679688 -5.90625 -1.359375 -7.101562 -0.546875 -8.5625 Z M -6.578125 -5.484375 L -7.046875 -5.90625 C -6.722656 -6.394531 -6.359375 -6.878906 -5.953125 -7.359375 L -5.421875 -6.890625 C -5.835938 -6.421875 -6.222656 -5.953125 -6.578125 -5.484375 Z M -6.578125 -5.484375 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-3-7&quot;&gt;
&lt;path d=&quot;M -1.046875 -2.609375 L 1.203125 -1.890625 L 1.203125 -1.296875 L -1.046875 -1.8125 Z M -1.046875 -2.609375 &quot;/&gt;
&lt;/g&gt;
&lt;/g&gt;
&lt;clipPath id=&quot;clip-0&quot;&gt;
&lt;path clip-rule=&quot;nonzero&quot; d=&quot;M 0 0 L 594.960938 0 L 594.960938 420.378906 L 0 420.378906 Z M 0 0 &quot;/&gt;
&lt;/clipPath&gt;
&lt;clipPath id=&quot;clip-1&quot;&gt;
&lt;path clip-rule=&quot;nonzero&quot; d=&quot;M 0 0 L 594.960938 0 L 594.960938 420 L 0 420 Z M 0 0 &quot;/&gt;
&lt;/clipPath&gt;
&lt;/defs&gt;
&lt;g clip-path=&quot;url(#clip-0)&quot;&gt;
&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;rgb(100%, 100%, 100%)&quot; fill-opacity=&quot;1&quot; d=&quot;M 0 0 L 595 0 L 595 420.378906 L 0 420.378906 Z M 0 0 &quot;/&gt;
&lt;/g&gt;
&lt;g clip-path=&quot;url(#clip-1)&quot;&gt;
&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;rgb(100%, 100%, 100%)&quot; fill-opacity=&quot;1&quot; d=&quot;M 0 0 L 595 0 L 595 419.660156 L 0 419.660156 Z M 0 0 &quot;/&gt;
&lt;/g&gt;
&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;rgb(96.078491%, 96.078491%, 96.078491%)&quot; fill-opacity=&quot;1&quot; stroke-width=&quot;1&quot; stroke-linecap=&quot;butt&quot; stroke-linejoin=&quot;miter&quot; stroke=&quot;rgb(39.99939%, 39.99939%, 39.99939%)&quot; stroke-opacity=&quot;1&quot; stroke-miterlimit=&quot;4&quot; d=&quot;M 199.998646 440.000156 L 320.002119 440.000156 L 320.002119 500.001892 L 199.998646 500.001892 Z M 199.998646 440.000156 &quot; transform=&quot;matrix(0.718599, 0, 0, 0.718599, 0.359299, 0.359299)&quot;/&gt;
&lt;g fill=&quot;rgb(19.999695%, 19.999695%, 19.999695%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-0-1&quot; x=&quot;178.212551&quot; y=&quot;330.555537&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-2&quot; x=&quot;186.835738&quot; y=&quot;330.555537&quot;/&gt;
&lt;/g&gt;
&lt;g fill=&quot;rgb(19.999695%, 19.999695%, 19.999695%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-1-1&quot; x=&quot;151.366145&quot; y=&quot;340.615923&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-1-2&quot; x=&quot;157.593535&quot; y=&quot;340.615923&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-1-3&quot; x=&quot;163.345134&quot; y=&quot;340.615923&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-1-4&quot; x=&quot;168.14094&quot; y=&quot;340.615923&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-1-5&quot; x=&quot;172.936746&quot; y=&quot;340.615923&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-1-6&quot; x=&quot;177.732552&quot; y=&quot;340.615923&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-1-7&quot; x=&quot;180.12835&quot; y=&quot;340.615923&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-1-6&quot; x=&quot;182.524148&quot; y=&quot;340.615923&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-1-1&quot; x=&quot;184.919946&quot; y=&quot;340.615923&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-1-2&quot; x=&quot;191.147336&quot; y=&quot;340.615923&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-1-3&quot; x=&quot;196.898935&quot; y=&quot;340.615923&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-1-4&quot; x=&quot;201.694741&quot; y=&quot;340.615923&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-1-5&quot; x=&quot;206.490547&quot; y=&quot;340.615923&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-1-8&quot; x=&quot;211.286353&quot; y=&quot;340.615923&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-1-9&quot; x=&quot;214.157942&quot; y=&quot;340.615923&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-1-2&quot; x=&quot;216.55374&quot; y=&quot;340.615923&quot;/&gt;
&lt;/g&gt;
&lt;g fill=&quot;rgb(19.999695%, 19.999695%, 19.999695%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-1-10&quot; x=&quot;159.11354&quot; y=&quot;351.394908&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-1-11&quot; x=&quot;166.296723&quot; y=&quot;351.394908&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-1-12&quot; x=&quot;172.048322&quot; y=&quot;351.394908&quot;/&gt;
&lt;/g&gt;
&lt;g fill=&quot;rgb(19.999695%, 19.999695%, 19.999695%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-1-6&quot; x=&quot;177.644131&quot; y=&quot;351.394908&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-1-7&quot; x=&quot;180.039929&quot; y=&quot;351.394908&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-1-6&quot; x=&quot;182.435726&quot; y=&quot;351.394908&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-1-10&quot; x=&quot;184.831524&quot; y=&quot;351.394908&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-1-11&quot; x=&quot;192.014707&quot; y=&quot;351.394908&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-1-12&quot; x=&quot;197.766306&quot; y=&quot;351.394908&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-1-8&quot; x=&quot;203.517905&quot; y=&quot;351.394908&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-1-9&quot; x=&quot;206.389494&quot; y=&quot;351.394908&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-1-2&quot; x=&quot;208.785292&quot; y=&quot;351.394908&quot;/&gt;
&lt;/g&gt;
&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;rgb(96.078491%, 96.078491%, 96.078491%)&quot; fill-opacity=&quot;1&quot; stroke-width=&quot;1&quot; stroke-linecap=&quot;butt&quot; stroke-linejoin=&quot;miter&quot; stroke=&quot;rgb(39.99939%, 39.99939%, 39.99939%)&quot; stroke-opacity=&quot;1&quot; stroke-miterlimit=&quot;4&quot; d=&quot;M 359.999652 440.000156 L 479.997689 440.000156 L 479.997689 500.001892 L 359.999652 500.001892 Z M 359.999652 440.000156 &quot; transform=&quot;matrix(0.718599, 0, 0, 0.718599, 0.359299, 0.359299)&quot;/&gt;
&lt;g fill=&quot;rgb(19.999695%, 19.999695%, 19.999695%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-0-3&quot; x=&quot;293.177165&quot; y=&quot;330.555537&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-4&quot; x=&quot;301.800353&quot; y=&quot;330.555537&quot;/&gt;
&lt;/g&gt;
&lt;g fill=&quot;rgb(19.999695%, 19.999695%, 19.999695%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-0-5&quot; x=&quot;260.121611&quot; y=&quot;340.615923&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-6&quot; x=&quot;268.744799&quot; y=&quot;340.615923&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-4&quot; x=&quot;277.367987&quot; y=&quot;340.615923&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-7&quot; x=&quot;285.991175&quot; y=&quot;340.615923&quot;/&gt;
&lt;/g&gt;
&lt;g fill=&quot;rgb(19.999695%, 19.999695%, 19.999695%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-1-6&quot; x=&quot;294.614363&quot; y=&quot;340.615923&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-1-7&quot; x=&quot;297.010161&quot; y=&quot;340.615923&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-1-6&quot; x=&quot;299.405959&quot; y=&quot;340.615923&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-1-12&quot; x=&quot;301.801756&quot; y=&quot;340.615923&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-1-13&quot; x=&quot;307.553355&quot; y=&quot;340.615923&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-1-14&quot; x=&quot;313.780746&quot; y=&quot;340.615923&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-1-6&quot; x=&quot;319.048132&quot; y=&quot;340.615923&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-1-7&quot; x=&quot;321.44393&quot; y=&quot;340.615923&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-1-6&quot; x=&quot;323.839728&quot; y=&quot;340.615923&quot;/&gt;
&lt;/g&gt;
&lt;g fill=&quot;rgb(19.999695%, 19.999695%, 19.999695%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-0-8&quot; x=&quot;326.235526&quot; y=&quot;340.615923&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-9&quot; x=&quot;334.858714&quot; y=&quot;340.615923&quot;/&gt;
&lt;/g&gt;
&lt;g fill=&quot;rgb(19.999695%, 19.999695%, 19.999695%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-1-6&quot; x=&quot;300.598942&quot; y=&quot;351.394908&quot;/&gt;
&lt;/g&gt;
&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;rgb(96.078491%, 96.078491%, 96.078491%)&quot; fill-opacity=&quot;1&quot; stroke-width=&quot;1&quot; stroke-linecap=&quot;butt&quot; stroke-linejoin=&quot;miter&quot; stroke=&quot;rgb(39.99939%, 39.99939%, 39.99939%)&quot; stroke-opacity=&quot;1&quot; stroke-miterlimit=&quot;4&quot; d=&quot;M 520.000659 440.000156 L 639.998696 440.000156 L 639.998696 500.001892 L 520.000659 500.001892 Z M 520.000659 440.000156 &quot; transform=&quot;matrix(0.718599, 0, 0, 0.718599, 0.359299, 0.359299)&quot;/&gt;
&lt;g fill=&quot;rgb(19.999695%, 19.999695%, 19.999695%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-0-10&quot; x=&quot;408.164229&quot; y=&quot;330.555537&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-2&quot; x=&quot;416.787417&quot; y=&quot;330.555537&quot;/&gt;
&lt;/g&gt;
&lt;g fill=&quot;rgb(19.999695%, 19.999695%, 19.999695%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-1-6&quot; x=&quot;415.586012&quot; y=&quot;351.394908&quot;/&gt;
&lt;/g&gt;
&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;rgb(88.238525%, 83.529663%, 90.589905%)&quot; fill-opacity=&quot;1&quot; stroke-width=&quot;1&quot; stroke-linecap=&quot;butt&quot; stroke-linejoin=&quot;miter&quot; stroke=&quot;rgb(58.81958%, 45.098877%, 65.098572%)&quot; stroke-opacity=&quot;1&quot; stroke-miterlimit=&quot;4&quot; d=&quot;M 199.998646 340.000885 L 639.998696 340.000885 L 639.998696 400.002622 L 199.998646 400.002622 Z M 199.998646 340.000885 &quot; transform=&quot;matrix(0.718599, 0, 0, 0.718599, 0.359299, 0.359299)&quot;/&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-1-12&quot; x=&quot;225.696228&quot; y=&quot;268.756024&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-1-1&quot; x=&quot;231.447827&quot; y=&quot;268.756024&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-1-15&quot; x=&quot;237.675217&quot; y=&quot;268.756024&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-1-14&quot; x=&quot;244.382609&quot; y=&quot;268.756024&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-1-9&quot; x=&quot;249.649996&quot; y=&quot;268.756024&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-1-11&quot; x=&quot;252.045794&quot; y=&quot;268.756024&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-1-16&quot; x=&quot;257.797393&quot; y=&quot;268.756024&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-1-2&quot; x=&quot;264.024783&quot; y=&quot;268.756024&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-1-6&quot; x=&quot;269.776382&quot; y=&quot;268.756024&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-1-17&quot; x=&quot;272.17218&quot; y=&quot;268.756024&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-1-12&quot; x=&quot;278.39957&quot; y=&quot;268.756024&quot;/&gt;
&lt;/g&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-1-6&quot; x=&quot;283.995379&quot; y=&quot;268.756024&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-1-18&quot; x=&quot;286.391176&quot; y=&quot;268.756024&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-1-17&quot; x=&quot;289.262765&quot; y=&quot;268.756024&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-1-12&quot; x=&quot;295.490155&quot; y=&quot;268.756024&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-1-8&quot; x=&quot;301.241754&quot; y=&quot;268.756024&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-1-19&quot; x=&quot;304.113343&quot; y=&quot;268.756024&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-1-20&quot; x=&quot;309.864942&quot; y=&quot;268.756024&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-1-21&quot; x=&quot;314.660748&quot; y=&quot;268.756024&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-1-6&quot; x=&quot;317.056546&quot; y=&quot;268.756024&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-1-17&quot; x=&quot;319.452344&quot; y=&quot;268.756024&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-1-12&quot; x=&quot;325.679734&quot; y=&quot;268.756024&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-1-8&quot; x=&quot;331.431333&quot; y=&quot;268.756024&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-1-19&quot; x=&quot;334.302922&quot; y=&quot;268.756024&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-1-22&quot; x=&quot;340.054521&quot; y=&quot;268.756024&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-1-21&quot; x=&quot;344.850327&quot; y=&quot;268.756024&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-1-6&quot; x=&quot;347.246125&quot; y=&quot;268.756024&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-1-17&quot; x=&quot;349.641923&quot; y=&quot;268.756024&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-1-12&quot; x=&quot;355.869313&quot; y=&quot;268.756024&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-1-8&quot; x=&quot;361.620912&quot; y=&quot;268.756024&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-1-19&quot; x=&quot;364.492501&quot; y=&quot;268.756024&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-1-23&quot; x=&quot;370.2441&quot; y=&quot;268.756024&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-1-24&quot; x=&quot;375.039906&quot; y=&quot;268.756024&quot;/&gt;
&lt;/g&gt;
&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;rgb(83.529663%, 90.979004%, 83.139038%)&quot; fill-opacity=&quot;1&quot; stroke-width=&quot;1&quot; stroke-linecap=&quot;butt&quot; stroke-linejoin=&quot;miter&quot; stroke=&quot;rgb(50.979614%, 70.199585%, 39.99939%)&quot; stroke-opacity=&quot;1&quot; stroke-miterlimit=&quot;4&quot; d=&quot;M 199.998646 240.001615 L 639.998696 240.001615 L 639.998696 299.997916 L 199.998646 299.997916 Z M 199.998646 240.001615 &quot; transform=&quot;matrix(0.718599, 0, 0, 0.718599, 0.359299, 0.359299)&quot;/&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-1-12&quot; x=&quot;190.70944&quot; y=&quot;196.896124&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-1-1&quot; x=&quot;196.461039&quot; y=&quot;196.896124&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-1-15&quot; x=&quot;202.688429&quot; y=&quot;196.896124&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-1-14&quot; x=&quot;209.395821&quot; y=&quot;196.896124&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-1-9&quot; x=&quot;214.663207&quot; y=&quot;196.896124&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-1-25&quot; x=&quot;217.059005&quot; y=&quot;196.896124&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-1-26&quot; x=&quot;221.370599&quot; y=&quot;196.896124&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-1-27&quot; x=&quot;226.166405&quot; y=&quot;196.896124&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-1-28&quot; x=&quot;228.562203&quot; y=&quot;196.896124&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-1-21&quot; x=&quot;233.358009&quot; y=&quot;196.896124&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-1-6&quot; x=&quot;235.753807&quot; y=&quot;196.896124&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-1-9&quot; x=&quot;238.149605&quot; y=&quot;196.896124&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-1-29&quot; x=&quot;240.545403&quot; y=&quot;196.896124&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-1-10&quot; x=&quot;246.297002&quot; y=&quot;196.896124&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-1-21&quot; x=&quot;253.480185&quot; y=&quot;196.896124&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-1-6&quot; x=&quot;255.875982&quot; y=&quot;196.896124&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-1-30&quot; x=&quot;258.27178&quot; y=&quot;196.896124&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-1-12&quot; x=&quot;260.187576&quot; y=&quot;196.896124&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-1-26&quot; x=&quot;265.939175&quot; y=&quot;196.896124&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-1-31&quot; x=&quot;270.734981&quot; y=&quot;196.896124&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-1-8&quot; x=&quot;273.60657&quot; y=&quot;196.896124&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-1-2&quot; x=&quot;276.478159&quot; y=&quot;196.896124&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-1-28&quot; x=&quot;282.229758&quot; y=&quot;196.896124&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-1-31&quot; x=&quot;287.025564&quot; y=&quot;196.896124&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-1-32&quot; x=&quot;289.897153&quot; y=&quot;196.896124&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-1-28&quot; x=&quot;294.208747&quot; y=&quot;196.896124&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-1-31&quot; x=&quot;299.004554&quot; y=&quot;196.896124&quot;/&gt;
&lt;/g&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-1-21&quot; x=&quot;301.400351&quot; y=&quot;196.896124&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-1-6&quot; x=&quot;303.796149&quot; y=&quot;196.896124&quot;/&gt;
&lt;/g&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-1-33&quot; x=&quot;306.036157&quot; y=&quot;196.896124&quot;/&gt;
&lt;/g&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-1-30&quot; x=&quot;310.983543&quot; y=&quot;196.896124&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-1-34&quot; x=&quot;312.899339&quot; y=&quot;196.896124&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-1-28&quot; x=&quot;320.082522&quot; y=&quot;196.896124&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-1-25&quot; x=&quot;324.878328&quot; y=&quot;196.896124&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-1-35&quot; x=&quot;329.189922&quot; y=&quot;196.896124&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-1-26&quot; x=&quot;331.58572&quot; y=&quot;196.896124&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-1-34&quot; x=&quot;336.381526&quot; y=&quot;196.896124&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-1-36&quot; x=&quot;343.564709&quot; y=&quot;196.896124&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-1-21&quot; x=&quot;348.360515&quot; y=&quot;196.896124&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-1-6&quot; x=&quot;350.756313&quot; y=&quot;196.896124&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-1-1&quot; x=&quot;353.15211&quot; y=&quot;196.896124&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-1-28&quot; x=&quot;359.3795&quot; y=&quot;196.896124&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-1-37&quot; x=&quot;364.175307&quot; y=&quot;196.896124&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-1-38&quot; x=&quot;368.971113&quot; y=&quot;196.896124&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-1-39&quot; x=&quot;373.766919&quot; y=&quot;196.896124&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-1-37&quot; x=&quot;378.562725&quot; y=&quot;196.896124&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-1-26&quot; x=&quot;383.358531&quot; y=&quot;196.896124&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-1-39&quot; x=&quot;388.154337&quot; y=&quot;196.896124&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-1-40&quot; x=&quot;392.950143&quot; y=&quot;196.896124&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-1-41&quot; x=&quot;397.261737&quot; y=&quot;196.896124&quot;/&gt;
&lt;/g&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-1-21&quot; x=&quot;400.933329&quot; y=&quot;196.896124&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-1-6&quot; x=&quot;403.329127&quot; y=&quot;196.896124&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-1-42&quot; x=&quot;405.724925&quot; y=&quot;196.896124&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-1-42&quot; x=&quot;408.120723&quot; y=&quot;196.896124&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-1-42&quot; x=&quot;410.516521&quot; y=&quot;196.896124&quot;/&gt;
&lt;/g&gt;
&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;rgb(85.488892%, 90.979004%, 98.81897%)&quot; fill-opacity=&quot;1&quot; stroke-width=&quot;1&quot; stroke-linecap=&quot;butt&quot; stroke-linejoin=&quot;miter&quot; stroke=&quot;rgb(42.349243%, 55.688477%, 74.899292%)&quot; stroke-opacity=&quot;1&quot; stroke-miterlimit=&quot;4&quot; d=&quot;M 199.998646 80.000608 L 240.001615 80.000608 L 240.001615 199.998646 L 199.998646 199.998646 Z M 199.998646 80.000608 &quot; transform=&quot;matrix(0.718599, 0, 0, 0.718599, 0.359299, 0.359299)&quot;/&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-2-1&quot; x=&quot;160.966173&quot; y=&quot;123.127452&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-2-2&quot; x=&quot;160.966173&quot; y=&quot;117.375853&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-2-3&quot; x=&quot;160.966173&quot; y=&quot;111.148463&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-2-4&quot; x=&quot;160.966173&quot; y=&quot;104.441071&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-2-5&quot; x=&quot;160.966173&quot; y=&quot;99.173685&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-2-6&quot; x=&quot;160.966173&quot; y=&quot;96.777887&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-2-7&quot; x=&quot;160.966173&quot; y=&quot;91.982081&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-2-8&quot; x=&quot;160.966173&quot; y=&quot;89.110492&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-2-9&quot; x=&quot;160.966173&quot; y=&quot;87.194695&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-2-10&quot; x=&quot;160.966173&quot; y=&quot;82.883102&quot;/&gt;
&lt;/g&gt;
&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;rgb(85.488892%, 90.979004%, 98.81897%)&quot; fill-opacity=&quot;1&quot; stroke-width=&quot;1&quot; stroke-linecap=&quot;butt&quot; stroke-linejoin=&quot;miter&quot; stroke=&quot;rgb(42.349243%, 55.688477%, 74.899292%)&quot; stroke-opacity=&quot;1&quot; stroke-miterlimit=&quot;4&quot; d=&quot;M 260.000382 80.000608 L 299.997916 80.000608 L 299.997916 199.998646 L 260.000382 199.998646 Z M 260.000382 80.000608 &quot; transform=&quot;matrix(0.718599, 0, 0, 0.718599, 0.359299, 0.359299)&quot;/&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-0-11&quot; x=&quot;196.896124&quot; y=&quot;83.357483&quot;/&gt;
&lt;/g&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-0-12&quot; x=&quot;196.896124&quot; y=&quot;93.417869&quot;/&gt;
&lt;/g&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-0-13&quot; x=&quot;196.896124&quot; y=&quot;103.478255&quot;/&gt;
&lt;/g&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-0-14&quot; x=&quot;196.896124&quot; y=&quot;114.25724&quot;/&gt;
&lt;/g&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-0-15&quot; x=&quot;196.896124&quot; y=&quot;124.317626&quot;/&gt;
&lt;/g&gt;
&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;rgb(85.488892%, 90.979004%, 98.81897%)&quot; fill-opacity=&quot;1&quot; stroke-width=&quot;1&quot; stroke-linecap=&quot;butt&quot; stroke-linejoin=&quot;miter&quot; stroke=&quot;rgb(42.349243%, 55.688477%, 74.899292%)&quot; stroke-opacity=&quot;1&quot; stroke-miterlimit=&quot;4&quot; d=&quot;M 320.002119 80.000608 L 359.999652 80.000608 L 359.999652 199.998646 L 320.002119 199.998646 Z M 320.002119 80.000608 &quot; transform=&quot;matrix(0.718599, 0, 0, 0.718599, 0.359299, 0.359299)&quot;/&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-0-16&quot; x=&quot;240.012064&quot; y=&quot;88.387676&quot;/&gt;
&lt;/g&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-0-17&quot; x=&quot;240.012064&quot; y=&quot;98.448062&quot;/&gt;
&lt;/g&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-0-18&quot; x=&quot;240.012064&quot; y=&quot;109.227047&quot;/&gt;
&lt;/g&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-0-19&quot; x=&quot;240.012064&quot; y=&quot;119.287433&quot;/&gt;
&lt;/g&gt;
&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;rgb(85.488892%, 90.979004%, 98.81897%)&quot; fill-opacity=&quot;1&quot; stroke-width=&quot;1&quot; stroke-linecap=&quot;butt&quot; stroke-linejoin=&quot;miter&quot; stroke=&quot;rgb(42.349243%, 55.688477%, 74.899292%)&quot; stroke-opacity=&quot;1&quot; stroke-miterlimit=&quot;4&quot; d=&quot;M 379.998419 80.000608 L 420.001389 80.000608 L 420.001389 199.998646 L 379.998419 199.998646 Z M 379.998419 80.000608 &quot; transform=&quot;matrix(0.718599, 0, 0, 0.718599, 0.359299, 0.359299)&quot;/&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-0-20&quot; x=&quot;283.128004&quot; y=&quot;93.417869&quot;/&gt;
&lt;/g&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-0-21&quot; x=&quot;283.128004&quot; y=&quot;103.478255&quot;/&gt;
&lt;/g&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-0-22&quot; x=&quot;283.128004&quot; y=&quot;114.25724&quot;/&gt;
&lt;/g&gt;
&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;rgb(42.349243%, 55.688477%, 74.899292%)&quot; fill-opacity=&quot;1&quot; d=&quot;M 316.183594 99.167969 L 319.058594 99.167969 L 319.058594 102.042969 L 316.183594 102.042969 M 330.554688 99.167969 L 333.429688 99.167969 L 333.429688 102.042969 L 330.554688 102.042969 M 344.925781 99.167969 L 347.800781 99.167969 L 347.800781 102.042969 L 344.925781 102.042969 M 359.300781 99.167969 L 362.175781 99.167969 L 362.175781 102.042969 L 359.300781 102.042969 &quot;/&gt;
&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;rgb(85.488892%, 90.979004%, 98.81897%)&quot; fill-opacity=&quot;1&quot; stroke-width=&quot;1&quot; stroke-linecap=&quot;butt&quot; stroke-linejoin=&quot;miter&quot; stroke=&quot;rgb(42.349243%, 55.688477%, 74.899292%)&quot; stroke-opacity=&quot;1&quot; stroke-miterlimit=&quot;4&quot; d=&quot;M 539.999426 80.000608 L 580.002396 80.000608 L 580.002396 199.998646 L 539.999426 199.998646 Z M 539.999426 80.000608 &quot; transform=&quot;matrix(0.718599, 0, 0, 0.718599, 0.359299, 0.359299)&quot;/&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-0-23&quot; x=&quot;398.103843&quot; y=&quot;77.608691&quot;/&gt;
&lt;/g&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-0-24&quot; x=&quot;398.103843&quot; y=&quot;88.387676&quot;/&gt;
&lt;/g&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-0-25&quot; x=&quot;398.103843&quot; y=&quot;98.448062&quot;/&gt;
&lt;/g&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-0-13&quot; x=&quot;398.103843&quot; y=&quot;109.227047&quot;/&gt;
&lt;/g&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-0-14&quot; x=&quot;398.103843&quot; y=&quot;119.287433&quot;/&gt;
&lt;/g&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-0-15&quot; x=&quot;398.103843&quot; y=&quot;129.347819&quot;/&gt;
&lt;/g&gt;
&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;rgb(85.488892%, 90.979004%, 98.81897%)&quot; fill-opacity=&quot;1&quot; stroke-width=&quot;1&quot; stroke-linecap=&quot;butt&quot; stroke-linejoin=&quot;miter&quot; stroke=&quot;rgb(42.349243%, 55.688477%, 74.899292%)&quot; stroke-opacity=&quot;1&quot; stroke-miterlimit=&quot;4&quot; d=&quot;M 600.001162 80.000608 L 639.998696 80.000608 L 639.998696 199.998646 L 600.001162 199.998646 Z M 600.001162 80.000608 &quot; transform=&quot;matrix(0.718599, 0, 0, 0.718599, 0.359299, 0.359299)&quot;/&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-2-11&quot; x=&quot;443.375568&quot; y=&quot;121.780055&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-2-12&quot; x=&quot;443.375568&quot; y=&quot;115.552665&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-2-2&quot; x=&quot;443.375568&quot; y=&quot;109.801066&quot;/&gt;
&lt;/g&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-2-13&quot; x=&quot;443.375568&quot; y=&quot;103.729466&quot;/&gt;
&lt;/g&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-2-14&quot; x=&quot;443.375568&quot; y=&quot;98.617869&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-2-15&quot; x=&quot;443.375568&quot; y=&quot;96.222071&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-2-9&quot; x=&quot;443.375568&quot; y=&quot;91.426265&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-2-10&quot; x=&quot;443.375568&quot; y=&quot;87.114671&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-2-7&quot; x=&quot;443.375568&quot; y=&quot;82.318865&quot;/&gt;
&lt;/g&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-2-1&quot; x=&quot;454.154553&quot; y=&quot;122.644616&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-2-2&quot; x=&quot;454.154553&quot; y=&quot;116.893017&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-2-3&quot; x=&quot;454.154553&quot; y=&quot;110.665627&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-2-4&quot; x=&quot;454.154553&quot; y=&quot;103.958235&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-2-5&quot; x=&quot;454.154553&quot; y=&quot;98.690848&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-2-16&quot; x=&quot;454.154553&quot; y=&quot;96.29505&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-2-17&quot; x=&quot;454.154553&quot; y=&quot;90.543451&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-2-18&quot; x=&quot;454.154553&quot; y=&quot;84.316061&quot;/&gt;
&lt;/g&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-0-26&quot; x=&quot;64.673909&quot; y=&quot;340.615923&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-27&quot; x=&quot;73.297097&quot; y=&quot;340.615923&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-28&quot; x=&quot;81.920285&quot; y=&quot;340.615923&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-29&quot; x=&quot;90.543473&quot; y=&quot;340.615923&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-30&quot; x=&quot;99.166661&quot; y=&quot;340.615923&quot;/&gt;
&lt;/g&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-0-31&quot; x=&quot;64.673909&quot; y=&quot;268.756024&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-32&quot; x=&quot;73.297097&quot; y=&quot;268.756024&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-28&quot; x=&quot;81.920285&quot; y=&quot;268.756024&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-29&quot; x=&quot;90.543473&quot; y=&quot;268.756024&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-30&quot; x=&quot;99.166661&quot; y=&quot;268.756024&quot;/&gt;
&lt;/g&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-0-31&quot; x=&quot;60.362316&quot; y=&quot;196.896124&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-33&quot; x=&quot;68.985503&quot; y=&quot;196.896124&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-34&quot; x=&quot;77.608691&quot; y=&quot;196.896124&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-33&quot; x=&quot;86.231879&quot; y=&quot;196.896124&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-35&quot; x=&quot;94.855067&quot; y=&quot;196.896124&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-36&quot; x=&quot;103.478255&quot; y=&quot;196.896124&quot;/&gt;
&lt;/g&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-0-37&quot; x=&quot;60.362316&quot; y=&quot;103.478255&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-33&quot; x=&quot;68.985503&quot; y=&quot;103.478255&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-34&quot; x=&quot;77.608691&quot; y=&quot;103.478255&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-33&quot; x=&quot;86.231879&quot; y=&quot;103.478255&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-35&quot; x=&quot;94.855067&quot; y=&quot;103.478255&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-36&quot; x=&quot;103.478255&quot; y=&quot;103.478255&quot;/&gt;
&lt;/g&gt;
&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;rgb(100%, 94.898987%, 79.998779%)&quot; fill-opacity=&quot;1&quot; stroke-width=&quot;1&quot; stroke-linecap=&quot;butt&quot; stroke-linejoin=&quot;miter&quot; stroke=&quot;rgb(83.918762%, 71.369934%, 33.729553%)&quot; stroke-opacity=&quot;1&quot; stroke-miterlimit=&quot;4&quot; d=&quot;M 499.998114 260.001654 L 919.999398 260.001654 L 919.999398 319.997954 L 499.998114 319.997954 Z M 499.998114 260.001654 &quot; transform=&quot;matrix(0, -0.718599, 0.718599, 0, 302.170886, 718.958298)&quot;/&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-3-1&quot; x=&quot;508.049472&quot; y=&quot;234.274497&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-3-2&quot; x=&quot;508.049472&quot; y=&quot;225.651309&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-3-3&quot; x=&quot;508.049472&quot; y=&quot;217.028121&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-3-4&quot; x=&quot;508.049472&quot; y=&quot;208.404933&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-3-5&quot; x=&quot;508.049472&quot; y=&quot;199.781745&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-3-6&quot; x=&quot;508.049472&quot; y=&quot;191.158557&quot;/&gt;
&lt;/g&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-2-19&quot; x=&quot;518.828456&quot; y=&quot;265.645834&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-2-18&quot; x=&quot;518.828456&quot; y=&quot;258.938442&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-2-20&quot; x=&quot;518.828456&quot; y=&quot;253.186843&quot;/&gt;
&lt;/g&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-3-7&quot; x=&quot;518.828456&quot; y=&quot;246.959453&quot;/&gt;
&lt;/g&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-2-21&quot; x=&quot;518.828456&quot; y=&quot;238.336265&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-2-20&quot; x=&quot;518.828456&quot; y=&quot;232.584666&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-2-20&quot; x=&quot;518.828456&quot; y=&quot;226.357276&quot;/&gt;
&lt;/g&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-3-7&quot; x=&quot;518.828456&quot; y=&quot;220.129886&quot;/&gt;
&lt;/g&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-2-4&quot; x=&quot;518.828456&quot; y=&quot;211.506698&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-2-20&quot; x=&quot;518.828456&quot; y=&quot;206.239311&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-2-13&quot; x=&quot;518.828456&quot; y=&quot;200.011921&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-2-22&quot; x=&quot;518.828456&quot; y=&quot;194.744534&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-2-20&quot; x=&quot;518.828456&quot; y=&quot;192.348736&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-2-13&quot; x=&quot;518.828456&quot; y=&quot;186.121346&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-2-23&quot; x=&quot;518.828456&quot; y=&quot;180.85396&quot;/&gt;
&lt;/g&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-3-7&quot; x=&quot;518.828456&quot; y=&quot;173.670776&quot;/&gt;
&lt;/g&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-2-13&quot; x=&quot;518.828456&quot; y=&quot;165.047588&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-2-24&quot; x=&quot;518.828456&quot; y=&quot;159.780202&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-2-5&quot; x=&quot;518.828456&quot; y=&quot;153.552812&quot;/&gt;
&lt;/g&gt;
&lt;/svg&gt;
&lt;/div&gt;
&lt;/p&gt;
&lt;/div&gt;

&lt;p&gt;
紫色这一层通信技术层是 PROFIBUS 的核心模块，定义了 DP-V0/V1/V2 三个协议。
&lt;/p&gt;

&lt;p&gt;
底下一层是传输层技术，包括串行有线技术，光纤技术以及无线技术。
&lt;/p&gt;

&lt;p&gt;
绿色的是通用应用层规定了多种工业应用都会用到的通用部分，如安全、冗余、标识管理、时间戳等。
&lt;/p&gt;

&lt;p&gt;
最上层则针对不同的工业应用场景，定义了传动电机、过程自动化设备、表示系统、实验室自动化等应用规范。
&lt;/p&gt;

&lt;p&gt;
从工程配置安装的角度，PRROFIBUS 支持 GSD 设备描述文件、EDD 设备描述文件、FDT/DTM 以及 TCI。
&lt;/p&gt;

&lt;p&gt;
通过这些模块的组合，就可以支持各种不同自动化控制的细分市场，如图
&lt;a href=&quot;#org193c3f8&quot;&gt;1&lt;/a&gt; 所示，MBP-IS、RS-485-IS 等不同硬件传输技术配合 PROFIBUS DP 通信层，加上 PA Devices 规范，就组成了 PROFIBUS PA 过程自动化控制的应用方案。RS-485 + PROFIdrive，组成运动控制解决方案，
RS-485, MBP-IS + PROFIsafe 组成安全应用解决方案。
&lt;/p&gt;


&lt;div id=&quot;org193c3f8&quot; class=&quot;figure&quot;&gt;
&lt;p&gt;&lt;div align=&quot;center&quot;&gt;&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; xmlns:xlink=&quot;http://www.w3.org/1999/xlink&quot; width=&quot;594.95996&quot; height=&quot;420.95999&quot; viewBox=&quot;0 0 594.95996 420.95999&quot;&gt;
&lt;defs&gt;
&lt;g&gt;
&lt;g id=&quot;glyph-0-0&quot;&gt;
&lt;path d=&quot;M 1.078125 0 L 1.078125 -5.390625 L 5.390625 -5.390625 L 5.390625 0 Z M 1.21875 -0.140625 L 5.25 -0.140625 L 5.25 -5.25 L 1.21875 -5.25 Z M 1.21875 -0.140625 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-0-1&quot;&gt;
&lt;path d=&quot;M 0.640625 0 L 0.640625 -6.171875 L 1.875 -6.171875 L 3.328125 -1.796875 C 3.460938 -1.390625 3.5625 -1.085938 3.625 -0.890625 C 3.695312 -1.109375 3.804688 -1.4375 3.953125 -1.875 L 5.4375 -6.171875 L 6.53125 -6.171875 L 6.53125 0 L 5.75 0 L 5.75 -5.171875 L 3.953125 0 L 3.21875 0 L 1.421875 -5.25 L 1.421875 0 Z M 0.640625 0 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-0-2&quot;&gt;
&lt;path d=&quot;M 0.625 0 L 0.625 -6.171875 L 2.953125 -6.171875 C 3.421875 -6.171875 3.796875 -6.109375 4.078125 -5.984375 C 4.367188 -5.859375 4.59375 -5.664062 4.75 -5.40625 C 4.914062 -5.144531 5 -4.875 5 -4.59375 C 5 -4.332031 4.925781 -4.082031 4.78125 -3.84375 C 4.632812 -3.613281 4.414062 -3.425781 4.125 -3.28125 C 4.5 -3.175781 4.785156 -2.988281 4.984375 -2.71875 C 5.191406 -2.457031 5.296875 -2.148438 5.296875 -1.796875 C 5.296875 -1.503906 5.234375 -1.234375 5.109375 -0.984375 C 4.984375 -0.734375 4.832031 -0.539062 4.65625 -0.40625 C 4.476562 -0.269531 4.253906 -0.164062 3.984375 -0.09375 C 3.710938 -0.03125 3.378906 0 2.984375 0 Z M 1.453125 -3.578125 L 2.78125 -3.578125 C 3.144531 -3.578125 3.40625 -3.601562 3.5625 -3.65625 C 3.769531 -3.71875 3.925781 -3.816406 4.03125 -3.953125 C 4.132812 -4.097656 4.1875 -4.28125 4.1875 -4.5 C 4.1875 -4.707031 4.132812 -4.882812 4.03125 -5.03125 C 3.9375 -5.1875 3.796875 -5.296875 3.609375 -5.359375 C 3.429688 -5.421875 3.125 -5.453125 2.6875 -5.453125 L 1.453125 -5.453125 Z M 1.453125 -0.734375 L 2.984375 -0.734375 C 3.242188 -0.734375 3.429688 -0.742188 3.546875 -0.765625 C 3.734375 -0.796875 3.890625 -0.847656 4.015625 -0.921875 C 4.140625 -1.003906 4.242188 -1.117188 4.328125 -1.265625 C 4.410156 -1.421875 4.453125 -1.597656 4.453125 -1.796875 C 4.453125 -2.023438 4.390625 -2.222656 4.265625 -2.390625 C 4.148438 -2.554688 3.988281 -2.671875 3.78125 -2.734375 C 3.570312 -2.804688 3.269531 -2.84375 2.875 -2.84375 L 1.453125 -2.84375 Z M 1.453125 -0.734375 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-0-3&quot;&gt;
&lt;path d=&quot;M 0.671875 0 L 0.671875 -6.171875 L 3 -6.171875 C 3.40625 -6.171875 3.71875 -6.148438 3.9375 -6.109375 C 4.238281 -6.066406 4.488281 -5.972656 4.6875 -5.828125 C 4.894531 -5.679688 5.0625 -5.476562 5.1875 -5.21875 C 5.3125 -4.96875 5.375 -4.691406 5.375 -4.390625 C 5.375 -3.859375 5.207031 -3.410156 4.875 -3.046875 C 4.539062 -2.691406 3.9375 -2.515625 3.0625 -2.515625 L 1.484375 -2.515625 L 1.484375 0 Z M 1.484375 -3.234375 L 3.078125 -3.234375 C 3.609375 -3.234375 3.984375 -3.332031 4.203125 -3.53125 C 4.421875 -3.726562 4.53125 -4.003906 4.53125 -4.359375 C 4.53125 -4.617188 4.460938 -4.835938 4.328125 -5.015625 C 4.203125 -5.203125 4.035156 -5.328125 3.828125 -5.390625 C 3.691406 -5.429688 3.4375 -5.453125 3.0625 -5.453125 L 1.484375 -5.453125 Z M 1.484375 -3.234375 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-0-4&quot;&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-0-5&quot;&gt;
&lt;path d=&quot;M 0 0.109375 L 1.796875 -6.28125 L 2.390625 -6.28125 L 0.609375 0.109375 Z M 0 0.109375 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-0-6&quot;&gt;
&lt;path d=&quot;M 0.28125 -1.859375 L 0.28125 -2.609375 L 2.609375 -2.609375 L 2.609375 -1.859375 Z M 0.28125 -1.859375 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-0-7&quot;&gt;
&lt;path d=&quot;M 0.796875 0 L 0.796875 -6.171875 L 1.625 -6.171875 L 1.625 0 Z M 0.796875 0 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-0-8&quot;&gt;
&lt;path d=&quot;M 0.390625 -1.984375 L 1.15625 -2.046875 C 1.195312 -1.742188 1.28125 -1.492188 1.40625 -1.296875 C 1.539062 -1.097656 1.75 -0.9375 2.03125 -0.8125 C 2.3125 -0.6875 2.628906 -0.625 2.984375 -0.625 C 3.296875 -0.625 3.570312 -0.671875 3.8125 -0.765625 C 4.050781 -0.859375 4.226562 -0.984375 4.34375 -1.140625 C 4.457031 -1.304688 4.515625 -1.484375 4.515625 -1.671875 C 4.515625 -1.867188 4.457031 -2.039062 4.34375 -2.1875 C 4.226562 -2.332031 4.046875 -2.453125 3.796875 -2.546875 C 3.628906 -2.609375 3.257812 -2.707031 2.6875 -2.84375 C 2.125 -2.976562 1.726562 -3.109375 1.5 -3.234375 C 1.207031 -3.390625 0.988281 -3.582031 0.84375 -3.8125 C 0.695312 -4.039062 0.625 -4.296875 0.625 -4.578125 C 0.625 -4.890625 0.710938 -5.179688 0.890625 -5.453125 C 1.066406 -5.722656 1.320312 -5.925781 1.65625 -6.0625 C 2 -6.207031 2.378906 -6.28125 2.796875 -6.28125 C 3.253906 -6.28125 3.65625 -6.207031 4 -6.0625 C 4.351562 -5.914062 4.625 -5.695312 4.8125 -5.40625 C 5 -5.125 5.097656 -4.800781 5.109375 -4.4375 L 4.328125 -4.375 C 4.285156 -4.769531 4.144531 -5.066406 3.90625 -5.265625 C 3.664062 -5.460938 3.304688 -5.5625 2.828125 -5.5625 C 2.335938 -5.5625 1.976562 -5.46875 1.75 -5.28125 C 1.519531 -5.101562 1.40625 -4.882812 1.40625 -4.625 C 1.40625 -4.40625 1.488281 -4.222656 1.65625 -4.078125 C 1.8125 -3.941406 2.21875 -3.796875 2.875 -3.640625 C 3.539062 -3.492188 4 -3.363281 4.25 -3.25 C 4.601562 -3.082031 4.863281 -2.867188 5.03125 -2.609375 C 5.207031 -2.359375 5.296875 -2.070312 5.296875 -1.75 C 5.296875 -1.414062 5.203125 -1.101562 5.015625 -0.8125 C 4.828125 -0.519531 4.554688 -0.289062 4.203125 -0.125 C 3.859375 0.03125 3.460938 0.109375 3.015625 0.109375 C 2.460938 0.109375 1.992188 0.0234375 1.609375 -0.140625 C 1.234375 -0.304688 0.9375 -0.550781 0.71875 -0.875 C 0.507812 -1.195312 0.398438 -1.566406 0.390625 -1.984375 Z M 0.390625 -1.984375 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-0-9&quot;&gt;
&lt;path d=&quot;M 0.671875 0 L 0.671875 -6.171875 L 3.421875 -6.171875 C 3.960938 -6.171875 4.375 -6.113281 4.65625 -6 C 4.945312 -5.894531 5.175781 -5.703125 5.34375 -5.421875 C 5.519531 -5.140625 5.609375 -4.828125 5.609375 -4.484375 C 5.609375 -4.046875 5.46875 -3.675781 5.1875 -3.375 C 4.90625 -3.082031 4.46875 -2.894531 3.875 -2.8125 C 4.09375 -2.707031 4.257812 -2.601562 4.375 -2.5 C 4.601562 -2.28125 4.828125 -2.007812 5.046875 -1.6875 L 6.125 0 L 5.09375 0 L 4.28125 -1.28125 C 4.039062 -1.65625 3.84375 -1.941406 3.6875 -2.140625 C 3.53125 -2.335938 3.390625 -2.472656 3.265625 -2.546875 C 3.148438 -2.628906 3.023438 -2.6875 2.890625 -2.71875 C 2.804688 -2.726562 2.65625 -2.734375 2.4375 -2.734375 L 1.5 -2.734375 L 1.5 0 Z M 1.5 -3.453125 L 3.25 -3.453125 C 3.625 -3.453125 3.914062 -3.488281 4.125 -3.5625 C 4.332031 -3.644531 4.488281 -3.769531 4.59375 -3.9375 C 4.707031 -4.101562 4.765625 -4.285156 4.765625 -4.484375 C 4.765625 -4.773438 4.660156 -5.015625 4.453125 -5.203125 C 4.242188 -5.390625 3.910156 -5.484375 3.453125 -5.484375 L 1.5 -5.484375 Z M 1.5 -3.453125 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-0-10&quot;&gt;
&lt;path d=&quot;M 2.78125 0 L 2.78125 -1.484375 L 0.109375 -1.484375 L 0.109375 -2.171875 L 2.921875 -6.171875 L 3.546875 -6.171875 L 3.546875 -2.171875 L 4.375 -2.171875 L 4.375 -1.484375 L 3.546875 -1.484375 L 3.546875 0 Z M 2.78125 -2.171875 L 2.78125 -4.953125 L 0.859375 -2.171875 Z M 2.78125 -2.171875 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-0-11&quot;&gt;
&lt;path d=&quot;M 1.53125 -3.34375 C 1.207031 -3.457031 0.96875 -3.617188 0.8125 -3.828125 C 0.664062 -4.046875 0.59375 -4.304688 0.59375 -4.609375 C 0.59375 -5.054688 0.753906 -5.429688 1.078125 -5.734375 C 1.398438 -6.046875 1.832031 -6.203125 2.375 -6.203125 C 2.90625 -6.203125 3.335938 -6.046875 3.671875 -5.734375 C 4.003906 -5.421875 4.171875 -5.039062 4.171875 -4.59375 C 4.171875 -4.300781 4.09375 -4.046875 3.9375 -3.828125 C 3.789062 -3.617188 3.5625 -3.457031 3.25 -3.34375 C 3.632812 -3.21875 3.925781 -3.019531 4.125 -2.75 C 4.320312 -2.476562 4.421875 -2.148438 4.421875 -1.765625 C 4.421875 -1.234375 4.234375 -0.785156 3.859375 -0.421875 C 3.484375 -0.0664062 2.992188 0.109375 2.390625 0.109375 C 1.773438 0.109375 1.28125 -0.0703125 0.90625 -0.4375 C 0.53125 -0.800781 0.34375 -1.25 0.34375 -1.78125 C 0.34375 -2.1875 0.441406 -2.523438 0.640625 -2.796875 C 0.847656 -3.066406 1.144531 -3.25 1.53125 -3.34375 Z M 1.375 -4.625 C 1.375 -4.332031 1.46875 -4.09375 1.65625 -3.90625 C 1.84375 -3.726562 2.085938 -3.640625 2.390625 -3.640625 C 2.679688 -3.640625 2.921875 -3.726562 3.109375 -3.90625 C 3.296875 -4.09375 3.390625 -4.320312 3.390625 -4.59375 C 3.390625 -4.863281 3.289062 -5.09375 3.09375 -5.28125 C 2.90625 -5.476562 2.664062 -5.578125 2.375 -5.578125 C 2.09375 -5.578125 1.851562 -5.484375 1.65625 -5.296875 C 1.46875 -5.109375 1.375 -4.882812 1.375 -4.625 Z M 1.125 -1.78125 C 1.125 -1.5625 1.175781 -1.347656 1.28125 -1.140625 C 1.382812 -0.941406 1.535156 -0.785156 1.734375 -0.671875 C 1.941406 -0.566406 2.160156 -0.515625 2.390625 -0.515625 C 2.753906 -0.515625 3.050781 -0.628906 3.28125 -0.859375 C 3.519531 -1.097656 3.640625 -1.394531 3.640625 -1.75 C 3.640625 -2.113281 3.519531 -2.414062 3.28125 -2.65625 C 3.039062 -2.894531 2.734375 -3.015625 2.359375 -3.015625 C 2.003906 -3.015625 1.707031 -2.894531 1.46875 -2.65625 C 1.238281 -2.425781 1.125 -2.132812 1.125 -1.78125 Z M 1.125 -1.78125 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-0-12&quot;&gt;
&lt;path d=&quot;M 0.359375 -1.625 L 1.15625 -1.6875 C 1.21875 -1.300781 1.351562 -1.007812 1.5625 -0.8125 C 1.78125 -0.613281 2.039062 -0.515625 2.34375 -0.515625 C 2.707031 -0.515625 3.015625 -0.648438 3.265625 -0.921875 C 3.515625 -1.203125 3.640625 -1.570312 3.640625 -2.03125 C 3.640625 -2.457031 3.519531 -2.796875 3.28125 -3.046875 C 3.039062 -3.296875 2.722656 -3.421875 2.328125 -3.421875 C 2.085938 -3.421875 1.867188 -3.363281 1.671875 -3.25 C 1.472656 -3.144531 1.316406 -3.003906 1.203125 -2.828125 L 0.5 -2.921875 L 1.09375 -6.09375 L 4.15625 -6.09375 L 4.15625 -5.359375 L 1.703125 -5.359375 L 1.359375 -3.703125 C 1.734375 -3.960938 2.125 -4.09375 2.53125 -4.09375 C 3.070312 -4.09375 3.523438 -3.90625 3.890625 -3.53125 C 4.265625 -3.15625 4.453125 -2.675781 4.453125 -2.09375 C 4.453125 -1.53125 4.289062 -1.046875 3.96875 -0.640625 C 3.570312 -0.140625 3.03125 0.109375 2.34375 0.109375 C 1.78125 0.109375 1.320312 -0.046875 0.96875 -0.359375 C 0.613281 -0.679688 0.410156 -1.101562 0.359375 -1.625 Z M 0.359375 -1.625 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-0-13&quot;&gt;
&lt;path d=&quot;M 0.421875 -3 C 0.421875 -4.03125 0.691406 -4.832031 1.234375 -5.40625 C 1.785156 -5.988281 2.5 -6.28125 3.375 -6.28125 C 3.945312 -6.28125 4.457031 -6.144531 4.90625 -5.875 C 5.363281 -5.601562 5.710938 -5.222656 5.953125 -4.734375 C 6.203125 -4.242188 6.328125 -3.691406 6.328125 -3.078125 C 6.328125 -2.453125 6.195312 -1.890625 5.9375 -1.390625 C 5.6875 -0.898438 5.328125 -0.523438 4.859375 -0.265625 C 4.398438 -0.015625 3.90625 0.109375 3.375 0.109375 C 2.789062 0.109375 2.269531 -0.03125 1.8125 -0.3125 C 1.351562 -0.59375 1.003906 -0.972656 0.765625 -1.453125 C 0.535156 -1.941406 0.421875 -2.457031 0.421875 -3 Z M 1.265625 -3 C 1.265625 -2.25 1.460938 -1.660156 1.859375 -1.234375 C 2.253906 -0.804688 2.753906 -0.59375 3.359375 -0.59375 C 3.972656 -0.59375 4.476562 -0.804688 4.875 -1.234375 C 5.28125 -1.671875 5.484375 -2.285156 5.484375 -3.078125 C 5.484375 -3.585938 5.394531 -4.03125 5.21875 -4.40625 C 5.050781 -4.78125 4.800781 -5.066406 4.46875 -5.265625 C 4.144531 -5.472656 3.78125 -5.578125 3.375 -5.578125 C 2.800781 -5.578125 2.304688 -5.378906 1.890625 -4.984375 C 1.472656 -4.585938 1.265625 -3.925781 1.265625 -3 Z M 1.265625 -3 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-0-14&quot;&gt;
&lt;path d=&quot;M 0.703125 0 L 0.703125 -6.171875 L 4.875 -6.171875 L 4.875 -5.453125 L 1.53125 -5.453125 L 1.53125 -3.53125 L 4.421875 -3.53125 L 4.421875 -2.8125 L 1.53125 -2.8125 L 1.53125 0 Z M 0.703125 0 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-0-15&quot;&gt;
&lt;path d=&quot;M 4.71875 -6.171875 L 5.53125 -6.171875 L 5.53125 -2.609375 C 5.53125 -1.984375 5.457031 -1.488281 5.3125 -1.125 C 5.175781 -0.757812 4.925781 -0.460938 4.5625 -0.234375 C 4.195312 -0.00390625 3.71875 0.109375 3.125 0.109375 C 2.539062 0.109375 2.066406 0.0078125 1.703125 -0.1875 C 1.335938 -0.394531 1.070312 -0.6875 0.90625 -1.0625 C 0.75 -1.4375 0.671875 -1.953125 0.671875 -2.609375 L 0.671875 -6.171875 L 1.5 -6.171875 L 1.5 -2.609375 C 1.5 -2.078125 1.546875 -1.679688 1.640625 -1.421875 C 1.742188 -1.171875 1.914062 -0.972656 2.15625 -0.828125 C 2.394531 -0.691406 2.691406 -0.625 3.046875 -0.625 C 3.648438 -0.625 4.078125 -0.757812 4.328125 -1.03125 C 4.585938 -1.3125 4.71875 -1.835938 4.71875 -2.609375 Z M 4.71875 -6.171875 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-0-16&quot;&gt;
&lt;path d=&quot;M 0.671875 0 L 0.671875 -6.171875 L 2.796875 -6.171875 C 3.273438 -6.171875 3.640625 -6.140625 3.890625 -6.078125 C 4.242188 -6.003906 4.546875 -5.859375 4.796875 -5.640625 C 5.117188 -5.367188 5.359375 -5.019531 5.515625 -4.59375 C 5.679688 -4.164062 5.765625 -3.675781 5.765625 -3.125 C 5.765625 -2.65625 5.707031 -2.238281 5.59375 -1.875 C 5.488281 -1.507812 5.347656 -1.207031 5.171875 -0.96875 C 5.003906 -0.738281 4.816406 -0.550781 4.609375 -0.40625 C 4.410156 -0.269531 4.164062 -0.164062 3.875 -0.09375 C 3.59375 -0.03125 3.265625 0 2.890625 0 Z M 1.484375 -0.734375 L 2.796875 -0.734375 C 3.203125 -0.734375 3.519531 -0.769531 3.75 -0.84375 C 3.988281 -0.914062 4.175781 -1.019531 4.3125 -1.15625 C 4.507812 -1.351562 4.660156 -1.613281 4.765625 -1.9375 C 4.867188 -2.269531 4.921875 -2.671875 4.921875 -3.140625 C 4.921875 -3.785156 4.816406 -4.28125 4.609375 -4.625 C 4.398438 -4.96875 4.144531 -5.195312 3.84375 -5.3125 C 3.625 -5.40625 3.269531 -5.453125 2.78125 -5.453125 L 1.484375 -5.453125 Z M 1.484375 -0.734375 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-0-17&quot;&gt;
&lt;path d=&quot;M -0.015625 0 L 2.359375 -6.171875 L 3.234375 -6.171875 L 5.765625 0 L 4.828125 0 L 4.109375 -1.875 L 1.53125 -1.875 L 0.859375 0 Z M 1.765625 -2.53125 L 3.859375 -2.53125 L 3.21875 -4.25 C 3.019531 -4.769531 2.875 -5.195312 2.78125 -5.53125 C 2.695312 -5.132812 2.585938 -4.738281 2.453125 -4.34375 Z M 1.765625 -2.53125 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-0-18&quot;&gt;
&lt;path d=&quot;M 3.625 -1.4375 L 4.40625 -1.34375 C 4.289062 -0.882812 4.0625 -0.53125 3.71875 -0.28125 C 3.382812 -0.03125 2.960938 0.09375 2.453125 0.09375 C 1.796875 0.09375 1.273438 -0.101562 0.890625 -0.5 C 0.503906 -0.90625 0.3125 -1.472656 0.3125 -2.203125 C 0.3125 -2.953125 0.503906 -3.535156 0.890625 -3.953125 C 1.285156 -4.367188 1.789062 -4.578125 2.40625 -4.578125 C 3 -4.578125 3.484375 -4.375 3.859375 -3.96875 C 4.242188 -3.5625 4.4375 -2.988281 4.4375 -2.25 C 4.4375 -2.195312 4.4375 -2.128906 4.4375 -2.046875 L 1.09375 -2.046875 C 1.125 -1.554688 1.265625 -1.175781 1.515625 -0.90625 C 1.765625 -0.644531 2.078125 -0.515625 2.453125 -0.515625 C 2.734375 -0.515625 2.96875 -0.585938 3.15625 -0.734375 C 3.351562 -0.878906 3.507812 -1.113281 3.625 -1.4375 Z M 1.140625 -2.671875 L 3.640625 -2.671875 C 3.609375 -3.046875 3.515625 -3.328125 3.359375 -3.515625 C 3.109375 -3.804688 2.789062 -3.953125 2.40625 -3.953125 C 2.0625 -3.953125 1.769531 -3.832031 1.53125 -3.59375 C 1.289062 -3.363281 1.160156 -3.054688 1.140625 -2.671875 Z M 1.140625 -2.671875 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-0-19&quot;&gt;
&lt;path d=&quot;M 1.8125 0 L 0.109375 -4.46875 L 0.90625 -4.46875 L 1.875 -1.796875 C 1.976562 -1.503906 2.070312 -1.203125 2.15625 -0.890625 C 2.21875 -1.128906 2.3125 -1.414062 2.4375 -1.75 L 3.4375 -4.46875 L 4.21875 -4.46875 L 2.515625 0 Z M 1.8125 0 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-0-20&quot;&gt;
&lt;path d=&quot;M 0.578125 -5.296875 L 0.578125 -6.171875 L 1.328125 -6.171875 L 1.328125 -5.296875 Z M 0.578125 0 L 0.578125 -4.46875 L 1.328125 -4.46875 L 1.328125 0 Z M 0.578125 0 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-0-21&quot;&gt;
&lt;path d=&quot;M 3.484375 -1.640625 L 4.234375 -1.546875 C 4.148438 -1.023438 3.941406 -0.617188 3.609375 -0.328125 C 3.273438 -0.046875 2.863281 0.09375 2.375 0.09375 C 1.757812 0.09375 1.265625 -0.101562 0.890625 -0.5 C 0.523438 -0.894531 0.34375 -1.46875 0.34375 -2.21875 C 0.34375 -2.695312 0.421875 -3.117188 0.578125 -3.484375 C 0.734375 -3.847656 0.972656 -4.117188 1.296875 -4.296875 C 1.628906 -4.484375 1.988281 -4.578125 2.375 -4.578125 C 2.863281 -4.578125 3.257812 -4.453125 3.5625 -4.203125 C 3.875 -3.960938 4.070312 -3.613281 4.15625 -3.15625 L 3.421875 -3.046875 C 3.347656 -3.347656 3.222656 -3.570312 3.046875 -3.71875 C 2.867188 -3.875 2.65625 -3.953125 2.40625 -3.953125 C 2.019531 -3.953125 1.707031 -3.8125 1.46875 -3.53125 C 1.226562 -3.257812 1.109375 -2.828125 1.109375 -2.234375 C 1.109375 -1.640625 1.222656 -1.203125 1.453125 -0.921875 C 1.691406 -0.648438 1.992188 -0.515625 2.359375 -0.515625 C 2.660156 -0.515625 2.910156 -0.601562 3.109375 -0.78125 C 3.304688 -0.96875 3.429688 -1.253906 3.484375 -1.640625 Z M 3.484375 -1.640625 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-0-22&quot;&gt;
&lt;path d=&quot;M 0.265625 -1.328125 L 1.015625 -1.453125 C 1.054688 -1.148438 1.171875 -0.914062 1.359375 -0.75 C 1.554688 -0.59375 1.828125 -0.515625 2.171875 -0.515625 C 2.523438 -0.515625 2.785156 -0.585938 2.953125 -0.734375 C 3.117188 -0.878906 3.203125 -1.046875 3.203125 -1.234375 C 3.203125 -1.398438 3.128906 -1.535156 2.984375 -1.640625 C 2.878906 -1.703125 2.617188 -1.785156 2.203125 -1.890625 C 1.648438 -2.035156 1.265625 -2.15625 1.046875 -2.25 C 0.828125 -2.351562 0.660156 -2.492188 0.546875 -2.671875 C 0.441406 -2.859375 0.390625 -3.0625 0.390625 -3.28125 C 0.390625 -3.476562 0.4375 -3.660156 0.53125 -3.828125 C 0.625 -4.003906 0.75 -4.148438 0.90625 -4.265625 C 1.019531 -4.347656 1.175781 -4.421875 1.375 -4.484375 C 1.582031 -4.546875 1.800781 -4.578125 2.03125 -4.578125 C 2.382812 -4.578125 2.691406 -4.523438 2.953125 -4.421875 C 3.222656 -4.316406 3.421875 -4.175781 3.546875 -4 C 3.671875 -3.832031 3.757812 -3.601562 3.8125 -3.3125 L 3.0625 -3.21875 C 3.03125 -3.445312 2.929688 -3.625 2.765625 -3.75 C 2.609375 -3.882812 2.382812 -3.953125 2.09375 -3.953125 C 1.75 -3.953125 1.5 -3.894531 1.34375 -3.78125 C 1.195312 -3.664062 1.125 -3.53125 1.125 -3.375 C 1.125 -3.269531 1.15625 -3.179688 1.21875 -3.109375 C 1.28125 -3.023438 1.375 -2.957031 1.5 -2.90625 C 1.582031 -2.875 1.804688 -2.8125 2.171875 -2.71875 C 2.710938 -2.570312 3.085938 -2.453125 3.296875 -2.359375 C 3.515625 -2.265625 3.679688 -2.128906 3.796875 -1.953125 C 3.921875 -1.785156 3.984375 -1.570312 3.984375 -1.3125 C 3.984375 -1.0625 3.90625 -0.820312 3.75 -0.59375 C 3.601562 -0.375 3.390625 -0.203125 3.109375 -0.078125 C 2.835938 0.0351562 2.523438 0.09375 2.171875 0.09375 C 1.597656 0.09375 1.15625 -0.0234375 0.84375 -0.265625 C 0.539062 -0.503906 0.347656 -0.859375 0.265625 -1.328125 Z M 0.265625 -1.328125 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-0-23&quot;&gt;
&lt;path d=&quot;M 3.46875 0 L 3.46875 -0.5625 C 3.1875 -0.125 2.769531 0.09375 2.21875 0.09375 C 1.863281 0.09375 1.535156 0 1.234375 -0.1875 C 0.929688 -0.382812 0.695312 -0.660156 0.53125 -1.015625 C 0.375 -1.367188 0.296875 -1.773438 0.296875 -2.234375 C 0.296875 -2.679688 0.367188 -3.085938 0.515625 -3.453125 C 0.660156 -3.816406 0.882812 -4.09375 1.1875 -4.28125 C 1.488281 -4.476562 1.820312 -4.578125 2.1875 -4.578125 C 2.457031 -4.578125 2.695312 -4.519531 2.90625 -4.40625 C 3.113281 -4.289062 3.285156 -4.140625 3.421875 -3.953125 L 3.421875 -6.171875 L 4.171875 -6.171875 L 4.171875 0 Z M 1.078125 -2.234375 C 1.078125 -1.660156 1.195312 -1.226562 1.4375 -0.9375 C 1.675781 -0.65625 1.960938 -0.515625 2.296875 -0.515625 C 2.617188 -0.515625 2.894531 -0.648438 3.125 -0.921875 C 3.363281 -1.191406 3.484375 -1.609375 3.484375 -2.171875 C 3.484375 -2.785156 3.363281 -3.234375 3.125 -3.515625 C 2.894531 -3.804688 2.601562 -3.953125 2.25 -3.953125 C 1.914062 -3.953125 1.632812 -3.8125 1.40625 -3.53125 C 1.1875 -3.257812 1.078125 -2.828125 1.078125 -2.234375 Z M 1.078125 -2.234375 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-0-24&quot;&gt;
&lt;path d=&quot;M 0.5625 0 L 0.5625 -4.46875 L 1.25 -4.46875 L 1.25 -3.796875 C 1.414062 -4.109375 1.570312 -4.316406 1.71875 -4.421875 C 1.875 -4.523438 2.039062 -4.578125 2.21875 -4.578125 C 2.46875 -4.578125 2.722656 -4.492188 2.984375 -4.328125 L 2.734375 -3.625 C 2.546875 -3.738281 2.359375 -3.796875 2.171875 -3.796875 C 2.003906 -3.796875 1.851562 -3.742188 1.71875 -3.640625 C 1.59375 -3.535156 1.5 -3.394531 1.4375 -3.21875 C 1.351562 -2.957031 1.3125 -2.664062 1.3125 -2.34375 L 1.3125 0 Z M 0.5625 0 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-0-25&quot;&gt;
&lt;path d=&quot;M 3.484375 -0.546875 C 3.203125 -0.304688 2.929688 -0.140625 2.671875 -0.046875 C 2.410156 0.046875 2.132812 0.09375 1.84375 0.09375 C 1.351562 0.09375 0.972656 -0.0234375 0.703125 -0.265625 C 0.441406 -0.503906 0.3125 -0.804688 0.3125 -1.171875 C 0.3125 -1.390625 0.359375 -1.585938 0.453125 -1.765625 C 0.554688 -1.953125 0.6875 -2.097656 0.84375 -2.203125 C 1.007812 -2.316406 1.191406 -2.40625 1.390625 -2.46875 C 1.546875 -2.5 1.773438 -2.535156 2.078125 -2.578125 C 2.679688 -2.648438 3.128906 -2.738281 3.421875 -2.84375 C 3.421875 -2.945312 3.421875 -3.007812 3.421875 -3.03125 C 3.421875 -3.34375 3.351562 -3.5625 3.21875 -3.6875 C 3.019531 -3.863281 2.726562 -3.953125 2.34375 -3.953125 C 1.988281 -3.953125 1.726562 -3.890625 1.5625 -3.765625 C 1.394531 -3.640625 1.269531 -3.414062 1.1875 -3.09375 L 0.4375 -3.203125 C 0.507812 -3.515625 0.617188 -3.765625 0.765625 -3.953125 C 0.921875 -4.148438 1.144531 -4.300781 1.4375 -4.40625 C 1.726562 -4.519531 2.066406 -4.578125 2.453125 -4.578125 C 2.835938 -4.578125 3.148438 -4.53125 3.390625 -4.4375 C 3.628906 -4.34375 3.800781 -4.226562 3.90625 -4.09375 C 4.019531 -3.957031 4.101562 -3.785156 4.15625 -3.578125 C 4.175781 -3.453125 4.1875 -3.222656 4.1875 -2.890625 L 4.1875 -1.875 C 4.1875 -1.164062 4.203125 -0.71875 4.234375 -0.53125 C 4.265625 -0.34375 4.332031 -0.164062 4.4375 0 L 3.640625 0 C 3.554688 -0.15625 3.503906 -0.335938 3.484375 -0.546875 Z M 3.421875 -2.25 C 3.148438 -2.132812 2.738281 -2.035156 2.1875 -1.953125 C 1.875 -1.910156 1.648438 -1.859375 1.515625 -1.796875 C 1.390625 -1.742188 1.289062 -1.660156 1.21875 -1.546875 C 1.15625 -1.441406 1.125 -1.328125 1.125 -1.203125 C 1.125 -0.992188 1.195312 -0.820312 1.34375 -0.6875 C 1.5 -0.5625 1.722656 -0.5 2.015625 -0.5 C 2.304688 -0.5 2.566406 -0.5625 2.796875 -0.6875 C 3.023438 -0.8125 3.191406 -0.984375 3.296875 -1.203125 C 3.378906 -1.378906 3.421875 -1.632812 3.421875 -1.96875 Z M 3.421875 -2.25 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-0-26&quot;&gt;
&lt;path d=&quot;M 0.75 0 L 0.75 -3.890625 L 0.078125 -3.890625 L 0.078125 -4.46875 L 0.75 -4.46875 L 0.75 -4.953125 C 0.75 -5.253906 0.773438 -5.476562 0.828125 -5.625 C 0.898438 -5.8125 1.023438 -5.96875 1.203125 -6.09375 C 1.390625 -6.21875 1.648438 -6.28125 1.984375 -6.28125 C 2.203125 -6.28125 2.441406 -6.253906 2.703125 -6.203125 L 2.578125 -5.546875 C 2.421875 -5.566406 2.273438 -5.578125 2.140625 -5.578125 C 1.910156 -5.578125 1.742188 -5.53125 1.640625 -5.4375 C 1.546875 -5.34375 1.5 -5.160156 1.5 -4.890625 L 1.5 -4.46875 L 2.375 -4.46875 L 2.375 -3.890625 L 1.5 -3.890625 L 1.5 0 Z M 0.75 0 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-1-0&quot;&gt;
&lt;path d=&quot;M 0.75 0 L 0.75 -6.359375 L 5.25 -6.359375 L 5.25 0 Z M 1.421875 -0.671875 L 4.59375 -0.671875 L 4.59375 -5.6875 L 1.421875 -5.6875 Z M 1.421875 -0.671875 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-1-1&quot;&gt;
&lt;path d=&quot;M 2.640625 -5.53125 L 6.265625 -5.53125 L 6.265625 -7.140625 L 6.9375 -7.140625 L 6.9375 -5.53125 L 8.390625 -5.53125 L 8.390625 -4.921875 L 6.9375 -4.921875 L 6.9375 -1.421875 C 6.9375 -0.703125 6.585938 -0.34375 5.890625 -0.34375 C 5.523438 -0.34375 5.097656 -0.34375 4.609375 -0.34375 C 4.585938 -0.5625 4.546875 -0.816406 4.484375 -1.109375 C 4.929688 -1.066406 5.351562 -1.046875 5.75 -1.046875 C 6.09375 -1.046875 6.265625 -1.238281 6.265625 -1.625 L 6.265625 -4.921875 L 2.640625 -4.921875 Z M 3.6875 0.203125 L 5.953125 0.234375 L 8.5 0.15625 C 8.40625 0.382812 8.316406 0.609375 8.234375 0.828125 L 5.765625 0.859375 L 3.609375 0.796875 C 2.648438 0.785156 1.941406 0.46875 1.484375 -0.15625 C 1.328125 -0.03125 1 0.320312 0.5 0.90625 L 0.15625 0.203125 C 0.582031 -0.203125 0.925781 -0.507812 1.1875 -0.71875 L 1.1875 -3.625 L 0.203125 -3.625 L 0.203125 -4.21875 L 1.84375 -4.21875 L 1.84375 -0.578125 C 2.25 -0.078125 2.863281 0.179688 3.6875 0.203125 Z M 2.984375 -3.921875 L 3.5 -4.296875 C 4.101562 -3.515625 4.570312 -2.898438 4.90625 -2.453125 L 4.328125 -2.03125 C 3.859375 -2.726562 3.410156 -3.359375 2.984375 -3.921875 Z M 1.015625 -7.109375 C 1.390625 -6.679688 1.796875 -6.160156 2.234375 -5.546875 C 2.003906 -5.410156 1.804688 -5.273438 1.640625 -5.140625 C 1.242188 -5.742188 0.867188 -6.28125 0.515625 -6.75 Z M 1.015625 -7.109375 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-1-2&quot;&gt;
&lt;path d=&quot;M 3.703125 -6.78125 L 7.890625 -6.78125 L 7.890625 -3.890625 L 7.25 -3.890625 L 7.25 -4.234375 L 4.34375 -4.234375 L 4.34375 -3.890625 L 3.703125 -3.890625 Z M 0.0625 -1.21875 C 0.613281 -2.03125 1.039062 -2.988281 1.34375 -4.09375 L 0.15625 -4.09375 L 0.15625 -4.65625 L 1.46875 -4.65625 L 1.46875 -5.96875 C 1.113281 -5.914062 0.753906 -5.867188 0.390625 -5.828125 C 0.335938 -6.023438 0.273438 -6.21875 0.203125 -6.40625 C 1.160156 -6.488281 2.125 -6.644531 3.09375 -6.875 L 3.28125 -6.28125 C 2.894531 -6.195312 2.492188 -6.125 2.078125 -6.0625 L 2.078125 -4.65625 L 3.25 -4.65625 L 3.25 -4.09375 L 2.078125 -4.09375 L 2.078125 -2.984375 L 2.40625 -3.265625 C 2.632812 -3.035156 2.960938 -2.671875 3.390625 -2.171875 L 2.890625 -1.75 C 2.566406 -2.164062 2.296875 -2.503906 2.078125 -2.765625 L 2.078125 1.140625 L 1.46875 1.140625 L 1.46875 -2.90625 C 1.175781 -1.9375 0.800781 -1.128906 0.34375 -0.484375 C 0.25 -0.722656 0.15625 -0.96875 0.0625 -1.21875 Z M 3.03125 0.109375 L 5.4375 0.109375 L 5.4375 -1.140625 L 3.53125 -1.140625 L 3.53125 -1.703125 L 5.4375 -1.703125 L 5.4375 -2.84375 L 3.328125 -2.84375 L 3.328125 -3.40625 L 8.234375 -3.40625 L 8.234375 -2.84375 L 6.109375 -2.84375 L 6.109375 -1.703125 L 8.03125 -1.703125 L 8.03125 -1.140625 L 6.109375 -1.140625 L 6.109375 0.109375 L 8.53125 0.109375 L 8.53125 0.671875 L 3.03125 0.671875 Z M 7.25 -6.203125 L 4.34375 -6.203125 L 4.34375 -4.8125 L 7.25 -4.8125 Z M 7.25 -6.203125 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-1-3&quot;&gt;
&lt;path d=&quot;M 1.046875 -6.015625 L 3.21875 -6.015625 C 3.34375 -6.335938 3.476562 -6.726562 3.625 -7.1875 L 4.34375 -6.96875 C 4.195312 -6.613281 4.054688 -6.296875 3.921875 -6.015625 L 7.578125 -6.015625 L 7.578125 1.109375 L 6.90625 1.109375 L 6.90625 0.609375 L 1.71875 0.609375 L 1.71875 1.109375 L 1.046875 1.109375 Z M 1.71875 0 L 6.90625 0 L 6.90625 -1.421875 L 1.71875 -1.421875 Z M 1.71875 -2.015625 L 6.90625 -2.015625 L 6.90625 -3.421875 L 1.71875 -3.421875 Z M 6.90625 -5.40625 L 1.71875 -5.40625 L 1.71875 -4.015625 L 6.90625 -4.015625 Z M 6.90625 -5.40625 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-1-4&quot;&gt;
&lt;path d=&quot;M 4.015625 -5.421875 L 5.265625 -5.421875 C 5.273438 -5.984375 5.273438 -6.5625 5.265625 -7.15625 L 5.96875 -7.15625 C 5.957031 -6.570312 5.945312 -5.992188 5.9375 -5.421875 L 8.21875 -5.421875 C 8.175781 -3.296875 8.117188 -1.585938 8.046875 -0.296875 C 7.984375 0.492188 7.613281 0.894531 6.9375 0.90625 C 6.59375 0.90625 6.210938 0.898438 5.796875 0.890625 C 5.765625 0.648438 5.722656 0.398438 5.671875 0.140625 C 6.054688 0.191406 6.410156 0.222656 6.734375 0.234375 C 7.148438 0.234375 7.363281 0 7.375 -0.46875 C 7.457031 -1.863281 7.507812 -3.300781 7.53125 -4.78125 L 5.9375 -4.78125 C 5.925781 -4.539062 5.914062 -4.300781 5.90625 -4.0625 C 5.882812 -1.851562 5.21875 -0.109375 3.90625 1.171875 C 3.75 0.984375 3.582031 0.796875 3.40625 0.609375 C 4.570312 -0.441406 5.179688 -2.003906 5.234375 -4.078125 C 5.242188 -4.304688 5.25 -4.539062 5.25 -4.78125 L 4.015625 -4.78125 Z M 3.15625 -2.515625 C 3.507812 -1.753906 3.832031 -0.992188 4.125 -0.234375 C 3.875 -0.128906 3.664062 -0.0390625 3.5 0.03125 C 3.457031 -0.0703125 3.414062 -0.175781 3.375 -0.28125 C 2.300781 -0.175781 1.328125 -0.078125 0.453125 0.015625 L 0.15625 -0.65625 C 0.40625 -0.800781 0.609375 -1.03125 0.765625 -1.34375 C 1.035156 -1.894531 1.320312 -2.597656 1.625 -3.453125 L 0.1875 -3.453125 L 0.1875 -4.078125 L 4.265625 -4.078125 L 4.265625 -3.453125 L 2.328125 -3.453125 C 1.847656 -2.253906 1.429688 -1.320312 1.078125 -0.65625 C 1.722656 -0.707031 2.414062 -0.769531 3.15625 -0.84375 C 2.96875 -1.320312 2.769531 -1.789062 2.5625 -2.25 Z M 0.546875 -6.4375 L 3.921875 -6.4375 L 3.921875 -5.8125 L 0.546875 -5.8125 Z M 0.546875 -6.4375 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-1-5&quot;&gt;
&lt;path d=&quot;M 2.484375 -1.953125 C 3.222656 -2.296875 3.910156 -2.691406 4.546875 -3.140625 L 4.546875 -7 L 5.265625 -7 L 5.265625 -3.6875 C 6.128906 -4.375 6.894531 -5.171875 7.5625 -6.078125 L 8.171875 -5.640625 C 7.359375 -4.554688 6.390625 -3.601562 5.265625 -2.78125 L 5.265625 -0.40625 C 5.265625 -0.0195312 5.46875 0.171875 5.875 0.171875 L 6.953125 0.171875 C 7.328125 0.171875 7.546875 -0.015625 7.609375 -0.390625 C 7.691406 -0.765625 7.742188 -1.203125 7.765625 -1.703125 C 8.003906 -1.617188 8.25 -1.539062 8.5 -1.46875 C 8.457031 -0.988281 8.398438 -0.554688 8.328125 -0.171875 C 8.222656 0.472656 7.820312 0.796875 7.125 0.796875 L 5.6875 0.796875 C 4.925781 0.796875 4.546875 0.421875 4.546875 -0.328125 L 4.546875 -2.296875 C 4.023438 -1.960938 3.472656 -1.65625 2.890625 -1.375 C 2.773438 -1.550781 2.640625 -1.742188 2.484375 -1.953125 Z M 0.125 -3 C 1.09375 -4.289062 1.8125 -5.664062 2.28125 -7.125 L 3 -6.921875 C 2.738281 -6.222656 2.453125 -5.566406 2.140625 -4.953125 L 2.140625 1.078125 L 1.4375 1.078125 L 1.4375 -3.6875 C 1.125 -3.175781 0.789062 -2.703125 0.4375 -2.265625 C 0.34375 -2.503906 0.238281 -2.75 0.125 -3 Z M 0.125 -3 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-1-6&quot;&gt;
&lt;path d=&quot;M 3 -2.84375 L 3 -3.4375 L 7.59375 -3.4375 L 7.59375 -2.84375 C 7.15625 -1.875 6.609375 -1.113281 5.953125 -0.5625 C 6.671875 -0.09375 7.535156 0.234375 8.546875 0.421875 C 8.347656 0.671875 8.175781 0.898438 8.03125 1.109375 C 7.03125 0.816406 6.15625 0.394531 5.40625 -0.15625 C 4.644531 0.363281 3.679688 0.804688 2.515625 1.171875 C 2.367188 0.960938 2.222656 0.757812 2.078125 0.5625 C 3.191406 0.269531 4.125 -0.109375 4.875 -0.578125 C 4.21875 -1.210938 3.742188 -1.96875 3.453125 -2.84375 Z M 6.546875 -6.140625 L 4.4375 -6.140625 L 4.4375 -5.890625 C 4.4375 -4.859375 3.96875 -4.085938 3.03125 -3.578125 C 2.875 -3.765625 2.707031 -3.941406 2.53125 -4.109375 C 3.363281 -4.535156 3.78125 -5.125 3.78125 -5.875 L 3.78125 -6.765625 L 7.203125 -6.765625 L 7.203125 -5.046875 C 7.203125 -4.785156 7.332031 -4.65625 7.59375 -4.65625 L 8.515625 -4.65625 C 8.484375 -4.425781 8.460938 -4.21875 8.453125 -4.03125 L 7.34375 -4.03125 C 6.8125 -4.03125 6.546875 -4.328125 6.546875 -4.921875 Z M 3.03125 -1.390625 C 3.039062 -1.117188 3.0625 -0.867188 3.09375 -0.640625 C 2.320312 -0.140625 1.75 0.257812 1.375 0.5625 L 0.96875 0.015625 C 1.15625 -0.171875 1.25 -0.425781 1.25 -0.75 L 1.25 -3.75 L 0.1875 -3.75 L 0.1875 -4.34375 L 1.890625 -4.34375 L 1.890625 -0.609375 C 2.253906 -0.847656 2.632812 -1.109375 3.03125 -1.390625 Z M 1.328125 -6.90625 C 1.765625 -6.476562 2.175781 -6.046875 2.5625 -5.609375 L 1.984375 -5.125 C 1.566406 -5.65625 1.179688 -6.101562 0.828125 -6.46875 Z M 4.078125 -2.84375 C 4.367188 -2.132812 4.816406 -1.503906 5.421875 -0.953125 C 6.015625 -1.421875 6.488281 -2.050781 6.84375 -2.84375 Z M 4.078125 -2.84375 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-1-7&quot;&gt;
&lt;path d=&quot;M 1.3125 -2.828125 L 7.3125 -2.828125 L 7.3125 1.09375 L 6.703125 1.09375 L 6.703125 0.734375 L 1.921875 0.734375 L 1.921875 1.09375 L 1.3125 1.09375 Z M 2.515625 -7.28125 L 3.15625 -7.015625 C 3.03125 -6.804688 2.894531 -6.601562 2.75 -6.40625 L 7.3125 -6.40625 L 7.3125 -5.84375 C 6.789062 -5.21875 6.09375 -4.671875 5.21875 -4.203125 C 6.144531 -3.890625 7.253906 -3.703125 8.546875 -3.640625 C 8.359375 -3.367188 8.195312 -3.128906 8.0625 -2.921875 C 6.613281 -3.097656 5.398438 -3.398438 4.421875 -3.828125 C 3.304688 -3.347656 1.957031 -2.972656 0.375 -2.703125 C 0.28125 -2.898438 0.164062 -3.101562 0.03125 -3.3125 C 1.414062 -3.507812 2.625 -3.804688 3.65625 -4.203125 C 3 -4.585938 2.476562 -5.046875 2.09375 -5.578125 C 1.675781 -5.097656 1.207031 -4.632812 0.6875 -4.1875 C 0.53125 -4.351562 0.375 -4.507812 0.21875 -4.65625 C 1.226562 -5.457031 1.992188 -6.332031 2.515625 -7.28125 Z M 6.40625 -5.84375 L 2.625 -5.84375 C 3.082031 -5.3125 3.675781 -4.867188 4.40625 -4.515625 C 5.195312 -4.890625 5.863281 -5.332031 6.40625 -5.84375 Z M 1.921875 -1.28125 L 4.015625 -1.28125 L 4.015625 -2.328125 L 1.921875 -2.328125 Z M 6.703125 -2.328125 L 4.609375 -2.328125 L 4.609375 -1.28125 L 6.703125 -1.28125 Z M 4.609375 0.21875 L 6.703125 0.21875 L 6.703125 -0.796875 L 4.609375 -0.796875 Z M 1.921875 0.21875 L 4.015625 0.21875 L 4.015625 -0.796875 L 1.921875 -0.796875 Z M 1.921875 0.21875 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-1-8&quot;&gt;
&lt;path d=&quot;M 3.25 -0.921875 L 3.609375 -1.421875 C 4.253906 -1.066406 4.875 -0.71875 5.46875 -0.375 L 7.09375 -1.984375 L 3.515625 -1.984375 L 3.515625 -2.578125 C 3.628906 -2.929688 3.738281 -3.28125 3.84375 -3.625 L 2.515625 -3.625 L 2.515625 -4.21875 L 4.015625 -4.21875 C 4.117188 -4.59375 4.21875 -4.960938 4.3125 -5.328125 L 2.9375 -5.328125 L 2.9375 -5.921875 L 4.46875 -5.921875 C 4.5625 -6.316406 4.648438 -6.703125 4.734375 -7.078125 L 5.46875 -7.078125 C 5.375 -6.703125 5.28125 -6.316406 5.1875 -5.921875 L 8.15625 -5.921875 L 8.15625 -5.328125 L 5.03125 -5.328125 C 4.9375 -4.960938 4.832031 -4.59375 4.71875 -4.21875 L 8.484375 -4.21875 L 8.484375 -3.625 L 4.546875 -3.625 C 4.453125 -3.28125 4.347656 -2.929688 4.234375 -2.578125 L 7.953125 -2.578125 L 7.953125 -1.953125 L 6.046875 -0.03125 C 6.390625 0.175781 6.726562 0.390625 7.0625 0.609375 L 6.625 1.171875 C 5.4375 0.359375 4.3125 -0.335938 3.25 -0.921875 Z M 0.125 -3.015625 C 0.90625 -4.171875 1.523438 -5.546875 1.984375 -7.140625 L 2.65625 -6.9375 C 2.445312 -6.28125 2.222656 -5.671875 1.984375 -5.109375 L 1.984375 1.078125 L 1.328125 1.078125 L 1.328125 -3.71875 C 1.035156 -3.195312 0.726562 -2.71875 0.40625 -2.28125 C 0.320312 -2.519531 0.226562 -2.765625 0.125 -3.015625 Z M 0.125 -3.015625 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-1-9&quot;&gt;
&lt;path d=&quot;M 0.84375 -2.984375 L 1.59375 -2.984375 L 1.59375 -4.515625 L 2.15625 -4.515625 L 2.15625 -2.984375 L 2.96875 -2.984375 L 2.96875 -2.4375 L 2.15625 -2.4375 L 2.15625 -1.28125 C 2.457031 -1.3125 2.757812 -1.351562 3.0625 -1.40625 C 3.039062 -1.195312 3.019531 -1.003906 3 -0.828125 C 2.71875 -0.785156 2.4375 -0.75 2.15625 -0.71875 L 2.15625 1.171875 L 1.59375 1.171875 L 1.59375 -0.625 C 1.144531 -0.5625 0.691406 -0.492188 0.234375 -0.421875 L 0.140625 -1.03125 C 0.617188 -1.082031 1.101562 -1.140625 1.59375 -1.203125 L 1.59375 -2.4375 L 0.25 -2.4375 L 0.25 -3.015625 C 0.46875 -3.609375 0.691406 -4.367188 0.921875 -5.296875 L 0.171875 -5.296875 L 0.171875 -5.84375 L 1.046875 -5.84375 C 1.148438 -6.25 1.25 -6.679688 1.34375 -7.140625 L 1.953125 -7 C 1.847656 -6.59375 1.75 -6.207031 1.65625 -5.84375 L 3.171875 -5.84375 L 3.171875 -5.296875 L 1.5 -5.296875 C 1.257812 -4.390625 1.039062 -3.617188 0.84375 -2.984375 Z M 3.796875 1.15625 L 3.25 1.15625 L 3.25 -3.8125 L 5.484375 -3.8125 L 5.484375 0.328125 C 5.484375 0.828125 5.257812 1.078125 4.8125 1.078125 C 4.632812 1.078125 4.414062 1.070312 4.15625 1.0625 C 4.125 0.9375 4.082031 0.765625 4.03125 0.546875 C 4.257812 0.554688 4.46875 0.5625 4.65625 0.5625 C 4.851562 0.5625 4.953125 0.453125 4.953125 0.234375 L 4.953125 -0.75 L 3.796875 -0.75 Z M 6.21875 -7.078125 L 6.078125 -6.890625 C 6.734375 -5.898438 7.554688 -5.191406 8.546875 -4.765625 C 8.359375 -4.546875 8.210938 -4.351562 8.109375 -4.1875 C 7.722656 -4.40625 7.367188 -4.648438 7.046875 -4.921875 L 7.046875 -4.5 L 4.125 -4.5 L 4.125 -4.859375 C 3.789062 -4.585938 3.445312 -4.335938 3.09375 -4.109375 C 2.925781 -4.328125 2.773438 -4.5 2.640625 -4.625 C 3.765625 -5.269531 4.664062 -6.085938 5.34375 -7.078125 Z M 7.484375 -3.96875 L 8.046875 -3.96875 L 8.046875 0.140625 C 8.046875 0.765625 7.785156 1.078125 7.265625 1.078125 C 6.972656 1.085938 6.644531 1.082031 6.28125 1.0625 C 6.25 0.851562 6.207031 0.644531 6.15625 0.4375 C 6.507812 0.476562 6.8125 0.5 7.0625 0.5 C 7.34375 0.5 7.484375 0.351562 7.484375 0.0625 Z M 5.671875 -6.453125 C 5.242188 -5.929688 4.785156 -5.457031 4.296875 -5.03125 L 6.921875 -5.03125 C 6.441406 -5.4375 6.023438 -5.910156 5.671875 -6.453125 Z M 6.1875 -3.5625 L 6.734375 -3.5625 L 6.734375 -0.5 L 6.1875 -0.5 Z M 3.796875 -1.21875 L 4.953125 -1.21875 L 4.953125 -2.03125 L 3.796875 -2.03125 Z M 4.953125 -3.296875 L 3.796875 -3.296875 L 3.796875 -2.5 L 4.953125 -2.5 Z M 4.953125 -3.296875 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-1-10&quot;&gt;
&lt;path d=&quot;M 0.53125 1.140625 C 0.363281 0.921875 0.207031 0.722656 0.0625 0.546875 C 0.757812 -0.421875 1.109375 -1.820312 1.109375 -3.65625 L 1.109375 -6.765625 L 8.03125 -6.765625 L 8.03125 -4.109375 L 7.390625 -4.109375 L 7.390625 -4.421875 L 1.75 -4.421875 L 1.75 -3.515625 C 1.75 -1.617188 1.34375 -0.0664062 0.53125 1.140625 Z M 5.78125 -0.75 L 6.234375 -1.15625 C 7.066406 -0.4375 7.726562 0.1875 8.21875 0.71875 L 7.703125 1.171875 C 7.523438 0.984375 7.351562 0.796875 7.1875 0.609375 C 5.46875 0.617188 4.066406 0.664062 2.984375 0.75 C 2.828125 0.757812 2.628906 0.796875 2.390625 0.859375 L 2.109375 0.234375 C 2.441406 0.0976562 2.703125 -0.046875 2.890625 -0.203125 C 3.210938 -0.515625 3.554688 -0.910156 3.921875 -1.390625 L 1.859375 -1.390625 L 1.859375 -1.984375 L 8.46875 -1.984375 L 8.46875 -1.390625 L 4.78125 -1.390625 C 4.3125 -0.804688 3.875 -0.3125 3.46875 0.09375 C 4.519531 0.0820312 5.578125 0.0664062 6.640625 0.046875 C 6.359375 -0.222656 6.070312 -0.488281 5.78125 -0.75 Z M 1.75 -6.171875 L 1.75 -5.015625 L 7.390625 -5.015625 L 7.390625 -6.171875 Z M 2.453125 -3.515625 L 7.71875 -3.515625 L 7.71875 -2.921875 L 2.453125 -2.921875 Z M 2.453125 -3.515625 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-1-11&quot;&gt;
&lt;path d=&quot;M 3.21875 -3.328125 L 3.21875 -3.890625 L 5.390625 -3.890625 L 5.390625 -5.171875 L 3.1875 -5.171875 L 3.1875 -5.796875 L 5.390625 -5.796875 L 5.390625 -7.140625 L 6.0625 -7.140625 L 6.0625 -5.796875 L 8.359375 -5.796875 L 8.359375 -5.171875 L 6.0625 -5.171875 L 6.0625 -3.890625 L 7.859375 -3.890625 L 7.859375 -3.375 C 7.460938 -2.257812 6.898438 -1.351562 6.171875 -0.65625 C 6.804688 -0.15625 7.585938 0.222656 8.515625 0.484375 C 8.304688 0.734375 8.125 0.953125 7.96875 1.140625 C 7.0625 0.765625 6.289062 0.3125 5.65625 -0.21875 C 4.914062 0.332031 4.050781 0.804688 3.0625 1.203125 C 2.945312 1.023438 2.800781 0.828125 2.625 0.609375 C 3.625 0.273438 4.476562 -0.144531 5.1875 -0.65625 C 4.5625 -1.34375 4.09375 -2.234375 3.78125 -3.328125 Z M 0.09375 -2.703125 C 0.519531 -2.828125 0.929688 -2.945312 1.328125 -3.0625 L 1.328125 -4.875 L 0.203125 -4.875 L 0.203125 -5.46875 L 1.328125 -5.46875 L 1.328125 -7.09375 L 1.984375 -7.09375 L 1.984375 -5.46875 L 2.96875 -5.46875 L 2.96875 -4.875 L 1.984375 -4.875 L 1.984375 -3.265625 C 2.304688 -3.367188 2.617188 -3.472656 2.921875 -3.578125 C 2.921875 -3.304688 2.925781 -3.085938 2.9375 -2.921875 C 2.625 -2.816406 2.304688 -2.710938 1.984375 -2.609375 L 1.984375 0.109375 C 1.984375 0.703125 1.703125 1 1.140625 1 C 0.910156 1.007812 0.640625 1.007812 0.328125 1 C 0.296875 0.769531 0.257812 0.535156 0.21875 0.296875 C 0.550781 0.328125 0.800781 0.34375 0.96875 0.34375 C 1.207031 0.34375 1.328125 0.21875 1.328125 -0.03125 L 1.328125 -2.390625 C 0.953125 -2.265625 0.570312 -2.140625 0.1875 -2.015625 Z M 7.125 -3.328125 L 4.4375 -3.328125 C 4.6875 -2.441406 5.109375 -1.691406 5.703125 -1.078125 C 6.359375 -1.710938 6.832031 -2.460938 7.125 -3.328125 Z M 7.125 -3.328125 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-1-12&quot;&gt;
&lt;path d=&quot;M 8.5625 -0.546875 C 8.351562 -0.316406 8.171875 -0.09375 8.015625 0.125 C 6.617188 -0.863281 5.5 -2.265625 4.65625 -4.078125 L 4.65625 1.140625 L 3.984375 1.140625 L 3.984375 -4.09375 C 3.203125 -2.40625 2.054688 -0.960938 0.546875 0.234375 C 0.410156 0.0546875 0.242188 -0.15625 0.046875 -0.40625 C 1.554688 -1.5 2.757812 -2.867188 3.65625 -4.515625 L 0.3125 -4.515625 L 0.3125 -5.140625 L 3.984375 -5.140625 L 3.984375 -7.1875 L 4.65625 -7.1875 L 4.65625 -5.140625 L 8.34375 -5.140625 L 8.34375 -4.515625 L 4.96875 -4.515625 C 5.90625 -2.679688 7.101562 -1.359375 8.5625 -0.546875 Z M 5.484375 -6.578125 L 5.90625 -7.046875 C 6.394531 -6.722656 6.878906 -6.359375 7.359375 -5.953125 L 6.890625 -5.421875 C 6.421875 -5.835938 5.953125 -6.222656 5.484375 -6.578125 Z M 5.484375 -6.578125 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-1-13&quot;&gt;
&lt;path d=&quot;M 3.5 -0.203125 L 2.890625 -0.203125 L 2.890625 -4.9375 L 4.921875 -4.9375 C 4.503906 -5.15625 4.070312 -5.375 3.625 -5.59375 L 3.96875 -6 C 4.40625 -5.78125 4.816406 -5.570312 5.203125 -5.375 L 6.71875 -6.171875 L 2.765625 -6.171875 L 2.765625 -6.703125 L 7.828125 -6.703125 L 7.828125 -6.140625 L 5.796875 -5.09375 C 5.890625 -5.039062 5.984375 -4.988281 6.078125 -4.9375 L 7.890625 -4.9375 L 7.890625 -1.140625 C 7.890625 -0.492188 7.59375 -0.171875 7 -0.171875 C 6.707031 -0.171875 6.390625 -0.179688 6.046875 -0.203125 C 6.015625 -0.410156 5.972656 -0.625 5.921875 -0.84375 C 6.273438 -0.800781 6.578125 -0.78125 6.828125 -0.78125 C 7.128906 -0.78125 7.28125 -0.925781 7.28125 -1.21875 L 7.28125 -1.640625 L 5.671875 -1.640625 L 5.671875 -0.328125 L 5.078125 -0.328125 L 5.078125 -1.640625 L 3.5 -1.640625 Z M 3.59375 0.265625 L 5.6875 0.296875 L 8.484375 0.234375 C 8.421875 0.421875 8.34375 0.640625 8.25 0.890625 L 5.46875 0.90625 L 3.46875 0.859375 C 2.507812 0.847656 1.835938 0.519531 1.453125 -0.125 C 1.222656 0.09375 0.890625 0.46875 0.453125 1 L 0.09375 0.3125 C 0.59375 -0.164062 0.953125 -0.507812 1.171875 -0.71875 L 1.171875 -3.5625 L 0.171875 -3.5625 L 0.171875 -4.1875 L 1.828125 -4.1875 L 1.828125 -0.578125 C 2.171875 -0.0234375 2.757812 0.253906 3.59375 0.265625 Z M 1.15625 -7.015625 C 1.4375 -6.660156 1.828125 -6.128906 2.328125 -5.421875 L 1.734375 -5 C 1.273438 -5.707031 0.898438 -6.257812 0.609375 -6.65625 Z M 7.28125 -4.40625 L 5.671875 -4.40625 L 5.671875 -3.5625 L 7.28125 -3.5625 Z M 5.671875 -2.171875 L 7.28125 -2.171875 L 7.28125 -3.015625 L 5.671875 -3.015625 Z M 3.5 -3.5625 L 5.078125 -3.5625 L 5.078125 -4.40625 L 3.5 -4.40625 Z M 3.5 -2.171875 L 5.078125 -2.171875 L 5.078125 -3.015625 L 3.5 -3.015625 Z M 3.5 -2.171875 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-1-14&quot;&gt;
&lt;path d=&quot;M 3.09375 -1.9375 L 7.890625 -1.9375 L 7.890625 1.15625 L 7.25 1.15625 L 7.25 0.640625 L 3.75 0.640625 L 3.75 1.15625 L 3.09375 1.15625 Z M 0.109375 -3.109375 C 0.929688 -4.328125 1.550781 -5.675781 1.96875 -7.15625 L 2.625 -6.984375 C 2.382812 -6.222656 2.117188 -5.523438 1.828125 -4.890625 L 1.828125 1.15625 L 1.203125 1.15625 L 1.203125 -3.65625 C 0.941406 -3.207031 0.671875 -2.789062 0.390625 -2.40625 C 0.296875 -2.644531 0.203125 -2.878906 0.109375 -3.109375 Z M 7.25 -1.359375 L 3.75 -1.359375 L 3.75 0.078125 L 7.25 0.078125 Z M 2.546875 -6.03125 L 5.296875 -6.03125 C 5.128906 -6.3125 4.953125 -6.597656 4.765625 -6.890625 L 5.328125 -7.1875 C 5.535156 -6.875 5.738281 -6.550781 5.9375 -6.21875 L 5.5625 -6.03125 L 8.46875 -6.03125 L 8.46875 -5.4375 L 2.546875 -5.4375 Z M 3 -4.65625 L 7.96875 -4.65625 L 7.96875 -4.078125 L 3 -4.078125 Z M 3 -3.296875 L 7.96875 -3.296875 L 7.96875 -2.71875 L 3 -2.71875 Z M 3 -3.296875 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-1-15&quot;&gt;
&lt;path d=&quot;M 4 -6.921875 L 4.609375 -7.25 C 4.859375 -6.9375 5.09375 -6.601562 5.3125 -6.25 L 4.890625 -6.015625 L 8.3125 -6.015625 L 8.3125 -5.375 L 1.75 -5.375 L 1.75 -3.3125 C 1.75 -1.320312 1.335938 0.164062 0.515625 1.15625 C 0.378906 0.96875 0.21875 0.769531 0.03125 0.5625 C 0.707031 -0.1875 1.046875 -1.472656 1.046875 -3.296875 L 1.046875 -6.015625 L 4.609375 -6.015625 C 4.421875 -6.316406 4.21875 -6.617188 4 -6.921875 Z M 1.703125 0.015625 L 5.59375 0.015625 C 6.03125 -1.109375 6.492188 -2.644531 6.984375 -4.59375 L 7.71875 -4.390625 C 7.195312 -2.535156 6.734375 -1.066406 6.328125 0.015625 L 8.40625 0.015625 L 8.40625 0.65625 L 1.703125 0.65625 Z M 2.15625 -4.125 L 2.796875 -4.34375 C 3.140625 -3.320312 3.476562 -2.175781 3.8125 -0.90625 L 3.09375 -0.6875 C 2.832031 -1.800781 2.519531 -2.945312 2.15625 -4.125 Z M 4.1875 -4.546875 L 4.828125 -4.734375 C 5.117188 -3.722656 5.378906 -2.585938 5.609375 -1.328125 L 4.875 -1.140625 C 4.707031 -2.253906 4.476562 -3.390625 4.1875 -4.546875 Z M 4.1875 -4.546875 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-1-16&quot;&gt;
&lt;path d=&quot;M 4.15625 0.984375 L 4.15625 -1.6875 L 1.703125 -1.6875 C 1.609375 -0.519531 1.269531 0.445312 0.6875 1.21875 C 0.539062 1.03125 0.375 0.835938 0.1875 0.640625 C 0.550781 0.117188 0.800781 -0.453125 0.9375 -1.078125 C 1.0625 -1.679688 1.125 -2.539062 1.125 -3.65625 L 1.125 -6.671875 L 7.984375 -6.671875 L 7.984375 0.03125 C 7.984375 0.695312 7.664062 1.03125 7.03125 1.03125 C 6.644531 1.03125 6.210938 1.019531 5.734375 1 C 5.703125 0.820312 5.65625 0.59375 5.59375 0.3125 C 6.082031 0.34375 6.476562 0.359375 6.78125 0.359375 C 7.132812 0.359375 7.3125 0.191406 7.3125 -0.140625 L 7.3125 -1.6875 L 4.828125 -1.6875 L 4.828125 0.984375 Z M 4.828125 -2.296875 L 7.3125 -2.296875 L 7.3125 -3.875 L 4.828125 -3.875 Z M 7.3125 -6.046875 L 4.828125 -6.046875 L 4.828125 -4.484375 L 7.3125 -4.484375 Z M 1.75 -2.296875 L 4.15625 -2.296875 L 4.15625 -3.875 L 1.796875 -3.875 C 1.804688 -3.320312 1.789062 -2.796875 1.75 -2.296875 Z M 1.796875 -6.046875 L 1.796875 -4.484375 L 4.15625 -4.484375 L 4.15625 -6.046875 Z M 1.796875 -6.046875 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-1-17&quot;&gt;
&lt;path d=&quot;M 5.40625 -5.453125 L 6.015625 -5.453125 L 6.015625 -4.203125 C 6.015625 -3.441406 5.960938 -2.785156 5.859375 -2.234375 L 6.40625 -2.234375 L 6.40625 -0.140625 C 6.40625 0.179688 6.5625 0.34375 6.875 0.34375 L 7.28125 0.34375 C 7.5625 0.34375 7.71875 0.195312 7.75 -0.09375 C 7.789062 -0.414062 7.820312 -0.789062 7.84375 -1.21875 C 8.101562 -1.101562 8.320312 -1.015625 8.5 -0.953125 C 8.46875 -0.554688 8.425781 -0.203125 8.375 0.109375 C 8.289062 0.660156 7.96875 0.9375 7.40625 0.9375 L 6.703125 0.9375 C 6.097656 0.9375 5.796875 0.609375 5.796875 -0.046875 L 5.796875 -1.96875 C 5.546875 -0.863281 4.773438 0.1875 3.484375 1.1875 C 3.253906 0.925781 3.082031 0.742188 2.96875 0.640625 C 3.96875 -0.0859375 4.625 -0.800781 4.9375 -1.5 C 5.25 -2.09375 5.40625 -2.992188 5.40625 -4.203125 Z M 0.1875 -3.453125 L 1.484375 -3.453125 C 1.492188 -3.722656 1.5 -4.222656 1.5 -4.953125 L 0.296875 -4.953125 L 0.296875 -5.53125 L 1.5 -5.53125 L 1.5 -7.09375 L 2.125 -7.09375 L 2.125 -5.53125 L 3.34375 -5.53125 L 3.34375 -4.953125 L 2.125 -4.953125 C 2.125 -4.535156 2.117188 -4.035156 2.109375 -3.453125 L 3.484375 -3.453125 L 3.484375 -2.875 L 2.078125 -2.875 C 2.078125 -2.695312 2.0625 -2.515625 2.03125 -2.328125 C 2.570312 -1.835938 3.144531 -1.28125 3.75 -0.65625 L 3.234375 -0.171875 C 2.816406 -0.691406 2.378906 -1.191406 1.921875 -1.671875 C 1.671875 -0.609375 1.207031 0.316406 0.53125 1.109375 C 0.425781 0.953125 0.289062 0.753906 0.125 0.515625 C 0.96875 -0.535156 1.410156 -1.664062 1.453125 -2.875 L 0.1875 -2.875 Z M 3.71875 -6.75 L 7.8125 -6.75 L 7.8125 -1.703125 L 7.1875 -1.703125 L 7.1875 -6.140625 L 4.34375 -6.140625 L 4.34375 -1.578125 L 3.71875 -1.578125 Z M 3.71875 -6.75 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-1-18&quot;&gt;
&lt;path d=&quot;M 3.5 -4.5 L 7.515625 -4.5 C 7.472656 -3.664062 7.429688 -2.988281 7.390625 -2.46875 C 7.316406 -1.664062 6.894531 -1.265625 6.125 -1.265625 C 5.800781 -1.265625 5.425781 -1.273438 5 -1.296875 C 4.96875 -1.515625 4.925781 -1.757812 4.875 -2.03125 C 5.363281 -1.957031 5.773438 -1.921875 6.109375 -1.921875 C 6.460938 -1.921875 6.664062 -2.097656 6.71875 -2.453125 C 6.757812 -2.828125 6.789062 -3.3125 6.8125 -3.90625 L 4.171875 -3.90625 L 4.171875 -0.265625 C 4.171875 0.078125 4.347656 0.25 4.703125 0.25 L 6.90625 0.25 C 7.351562 0.269531 7.609375 0.101562 7.671875 -0.25 C 7.753906 -0.6875 7.804688 -1.113281 7.828125 -1.53125 C 8.054688 -1.4375 8.28125 -1.351562 8.5 -1.28125 C 8.457031 -0.894531 8.394531 -0.476562 8.3125 -0.03125 C 8.207031 0.59375 7.757812 0.890625 6.96875 0.859375 L 4.5 0.859375 C 3.832031 0.847656 3.5 0.515625 3.5 -0.140625 Z M 0.203125 -6.265625 L 2.515625 -6.265625 L 2.515625 -7.1875 L 3.1875 -7.1875 L 3.1875 -6.265625 L 5.453125 -6.265625 L 5.453125 -7.1875 L 6.125 -7.1875 L 6.125 -6.265625 L 8.453125 -6.265625 L 8.453125 -5.671875 L 6.125 -5.671875 L 6.125 -4.9375 L 5.453125 -4.9375 L 5.453125 -5.671875 L 3.1875 -5.671875 L 3.1875 -4.9375 L 2.515625 -4.9375 L 2.515625 -5.671875 L 0.203125 -5.671875 Z M 2.0625 -2.09375 C 2.21875 -1.976562 2.414062 -1.84375 2.65625 -1.6875 C 1.976562 -0.476562 1.457031 0.410156 1.09375 0.984375 L 0.46875 0.5625 C 1.039062 -0.25 1.570312 -1.132812 2.0625 -2.09375 Z M 1.5 -5.09375 C 2.101562 -4.675781 2.570312 -4.332031 2.90625 -4.0625 L 2.453125 -3.53125 C 1.960938 -3.96875 1.515625 -4.332031 1.109375 -4.625 Z M 0.578125 -3.703125 C 1.109375 -3.335938 1.5625 -2.992188 1.9375 -2.671875 L 1.515625 -2.140625 C 0.953125 -2.640625 0.503906 -2.992188 0.171875 -3.203125 Z M 0.578125 -3.703125 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-1-19&quot;&gt;
&lt;path d=&quot;M 0.09375 -4.796875 C 0.707031 -5.472656 1.207031 -6.265625 1.59375 -7.171875 L 2.1875 -7.015625 C 2.070312 -6.773438 1.957031 -6.546875 1.84375 -6.328125 L 3.421875 -6.328125 L 3.421875 -5.8125 L 2.8125 -4.90625 L 3.890625 -4.90625 L 3.890625 0.171875 C 3.890625 0.734375 3.609375 1.015625 3.046875 1.015625 C 2.804688 1.023438 2.554688 1.019531 2.296875 1 C 2.285156 0.863281 2.253906 0.675781 2.203125 0.4375 C 2.472656 0.46875 2.71875 0.484375 2.9375 0.484375 C 3.195312 0.484375 3.328125 0.351562 3.328125 0.09375 L 3.328125 -1.28125 L 2.578125 -1.28125 L 2.578125 0.28125 L 2.03125 0.28125 L 2.03125 -1.28125 L 1.28125 -1.28125 C 1.226562 -0.226562 1 0.578125 0.59375 1.140625 C 0.457031 0.992188 0.300781 0.851562 0.125 0.71875 C 0.53125 0.101562 0.734375 -0.71875 0.734375 -1.75 L 0.734375 -4.625 C 0.660156 -4.519531 0.582031 -4.421875 0.5 -4.328125 C 0.40625 -4.460938 0.269531 -4.617188 0.09375 -4.796875 Z M 4.140625 -1.203125 L 6.125 -1.203125 L 6.125 -2.421875 L 5.109375 -2.421875 C 4.992188 -2.097656 4.867188 -1.796875 4.734375 -1.515625 C 4.566406 -1.609375 4.382812 -1.691406 4.1875 -1.765625 C 4.5 -2.441406 4.75 -3.125 4.9375 -3.8125 L 5.515625 -3.65625 C 5.453125 -3.425781 5.382812 -3.207031 5.3125 -3 L 6.125 -3 L 6.125 -3.90625 L 6.75 -3.90625 L 6.75 -3 L 8.265625 -3 L 8.265625 -2.421875 L 6.75 -2.421875 L 6.75 -1.203125 L 8.46875 -1.203125 L 8.46875 -0.640625 L 6.75 -0.640625 L 6.75 1.140625 L 6.125 1.140625 L 6.125 -0.640625 L 4.140625 -0.640625 Z M 4.234375 -6.734375 L 8.015625 -6.734375 C 8.003906 -6.179688 7.976562 -5.664062 7.9375 -5.1875 C 7.894531 -4.5 7.53125 -4.15625 6.84375 -4.15625 C 6.613281 -4.15625 6.328125 -4.164062 5.984375 -4.1875 C 5.953125 -4.414062 5.910156 -4.640625 5.859375 -4.859375 C 6.265625 -4.804688 6.582031 -4.78125 6.8125 -4.78125 C 7.113281 -4.78125 7.28125 -4.941406 7.3125 -5.265625 C 7.34375 -5.515625 7.363281 -5.8125 7.375 -6.15625 L 5.78125 -6.15625 C 5.757812 -5.601562 5.65625 -5.160156 5.46875 -4.828125 C 5.28125 -4.441406 4.90625 -4.070312 4.34375 -3.71875 C 4.25 -3.851562 4.113281 -4.03125 3.9375 -4.25 C 4.394531 -4.507812 4.71875 -4.789062 4.90625 -5.09375 C 5.050781 -5.332031 5.132812 -5.6875 5.15625 -6.15625 L 4.234375 -6.15625 Z M 0.953125 -4.90625 L 2.125 -4.90625 L 2.75 -5.8125 L 1.546875 -5.8125 C 1.359375 -5.488281 1.160156 -5.1875 0.953125 -4.90625 Z M 2.578125 -1.78125 L 3.328125 -1.78125 L 3.328125 -2.84375 L 2.578125 -2.84375 Z M 3.328125 -4.40625 L 2.578125 -4.40625 L 2.578125 -3.34375 L 3.328125 -3.34375 Z M 1.28125 -1.78125 L 2.03125 -1.78125 L 2.03125 -2.84375 L 1.28125 -2.84375 Z M 1.28125 -3.34375 L 2.03125 -3.34375 L 2.03125 -4.40625 L 1.28125 -4.40625 Z M 1.28125 -3.34375 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-1-20&quot;&gt;
&lt;path d=&quot;M 2.28125 -3.03125 L 4.578125 -3.03125 C 4.628906 -3.53125 4.65625 -4.1875 4.65625 -5 L 2.765625 -5 L 2.765625 -5.609375 L 4.65625 -5.609375 C 4.664062 -6.109375 4.671875 -6.613281 4.671875 -7.125 L 5.34375 -7.125 C 5.34375 -6.625 5.335938 -6.117188 5.328125 -5.609375 L 7.484375 -5.609375 L 7.484375 -3.03125 L 8.484375 -3.03125 L 8.484375 -2.4375 L 5.390625 -2.4375 C 5.898438 -1.144531 6.890625 -0.222656 8.359375 0.328125 C 8.128906 0.566406 7.9375 0.789062 7.78125 1 C 6.425781 0.3125 5.492188 -0.644531 4.984375 -1.875 C 4.640625 -0.632812 3.71875 0.375 2.21875 1.15625 C 2.113281 0.976562 1.957031 0.765625 1.75 0.515625 C 3.332031 -0.242188 4.242188 -1.226562 4.484375 -2.4375 L 2.28125 -2.4375 Z M 6.84375 -5 L 5.3125 -5 C 5.3125 -4.21875 5.289062 -3.5625 5.25 -3.03125 L 6.84375 -3.03125 Z M 1.359375 -3.46875 C 1.566406 -3.320312 1.789062 -3.195312 2.03125 -3.09375 C 1.5625 -1.789062 1.160156 -0.609375 0.828125 0.453125 L 0.140625 0.078125 C 0.585938 -0.929688 0.992188 -2.113281 1.359375 -3.46875 Z M 0.78125 -6.65625 C 1.34375 -6.09375 1.832031 -5.570312 2.25 -5.09375 L 1.6875 -4.578125 C 1.226562 -5.160156 0.757812 -5.703125 0.28125 -6.203125 Z M 0.78125 -6.65625 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-1-21&quot;&gt;
&lt;path d=&quot;M 0.265625 -5.71875 L 4.296875 -5.71875 C 4.015625 -6.257812 3.796875 -6.648438 3.640625 -6.890625 L 4.296875 -7.203125 C 4.453125 -6.960938 4.6875 -6.570312 5 -6.03125 L 4.390625 -5.71875 L 8.375 -5.71875 L 8.375 -5.078125 L 3.265625 -5.078125 C 3.253906 -4.566406 3.234375 -4.128906 3.203125 -3.765625 L 7.28125 -3.765625 C 7.207031 -2.546875 7.132812 -1.488281 7.0625 -0.59375 C 7 0.425781 6.503906 0.9375 5.578125 0.9375 C 5.148438 0.9375 4.578125 0.910156 3.859375 0.859375 C 3.835938 0.648438 3.796875 0.394531 3.734375 0.09375 C 4.453125 0.1875 5.03125 0.234375 5.46875 0.234375 C 5.988281 0.234375 6.28125 -0.0703125 6.34375 -0.6875 C 6.40625 -1.351562 6.460938 -2.171875 6.515625 -3.140625 L 3.15625 -3.140625 C 3 -1.285156 2.144531 0.148438 0.59375 1.171875 C 0.4375 0.992188 0.265625 0.804688 0.078125 0.609375 C 1.554688 -0.367188 2.347656 -1.679688 2.453125 -3.328125 C 2.492188 -3.765625 2.53125 -4.347656 2.5625 -5.078125 L 0.265625 -5.078125 Z M 0.265625 -5.71875 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-1-22&quot;&gt;
&lt;path d=&quot;M 0.5625 -2.453125 C 1.914062 -2.609375 2.972656 -2.785156 3.734375 -2.984375 C 3.054688 -3.171875 2.375 -3.347656 1.6875 -3.515625 C 1.914062 -3.765625 2.132812 -4.007812 2.34375 -4.25 L 0.34375 -4.25 L 0.34375 -4.8125 L 2.796875 -4.8125 C 3.003906 -5.070312 3.203125 -5.335938 3.390625 -5.609375 L 4.0625 -5.40625 C 3.914062 -5.207031 3.753906 -5.007812 3.578125 -4.8125 L 8.28125 -4.8125 L 8.28125 -4.25 L 6.484375 -4.25 C 6.210938 -3.769531 5.847656 -3.382812 5.390625 -3.09375 C 6.191406 -2.882812 6.945312 -2.679688 7.65625 -2.484375 L 7.390625 -1.921875 C 6.492188 -2.203125 5.585938 -2.472656 4.671875 -2.734375 C 3.816406 -2.390625 2.53125 -2.113281 0.8125 -1.90625 C 0.738281 -2.082031 0.65625 -2.265625 0.5625 -2.453125 Z M 8.515625 0.265625 C 8.328125 0.492188 8.164062 0.703125 8.03125 0.890625 C 6.539062 0.453125 5.398438 -0.0859375 4.609375 -0.734375 L 4.609375 1.171875 L 4.015625 1.171875 L 4.015625 -0.71875 C 3.160156 -0.113281 2.023438 0.425781 0.609375 0.90625 C 0.484375 0.738281 0.320312 0.546875 0.125 0.328125 C 1.570312 -0.0234375 2.71875 -0.46875 3.5625 -1 L 0.3125 -1 L 0.3125 -1.578125 L 4.015625 -1.578125 L 4.015625 -2.265625 L 4.609375 -2.265625 L 4.609375 -1.578125 L 8.359375 -1.578125 L 8.359375 -1 L 5.078125 -1 C 5.960938 -0.40625 7.109375 0.015625 8.515625 0.265625 Z M 0.5625 -6.375 L 4.09375 -6.375 C 3.988281 -6.570312 3.863281 -6.773438 3.71875 -6.984375 L 4.328125 -7.25 C 4.503906 -6.957031 4.675781 -6.664062 4.84375 -6.375 L 8.046875 -6.375 L 8.046875 -5.109375 L 7.40625 -5.109375 L 7.40625 -5.828125 L 1.203125 -5.828125 L 1.203125 -5.109375 L 0.5625 -5.109375 Z M 2.640625 -3.78125 C 3.328125 -3.613281 3.984375 -3.453125 4.609375 -3.296875 C 5.109375 -3.515625 5.5 -3.832031 5.78125 -4.25 L 3.09375 -4.25 C 2.945312 -4.09375 2.796875 -3.9375 2.640625 -3.78125 Z M 2.640625 -3.78125 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-1-23&quot;&gt;
&lt;path d=&quot;M 0.09375 -1.90625 C 0.71875 -2.863281 1.144531 -3.867188 1.375 -4.921875 L 0.15625 -4.921875 L 0.15625 -5.484375 L 1.4375 -5.484375 L 1.4375 -7.140625 L 2.03125 -7.140625 L 2.03125 -5.484375 L 3.171875 -5.484375 L 3.171875 -4.921875 L 2.03125 -4.921875 L 2.03125 -3.421875 L 2.390625 -3.796875 C 2.753906 -3.492188 3.070312 -3.195312 3.34375 -2.90625 L 2.890625 -2.453125 C 2.628906 -2.753906 2.34375 -3.0625 2.03125 -3.375 L 2.03125 1.078125 L 1.4375 1.078125 L 1.4375 -3.484375 C 1.144531 -2.515625 0.789062 -1.738281 0.375 -1.15625 C 0.300781 -1.394531 0.207031 -1.644531 0.09375 -1.90625 Z M 3.171875 -4.171875 L 8.421875 -4.171875 L 8.421875 -3.578125 L 6.09375 -3.578125 L 6.09375 -0.0625 C 6.09375 0.632812 5.769531 0.984375 5.125 0.984375 C 4.820312 0.992188 4.453125 0.992188 4.015625 0.984375 C 3.984375 0.773438 3.941406 0.539062 3.890625 0.28125 C 4.273438 0.320312 4.628906 0.34375 4.953125 0.34375 C 5.285156 0.34375 5.453125 0.132812 5.453125 -0.28125 L 5.453125 -3.578125 L 3.171875 -3.578125 Z M 3.546875 -6.640625 L 8.03125 -6.640625 L 8.03125 -6.046875 L 3.546875 -6.046875 Z M 6.65625 -2.5 L 7.25 -2.78125 C 7.78125 -1.757812 8.222656 -0.863281 8.578125 -0.09375 L 7.90625 0.203125 C 7.539062 -0.671875 7.125 -1.570312 6.65625 -2.5 Z M 3.953125 -2.78125 L 4.578125 -2.53125 C 4.117188 -1.5 3.660156 -0.585938 3.203125 0.203125 C 3.035156 0.109375 2.832031 0.0078125 2.59375 -0.09375 C 3.039062 -0.8125 3.492188 -1.707031 3.953125 -2.78125 Z M 3.953125 -2.78125 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-1-24&quot;&gt;
&lt;path d=&quot;M 3.28125 -6.578125 L 7.921875 -6.578125 L 7.921875 -2.15625 L 7.265625 -2.15625 L 7.265625 -2.65625 L 3.921875 -2.65625 L 3.921875 -2.15625 L 3.28125 -2.15625 Z M 7.265625 -6 L 3.921875 -6 L 3.921875 -3.25 L 7.265625 -3.25 Z M 3.109375 -1.765625 C 3.140625 -1.523438 3.175781 -1.289062 3.21875 -1.0625 C 2.71875 -0.6875 2.238281 -0.3125 1.78125 0.0625 C 1.675781 0.15625 1.554688 0.28125 1.421875 0.4375 L 0.921875 -0.078125 C 1.097656 -0.253906 1.1875 -0.503906 1.1875 -0.828125 L 1.1875 -3.734375 L 0.125 -3.734375 L 0.125 -4.34375 L 1.84375 -4.34375 L 1.84375 -0.765625 C 2.300781 -1.109375 2.722656 -1.441406 3.109375 -1.765625 Z M 6.015625 -1.34375 L 6.5625 -1.75 C 7.238281 -1.03125 7.914062 -0.257812 8.59375 0.5625 L 8 1.015625 C 7.363281 0.203125 6.703125 -0.582031 6.015625 -1.34375 Z M 4.453125 -1.78125 L 5.015625 -1.375 C 4.347656 -0.5625 3.601562 0.25 2.78125 1.0625 C 2.632812 0.925781 2.460938 0.773438 2.265625 0.609375 C 3.035156 -0.0976562 3.765625 -0.894531 4.453125 -1.78125 Z M 1.375 -7.015625 C 1.925781 -6.453125 2.367188 -5.988281 2.703125 -5.625 L 2.109375 -5.140625 C 1.679688 -5.691406 1.273438 -6.175781 0.890625 -6.59375 Z M 1.375 -7.015625 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-1-25&quot;&gt;
&lt;path d=&quot;M 6.0625 -3.703125 C 6.78125 -3.117188 7.515625 -2.484375 8.265625 -1.796875 C 8.078125 -1.617188 7.90625 -1.445312 7.75 -1.28125 C 7.519531 -1.507812 7.285156 -1.738281 7.046875 -1.96875 C 6.296875 -1.9375 5.523438 -1.898438 4.734375 -1.859375 L 4.734375 0.03125 C 4.734375 0.675781 4.398438 1 3.734375 1 C 3.453125 1 3.085938 0.992188 2.640625 0.984375 C 2.617188 0.773438 2.582031 0.546875 2.53125 0.296875 C 3.007812 0.335938 3.375 0.359375 3.625 0.359375 C 3.925781 0.359375 4.078125 0.207031 4.078125 -0.09375 L 4.078125 -1.828125 C 3.398438 -1.785156 2.707031 -1.742188 2 -1.703125 C 1.6875 -1.691406 1.367188 -1.65625 1.046875 -1.59375 L 0.78125 -2.328125 C 1.144531 -2.390625 1.492188 -2.5 1.828125 -2.65625 C 2.679688 -3.070312 3.476562 -3.492188 4.21875 -3.921875 C 3.238281 -3.847656 2.421875 -3.78125 1.765625 -3.71875 C 1.472656 -3.6875 1.25 -3.65625 1.09375 -3.625 L 0.828125 -4.328125 C 1.097656 -4.398438 1.347656 -4.5 1.578125 -4.625 C 2.285156 -5.019531 2.992188 -5.484375 3.703125 -6.015625 C 2.734375 -5.960938 1.757812 -5.910156 0.78125 -5.859375 C 0.738281 -6.054688 0.6875 -6.253906 0.625 -6.453125 C 3.300781 -6.554688 5.675781 -6.710938 7.75 -6.921875 L 7.890625 -6.328125 C 6.671875 -6.222656 5.429688 -6.128906 4.171875 -6.046875 L 4.515625 -5.8125 C 3.628906 -5.21875 2.816406 -4.71875 2.078125 -4.3125 C 3.328125 -4.382812 4.367188 -4.453125 5.203125 -4.515625 C 5.765625 -4.878906 6.28125 -5.242188 6.75 -5.609375 L 7.296875 -5.15625 C 5.890625 -4.15625 4.253906 -3.21875 2.390625 -2.34375 C 3.503906 -2.375 4.859375 -2.429688 6.453125 -2.515625 C 6.171875 -2.773438 5.890625 -3.023438 5.609375 -3.265625 Z M 5.5625 -0.9375 L 5.984375 -1.390625 C 6.691406 -0.921875 7.472656 -0.359375 8.328125 0.296875 L 7.828125 0.84375 C 7.035156 0.195312 6.28125 -0.394531 5.5625 -0.9375 Z M 2.265625 -1.390625 L 2.8125 -0.953125 C 2.09375 -0.304688 1.335938 0.3125 0.546875 0.90625 C 0.410156 0.75 0.253906 0.582031 0.078125 0.40625 C 0.804688 -0.09375 1.535156 -0.691406 2.265625 -1.390625 Z M 2.265625 -1.390625 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-1-26&quot;&gt;
&lt;path d=&quot;M 6.875 -4.90625 C 7.34375 -4.269531 7.828125 -3.554688 8.328125 -2.765625 C 8.128906 -2.648438 7.921875 -2.519531 7.703125 -2.375 C 7.554688 -2.613281 7.421875 -2.84375 7.296875 -3.0625 C 7.035156 -3.050781 6.765625 -3.035156 6.484375 -3.015625 L 6.484375 -0.171875 C 6.484375 0.171875 6.609375 0.34375 6.859375 0.34375 L 7.28125 0.34375 C 7.550781 0.34375 7.707031 0.203125 7.75 -0.078125 C 7.789062 -0.410156 7.816406 -0.773438 7.828125 -1.171875 C 8.015625 -1.085938 8.238281 -1.003906 8.5 -0.921875 C 8.457031 -0.429688 8.410156 -0.0507812 8.359375 0.21875 C 8.285156 0.707031 7.992188 0.953125 7.484375 0.953125 L 6.75 0.953125 C 6.144531 0.953125 5.84375 0.597656 5.84375 -0.109375 L 5.84375 -2.984375 C 5.519531 -2.960938 5.191406 -2.941406 4.859375 -2.921875 C 4.816406 -1.703125 4.660156 -0.847656 4.390625 -0.359375 C 4.066406 0.253906 3.46875 0.765625 2.59375 1.171875 C 2.46875 0.992188 2.328125 0.804688 2.171875 0.609375 C 2.984375 0.273438 3.523438 -0.160156 3.796875 -0.703125 C 4.046875 -1.128906 4.179688 -1.851562 4.203125 -2.875 C 4.085938 -2.875 3.972656 -2.867188 3.859375 -2.859375 C 3.617188 -2.835938 3.394531 -2.800781 3.1875 -2.75 L 2.890625 -3.40625 C 3.140625 -3.507812 3.335938 -3.644531 3.484375 -3.8125 C 3.898438 -4.3125 4.296875 -4.859375 4.671875 -5.453125 L 2.828125 -5.453125 L 2.828125 -6.046875 L 5.515625 -6.046875 C 5.304688 -6.367188 5.109375 -6.65625 4.921875 -6.90625 L 5.46875 -7.25 C 5.6875 -6.988281 5.925781 -6.675781 6.1875 -6.3125 L 5.796875 -6.046875 L 8.359375 -6.046875 L 8.359375 -5.453125 L 4.9375 -5.453125 L 5.40625 -5.25 C 4.9375 -4.625 4.476562 -4.046875 4.03125 -3.515625 C 5.082031 -3.554688 6.050781 -3.59375 6.9375 -3.625 C 6.726562 -3.96875 6.523438 -4.28125 6.328125 -4.5625 Z M 1.203125 -2.0625 C 1.648438 -2.125 2.226562 -2.210938 2.9375 -2.328125 C 2.894531 -2.097656 2.863281 -1.890625 2.84375 -1.703125 C 2.144531 -1.597656 1.34375 -1.472656 0.4375 -1.328125 L 0.296875 -1.9375 C 0.648438 -2.300781 1.066406 -2.890625 1.546875 -3.703125 C 0.960938 -3.660156 0.546875 -3.628906 0.296875 -3.609375 L 0.140625 -4.1875 C 0.628906 -4.832031 1.160156 -5.820312 1.734375 -7.15625 L 2.375 -6.90625 C 1.832031 -5.84375 1.335938 -4.953125 0.890625 -4.234375 C 1.253906 -4.234375 1.582031 -4.238281 1.875 -4.25 C 2.039062 -4.550781 2.21875 -4.878906 2.40625 -5.234375 L 3.046875 -4.953125 C 2.398438 -3.835938 1.785156 -2.875 1.203125 -2.0625 Z M 0.109375 -0.296875 C 1.035156 -0.472656 2 -0.675781 3 -0.90625 C 2.976562 -0.613281 2.96875 -0.410156 2.96875 -0.296875 C 1.945312 -0.078125 1.054688 0.132812 0.296875 0.34375 Z M 0.109375 -0.296875 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-1-27&quot;&gt;
&lt;path d=&quot;M 4.234375 1.078125 L 3.703125 1.078125 L 3.703125 -3.421875 L 8.15625 -3.421875 L 8.15625 0.3125 C 8.15625 0.800781 7.9375 1.046875 7.5 1.046875 C 7.1875 1.054688 6.941406 1.0625 6.765625 1.0625 C 6.742188 0.90625 6.710938 0.757812 6.671875 0.625 L 6.28125 0.625 L 6.28125 -1.078125 L 5.515625 -1.078125 L 5.515625 0.65625 L 5 0.65625 L 5 -1.078125 L 4.234375 -1.078125 Z M 0.09375 -0.46875 C 0.78125 -0.5625 1.59375 -0.679688 2.53125 -0.828125 C 2.75 -1.578125 2.859375 -2.492188 2.859375 -3.578125 L 2.859375 -6.3125 L 5.234375 -6.3125 C 5.097656 -6.550781 4.972656 -6.757812 4.859375 -6.9375 L 5.5 -7.234375 C 5.65625 -6.972656 5.835938 -6.664062 6.046875 -6.3125 L 8.03125 -6.3125 L 8.03125 -4 L 7.453125 -4 L 7.453125 -4.28125 L 3.4375 -4.28125 L 3.4375 -3.578125 C 3.4375 -1.410156 3.023438 0.15625 2.203125 1.125 C 2.078125 0.945312 1.9375 0.773438 1.78125 0.609375 C 1.988281 0.359375 2.164062 0.0664062 2.3125 -0.265625 C 1.445312 -0.0859375 0.757812 0.0546875 0.25 0.171875 Z M 1.09375 -2.203125 C 1.351562 -2.210938 1.835938 -2.253906 2.546875 -2.328125 C 2.523438 -2.085938 2.503906 -1.898438 2.484375 -1.765625 C 1.378906 -1.671875 0.679688 -1.601562 0.390625 -1.5625 L 0.265625 -2.09375 C 0.554688 -2.375 0.929688 -2.945312 1.390625 -3.8125 C 0.960938 -3.78125 0.585938 -3.75 0.265625 -3.71875 L 0.109375 -4.25 C 0.648438 -5.101562 1.125 -6.066406 1.53125 -7.140625 L 2.1875 -6.90625 C 1.71875 -5.90625 1.265625 -5.035156 0.828125 -4.296875 C 1.003906 -4.296875 1.273438 -4.300781 1.640625 -4.3125 C 1.796875 -4.601562 1.953125 -4.921875 2.109375 -5.265625 L 2.71875 -4.984375 C 2 -3.691406 1.457031 -2.765625 1.09375 -2.203125 Z M 7.453125 -5.78125 L 3.4375 -5.78125 L 3.4375 -4.8125 L 7.453125 -4.8125 Z M 7.265625 0.515625 C 7.484375 0.515625 7.59375 0.390625 7.59375 0.140625 L 7.59375 -1.078125 L 6.796875 -1.078125 L 6.796875 0.5 C 6.941406 0.507812 7.097656 0.515625 7.265625 0.515625 Z M 7.59375 -2.875 L 6.796875 -2.875 L 6.796875 -1.59375 L 7.59375 -1.59375 Z M 5.515625 -1.59375 L 6.28125 -1.59375 L 6.28125 -2.875 L 5.515625 -2.875 Z M 4.234375 -1.59375 L 5 -1.59375 L 5 -2.875 L 4.234375 -2.875 Z M 4.234375 -1.59375 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-1-28&quot;&gt;
&lt;path d=&quot;M 0.09375 -2.5 C 0.78125 -3.445312 1.28125 -4.53125 1.59375 -5.75 L 0.34375 -5.75 L 0.34375 -6.375 L 3.5 -6.375 L 3.5 -5.75 L 2.234375 -5.75 C 2.054688 -5.039062 1.832031 -4.382812 1.5625 -3.78125 L 3.1875 -3.78125 L 3.1875 0.78125 L 2.59375 0.78125 L 2.59375 0.203125 L 1.546875 0.203125 L 1.546875 0.890625 L 0.9375 0.890625 L 0.9375 -2.609375 C 0.789062 -2.367188 0.632812 -2.140625 0.46875 -1.921875 C 0.382812 -2.078125 0.257812 -2.269531 0.09375 -2.5 Z M 4.890625 -5.75 L 4.671875 -3.28125 L 6.65625 -3.28125 L 6.9375 -6.046875 L 3.828125 -6.046875 L 3.828125 -6.65625 L 7.640625 -6.65625 L 7.28125 -3.28125 L 8.171875 -3.28125 C 8.128906 -2.144531 8.085938 -1.15625 8.046875 -0.3125 C 7.992188 0.519531 7.59375 0.9375 6.84375 0.9375 C 6.46875 0.9375 6.046875 0.925781 5.578125 0.90625 C 5.546875 0.707031 5.507812 0.476562 5.46875 0.21875 C 5.925781 0.269531 6.335938 0.296875 6.703125 0.296875 C 7.128906 0.296875 7.359375 0.0546875 7.390625 -0.421875 C 7.441406 -1.046875 7.476562 -1.796875 7.5 -2.671875 L 3.984375 -2.671875 L 4.25 -5.75 Z M 2.59375 -3.203125 L 1.546875 -3.203125 L 1.546875 -0.34375 L 2.59375 -0.34375 Z M 3.53125 -1.53125 L 7.078125 -1.53125 L 7.078125 -0.9375 L 3.53125 -0.9375 Z M 3.53125 -1.53125 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-1-29&quot;&gt;
&lt;path d=&quot;M 0.40625 -3.625 L 3.8125 -3.625 C 3.894531 -3.832031 3.945312 -4.078125 3.96875 -4.359375 L 4.578125 -4.28125 C 4.546875 -4.039062 4.5 -3.820312 4.4375 -3.625 L 6.265625 -3.625 C 6.046875 -3.789062 5.8125 -3.953125 5.5625 -4.109375 L 5.90625 -4.484375 C 6.269531 -4.265625 6.601562 -4.046875 6.90625 -3.828125 L 6.71875 -3.625 L 8.28125 -3.625 L 8.28125 -3.0625 L 5.03125 -3.0625 C 5.6875 -2.4375 6.835938 -2.140625 8.484375 -2.171875 C 8.347656 -1.941406 8.234375 -1.722656 8.140625 -1.515625 C 7.992188 -1.523438 7.851562 -1.539062 7.71875 -1.5625 L 7.71875 1.015625 L 7.125 1.015625 L 7.125 0.546875 L 5.328125 0.546875 L 5.328125 1 L 4.734375 1 L 4.734375 -1.59375 L 7.421875 -1.59375 C 5.804688 -1.8125 4.78125 -2.300781 4.34375 -3.0625 L 4.1875 -3.0625 C 3.875 -2.394531 2.851562 -1.90625 1.125 -1.59375 L 3.828125 -1.59375 L 3.828125 1 L 3.234375 1 L 3.234375 0.546875 L 1.453125 0.546875 L 1.453125 1.015625 L 0.875 1.015625 L 0.875 -1.546875 C 0.71875 -1.515625 0.5625 -1.488281 0.40625 -1.46875 C 0.320312 -1.632812 0.210938 -1.832031 0.078125 -2.0625 C 1.953125 -2.300781 3.078125 -2.632812 3.453125 -3.0625 L 0.40625 -3.0625 Z M 4.71875 -6.6875 L 7.703125 -6.6875 L 7.703125 -4.203125 L 7.125 -4.203125 L 7.125 -4.5 L 5.3125 -4.5 L 5.3125 -4.234375 L 4.71875 -4.234375 Z M 0.859375 -6.6875 L 3.8125 -6.6875 L 3.8125 -4.234375 L 3.21875 -4.234375 L 3.21875 -4.5 L 1.453125 -4.5 L 1.453125 -4.15625 L 0.859375 -4.15625 Z M 7.125 -6.171875 L 5.3125 -6.171875 L 5.3125 -5.03125 L 7.125 -5.03125 Z M 3.21875 -6.171875 L 1.453125 -6.171875 L 1.453125 -5.03125 L 3.21875 -5.03125 Z M 7.125 -1.078125 L 5.328125 -1.078125 L 5.328125 0.03125 L 7.125 0.03125 Z M 3.234375 -1.078125 L 1.453125 -1.078125 L 1.453125 0.03125 L 3.234375 0.03125 Z M 3.234375 -1.078125 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-1-30&quot;&gt;
&lt;path d=&quot;M 0.171875 -3.109375 L 3.921875 -3.109375 L 3.921875 -3.9375 L 0.765625 -3.9375 L 0.765625 -4.484375 L 3.921875 -4.484375 L 3.921875 -5.15625 L 4.578125 -5.15625 L 4.578125 -4.484375 L 7.890625 -4.484375 L 7.890625 -3.9375 L 4.578125 -3.9375 L 4.578125 -3.109375 L 8.46875 -3.109375 L 8.46875 -2.546875 L 0.171875 -2.546875 Z M 0.453125 -1.71875 L 5.734375 -1.71875 L 5.734375 -2.375 L 6.390625 -2.375 L 6.390625 -1.71875 L 8.1875 -1.71875 L 8.1875 -1.15625 L 6.390625 -1.15625 L 6.390625 -0.03125 C 6.390625 0.675781 6.023438 1.03125 5.296875 1.03125 C 4.867188 1.03125 4.4375 1.023438 4 1.015625 C 3.96875 0.816406 3.925781 0.582031 3.875 0.3125 C 4.320312 0.351562 4.734375 0.375 5.109375 0.375 C 5.523438 0.375 5.734375 0.207031 5.734375 -0.125 L 5.734375 -1.15625 L 0.453125 -1.15625 Z M 1.75 -7.203125 L 2.46875 -7.203125 C 2.34375 -6.929688 2.195312 -6.664062 2.03125 -6.40625 L 4.484375 -6.40625 L 4.484375 -5.890625 L 1.671875 -5.890625 C 1.335938 -5.441406 0.953125 -5.03125 0.515625 -4.65625 C 0.410156 -4.789062 0.269531 -4.941406 0.09375 -5.109375 C 0.800781 -5.679688 1.351562 -6.378906 1.75 -7.203125 Z M 5.34375 -7.203125 L 6.078125 -7.203125 C 5.953125 -6.921875 5.816406 -6.65625 5.671875 -6.40625 L 8.390625 -6.40625 L 8.390625 -5.890625 L 5.375 -5.890625 C 5.175781 -5.585938 4.972656 -5.3125 4.765625 -5.0625 C 4.523438 -5.226562 4.335938 -5.34375 4.203125 -5.40625 C 4.691406 -5.925781 5.070312 -6.523438 5.34375 -7.203125 Z M 2.015625 -0.65625 L 2.46875 -1.09375 C 2.851562 -0.769531 3.242188 -0.414062 3.640625 -0.03125 L 3.15625 0.421875 C 2.851562 0.0976562 2.472656 -0.257812 2.015625 -0.65625 Z M 2.71875 -4.640625 C 2.507812 -4.921875 2.273438 -5.207031 2.015625 -5.5 L 2.453125 -5.8125 C 2.722656 -5.550781 2.976562 -5.285156 3.21875 -5.015625 Z M 6.390625 -4.640625 C 6.285156 -4.804688 6.054688 -5.09375 5.703125 -5.5 L 6.15625 -5.8125 C 6.457031 -5.519531 6.703125 -5.253906 6.890625 -5.015625 Z M 6.390625 -4.640625 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-1-31&quot;&gt;
&lt;path d=&quot;M 3.296875 -6.453125 L 8.109375 -6.453125 L 8.109375 1 L 7.453125 1 L 7.453125 0.3125 L 3.953125 0.3125 L 3.953125 1.015625 L 3.296875 1.015625 Z M 1.203125 -2.125 C 1.773438 -2.207031 2.363281 -2.296875 2.96875 -2.390625 C 2.9375 -2.171875 2.910156 -1.957031 2.890625 -1.75 C 2.140625 -1.632812 1.316406 -1.503906 0.421875 -1.359375 L 0.296875 -1.984375 C 0.671875 -2.367188 1.101562 -2.960938 1.59375 -3.765625 C 1.132812 -3.734375 0.703125 -3.703125 0.296875 -3.671875 L 0.140625 -4.234375 C 0.648438 -4.929688 1.1875 -5.929688 1.75 -7.234375 L 2.390625 -6.984375 C 1.773438 -5.785156 1.273438 -4.890625 0.890625 -4.296875 C 1.203125 -4.296875 1.546875 -4.304688 1.921875 -4.328125 C 2.109375 -4.648438 2.304688 -5.003906 2.515625 -5.390625 L 3.140625 -5.078125 C 2.617188 -4.191406 1.972656 -3.207031 1.203125 -2.125 Z M 6.015625 -0.328125 L 7.453125 -0.328125 L 7.453125 -2.8125 L 6.015625 -2.8125 Z M 3.953125 -0.328125 L 5.375 -0.328125 L 5.375 -2.8125 L 3.953125 -2.8125 Z M 7.453125 -5.828125 L 6.015625 -5.828125 L 6.015625 -3.421875 L 7.453125 -3.421875 Z M 3.953125 -3.421875 L 5.375 -3.421875 L 5.375 -5.828125 L 3.953125 -5.828125 Z M 0.109375 -0.109375 C 1.066406 -0.296875 2.023438 -0.5 2.984375 -0.71875 C 2.972656 -0.488281 2.96875 -0.273438 2.96875 -0.078125 C 2.15625 0.0859375 1.265625 0.289062 0.296875 0.53125 Z M 0.109375 -0.109375 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-1-32&quot;&gt;
&lt;path d=&quot;M 1.21875 -3.453125 L 6.8125 -3.453125 C 6.78125 -2.492188 6.738281 -1.5625 6.6875 -0.65625 C 6.625 0.394531 6.128906 0.914062 5.203125 0.90625 C 4.742188 0.914062 4.257812 0.90625 3.75 0.875 C 3.71875 0.632812 3.679688 0.394531 3.640625 0.15625 C 4.066406 0.21875 4.550781 0.25 5.09375 0.25 C 5.65625 0.269531 5.960938 -0.0546875 6.015625 -0.734375 C 6.054688 -1.335938 6.085938 -2.035156 6.109375 -2.828125 L 3.53125 -2.828125 C 3.457031 -1.890625 3.257812 -1.132812 2.9375 -0.5625 C 2.507812 0.1875 1.796875 0.769531 0.796875 1.1875 C 0.648438 0.988281 0.488281 0.800781 0.3125 0.625 C 1.238281 0.269531 1.910156 -0.234375 2.328125 -0.890625 C 2.617188 -1.398438 2.785156 -2.046875 2.828125 -2.828125 L 1.21875 -2.828125 Z M 4.703125 -6.953125 L 5.3125 -7.21875 C 5.925781 -5.707031 7.007812 -4.582031 8.5625 -3.84375 C 8.300781 -3.570312 8.117188 -3.359375 8.015625 -3.203125 C 6.460938 -4.085938 5.359375 -5.335938 4.703125 -6.953125 Z M 0.0625 -3.734375 C 1.21875 -4.546875 2.207031 -5.660156 3.03125 -7.078125 L 3.625 -6.75 C 2.769531 -5.257812 1.75 -4.0625 0.5625 -3.15625 C 0.4375 -3.332031 0.269531 -3.523438 0.0625 -3.734375 Z M 0.0625 -3.734375 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-1-33&quot;&gt;
&lt;path d=&quot;M 1.625 0.25 L 0.96875 0.25 L 0.96875 -4.09375 L 3.96875 -4.09375 L 3.96875 -5.265625 L 0.25 -5.265625 L 0.25 -5.90625 L 4.1875 -5.90625 C 4.007812 -6.25 3.804688 -6.601562 3.578125 -6.96875 L 4.21875 -7.265625 C 4.457031 -6.910156 4.679688 -6.546875 4.890625 -6.171875 L 4.328125 -5.90625 L 8.40625 -5.90625 L 8.40625 -5.265625 L 4.65625 -5.265625 L 4.65625 -4.09375 L 7.703125 -4.09375 L 7.703125 -0.953125 C 7.703125 -0.242188 7.367188 0.109375 6.703125 0.109375 C 6.390625 0.109375 5.988281 0.101562 5.5 0.09375 C 5.46875 -0.09375 5.425781 -0.316406 5.375 -0.578125 C 5.84375 -0.546875 6.21875 -0.53125 6.5 -0.53125 C 6.863281 -0.53125 7.046875 -0.71875 7.046875 -1.09375 L 7.046875 -3.46875 L 4.65625 -3.46875 L 4.65625 1.140625 L 3.96875 1.140625 L 3.96875 -3.46875 L 1.625 -3.46875 Z M 1.625 0.25 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-1-34&quot;&gt;
&lt;path d=&quot;M 6.46875 -6.046875 L 3.1875 -6.046875 L 3.1875 -6.65625 L 7.671875 -6.65625 L 7.671875 -6.046875 L 4.34375 -3.953125 L 8.171875 -3.953125 C 8.097656 -2.390625 8.03125 -1.1875 7.96875 -0.34375 C 7.894531 0.519531 7.5 0.953125 6.78125 0.953125 C 6.539062 0.953125 6.164062 0.941406 5.65625 0.921875 C 5.613281 0.640625 5.566406 0.394531 5.515625 0.1875 C 5.898438 0.25 6.289062 0.28125 6.6875 0.28125 C 7.082031 0.28125 7.300781 0.0390625 7.34375 -0.4375 C 7.394531 -1.132812 7.453125 -2.101562 7.515625 -3.34375 L 6.609375 -3.34375 C 6.359375 -1.445312 5.488281 0.0507812 4 1.15625 C 3.832031 0.957031 3.671875 0.785156 3.515625 0.640625 C 4.910156 -0.328125 5.734375 -1.65625 5.984375 -3.34375 L 4.90625 -3.34375 C 4.582031 -1.9375 3.785156 -0.773438 2.515625 0.140625 C 2.378906 -0.0234375 2.234375 -0.1875 2.078125 -0.34375 C 3.234375 -1.144531 3.96875 -2.144531 4.28125 -3.34375 L 3.28125 -3.34375 L 3.28125 -3.984375 Z M 0.125 -0.953125 C 0.53125 -1.117188 0.941406 -1.289062 1.359375 -1.46875 L 1.359375 -4.375 L 0.234375 -4.375 L 0.234375 -4.984375 L 1.359375 -4.984375 L 1.359375 -7.09375 L 1.984375 -7.09375 L 1.984375 -4.984375 L 3 -4.984375 L 3 -4.375 L 1.984375 -4.375 L 1.984375 -1.75 C 2.296875 -1.882812 2.613281 -2.03125 2.9375 -2.1875 C 2.945312 -1.945312 2.96875 -1.734375 3 -1.546875 C 2.1875 -1.179688 1.316406 -0.765625 0.390625 -0.296875 Z M 0.125 -0.953125 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-2-0&quot;&gt;
&lt;path d=&quot;M 1.078125 0 L 1.078125 -5.390625 L 5.390625 -5.390625 L 5.390625 0 Z M 1.21875 -0.140625 L 5.25 -0.140625 L 5.25 -5.25 L 1.21875 -5.25 Z M 1.21875 -0.140625 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-2-1&quot;&gt;
&lt;path d=&quot;M 0.625 0 L 0.625 -6.171875 L 2.625 -6.171875 C 3.382812 -6.171875 3.878906 -6.140625 4.109375 -6.078125 C 4.460938 -5.984375 4.757812 -5.78125 5 -5.46875 C 5.238281 -5.164062 5.359375 -4.769531 5.359375 -4.28125 C 5.359375 -3.894531 5.285156 -3.570312 5.140625 -3.3125 C 5.003906 -3.0625 4.832031 -2.859375 4.625 -2.703125 C 4.414062 -2.554688 4.203125 -2.460938 3.984375 -2.421875 C 3.679688 -2.359375 3.25 -2.328125 2.6875 -2.328125 L 1.875 -2.328125 L 1.875 0 Z M 1.875 -5.125 L 1.875 -3.375 L 2.5625 -3.375 C 3.050781 -3.375 3.378906 -3.40625 3.546875 -3.46875 C 3.710938 -3.539062 3.84375 -3.644531 3.9375 -3.78125 C 4.03125 -3.914062 4.078125 -4.070312 4.078125 -4.25 C 4.078125 -4.476562 4.007812 -4.664062 3.875 -4.8125 C 3.738281 -4.957031 3.570312 -5.050781 3.375 -5.09375 C 3.226562 -5.113281 2.925781 -5.125 2.46875 -5.125 Z M 1.875 -5.125 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-2-2&quot;&gt;
&lt;path d=&quot;M 0.625 0 L 0.625 -6.171875 L 3.25 -6.171875 C 3.914062 -6.171875 4.394531 -6.113281 4.6875 -6 C 4.988281 -5.894531 5.226562 -5.695312 5.40625 -5.40625 C 5.59375 -5.125 5.6875 -4.800781 5.6875 -4.4375 C 5.6875 -3.976562 5.546875 -3.597656 5.265625 -3.296875 C 4.992188 -2.992188 4.585938 -2.800781 4.046875 -2.71875 C 4.316406 -2.5625 4.539062 -2.390625 4.71875 -2.203125 C 4.894531 -2.015625 5.128906 -1.679688 5.421875 -1.203125 L 6.1875 0 L 4.6875 0 L 3.796875 -1.34375 C 3.472656 -1.820312 3.25 -2.125 3.125 -2.25 C 3.007812 -2.375 2.882812 -2.457031 2.75 -2.5 C 2.625 -2.550781 2.414062 -2.578125 2.125 -2.578125 L 1.875 -2.578125 L 1.875 0 Z M 1.875 -3.5625 L 2.796875 -3.5625 C 3.398438 -3.5625 3.773438 -3.585938 3.921875 -3.640625 C 4.066406 -3.691406 4.179688 -3.773438 4.265625 -3.890625 C 4.347656 -4.015625 4.390625 -4.171875 4.390625 -4.359375 C 4.390625 -4.566406 4.332031 -4.734375 4.21875 -4.859375 C 4.113281 -4.992188 3.960938 -5.078125 3.765625 -5.109375 C 3.660156 -5.117188 3.351562 -5.125 2.84375 -5.125 L 1.875 -5.125 Z M 1.875 -3.5625 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-2-3&quot;&gt;
&lt;path d=&quot;M 0.375 -3.046875 C 0.375 -3.679688 0.46875 -4.207031 0.65625 -4.625 C 0.800781 -4.945312 0.992188 -5.234375 1.234375 -5.484375 C 1.472656 -5.734375 1.738281 -5.914062 2.03125 -6.03125 C 2.414062 -6.195312 2.859375 -6.28125 3.359375 -6.28125 C 4.265625 -6.28125 4.988281 -6 5.53125 -5.4375 C 6.082031 -4.875 6.359375 -4.085938 6.359375 -3.078125 C 6.359375 -2.078125 6.085938 -1.296875 5.546875 -0.734375 C 5.003906 -0.171875 4.28125 0.109375 3.375 0.109375 C 2.457031 0.109375 1.726562 -0.171875 1.1875 -0.734375 C 0.644531 -1.296875 0.375 -2.066406 0.375 -3.046875 Z M 1.65625 -3.09375 C 1.65625 -2.394531 1.816406 -1.863281 2.140625 -1.5 C 2.460938 -1.132812 2.875 -0.953125 3.375 -0.953125 C 3.875 -0.953125 4.28125 -1.128906 4.59375 -1.484375 C 4.914062 -1.847656 5.078125 -2.390625 5.078125 -3.109375 C 5.078125 -3.816406 4.921875 -4.34375 4.609375 -4.6875 C 4.296875 -5.039062 3.882812 -5.21875 3.375 -5.21875 C 2.863281 -5.21875 2.445312 -5.039062 2.125 -4.6875 C 1.8125 -4.332031 1.65625 -3.800781 1.65625 -3.09375 Z M 1.65625 -3.09375 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-2-4&quot;&gt;
&lt;path d=&quot;M 0.640625 0 L 0.640625 -6.171875 L 4.875 -6.171875 L 4.875 -5.125 L 1.875 -5.125 L 1.875 -3.671875 L 4.453125 -3.671875 L 4.453125 -2.625 L 1.875 -2.625 L 1.875 0 Z M 0.640625 0 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-2-5&quot;&gt;
&lt;path d=&quot;M 0.59375 0 L 0.59375 -6.171875 L 1.84375 -6.171875 L 1.84375 0 Z M 0.59375 0 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-2-6&quot;&gt;
&lt;path d=&quot;M 0.625 -6.171875 L 3.09375 -6.171875 C 3.582031 -6.171875 3.945312 -6.148438 4.1875 -6.109375 C 4.425781 -6.066406 4.640625 -5.984375 4.828125 -5.859375 C 5.023438 -5.734375 5.1875 -5.5625 5.3125 -5.34375 C 5.4375 -5.125 5.5 -4.882812 5.5 -4.625 C 5.5 -4.332031 5.421875 -4.066406 5.265625 -3.828125 C 5.109375 -3.585938 4.894531 -3.40625 4.625 -3.28125 C 5.007812 -3.164062 5.300781 -2.976562 5.5 -2.71875 C 5.695312 -2.457031 5.796875 -2.148438 5.796875 -1.796875 C 5.796875 -1.515625 5.726562 -1.238281 5.59375 -0.96875 C 5.46875 -0.707031 5.289062 -0.492188 5.0625 -0.328125 C 4.84375 -0.171875 4.566406 -0.078125 4.234375 -0.046875 C 4.023438 -0.0234375 3.523438 -0.0078125 2.734375 0 L 0.625 0 Z M 1.875 -5.140625 L 1.875 -3.71875 L 2.703125 -3.71875 C 3.179688 -3.71875 3.476562 -3.722656 3.59375 -3.734375 C 3.8125 -3.765625 3.976562 -3.835938 4.09375 -3.953125 C 4.21875 -4.078125 4.28125 -4.238281 4.28125 -4.4375 C 4.28125 -4.632812 4.226562 -4.789062 4.125 -4.90625 C 4.019531 -5.03125 3.863281 -5.101562 3.65625 -5.125 C 3.53125 -5.132812 3.175781 -5.140625 2.59375 -5.140625 Z M 1.875 -2.6875 L 1.875 -1.046875 L 3.03125 -1.046875 C 3.476562 -1.046875 3.765625 -1.054688 3.890625 -1.078125 C 4.078125 -1.109375 4.226562 -1.1875 4.34375 -1.3125 C 4.457031 -1.445312 4.515625 -1.625 4.515625 -1.84375 C 4.515625 -2.03125 4.46875 -2.1875 4.375 -2.3125 C 4.289062 -2.445312 4.160156 -2.539062 3.984375 -2.59375 C 3.816406 -2.65625 3.453125 -2.6875 2.890625 -2.6875 Z M 1.875 -2.6875 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-2-7&quot;&gt;
&lt;path d=&quot;M 0.625 -6.171875 L 1.859375 -6.171875 L 1.859375 -2.828125 C 1.859375 -2.296875 1.875 -1.953125 1.90625 -1.796875 C 1.957031 -1.546875 2.082031 -1.34375 2.28125 -1.1875 C 2.488281 -1.03125 2.765625 -0.953125 3.109375 -0.953125 C 3.460938 -0.953125 3.726562 -1.023438 3.90625 -1.171875 C 4.09375 -1.316406 4.203125 -1.492188 4.234375 -1.703125 C 4.273438 -1.921875 4.296875 -2.273438 4.296875 -2.765625 L 4.296875 -6.171875 L 5.546875 -6.171875 L 5.546875 -2.9375 C 5.546875 -2.1875 5.507812 -1.660156 5.4375 -1.359375 C 5.375 -1.054688 5.25 -0.796875 5.0625 -0.578125 C 4.882812 -0.367188 4.644531 -0.203125 4.34375 -0.078125 C 4.039062 0.046875 3.644531 0.109375 3.15625 0.109375 C 2.5625 0.109375 2.113281 0.0390625 1.8125 -0.09375 C 1.507812 -0.226562 1.269531 -0.40625 1.09375 -0.625 C 0.914062 -0.84375 0.796875 -1.070312 0.734375 -1.3125 C 0.660156 -1.664062 0.625 -2.1875 0.625 -2.875 Z M 0.625 -6.171875 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-2-8&quot;&gt;
&lt;path d=&quot;M 0.3125 -2.015625 L 1.53125 -2.125 C 1.601562 -1.71875 1.75 -1.414062 1.96875 -1.21875 C 2.1875 -1.03125 2.488281 -0.9375 2.875 -0.9375 C 3.269531 -0.9375 3.566406 -1.019531 3.765625 -1.1875 C 3.972656 -1.363281 4.078125 -1.566406 4.078125 -1.796875 C 4.078125 -1.941406 4.035156 -2.066406 3.953125 -2.171875 C 3.867188 -2.273438 3.722656 -2.363281 3.515625 -2.4375 C 3.367188 -2.488281 3.035156 -2.578125 2.515625 -2.703125 C 1.835938 -2.867188 1.367188 -3.070312 1.109375 -3.3125 C 0.722656 -3.65625 0.53125 -4.070312 0.53125 -4.5625 C 0.53125 -4.875 0.617188 -5.164062 0.796875 -5.4375 C 0.972656 -5.707031 1.226562 -5.914062 1.5625 -6.0625 C 1.90625 -6.207031 2.3125 -6.28125 2.78125 -6.28125 C 3.5625 -6.28125 4.144531 -6.109375 4.53125 -5.765625 C 4.925781 -5.429688 5.132812 -4.976562 5.15625 -4.40625 L 3.90625 -4.359375 C 3.851562 -4.671875 3.738281 -4.894531 3.5625 -5.03125 C 3.382812 -5.175781 3.125 -5.25 2.78125 -5.25 C 2.414062 -5.25 2.128906 -5.175781 1.921875 -5.03125 C 1.796875 -4.925781 1.734375 -4.796875 1.734375 -4.640625 C 1.734375 -4.492188 1.789062 -4.367188 1.90625 -4.265625 C 2.0625 -4.128906 2.441406 -3.988281 3.046875 -3.84375 C 3.660156 -3.707031 4.113281 -3.5625 4.40625 -3.40625 C 4.695312 -3.25 4.921875 -3.039062 5.078125 -2.78125 C 5.242188 -2.519531 5.328125 -2.191406 5.328125 -1.796875 C 5.328125 -1.441406 5.226562 -1.109375 5.03125 -0.796875 C 4.832031 -0.492188 4.550781 -0.265625 4.1875 -0.109375 C 3.832031 0.0351562 3.390625 0.109375 2.859375 0.109375 C 2.078125 0.109375 1.476562 -0.0664062 1.0625 -0.421875 C 0.644531 -0.785156 0.394531 -1.316406 0.3125 -2.015625 Z M 0.3125 -2.015625 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-2-9&quot;&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-2-10&quot;&gt;
&lt;path d=&quot;M 6.1875 0 L 4.84375 0 L 4.296875 -1.40625 L 1.828125 -1.40625 L 1.328125 0 L 0 0 L 2.40625 -6.171875 L 3.71875 -6.171875 Z M 3.90625 -2.4375 L 3.046875 -4.734375 L 2.21875 -2.4375 Z M 3.90625 -2.4375 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-2-11&quot;&gt;
&lt;path d=&quot;M 0.625 -6.171875 L 2.90625 -6.171875 C 3.414062 -6.171875 3.804688 -6.132812 4.078125 -6.0625 C 4.441406 -5.945312 4.75 -5.753906 5 -5.484375 C 5.257812 -5.210938 5.457031 -4.878906 5.59375 -4.484375 C 5.726562 -4.085938 5.796875 -3.601562 5.796875 -3.03125 C 5.796875 -2.519531 5.734375 -2.082031 5.609375 -1.71875 C 5.453125 -1.269531 5.234375 -0.90625 4.953125 -0.625 C 4.734375 -0.414062 4.441406 -0.25 4.078125 -0.125 C 3.796875 -0.0390625 3.425781 0 2.96875 0 L 0.625 0 Z M 1.875 -5.125 L 1.875 -1.046875 L 2.796875 -1.046875 C 3.148438 -1.046875 3.398438 -1.0625 3.546875 -1.09375 C 3.753906 -1.144531 3.921875 -1.226562 4.046875 -1.34375 C 4.179688 -1.46875 4.289062 -1.664062 4.375 -1.9375 C 4.46875 -2.21875 4.515625 -2.597656 4.515625 -3.078125 C 4.515625 -3.554688 4.46875 -3.921875 4.375 -4.171875 C 4.289062 -4.429688 4.171875 -4.632812 4.015625 -4.78125 C 3.867188 -4.925781 3.679688 -5.023438 3.453125 -5.078125 C 3.273438 -5.109375 2.9375 -5.125 2.4375 -5.125 Z M 1.875 -5.125 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-2-12&quot;&gt;
&lt;path d=&quot;M 4.71875 0 L 3.625 0 L 3.625 -0.65625 C 3.4375 -0.40625 3.21875 -0.21875 2.96875 -0.09375 C 2.726562 0.03125 2.476562 0.09375 2.21875 0.09375 C 1.707031 0.09375 1.269531 -0.109375 0.90625 -0.515625 C 0.539062 -0.929688 0.359375 -1.507812 0.359375 -2.25 C 0.359375 -3.007812 0.535156 -3.585938 0.890625 -3.984375 C 1.242188 -4.378906 1.691406 -4.578125 2.234375 -4.578125 C 2.734375 -4.578125 3.164062 -4.367188 3.53125 -3.953125 L 3.53125 -6.171875 L 4.71875 -6.171875 Z M 1.5625 -2.328125 C 1.5625 -1.859375 1.628906 -1.515625 1.765625 -1.296875 C 1.953125 -0.984375 2.21875 -0.828125 2.5625 -0.828125 C 2.832031 -0.828125 3.0625 -0.941406 3.25 -1.171875 C 3.445312 -1.410156 3.546875 -1.757812 3.546875 -2.21875 C 3.546875 -2.726562 3.453125 -3.097656 3.265625 -3.328125 C 3.078125 -3.554688 2.835938 -3.671875 2.546875 -3.671875 C 2.265625 -3.671875 2.03125 -3.554688 1.84375 -3.328125 C 1.65625 -3.109375 1.5625 -2.773438 1.5625 -2.328125 Z M 1.5625 -2.328125 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-2-13&quot;&gt;
&lt;path d=&quot;M 1.75 0 L 0.5625 0 L 0.5625 -4.46875 L 1.671875 -4.46875 L 1.671875 -3.84375 C 1.859375 -4.132812 2.023438 -4.328125 2.171875 -4.421875 C 2.328125 -4.523438 2.5 -4.578125 2.6875 -4.578125 C 2.957031 -4.578125 3.21875 -4.5 3.46875 -4.34375 L 3.09375 -3.3125 C 2.894531 -3.445312 2.710938 -3.515625 2.546875 -3.515625 C 2.378906 -3.515625 2.238281 -3.46875 2.125 -3.375 C 2.007812 -3.28125 1.914062 -3.113281 1.84375 -2.875 C 1.78125 -2.632812 1.75 -2.132812 1.75 -1.375 Z M 1.75 0 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-2-14&quot;&gt;
&lt;path d=&quot;M 0.625 -5.078125 L 0.625 -6.171875 L 1.796875 -6.171875 L 1.796875 -5.078125 Z M 0.625 0 L 0.625 -4.46875 L 1.796875 -4.46875 L 1.796875 0 Z M 0.625 0 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-2-15&quot;&gt;
&lt;path d=&quot;M 1.84375 0 L 0.046875 -4.46875 L 1.28125 -4.46875 L 2.125 -2.1875 L 2.375 -1.421875 C 2.4375 -1.617188 2.476562 -1.75 2.5 -1.8125 C 2.539062 -1.9375 2.582031 -2.0625 2.625 -2.1875 L 3.46875 -4.46875 L 4.6875 -4.46875 L 2.921875 0 Z M 1.84375 0 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-2-16&quot;&gt;
&lt;path d=&quot;M 3.203125 -1.421875 L 4.390625 -1.21875 C 4.234375 -0.789062 3.988281 -0.460938 3.65625 -0.234375 C 3.332031 -0.015625 2.925781 0.09375 2.4375 0.09375 C 1.664062 0.09375 1.09375 -0.15625 0.71875 -0.65625 C 0.425781 -1.0625 0.28125 -1.578125 0.28125 -2.203125 C 0.28125 -2.941406 0.472656 -3.519531 0.859375 -3.9375 C 1.242188 -4.363281 1.734375 -4.578125 2.328125 -4.578125 C 2.992188 -4.578125 3.519531 -4.351562 3.90625 -3.90625 C 4.289062 -3.46875 4.472656 -2.796875 4.453125 -1.890625 L 1.484375 -1.890625 C 1.492188 -1.546875 1.585938 -1.273438 1.765625 -1.078125 C 1.953125 -0.878906 2.179688 -0.78125 2.453125 -0.78125 C 2.640625 -0.78125 2.796875 -0.832031 2.921875 -0.9375 C 3.046875 -1.039062 3.140625 -1.203125 3.203125 -1.421875 Z M 3.28125 -2.625 C 3.269531 -2.96875 3.179688 -3.226562 3.015625 -3.40625 C 2.847656 -3.582031 2.640625 -3.671875 2.390625 -3.671875 C 2.140625 -3.671875 1.925781 -3.578125 1.75 -3.390625 C 1.582031 -3.203125 1.5 -2.945312 1.5 -2.625 Z M 3.28125 -2.625 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-2-17&quot;&gt;
&lt;path d=&quot;M 1.5 -3.109375 L 0.421875 -3.296875 C 0.546875 -3.734375 0.753906 -4.054688 1.046875 -4.265625 C 1.347656 -4.472656 1.785156 -4.578125 2.359375 -4.578125 C 2.890625 -4.578125 3.285156 -4.515625 3.546875 -4.390625 C 3.804688 -4.265625 3.988281 -4.101562 4.09375 -3.90625 C 4.195312 -3.71875 4.25 -3.363281 4.25 -2.84375 L 4.234375 -1.46875 C 4.234375 -1.070312 4.25 -0.78125 4.28125 -0.59375 C 4.320312 -0.40625 4.394531 -0.207031 4.5 0 L 3.328125 0 C 3.304688 -0.0820312 3.269531 -0.195312 3.21875 -0.34375 C 3.195312 -0.414062 3.179688 -0.460938 3.171875 -0.484375 C 2.972656 -0.285156 2.757812 -0.140625 2.53125 -0.046875 C 2.300781 0.046875 2.054688 0.09375 1.796875 0.09375 C 1.335938 0.09375 0.972656 -0.03125 0.703125 -0.28125 C 0.441406 -0.53125 0.3125 -0.84375 0.3125 -1.21875 C 0.3125 -1.46875 0.367188 -1.691406 0.484375 -1.890625 C 0.609375 -2.085938 0.78125 -2.238281 1 -2.34375 C 1.21875 -2.457031 1.53125 -2.550781 1.9375 -2.625 C 2.488281 -2.726562 2.875 -2.828125 3.09375 -2.921875 L 3.09375 -3.03125 C 3.09375 -3.257812 3.035156 -3.421875 2.921875 -3.515625 C 2.804688 -3.617188 2.59375 -3.671875 2.28125 -3.671875 C 2.070312 -3.671875 1.90625 -3.628906 1.78125 -3.546875 C 1.664062 -3.460938 1.570312 -3.316406 1.5 -3.109375 Z M 3.09375 -2.140625 C 2.9375 -2.097656 2.691406 -2.039062 2.359375 -1.96875 C 2.035156 -1.894531 1.820312 -1.828125 1.71875 -1.765625 C 1.5625 -1.648438 1.484375 -1.507812 1.484375 -1.34375 C 1.484375 -1.175781 1.546875 -1.03125 1.671875 -0.90625 C 1.796875 -0.789062 1.953125 -0.734375 2.140625 -0.734375 C 2.359375 -0.734375 2.566406 -0.800781 2.765625 -0.9375 C 2.898438 -1.050781 2.992188 -1.179688 3.046875 -1.328125 C 3.078125 -1.429688 3.09375 -1.625 3.09375 -1.90625 Z M 3.09375 -2.140625 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-2-18&quot;&gt;
&lt;path d=&quot;M 0.09375 -4.46875 L 0.765625 -4.46875 L 0.765625 -4.8125 C 0.765625 -5.1875 0.800781 -5.46875 0.875 -5.65625 C 0.957031 -5.84375 1.101562 -5.992188 1.3125 -6.109375 C 1.53125 -6.222656 1.804688 -6.28125 2.140625 -6.28125 C 2.472656 -6.28125 2.800781 -6.226562 3.125 -6.125 L 2.96875 -5.296875 C 2.78125 -5.347656 2.597656 -5.375 2.421875 -5.375 C 2.253906 -5.375 2.128906 -5.332031 2.046875 -5.25 C 1.972656 -5.164062 1.9375 -5.007812 1.9375 -4.78125 L 1.9375 -4.46875 L 2.828125 -4.46875 L 2.828125 -3.546875 L 1.9375 -3.546875 L 1.9375 0 L 0.765625 0 L 0.765625 -3.546875 L 0.09375 -3.546875 Z M 0.09375 -4.46875 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-2-19&quot;&gt;
&lt;path d=&quot;M 2.671875 -4.46875 L 2.671875 -3.53125 L 1.859375 -3.53125 L 1.859375 -1.734375 C 1.859375 -1.359375 1.863281 -1.140625 1.875 -1.078125 C 1.894531 -1.023438 1.929688 -0.976562 1.984375 -0.9375 C 2.046875 -0.894531 2.113281 -0.875 2.1875 -0.875 C 2.300781 -0.875 2.460938 -0.914062 2.671875 -1 L 2.765625 -0.078125 C 2.492188 0.0351562 2.179688 0.09375 1.828125 0.09375 C 1.617188 0.09375 1.425781 0.0625 1.25 0 C 1.082031 -0.0703125 0.957031 -0.164062 0.875 -0.28125 C 0.800781 -0.394531 0.75 -0.550781 0.71875 -0.75 C 0.6875 -0.882812 0.671875 -1.160156 0.671875 -1.578125 L 0.671875 -3.53125 L 0.125 -3.53125 L 0.125 -4.46875 L 0.671875 -4.46875 L 0.671875 -5.359375 L 1.859375 -6.046875 L 1.859375 -4.46875 Z M 2.671875 -4.46875 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-2-20&quot;&gt;
&lt;path d=&quot;M 0.0625 -4.46875 L 1.3125 -4.46875 L 2.390625 -1.296875 L 3.4375 -4.46875 L 4.65625 -4.46875 L 3.078125 -0.171875 L 2.796875 0.609375 C 2.691406 0.867188 2.59375 1.066406 2.5 1.203125 C 2.40625 1.347656 2.296875 1.460938 2.171875 1.546875 C 2.046875 1.628906 1.894531 1.691406 1.71875 1.734375 C 1.539062 1.785156 1.34375 1.8125 1.125 1.8125 C 0.894531 1.8125 0.671875 1.789062 0.453125 1.75 L 0.34375 0.8125 C 0.53125 0.851562 0.695312 0.875 0.84375 0.875 C 1.125 0.875 1.328125 0.789062 1.453125 0.625 C 1.585938 0.46875 1.691406 0.265625 1.765625 0.015625 Z M 0.0625 -4.46875 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-3-0&quot;&gt;
&lt;path d=&quot;M 0.75 0 L 0.75 -6.359375 L 5.25 -6.359375 L 5.25 0 Z M 1.421875 -0.671875 L 4.59375 -0.671875 L 4.59375 -5.6875 L 1.421875 -5.6875 Z M 1.421875 -0.671875 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-3-1&quot;&gt;
&lt;path d=&quot;M 1.328125 -7.203125 C 1.742188 -6.617188 2.097656 -6.09375 2.390625 -5.625 C 2.285156 -5.5625 1.925781 -5.351562 1.3125 -5 C 1 -5.570312 0.6875 -6.117188 0.375 -6.640625 Z M 5.953125 -7.15625 L 7.171875 -7.15625 L 7.171875 -5.765625 L 8.390625 -5.765625 L 8.390625 -4.75 L 7.171875 -4.75 L 7.171875 -1.9375 C 7.171875 -1.457031 7.054688 -1.09375 6.828125 -0.84375 C 6.609375 -0.601562 6.300781 -0.472656 5.90625 -0.453125 C 5.507812 -0.441406 4.960938 -0.4375 4.265625 -0.4375 C 4.191406 -0.789062 4.085938 -1.191406 3.953125 -1.640625 C 4.617188 -1.597656 5.078125 -1.578125 5.328125 -1.578125 C 5.742188 -1.578125 5.953125 -1.804688 5.953125 -2.265625 L 5.953125 -4.75 L 2.59375 -4.75 L 2.59375 -5.765625 L 5.953125 -5.765625 Z M 3.6875 -4.625 C 4.0625 -4.195312 4.546875 -3.601562 5.140625 -2.84375 C 4.828125 -2.613281 4.492188 -2.359375 4.140625 -2.078125 C 3.710938 -2.660156 3.25 -3.28125 2.75 -3.9375 Z M 8.5 -0.1875 C 8.34375 0.28125 8.21875 0.660156 8.125 0.953125 L 3.328125 0.875 C 2.929688 0.863281 2.585938 0.796875 2.296875 0.671875 C 2.015625 0.546875 1.78125 0.359375 1.59375 0.109375 C 1.125 0.566406 0.785156 0.914062 0.578125 1.15625 L 0.109375 -0.171875 L 0.9375 -0.875 L 0.9375 -3.203125 L 0.171875 -3.203125 L 0.171875 -4.3125 L 2.109375 -4.3125 L 2.109375 -0.890625 C 2.515625 -0.398438 3.066406 -0.15625 3.765625 -0.15625 L 5.0625 -0.140625 C 5.9375 -0.140625 7.082031 -0.15625 8.5 -0.1875 Z M 8.5 -0.1875 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-3-2&quot;&gt;
&lt;path d=&quot;M 0.171875 -4.703125 L 1.28125 -4.703125 L 1.28125 -5.625 C 0.945312 -5.59375 0.613281 -5.5625 0.28125 -5.53125 C 0.25 -5.957031 0.203125 -6.316406 0.140625 -6.609375 C 1.023438 -6.660156 2.023438 -6.78125 3.140625 -6.96875 L 3.390625 -5.921875 C 3.046875 -5.859375 2.703125 -5.800781 2.359375 -5.75 L 2.359375 -4.703125 L 3.328125 -4.703125 L 3.328125 -3.6875 L 2.359375 -3.6875 L 2.359375 -2.765625 L 2.609375 -3 C 2.890625 -2.769531 3.253906 -2.441406 3.703125 -2.015625 L 2.953125 -1.28125 C 2.753906 -1.53125 2.554688 -1.757812 2.359375 -1.96875 L 2.359375 1.171875 L 1.28125 1.171875 L 1.28125 -2.078125 C 1.082031 -1.453125 0.828125 -0.851562 0.515625 -0.28125 C 0.410156 -0.757812 0.28125 -1.226562 0.125 -1.6875 C 0.488281 -2.195312 0.820312 -2.863281 1.125 -3.6875 L 0.171875 -3.6875 Z M 3.625 -6.828125 L 8.015625 -6.828125 L 8.015625 -4 L 3.625 -4 Z M 6.890625 -5.84375 L 4.734375 -5.84375 L 4.734375 -4.96875 L 6.890625 -4.96875 Z M 3.015625 -0.078125 L 5.234375 -0.078125 L 5.234375 -0.796875 L 3.59375 -0.796875 L 3.59375 -1.734375 L 5.234375 -1.734375 L 5.234375 -2.4375 L 3.4375 -2.4375 L 3.4375 -3.421875 L 8.28125 -3.421875 L 8.28125 -2.4375 L 6.390625 -2.4375 L 6.390625 -1.734375 L 8.0625 -1.734375 L 8.0625 -0.796875 L 6.390625 -0.796875 L 6.390625 -0.078125 L 8.484375 -0.078125 L 8.484375 0.90625 L 3.015625 0.90625 Z M 3.015625 -0.078125 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-3-3&quot;&gt;
&lt;path d=&quot;M 3.484375 -7.203125 L 4.875 -7 L 4.546875 -6.15625 L 7.75 -6.15625 L 7.75 1.109375 L 6.53125 1.109375 L 6.53125 0.609375 L 2.109375 0.609375 L 2.109375 1.125 L 0.90625 1.125 L 0.90625 -6.15625 L 3.234375 -6.15625 C 3.347656 -6.5625 3.429688 -6.910156 3.484375 -7.203125 Z M 6.53125 -5.0625 L 2.109375 -5.0625 L 2.109375 -4.234375 L 6.53125 -4.234375 Z M 2.109375 -2.375 L 6.53125 -2.375 L 6.53125 -3.1875 L 2.109375 -3.1875 Z M 2.109375 -0.5 L 6.53125 -0.5 L 6.53125 -1.3125 L 2.109375 -1.3125 Z M 2.109375 -0.5 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-3-4&quot;&gt;
&lt;path d=&quot;M 3.328125 -2.9375 L 4.21875 -0.8125 C 4.601562 -1.507812 4.789062 -2.785156 4.78125 -4.640625 L 3.9375 -4.640625 L 3.9375 -5.75 L 4.8125 -5.75 L 4.828125 -7.1875 L 5.953125 -7.1875 L 5.9375 -5.75 L 8.140625 -5.75 L 8.046875 -0.984375 C 8.023438 -0.347656 7.992188 0.046875 7.953125 0.203125 C 7.921875 0.367188 7.84375 0.515625 7.71875 0.640625 C 7.601562 0.765625 7.445312 0.851562 7.25 0.90625 C 7.0625 0.96875 6.5625 1 5.75 1 C 5.664062 0.570312 5.566406 0.15625 5.453125 -0.25 C 5.816406 -0.226562 6.125 -0.21875 6.375 -0.21875 C 6.53125 -0.21875 6.648438 -0.25 6.734375 -0.3125 C 6.828125 -0.382812 6.878906 -0.476562 6.890625 -0.59375 C 6.910156 -0.71875 6.929688 -1.148438 6.953125 -1.890625 C 6.972656 -2.628906 6.988281 -3.546875 7 -4.640625 L 5.90625 -4.640625 C 5.882812 -3.390625 5.832031 -2.492188 5.75 -1.953125 C 5.675781 -1.410156 5.519531 -0.863281 5.28125 -0.3125 C 5.050781 0.238281 4.75 0.734375 4.375 1.171875 C 4.050781 0.910156 3.707031 0.671875 3.34375 0.453125 C 3.507812 0.285156 3.660156 0.113281 3.796875 -0.0625 L 1.453125 0.125 C 1.097656 0.164062 0.832031 0.226562 0.65625 0.3125 L 0.125 -0.71875 C 0.414062 -0.945312 0.773438 -1.828125 1.203125 -3.359375 L 0.15625 -3.359375 L 0.15625 -4.4375 L 4.046875 -4.4375 L 4.046875 -3.359375 L 2.4375 -3.359375 C 2.175781 -2.546875 1.894531 -1.757812 1.59375 -1 C 2.101562 -1.019531 2.566406 -1.039062 2.984375 -1.0625 C 2.785156 -1.625 2.585938 -2.144531 2.390625 -2.625 Z M 3.75 -5.484375 L 0.515625 -5.484375 L 0.515625 -6.5625 L 3.75 -6.5625 Z M 3.75 -5.484375 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-3-5&quot;&gt;
&lt;path d=&quot;M 2.1875 -7.140625 L 3.359375 -6.75 C 3.097656 -6.101562 2.8125 -5.488281 2.5 -4.90625 L 2.5 1.078125 L 1.28125 1.078125 L 1.28125 -2.953125 C 1.007812 -2.578125 0.726562 -2.222656 0.4375 -1.890625 C 0.34375 -2.421875 0.238281 -2.910156 0.125 -3.359375 C 1 -4.472656 1.6875 -5.734375 2.1875 -7.140625 Z M 7.359375 -6 L 8.40625 -5.1875 C 7.570312 -4.25 6.613281 -3.375 5.53125 -2.5625 L 5.53125 -0.84375 C 5.53125 -0.414062 5.710938 -0.203125 6.078125 -0.203125 L 6.4375 -0.203125 C 6.71875 -0.203125 6.898438 -0.296875 6.984375 -0.484375 C 7.078125 -0.671875 7.148438 -1.226562 7.203125 -2.15625 C 7.671875 -2.007812 8.097656 -1.882812 8.484375 -1.78125 C 8.390625 -0.96875 8.300781 -0.390625 8.21875 -0.046875 C 8.144531 0.296875 7.96875 0.554688 7.6875 0.734375 C 7.40625 0.910156 7.015625 1 6.515625 1 L 5.78125 1 C 4.769531 1 4.265625 0.492188 4.265625 -0.515625 L 4.265625 -1.65625 C 3.941406 -1.445312 3.609375 -1.238281 3.265625 -1.03125 C 3.085938 -1.332031 2.84375 -1.703125 2.53125 -2.140625 C 3.132812 -2.460938 3.710938 -2.816406 4.265625 -3.203125 L 4.265625 -7.109375 L 5.53125 -7.109375 L 5.53125 -4.171875 C 6.1875 -4.734375 6.796875 -5.34375 7.359375 -6 Z M 7.359375 -6 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-3-6&quot;&gt;
&lt;path d=&quot;M 0.21875 -0.515625 L 3.609375 -0.515625 L 3.609375 -5.34375 L 0.671875 -5.34375 L 0.671875 -6.546875 L 7.984375 -6.546875 L 7.984375 -5.34375 L 4.984375 -5.34375 L 4.984375 -0.515625 L 8.421875 -0.515625 L 8.421875 0.671875 L 0.21875 0.671875 Z M 0.21875 -0.515625 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-3-7&quot;&gt;
&lt;path d=&quot;M 1.125 -6.703125 L 8.421875 -6.703125 L 8.421875 -5.5 L 2.421875 -5.5 L 2.421875 -3.25 C 2.421875 -1.363281 1.992188 0.0976562 1.140625 1.140625 C 0.753906 0.679688 0.425781 0.328125 0.15625 0.078125 C 0.800781 -0.691406 1.125 -1.84375 1.125 -3.375 Z M 1.125 -6.703125 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-3-8&quot;&gt;
&lt;path d=&quot;M 1.34375 -7.21875 C 1.769531 -6.695312 2.175781 -6.15625 2.5625 -5.59375 L 1.53125 -4.921875 C 1.175781 -5.503906 0.796875 -6.0625 0.390625 -6.59375 Z M 7.859375 -5.671875 L 3.15625 -5.671875 L 3.15625 -6.765625 L 7.859375 -6.765625 Z M 6.78125 -3.484375 C 7.320312 -2.742188 7.84375 -1.929688 8.34375 -1.046875 L 7.328125 -0.5 C 7.222656 -0.695312 7.113281 -0.894531 7 -1.09375 C 5.21875 -0.988281 3.914062 -0.882812 3.09375 -0.78125 L 2.640625 -1.71875 C 3.148438 -2.144531 3.609375 -2.757812 4.015625 -3.5625 L 2.625 -3.5625 L 2.625 -4.65625 L 8.359375 -4.65625 L 8.359375 -3.5625 L 5.390625 -3.5625 C 5.066406 -3 4.703125 -2.460938 4.296875 -1.953125 C 4.859375 -1.972656 5.578125 -2.015625 6.453125 -2.078125 C 6.253906 -2.390625 6.0625 -2.691406 5.875 -2.984375 Z M 8.5 -0.1875 L 8.125 0.921875 C 4.925781 0.941406 3.109375 0.898438 2.671875 0.796875 C 2.234375 0.691406 1.875 0.460938 1.59375 0.109375 C 1.25 0.441406 0.910156 0.785156 0.578125 1.140625 L 0.109375 -0.171875 C 0.367188 -0.410156 0.644531 -0.644531 0.9375 -0.875 L 0.9375 -3.203125 L 0.171875 -3.203125 L 0.171875 -4.3125 L 2.109375 -4.3125 L 2.109375 -0.890625 C 2.285156 -0.671875 2.484375 -0.5 2.703125 -0.375 C 2.929688 -0.257812 3.164062 -0.1875 3.40625 -0.15625 C 3.65625 -0.132812 4.175781 -0.125 4.96875 -0.125 C 5.84375 -0.125 7.019531 -0.144531 8.5 -0.1875 Z M 8.5 -0.1875 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-3-9&quot;&gt;
&lt;path d=&quot;M 2.890625 -6.1875 L 4.921875 -6.1875 L 4.703125 -6.921875 L 5.90625 -7.15625 C 6 -6.832031 6.082031 -6.507812 6.15625 -6.1875 L 8.265625 -6.1875 L 8.265625 -4.5 L 7.203125 -4.5 L 7.203125 -5.171875 L 3.953125 -5.171875 L 3.953125 -4.5 L 2.890625 -4.5 Z M 0.1875 -5.59375 L 0.953125 -5.59375 L 0.953125 -7.09375 L 1.984375 -7.09375 L 1.984375 -5.59375 L 2.546875 -5.59375 L 2.546875 -4.515625 L 1.984375 -4.515625 L 1.984375 -3.25 L 2.609375 -3.40625 C 2.566406 -3.019531 2.554688 -2.640625 2.578125 -2.265625 L 1.984375 -2.09375 L 1.984375 0.09375 C 1.984375 0.375 1.929688 0.585938 1.828125 0.734375 C 1.734375 0.890625 1.597656 0.984375 1.421875 1.015625 C 1.253906 1.046875 0.90625 1.066406 0.375 1.078125 C 0.320312 0.742188 0.242188 0.378906 0.140625 -0.015625 C 0.285156 -0.00390625 0.484375 0 0.734375 0 C 0.878906 0 0.953125 -0.113281 0.953125 -0.34375 L 0.953125 -1.828125 L 0.15625 -1.625 L 0.09375 -2.828125 C 0.375 -2.890625 0.660156 -2.953125 0.953125 -3.015625 L 0.953125 -4.515625 L 0.1875 -4.515625 Z M 5.296875 -4.0625 L 3.375 -2.640625 L 2.671875 -3.4375 C 3.234375 -3.800781 3.851562 -4.25 4.53125 -4.78125 Z M 5.78125 -4.046875 L 6.5 -4.765625 C 7.019531 -4.398438 7.644531 -3.945312 8.375 -3.40625 L 7.640625 -2.609375 C 7.410156 -2.796875 6.789062 -3.273438 5.78125 -4.046875 Z M 3.09375 -2.5625 L 7.953125 -2.5625 L 7.953125 -1.53125 L 6.0625 -1.53125 L 6.0625 -0.25 L 8.390625 -0.25 L 8.390625 0.78125 L 2.59375 0.78125 L 2.59375 -0.25 L 4.984375 -0.25 L 4.984375 -1.53125 L 3.09375 -1.53125 Z M 3.09375 -2.5625 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-3-10&quot;&gt;
&lt;path d=&quot;M 1.5 0.609375 L 0.484375 0.609375 L 0.484375 -2.6875 L 2.21875 -2.6875 L 2.21875 -3.34375 L 0.15625 -3.34375 L 0.15625 -4.296875 L 2.21875 -4.296875 L 2.21875 -5.046875 L 1.3125 -5.046875 C 1.25 -4.796875 1.175781 -4.566406 1.09375 -4.359375 C 0.851562 -4.460938 0.5625 -4.578125 0.21875 -4.703125 C 0.445312 -5.378906 0.640625 -6.101562 0.796875 -6.875 L 1.703125 -6.6875 L 1.5625 -6.015625 L 2.21875 -6.015625 L 2.21875 -7.1875 L 3.328125 -7.1875 L 3.328125 -6.015625 L 5.015625 -6.015625 L 5.015625 -5.046875 L 3.328125 -5.046875 L 3.328125 -4.296875 L 5.265625 -4.296875 L 5.265625 -3.34375 L 3.328125 -3.34375 L 3.328125 -2.6875 L 5.078125 -2.6875 L 5.078125 -0.40625 C 5.078125 -0.09375 5.007812 0.148438 4.875 0.328125 C 4.738281 0.503906 4.53125 0.597656 4.25 0.609375 C 3.96875 0.617188 3.757812 0.625 3.625 0.625 C 3.570312 0.320312 3.492188 -0.0234375 3.390625 -0.421875 C 3.535156 -0.410156 3.675781 -0.40625 3.8125 -0.40625 C 3.976562 -0.40625 4.0625 -0.492188 4.0625 -0.671875 L 4.0625 -1.71875 L 3.328125 -1.71875 L 3.328125 1.15625 L 2.21875 1.15625 L 2.21875 -1.71875 L 1.5 -1.71875 Z M 7.03125 -7.171875 L 8.109375 -7.171875 L 8.109375 -0.21875 C 8.109375 0.207031 8.007812 0.523438 7.8125 0.734375 C 7.613281 0.953125 7.335938 1.066406 6.984375 1.078125 C 6.628906 1.085938 6.222656 1.09375 5.765625 1.09375 C 5.722656 0.757812 5.648438 0.363281 5.546875 -0.09375 C 5.992188 -0.0703125 6.34375 -0.0625 6.59375 -0.0625 C 6.882812 -0.0625 7.03125 -0.234375 7.03125 -0.578125 Z M 5.515625 -6.515625 L 6.546875 -6.515625 L 6.546875 -0.875 L 5.515625 -0.875 Z M 5.515625 -6.515625 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-3-11&quot;&gt;
&lt;path d=&quot;M 3.484375 -6.921875 L 4.875 -7.203125 L 5.1875 -6.296875 L 8.171875 -6.296875 L 8.171875 -4.453125 L 6.953125 -4.453125 L 6.953125 -5.25 L 1.703125 -5.25 L 1.703125 -4.5 L 0.484375 -4.5 L 0.484375 -6.296875 L 3.71875 -6.296875 C 3.632812 -6.515625 3.554688 -6.722656 3.484375 -6.921875 Z M 0.15625 -3.84375 L 2.703125 -3.84375 C 2.898438 -4.25 3.082031 -4.664062 3.25 -5.09375 L 4.609375 -4.75 L 4.109375 -3.84375 L 8.484375 -3.84375 L 8.484375 -2.78125 L 6.953125 -2.78125 C 6.679688 -2 6.304688 -1.363281 5.828125 -0.875 L 8.25 0.046875 L 7.640625 1.171875 L 4.78125 -0.078125 C 3.820312 0.453125 2.472656 0.859375 0.734375 1.140625 C 0.503906 0.671875 0.304688 0.296875 0.140625 0.015625 C 1.472656 -0.148438 2.546875 -0.382812 3.359375 -0.6875 C 2.609375 -0.988281 1.941406 -1.25 1.359375 -1.46875 C 1.640625 -1.882812 1.90625 -2.320312 2.15625 -2.78125 L 0.15625 -2.78125 Z M 2.984375 -1.9375 L 4.59375 -1.328125 C 5.03125 -1.671875 5.363281 -2.15625 5.59375 -2.78125 L 3.5 -2.78125 C 3.320312 -2.46875 3.148438 -2.1875 2.984375 -1.9375 Z M 2.984375 -1.9375 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-3-12&quot;&gt;
&lt;path d=&quot;M 0.5 -0.25 L 3.6875 -0.25 L 3.6875 -1.265625 L 1.171875 -1.265625 L 1.171875 -2.34375 L 3.6875 -2.34375 L 3.6875 -3.1875 L 2.0625 -3.1875 L 2.0625 -3.859375 C 1.6875 -3.585938 1.289062 -3.328125 0.875 -3.078125 C 0.707031 -3.304688 0.457031 -3.632812 0.125 -4.0625 C 1.914062 -5.03125 3.132812 -6.0625 3.78125 -7.15625 L 5.25 -7.15625 L 5.03125 -6.84375 C 5.75 -5.800781 6.90625 -4.910156 8.5 -4.171875 C 8.207031 -3.796875 7.957031 -3.460938 7.75 -3.171875 C 7.332031 -3.398438 6.9375 -3.632812 6.5625 -3.875 L 6.5625 -3.1875 L 4.9375 -3.1875 L 4.9375 -2.34375 L 7.46875 -2.34375 L 7.46875 -1.265625 L 4.9375 -1.265625 L 4.9375 -0.25 L 8.125 -0.25 L 8.125 0.828125 L 0.5 0.828125 Z M 4.3125 -5.953125 C 3.851562 -5.367188 3.28125 -4.804688 2.59375 -4.265625 L 6.03125 -4.265625 C 5.351562 -4.785156 4.78125 -5.347656 4.3125 -5.953125 Z M 4.3125 -5.953125 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-3-13&quot;&gt;
&lt;path d=&quot;M 1.9375 -3.359375 C 1.9375 -1.222656 1.644531 0.285156 1.0625 1.171875 C 0.8125 0.921875 0.5 0.648438 0.125 0.359375 C 0.59375 -0.441406 0.828125 -1.734375 0.828125 -3.515625 L 0.828125 -6.15625 L 4.0625 -6.15625 C 3.957031 -6.414062 3.851562 -6.660156 3.75 -6.890625 L 5.109375 -7.21875 C 5.234375 -6.914062 5.375 -6.5625 5.53125 -6.15625 L 8.390625 -6.15625 L 8.390625 -5.109375 L 1.9375 -5.109375 Z M 4.0625 -4.453125 L 5.109375 -4.765625 C 5.410156 -3.992188 5.734375 -2.992188 6.078125 -1.765625 L 4.9375 -1.46875 C 4.613281 -2.65625 4.320312 -3.648438 4.0625 -4.453125 Z M 1.78125 -0.421875 L 5.796875 -0.421875 C 6.140625 -1.523438 6.546875 -2.9375 7.015625 -4.65625 L 8.171875 -4.34375 C 7.878906 -3.25 7.484375 -1.941406 6.984375 -0.421875 L 8.421875 -0.421875 L 8.421875 0.75 L 1.78125 0.75 Z M 1.984375 -4.015625 L 3 -4.453125 C 3.488281 -3.367188 3.945312 -2.253906 4.375 -1.109375 L 3.25 -0.6875 C 2.882812 -1.738281 2.460938 -2.847656 1.984375 -4.015625 Z M 1.984375 -4.015625 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-3-14&quot;&gt;
&lt;path d=&quot;M 7.984375 -0.1875 C 7.984375 0.175781 7.898438 0.453125 7.734375 0.640625 C 7.578125 0.835938 7.328125 0.953125 6.984375 0.984375 C 6.648438 1.023438 6.210938 1.039062 5.671875 1.03125 C 5.578125 0.601562 5.460938 0.195312 5.328125 -0.1875 C 5.910156 -0.15625 6.226562 -0.140625 6.28125 -0.140625 C 6.632812 -0.140625 6.8125 -0.3125 6.8125 -0.65625 L 6.8125 -1.421875 L 5.046875 -1.421875 L 5.046875 0.9375 L 3.859375 0.9375 L 3.859375 -1.421875 L 2.046875 -1.421875 C 1.953125 -0.179688 1.710938 0.679688 1.328125 1.171875 C 0.972656 0.910156 0.613281 0.675781 0.25 0.46875 C 0.695312 -0.144531 0.914062 -1.242188 0.90625 -2.828125 L 0.90625 -6.796875 L 7.984375 -6.796875 Z M 2.078125 -4.640625 L 3.859375 -4.640625 L 3.859375 -5.6875 L 2.078125 -5.6875 Z M 6.8125 -5.6875 L 5.046875 -5.6875 L 5.046875 -4.640625 L 6.8125 -4.640625 Z M 2.078125 -2.5 L 3.859375 -2.5 L 3.859375 -3.546875 L 2.078125 -3.546875 Z M 5.046875 -2.5 L 6.8125 -2.5 L 6.8125 -3.546875 L 5.046875 -3.546875 Z M 5.046875 -2.5 &quot;/&gt;
&lt;/g&gt;
&lt;/g&gt;
&lt;clipPath id=&quot;clip-0&quot;&gt;
&lt;path clip-rule=&quot;nonzero&quot; d=&quot;M 0 0 L 594.960938 0 L 594.960938 420.378906 L 0 420.378906 Z M 0 0 &quot;/&gt;
&lt;/clipPath&gt;
&lt;clipPath id=&quot;clip-1&quot;&gt;
&lt;path clip-rule=&quot;nonzero&quot; d=&quot;M 0 0 L 594.960938 0 L 594.960938 420 L 0 420 Z M 0 0 &quot;/&gt;
&lt;/clipPath&gt;
&lt;/defs&gt;
&lt;g clip-path=&quot;url(#clip-0)&quot;&gt;
&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;rgb(100%, 100%, 100%)&quot; fill-opacity=&quot;1&quot; d=&quot;M 0 0 L 595 0 L 595 420.378906 L 0 420.378906 Z M 0 0 &quot;/&gt;
&lt;/g&gt;
&lt;g clip-path=&quot;url(#clip-1)&quot;&gt;
&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;rgb(100%, 100%, 100%)&quot; fill-opacity=&quot;1&quot; d=&quot;M 0 0 L 595 0 L 595 419.660156 L 0 419.660156 Z M 0 0 &quot;/&gt;
&lt;/g&gt;
&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;rgb(96.078491%, 96.078491%, 96.078491%)&quot; fill-opacity=&quot;1&quot; stroke-width=&quot;1&quot; stroke-linecap=&quot;butt&quot; stroke-linejoin=&quot;miter&quot; stroke=&quot;rgb(39.99939%, 39.99939%, 39.99939%)&quot; stroke-opacity=&quot;1&quot; stroke-miterlimit=&quot;4&quot; d=&quot;M 179.999879 461.999343 L 299.997916 461.999343 L 299.997916 522.001079 L 179.999879 522.001079 Z M 179.999879 461.999343 &quot; transform=&quot;matrix(0.718599, 0, 0, 0.718599, 0.359299, 0.359299)&quot;/&gt;
&lt;g fill=&quot;rgb(19.999695%, 19.999695%, 19.999695%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-0-1&quot; x=&quot;142.349969&quot; y=&quot;351.394908&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-2&quot; x=&quot;149.533152&quot; y=&quot;351.394908&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-3&quot; x=&quot;155.284751&quot; y=&quot;351.394908&quot;/&gt;
&lt;/g&gt;
&lt;g fill=&quot;rgb(19.999695%, 19.999695%, 19.999695%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-0-4&quot; x=&quot;160.88056&quot; y=&quot;351.394908&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-5&quot; x=&quot;163.276358&quot; y=&quot;351.394908&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-4&quot; x=&quot;165.672156&quot; y=&quot;351.394908&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-1&quot; x=&quot;168.067953&quot; y=&quot;351.394908&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-2&quot; x=&quot;175.251136&quot; y=&quot;351.394908&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-3&quot; x=&quot;181.002735&quot; y=&quot;351.394908&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-6&quot; x=&quot;186.754334&quot; y=&quot;351.394908&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-7&quot; x=&quot;189.625923&quot; y=&quot;351.394908&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-8&quot; x=&quot;192.021721&quot; y=&quot;351.394908&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-4&quot; x=&quot;197.77332&quot; y=&quot;351.394908&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-5&quot; x=&quot;200.169118&quot; y=&quot;351.394908&quot;/&gt;
&lt;/g&gt;
&lt;g fill=&quot;rgb(19.999695%, 19.999695%, 19.999695%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-0-9&quot; x=&quot;134.119769&quot; y=&quot;362.173893&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-8&quot; x=&quot;140.347159&quot; y=&quot;362.173893&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-6&quot; x=&quot;146.098758&quot; y=&quot;362.173893&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-10&quot; x=&quot;148.970347&quot; y=&quot;362.173893&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-11&quot; x=&quot;153.766153&quot; y=&quot;362.173893&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-12&quot; x=&quot;158.561959&quot; y=&quot;362.173893&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-4&quot; x=&quot;163.357765&quot; y=&quot;362.173893&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-5&quot; x=&quot;165.753563&quot; y=&quot;362.173893&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-4&quot; x=&quot;168.149361&quot; y=&quot;362.173893&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-9&quot; x=&quot;170.545159&quot; y=&quot;362.173893&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-8&quot; x=&quot;176.772549&quot; y=&quot;362.173893&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-6&quot; x=&quot;182.524148&quot; y=&quot;362.173893&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-10&quot; x=&quot;185.395737&quot; y=&quot;362.173893&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-11&quot; x=&quot;190.191543&quot; y=&quot;362.173893&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-12&quot; x=&quot;194.987349&quot; y=&quot;362.173893&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-6&quot; x=&quot;199.783155&quot; y=&quot;362.173893&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-7&quot; x=&quot;202.654744&quot; y=&quot;362.173893&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-8&quot; x=&quot;205.050542&quot; y=&quot;362.173893&quot;/&gt;
&lt;/g&gt;
&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;rgb(96.078491%, 96.078491%, 96.078491%)&quot; fill-opacity=&quot;1&quot; stroke-width=&quot;1&quot; stroke-linecap=&quot;butt&quot; stroke-linejoin=&quot;miter&quot; stroke=&quot;rgb(39.99939%, 39.99939%, 39.99939%)&quot; stroke-opacity=&quot;1&quot; stroke-miterlimit=&quot;4&quot; d=&quot;M 340.000885 461.999343 L 459.998923 461.999343 L 459.998923 522.001079 L 340.000885 522.001079 Z M 340.000885 461.999343 &quot; transform=&quot;matrix(0.718599, 0, 0, 0.718599, 0.359299, 0.359299)&quot;/&gt;
&lt;g fill=&quot;rgb(19.999695%, 19.999695%, 19.999695%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-0-9&quot; x=&quot;272.820599&quot; y=&quot;356.425101&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-8&quot; x=&quot;279.047989&quot; y=&quot;356.425101&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-6&quot; x=&quot;284.799588&quot; y=&quot;356.425101&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-10&quot; x=&quot;287.671177&quot; y=&quot;356.425101&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-11&quot; x=&quot;292.466984&quot; y=&quot;356.425101&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-12&quot; x=&quot;297.26279&quot; y=&quot;356.425101&quot;/&gt;
&lt;/g&gt;
&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;rgb(96.078491%, 96.078491%, 96.078491%)&quot; fill-opacity=&quot;1&quot; stroke-width=&quot;1&quot; stroke-linecap=&quot;butt&quot; stroke-linejoin=&quot;miter&quot; stroke=&quot;rgb(39.99939%, 39.99939%, 39.99939%)&quot; stroke-opacity=&quot;1&quot; stroke-miterlimit=&quot;4&quot; d=&quot;M 500.001892 461.999343 L 619.999929 461.999343 L 619.999929 522.001079 L 500.001892 522.001079 Z M 500.001892 461.999343 &quot; transform=&quot;matrix(0.718599, 0, 0, 0.718599, 0.359299, 0.359299)&quot;/&gt;
&lt;g fill=&quot;rgb(19.999695%, 19.999695%, 19.999695%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-0-9&quot; x=&quot;387.796438&quot; y=&quot;356.425101&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-8&quot; x=&quot;394.023829&quot; y=&quot;356.425101&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-6&quot; x=&quot;399.775428&quot; y=&quot;356.425101&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-10&quot; x=&quot;402.647016&quot; y=&quot;356.425101&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-11&quot; x=&quot;407.442823&quot; y=&quot;356.425101&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-12&quot; x=&quot;412.238629&quot; y=&quot;356.425101&quot;/&gt;
&lt;/g&gt;
&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;rgb(88.238525%, 83.529663%, 90.589905%)&quot; fill-opacity=&quot;1&quot; stroke-width=&quot;1&quot; stroke-linecap=&quot;butt&quot; stroke-linejoin=&quot;miter&quot; stroke=&quot;rgb(58.81958%, 45.098877%, 65.098572%)&quot; stroke-opacity=&quot;1&quot; stroke-miterlimit=&quot;4&quot; d=&quot;M 179.999879 362.000073 L 780.000936 362.000073 L 780.000936 422.001809 L 179.999879 422.001809 Z M 179.999879 362.000073 &quot; transform=&quot;matrix(0.718599, 0, 0, 0.718599, 0.359299, 0.359299)&quot;/&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-0-3&quot; x=&quot;315.689521&quot; y=&quot;284.565202&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-9&quot; x=&quot;321.44112&quot; y=&quot;284.565202&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-13&quot; x=&quot;327.66851&quot; y=&quot;284.565202&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-14&quot; x=&quot;334.375901&quot; y=&quot;284.565202&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-7&quot; x=&quot;339.643288&quot; y=&quot;284.565202&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-2&quot; x=&quot;342.039086&quot; y=&quot;284.565202&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-15&quot; x=&quot;347.790685&quot; y=&quot;284.565202&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-8&quot; x=&quot;354.018075&quot; y=&quot;284.565202&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-4&quot; x=&quot;359.769674&quot; y=&quot;284.565202&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-16&quot; x=&quot;362.165472&quot; y=&quot;284.565202&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-3&quot; x=&quot;368.392862&quot; y=&quot;284.565202&quot;/&gt;
&lt;/g&gt;
&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;rgb(85.488892%, 90.979004%, 98.81897%)&quot; fill-opacity=&quot;1&quot; stroke-width=&quot;1&quot; stroke-linecap=&quot;butt&quot; stroke-linejoin=&quot;miter&quot; stroke=&quot;rgb(42.349243%, 55.688477%, 74.899292%)&quot; stroke-opacity=&quot;1&quot; stroke-miterlimit=&quot;4&quot; d=&quot;M 179.999879 262.000802 L 299.997916 262.000802 L 299.997916 322.002539 L 179.999879 322.002539 Z M 179.999879 262.000802 &quot; transform=&quot;matrix(0.718599, 0, 0, 0.718599, 0.359299, 0.359299)&quot;/&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-0-3&quot; x=&quot;150.737371&quot; y=&quot;207.675109&quot;/&gt;
&lt;/g&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-0-17&quot; x=&quot;155.848967&quot; y=&quot;207.675109&quot;/&gt;
&lt;/g&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-0-4&quot; x=&quot;161.124775&quot; y=&quot;207.675109&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-16&quot; x=&quot;163.520573&quot; y=&quot;207.675109&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-18&quot; x=&quot;169.747963&quot; y=&quot;207.675109&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-19&quot; x=&quot;174.543769&quot; y=&quot;207.675109&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-20&quot; x=&quot;178.855363&quot; y=&quot;207.675109&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-21&quot; x=&quot;180.77116&quot; y=&quot;207.675109&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-18&quot; x=&quot;185.082754&quot; y=&quot;207.675109&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-22&quot; x=&quot;189.87856&quot; y=&quot;207.675109&quot;/&gt;
&lt;/g&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-1-1&quot; x=&quot;142.282601&quot; y=&quot;218.454094&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-1-2&quot; x=&quot;150.905789&quot; y=&quot;218.454094&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-1-3&quot; x=&quot;159.528977&quot; y=&quot;218.454094&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-1-4&quot; x=&quot;168.152165&quot; y=&quot;218.454094&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-1-5&quot; x=&quot;176.775353&quot; y=&quot;218.454094&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-1-6&quot; x=&quot;185.39854&quot; y=&quot;218.454094&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-1-7&quot; x=&quot;194.021728&quot; y=&quot;218.454094&quot;/&gt;
&lt;/g&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-1-8&quot; x=&quot;50.30193&quot; y=&quot;356.425101&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-1-9&quot; x=&quot;58.925118&quot; y=&quot;356.425101&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-1-10&quot; x=&quot;67.548305&quot; y=&quot;356.425101&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-1-11&quot; x=&quot;76.171493&quot; y=&quot;356.425101&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-1-12&quot; x=&quot;84.794681&quot; y=&quot;356.425101&quot;/&gt;
&lt;/g&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-1-13&quot; x=&quot;50.30193&quot; y=&quot;284.565202&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-1-14&quot; x=&quot;58.925118&quot; y=&quot;284.565202&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-1-10&quot; x=&quot;67.548305&quot; y=&quot;284.565202&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-1-11&quot; x=&quot;76.171493&quot; y=&quot;284.565202&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-1-12&quot; x=&quot;84.794681&quot; y=&quot;284.565202&quot;/&gt;
&lt;/g&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-1-15&quot; x=&quot;54.613524&quot; y=&quot;212.705302&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-1-16&quot; x=&quot;63.236711&quot; y=&quot;212.705302&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-1-17&quot; x=&quot;71.859899&quot; y=&quot;212.705302&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-1-18&quot; x=&quot;80.483087&quot; y=&quot;212.705302&quot;/&gt;
&lt;/g&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-0-3&quot; x=&quot;49.819121&quot; y=&quot;135.81521&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-9&quot; x=&quot;55.57072&quot; y=&quot;135.81521&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-13&quot; x=&quot;61.79811&quot; y=&quot;135.81521&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-14&quot; x=&quot;68.505502&quot; y=&quot;135.81521&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-7&quot; x=&quot;73.772889&quot; y=&quot;135.81521&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-2&quot; x=&quot;76.168686&quot; y=&quot;135.81521&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-15&quot; x=&quot;81.920285&quot; y=&quot;135.81521&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-8&quot; x=&quot;88.147675&quot; y=&quot;135.81521&quot;/&gt;
&lt;/g&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-1-19&quot; x=&quot;54.613524&quot; y=&quot;146.594195&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-1-20&quot; x=&quot;63.236711&quot; y=&quot;146.594195&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-1-21&quot; x=&quot;71.859899&quot; y=&quot;146.594195&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-1-22&quot; x=&quot;80.483087&quot; y=&quot;146.594195&quot;/&gt;
&lt;/g&gt;
&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;rgb(85.488892%, 90.979004%, 98.81897%)&quot; fill-opacity=&quot;1&quot; stroke-width=&quot;1&quot; stroke-linecap=&quot;butt&quot; stroke-linejoin=&quot;miter&quot; stroke=&quot;rgb(42.349243%, 55.688477%, 74.899292%)&quot; stroke-opacity=&quot;1&quot; stroke-miterlimit=&quot;4&quot; d=&quot;M 340.000885 262.000802 L 459.998923 262.000802 L 459.998923 322.002539 L 340.000885 322.002539 Z M 340.000885 262.000802 &quot; transform=&quot;matrix(0.718599, 0, 0, 0.718599, 0.359299, 0.359299)&quot;/&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-1-23&quot; x=&quot;270.193222&quot; y=&quot;207.675109&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-1-24&quot; x=&quot;278.81641&quot; y=&quot;207.675109&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-1-25&quot; x=&quot;287.439598&quot; y=&quot;207.675109&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-1-26&quot; x=&quot;296.062786&quot; y=&quot;207.675109&quot;/&gt;
&lt;/g&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-1-27&quot; x=&quot;270.193222&quot; y=&quot;218.454094&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-1-28&quot; x=&quot;278.81641&quot; y=&quot;218.454094&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-1-29&quot; x=&quot;287.439598&quot; y=&quot;218.454094&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-1-30&quot; x=&quot;296.062786&quot; y=&quot;218.454094&quot;/&gt;
&lt;/g&gt;
&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;rgb(85.488892%, 90.979004%, 98.81897%)&quot; fill-opacity=&quot;1&quot; stroke-width=&quot;1&quot; stroke-linecap=&quot;butt&quot; stroke-linejoin=&quot;miter&quot; stroke=&quot;rgb(42.349243%, 55.688477%, 74.899292%)&quot; stroke-opacity=&quot;1&quot; stroke-miterlimit=&quot;4&quot; d=&quot;M 500.001892 262.000802 L 619.999929 262.000802 L 619.999929 322.002539 L 500.001892 322.002539 Z M 500.001892 262.000802 &quot; transform=&quot;matrix(0.718599, 0, 0, 0.718599, 0.359299, 0.359299)&quot;/&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-0-3&quot; x=&quot;379.891849&quot; y=&quot;212.705302&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-9&quot; x=&quot;385.643448&quot; y=&quot;212.705302&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-13&quot; x=&quot;391.870839&quot; y=&quot;212.705302&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-14&quot; x=&quot;398.57823&quot; y=&quot;212.705302&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-7&quot; x=&quot;403.845617&quot; y=&quot;212.705302&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-23&quot; x=&quot;406.241415&quot; y=&quot;212.705302&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-24&quot; x=&quot;411.037221&quot; y=&quot;212.705302&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-20&quot; x=&quot;413.90881&quot; y=&quot;212.705302&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-19&quot; x=&quot;415.824606&quot; y=&quot;212.705302&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-18&quot; x=&quot;420.1362&quot; y=&quot;212.705302&quot;/&gt;
&lt;/g&gt;
&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;rgb(85.488892%, 90.979004%, 98.81897%)&quot; fill-opacity=&quot;1&quot; stroke-width=&quot;1&quot; stroke-linecap=&quot;butt&quot; stroke-linejoin=&quot;miter&quot; stroke=&quot;rgb(42.349243%, 55.688477%, 74.899292%)&quot; stroke-opacity=&quot;1&quot; stroke-miterlimit=&quot;4&quot; d=&quot;M 659.997463 262.000802 L 780.000936 262.000802 L 780.000936 322.002539 L 659.997463 322.002539 Z M 659.997463 262.000802 &quot; transform=&quot;matrix(0.718599, 0, 0, 0.718599, 0.359299, 0.359299)&quot;/&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-0-3&quot; x=&quot;496.057868&quot; y=&quot;212.705302&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-9&quot; x=&quot;501.809467&quot; y=&quot;212.705302&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-13&quot; x=&quot;508.036857&quot; y=&quot;212.705302&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-14&quot; x=&quot;514.744249&quot; y=&quot;212.705302&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-7&quot; x=&quot;520.011636&quot; y=&quot;212.705302&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-22&quot; x=&quot;522.407434&quot; y=&quot;212.705302&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-25&quot; x=&quot;526.719027&quot; y=&quot;212.705302&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-26&quot; x=&quot;531.514834&quot; y=&quot;212.705302&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-18&quot; x=&quot;533.910631&quot; y=&quot;212.705302&quot;/&gt;
&lt;/g&gt;
&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;rgb(96.078491%, 96.078491%, 96.078491%)&quot; fill-opacity=&quot;1&quot; stroke-width=&quot;1&quot; stroke-linecap=&quot;butt&quot; stroke-linejoin=&quot;miter&quot; stroke=&quot;rgb(39.99939%, 39.99939%, 39.99939%)&quot; stroke-opacity=&quot;1&quot; stroke-miterlimit=&quot;4&quot; d=&quot;M 659.997463 461.999343 L 780.000936 461.999343 L 780.000936 522.001079 L 659.997463 522.001079 Z M 659.997463 461.999343 &quot; transform=&quot;matrix(0.718599, 0, 0, 0.718599, 0.359299, 0.359299)&quot;/&gt;
&lt;g fill=&quot;rgb(19.999695%, 19.999695%, 19.999695%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-0-9&quot; x=&quot;502.772277&quot; y=&quot;351.394908&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-8&quot; x=&quot;508.999668&quot; y=&quot;351.394908&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-6&quot; x=&quot;514.751267&quot; y=&quot;351.394908&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-10&quot; x=&quot;517.622855&quot; y=&quot;351.394908&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-11&quot; x=&quot;522.418662&quot; y=&quot;351.394908&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-12&quot; x=&quot;527.214468&quot; y=&quot;351.394908&quot;/&gt;
&lt;/g&gt;
&lt;g fill=&quot;rgb(19.999695%, 19.999695%, 19.999695%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-0-1&quot; x=&quot;502.536491&quot; y=&quot;362.173893&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-2&quot; x=&quot;509.719674&quot; y=&quot;362.173893&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-3&quot; x=&quot;515.471273&quot; y=&quot;362.173893&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-6&quot; x=&quot;521.222872&quot; y=&quot;362.173893&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-7&quot; x=&quot;524.094461&quot; y=&quot;362.173893&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-8&quot; x=&quot;526.490258&quot; y=&quot;362.173893&quot;/&gt;
&lt;/g&gt;
&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;rgb(85.488892%, 90.979004%, 98.81897%)&quot; fill-opacity=&quot;1&quot; stroke-width=&quot;1&quot; stroke-linecap=&quot;butt&quot; stroke-linejoin=&quot;miter&quot; stroke=&quot;rgb(42.349243%, 55.688477%, 74.899292%)&quot; stroke-opacity=&quot;1&quot; stroke-miterlimit=&quot;4&quot; d=&quot;M 179.999879 162.001532 L 299.997916 162.001532 L 299.997916 221.997833 L 179.999879 221.997833 Z M 179.999879 162.001532 &quot; transform=&quot;matrix(0.718599, 0, 0, 0.718599, 0.359299, 0.359299)&quot;/&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-2-1&quot; x=&quot;143.315587&quot; y=&quot;140.845403&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-2-2&quot; x=&quot;149.067186&quot; y=&quot;140.845403&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-2-3&quot; x=&quot;155.294576&quot; y=&quot;140.845403&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-2-4&quot; x=&quot;162.001968&quot; y=&quot;140.845403&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-2-5&quot; x=&quot;167.269355&quot; y=&quot;140.845403&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-2-6&quot; x=&quot;169.665152&quot; y=&quot;140.845403&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-2-7&quot; x=&quot;175.892542&quot; y=&quot;140.845403&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-2-8&quot; x=&quot;182.119933&quot; y=&quot;140.845403&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-2-9&quot; x=&quot;187.871532&quot; y=&quot;140.845403&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-2-1&quot; x=&quot;190.267329&quot; y=&quot;140.845403&quot;/&gt;
&lt;/g&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-2-10&quot; x=&quot;195.378926&quot; y=&quot;140.845403&quot;/&gt;
&lt;/g&gt;
&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;rgb(85.488892%, 90.979004%, 98.81897%)&quot; fill-opacity=&quot;1&quot; stroke-width=&quot;1&quot; stroke-linecap=&quot;butt&quot; stroke-linejoin=&quot;miter&quot; stroke=&quot;rgb(42.349243%, 55.688477%, 74.899292%)&quot; stroke-opacity=&quot;1&quot; stroke-miterlimit=&quot;4&quot; d=&quot;M 340.000885 162.001532 L 459.998923 162.001532 L 459.998923 221.997833 L 340.000885 221.997833 Z M 340.000885 162.001532 &quot; transform=&quot;matrix(0.718599, 0, 0, 0.718599, 0.359299, 0.359299)&quot;/&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-2-1&quot; x=&quot;257.965814&quot; y=&quot;140.845403&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-2-2&quot; x=&quot;263.717413&quot; y=&quot;140.845403&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-2-3&quot; x=&quot;269.944803&quot; y=&quot;140.845403&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-2-4&quot; x=&quot;276.652195&quot; y=&quot;140.845403&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-2-5&quot; x=&quot;281.919582&quot; y=&quot;140.845403&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-2-6&quot; x=&quot;284.31538&quot; y=&quot;140.845403&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-2-7&quot; x=&quot;290.54277&quot; y=&quot;140.845403&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-2-8&quot; x=&quot;296.77016&quot; y=&quot;140.845403&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-2-9&quot; x=&quot;302.521759&quot; y=&quot;140.845403&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-2-11&quot; x=&quot;304.917557&quot; y=&quot;140.845403&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-2-1&quot; x=&quot;311.144947&quot; y=&quot;140.845403&quot;/&gt;
&lt;/g&gt;
&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;rgb(85.488892%, 90.979004%, 98.81897%)&quot; fill-opacity=&quot;1&quot; stroke-width=&quot;1&quot; stroke-linecap=&quot;butt&quot; stroke-linejoin=&quot;miter&quot; stroke=&quot;rgb(42.349243%, 55.688477%, 74.899292%)&quot; stroke-opacity=&quot;1&quot; stroke-miterlimit=&quot;4&quot; d=&quot;M 500.001892 162.001532 L 619.999929 162.001532 L 619.999929 221.997833 L 500.001892 221.997833 Z M 500.001892 162.001532 &quot; transform=&quot;matrix(0.718599, 0, 0, 0.718599, 0.359299, 0.359299)&quot;/&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-2-1&quot; x=&quot;378.926232&quot; y=&quot;140.845403&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-2-2&quot; x=&quot;384.677831&quot; y=&quot;140.845403&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-2-3&quot; x=&quot;390.905221&quot; y=&quot;140.845403&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-2-4&quot; x=&quot;397.612613&quot; y=&quot;140.845403&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-2-5&quot; x=&quot;402.88&quot; y=&quot;140.845403&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-2-12&quot; x=&quot;405.275797&quot; y=&quot;140.845403&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-2-13&quot; x=&quot;410.543184&quot; y=&quot;140.845403&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-2-14&quot; x=&quot;413.898985&quot; y=&quot;140.845403&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-2-15&quot; x=&quot;416.294783&quot; y=&quot;140.845403&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-2-16&quot; x=&quot;421.090589&quot; y=&quot;140.845403&quot;/&gt;
&lt;/g&gt;
&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;rgb(85.488892%, 90.979004%, 98.81897%)&quot; fill-opacity=&quot;1&quot; stroke-width=&quot;1&quot; stroke-linecap=&quot;butt&quot; stroke-linejoin=&quot;miter&quot; stroke=&quot;rgb(42.349243%, 55.688477%, 74.899292%)&quot; stroke-opacity=&quot;1&quot; stroke-miterlimit=&quot;4&quot; d=&quot;M 659.997463 162.001532 L 780.000936 162.001532 L 780.000936 221.997833 L 659.997463 221.997833 Z M 659.997463 162.001532 &quot; transform=&quot;matrix(0.718599, 0, 0, 0.718599, 0.359299, 0.359299)&quot;/&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-2-8&quot; x=&quot;504.445269&quot; y=&quot;140.845403&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-2-17&quot; x=&quot;510.196868&quot; y=&quot;140.845403&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-2-18&quot; x=&quot;514.992674&quot; y=&quot;140.845403&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-2-16&quot; x=&quot;517.864263&quot; y=&quot;140.845403&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-2-19&quot; x=&quot;522.66007&quot; y=&quot;140.845403&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-2-20&quot; x=&quot;525.531658&quot; y=&quot;140.845403&quot;/&gt;
&lt;/g&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-1-31&quot; x=&quot;54.613524&quot; y=&quot;68.985503&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-1-32&quot; x=&quot;63.236711&quot; y=&quot;68.985503&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-1-33&quot; x=&quot;71.859899&quot; y=&quot;68.985503&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-1-34&quot; x=&quot;80.483087&quot; y=&quot;68.985503&quot;/&gt;
&lt;/g&gt;
&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;rgb(100%, 100%, 100%)&quot; fill-opacity=&quot;1&quot; stroke-width=&quot;1&quot; stroke-linecap=&quot;butt&quot; stroke-linejoin=&quot;miter&quot; stroke=&quot;rgb(0%, 0%, 0%)&quot; stroke-opacity=&quot;1&quot; stroke-miterlimit=&quot;4&quot; d=&quot;M 179.999879 62.002262 L 299.997916 62.002262 L 299.997916 121.998562 L 179.999879 121.998562 Z M 179.999879 62.002262 &quot; transform=&quot;matrix(0.718599, 0, 0, 0.718599, 0.359299, 0.359299)&quot;/&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-3-1&quot; x=&quot;150.905789&quot; y=&quot;68.985503&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-3-2&quot; x=&quot;159.528977&quot; y=&quot;68.985503&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-3-3&quot; x=&quot;168.152165&quot; y=&quot;68.985503&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-3-4&quot; x=&quot;176.775353&quot; y=&quot;68.985503&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-3-5&quot; x=&quot;185.39854&quot; y=&quot;68.985503&quot;/&gt;
&lt;/g&gt;
&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;rgb(100%, 100%, 100%)&quot; fill-opacity=&quot;1&quot; stroke-width=&quot;1&quot; stroke-linecap=&quot;butt&quot; stroke-linejoin=&quot;miter&quot; stroke=&quot;rgb(0%, 0%, 0%)&quot; stroke-opacity=&quot;1&quot; stroke-miterlimit=&quot;4&quot; d=&quot;M 340.000885 62.002262 L 459.998923 62.002262 L 459.998923 121.998562 L 340.000885 121.998562 Z M 340.000885 62.002262 &quot; transform=&quot;matrix(0.718599, 0, 0, 0.718599, 0.359299, 0.359299)&quot;/&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-3-6&quot; x=&quot;265.881628&quot; y=&quot;68.985503&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-3-7&quot; x=&quot;274.504816&quot; y=&quot;68.985503&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-3-3&quot; x=&quot;283.128004&quot; y=&quot;68.985503&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-3-4&quot; x=&quot;291.751192&quot; y=&quot;68.985503&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-3-5&quot; x=&quot;300.37438&quot; y=&quot;68.985503&quot;/&gt;
&lt;/g&gt;
&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;rgb(100%, 100%, 100%)&quot; fill-opacity=&quot;1&quot; stroke-width=&quot;1&quot; stroke-linecap=&quot;butt&quot; stroke-linejoin=&quot;miter&quot; stroke=&quot;rgb(0%, 0%, 0%)&quot; stroke-opacity=&quot;1&quot; stroke-miterlimit=&quot;4&quot; d=&quot;M 500.001892 62.002262 L 619.999929 62.002262 L 619.999929 121.998562 L 500.001892 121.998562 Z M 500.001892 62.002262 &quot; transform=&quot;matrix(0.718599, 0, 0, 0.718599, 0.359299, 0.359299)&quot;/&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-3-8&quot; x=&quot;385.169061&quot; y=&quot;68.985503&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-3-4&quot; x=&quot;393.792249&quot; y=&quot;68.985503&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-3-9&quot; x=&quot;402.415437&quot; y=&quot;68.985503&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-3-10&quot; x=&quot;411.038625&quot; y=&quot;68.985503&quot;/&gt;
&lt;/g&gt;
&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;rgb(100%, 100%, 100%)&quot; fill-opacity=&quot;1&quot; stroke-width=&quot;1&quot; stroke-linecap=&quot;butt&quot; stroke-linejoin=&quot;miter&quot; stroke=&quot;rgb(0%, 0%, 0%)&quot; stroke-opacity=&quot;1&quot; stroke-miterlimit=&quot;4&quot; d=&quot;M 659.997463 62.002262 L 780.000936 62.002262 L 780.000936 121.998562 L 659.997463 121.998562 Z M 659.997463 62.002262 &quot; transform=&quot;matrix(0.718599, 0, 0, 0.718599, 0.359299, 0.359299)&quot;/&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-3-11&quot; x=&quot;500.1449&quot; y=&quot;68.985503&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-3-12&quot; x=&quot;508.768088&quot; y=&quot;68.985503&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-3-13&quot; x=&quot;517.391276&quot; y=&quot;68.985503&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-3-14&quot; x=&quot;526.014464&quot; y=&quot;68.985503&quot;/&gt;
&lt;/g&gt;
&lt;/svg&gt;
&lt;/div&gt;
&lt;/p&gt;
&lt;/div&gt;

&lt;p&gt;
因为这些解决方案的通信层都是 PROFIBUS DP，所以，不同的应用应用之间是可以互联互通的，组成混合应用方案。比如，在食品饮料、制药、锂电池制造等行业，离散和流程自动化混合的场景中，可以通过一个 PROFIBUS DP 通信层协议连同工厂自动化和流程自动化控制（图 &lt;a href=&quot;#org6cbccba&quot;&gt;1&lt;/a&gt;）。相比其他的方案，就不需要两套布线、两套通信协议，就能简化工厂布线、设备安装、操作技能、设备维护，从而节省工厂成本。
&lt;/p&gt;


&lt;div id=&quot;org6cbccba&quot; class=&quot;figure&quot;&gt;
&lt;p&gt;&lt;div align=&quot;center&quot;&gt;&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; xmlns:xlink=&quot;http://www.w3.org/1999/xlink&quot; width=&quot;594.95996&quot; height=&quot;420.95999&quot; viewBox=&quot;0 0 594.95996 420.95999&quot;&gt;
&lt;defs&gt;
&lt;clipPath id=&quot;clip-0&quot;&gt;
&lt;path clip-rule=&quot;nonzero&quot; d=&quot;M 0 0 L 594.960938 0 L 594.960938 420.378906 L 0 420.378906 Z M 0 0 &quot;/&gt;
&lt;/clipPath&gt;
&lt;clipPath id=&quot;clip-1&quot;&gt;
&lt;path clip-rule=&quot;nonzero&quot; d=&quot;M 0 0 L 594.960938 0 L 594.960938 420 L 0 420 Z M 0 0 &quot;/&gt;
&lt;/clipPath&gt;
&lt;image id=&quot;source-5&quot; x=&quot;0&quot; y=&quot;0&quot; width=&quot;474&quot; height=&quot;429&quot; xlink:href=&quot;data:image/jpeg;base64,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&quot;/&gt;
&lt;/defs&gt;
&lt;g clip-path=&quot;url(#clip-0)&quot;&gt;
&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;rgb(100%, 100%, 100%)&quot; fill-opacity=&quot;1&quot; d=&quot;M 0 0 L 595 0 L 595 420.378906 L 0 420.378906 Z M 0 0 &quot;/&gt;
&lt;/g&gt;
&lt;g clip-path=&quot;url(#clip-1)&quot;&gt;
&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;rgb(100%, 100%, 100%)&quot; fill-opacity=&quot;1&quot; d=&quot;M 0 0 L 595 0 L 595 419.660156 L 0 419.660156 Z M 0 0 &quot;/&gt;
&lt;/g&gt;
&lt;path fill=&quot;none&quot; stroke-width=&quot;4&quot; stroke-linecap=&quot;butt&quot; stroke-linejoin=&quot;miter&quot; stroke=&quot;rgb(0%, 79.998779%, 39.99939%)&quot; stroke-opacity=&quot;1&quot; stroke-miterlimit=&quot;10&quot; d=&quot;M 119.998037 160.001007 L 719.999094 160.001007 &quot; transform=&quot;matrix(0.718599, 0, 0, 0.718599, 0, 0)&quot;/&gt;
&lt;path fill=&quot;none&quot; stroke-width=&quot;4&quot; stroke-linecap=&quot;butt&quot; stroke-linejoin=&quot;miter&quot; stroke=&quot;rgb(79.998779%, 0%, 79.998779%)&quot; stroke-opacity=&quot;1&quot; stroke-miterlimit=&quot;10&quot; d=&quot;M 119.998037 279.999044 L 440.000051 279.999044 &quot; transform=&quot;matrix(0.718599, 0, 0, 0.718599, 0, 0)&quot;/&gt;
&lt;path fill=&quot;none&quot; stroke-width=&quot;4&quot; stroke-linecap=&quot;butt&quot; stroke-linejoin=&quot;miter&quot; stroke=&quot;rgb(0%, 79.998779%, 39.99939%)&quot; stroke-opacity=&quot;1&quot; stroke-miterlimit=&quot;10&quot; d=&quot;M 304.998861 85.001554 L 304.998861 160.001007 &quot; transform=&quot;matrix(0.718599, 0, 0, 0.718599, 0, 0)&quot;/&gt;
&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;rgb(50.19989%, 50.19989%, 50.19989%)&quot; fill-opacity=&quot;1&quot; d=&quot;M 203.242188 54.648438 C 202.761719 54.605469 202.320312 54.375 202.011719 54.011719 C 201.710938 53.652344 201.566406 53.183594 201.617188 52.714844 L 201.617188 30.90625 C 201.6875 30 202.394531 29.277344 203.3125 29.144531 L 235.441406 29.144531 C 236.5 29.101562 237.402344 29.878906 237.496094 30.90625 L 237.460938 53.070312 C 237.253906 54.003906 236.417969 54.679688 235.441406 54.722656 L 224.175781 54.722656 L 223.671875 56.726562 C 223.554688 57.1875 223.636719 57.675781 223.894531 58.085938 C 224.152344 58.488281 224.570312 58.773438 225.042969 58.875 C 226.136719 59.234375 227.285156 59.390625 228.433594 59.328125 L 230.535156 59.328125 L 230.535156 61.441406 L 207.105469 61.441406 L 207.105469 59.328125 L 209.59375 59.328125 C 210.902344 59.335938 212.195312 59.125 213.425781 58.695312 C 214.386719 58.472656 214.984375 57.523438 214.753906 56.582031 L 214.429688 54.722656 Z M 204.289062 52.121094 L 234.714844 52.121094 L 234.714844 31.855469 L 204.289062 31.855469 Z M 204.289062 52.121094 &quot;/&gt;
&lt;path fill=&quot;none&quot; stroke-width=&quot;4&quot; stroke-linecap=&quot;butt&quot; stroke-linejoin=&quot;miter&quot; stroke=&quot;rgb(0%, 79.998779%, 39.99939%)&quot; stroke-opacity=&quot;1&quot; stroke-miterlimit=&quot;10&quot; d=&quot;M 359.999547 199.99854 L 359.999547 160.001007 &quot; transform=&quot;matrix(0.718599, 0, 0, 0.718599, 0, 0)&quot;/&gt;
&lt;path fill=&quot;none&quot; stroke-width=&quot;4&quot; stroke-linecap=&quot;butt&quot; stroke-linejoin=&quot;miter&quot; stroke=&quot;rgb(79.998779%, 0%, 79.998779%)&quot; stroke-opacity=&quot;1&quot; stroke-miterlimit=&quot;10&quot; d=&quot;M 359.999547 240.00151 L 359.999547 279.999044 &quot; transform=&quot;matrix(0.718599, 0, 0, 0.718599, 0, 0)&quot;/&gt;
&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;rgb(50.19989%, 50.19989%, 50.19989%)&quot; fill-opacity=&quot;1&quot; d=&quot;M 259.054688 172.824219 C 251.113281 172.824219 244.683594 166.390625 244.683594 158.449219 C 244.683594 150.511719 251.113281 144.078125 259.054688 144.078125 C 266.996094 144.078125 273.425781 150.511719 273.425781 158.449219 C 273.425781 166.390625 266.996094 172.824219 259.054688 172.824219 Z M 260.347656 170.179688 L 260.347656 165.609375 L 261.671875 165.609375 L 259.054688 160.320312 L 256.4375 165.609375 L 257.734375 165.609375 L 257.734375 170.179688 Z M 266.183594 161.09375 L 271.472656 158.449219 L 266.183594 155.808594 L 266.183594 157.15625 L 261.671875 157.15625 L 261.671875 159.746094 L 266.183594 159.746094 Z M 261.640625 150.632812 L 260.347656 150.632812 L 260.347656 146.089844 L 257.734375 146.089844 L 257.734375 150.632812 L 256.410156 150.632812 L 259.054688 155.949219 Z M 256.46875 157.15625 L 251.867188 157.15625 L 251.867188 155.835938 L 246.609375 158.449219 L 251.867188 161.039062 L 251.867188 159.746094 L 256.46875 159.746094 Z M 256.46875 157.15625 &quot;/&gt;
&lt;path fill=&quot;none&quot; stroke-width=&quot;4&quot; stroke-linecap=&quot;butt&quot; stroke-linejoin=&quot;miter&quot; stroke=&quot;rgb(79.998779%, 0%, 79.998779%)&quot; stroke-opacity=&quot;1&quot; stroke-miterlimit=&quot;10&quot; d=&quot;M 199.99854 320.002014 L 199.99854 279.999044 &quot; transform=&quot;matrix(0.718599, 0, 0, 0.718599, 0, 0)&quot;/&gt;
&lt;path fill=&quot;none&quot; stroke-width=&quot;4&quot; stroke-linecap=&quot;butt&quot; stroke-linejoin=&quot;miter&quot; stroke=&quot;rgb(0%, 39.99939%, 79.998779%)&quot; stroke-opacity=&quot;1&quot; stroke-miterlimit=&quot;10&quot; d=&quot;M 199.99854 359.999547 L 199.99854 400.002517 &quot; transform=&quot;matrix(0.718599, 0, 0, 0.718599, 0, 0)&quot;/&gt;
&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;rgb(50.19989%, 50.19989%, 50.19989%)&quot; fill-opacity=&quot;1&quot; d=&quot;M 144.078125 259.054688 C 136.136719 259.054688 129.707031 252.625 129.707031 244.683594 C 129.707031 236.742188 136.136719 230.3125 144.078125 230.3125 C 152.019531 230.3125 158.449219 236.742188 158.449219 244.683594 C 158.449219 252.625 152.019531 259.054688 144.078125 259.054688 Z M 145.371094 256.410156 L 145.371094 251.839844 L 146.695312 251.839844 L 144.078125 246.550781 L 141.464844 251.839844 L 142.757812 251.839844 L 142.757812 256.410156 Z M 151.207031 247.328125 L 156.496094 244.683594 L 151.207031 242.039062 L 151.207031 243.390625 L 146.695312 243.390625 L 146.695312 245.976562 L 151.207031 245.976562 Z M 146.667969 236.863281 L 145.371094 236.863281 L 145.371094 232.324219 L 142.757812 232.324219 L 142.757812 236.863281 L 141.433594 236.863281 L 144.078125 242.183594 Z M 141.492188 243.390625 L 136.894531 243.390625 L 136.894531 242.066406 L 131.632812 244.683594 L 136.894531 247.269531 L 136.894531 245.976562 L 141.492188 245.976562 Z M 141.492188 243.390625 &quot;/&gt;
&lt;path fill=&quot;none&quot; stroke-width=&quot;4&quot; stroke-linecap=&quot;butt&quot; stroke-linejoin=&quot;miter&quot; stroke=&quot;rgb(0%, 39.99939%, 79.998779%)&quot; stroke-opacity=&quot;1&quot; stroke-miterlimit=&quot;10&quot; d=&quot;M 267.5997 440.000051 L 267.5997 420.001284 L 267.621443 400.002517 &quot; transform=&quot;matrix(0.718599, 0, 0, 0.718599, 0, 0)&quot;/&gt;
&lt;use xlink:href=&quot;#source-5&quot; transform=&quot;matrix(0.0837456, 0, 0, 0.0837528, 172.463753, 316.183552)&quot;/&gt;
&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;rgb(100%, 100%, 100%)&quot; fill-opacity=&quot;1&quot; stroke-width=&quot;3&quot; stroke-linecap=&quot;butt&quot; stroke-linejoin=&quot;miter&quot; stroke=&quot;rgb(0%, 0%, 0%)&quot; stroke-opacity=&quot;1&quot; stroke-miterlimit=&quot;4&quot; d=&quot;M 320.002119 479.997689 L 359.999652 479.997689 L 359.999652 489.999791 L 320.002119 489.999791 Z M 320.002119 479.997689 &quot; transform=&quot;matrix(0.718599, 0, 0, 0.718599, 0.359299, 0.359299)&quot;/&gt;
&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;rgb(100%, 100%, 100%)&quot; fill-opacity=&quot;1&quot; stroke-width=&quot;3&quot; stroke-linecap=&quot;butt&quot; stroke-linejoin=&quot;miter&quot; stroke=&quot;rgb(0%, 0%, 0%)&quot; stroke-opacity=&quot;1&quot; stroke-miterlimit=&quot;4&quot; d=&quot;M 329.998784 459.998923 L 349.997551 459.998923 L 349.997551 479.997689 L 329.998784 479.997689 Z M 329.998784 459.998923 &quot; transform=&quot;matrix(0.718599, 0, 0, 0.718599, 0.359299, 0.359299)&quot;/&gt;
&lt;path fill=&quot;none&quot; stroke-width=&quot;4&quot; stroke-linecap=&quot;butt&quot; stroke-linejoin=&quot;miter&quot; stroke=&quot;rgb(0%, 39.99939%, 79.998779%)&quot; stroke-opacity=&quot;1&quot; stroke-miterlimit=&quot;10&quot; d=&quot;M 340.00078 440.000051 L 340.00078 400.002517 &quot; transform=&quot;matrix(0.718599, 0, 0, 0.718599, 0, 0)&quot;/&gt;
&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;rgb(100%, 100%, 100%)&quot; fill-opacity=&quot;1&quot; stroke-width=&quot;3&quot; stroke-linecap=&quot;butt&quot; stroke-linejoin=&quot;miter&quot; stroke=&quot;rgb(0%, 0%, 0%)&quot; stroke-opacity=&quot;1&quot; stroke-miterlimit=&quot;4&quot; d=&quot;M 354.998602 454.997872 C 354.998602 455.98721 354.906191 456.960241 354.710498 457.927835 C 354.52024 458.889994 354.237572 459.830409 353.857057 460.738208 C 353.481979 461.651444 353.019925 462.515756 352.470897 463.331144 C 351.927304 464.151969 351.302173 464.907563 350.606374 465.608797 C 349.910576 466.304595 349.154983 466.924291 348.334158 467.473319 C 347.513333 468.016911 346.649021 468.478965 345.741222 468.85948 C 344.827987 469.234559 343.893008 469.517227 342.925413 469.71292 C 341.957818 469.903177 340.984788 470.001024 340.000885 470.001024 C 339.016983 470.001024 338.038517 469.903177 337.070922 469.71292 C 336.108763 469.517227 335.168348 469.234559 334.260549 468.85948 C 333.347314 468.478965 332.483002 468.016911 331.667613 467.473319 C 330.846788 466.924291 330.091195 466.304595 329.395396 465.608797 C 328.699598 464.907563 328.074467 464.151969 327.525438 463.331144 C 326.981846 462.515756 326.519792 461.651444 326.139278 460.738208 C 325.764199 459.830409 325.481531 458.889994 325.285837 457.927835 C 325.09558 456.960241 324.997733 455.98721 324.997733 454.997872 C 324.997733 454.013969 325.09558 453.040939 325.285837 452.073344 C 325.481531 451.10575 325.764199 450.170771 326.139278 449.257535 C 326.519792 448.349736 326.981846 447.485424 327.525438 446.664599 C 328.074467 445.849211 328.699598 445.088181 329.395396 444.392383 C 330.091195 443.696584 330.846788 443.076889 331.667613 442.527861 C 332.483002 441.978832 333.347314 441.516779 334.260549 441.1417 C 335.168348 440.766621 336.108763 440.478517 337.070922 440.28826 C 338.038517 440.098002 339.016983 440.000156 340.000885 440.000156 C 340.984788 440.000156 341.957818 440.098002 342.925413 440.28826 C 343.893008 440.478517 344.827987 440.766621 345.741222 441.1417 C 346.649021 441.516779 347.513333 441.978832 348.334158 442.527861 C 349.154983 443.076889 349.910576 443.696584 350.606374 444.392383 C 351.302173 445.088181 351.927304 445.849211 352.470897 446.664599 C 353.019925 447.485424 353.481979 448.349736 353.857057 449.257535 C 354.237572 450.170771 354.52024 451.10575 354.710498 452.073344 C 354.906191 453.040939 354.998602 454.013969 354.998602 454.997872 Z M 354.998602 454.997872 &quot; transform=&quot;matrix(0.718599, 0, 0, 0.718599, 0.359299, 0.359299)&quot;/&gt;
&lt;path fill=&quot;none&quot; stroke-width=&quot;4&quot; stroke-linecap=&quot;butt&quot; stroke-linejoin=&quot;miter&quot; stroke=&quot;rgb(0%, 39.99939%, 79.998779%)&quot; stroke-opacity=&quot;1&quot; stroke-miterlimit=&quot;10&quot; d=&quot;M 197.99812 400.002517 L 440.000051 400.002517 &quot; transform=&quot;matrix(0.718599, 0, 0, 0.718599, 0, 0)&quot;/&gt;
&lt;path fill=&quot;none&quot; stroke-width=&quot;4&quot; stroke-linecap=&quot;butt&quot; stroke-linejoin=&quot;miter&quot; stroke=&quot;rgb(0%, 79.998779%, 0%)&quot; stroke-opacity=&quot;1&quot; stroke-miterlimit=&quot;10&quot; d=&quot;M 580.00229 199.99854 L 580.00229 160.001007 &quot; transform=&quot;matrix(0.718599, 0, 0, 0.718599, 0, 0)&quot;/&gt;
&lt;path fill=&quot;none&quot; stroke-width=&quot;4&quot; stroke-linecap=&quot;butt&quot; stroke-linejoin=&quot;miter&quot; stroke=&quot;rgb(0%, 39.99939%, 79.998779%)&quot; stroke-opacity=&quot;1&quot; stroke-miterlimit=&quot;10&quot; d=&quot;M 580.00229 240.00151 L 580.00229 400.002517 &quot; transform=&quot;matrix(0.718599, 0, 0, 0.718599, 0, 0)&quot;/&gt;
&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;rgb(50.19989%, 50.19989%, 50.19989%)&quot; fill-opacity=&quot;1&quot; d=&quot;M 417.148438 172.824219 C 409.207031 172.824219 402.773438 166.390625 402.773438 158.449219 C 402.773438 150.511719 409.207031 144.078125 417.148438 144.078125 C 425.085938 144.078125 431.519531 150.511719 431.519531 158.449219 C 431.519531 166.390625 425.085938 172.824219 417.148438 172.824219 Z M 418.441406 170.179688 L 418.441406 165.609375 L 419.761719 165.609375 L 417.148438 160.320312 L 414.53125 165.609375 L 415.824219 165.609375 L 415.824219 170.179688 Z M 424.273438 161.09375 L 429.5625 158.449219 L 424.273438 155.808594 L 424.273438 157.15625 L 419.761719 157.15625 L 419.761719 159.746094 L 424.273438 159.746094 Z M 419.734375 150.632812 L 418.441406 150.632812 L 418.441406 146.089844 L 415.824219 146.089844 L 415.824219 150.632812 L 414.503906 150.632812 L 417.148438 155.949219 Z M 414.558594 157.15625 L 409.960938 157.15625 L 409.960938 155.835938 L 404.699219 158.449219 L 409.960938 161.039062 L 409.960938 159.746094 L 414.558594 159.746094 Z M 414.558594 157.15625 &quot;/&gt;
&lt;path fill=&quot;none&quot; stroke-width=&quot;4&quot; stroke-linecap=&quot;butt&quot; stroke-linejoin=&quot;miter&quot; stroke=&quot;rgb(0%, 39.99939%, 79.998779%)&quot; stroke-opacity=&quot;1&quot; stroke-miterlimit=&quot;10&quot; d=&quot;M 578.00187 400.002517 L 719.999094 400.002517 &quot; transform=&quot;matrix(0.718599, 0, 0, 0.718599, 0, 0)&quot;/&gt;
&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;rgb(50.19989%, 50.19989%, 50.19989%)&quot; fill-opacity=&quot;1&quot; stroke-width=&quot;1&quot; stroke-linecap=&quot;butt&quot; stroke-linejoin=&quot;miter&quot; stroke=&quot;rgb(50.19989%, 50.19989%, 50.19989%)&quot; stroke-opacity=&quot;1&quot; stroke-miterlimit=&quot;4&quot; d=&quot;M 440.000156 395.001571 L 450.002257 395.001571 L 450.002257 404.998237 L 440.000156 404.998237 Z M 440.000156 395.001571 &quot; transform=&quot;matrix(0.718599, 0, 0, 0.718599, 0.359299, 0.359299)&quot;/&gt;
&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;rgb(50.19989%, 50.19989%, 50.19989%)&quot; fill-opacity=&quot;1&quot; stroke-width=&quot;1&quot; stroke-linecap=&quot;butt&quot; stroke-linejoin=&quot;miter&quot; stroke=&quot;rgb(50.19989%, 50.19989%, 50.19989%)&quot; stroke-opacity=&quot;1&quot; stroke-miterlimit=&quot;4&quot; d=&quot;M 719.9992 395.001571 L 730.001301 395.001571 L 730.001301 404.998237 L 719.9992 404.998237 Z M 719.9992 395.001571 &quot; transform=&quot;matrix(0.718599, 0, 0, 0.718599, 0.359299, 0.359299)&quot;/&gt;
&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;rgb(100%, 100%, 100%)&quot; fill-opacity=&quot;1&quot; stroke-width=&quot;3&quot; stroke-linecap=&quot;butt&quot; stroke-linejoin=&quot;miter&quot; stroke=&quot;rgb(0%, 0%, 0%)&quot; stroke-opacity=&quot;1&quot; stroke-miterlimit=&quot;4&quot; d=&quot;M 619.999929 479.997689 L 659.997463 479.997689 L 659.997463 489.999791 L 619.999929 489.999791 Z M 619.999929 479.997689 &quot; transform=&quot;matrix(0.718599, 0, 0, 0.718599, 0.359299, 0.359299)&quot;/&gt;
&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;rgb(100%, 100%, 100%)&quot; fill-opacity=&quot;1&quot; stroke-width=&quot;3&quot; stroke-linecap=&quot;butt&quot; stroke-linejoin=&quot;miter&quot; stroke=&quot;rgb(0%, 0%, 0%)&quot; stroke-opacity=&quot;1&quot; stroke-miterlimit=&quot;4&quot; d=&quot;M 630.002031 459.998923 L 650.000798 459.998923 L 650.000798 479.997689 L 630.002031 479.997689 Z M 630.002031 459.998923 &quot; transform=&quot;matrix(0.718599, 0, 0, 0.718599, 0.359299, 0.359299)&quot;/&gt;
&lt;path fill=&quot;none&quot; stroke-width=&quot;4&quot; stroke-linecap=&quot;butt&quot; stroke-linejoin=&quot;miter&quot; stroke=&quot;rgb(0%, 39.99939%, 79.998779%)&quot; stroke-opacity=&quot;1&quot; stroke-miterlimit=&quot;10&quot; d=&quot;M 639.998591 440.000051 L 639.998591 400.002517 &quot; transform=&quot;matrix(0.718599, 0, 0, 0.718599, 0, 0)&quot;/&gt;
&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;rgb(100%, 100%, 100%)&quot; fill-opacity=&quot;1&quot; stroke-width=&quot;3&quot; stroke-linecap=&quot;butt&quot; stroke-linejoin=&quot;miter&quot; stroke=&quot;rgb(0%, 0%, 0%)&quot; stroke-opacity=&quot;1&quot; stroke-miterlimit=&quot;4&quot; d=&quot;M 655.001848 454.997872 C 655.001848 455.98721 654.904002 456.960241 654.713744 457.927835 C 654.518051 458.889994 654.235383 459.830409 653.860304 460.738208 C 653.479789 461.651444 653.017736 462.515756 652.474143 463.331144 C 651.925115 464.151969 651.305419 464.907563 650.604185 465.608797 C 649.908387 466.304595 649.152793 466.924291 648.331969 467.473319 C 647.51658 468.016911 646.652268 468.478965 645.739033 468.85948 C 644.831233 469.234559 643.890818 469.517227 642.92866 469.71292 C 641.961065 469.903177 640.982599 470.001024 639.998696 470.001024 C 639.014794 470.001024 638.041763 469.903177 637.074169 469.71292 C 636.106574 469.517227 635.171595 469.234559 634.25836 468.85948 C 633.35056 468.478965 632.486248 468.016911 631.665424 467.473319 C 630.850035 466.924291 630.089005 466.304595 629.393207 465.608797 C 628.697409 464.907563 628.077713 464.151969 627.528685 463.331144 C 626.979657 462.515756 626.517603 461.651444 626.142524 460.738208 C 625.767445 459.830409 625.479341 458.889994 625.289084 457.927835 C 625.093391 456.960241 625.00098 455.98721 625.00098 454.997872 C 625.00098 454.013969 625.093391 453.040939 625.289084 452.073344 C 625.479341 451.10575 625.767445 450.170771 626.142524 449.257535 C 626.517603 448.349736 626.979657 447.485424 627.528685 446.664599 C 628.077713 445.849211 628.697409 445.088181 629.393207 444.392383 C 630.089005 443.696584 630.850035 443.076889 631.665424 442.527861 C 632.486248 441.978832 633.35056 441.516779 634.25836 441.1417 C 635.171595 440.766621 636.106574 440.478517 637.074169 440.28826 C 638.041763 440.098002 639.014794 440.000156 639.998696 440.000156 C 640.982599 440.000156 641.961065 440.098002 642.92866 440.28826 C 643.890818 440.478517 644.831233 440.766621 645.739033 441.1417 C 646.652268 441.516779 647.51658 441.978832 648.331969 442.527861 C 649.152793 443.076889 649.908387 443.696584 650.604185 444.392383 C 651.305419 445.088181 651.925115 445.849211 652.474143 446.664599 C 653.017736 447.485424 653.479789 448.349736 653.860304 449.257535 C 654.235383 450.170771 654.518051 451.10575 654.713744 452.073344 C 654.904002 453.040939 655.001848 454.013969 655.001848 454.997872 Z M 655.001848 454.997872 &quot; transform=&quot;matrix(0.718599, 0, 0, 0.718599, 0.359299, 0.359299)&quot;/&gt;
&lt;/svg&gt;
&lt;/div&gt;
&lt;/p&gt;
&lt;/div&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines E.26 如果无法抛出异常，请考虑快速结束</title>
   <link href="http://kimi.im/2023-08-12-cppcoreguidelines-e26"/>
   <updated>2023-08-12T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-e26</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;If you can’t throw exceptions, consider failing fast&amp;rdquo;
&lt;/p&gt;

&lt;p&gt;
理由
&lt;/p&gt;

&lt;p&gt;
如果无法很好的进行出错恢复，那么，至少在没有造成太大损失之前，早早结束。
&lt;/p&gt;

&lt;p&gt;
注意
&lt;/p&gt;

&lt;p&gt;
如果你无法系统化地处理出错情况，对于无法局部处理的错误，考虑直接让程序“崩溃”。也就是说，如果在函数检测到错误的时候，无法从错误中恢复回来，可以调用 &lt;code&gt;abort()&lt;/code&gt; ， &lt;code&gt;quick_exit()&lt;/code&gt; 等类似的函数触发系统重启。
&lt;/p&gt;

&lt;p&gt;
如果，在系统中，你有很多进程，或者很多计算机，你有预见，将来会需要处理很多严重的系统崩溃情况。比如说，硬件出错。这些情况，崩溃只是意味着某个错误需要上一层的计算系统来处理罢了。
&lt;/p&gt;

&lt;p&gt;
例子
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;n&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;...&lt;/span&gt;
    p = &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;static_cast&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;X&lt;/span&gt;*&lt;span style=&quot;color: #7388d6;&quot;&gt;&amp;gt;(&lt;/span&gt;malloc&lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;n * &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;sizeof&lt;/span&gt;&lt;span style=&quot;color: #709870;&quot;&gt;(&lt;/span&gt;X&lt;span style=&quot;color: #709870;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;!p&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; abort&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt;;     &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;abort if memory is exhausted&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;...&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
很多程序无法优雅的处理内存耗尽的情况。此例子大概等价于下面这个例子：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;n&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;...&lt;/span&gt;
    p = &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;X&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;[&lt;/span&gt;n&lt;span style=&quot;color: #7388d6;&quot;&gt;]&lt;/span&gt;;    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;throw if memory is exhausted (by default, terminate)&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;...&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
典型的来说，最好在“崩溃”之前记录一条日志，表明崩溃的原因。
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines E.25 如果无法抛出异常，请模拟 RAII 资源管理</title>
   <link href="http://kimi.im/2023-08-11-cppcoreguidelines-e25"/>
   <updated>2023-08-11T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-e25</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;If you can’t throw exceptions, simulate RAII for resource management&amp;rdquo;
&lt;/p&gt;

&lt;p&gt;
理由
&lt;/p&gt;

&lt;p&gt;
就算没有异常，RAII  也是处理资源最好的、最系统的方式。
&lt;/p&gt;

&lt;p&gt;
注意
&lt;/p&gt;

&lt;p&gt;
在 C++ 中，处理非局部的错误的完整的方式和系统的方式，依然是异常机制。尤其是在构建某个对象的时候，非侵入式地触发失败信号的时候，还是需要用到一个异常。要触发一个不能忽略的错误信号，需要异常机制。如果你无法使用异常机制，可以考虑尽可能的模拟异常的使用方式。
&lt;/p&gt;

&lt;p&gt;
很多人害怕异常机制，其实是有些误导的。当我们在代码中用异常处理一些特殊情况，并且确保不会在代码中弄的到处都是指针，也不会把控制结构弄得太复杂，从时间和空间角度看，异常处理机制总是可以承受的。当然，这个设定的前提是，我们有一个比较好的异常处理机制的系统实现，然而，很多系统中，缺少这种实现。当然，有些情况下也不适用这个建议。比如硬实时系统的例子：比如某个实时操作必须在固定时间内完成，要么出错，要么提供正确答案。如果缺少时间估计工具，异常机制就很难保证这种限制要求了。比如飞机控制软件就是一个很好的例子，在这种系统中，动态内存分配都是不允许的。
&lt;/p&gt;

&lt;p&gt;
所以，错误处理的首要准则是“使用异常和 RAII”。这一部分，我们假定你的系统中暂时没有有效的异常处理机制，或者你的代码像个老鼠窝，充满了指针，错误定义的所有权，很多不系统化的错误处理，很多出错测试代码等。这时候，我们就无法利用简单、系统的异常处理机制了。
&lt;/p&gt;

&lt;p&gt;
在谴责异常机制，或抱怨其成本太高之前，请考虑以下例子，如果我们用错误码的方式实现故障处理。成本和复杂度会有多高？如果你很担心性能，请进行测量。
&lt;/p&gt;

&lt;p&gt;
例子
&lt;/p&gt;

&lt;p&gt;
假设，你想写这段代码：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;func&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;zstring&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;arg&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Gadget&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;g&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;arg&lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;...&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
如果 &lt;code&gt;gadget&lt;/code&gt; 没有正确构造。 &lt;code&gt;func&lt;/code&gt; 以异常退出。如果我们无法抛出异常，我们可以通过 RAII 风格处理资源，给 &lt;code&gt;Gadget&lt;/code&gt; 类添加一个成员函数叫作 &lt;code&gt;valid()&lt;/code&gt;
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;error_indicator&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;func&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;zstring&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;arg&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Gadget&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;g&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;arg&lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;!g.valid&lt;span style=&quot;color: #909183;&quot;&gt;()&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; gadget_construction_error;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;...&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; 0;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;zero indicates &quot;good&quot;&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
现在的问题是，调用 &lt;code&gt;func&lt;/code&gt; 的地方，你得测试一下返回值是否正确。为了确保返回值正确被检查，可以考虑添加 &lt;code&gt;[[nodiscard]]&lt;/code&gt; 标签。
&lt;/p&gt;

&lt;p&gt;
强化
&lt;/p&gt;

&lt;p&gt;
只有在万不得已的时候，考虑用这个方式实现。即有系统地在构造资源之后，测试 &lt;code&gt;valid()&lt;/code&gt; 的值。
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines E.19 如果没有合适的资源管理句柄，请使用 final_action 进行资源清理</title>
   <link href="http://kimi.im/2023-08-10-cppcoreguidelines-e19"/>
   <updated>2023-08-10T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-e19</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;Use a final_action object to express cleanup if no suitable resource
handle is available&amp;rdquo;
&lt;/p&gt;

&lt;p&gt;
理由
&lt;/p&gt;

&lt;p&gt;
GSL 库中的 &lt;code&gt;gsl::finally&lt;/code&gt; 相比 &lt;code&gt;try/catch&lt;/code&gt; 更精简，不易出错。
&lt;/p&gt;

&lt;p&gt;
例子
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;n&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;void&lt;/span&gt;* &lt;span style=&quot;color: #000000;&quot;&gt;p&lt;/span&gt; = malloc&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;n&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;auto&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;_&lt;/span&gt; = &lt;span style=&quot;color: #110099;&quot;&gt;gsl&lt;/span&gt;::finally&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;p&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;]&lt;/span&gt; &lt;span style=&quot;color: #909183;&quot;&gt;{&lt;/span&gt; free&lt;span style=&quot;color: #709870;&quot;&gt;(&lt;/span&gt;p&lt;span style=&quot;color: #709870;&quot;&gt;)&lt;/span&gt;; &lt;span style=&quot;color: #909183;&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;...&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
注意
&lt;/p&gt;

&lt;p&gt;
虽然 &lt;code&gt;gsl::finally&lt;/code&gt; 比 &lt;code&gt;try/catch&lt;/code&gt; 更精简，但依然是一个临时方案。建议使用恰当&lt;a href=&quot;./2023-07-28-cppcoreguidelines-e6&quot;&gt;的资源管理对象&lt;/a&gt;。以 &lt;code&gt;gsl::finally&lt;/code&gt; 作为最后一个方案来考虑。
&lt;/p&gt;

&lt;p&gt;
注意
&lt;/p&gt;

&lt;p&gt;
总的来说，如果没有合适的系统资源管理工具，用 &lt;code&gt;gsl::finally&lt;/code&gt; 系统化地清理资源比老式的 &lt;code&gt;goto exit;&lt;/code&gt; 技术要好些。
&lt;/p&gt;

&lt;p&gt;
强化
&lt;/p&gt;

&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;检测 &lt;code&gt;goto exit;&lt;/code&gt; 语句&lt;/li&gt;
&lt;/ul&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines E.18  减少 try/catch  语句显式的使用</title>
   <link href="http://kimi.im/2023-08-09-cppcoreguidelines-e18"/>
   <updated>2023-08-09T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-e18</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;Minimize the use of explicit try/catch&amp;rdquo;
&lt;/p&gt;

&lt;p&gt;
理由
&lt;/p&gt;

&lt;p&gt;
&lt;code&gt;try/catch&lt;/code&gt; 用起来很繁琐，容易出错。 &lt;code&gt;try/catch&lt;/code&gt; 意味着代码设计不够系统，或者有底层资源管理交互，或者错误处理。
&lt;/p&gt;

&lt;p&gt;
错误例子
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;zstring&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;s&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Gadget&lt;/span&gt;* &lt;span style=&quot;color: #000000;&quot;&gt;p&lt;/span&gt;;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;try&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;
        p = &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Gadget&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;s&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt;;
        &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;...&lt;/span&gt;
        &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;delete&lt;/span&gt; p;
    &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;catch&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;Gadget_construction_failure&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;
        &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;delete&lt;/span&gt; p;
        &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;throw&lt;/span&gt;;
    &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
这段代码开起来很混乱。原始指针可能在 &lt;code&gt;try&lt;/code&gt; 语句中泄漏内存。没有完全处理所有异常。删除一个构造过程中出错的对象显然是个错误。
&lt;/p&gt;

&lt;p&gt;
更好的代码
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;f2&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;zstring&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;s&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Gadget&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;g&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;s&lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
其他方法
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;通过 &lt;a href=&quot;./2023-07-28-cppcoreguidelines-e6&quot;&gt;RAII&lt;/a&gt; 妥善处理资源管理&lt;/li&gt;
&lt;li&gt;使用 &lt;code&gt;finally&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines E.17 不要在每个函数中捕获所有异常</title>
   <link href="http://kimi.im/2023-08-08-cppcoreguidelines-e17"/>
   <updated>2023-08-08T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-e17</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;Don’t try to catch every exception in every function&amp;rdquo;
&lt;/p&gt;

&lt;p&gt;
理由
&lt;/p&gt;

&lt;p&gt;
在一个函数中捕获异常，但是又无法进行有意义的恢复动作，会导致代码复杂和性能损失。还是让异常向上传导，直到有一个函数能处理它。还是通过 RAII 在层层解构之后开展清理动作。
&lt;/p&gt;

&lt;p&gt;
错误例子
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;bad&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;try&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;
        &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;...&lt;/span&gt;
    &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;catch&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;...&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;
        &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;no action&lt;/span&gt;
        &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;throw&lt;/span&gt;;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;propagate exception&lt;/span&gt;
    &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;
强化
&lt;/p&gt;

&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;标记堆叠递归的 &lt;code&gt;try&lt;/code&gt; 语句块&lt;/li&gt;
&lt;li&gt;标记函数中 &lt;code&gt;try&lt;/code&gt; 语句块太多的代码文件&lt;/li&gt;
&lt;/ul&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines E.16  析构、释放、交换、异常类型的复制/移动构造函数不可以失败</title>
   <link href="http://kimi.im/2023-08-07-cppcoreguidelines-e16"/>
   <updated>2023-08-07T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-e16</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;Destructors, deallocation, swap, and exception type copy/move
construction must never fail&amp;rdquo;
&lt;/p&gt;

&lt;p&gt;
理由
&lt;/p&gt;

&lt;p&gt;
如果析构、释放、交换、异常类型的复制/移动构造函数也会失败，我们就无法知道如何编写可靠的程序了。所谓的失败，就是这些地方抛出异常，或者无法完成指定的动作。
&lt;/p&gt;

&lt;p&gt;
错误例子
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Connection&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;...&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;public&lt;/span&gt;:
    ~&lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;Connection&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;Don&apos;t: very bad destructor&lt;/span&gt;
    &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;
        &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;cannot_disconnect&lt;span style=&quot;color: #709870;&quot;&gt;()&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;throw&lt;/span&gt; I_give_up&lt;span style=&quot;color: #909183;&quot;&gt;{&lt;/span&gt;information&lt;span style=&quot;color: #909183;&quot;&gt;}&lt;/span&gt;;
        &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;...&lt;/span&gt;
    &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
注意
&lt;/p&gt;

&lt;p&gt;
我们做了很多尝试，怎么在违反此规则的前提下，写出可靠的代码。比如，网络连接无法关闭。就我们所知，还没人发现比较通用的方法。偶尔的，我们会遇到一些很特殊的例子，比如说，我们设置某个状态，等到以后再去清理。比如说，我们可以把一个暂时无法关闭的 socket 放到 bad socket 列表，等到后续系统开始清理的时候，再统一删除。我们看到的几乎所有这些例子都是很特殊、容易出错。
&lt;/p&gt;

&lt;p&gt;
注意
&lt;/p&gt;

&lt;p&gt;
标准库函数假定构造函数、释放函数（比如 &lt;code&gt;delete&lt;/code&gt; 操作）、 &lt;code&gt;swap&lt;/code&gt; 交换函数不会抛出异常。如果它们会抛出异常，那么标准库中的不变式就很难维护了。
&lt;/p&gt;

&lt;p&gt;
注意
&lt;/p&gt;

&lt;p&gt;
释放函数，包括 &lt;code&gt;delete&lt;/code&gt; 操作符，必须为 &lt;code&gt;noexcept&lt;/code&gt;
&lt;/p&gt;

&lt;p&gt;
&lt;code&gt;swap&lt;/code&gt; 函数也必须是 &lt;code&gt;noexcept&lt;/code&gt;
&lt;/p&gt;

&lt;p&gt;
大部分析构函数，默认是 &lt;code&gt;noexcept&lt;/code&gt;  的
&lt;/p&gt;

&lt;p&gt;
还有，请将 &lt;code&gt;move&lt;/code&gt; 操作设置为 &lt;code&gt;noexcept&lt;/code&gt;
&lt;/p&gt;

&lt;p&gt;
如果编写一个类型作为异常类型使用，请确保它的复制构造函数不是 &lt;code&gt;noexcept&lt;/code&gt;
。一般来说，我们无法机械式地强调这个，因为我们不知道这个类型是否会作为一个异常类型。
&lt;/p&gt;

&lt;p&gt;
避免抛出一个复制构造函数不是 &lt;code&gt;noexcept&lt;/code&gt; 的类型。我们不能机械式的强调这个，因为 &lt;code&gt;std::string(...)&lt;/code&gt; 有时候也会作为异常抛出。
&lt;/p&gt;


&lt;p&gt;
强化
&lt;/p&gt;

&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;找出构造函数、内存释放操作、 &lt;code&gt;swap&lt;/code&gt; 会抛出异常的情况。&lt;/li&gt;
&lt;li&gt;找出这类操作没有标记为 &lt;code&gt;noexcept&lt;/code&gt; 的情况。&lt;/li&gt;
&lt;/ul&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines E.15  抛出异常，以引用的方式从层级结构中捕获异常</title>
   <link href="http://kimi.im/2023-08-06-cppcoreguidelines-e15"/>
   <updated>2023-08-06T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-e15</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;Throw by value, catch exceptions from a hierarchy by reference&amp;rdquo;
&lt;/p&gt;

&lt;p&gt;
理由
&lt;/p&gt;

&lt;p&gt;
以值的方式抛出异常（非指针），然后通过引用捕获，会阻止复制过程，导致产生对象的切片副本。
&lt;/p&gt;

&lt;p&gt;
错误例子
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;try&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;
        &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;...&lt;/span&gt;
        &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;throw&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;widget&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;{}&lt;/span&gt;; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;don&apos;t: throw by value not by raw pointer&lt;/span&gt;
        &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;...&lt;/span&gt;
    &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;catch&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;base_class e&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;  &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;don&apos;t: might slice&lt;/span&gt;
        &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;...&lt;/span&gt;
    &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
应该使用引用：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;catch&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;base_class&amp;amp; e&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;/* &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;...&lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt; */&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
或者，最好用常量引用：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;catch&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;base_class&lt;/span&gt;&amp;amp; &lt;span style=&quot;color: #000000;&quot;&gt;e&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;/* &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;...&lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt; */&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
大部分异常处理不会修改异常的值，所以，一般来说，我们建议使用 &lt;code&gt;const&lt;/code&gt; 
&lt;/p&gt;

&lt;p&gt;
注意
&lt;/p&gt;

&lt;p&gt;
对于小数值类型，可以以值的方式捕获，比如枚举类型。
&lt;/p&gt;

&lt;p&gt;
注意
&lt;/p&gt;

&lt;p&gt;
重新抛出捕获的异常，请使用 &lt;code&gt;throw&lt;/code&gt; ，不要用 &lt;code&gt;throw e;&lt;/code&gt; 。用 &lt;code&gt;throw e;&lt;/code&gt; 会抛出 &lt;code&gt;e&lt;/code&gt; 的一个副本。因为是复制操作，可能会由于类型不同，把原来的异常对象切片处理成 &lt;code&gt;std::exception&lt;/code&gt; 。另外，还要注意，不要尝试在所有函数中，捕获所有异常，避免显式的 &lt;code&gt;try/catch&lt;/code&gt; 操作。
&lt;/p&gt;

&lt;p&gt;
强化
&lt;/p&gt;

&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;当一个类型有虚函数，然后以值的方式被异常捕获，标记之。&lt;/li&gt;
&lt;li&gt;抛出原始指针的异常，标记之。&lt;/li&gt;
&lt;/ul&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines E.14 用用户定义的设计类型作为异常（不要用内置类型）</title>
   <link href="http://kimi.im/2023-08-05-cppcoreguidelines-e14"/>
   <updated>2023-08-05T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-e14</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;Use purpose-designed user-defined types as exceptions (not built-in types)&amp;rdquo;
&lt;/p&gt;

&lt;p&gt;
理由
&lt;/p&gt;

&lt;p&gt;
用户自定义的类型能够更好的传达关于出错的信息。错误信息可以通过类型进行编码，这个类型本身不会因为其他人的异常而崩溃。
&lt;/p&gt;

&lt;p&gt;
例子
&lt;/p&gt;


&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;throw&lt;/span&gt; 7; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;bad&lt;/span&gt;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;throw&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;something bad&quot;&lt;/span&gt;;  &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;bad&lt;/span&gt;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;throw&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;std&lt;/span&gt;::exception&lt;span style=&quot;color: #707183;&quot;&gt;{}&lt;/span&gt;; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;bad - no info&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
继承 &lt;code&gt;std::exception&lt;/code&gt; 可以灵活的捕获特定异常，或通过 &lt;code&gt;std::exception&lt;/code&gt; 处理异常。
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;MyException&lt;/span&gt; : &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;std&lt;/span&gt;::&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;runtime_error&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;public&lt;/span&gt;:
    &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;MyException&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;string&lt;/span&gt;&amp;amp; &lt;span style=&quot;color: #000000;&quot;&gt;msg&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; : &lt;span style=&quot;color: #110099;&quot;&gt;std&lt;/span&gt;::runtime_error&lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;msg&lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{}&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;...&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;

&lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;...&lt;/span&gt;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;throw&lt;/span&gt; MyException&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;something bad&quot;&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;  &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;good&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
异常并不需要从 &lt;code&gt;std::exception&lt;/code&gt; 继承。
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;MyCustomError&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;final&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{}&lt;/span&gt;;  &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;not derived from std::exception&lt;/span&gt;

&lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;...&lt;/span&gt;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;throw&lt;/span&gt; MyCustomError&lt;span style=&quot;color: #707183;&quot;&gt;{}&lt;/span&gt;;  &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;good - handlers must catch this type (or ...)&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
如果在异常检测点没有额外有用信息要添加的化，可以用 &lt;code&gt;std::exception&lt;/code&gt; 派生的系统库类型处理通用的异常情况。
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;throw&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;std&lt;/span&gt;::runtime_error&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;someting bad&quot;&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;good&lt;/span&gt;

&lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;...&lt;/span&gt;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;throw&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;std&lt;/span&gt;::invalid_argument&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;i is not even&quot;&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;good&lt;/span&gt;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;enum&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;classes&lt;/span&gt; are also &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;allowed&lt;/span&gt;:

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;enum&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; alert &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;RED&lt;/span&gt;, &lt;span style=&quot;color: #000000;&quot;&gt;YELLOW&lt;/span&gt;, &lt;span style=&quot;color: #000000;&quot;&gt;GREEN&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;throw&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;alert&lt;/span&gt;::RED; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;good&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
强化
&lt;/p&gt;

&lt;p&gt;
通过内置类型和 &lt;code&gt;std::exception&lt;/code&gt; 抛出捕获异常。
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>PA-DIM：过程自动化-设备信息模型</title>
   <link href="http://kimi.im/2023-08-05-pa-dim"/>
   <updated>2023-08-05T00:00:00+00:00</updated>
   <id>http://kimi.im/pa-dim</id>
   <content type="html">&lt;p&gt;
工业物联网、工业互联网等概念闹了很久，那么从工业设备角度来看，到底怎么样拥抱这些概念呢？PA-DIM 可能是一个不错的入口。
&lt;/p&gt;

&lt;p&gt;
PA-DIM 的英文全称是Process Automation - Device Information Model，即过程自动化 - 设备信息模型。
&lt;/p&gt;

&lt;p&gt;
首先，我们来回顾一下工业总线的发展历史。
&lt;/p&gt;

&lt;p&gt;
工业上普遍需要测量各种物理量，比如温度、压力、速度、角度、液位高度等。它们都需要转换成模拟量电信号才可以传输到控制室进行显示。工业上最广泛采用的是4-20 mA的电流进行传输。比如，测量范围是 0-100 摄氏度的温度传感器，发送 4mA 信号给控制器，表示 0 摄氏度，发送 20mA 信号给控制器，表示
100 摄氏度。
&lt;/p&gt;

&lt;p&gt;
然而，用电流信号传输数据有很多限制。第一，连线多。控制器和现场设备之间是一对一的连线。距离越远，电路越长，安装成本、空间占用就越大。第二，调试困难。设备和控制室两边要来回对数据。第三，精度低。现场仪表要把物理量转换成电流值，转换过程必定损失一些精度。第四，管理难。控制器只能读到测量数据，没法获取设备标识信息和诊断信息。
&lt;/p&gt;

&lt;p&gt;
为了解决部分问题，上世纪 80 年代，人们想到了个办法，在 4-20mA 的电流信号上叠加一个所谓的 FSK 频移键控信号，使得模拟信号和数字信号互不干扰在同一根物理导线上传输。频移键控就是设定两组不同的信号频率表示数字信号比特位 0 和 1 。这种协议就叫 HART - Highway Addressable Remote
Transducer。
&lt;/p&gt;


&lt;div id=&quot;orgc57ad51&quot; class=&quot;figure&quot;&gt;
&lt;p&gt;&lt;div align=&quot;center&quot;&gt;&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; xmlns:xlink=&quot;http://www.w3.org/1999/xlink&quot; width=&quot;864&quot; height=&quot;577.91998&quot; viewBox=&quot;0 0 864 577.91998&quot;&gt;
&lt;defs&gt;
&lt;g&gt;
&lt;g id=&quot;glyph-0-0&quot;&gt;
&lt;path d=&quot;M 0.34375 -0.53125 C 0.9375 -0.550781 1.359375 -0.632812 1.609375 -0.78125 C 1.992188 -0.988281 2.1875 -1.394531 2.1875 -2 L 2.1875 -12.09375 C 2.1875 -12.695312 2 -13.101562 1.625 -13.3125 C 1.382812 -13.4375 0.957031 -13.519531 0.34375 -13.5625 L 0.34375 -14.09375 L 12.15625 -14.09375 L 12.15625 -9.890625 L 11.65625 -9.890625 C 11.394531 -11.179688 10.957031 -12.085938 10.34375 -12.609375 C 9.738281 -13.128906 8.613281 -13.390625 6.96875 -13.390625 C 6.351562 -13.390625 5.960938 -13.316406 5.796875 -13.171875 C 5.628906 -13.035156 5.546875 -12.78125 5.546875 -12.40625 L 5.546875 -7.578125 C 6.671875 -7.554688 7.429688 -7.789062 7.828125 -8.28125 C 8.234375 -8.78125 8.535156 -9.570312 8.734375 -10.65625 L 9.265625 -10.65625 L 9.265625 -3.609375 L 8.734375 -3.609375 C 8.597656 -4.742188 8.3125 -5.566406 7.875 -6.078125 C 7.445312 -6.597656 6.671875 -6.859375 5.546875 -6.859375 L 5.546875 -2 C 5.546875 -1.351562 5.734375 -0.941406 6.109375 -0.765625 C 6.492188 -0.597656 7.070312 -0.519531 7.84375 -0.53125 L 7.84375 0 L 0.34375 0 Z M 0.34375 -0.53125 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-0-1&quot;&gt;
&lt;path d=&quot;M 0.28125 -0.53125 C 1.082031 -0.539062 1.597656 -0.679688 1.828125 -0.953125 C 2.066406 -1.222656 2.1875 -1.632812 2.1875 -2.1875 L 2.1875 -12.09375 C 2.1875 -12.664062 2.050781 -13.039062 1.78125 -13.21875 C 1.507812 -13.394531 1.03125 -13.507812 0.34375 -13.5625 L 0.34375 -14.09375 L 5.59375 -14.09375 L 9.703125 -4.4375 L 9.875 -4.4375 L 13.953125 -14.09375 L 19.203125 -14.09375 L 19.203125 -13.5625 C 18.503906 -13.507812 18.023438 -13.378906 17.765625 -13.171875 C 17.503906 -12.960938 17.375 -12.457031 17.375 -11.65625 L 17.375 -2.4375 C 17.375 -1.664062 17.503906 -1.160156 17.765625 -0.921875 C 18.023438 -0.691406 18.503906 -0.5625 19.203125 -0.53125 L 19.203125 0 L 12.28125 0 L 12.28125 -0.53125 C 12.894531 -0.550781 13.359375 -0.65625 13.671875 -0.84375 C 13.984375 -1.03125 14.140625 -1.4375 14.140625 -2.0625 L 14.140625 -12.265625 L 14 -12.265625 L 8.875 0 L 8.328125 0 L 3.15625 -12.015625 L 3.0625 -12.015625 L 3.0625 -2.578125 C 3.0625 -1.878906 3.191406 -1.367188 3.453125 -1.046875 C 3.710938 -0.734375 4.28125 -0.5625 5.15625 -0.53125 L 5.15625 0 L 0.28125 0 Z M 0.28125 -0.53125 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-0-2&quot;&gt;
&lt;path d=&quot;M 0.71875 -4.875 L 1.328125 -4.875 C 1.660156 -3.3125 2.207031 -2.175781 2.96875 -1.46875 C 3.726562 -0.769531 4.597656 -0.421875 5.578125 -0.421875 C 6.523438 -0.421875 7.195312 -0.660156 7.59375 -1.140625 C 8 -1.628906 8.203125 -2.140625 8.203125 -2.671875 C 8.203125 -3.296875 7.988281 -3.804688 7.5625 -4.203125 C 7.289062 -4.460938 6.734375 -4.800781 5.890625 -5.21875 L 4.53125 -5.890625 C 3.1875 -6.554688 2.238281 -7.210938 1.6875 -7.859375 C 1.132812 -8.515625 0.859375 -9.320312 0.859375 -10.28125 C 0.859375 -11.300781 1.222656 -12.25 1.953125 -13.125 C 2.691406 -14.007812 3.8125 -14.453125 5.3125 -14.453125 C 6.082031 -14.453125 6.820312 -14.335938 7.53125 -14.109375 C 8.25 -13.878906 8.660156 -13.765625 8.765625 -13.765625 C 8.992188 -13.765625 9.148438 -13.828125 9.234375 -13.953125 C 9.328125 -14.085938 9.40625 -14.265625 9.46875 -14.484375 L 10.078125 -14.484375 L 10.078125 -9.9375 L 9.5 -9.9375 C 9.21875 -10.988281 8.726562 -11.894531 8.03125 -12.65625 C 7.332031 -13.414062 6.476562 -13.796875 5.46875 -13.796875 C 4.757812 -13.796875 4.195312 -13.601562 3.78125 -13.21875 C 3.375 -12.84375 3.171875 -12.378906 3.171875 -11.828125 C 3.171875 -11.171875 3.367188 -10.675781 3.765625 -10.34375 C 4.140625 -10.007812 4.984375 -9.519531 6.296875 -8.875 L 7.859375 -8.109375 C 8.554688 -7.765625 9.113281 -7.378906 9.53125 -6.953125 C 10.300781 -6.171875 10.6875 -5.210938 10.6875 -4.078125 C 10.6875 -3.023438 10.269531 -2.03125 9.4375 -1.09375 C 8.613281 -0.164062 7.285156 0.296875 5.453125 0.296875 C 5.023438 0.296875 4.597656 0.253906 4.171875 0.171875 C 3.742188 0.0976562 3.316406 -0.0195312 2.890625 -0.1875 L 2.484375 -0.34375 C 2.390625 -0.363281 2.296875 -0.378906 2.203125 -0.390625 C 2.117188 -0.410156 2.046875 -0.421875 1.984375 -0.421875 C 1.765625 -0.421875 1.613281 -0.359375 1.53125 -0.234375 C 1.457031 -0.109375 1.390625 0.0664062 1.328125 0.296875 L 0.71875 0.296875 Z M 5.78125 -14.40625 Z M 5.78125 -14.40625 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-0-3&quot;&gt;
&lt;path d=&quot;M 0.28125 -0.53125 C 0.800781 -0.5625 1.179688 -0.632812 1.421875 -0.75 C 1.828125 -0.957031 2.03125 -1.34375 2.03125 -1.90625 L 2.03125 -12.1875 C 2.03125 -12.726562 1.835938 -13.101562 1.453125 -13.3125 C 1.222656 -13.4375 0.832031 -13.519531 0.28125 -13.5625 L 0.28125 -14.09375 L 6.65625 -14.09375 C 9.226562 -14.09375 11.191406 -13.40625 12.546875 -12.03125 C 13.773438 -10.789062 14.390625 -9.113281 14.390625 -7 C 14.390625 -5.113281 13.769531 -3.515625 12.53125 -2.203125 C 11.144531 -0.734375 9.257812 0 6.875 0 L 0.28125 0 Z M 5.390625 -1.921875 C 5.410156 -1.492188 5.488281 -1.1875 5.625 -1 C 5.769531 -0.8125 6.070312 -0.71875 6.53125 -0.71875 C 7.757812 -0.71875 8.769531 -1.148438 9.5625 -2.015625 C 10.363281 -2.890625 10.765625 -4.566406 10.765625 -7.046875 C 10.765625 -8.523438 10.550781 -9.789062 10.125 -10.84375 C 9.425781 -12.550781 8.257812 -13.40625 6.625 -13.40625 C 6.082031 -13.40625 5.726562 -13.289062 5.5625 -13.0625 C 5.445312 -12.90625 5.390625 -12.613281 5.390625 -12.1875 Z M 5.390625 -1.921875 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-0-4&quot;&gt;
&lt;path d=&quot;M 5.453125 -7.046875 C 6.691406 -7.066406 7.519531 -7.207031 7.9375 -7.46875 C 8.59375 -7.894531 8.921875 -8.804688 8.921875 -10.203125 C 8.921875 -11.148438 8.757812 -11.914062 8.4375 -12.5 C 8.125 -13.082031 7.515625 -13.375 6.609375 -13.375 C 6.191406 -13.375 5.894531 -13.320312 5.71875 -13.21875 C 5.539062 -13.125 5.453125 -12.9375 5.453125 -12.65625 Z M 0.34375 -0.53125 C 1.019531 -0.570312 1.472656 -0.710938 1.703125 -0.953125 C 1.941406 -1.203125 2.0625 -1.695312 2.0625 -2.4375 L 2.0625 -11.65625 C 2.0625 -12.4375 1.941406 -12.929688 1.703125 -13.140625 C 1.472656 -13.347656 1.019531 -13.488281 0.34375 -13.5625 L 0.34375 -14.09375 L 7.046875 -14.09375 C 8.828125 -14.09375 10.179688 -13.800781 11.109375 -13.21875 C 12.035156 -12.644531 12.5 -11.65625 12.5 -10.25 C 12.5 -9.570312 12.316406 -8.929688 11.953125 -8.328125 C 11.585938 -7.722656 10.988281 -7.238281 10.15625 -6.875 C 9.519531 -6.613281 8.882812 -6.457031 8.25 -6.40625 C 7.625 -6.351562 6.691406 -6.328125 5.453125 -6.328125 L 5.453125 -2.4375 C 5.453125 -1.664062 5.578125 -1.160156 5.828125 -0.921875 C 6.085938 -0.691406 6.570312 -0.5625 7.28125 -0.53125 L 7.28125 0 L 0.34375 0 Z M 0.34375 -0.53125 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-0-5&quot;&gt;
&lt;path d=&quot;M 8.203125 -4.921875 L 6.203125 -9.75 L 6.03125 -9.75 L 4.140625 -4.921875 Z M 0.375 -0.53125 C 0.875 -0.5625 1.28125 -0.789062 1.59375 -1.21875 C 1.789062 -1.476562 2.070312 -2.0625 2.4375 -2.96875 L 7.0625 -14.375 L 7.65625 -14.375 L 12.296875 -3.421875 C 12.828125 -2.191406 13.21875 -1.398438 13.46875 -1.046875 C 13.726562 -0.691406 14.097656 -0.519531 14.578125 -0.53125 L 14.578125 0 L 7.828125 0 L 7.828125 -0.53125 C 8.503906 -0.5625 8.945312 -0.617188 9.15625 -0.703125 C 9.375 -0.785156 9.484375 -1.007812 9.484375 -1.375 C 9.484375 -1.539062 9.425781 -1.789062 9.3125 -2.125 C 9.25 -2.3125 9.160156 -2.546875 9.046875 -2.828125 L 8.515625 -4.09375 L 3.828125 -4.09375 C 3.523438 -3.269531 3.328125 -2.726562 3.234375 -2.46875 C 3.054688 -1.9375 2.96875 -1.546875 2.96875 -1.296875 C 2.96875 -1.003906 3.164062 -0.789062 3.5625 -0.65625 C 3.800781 -0.582031 4.160156 -0.539062 4.640625 -0.53125 L 4.640625 0 L 0.375 0 Z M 7.65625 -14.40625 Z M 7.65625 -14.40625 &quot;/&gt;
&lt;/g&gt;
&lt;/g&gt;
&lt;clipPath id=&quot;clip-0&quot;&gt;
&lt;path clip-rule=&quot;nonzero&quot; d=&quot;M 432.359375 109.347656 L 603.90625 109.347656 L 603.90625 181.289062 L 432.359375 181.289062 Z M 432.359375 109.347656 &quot;/&gt;
&lt;/clipPath&gt;
&lt;image id=&quot;source-5&quot; x=&quot;0&quot; y=&quot;0&quot; width=&quot;656&quot; height=&quot;604&quot; xlink:href=&quot;data:image/png;base64,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MocpKDkPEAcAEsoXy+rXfcvme0bKU6YjVU0FzstAK8aApcwwFswpI2MRLloipNoQgnCmnAjHQplyJuwb7KO/uDpjUHiwPzZBKKtAGCDq+X5TQFmExbH3m8ufS7meakXQ4PxdKGLcWUKWkCQkCUUbHTu0EI507EjXDt101973/uHn81w+j1fCbowGzRaALImRxEg6adLLenErNAMRtSLTevS9FY4OuNCtV/rAQjROHtrwrLCxERpmjMzAEQus9pTTDh68BtdeDqQtABJAwlUYiuDIAYBVhArLymbRgUYYGSPz6WmOzl0eApTj1CAxDIAUgSAQsZpYTdQBSgmHCef5I17ywgt9lNdLXvj8kPHa1/yni3715S943nPNkRDijgPCPqro02+azeaFF17YaDQ+9KEP+dW3Snu7p2r/11vLVfU3X/ebZ5111uc+97nvfe97AJxzVSc4ruBRu6NlYEc2ZZuydbAZ2YzysBy/ytbicKyW1drCgkUKVmYCkzKIV1EEhaCUCT/STUmEkPtLEQqXl1y4J2T+AyZkoHy/tOv2tczbCRxLxokLZlwwlZmOM5kzyfItZY55EDyIwHYiSYLMcUIQ40LRAYeGY3Gm4+ycs21nYqGskDwKaANZHsKS52NREGmxURGV++jD520QWhrwRjCgQChyppHBAjCaGU18TpuK2LQkyYOAM7IphQk3YhMmbIkMkapRYdo18/CV1173Pz7+9ekF+AmBYzUGWfb739VBttNZeLid9NJMVCEJJCERFhdlvUbatdLFkvH06H/yRypU6NBggA124zNb4SmRGweQmY6YuEfZLEwHbZgbk11XYHoneoAD9mNAYiIgt1uW5ktecn55f8cCURF8GqUlbekLa5Esu/CC8/3s3XPPO294AC//5Rdt2Tj8szvOXtQTHoHB4JhQAQ8SfSlID7scWmldEA8Reec73/npT3/6O9/5zs233HzCCSeMjIx4x29/Sf5XVFV37969adOm3/qt37rxxhtvv/32vhaiYsNfrSVlttGjCRZiLem5wm6ykrQni6/Ewb5RhSlV8QieS0Yc5EkGuH8YVQACOIYQUgDwGSrIsWZ5hUysIAUoERMrk2MBwynAbAhCQkTLb0pI2JMTAYxUfb4DZoUVEMRoxsiM+mSpmcKSNERb+eUAK0MbLFKEZfbX8JiPNkurZyFW4owsAFaiNGlp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SKfTruu2tbUFJw0/GErGK7YFWTolXLZBoeh7+kxgU0qZxgDA87x58+axEJFIZNq0aYQQz/MMwyCE5O38r371K03TjC2RSCQIIXV1dR988EH4dNit5/K5O+6445ZbbtE0rbq6mlKq6VpVVRUh5IYbbrjzzjtRIBHSxX1CSpnNZjVNA4D29va///3vV199dWNjIwlRV1d36aWX3nzzzdls1vM8QgjKyLAY5j73uc8owzLPPPNM0zTxWEppJBL53//93162nq7rTGPz588vabclS5ZA2Rior+qfy+VisVgmk7npppvOP//8VCpVX18fiUQYY1VVVdOmTbvxxhsffujh9vb2kgbsJYEg3HPPPTVdq/ixbRt3MwwDAEzT/POf/2xZFu0FsVjsvPPOc11X1/Ww6JVSYrGe791z7z1nnnlmbW1tbW1tVbIKP/F4/Oqrr37qqafy+bzrutt2dd9eRCX/qX7N13FF37Zn6Nt2Pd8WZJ/COZdSnnPOOSVnmTBhAiptUkrHcXzPnzt3bi9raBgGY2zdunUl51q4cGEikcAdLMuqqqrC/ROJhGmauq4DQDQaXbBgQcmBjuNgPZcsWXLggQdWPCkhJBKJAACl9N5773UcR0qZTqcD1d/3fNd1fc+3bbutre3hhx+mlOJJAcCyLABYvHhxLxvNcZyHHnwIjwqzePFi27axtn1bf9S8b7755mg0intitRljQSGmaQLAjBkzVq5cGWjqW0U6nX7hhRei0Wh3N3fDhg1odAm44447UHj3hrlz53LOfc/nIbCJrrrqquC6uuOoo45auXJlSfP+34ZL6UnpSbltbcJ7PJAHHy453/znDmU7r0hKKaXo5tPlNLzks5317nt6rL+iX9CXAhv79I6OjlNPPbWkZxwzZoyUEsUGfjnttNN60yMH2s/7778fPtfxxx9f0h0HkiaQmkg0Gj399NPLa7tkyZKqqqruZINlWfF4HEszTfOvf/0rXmCJwJNStrW1vf3225RSAIhEIoQQxlg0Gq2vr3/yySd7026ZTOaDDz6or6/H8wYAwN/+9jcppW3b5fJy2+rvuq4QgnMuhJg/f75lWYE0xf2xzePxeLh5hw0btnLlyq15FqSU0vd8KeURRxwRiUS605I/++wz1IallJzzjo6Om266qeQO9sA555wjpczn8yUC+/rrr49EIj2XE4/HdV0fOXJk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&quot;/&gt;
&lt;image id=&quot;source-8&quot; x=&quot;0&quot; y=&quot;0&quot; width=&quot;474&quot; height=&quot;212&quot; xlink:href=&quot;data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEAAAAAAAD/4QAuRXhpZgAATU0AKgAAAAgAAkAAAAMAAAABADIAAEABAAEAAAABAAAAAAAAAAD/2wBDAAoHBwkHBgoJCAkLCwoMDxkQDw4ODx4WFxIZJCAmJSMgIyIoLTkwKCo2KyIjMkQyNjs9QEBAJjBGS0U+Sjk/QD3/2wBDAQsLCw8NDx0QEB09KSMpPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT3/wAARCADUAdoDASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD2WiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACmlgO4pa8r8c6ne23iN44bqWNAo+VTisqtVU1dnZgcFLGVPZxdmep719R+dG9fUfnXhn9s6l/wA/s3/fVH9s6l/z/Tf99VzfXV2PY/1bqfzr7j3PePUfnRvHqPzrwz+2tS/5/pv++qP7a1L/AJ/pv++qf12PYP8AVyp/Oj3PePUfnRvHqPzrwz+29S/5/pv++qP7a1L/AJ/pv++qPrsewf6uVf50e57x6j86N49R+deGf21qX/P9N/31R/bWpf8AP9N/31R9dj2D/Vyp/Oj3PePUfnRvHqPzrwz+29S/5/pv++qP7a1L/n+m/wC+qPrsewf6uVf50e57x6j86N49R+deGf21qX/P9N/31R/bWpf8/wBN/wB9UfXV2D/Vyr/Oj3PePUfnRvHqPzrwz+2tS/5/pv8Avqj+2tS/5/pv++qPrq7B/q5V/nR7nvHqPzo3r6j868M/tvUv+f6b/vqj+2tS/wCf6b/vqj66uwf6uVf50e57x/eH50bx6ivDP7Z1L/n+m/76o/tnUv8An+m/76o+ursH+rdT+dfce57x6j86N49R+deGf21qX/P9N/31R/bepf8AP9N+dH12PYP9XKv86Pc949R+dG8eo/OvDP7a1L/n+m/76o/trUv+f6b/AL6o+ux7B/q5U/nR7mHHqKBIv94V4Z/bepf8/wBN/wB9VueFbfVdc1ABr2cW8Zy7buvtVRxSk7JGVfI5UKbqTmkkesZpgmjZtodS3oDWXrsrwWMUcblA7hGbPQVzUKyLJIVLxeXlhITjdj+ea6JTs7Hk0sP7SPNex3tHeq9lK01nFI4wzKCRVirOZqzsFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFeQ+P/8AkaH/AN0V69XkPj//AJGh/wDdFceM+BHu8Pf738mc3RRRXmH24UUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUqRtK6xxqWdjgAd6ZLaSuy1pmnTapfx2tuMsx5PoK9l0XSIdF0+O2hA+UfM3941leDfDS6LYiWZQbqUZY46e1dMK9XDUeRXe7Ph83zF4mp7OD91fiQ3VrFeQNFMoZW6isxfDsRKLNNJJEhyqHtW1RXQ0nueRGpKKsmIAFAA6AUtFFMgKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAK8h8f/API0P/uivXq8h8f/API0P/uiuPGfAvU93h7/AHv5M5uiiivMPtwooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigA6V3/gHwvnbql7Hz/yxU/zrD8H+Gm1q/EsykWsRyx/vH0r1uONYY1SNQqKMACu7C0L+/L5Hy+eZlyp4ek9er/Qkooor0T5MKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAryHx/wD8jQ/+6K9eryHx/wD8jQ/+6K48Z8C9T3eHv96+TObooorzD7cKKKKACiiigAooo5OAOpOBQAUVcGj6iQCLKYgjIIXrS/2LqX/PjN+VXyS7GH1il/MvvKVFXf7G1L/nxm/Kj+xtS/58Zvyo5Jdg+sUv5l95Soq7/Ympf8+M35Uf2JqX/PjN+VHJLsH1il/MvvKVFXf7G1P/AJ8Zvyo/sbUv+fGb/vmjkl2D6zS/mX3lKirv9jaj/wA+M/8A3zR/Y2o/8+M//fNHJLsH1il/MvvKXeruj6TNrWoJawA8nLMB90UDRNTkZUFlNknHK9K9U8KeHl0LThvANzIMyN/StqNCU5aqyPOzLM4Yel+7acnoael6ZDpNjHbQKAqjr6mr1Jilr1UklZHwspOTcpO7YUUUUyQooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKbJIsaF3YKoHJJxXO33i5AWj023a5cdX6KPxoA6Pn8K8i+IH/I0P/uCtG48U+IL+do7N0RVPzMi8L+PeuavotT1K6mnuZvOljO05GM1hXpupGyPSyvGQwlb2k9rMz6M0bJORj5l6qRgir2k6Rcaw5jtWi81f4HbBNefLDVF0PraOcYWqr81vUo5ozXSf8IDrf8Azxj/AO+qP+EB1v8A54p/31Uewqdjb+0sJ/Ojm80ZrpP+EB1v/njH/wB9Uf8ACA63/wA8Y/8Avqn7Cp2D+0sJ/Ojm6WP/AF0f+8P510f/AAgOtf8APFP++qVPAetCWM+UmAwJ+ahUKl9iZ5lhXFpTR6pYqps4eB9wdvap9i/3R+VR2qGO1iRuqqAamr2ErI/PpyvJ2G7F/uj8qNi/3R+VOopiuN2L/dH5UbF/uj8qdRQFxuxf7o/KjYv90flTqKAuN8tf7o/Kjy1/uj8qdRQF2N2L6D8qdRRQIKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigApk0qwwtI7BUUZJPan1yPjC6kvbmHR7WYxMxDysOcD0oAvRxS+In82ctHYA/JGODJ7n2qvqlulxdR6JpqiIsu64kUfcT0+ppE0fU7aw3/ANtOscaZwIxgYqloOh6rc2z3/wDazxyXTbidgOQOlAG3/YkFlbpDbRhY1GBxnP8A9euIEtna3+oRXEixuJeAe9ddJomrgDOuP/37FebanpV9JrN7hXuSr4aUDrWVabhG6VzswFCnXrKFR2VtybU/sc37y3mXzVHGP4qzHcApNBIYplOQQcEGnHSrxOsDD6iopLeWNwroQzdB61yfWavY9/8AsfBf8/fxPQvCvjyOa2NvrEgSaMcSno4/xrf/AOEw0b/n8SvGihGdwx9atWuj319D51pbNLHnG5RR9Zq/yieTYL/n7+KPW/8AhMNG/wCf1KP+Ew0b/n9SvK/+Ea1b/nwk/Kj/AIRrVv8Anwl/Kj6zV/lF/Y+C/wCfv4o9U/4S/Rv+f1KP+Ev0b/n9SvKv+EZ1b/nwl/Knf8Izq3/PlLR9Zq/yh/Y2C/5+/ij1P/hMNG/5/Uo/4TDRv+f1K8q/4RvVv+fGWj/hGdW/58JPyo+s1f5Q/sbB/wDP38Ueq/8ACYaL/wA/qUf8Jfov/P6leWf8Izq3/PjJTf8AhG9W/wCfGWn9aq/yi/sbB/8AP38Ueq/8Jho3/P6lH/CYaN/z+pXlX/CN6t/z4y0v/CN6t/z4yflR9aq/yj/sbB/8/fxR6p/wmGjf8/qUf8Jho3/P6leV/wDCNat/z4yflSp4Y1Z3C/YZAScZI6UfWav8ov7HwX/P38Ueu6frlhqcrR2c6yOoyQO1aNYfhnw/HoWnKigee/MjeprcxzXbC7V5HzldU41HGm7pC0UUVRkFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAE4BPpXm0F2bvxLe3DHP7wqD9Olejyf6t/oa8YtZr+PULjyDF/rW+99aAPRNXvinhu4Cn5mXaPxrYsdttp9vEvRYl/lXm1/da0+mETG3MW4Zx161tx3niXy0w1ngKMdaAOtkmyeveuRsLmOO81QNIqkzkgE4zQ9z4lP8VpXC6l9pk1W6aYZm3fN5fSs603CN0rnZgcMsTVVNu2m52t1cxHP71PwNc5q8ib4XV1JVsHBzisTZL/dam4buGHPeuX64/5T3f7Ap/8AP0t3m05wQfpXXfDHUkhS9tJ3VEBDpuNcMc980qJI+fLDEjrto+tv+UX9gU/+fp7v9utP+e8P/fQpPt9p/wA/EP8A30K8M8q5/uT/AK0eVc/3Z/1pfXH/ACi/sCn/AM/T3P7fZ/8APxF/30KPt1n/AM/EX/fQrwzyrn+7N+tJ5Nz/AHZv1p/XJfyh/YFP/n6e6fbrT/n4h/76FH260/5+If8AvoV4Z5Nx/dn/AFo8m4/uz/rR9cl/KP8AsCn/AM/f6+89z+3Wf/PxD/30KPt1n/z8Q/8AfQrwzybj+7P+tHk3H92f9aX1x/yi/sCn/wA/f6+89z+32f8Az8Q/99Cj7faf8/EP/fQrwzyrn+7N+tHlXP8Adn/Wn9cf8of2BT/5+nuX2+z4/fxZ/wB4VZBBGQBzXlvgrwzLqF0L288wW8R+VWJ+Y16koCqAOg6V00puau1Y8TG4enh6ns4S5rDqKKK1OMKKKKACiiigAooooAKKKKACiikoAWiiigAoopKAFopKKAFooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooADzx2NeN6pC2meKL2AggGTcue4NeyVwPxJ0SR4o9WtU3PF8soHUr6/hQBiXNz52mSqDyBkfhWxZ3wks4Wz1QVxVvfzmPaI1ZWGDk4qzYajdxRmBYlYxnnJxQB2f2r3rGsZl+03xIU5l7jNU/7SvuP9HT/AL6rClup/tMx3NGzNyqnOKzqzUI3audmBwzxNZU4uztudTNKvov5Vi6k6kwoAOWyQKzvtEx6yt+dMLsSCWJI6e1cv1uPY9z+wav/AD8Jrphzx+Vdp8LrANFeXkyKUYhE3CuEOT15+tTw395bRiO3uZIkBztU4o+tx7EvIKr/AOXiPdPIt/8AnnF/3yKPIt/+eUX/AHyK8P8A7Y1H/n+n/wC+qP7Y1D/n+n/Oj65HsT/q/W/5+I9x8i3/AOecX/fIo8i3/wCecX/fIrw7+2NQ/wCf6f8AOj+19Q/5/Z/++qf1uPYP9X63/PxHuPkW/wDzzi/75FHkW/8Azzi/75FeHf2xqH/P9P8AnR/a+o/8/wBP/wB9Uvrcewf6v1v+fiPcfIt/+ecX/fIo8i3/AOecX/fIrw7+19R/5/p/++qP7Y1H/n+n/wC+qf1uPYP9X63/AD8R7h5EH/POL/vkUq29uekMf/fIrxWzvdXv7pLaC7naSQ4A3dK9d0LTpNM01IZpnllxl2Y5JNa0qqqdDzsdgZYO3NO7fRGiqKgwqhR6AYp1FFdB5gUMcCikf7h+lAHCX3xHNnfzW4st3lsVBz1qL/hZkv8A0Dm/WubQBvHABAINxyD3r10WduB/qIv++BXHTdSpeztZn0OMhhMIoJ07tq+5wh+Jk3/QPf8AWug1DX7lPCg1O2iAlZQQpHStv7Hbf88I/wDvgVU1nUINH0t7mSHfGn8AFbKM0m5SPPdWhVnFUqVnfa97+RjeCvEF/riXBvkVfLI24GM11lc/4Z8RWuvLMba2MPlkZGBzW8WCqSxAHqaqm/dWtznxi/fNcvL5DqKx7vxTpNm5SW8QMOoBzS2XifSr9gkF5GWPQE4zVc8b7mf1erbm5Xb0NY57V5r4g8T6rZ+KWtobgrCHVQoFek5z06V5D4p/5HR/+uiVhiZNRTXc9PJqUKtWSmrpJ7nrkLFoUY9SoJp9RW//AB7x/wC6KhvdUtNPTddTIg92roukrs8rlcpWirluuW8eatd6TpkUllL5bs+CQM5q5H4y0WSQIt4mfesP4jzxXGh27wurqZOoPXisqs04NxZ3YHDSWJhGrF2b6o0fB2qXeo+HpLi7kMkqscMfpXO+G/E+qXvipLS4uS0JZgRjritf4f8A/IqTfVv5VyXhL5fGqf771g5yShruelDD0nLE+6tNvI9gorKvPEulWDbJ7uMN6A5xRZeJNLv22292hbPQnGa6+eO1zwfYVbc3K7ehrUlG7P0qjeaxY2Eipc3CRuRkBjim2krszUXJ2SuX6KjilSeNZI2DIwyCO9SZpiasFFZ8et2Etz9nS5jMucbQ3OavZxmhNMpwlHdWHUVkXvijSrByk95GGHUA5xRZ+KNKvpAkN5GWPQHjNRzxva5f1erbm5Xb0NeijNFWZBRRRQAUUUUAFFFFABRRRQAVHLEk8LxSqGRxtZT3qSigDyTxV4QudCunurBGksWOSAMmP/61c2l0Q4mjIJxhh6176yh1KsAVPBBFchrfw50/Ui0tmxtJTyQo+U/hQB5/HfK4BDcGq0cqmSZmAJLZya2rr4b67aufs5hnTPGDgmufvtNv9LumtrqIJLjJAOQKibil72xrRjVlK1JNvyFuJkAKoBuPTHaoohLM6w26NLKxwFUcmohC3c8nrV7Tr2bS3aS0bZIeN3U1zzr0Y6JXPZoZbj6qu216s9D8I+Bo7O2Nxq6LLcSDiM9EH+NdJ/wjmk/8+MP/AHyK8p/4SzWf+fx6P+Er1j/n9eo+tUux0f2Ljf8An5+LPVf+Ec0n/nxh/Kl/4RzSv+fGH8q8p/4SvWP+f56P+Er1j/n+ej61S7C/sXG/8/PxZ6r/AMI5pP8Az4w/kKP+Ec0n/nxi/wC+a8p/4SvWP+f16cnivWDJGPtr4LAHmn9ap9hPJsalf2n4s9V/4RzSv+fKL/vml/4RvSv+fGH/AL5q5aOz2sTMckoCTU9dSjHseC69VO3M/vMv/hG9J/58Yf8Avmj/AIRvSv8Anxh/75rUop8kewvb1f5n95QtdFsLSUSQWsSOOjBeRV7FFLTSS2IlOUneTuFFFFMkKa/3G+lOpr/db6UDW54tc3K2Xi57hwSsU5Ygd67UfEzTccQzfiK43y1m8a7HUMrXGCDXqi+HdMwCbKLP+7XBQjN35XbU+nzOeGj7P20W3bozn4/iVp0kioIZcsQBxV/xrIJPCc0g6MARWkPD+mKwIs4gRznbWd44AHha4UDAGMCt5KSg+Z30PLpToSxNP2MWtVuYPwu/1d56ZFN8a+Irq41JdH01mXJCuy9WJ7UvwxJW3vvbFcw4urjxdN9lIFyZTsJPQ1z87VGKXU9hUI1Mwqzlb3VdX2udxpHw/sILdZNQDTzMPmy3Aql4m8DWsFlJe6XuikiG4qDwR7Un2HxqR/x8x4+tRy6b4zmiaOSdGRuCM1o1Fxsos4oTrKqqjrrfVX0sX/AHiCXUrd7K6ctLCOCepFcp4p/5HV/+ui10Pg3wrqej601zdqojZCODnmud8U/8js//AF1Ws6jl7JKW9ztwqpfXqjpNNOLemx6PrOsJomg/amwXCgIp7mvPdF0i+8Z6jJcX0zCIH5jn9BW78RnY6VYqPuk8/lWp8PFRfDMZXG5mJatJL2lVReyRxUv9lwTrwXvSdr9hB8PNG8jZsk3f3t3NcZ4q0O70AC3Ery2EhymTnaa9d79a5T4hrG/hpy33lcYq61GPI7aGGXZhW+sRjN3TfUg+H/8AyKk31b+VcBZx3UuuNFYkrPI7Kremetd/8P8A/kVJvq38q53wJHG/i+YyAFhu25+tYSipKmj06NT2U8VO17HR2Pw709IQ1+8k85GWYnvWb4i8Bx2Vs15pLyBo/mKFu3tXofWo5wDC6t0KnOa6pUINbHiU8yxEaik5X8uhxPgLxLLeM2nXz7pVGY2J5IrI+Jn/ACG4P+uZqh4fPleNkEJ481hx6VofErjWoP8ArlXI5t0Xfo7HuwoQp5jGUVZSV7HfeG/+Rfs/+uYrSb7jfSs3w1/yL9n/ANcxWi/3H+ld0PhXofMV/wCNL1f5nkOlf8j4vX/j4Ndr8QNUuNO0UC2Yo0rbSw7CuK0r/ke1/wCu5r0/WtHg1zTntZ+AeVI7GuWipOEknrc97MZ06eJoyqK6SVzh/Bvhaw1iwN5fO00hYjbu6fWug/4QHSkuoriEPG0bbtoPBrlpfDPiHw5O0unyGSIHOUPX6itHRviFMLoWusQ7STt3gYx9aUHCNozVn3FioYitKVbDVOaPZdF6HoK8AAdBxS01HWRAykFWGQRTq7j5wKKKKACiiigAooooAKKKKACiiigAooooAK8h8f8A/I0P/uCvXq8h8f8A/I0P/uCuTGfwz3eHv96fozm6KKK8s+3CiiigAooooAKVP9dF/vikpU/10X++KqO5E/hZ7zZf8eUP+4P5VPUFl/x5Q/7g/lU9e5HZH5hP4n6i0UUUyQooooAKKKKACkf7p+hpaD0oA8aj/wCR6X/r5r2MYwDWAPBemDUxfbX83fv69636woU3C9+rPSzHGQxPJy9FYWud8df8ixP+FdEKp6ppsGq2T2twCY364NazjeLSOPDVFSqxm9k7nFfDDHl3n1FZvjDR7nRNeGqWykwuwYMB90132i+HrPQlkFmpHmHLZNaE0EdxEY5kV0PUMOtYKg3TUW9UelLM1HFyrQV4vRryOc0bxzpt9AonlEEwHzK1acvibSYkLNfQ4A7Gsy8+H2j3TlgjxMTzsaoY/hvpEbZYyuPQtTTrJbIzlHASfMnJeVjotN1O31W1+0Wb74ySob1xXlfin/kdH/66LXq2n6fbaZaLb2kYjiXkAVk33g3TdQ1I3syv5pIJwfSirTlOKXW4YDGUsLWnLWzTSI/FOjNrXh0JCMzRqHQepxXG+EPE/wDYE0llqCssJbnI5Q16oiBUCjoBisbVvCemau2+eHa56svFFSk21OO6HhcdTVJ4eum4N303RJ/wlOkeT5v22Lbj1rg/GPiI69CVskb7DC3zSkYDGuii+G+ko4LNM6g5wTxW1ceGNNudLFh5QS364XilKNWcWnZF0a2DwtVVKd5W79DD+H+f+EVm+rfyrhdLurmx1+S6tEMjROzMo7r3r1zS9GttHsja2oIiY9zVPTvCOm6bfSXcCEyPnOTkc0pUJNRSexpSzKlCdaTV1PZDdP8AGOlX8Ic3CRNj5lfgisvxL43soLOS30+UTTuNoK9Fq5qPgLStQmMmwxMTk7OM0yy+H2k2kokdXmIPAY8VTVVq2nqYU3l8Wqjbfl/wTnvh9oc02oNqlwpCL9wkfeJ6mrXxM0yRhBfxqSifK5Hau9hijgQJEgRQOABRPBFcxNHMgdG6qR1p+wSp8gnmk3i1iLaLS3kcV4N8X2KaXHaXsywyRcKW6MK0Na8a2FtA0VlJ9ouZBtRUGeaiuvh1pVxOXXfGCeVDcVf0rwdpekSebFDvkHRnOTUxVVLldvU0rVMBKbrK93rbpc848PiT/hMLf7QMSmQlge1eqarrtloqxm9l2CQ4XAqnH4Q02PVTqO1/PLbs7uM1c1fQrLW4VS8j3bfukdqdKnKnFpb3JxuMo4urCUk0krManiHS5Y963sRXHc15r4vurXWNfUaWoc8KSg+8a64/DXSi2RJMB6bq1dJ8J6Zo7+ZbwhpOzNyRUzhOp7skkjTD4jCYOTqUm5O1knsXtIgkt9Lt45c71QBs1eo6UV0pWVjx5y5pOXcKKKKZIUUUUAFFFFABRRRQAUUUUAFFFFABXkPxA/5Gh/8AcFevV5D4/wA/8JQ/B+4O1cmM+Bep7vD3+9P0ZzdFJn2b8qM+zflXm2PteZC0UZ9j+VJn2b8qLD5kLRSZ9j+VGfY/lRYOZC0qf66L/fFNz7N+VOjP76Pg/fHahaMiclys95sv+PKH/cH8qnqCy/48of8AcFT17kdkfmM/ifqLRRRTJCiiigAooooAKa33T9KdTX+4fpQNHHabc3+pz3jNqn2cRylFXArqrJXjtI1lm85gOZPWuT8N6NbX76i93Exb7QwHJHFdhDClvCsUQwijAFZ0k7anZjJQ5uWPl0FkkWNC0jBVAySaxz4r00N99zHnHmBDt/Op/EVtLdaHcx24JkK8AHrWFHq2nJ4X+ymI+eI/LMGznd0onJp2RFGjGcOZq7vb08zro5EmjDowZGGQR3ptxPHaW8k0p2xxruY+grO8MWs1noNtDc5EiryD2qzrMDz6RdxIMs8ZAFVd8pi4JVOW+l9xU1O1fTft6yZt9u7djtU1rcxXdsk8J3RyDKn1ri4dXhXwY9htc3KRlGj2nIP+FdN4cUjw/ZAggiMZBqYybdjatQVODl52+RcvLuGxtnnuH2RIPmNZa+K9N3oPNbY5AEhU7efel8XKX8OXSgEkjoBWbqtqn/CBKFhG4RKQoHeiTab9B0aVOUU5bt2OsVg6gg5B70yeaO3haWZwkaDLEnpVfSt39lWu7OfLXOfpWf4utp7rQJktwWYEMVH8QB5FU3ZXRhCmpVeRvS9ihrPiu0fR7k2ksiPtwkm0gfga3NFkebR7WSRiztGCSe9cvqmraddeFWhtomaUx48oJypHtXT6GpXRbMEEERjg1nFtz1fQ668Ixoqys7l2aVYYmkfO1Rk4FZlv4jsZ7lIN0kbycJvQru/OpNfvJ7DR557aPzJVHC4rjL+YXB02RbmS4laVSwCYC1U58rsRhsPGom5HolY/iHxAuh2yOY2kZ2C4ArXQYVfpXP8AjSMtoocIWEcqs2BkgZp1G1HTcyw0YyqxjLY19Pv49QgEsQYDodwxUt0+y1lYkrtU8jtUGl3kF7YxyW7Bkx2FSagM6fP/ANc24/Cn0uQ0lUtayuVNAuRd6THKJXlBJ+Zxyea0ncIu5iAoGST2rE8Ghl8Ow7gQdzZBHvVvxBby3eiXUNvnzWjOMHGaUW+VMupBe2cL6XKzeK9NRj87mNTgyBDtH41sRSpNGskTBlYZBB61x9tq2nw+F/sskRE6x+W0G3kt0ra8K2s1poNvFcgiQAnB7ClGTbNK1GMYtrRp29TSurqKyt3nnfbEgyxrK/4SzTMp+8by34Emw7fzqXxSpbw5e4BJMZwAKyb61QfDzCxYYQA4A5B/xolJpsVGlTcE5bt2OrR1dQynKnkGn1n6Ln+x7XdnPlr1+laFWnoc0lyyaCiiimIKKKKACiiigAooooAKKKKACiiigAqpPp1rcPvlgjd+mWXJq3RSaTGpOLunYpf2PYf8+kX/AHzR/Y9h/wA+kX/fNXaKXKuxftqn8z+8pf2PYf8APpF/3zR/Y9h/z6Rf981doo5V2D2tT+Z/eUv7HsP+fSL/AL5o/sfT/wDn0i/75q7RRyrsHtan8z+8pf2PYf8APpF/3zR/Y+n9fskX/fNXaKOVdg9rU/mf3iABVAAwB0ApaKKozCiiigAooooAKKKKACiiigBqxqmdqgZOTgdadRRQAVD9kh8zzPJTf67RmpqKVhptbBSUtFMRD9mhDlxEm49TtGTUoUKAAAAOgFLRSsNtvcRlDAhgCD1BFIY1KbSqlfQjinUUxCAADAGB7UtFFAEK2kCsWEMYY9SFHNShQAABgDoBS0UWG23uNKhhgjI9DUa20CZ2QouTnhRU1FKwXaCmsodSrAEHqCM06imIZHEkSbY0VF9AKdgHrS0UANVAowoAHoBTqKKAITaQGTzDDGX/AL20ZqbFFFA229xGUMCGAIPUEUnlrs27RtxjGOKdRQIQKAAAMAdhS0UUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAf/Z&quot;/&gt;
&lt;image id=&quot;source-11&quot; x=&quot;0&quot; y=&quot;0&quot; width=&quot;790&quot; height=&quot;226&quot; xlink:href=&quot;data:image/png;base64,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&quot;/&gt;
&lt;image id=&quot;source-14&quot; x=&quot;0&quot; y=&quot;0&quot; width=&quot;2362&quot; height=&quot;724&quot; xlink:href=&quot;data:image/jpeg;base64,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GiYnKCkqNTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqCg4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2dri4+Tl5ufo6ery8/T19vf4+fr/2gAMAwEAAhEDEQA/AP76KKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAr5g/bc+NXir9mz9jD9rr9orwLp/h/VfG3wC/Zh+Pnxq8HaX4rtNRvvC2peKfhZ8KvFnjnw9p/iWx0jVdC1a88P3mraFZ2+s2ul65o+o3GmyXUNjqunXTw3cP0/XwF/wAFX/8AlFp/wUq/7MC/bH/9Z2+I1AH8Bf8AxGn/APBUv/ogn7AX/hrf2if/AKKmj/iNP/4Kl/8ARBP2Av8Aw1v7RP8A9FTX8hFFAH9e/wDxGn/8FS/+iCfsBf8Ahrf2if8A6Kmj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ACxv/wAMKP8Ahgz/AKqr/wCWN/8AhhX6GUUAfnn/AMMGf9VV/wDLG/8Awwo/4YM/6qr/AOWN/wDhhX6GUUAfGvwp/ZK/4Vj4+0Hxx/wn/wDbf9if2p/xK/8AhFP7N+0/2lo2paPj7afEl/5Hkf2h9pP+iTeb5XkjZv8ANT7KoooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKK8f+NX7QnwE/Zs8Laf45/aK+N/wg+AXgnVtftfCel+MfjV8SvBnws8K6l4qvtO1XWLLw1YeIPHWtaDpN54gvNJ0HXNUtdGt7uTUrnTdH1W+htnttOvJYfkHxZ/wWE/4JSeC/C3ibxhrH/BSH9iK90jwnoGseJdTtPCf7Tfwg8e+KbrTtC0651S+tvDXgbwL4t8ReNvGmvzWtrJFo3hPwf4f17xV4j1J7bR/D2japq95Z2M4B+j1FfgL/wARRH/BCv8A6Pk/81n/AGwv/ofqP+Ioj/ghX/0fJ/5rP+2F/wDQ/UAfv1RX5B/A3/gvp/wRx/aH/wCEo/4QD/goP8APD/8AwiH9i/2t/wALz1fXf2YPtf8Ab/8Aa/2D/hFv+GltB+Ev/CcfZ/7EvP7bPgv/AISD/hGfO0j/AISMaV/wkGg/2l9ffC7/AIKD/sD/ABw8daF8Lvgr+2/+yF8YPiZ4o/tIeGvh38Lv2lfgx8QPHfiL+xNH1DxFrP8AYfhLwn401bX9W/snw/pOq65qn2DT7j7Bo+m6hqdz5NnZ3E0YB9fUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFF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5+Mvxy+JfhWfxVp2nNo48S6N4e+LnxK8e6T4T1/VNJTT9L8S6z4Ts9E1Lxbpug+E7HxTc6xa+D/C0OjgH29RRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAf/Z&quot;/&gt;
&lt;clipPath id=&quot;clip-1&quot;&gt;
&lt;path clip-rule=&quot;nonzero&quot; d=&quot;M 583.433594 410.058594 L 784.867188 410.058594 L 784.867188 493.292969 L 583.433594 493.292969 Z M 583.433594 410.058594 &quot;/&gt;
&lt;/clipPath&gt;
&lt;image id=&quot;source-17&quot; x=&quot;0&quot; y=&quot;0&quot; width=&quot;2400&quot; height=&quot;2400&quot; xlink:href=&quot;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAACWAAAAlgCAIAAACDL5s5AAAABmJLR0QA/wD/AP+gvaeTAAAgAElEQVR4nOzZMQEAIAzAMMC/5+ECjiYK+nfPzAIAAAAAAAAazu8AAAAAAAAA4B2DEAAAAAAAAEIMQgAAAAAAAAgxCAEAAAAAACDEIAQAAAAAAIAQgxAAAAAAAABCDEIAAAAAAAAIMQgBAAAAAAAgxCAEAAAAAACAEIMQAAAAAAAAQgxCAAAAAAAACDEIAQAAAAAAIMQgBAAAAAAAgBCDEAAAAAAAAEIMQgAAAAAAAAgxCAEAAAAAACDEIAQAAAAAAIAQgxAAAAAAAABCDEIAAAAAAAAIMQgBAAAAAAAgxCAEAAAAAACAEIMQAAAAAAAAQgxCAAAAAAAACDEIAQAAAAAAIMQgBAAAAAAAgBCDEAAAAAAAAEIMQgAAAAAAAAgxCAEAAAAAACDEIAQAAAAAAIAQgxAAAAAAAABCDEIAAAAAAAAIMQgBAAAAAAAgxCAEAAAAAACAEIMQAAAAAAAAQgxCAAAAAAAACDEIAQAAAAAAIMQgBAAAAAAAgBCDEAAAAAAAAEIMQgAAAAAAAAgxCAEAAAAAACDEIAQAAAAAAIAQgxAAAAAAAABCDEIAAAAAAAAIMQgBAAAAAAAgxCAEAAAAAACAEIMQAAAAAAAAQgxCAAAAAAAACDEIAQAAAAAAIMQgBAAAAAAAgBCDEAAAAAAAAEIMQgAAAAAAAAgxCAEAAAAAACDEIAQAAAAAAIAQgxAAAAAAAABCDEIAAAAAAAAIMQgBAAAAAAAgxCAEAAAAAACAEIMQAAAAAAAAQgxCAAAAAAAACDEIAQAAAAAAIMQgBAAAAAAAgBCDEAAAAAAAAEIMQgAAAAAAAAgxCAEAAAAAACDEIAQAAAAAAIAQgxAAAAAAAABCDEIAAAAAAAAIMQgBAAAAAAAgxCAEAAAAAACAEIMQAAAAAAAAQgxCAAAAAAAACDEIAQAAAAAAIMQgBAAAAAAAgBCDEAAAAAAAAEIMQgAAAAAAAAgxCAEAAAAAACDEIAQAAAAAAIAQgxAAAAAAAABCDEIAAAAAAAAIMQgBAAAAAAAgxCAEAAAAAACAEIMQAAAAAAAAQgxCAAAAAAAACDEIAQAAAAAAIMQgBAAAAAAAgBCDEAAAAAAAAEIMQgAAAAAAAAgxCAEAAAAAACDEIAQAAAAAAIAQgxAAAAAAAABCDEIAAAAAAAAIMQgBAAAAAAAgxCAEAAAAAACAEIMQAAAAAAAAQgxCAAAAAAAACDEIAQAAAAAAIMQgBAAAAAAAgBCDEAAAAAAAAEIMQgAAAAAAAAgxCAEAAAAAACDEIAQAAAAAAIAQgxAAAAAAAABCDEIAAAAAAAAIMQgBAAAAAAAgxCAEAAAAAACAEIMQAAAAAAAAQgxCAAAAAAAACDEIAQAAAAAAIMQgBAAAAAAAgBCDEAAAAAAAAEIMQgAAAAAAAAgxCAEAAAAAACDEIAQAAAAAAIAQgxAAAAAAAABCDEIAAAAAAAAIMQgBAAAAAAAgxCAEAAAAAACAEIMQAAAAAAAAQgxCAAAAAAAACDEIAQAAAAAAIMQgBAAAAAAAgBCDEAAAAAAAAEIMQgAAAAAAAAgxCAEAAAAAACDEIAQAAAAAAIAQgxAAAAAAAABCDEIAAAAAAAAIMQgBAAAAAAAgxCAEAAAAAACAEIMQAAAAAAAAQgxCAAAAAAAACDEIAQAAAAAAIMQgBAAAAAAAgBCDEAAAAAAAAEIMQgAAAAAAAAgxCAEAAAAAACDEIAQAAAAAAIAQgxAAAAAAAABCDEIAAAAAAAAIMQgBAAAAAAAgxCAEAAAAAACAEIMQAAAAAAAAQgxCAAAAAAAACDEIAQAAAAAAIMQgBAAAAAAAgBCDEAAAAAAAAEIMQgAAAAAAAAgxCAEAAAAAACDEIAQAAAAAAIAQgxAAAAAAAABCDEIAAAAAAAAIMQgBAAAAAAAgxCAEAAAAAACAEIMQAAAAAAAAQgxCAAAAAAAACDEIAQAAAAAAIMQgBAAAAAAAgBCDEAAAAAAAAEIMQgAAAAAAAAgxCAEAAAAAACDEIAQAAAAAAIAQgxAAAAAAAABCDEIAAAAAAAAIMQgBAAAAAAAgxCAEAAAAAACAEIMQAAAAAAAAQgxCAAAAAAAACDEIAQAAAAAAIMQgBAAAAAAAgBCDEAAAAAAAAEIMQgAAAAAAAAgxCAEAAAAAACDEIAQAAAAAAIAQgxAAAAAAAABCDEIAAAAAAAAIMQgBAAAAAAAgxCAEAAAAAACAEIMQAAAAAAAAQgxCAAAAAAAACDEIAQAAAAAAIMQgBAAAAAAAgBCDEAAAAAAAAEIMQgAAAAAAAAgxCAEAAAAAACDEIAQAAAAAAIAQgxAAAAAAAABCDEIAAAAAAAAIMQgBAAAAAAAgxCAEAAAAAACAEIMQAAAAAAAAQgxCAAAAAAAACDEIAQAAAAAAIMQgBAAAAAAAgBCDEAAAAAAAAEIMQgAAAAAAAAgxCAEAAAAAACDEIAQAAAAAAIAQgxAAAAAAAABCDEIAAAAAAAAIMQgBAAAAAAAgxCAEAAAAAACAEIMQAAAAAAAAQgxCAAAAAAAACDEIAQAAAAAAIMQgBAAAAAAAgBCDEAAAAAAAAEIMQgAAAAAAAAgxCAEAAAAAACDEIAQAAAAAAIAQgxAAAAAAAABCDEIAAAAAAAAIMQgBAAAAAAAgxCAEAAAAAACAEIMQAAAAAAAAQgxCAAAAAAAACDEIAQAAAAAAIMQgBAAAAAAAgBCDEAAAAAAAAEIMQgAAAAAAAAgxCAEAAAAAACDEIAQAAAAAAIAQgxAAAAAAAABCDEIAAAAAAAAIMQgBAAAAAAAgxCAEAAAAAACAEIMQAAAAAAAAQgxCAAAAAAAACDEIAQAAAAAAIMQgBAAAAAAAgBCDEAAAAAAAAEIMQgAAAAAAAAgxCAEAAAAAACDEIAQAAAAAAIAQgxAAAAAAAABCDEIAAAAAAAAIMQgBAAAAAAAgxCAEAAAAAACAEIMQAAAAAAAAQgxCAAAAAAAACDEIAQAAAAAAIMQgBAAAAAAAgBCDEAAAAAAAAEIMQgAAAAAAAAgxCAEAAAAAACDEIAQAAAAAAIAQgxAAAAAAAABCDEIAAAAAAAAIMQgBAAAAAAAgxCAEAAAAAACAEIMQAAAAAAAAQgxCAAAAAAAACDEIAQAAAAAAIMQgBAAAAAAAgBCDEAAAAAAAAEIMQgAAAAAAAAgxCAEAAAAAACDEIAQAAAAAAIAQgxAAAAAAAABCDEIAAAAAAAAIMQgBAAAAAAAgxCAEAAAAAACAEIMQAAAAAAAAQgxCAAAAAAAACDEIAQAAAAAAIMQgBAAAAAAAgBCDEAAAAAAAAEIMQgAAAAAAAAgxCAEAAAAAACDEIAQAAAAAAIAQgxAAAAAAAABCDEIAAAAAAAAIMQgBAAAAAAAgxCAEAAAAAACAEIMQAAAAAAAAQgxCAAAAAAAACDEIAQAAAAAAIMQgBAAAAAAAgBCDEAAAAAAAAEIMQgAAAAAAAAgxCAEAAAAAACDEIAQAAAAAAIAQgxAAAAAAAABCDEIAAAAAAAAIMQgBAAAAAAAgxCAEAAAAAACAEIMQAAAAAAAAQgxCAAAAAAAACDEIAQAAAAAAIMQgBAAAAAAAgBCDEAAAAAAAAEIMQgAAAAAAAAgxCAEAAAAAACDEIAQAAAAAAIAQgxAAAAAAAABCDEIAAAAAAAAIMQgBAAAAAAAgxCAEAAAAAACAEIMQAAAAAAAAQgxCAAAAAAAACDEIAQAAAAAAIMQgBAAAAAAAgBCDEAAAAAAAAEIMQgAAAAAAAAgxCAEAAAAAACDEIAQAAAAAAIAQgxAAAAAAAABCDEIAAAAAAAAIMQgBAAAAAAAgxCAEAAAAAACAEIMQAAAAAAAAQgxCAAAAAAAACDEIAQAAAAAAIMQgBAAAAAAAgBCDEAAAAAAAAEIMQgAAAAAAAAgxCAEAAAAAACDEIAQAAAAAAIAQgxAAAAAAAABCDEIAAAAAAAAIMQgBAAAAAAAgxCAEAAAAAACAEIMQAAAAAAAAQgxCAAAAAAAACDEIAQAAAAAAIMQgBAAAAAAAgBCDEAAAAAAAAEIMQgAAAAAAAAgxCAEAAAAAACDEIAQAAAAAAIAQgxAAAAAAAABCDEIAAAAAAAAIMQgBAAAAAAAgxCAEAAAAAACAEIMQAAAAAAAAQgxCAAAAAAAACDEIAQAAAAAAIMQgBAAAAAAAgBCDEAAAAAAAAEIMQgAAAAAAAAgxCAEAAAAAACDEIAQAAAAAAIAQgxAAAAAAAABCDEIAAAAAAAAIMQgBAAAAAAAgxCAEAAAAAACAEIMQAAAAAAAAQgxCAAAAAAAACDEIAQAAAAAAIMQgBAAAAAAAgBCDEAAAAAAAAEIMQgAAAAAAAAgxCAEAAAAAACDEIAQAAAAAAIAQgxAAAAAAAABCDEIAAAAAAAAIMQgBAAAAAAAgxCAEAAAAAACAEIMQAAAAAAAAQgxCAAAAAAAACDEIAQAAAAAAIMQgBAAAAAAAgBCDEAAAAAAAAEIMQgAAAAAAAAgxCAEAAAAAACDEIAQAAAAAAIAQgxAAAAAAAABCDEIAAAAAAAAIMQgBAAAAAAAgxCAEAAAAAACAEIMQAAAAAAAAQgxCAAAAAAAACDEIAQAAAAAAIMQgBAAAAAAAgBCDEAAAAAAAAEIMQgAAAAAAAAgxCAEAAAAAACDEIAQAAAAAAIAQgxAAAAAAAABCDEIAAAAAAAAIMQgBAAAAAAAgxCAEAAAAAACAEIMQAAAAAAAAQgxCAAAAAAAACDEIAQAAAAAAIMQgBAAAAAAAgBCDEAAAAAAAAEIMQgAAAAAAAAgxCAEAAAAAACDEIAQAAAAAAIAQgxAAAAAAAABCDEIAAAAAAAAIMQgBAAAAAAAgxCAEAAAAAACAEIMQAAAAAAAAQgxCAAAAAAAACDEIAQAAAAAAIMQgBAAAAAAAgBCDEAAAAAAAAEIMQgAAAAAAAAgxCAEAAAAAACDEIAQAAAAAAIAQgxAAAAAAAABCDEIAAAAAAAAIMQgBAAAAAAAgxCAEAAAAAACAEIMQAAAAAAAAQgxCAAAAAAAACDEIAQAAAAAAIMQgBAAAAAAAgBCDEAAAAAAAAEIMQgAAAAAAAAgxCAEAAAAAACDEIAQAAAAAAIAQgxAAAAAAAABCDEIAAAAAAAAIMQgBAAAAAAAgxCAEAAAAAACAEIMQAAAAAAAAQgxCAAAAAAAACDEIAQAAAAAAIMQgBAAAAAAAgBCDEAAAAAAAAEIMQgAAAAAAAAgxCAEAAAAAACDEIAQAAAAAAIAQgxAAAAAAAABCDEIAAAAAAAAIMQgBAAAAAAAgxCAEAAAAAACAEIMQAAAAAAAAQgxCAAAAAAAACDEIAQAAAAAAIMQgBAAAAAAAgBCDEAAAAAAAAEIMQgAAAAAAAAgxCAEAAAAAACDEIAQAAAAAAIAQgxAAAAAAAABCDEIAAAAAAAAIMQgBAAAAAAAgxCAEAAAAAACAEIMQAAAAAAAAQgxCAAAAAAAACDEIAQAAAAAAIMQgBAAAAAAAgBCDEAAAAAAAAEIMQgAAAAAAAAgxCAEAAAAAACDEIAQAAAAAAIAQgxAAAAAAAABCDEIAAAAAAAAIMQgBAAAAAAAgxCAEAAAAAACAEIMQAAAAAAAAQgxCAAAAAAAACDEIAQAAAAAAIMQgBAAAAAAAgBCDEAAAAAAAAEIMQgAAAAAAAAgxCAEAAAAAACDEIAQAAAAAAIAQgxAAAAAAAABCDEIAAAAAAAAIMQgBAAAAAAAgxCAEAAAAAACAEIMQAAAAAAAAQgxCAAAAAAAACDEIAQAAAAAAIMQgBAAAAAAAgBCDEAAAAAAAAEIMQgAAAAAAAAgxCAEAAAAAACDEIAQAAAAAAIAQgxAAAAAAAABCDEIAAAAAAAAIMQgBAAAAAAAgxCAEAAAAAACAEIMQAAAAAAAAQgxCAAAAAAAACDEIAQAAAAAAIMQgBAAAAAAAgBCDEAAAAAAAAEIMQgAAAAAAAAgxCAEAAAAAACDEIAQAAAAAAIAQgxAAAAAAAABCDEIAAAAAAAAIMQgBAAAAAAAgxCAEAAAAAACAEIMQAAAAAAAAQgxCAAAAAAAACDEIAQAAAAAAIMQgBAAAAAAAgBCDEAAAAAAAAEIMQgAAAAAAAAgxCAEAAAAAACDEIAQAAAAAAIAQgxAAAAAAAABCDEIAAAAAAAAIMQgBAAAAAAAgxCAEAAAAAACAEIMQAAAAAAAAQgxCAAAAAAAACDEIAQAAAAAAIMQgBAAAAAAAgBCDEAAAAAAAAEIMQgAAAAAAAAgxCAEAAAAAACDEIAQAAAAAAIAQgxAAAAAAAABCDEIAAAAAAAAIMQgBAAAAAAAgxCAEAAAAAACAEIMQAAAAAAAAQgxCAAAAAAAACDEIAQAAAAAAIMQgBAAAAAAAgBCDEAAAAAAAAEIMQgAAAAAAAAgxCAEAAAAAACDEIAQAAAAAAIAQgxAAAAAAAABCDEIAAAAAAAAIMQgBAAAAAAAgxCAEAAAAAACAEIMQAAAAAAAAQgxCAAAAAAAACDEIAQAAAAAAIMQgBAAAAAAAgBCDEAAAAAAAAEIMQgAAAAAAAAgxCAEAAAAAACDEIAQAAAAAAIAQgxAAAAAAAABCDEIAAAAAAAAIMQgBAAAAAAAgxCAEAAAAAACAEIMQAAAAAAAAQgxCAAAAAAAACDEIAQAAAAAAIMQgBAAAAAAAgBCDEAAAAAAAAEIMQgAAAAAAAAgxCAEAAAAAACDEIAQAAAAAAIAQgxAAAAAAAABCDEIAAAAAAAAIMQgBAAAAAAAgxCAEAAAAAACAEIMQAAAAAAAAQgxCAAAAAAAACDEIAQAAAAAAIMQgBAAAAAAAgBCDEAAAAAAAAEIMQgAAAAAAAAgxCAEAAAAAACDEIAQAAAAAAIAQgxAAAAAAAABCDEIAAAAAAAAIMQgBAAAAAAAgxCAEAAAAAACAEIMQAAAAAAAAQgxCAAAAAAAACDEIAQAAAAAAIMQgBAAAAAAAgBCDEAAAAAAAAEIMQgAAAAAAAAgxCAEAAAAAACDEIAQAAAAAAIAQgxAAAAAAAABCDEIAAAAAAAAIMQgBAAAAAAAgxCAEAAAAAACAEIMQAAAAAAAAQgxCAAAAAAAACDEIAQAAAAAAIMQgBAAAAAAAgBCDEAAAAAAAAEIMQgAAAAAAAAgxCAEAAAAAACDEIAQAAAAAAIAQgxAAAAAAAABCDEIAAAAAAAAIMQgBAAAAAIDL3p02uXGc6Rp+qgA0d1GLPf//j53jsWxLokj2vgCoyszzAQUuM8fj8ARJkMrrCkQHGqSpdIOKVvQdb75ARwRCAAAAAAAA6IhACAAAAAAAAB0RCAEAAAAAAKAjAiEAAAAAAAB0RCAEAAAAAACAjgiEAAAAAAAA0BGBEAAAAAAAADoiEAIAAAAAAEBHBEIAAAAAAADoiEAIAAAAAAAAHREIAQAAAAAAoCMCIQAAAAAAAHREIAQAAAAAAICOCIQAAAAAAADQEYEQAAAAAAAAOiIQAgAAAAAAQEcEQgAAAAAAAOiIQAgAAAAAAAAdEQgBAAAAAACgIwIhAAAAAAAAdEQgBAAAAAAAgI4IhAAAAAAAANARgRAAAAAAAAA6IhACAAAAAABARwRCAAAAAAAA6IhACAAAAAAAAB0RCAEAAAAAAKAjAiEAAAAAAAB0RCAEAAAAAACAjgiEAAAAAAAA0BGBEAAAAAAAADoiEAIAAAAAAEBHBEIAAAAAAADoiEAIAAAAAAAAHREIAQAAAAAAoCMCIQAAAAAAAHREIAQAAAAAAICOCIQAAAAAAADQEYEQAAAAAAAAOiIQAgAAAAAAQEcEQgAAAAAAAOiIQAgAAAAAAAAdEQgBAAAAAACgIwIhAAAAAAAAdEQgBAAAAAAAgI4IhAAAAAAAANARgRAAAAAAAAA6IhACAAAAAABARwRCAAAAAAAA6IhACAAAAAAAAB0RCAEAAAAAAKAjAiEAAAAAAAB0RCAEAAAAAACAjgiEAAAAAAAA0BGBEAAAAAAAADoiEAIAAAAAAEBHBEIAAAAAAADoiEAIAAAAAAAAHREIAQAAAAAAoCMCIQAAAAAAAHREIAQAAAAAAICOCIQAAAAAAADQEYEQAAAAAAAAOiIQAgAAAAAAQEcEQgAAAAAAAOiIQAgAAAAAAAAdEQgBAAAAAACgIwIhAAAAAAAAdEQgBAAAAAAAgI4IhAAAAAAAANARgRAAAAAAAAA6IhACAAAAAABARwRCAAAAAAAA6IhACAAAAAAAAB0RCAEAAAAAAKAjAiEAAAAAAAB0RCAEAAAAAACAjgiEAAAAAAAA0BGBEAAAAAAAADoiEAIAAAAAAEBHBEIAAAAAAADoiEAIAAAAAAAAHREIAQAAAAAAoCMCIQAAAAAAAHREIAQAAAAAAICOCIQAAAAAAADQEYEQAAAAAAAAOiIQAgAAAAAAQEcEQgAAAAAAAOiIQAgAAAAAAAAdEQgBAAAAAACgIwIhAAAAAAAAdEQgBAAAAAAAgI4IhAAAAAAAANARgRAAAAAAAAA6IhACAAAAAABARwRCAAAAAAAA6IhACAAAAAAAAB0RCAEAAAAAAKAjAiEAAAAAAAB0RCAEAAAAAACAjgiEAAAAAAAA0BGBEAAAAAAAADoiEAIAAAAAAEBHBEIAAAAAAADoiEAIAAAAAAAAHREIAQAAAAAAoCMCIQAAAAAAAHREIAQAAAAAAICOCIQAAAAAAADQEYEQAAAAAAAAOiIQAgAAAAAAQEcEQgAAAAAAAOiIQAgAAAAAAAAdEQgBAAAAAACgIwIhAAAAAAAAdEQgBAAAAAAAgI4IhAAAAAAAANARgRAAAAAAAAA6IhACAAAAAABARwRCAAAAAAAA6IhACAAAAAAAAB0RCAEAAAAAAKAjAiEAAAAAAAB0RCAEAAAAAACAjgiEAAAAAAAA0BGBEAAAAAAAADoiEAIAAAAAAEBHBEIAAAAAAADoiEAIAAAAAAAAHREIAQAAAAAAoCMCIQAAAAAAAHREIAQAAAAAAICOCIQAAAAAAADQEYEQAAAAAAAAOiIQAgAAAAAAQEcEQgAAAAAAAOiIQAgAAAAAAAAdEQgBAAAAAACgIwIhAAAAAAAAdEQgBAAAAAAAgI4IhAAAAAAAANARgRAAAAAAAAA6IhACAAAAAABARwRCAAAAAAAA6IhACAAAAAAAAB0RCAEAAAAAAKAjAiEAAAAAAAB0RCAEAAAAAACAjgiEAAAAAAAA0BGBEAAAAAAAADoiEAIAAAAAAEBHBEIAAAAAAADoiEAIAAAAAAAAHREIAQAAAAAAoCMCIQAAAAAAAHREIAQAAAAAAICOCIQAAAAAAADQEYEQAAAAAAAAOiIQAgAAAAAAQEcEQgAAAAAAAOiIQAgAAAAAAAAdEQgBAAAAAACgIwIhAAAAAAAAdEQgBAAAAAAAgI4IhAAAAAAAANARgRAAAAAAAAA6IhACAAAAAABARwRCAAAAAAAA6IhACAAAAAAAAB0RCAEAAAAAAKAjAiEAAAAAAAB0RCAEAAAAAACAjgiEAAAAAAAA0BGBEAAAAAAAADoiEAIAAAAAAEBHBEIAAAAAAADoiEAIAAAAAAAAHREIAQAAAAAAoCMCIQAAAAAAAHREIAQAAAAAAICOCIQAAAAAAADQEYEQAAAAAAAAOiIQAgAAAAAAQEcEQgAAAAAAAOiIQAgAAAAAAAAdEQgBAAAAAACgIwIhAAAAAAAAdEQgBAAAAAAAgI4IhAAAAAAAANARgRAAAAAAAAA6IhACAAAAAABARwRCAAAAAAAA6IhACAAAAAAAAB0RCAEAAAAAAKAjAiEAAAAAAAB0RCAEAAAAAACAjgiEAAAAAAAA0BGBEAAAAAAAADoiEAIAAAAAAEBHBEIAAAAAAADoiEAIAAAAAAAAHREIAQAAAAAAoCMCIQAAAAAAAHREIAQAAAAAAICOCIQAAAAAAADQEYEQAAAAAAAAOiIQAgAAAAAAQEcEQgAAAAAAAOiIQAgAAAAAAAAdEQgBAAAAAACgIwIhAAAAAAAAdEQgBAAAAAAAgI4IhAAAAAAAANARgRAAAAAAAAA6IhACAAAAAABARwRCAAAAAAAA6IhACAAAAAAAAB0RCAEAAAAAAKAjAiEAAAAAAAB0RCAEAAAAAACAjgiEAAAAAAAA0BGBEAAAAAAAADoiEAIAAAAAAEBHBEIAAAAAAADoiEAIAAAAAAAAHREIAQAAAAAAoCMCIQAAAAAAAHREIAQAAAAAAICOCIQAAAAAAADQEYEQAAAAAAAAOiIQAgAAAAAAQEcEQgAAAAAAAOiIQAgAAAAAAAAdEQgBAAAAAACgIwIhAAAAAAAAdEQgBAAAAAAAgI4IhAAAAAAAANARgRAAAAAAAAA6IhACAAAAAABARwRCAAAAAAAA6IhACAAAAAAAAB0RCAEAAAAAAKAjAiEAAAAAAAB0RCAEAAAAAACAjgiEAAAAAAAA0BGBEAAAAAAAADoiEAIAAAAAAEBHBEIAAAAAAADoiEAIAAAAAAAAHREIAQAAAAAAoCMCIQAAAAAAAHREIAQAAAAAAICOCIQAAAAAAADQEYEQAAAAAAAAOiIQAgAAAAAAQEcEQgAAAAAAAOiIQAgAAAAAAAAdEQgBAAAAAACgIwIhAAAAAAAAdEQgBAAAAAAAgI4IhAAAAAAAANARgRAAAAAAAAA6IhACAAAAAABARwRCAAAA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SZIkSZIkSZJ0RAyEkiRJkiRJkiRJ0hExEEqSJEmSJEmSJElHxEAoSZIkSZIkSZIkHREDoSRJkiRJkiRJknREDISSJEmSJEmSJEnSETEQSpIkSZIkSZIkSUfEQChJkiRJkiRJkiQdEQOhJEmSJEmSJEmSdEQMhJIkSZIkSZIkSdIRMRBKkiRJkiRJkiRJR8RAKEmSJEmSJEmSJB0RA6EkSZIkSZIkSZJ0RAyEkiRJkiRJkiRJ0hExEEqSJEmSJEmSJElHxEAoSZIkSZIkSZIkHREDoSRJkiRJkiRJknREDISSJEmSJEmSJEnSETEQSpIkSZIkSZIkSUfEQChJkiRJkiRJkiQdEQOhJEmSJEmSJEmSdEQMhJIkSZIkSZIkSdIRMRBKkiRJkiRJkiRJR8RAKEmSJEmSJEmSJB0RA6EkSZIkSZIkSZJ0RAyEkiRJkiRJkiRJ0hExEEqSJEmSJEmSJElHxEAoSZIkSZIkSZIkHREDoSRJkiRJkiRJknREDISSJEmSJEmSJEnSETEQSpIkSZIkSZIkSUfEQChJkiRJkiRJkiQdEQOhJEmSJEmSJEmSdEQMhJIkSZIkSZIkSdIRMRBKkiRJkiRJkiRJR8RAKEmSJEmSJEmSJB0RA6EkSZIkSZIkSZJ0RAyEkiRJkiRJkiRJ0hExEEqSJEmSJEmSJElHxEAoSZIkSZIkSZIkHREDoSRJkiRJkiRJknREDISSJEmSJEmSJEnSETEQSpIkSZIkSZIkSUfEQChJkiRJkiRJkiQdEQOhJEmSJEmSJEmSdEQMhJIkSZIkSZIkSdIRMRBKkiRJkiRJkiRJR8RAKEmSJEmSJEmSJB0RA6EkSZIkSZIkSZJ0RAyEkiRJkiRJkiRJ0hExEEqSJEmSJEmSJElHxEAoSZIkSZIkSZIkHREDoSRJkiRJkiRJknREDISSJEmSJEmSJEnSETEQSpIkSZIkSZIkSUfEQChJkiRJkiRJkiQdEQOhJEmSJEmSJEmSdEQMhJIkSZIkSZIkSdIRMRBKkiRJkiRJkiRJR8RAKEmSJEmSJEmSJB0RA6EkSZIkSZIkSZJ0RAyEkiRJkiRJkiRJ0hExEEqSJEmSJEmSJElHxEAoSZIkSZIkSZIkHREDoSRJkiRJkiRJknREDISSJEmSJEmSJEnSETEQSpIkSZIkSZIkSUfEQChJkiRJkiRJkiQdEQOhJEmSJEmSJEmSdEQMhJIkSZIkSZIkSdIRMRBKkiRJkiRJkiRJR8RAKEmSJEmSJEmSJB0RA6EkSZIkSZIkSZJ0RAyEkiRJkiRJkiRJ0hExEEqSJEmSJEmSJElHxEAoSZIkSZIkSZIkHREDoSRJkiRJkiRJknREDISSJEmSJEmSJEnSETEQSpIkSZIkSZIkSUfEQChJkiRJkiRJkiQdEQOhJEmSJEmSJEmSdEQMhJIkSZIkSZIkSdIRMRBKkv5/9uxAAAAAAECQv/Ugl0YAAAAAAIwIQgAAAAAAABgRhAAAAAAAADAiCAEAAAAAAGBEEAIAAAAAAMCIIAQAAAAAAIARQQgAAAAAAAAjghAAAAAAAABGBCEAAAAAAACMCEIAAAAAAAAYEYQAAAAAAAAwIggBAAAAAABgRBACAAAAAADAiCAEAAAAAACAEUEIAAAAAAAAI4IQAAAAAAAARgQhAAAAAAAAjAhCAAAAAAAAGBGEAAAAAAAAMCIIAQAAAAAAYEQQAgAAAAAAwIggBAAAAAAAgBFBCAAAAAAAACOCEAAAAAAAAEYEIQAAAAAAAIwIQgAAAAAAABgRhAAAAAAAADAiCAEAAAAAAGBEEAIAAAAAAMCIIAQAAAAAAIARQQgAAAAAAAAjghAAAAAAAABGBCEAAAAAAACMCEIAAAAAAAAYEYQAAAAAAAAwIggBAAAAAABgRBACAAAAAADAiCAEAAAAAACAEUEIAAAAAAAAI4IQAAAAAAAARgQhAAAAAAAAjAhCAAAAAAAAGBGEAAAAAAAAMCIIAQAAAAAAYEQQAgAAAAAAwIggBAAAAAAAgBFBCAAAAAAAACOCEAAAAAAAAEYEIQAAAAAAAIwIQgAAAAAAABgRhAAAAAAAADAiCAEAAAAAAGBEEAIAAAAAAMCIIAQAAAAAAIARQQgAAAAAAAAjghAAAAAAAABGBCEAAAAAAACMCEIAAAAAAAAYEYQAAAAAAAAwIggBAAAAAABgRBACAAAAAADAiCAEAAAAAACAEUEIAAAAAAAAI4IQAAAAAAAARgQhAAAAAAAAjAhCAAAAAAAAGBGEAAAAAAAAMCIIAQAAAAAAYEQQAgAAAAAAwIggBAAAAAAAgBFBCAAAAAAAACOCEAAAAAAAAEYEIQAAAAAAAIwIQgAAAAAAABgRhAAAAAAAADAiCAEAAAAAAGBEEAIAAAAAAMCIIAQAAAAAAIARQQgAAAAAAAAjghAAAAAAAABGBCEAAAAAAACMCEIAAAAAAAAYEYQAAAAAAAAwIggBAAAAAABgRBACAAAAAADAiCAEAAAAAACAEUEIAAAAAAAAI4IQAAAAAAAARgQhAAAAAAAAjAhCAAAAAAAAGBGEAAAAAAAAMCIIAQAAAAAAYEQQAgAAAAAAwIggBAAAAAAAgBFBCAAAAAAAACOCEAAAAAAAAEYEIQAAAAAAAIwIQgAAAAAAABgRhAAAAAAAADAiCAEAAAAAAGBEEAIAAAAAAMCIIAQAAAAAAIARQQgAAAAAAAAjghAAAAAAAABGBCEAAAAAAACMCEIAAAAAAAAYEYQAAAAAAAAwIggBAAAAAABgRBACAAAAAADAiCAEAAAAAACAEUEIAAAAAAAAI4IQAAAAAAAARgQhAAAAAAAAjAhCAAAAAAAAGBGEAAAAAAAAMCIIAQAAAAAAYEQQAgAAAAAAwIggBAAAAAAAgBFBCAAAAAAAACOCEAAAAAAAAEYEIQAAAAAAAIwIQgAAAAAAABgRhAAAAAAAADAiCAEAAAAAAGBEEAIAAAAAAMCIIAQAAAAAAIARQQgAAAAAAAAjghAAAAAAAABGBCEAAAAAAACMCEIAAAAAAAAYEYQAAAAAAAAwIggBAAAAAABgRBACAAAAAADAiCAEAAAAAACAEUEIAAAAAAAAI4IQAAAAAAAARgQhAAAAAAAAjAhCAAAAAAAAGBGEAAAAAAAAMCIIAQAAAAAAYEQQAgAAAAAAwIggBAAAAAAAgBFBCAAAAAAAACOCEAAAAAAAAEYEIQAAAAAAAIwIQgAAAAAAABgRhAAAAAAAADAiCAEAAAAAAGBEEAIAAAAAAMCIIAQAAAAAAIARQQgAAAAAAAAjghAAAAAAAABGBCEAAAAAAACMCEIAAAAAAAAYEYQAAAAAAAAwIggBAAAAAABgRBACAAAAAADAiCAEAAAAAACAEUEIAAAAAAAAI4IQAAAAAAAARgQhAAAAAAAAjAhCAAAAAAAAGBGEAAAAAAAAMCIIAQAAAAAAYEQQAgAAAAAAwIggBAAAAAAAgBFBCAAAAAAAACOCEAAAAAAAAEYEIQAAAAAAAIwIQgAAAAAAABgRhAAAAAAAADAiCAEAAAAAAGBEEAIAAAAAAMCIIAQAAAAAAIARQQgAAAAAAAAjghAAAAAAAABGBCEAAAAAAACMCEIAAAAAAAAYEYQAAAAAAAAwIggBAAAAAABgRBACAAAAAADAiCAEAAAAAACAEUEIAAAAAAAAI4IQAAAAAAAARgQhAAAAAAAAjAhCAAAAAAAAGBGEAAAAAAAAMCIIAQAAAAAAYEQQAgAAAAAAwIggBAAAAAAAgBFBCAAAAAAAACOCEAAAAAAAAEYEIQAAAAAAAIwIQgAAAAAAABgRhAAAAAAAADAiCAEAAAAAAGBEEAIAAAAAAMCIIAQAAAAAAIARQQgAAAAAAAAjghAAAAAAAABGBCEAAAAAAACMCEIAAAAAAAAYEYQAAAAAAAAwIggBAAAAAABgRBACAAAAAADAiCAEAAAAAACAEUEIAAAAAAAAI4IQAAAAAAAARgQhAAAAAAAAjAhCAAAAAAAAGBGEAAAAAAAAMCIIAQAAAAAAYEQQAgAAAAAAwIggBAAAAAAAgBFBCAAAAAAAACOCEAAAAAAAAEYEIQAAAAAAAIwIQgAAAAAAABgRhAAAAAAAADAiCAEAAAAAAGBEEAIAAAAAAMCIIAQAAAAAAIARQQgAAAAAAAAjghAAAAAAAABGBCEAAAAAAACMCEIAAAAAAAAYEYQAAAAAAAAwIggBAAAAAABgRBACAAAAAADAiCAEAAAAAACAEUEIAAAAAAAAI4IQAAAAAAAARgQhAAAAAAAAjAhCAAAAAAAAGBGEAAAAAAAAMCIIAQAAAAAAYEQQAgAAAAAAwIggBAAAAAAAgBFBCAAAAAAAACOCEAAAAAAAAEYEIQAAAAAAAIwIQgAAAAAAABgRhAAAAAAAADAiCAEAAAAAAGBEEAIAAAAAAMCIIAQAAAAAAIARQQgAAAAAAAAjghAAAAAAAABGBCEAAAAAAACMCEIAAAAAAAAYEYQAAAAAAAAwIggBAAAAAABgRBACAAAAAADAiCAEAAAAAACAEUEIAAAAAAAAI4IQAAAAAAAARgQhAAAAAAAAjAhCAAAAAAAAGBGEAAAAAAAAMCIIAQAAAAAAYEQQAgAAAAAAwIggBAAAAAAAgBFBCAAAAAAAACOCEAAAAAAAAEYEIQAAAAAAAIwIQgAAAAAAABgRhAAAAAAAADAiCAEAAAAAAGBEEAIAAAAAAMCIIAQAAAAAAIARQQgAAAAAAAAjghAAAAAAAABGBCEAAAAAAACMCEIAAAAAAAAYEYQAAAAAAAAwIggBAAAAAABgRBACAAAAAADAiCAEAAAAAACAEUEIAAAAAAAAI4IQAAAAAAAARgQhAAAAAAAAjAhCAAAAAAAAGBGEAAAAAAAAMCIIAQAAAAAAYEQQAgAAAAAAwIggBAAAAAAAgBFBCAAAAAAAACOCEAAAAAAAAEYEIQAAAAAAAIwIQgAAAAAAABgRhAAAAAAAADAiCAEAAAAAAGBEEAIAAAAAAMCIIAQAAAAAAIARQQgAAAAAAAAjghAAAAAAAABGBCEAAAAAAACMCEIAAAAAAAAYEYQAAAAAAAAwIggBAAAAAABgRBACAAAAAADAiCAEAAAAAACAEUEIAAAAAAAAI4IQAAAAAAAARgQhAAAAAAAAjAhCAAAAAAAAGBGEAAAAAAAAMCIIAQAAAAAAYEQQAgAAAAAAwIggBAAAAAAAgBFBCAAAAAAAACOCEAAAAAAAAEYEIQAAAAAAAIwIQgAAAAAAABgRhAAAAAAAADAiCAEAAAAAAGBEEAIAAAAAAMCIIAQAAAAAAIARQQgAAAAAAAAjghAAAAAAAABGBCEAAAAAAACMCEIAAAAAAAAYEYQAAAAAAAAwIggBAAAAAABgRBACAAAAAADAiCAEAAAAAACAEUEIAAAAAAAAI4IQAAAAAAAARgQhAAAAAAAAjAhCAAAAAAAAGBGEAAAAAAAAMCIIAQAAAAAAYEQQAgAAAAAAwIggBAAAAAAAgBFBCAAAAAAAACOCEAAAAAAAAEYEIQAAAAAAAIwIQgAAAAAAABgRhAAAAAAAADAiCAEAAAAAAGBEEAIAAAAAAMCIIAQAAAAAAIARQQgAAAAAAAAjghAAAAAAAABGBCEAAAAAAACMCEIAAAAAAAAYEYQAAAAAAAAwIggBAAAAAABgRBACAAAAAADAiCAEAAAAAACAEUEIAAAAAAAAI4IQAAAAAAAARgQhAAAAAAAAjAhCAAAAAAAAGBGEAAAAAAAAMCIIAQAAAAAAYEQQAgAAAAAAwIggBAAAAAAAgBFBCAAAAAAAACOCEAAAAAAAAEYEIQAAAAAAAIwIQgAAAAAAABgRhAAAAAAAADAiCAEAAAAAAGBEEAIAAAAAAMCIIAQAAAAAAIARQQgAAAAAAAAjghAAAAAAAABGBCEAAAAAAACMCEIAAAAAAAAYEYQAAAAAAAAwIggBAAAAAABgRBACAAAAAADAiCAEAAAAAACAEUEIAAAAAAAAI4IQAAAAAAAARgQhAAAAAAAAjAhCAAAAAAAAGBGEAAAAAAAAMCIIAQAAAAAAYEQQAgAAAAAAwIggBAAAAAAAgBFBCAAAAAAAACOCEAAAAAAAAEYEIQAAAAAAAIwIQgAAAAAAABgRhAAAAAAAADAiCAEAAAAAAGBEEAIAAAAAAMCIIAQAAAAAAIARQQgAAAAAAAAjghAAAAAAAABGBCEAAAAAAACMCEIAAAAAAAAYEYQAAAAAAAAwIggBAAAAAABgRBACAAAAAADAiCAEAAAAAACAEUEIAAAAAAAAI4IQAAAAAAAARgQhAAAAAAAAjAhCAAAAAAAAGBGEAAAAAAAAMCIIAQAAAAAAYEQQAgAAAAAAwIggBAAAAAAAgBFBCAAAAAAAACOCEAAAAAAAAEYEIQAAAAAAAIwIQgAAAAAAABgRhAAAAAAAADAiCAEAAAAAAGBEEAIAAAAAAMCIIAQAAAAAAIARQQgAAAAAAAAjghAAAAAAAABGBCEAAAAAAACMCEIAAAAAAAAYEYQAAAAAAAAwIggBAAAAAABgRBACAAAAAADAiCAEAAAAAACAEUEIAAAAAAAAI4IQAAAAAAAARgQhAAAAAAAAjAhCAAAAAAAAGBGEAAAAAAAAMCIIAQAAAAAAYEQQAgAAAAAAwIggBAAAAAAAgBFBCAAAAAAAACOCEAAAAAAAAEYEIQAAAAAAAIwIQgAAAAAAABgRhAAAAAAAADAiCAEAAAAAAGBEEAIAAAAAAMCIIAQAAAAAAIARQQgAAAAAAAAjghAAAAAAAABGBCEAAAAAAACMCEIAAAAAAAAYEYQAAAAAAAAwIggBAAAAAABgRBACAAAAAADAiCAEAAAAAACAEUEIAAAAAAAAI4IQAAAAAAAARgQhAAAAAAAAjAhCAAAAAAAAGBGEAAAAAAAAMCIIAQAAAAAAYEQQAgAAAAAAwIggBAAAAAAAgBFBCAAAAAAAACOCEAAAAAAAAEYEIQAAAAAAAIwIQgAAAAAAABgRhAAAAAAAADAiCAEAAAAAAGBEEAIAAAAAAMCIIAQAAAAAAIARQQgAAAAAAAAjghAAAAAAAABGBCEAAAAAAACMCEIAAAAAAAAYEYQAAAAAAAAwIggBAAAAAABgRBACAAAAAADAiCAEAAAAAACAEUEIAAAAAAAAI4IQAAAAAAAARgQhAAAAAAAAjAhCAAAAAAAAGBGEAAAAAAAAMCIIAQAAAAAAYEQQAgAAAAAAwIggBAAAAAAAgBFBCAAAAAAAACOCEAAAAAAAAEYEIQAAAAAAAIwIQgAAAAAAABgRhAAAAAAAADAiCAEAAAAAAGBEEAIAAAAAAMCIIAQAAAAAAIARQQgAAAAAAAAjghAAAAAAAABGBCEAAAAAAACMCEIAAAAAAAAYEYQAAAAAAAAwIggBAAAAAABgRBACAAAAAADAiCAEAAAAAACAEUEIAAAAAAAAI4IQAAAAAAAARgQhAAAAAAAAjAhCAAAAAAAAGBGEAAAAAAAAMCIIAQAAAAAAYEQQAgAAAAAAwIggBAAAAAAAgBFBCAAAAAAAACOCEAAAAAAAAEYEIQAAAAAAAIwIQgAAAAAAABgRhAAAAAAAADAiCAEAAAAAAGBEEAIAAAAAAMCIIAQAAAAAAIARQQgAAAAAAAAjghAAAAAAAABGBCEAAAAAAACMCEIAAAAAAAAYEYQAAAAAAAAwIggBAAAAAABgRBACAAAAAADAiCAEAAAAAACAEUEIAAAAAAAAI4IQAAAAAAAARgQhAAAAAAAAjAhCAAAAAAAAGBGEAAAAAAAAMCIIAQAAAAAAYEQQAgAAAAAAwIggBAAAAAAAgBFBCAAAAAAAACOCEAAAAAAAAEYEIQAAAAAAAIwIQgAAAAAAABgRhAAAAAAAADAiCAEAAAAAAGBEEAIAAAAAAMCIIAQAAAAAAIARQQgAAAAAAAAjghAAAAAAAABGBCEAAAAAAACMCEIAAAAAAAAYEYQAAAAAAAAwIggBAAAAAABgRBACAAAAAADAiCAEAAAAAACAEUEIAAAAAAAAI4IQAAAAAAAARgQhAAAAAAAAjAhCAAAAAAAAGBGEAAAAAAAAMCIIAQAAAAAAYEQQAgAAAAAAwIggBAAAAAAAgBFBCAAAAAAAACOCEAAAAAAAAEYEIQAAAADqJGKjAAAIQElEQVQAAIwIQgAAAAAAABgRhAAAAAAAADAiCAEAAAAAAGBEEAIAAAAAAMCIIAQAAAAAAIARQQgAAAAAAAAjghAAAAAAAABGBCEAAAAAAACMCEIAAAAAAAAYEYQAAAAAAAAwIggBAAAAAABgRBACAAAAAADAiCAEAAAAAACAEUEIAAAAAAAAI4IQAAAAAAAARgQhAAAAAAAAjAhCAAAAAAAAGBGEAAAAAAAAMCIIAQAAAAAAYEQQAgAAAAAAwIggBAAAAAAAgBFBCAAAAAAAACOCEAAAAAAAAEYEIQAAAAAAAIwIQgAAAAAAABgRhAAAAAAAADAiCAEAAAAAAGBEEAIAAAAAAMCIIAQAAAAAAIARQQgAAAAAAAAjghAAAAAAAABGBCEAAAAAAACMCEIAgNqzAwEAAAAAQf7Wg1waAQAAAMCIIAQAAAAAAIARQQgAAAAAAAAjghAAAAAAAABGBCEAAAAAAACMCEIAAAAAAAAYEYQAAAAAAAAwIggBAAAAAABgRBACAAAAAADAiCAEAAAAAACAEUEIAAAAAAAAI4IQAAAAAAAARgQhAAAAAAAAjAhCAAAAAAAAGBGEAAAAAAAAMCIIAQAAAAAAYEQQAgAAAAAAwIggBAAAAAAAgBFBCAAAAAAAACOCEAAAAAAAAEYEIQAAAAAAAIwIQgAAAAAAABgRhAAAAAAAADAiCAEAAAAAAGBEEAIAAAAAAMCIIAQAAAAAAIARQQgAAAAAAAAjghAAAAAAAABGBCEAAAAAAACMCEIAAAAAAAAYEYQAAAAAAAAwIggBAAAAAABgRBACAAAAAADAiCAEAAAAAACAEUEIAAAAAAAAI4IQAAAAAAAARgQhAAAAAAAAjAhCAAAAAAAAGBGEAAAAAAAAMCIIAQAAAAAAYEQQAgAAAAAAwIggBAAAAAAAgBFBCAAAAAAAACOCEAAAAAAAAEYEIQAAAAAAAIwIQgAAAAAAABgRhAAAAAAAADAiCAEAAAAAAGBEEAIAAAAAAMCIIAQAAAAAAIARQQgAAAAAAAAjghAAAAAAAABGBCEAAAAAAACMCEIAAAAAAAAYEYQAAAAAAAAwIggBAAAAAABgRBACAAAAAADAiCAEAAAAAACAEUEIAAAAAAAAI4IQAAAAAAAARgQhAAAAAAAAjAhCAAAAAAAAGBGEAAAAAAAAMCIIAQAAAAAAYEQQAgAAAAAAwIggBAAAAAAAgBFBCAAAAAAAACOCEAAAAAAAAEYEIQAAAAAAAIwIQgAAAAAAABgRhAAAAAAAADAiCAEAAAAAAGBEEAIAAAAAAMCIIAQAAAAAAIARQQgAAAAAAAAjghAAAAAAAABGBCEAAAAAAACMCEIAAAAAAAAYEYQAAAAAAAAwIggBAAAAAABgRBACAAAAAADAiCAEAAAAAACAEUEIAAAAAAAAI4IQAAAAAAAARgQhAAAAAAAAjAhCAAAAAAAAGBGEAAAAAAAAMCIIAQAAAAAAYEQQAgAAAAAAwIggBAAAAAAAgBFBCAAAAAAAACOCEAAAAAAAAEYEIQAAAAAAAIwIQgAAAAAAABgRhAAAAAAAADAiCAEAAAAAAGBEEAIAAAAAAMCIIAQAAAAAAIARQQgAAAAAAAAjghAAAAAAAABGBCEAAAAAAACMCEIAAAAAAAAYEYQAAAAAAAAwIggBAAAAAABgRBACAAAAAADAiCAEAAAAAACAEUEIAAAAAAAAI4IQAAAAAAAARgQhAAAAAAAAjAhCAAAAAAAAGBGEAAAAAAAAMCIIAQAAAAAAYEQQAgAAAAAAwIggBAAAAAAAgBFBCAAAAAAAACOCEAAAAAAAAEYEIQAAAAAAAIwIQgAAAAAAABgRhAAAAAAAADAiCAEAAAAAAGBEEAIAAAAAAMCIIAQAAAAAAIARQQgAAAAAAAAjghAAAAAAAABGBCEAAAAAAACMCEIAAAAAAAAYEYQAAAAAAAAwIggBAAAAAABgRBACAAAAAADAiCAEAAAAAACAEUEIAAAAAAAAI4IQAAAAAAAARgQhAAAAAAAAjAhCAAAAAAAAGBGEAAAAAAAAMCIIAQAAAAAAYEQQAgAAAAAAwIggBAAAAAAAgBFBCAAAAAAAACOCEAAAAAAAAEYEIQAAAAAAAIwIQgAAAAAAABgRhAAAAAAAADAiCAEAAAAAAGBEEAIAAAAAAMCIIAQAAAAAAIARQQgAAAAAAAAjghAAAAAAAABGBCEAAAAAAACMCEIAAAAAAAAYEYQAAAAAAAAwIggBAAAAAABgRBACAAAAAADAiCAEAAAAAACAEUEIAAAAAAAAI4IQAAAAAAAARgQhAAAAAAAAjAhCAAAAAAAAGBGEAAAAAAAAMCIIAQAAAAAAYEQQAgAAAAAAwIggBAAAAAAAgBFBCAAAAAAAACOCEAAAAAAAAEYEIQAAAAAAAIwIQgAAAAAAABgRhAAAAAAAADAiCAEAAAAAAGBEEAIAAAAAAMCIIAQAAAAAAIARQQgAAAAAAAAjghAAAAAAAABGBCEAAAAAAACMCEIAAAAAAAAYEYQAAAAAAAAwIggBAAAAAABgRBACAAAAAADAiCAEAAAAAACAEUEIAAAAAAAAI4IQAAAAAAAARgQhAAAAAAAAjAhCAAAAAAAAGBGEAAAAAAAAMCIIAQAAAAAAYEQQAgAAAAAAwIggBAAAAAAAgBFBCAAAAAAAACOCEAAAAAAAAEYEIQAAAAAAAIwIQgAAAAAAABgRhAAAAAAAADAiCAEAAAAAAGBEEAIAAAAAAMCIIAQAAAAAAIARQQgAAAAAAAAjghAAAAAAAABGBCEAAAAAAACMBIA6u8tX6WAVAAAAAElFTkSuQmCC&quot;/&gt;
&lt;image id=&quot;source-20&quot; x=&quot;0&quot; y=&quot;0&quot; width=&quot;1024&quot; height=&quot;1024&quot; xlink:href=&quot;data:image/png;base64,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AABwEQIAAAAA4CIEAAAAAMBFCAAAAACAixAAAAAAABchAAAAAAAuQgAAAAAAXIQAAAAAALgIAQAAAABwEQIAAAAA4CIEAAAAAMBFCAAAAACAixAAAAAAABchAAAAAAAuQgAAAAAAXIQAAAAAALgIAQAAAABwEQIAAAAA4CIEAAAAAMBFCAAAAACAixAAAAAAABchAAAAAAAuQgAAAAAAXIQAAAAAALgIAQAAAABwEQIAAAAA4CIEAAAAAMBFCAAAAACAixAAAAAAABchAAAAAAAuQgAAAAAAXIQAAAAAALgIAQAAAABwEQIAAAAA4CIEAAAAAMBFCAAAAACAixAAAAAAABchAAAAAAAuQgAAAAAAXIQAAAAAALgIAQAAAABwEQIAAAAA4CIEAAAAAMBFCAAAAACAixAAAAAAABchAAAAAAAuQgAAAAAAXIQAAAAAALgIAQAAAABwEQIAAAAA4CIEAAAAAMBFCAAAAACAixAAAAAAABchAAAAAAAuQgAAAAAAXIQAAAAAALgIAQAAAABwEQIAAAAA4CIEAAAAAMBFCAAAAACAixAAAAAAABchAAAAAAAuQgAAAAAAXIQAAAAAALgIAQAAAABwEQIAAAAA4CIEAAAAAMBFCAAAAACAixAAAAAAABchAAAAAAAuQgAAAAAAXIQAAAAAALgIAQAAAABwEQIAAAAA4CIEAAAAAMBFCAAAAACAixAAAAAAABchAAAAAAAuQgAAAAAAXIQAAAAAALgIAQAAAABwEQIAAAAA4CIEAAAAAMBFCAAAAACAixAAAAAAABchAAAAAAAuQgAAAAAAXIQAAAAAALgIAQAAAABwEQIAAAAA4CIEAAAAAMBFCAAAAACAixAAAAAAABchAAAAAAAuQgAAAAAAXIQAAAAAALgIAQAAAABwEQIAAAAA4CIEAAAAAMBFCAAAAACAixAAAAAAABchAAAAAAAuQgAAAAAAXIQAAAAAALgIAQAAAABwEQIAAAAA4CIEAAAAAMBFCAAAAACAixAAAAAAABchAAAAAAAuQgAAAAAAXIQAAAAAALgIAQAAAABwEQIAAAAA4CIEAAAAAMBFCAAAAACAixAAAAAAABchAAAAAAAu8v8DK/IK6F5+iAMAAAAASUVORK5CYII=&quot;/&gt;
&lt;image id=&quot;source-23&quot; x=&quot;0&quot; y=&quot;0&quot; width=&quot;956&quot; height=&quot;406&quot; xlink:href=&quot;data:image/png;base64,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&quot;/&gt;
&lt;/defs&gt;
&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;rgb(100%, 100%, 100%)&quot; fill-opacity=&quot;1&quot; d=&quot;M 0 0 L 864 0 L 864 576.238281 L 0 576.238281 Z M 0 0 &quot;/&gt;
&lt;g clip-path=&quot;url(#clip-0)&quot;&gt;
&lt;use xlink:href=&quot;#source-5&quot; transform=&quot;matrix(0.632728, 0, 0, 0.632198, 204.071418, 109.348877)&quot;/&gt;
&lt;/g&gt;
&lt;use xlink:href=&quot;#source-8&quot; transform=&quot;matrix(0.305396, 0, 0, 0.305406, 655.373829, 181.288929)&quot;/&gt;
&lt;use xlink:href=&quot;#source-11&quot; transform=&quot;matrix(0.190987, 0, 0, 0.190991, 453.028037, 230.208151)&quot;/&gt;
&lt;path fill-rule=&quot;evenodd&quot; fill=&quot;rgb(0%, 42.349243%, 71.369934%)&quot; fill-opacity=&quot;1&quot; d=&quot;M 368.585938 86.4375 C 371.609375 85.976562 373.878906 87.429688 374.808594 89.726562 C 376.042969 92.839844 374.035156 96.898438 370.613281 97.40625 C 367.105469 97.9375 363.730469 95.242188 363.730469 91.867188 C 363.730469 88.753906 365.957031 86.835938 368.585938 86.4375 M 365.648438 94.03125 C 367.65625 98.023438 373.902344 96.566406 373.792969 91.777344 C 373.726562 89.152344 371.585938 87.078125 368.695312 87.585938 C 366.113281 88.027344 364.148438 91.027344 365.648438 94.03125 &quot;/&gt;
&lt;path fill-rule=&quot;evenodd&quot; fill=&quot;rgb(0%, 42.349243%, 71.369934%)&quot; fill-opacity=&quot;1&quot; d=&quot;M 371.628906 89.617188 C 372.160156 90.542969 371.761719 91.84375 370.835938 92 C 371.71875 92.441406 371.785156 93.675781 372.070312 94.714844 L 370.703125 94.714844 C 370.328125 93.65625 370.371094 92.175781 368.5625 92.574219 L 368.5625 94.714844 L 367.304688 94.714844 L 367.304688 89.285156 C 368.585938 88.910156 370.8125 88.886719 371.628906 89.617188 M 368.585938 90.058594 C 368.628906 90.585938 368.472656 91.292969 368.695312 91.644531 C 371.410156 92.019531 370.636719 89.21875 368.585938 90.058594 &quot;/&gt;
&lt;path fill-rule=&quot;evenodd&quot; fill=&quot;rgb(0%, 42.349243%, 71.369934%)&quot; fill-opacity=&quot;1&quot; d=&quot;M 269.390625 111.773438 C 269.039062 112.632812 268.90625 113.691406 268.707031 114.707031 C 274.355469 114.972656 280.511719 114.75 286.339844 114.816406 C 286.867188 114.089844 286.824219 112.808594 287.132812 111.882812 C 285.167969 111.332031 282.144531 112.390625 280.910156 111.308594 C 279.433594 110.007812 281.066406 105.550781 281.484375 103.628906 C 281.792969 102.195312 282.015625 100.894531 282.277344 99.679688 C 282.898438 96.875 283.074219 94.292969 286.230469 93.917969 C 288.613281 93.632812 290.574219 93.917969 293.246094 93.917969 C 295.386719 93.917969 299.425781 93.5 300.375 94.714844 C 301.476562 96.105469 299.976562 100.628906 299.578125 102.414062 C 299.292969 103.671875 299.070312 104.953125 298.785156 106.253906 C 298.5 107.535156 298.34375 109.125 297.878906 109.984375 C 296.734375 112.101562 293.753906 111.859375 290.3125 111.792969 C 289.804688 112.566406 289.804688 113.847656 289.515625 114.839844 L 307.171875 114.839844 C 307.722656 114.15625 307.722656 112.898438 307.964844 111.902344 C 305.671875 111.375 302.78125 112.476562 301.632812 111.109375 C 300.902344 110.25 301.257812 108.460938 301.519531 107.269531 C 302.117188 104.578125 302.691406 102.238281 303.21875 99.699219 C 303.773438 97.007812 303.882812 94.339844 307.058594 93.941406 C 309.246094 93.65625 311.652344 93.941406 314.519531 93.941406 C 316.460938 93.941406 320.234375 93.523438 321.183594 94.625 C 321.933594 95.484375 321.46875 97.316406 321.183594 98.707031 C 320.523438 101.886719 320.144531 103.914062 319.484375 106.960938 C 319.152344 108.507812 318.867188 110.007812 318.226562 110.691406 C 316.902344 112.167969 313.902344 111.816406 311.121094 111.816406 C 310.636719 112.589844 310.703125 113.867188 310.328125 114.75 C 316.019531 115.015625 322.199219 114.796875 328.070312 114.863281 C 328.464844 114.042969 328.597656 112.984375 328.753906 111.925781 C 326.8125 111.398438 323.875 112.410156 322.640625 111.351562 C 321.667969 110.535156 322 108.703125 322.308594 107.292969 C 322.925781 104.3125 323.480469 101.953125 324.117188 98.929688 C 324.671875 96.390625 325.113281 94.339844 327.847656 93.941406 C 330.121094 93.632812 332.394531 93.941406 335.417969 93.941406 C 337.734375 93.941406 341.222656 93.542969 342.082031 94.734375 C 343.164062 96.238281 341.507812 100.980469 341.175781 102.546875 C 340.890625 103.851562 340.648438 105.109375 340.382812 106.386719 C 340.09375 107.734375 339.984375 109.234375 339.476562 110.117188 C 338.285156 112.167969 335.285156 111.859375 331.910156 111.816406 C 331.535156 112.65625 331.421875 113.757812 331.222656 114.75 C 336.875 115.015625 343.03125 114.796875 348.855469 114.863281 C 349.363281 114.132812 349.320312 112.851562 349.652344 111.925781 C 346.78125 111.398438 343.007812 112.875 342.742188 109.785156 C 342.675781 108.835938 343.117188 107.492188 343.425781 106.167969 C 343.914062 103.980469 344.421875 101.488281 344.90625 99.257812 C 345.503906 96.480469 345.746094 94.316406 348.746094 93.941406 C 351.039062 93.65625 353.160156 93.941406 355.875 93.941406 C 358.167969 93.941406 362.117188 93.476562 363 94.847656 C 363.90625 96.238281 362.472656 100.804688 362.097656 102.546875 C 361.832031 103.851562 361.566406 105.171875 361.324219 106.386719 C 360.839844 108.726562 360.484375 110.84375 358.609375 111.59375 C 357.066406 112.214844 354.945312 111.617188 352.851562 111.816406 C 352.320312 112.542969 352.363281 113.800781 352.054688 114.75 C 354.328125 115.015625 357.066406 114.796875 359.515625 114.863281 C 359.050781 116.757812 358.609375 118.699219 358.277344 120.753906 L 340.535156 120.753906 C 340.027344 121.480469 340.050781 122.738281 339.742188 123.6875 C 341.792969 124.0625 344.996094 122.914062 346.1875 124.484375 C 346.824219 125.34375 346.496094 127 346.1875 128.433594 C 345.613281 131.035156 345.039062 133.730469 344.488281 136.332031 C 344 138.582031 343.605469 140.636719 341.882812 141.320312 C 340.09375 142.027344 336.71875 141.539062 334.3125 141.539062 C 332.679688 141.539062 328.089844 142.09375 326.855469 141.210938 C 325.507812 140.261719 326.347656 137.878906 326.746094 136.003906 C 327.253906 133.53125 327.671875 131.300781 328.222656 128.765625 C 328.488281 127.484375 328.730469 126.027344 329.128906 125.367188 C 330.339844 123.378906 333.476562 123.621094 336.695312 123.667969 C 337.027344 122.785156 337.160156 121.703125 337.382812 120.730469 L 319.617188 120.730469 C 319.265625 121.546875 319.175781 122.628906 318.933594 123.554688 C 320.984375 124.042969 323.921875 123.113281 325.15625 124.238281 C 325.972656 124.992188 325.664062 126.734375 325.375 128.078125 C 324.78125 130.90625 324.363281 133.109375 323.789062 135.890625 C 323.28125 138.363281 322.859375 140.835938 320.742188 141.429688 C 319.707031 141.71875 318.226562 141.539062 316.902344 141.539062 L 313.0625 141.539062 C 311.144531 141.539062 306.972656 142.136719 305.824219 140.96875 C 305.050781 140.195312 305.230469 138.605469 305.605469 136.882812 C 306.222656 133.90625 306.816406 131.875 307.414062 128.960938 C 307.722656 127.460938 307.832031 125.9375 308.429688 125.121094 C 309.707031 123.355469 312.597656 123.644531 315.777344 123.644531 C 316.285156 122.914062 316.242188 121.613281 316.570312 120.710938 L 298.808594 120.710938 C 298.386719 121.460938 298.300781 122.539062 298.125 123.535156 C 299.25 123.753906 300.242188 123.644531 301.167969 123.644531 C 302.648438 123.667969 304.324219 123.667969 304.789062 124.992188 C 305.207031 126.183594 304.609375 127.816406 304.347656 129.050781 C 303.773438 131.699219 303.21875 134.238281 302.648438 136.863281 C 302.140625 139.269531 301.875 141.054688 299.492188 141.496094 C 298.386719 141.695312 297.019531 141.496094 295.761719 141.496094 L 292.03125 141.496094 C 290.289062 141.496094 286.050781 141.980469 285.015625 141.035156 C 284.199219 140.304688 284.484375 138.496094 284.792969 137.082031 C 285.433594 134.015625 285.832031 132.03125 286.492188 129.050781 C 286.800781 127.683594 287 125.984375 287.507812 125.210938 C 288.746094 123.355469 291.855469 123.578125 294.96875 123.621094 C 295.386719 122.851562 295.429688 121.746094 295.652344 120.796875 C 290.003906 120.53125 283.84375 120.753906 277.996094 120.6875 C 277.46875 121.414062 277.511719 122.695312 277.203125 123.621094 C 279.386719 123.996094 282.652344 122.804688 283.757812 124.527344 C 284.332031 125.410156 283.910156 127.21875 283.648438 128.476562 C 283.117188 131.015625 282.542969 133.597656 281.949219 136.289062 C 281.507812 138.296875 281.199219 140.546875 279.34375 141.277344 C 277.511719 142.003906 274.15625 141.496094 271.664062 141.496094 C 269.875 141.496094 265.351562 142.046875 264.207031 141.035156 C 262.703125 139.730469 264.292969 135.472656 264.777344 133.222656 C 265.089844 131.785156 265.285156 130.527344 265.574219 129.160156 C 265.90625 127.59375 266.191406 125.652344 267.050781 124.746094 C 268.441406 123.3125 271.378906 123.621094 274.179688 123.621094 C 274.511719 122.738281 274.664062 121.679688 274.863281 120.6875 L 257.078125 120.6875 C 256.746094 121.570312 256.613281 122.628906 256.394531 123.621094 C 258.621094 123.953125 261.492188 122.914062 262.726562 124.304688 C 263.453125 125.121094 263.101562 127.109375 262.835938 128.257812 C 262.21875 131.125 261.710938 133.355469 261.136719 136.066406 C 260.652344 138.339844 260.433594 140.769531 258.203125 141.386719 C 256.21875 141.9375 253.214844 141.496094 250.5 141.496094 C 248.582031 141.496094 244.34375 142.027344 243.261719 140.921875 C 242.402344 140.039062 242.820312 138.253906 243.152344 136.730469 C 243.484375 135.164062 243.792969 133.730469 244.058594 132.539062 C 244.609375 129.976562 244.875 126.003906 246.332031 124.613281 C 247.699219 123.292969 250.566406 123.621094 253.238281 123.601562 C 253.765625 122.894531 253.679688 121.546875 254.03125 120.664062 L 246.574219 120.664062 C 246.96875 118.699219 247.433594 116.78125 247.808594 114.773438 L 265.550781 114.773438 C 266.015625 113.957031 266.015625 112.675781 266.347656 111.726562 C 264.25 111.375 261.558594 112.324219 260.234375 111.398438 C 259.261719 110.710938 259.460938 109.058594 259.769531 107.558594 C 260.367188 104.777344 260.894531 102.085938 261.46875 99.414062 C 262.066406 96.65625 262.351562 94.25 265.417969 93.875 C 267.734375 93.589844 270.007812 93.875 272.878906 93.875 C 274.953125 93.875 278.636719 93.410156 279.542969 94.667969 C 280.136719 95.484375 279.875 97.207031 279.542969 98.753906 C 278.945312 101.597656 278.460938 103.695312 277.84375 106.5625 C 277.554688 107.933594 277.359375 109.367188 276.828125 110.183594 C 275.613281 112.125 272.746094 111.816406 269.390625 111.773438 M 306.839844 100.121094 C 304.789062 103.472656 305.230469 108.726562 309.554688 109.058594 C 313.96875 109.386719 317.828125 104.976562 317.253906 100.339844 C 316.925781 97.757812 314.761719 96.433594 311.828125 96.832031 C 309.398438 97.183594 307.65625 98.796875 306.839844 100.121094 M 274.597656 98.773438 C 273.914062 96.457031 270.054688 96.675781 267.25 97.074219 C 266.410156 100.980469 265.550781 104.886719 264.757812 108.835938 L 266.898438 108.835938 C 267.382812 107.46875 267.382812 105.613281 268.023438 104.421875 C 272.105469 104.996094 275.503906 101.820312 274.597656 98.773438 M 295.296875 98.3125 C 294.480469 96.257812 290.464844 96.832031 287.949219 97.074219 C 287.199219 101.070312 286.339844 104.953125 285.457031 108.835938 L 287.707031 108.835938 C 288.082031 107.226562 288.28125 105.417969 288.832031 103.980469 C 292.1875 103.1875 291.238281 106.695312 291.65625 108.835938 L 293.953125 108.835938 C 293.621094 107.425781 294.019531 105.570312 293.621094 104.3125 C 293.421875 103.71875 292.9375 103.5625 292.714844 103.078125 C 294.460938 102.527344 296.160156 100.472656 295.296875 98.3125 M 330.253906 96.964844 C 329.4375 100.9375 328.53125 104.820312 327.757812 108.835938 L 329.898438 108.835938 C 330.429688 107.292969 330.472656 105.261719 331.136719 103.851562 L 335.328125 103.851562 C 335.503906 103.320312 335.769531 102.371094 335.660156 101.929688 L 331.355469 101.929688 C 331.6875 100.9375 331.753906 99.679688 332.152344 98.753906 L 336.785156 98.753906 C 336.875 98.113281 337.050781 97.582031 337.117188 96.941406 L 330.253906 96.941406 Z M 353.3125 96.964844 C 352.34375 100.804688 351.613281 104.910156 350.710938 108.835938 L 352.984375 108.835938 C 353.753906 104.820312 354.660156 100.957031 355.476562 96.964844 Z M 312.488281 131.234375 C 312.910156 133.332031 316.636719 133.132812 316.792969 134.964844 C 316.96875 137.414062 313.0625 137.304688 311.472656 136.199219 C 311.210938 136.839844 310.832031 137.371094 310.679688 138.121094 C 314.542969 140.085938 319.902344 137.570312 319.042969 133.707031 C 318.601562 131.699219 314.804688 131.699219 314.738281 129.976562 C 314.671875 127.992188 318.070312 127.96875 319.375 128.851562 C 319.484375 128.101562 320.101562 127.835938 320.167969 127.042969 C 316.503906 125.367188 311.738281 127.570312 312.488281 131.234375 M 278.679688 128.519531 C 278.242188 126.050781 273.980469 126.511719 271.332031 126.820312 C 270.515625 130.773438 269.679688 134.65625 268.839844 138.582031 C 273.097656 139.355469 278.703125 137.945312 277.886719 133.839844 C 277.6875 132.847656 276.960938 132.667969 276.1875 132.140625 C 277.644531 131.523438 278.992188 130.285156 278.679688 128.519531 M 291.457031 126.710938 C 291.171875 128.585938 289.957031 132.117188 289.757812 134.632812 C 289.515625 137.855469 291.347656 139.046875 294.0625 138.828125 C 299.625 138.339844 299.492188 131.523438 300.726562 126.734375 L 298.453125 126.734375 C 297.484375 129.515625 297.703125 135.40625 295.167969 136.6875 C 294.660156 136.949219 293.996094 137.195312 293.246094 137.015625 C 291.214844 136.574219 292.230469 133.398438 292.5625 131.808594 C 292.980469 129.84375 293.222656 128.410156 293.578125 126.710938 Z M 291.457031 126.710938 &quot;/&gt;
&lt;path fill-rule=&quot;evenodd&quot; fill=&quot;rgb(0%, 42.349243%, 71.369934%)&quot; fill-opacity=&quot;1&quot; d=&quot;M 268.265625 102.613281 C 268.53125 101.3125 268.839844 100.097656 269.058594 98.773438 C 270.230469 98.246094 272.0625 98.574219 272.347656 99.457031 C 273.03125 101.554688 270.5625 103.253906 268.265625 102.613281 &quot;/&gt;
&lt;path fill-rule=&quot;evenodd&quot; fill=&quot;rgb(0%, 42.349243%, 71.369934%)&quot; fill-opacity=&quot;1&quot; d=&quot;M 292.9375 98.996094 C 293.777344 101.378906 291.769531 102.679688 289.097656 102.28125 C 289.472656 101.113281 289.539062 99.632812 290.003906 98.554688 C 291.148438 98.507812 292.320312 98.488281 292.9375 98.996094 &quot;/&gt;
&lt;path fill-rule=&quot;evenodd&quot; fill=&quot;rgb(0%, 42.349243%, 71.369934%)&quot; fill-opacity=&quot;1&quot; d=&quot;M 311.585938 98.664062 C 313.59375 98.246094 314.761719 99.371094 314.871094 101.269531 C 315.003906 103.894531 313.21875 106.675781 311.472656 107.136719 C 306.664062 108.460938 307.765625 101.488281 309.773438 99.570312 C 310.261719 99.105469 310.855469 98.796875 311.585938 98.664062 &quot;/&gt;
&lt;path fill-rule=&quot;evenodd&quot; fill=&quot;rgb(0%, 42.349243%, 71.369934%)&quot; fill-opacity=&quot;1&quot; d=&quot;M 276.1875 128.742188 C 276.804688 131.058594 274.730469 131.65625 272.570312 131.566406 C 272.746094 130.417969 273.03125 129.382812 273.253906 128.277344 C 274.355469 128.300781 275.660156 128.125 276.1875 128.742188 &quot;/&gt;
&lt;path fill-rule=&quot;evenodd&quot; fill=&quot;rgb(0%, 42.349243%, 71.369934%)&quot; fill-opacity=&quot;1&quot; d=&quot;M 275.503906 134.058594 C 275.722656 136.621094 273.9375 137.171875 271.445312 136.996094 C 271.621094 135.625 271.949219 134.414062 272.238281 133.15625 C 273.714844 133.066406 274.953125 133.222656 275.503906 134.058594 &quot;/&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-0-0&quot; x=&quot;352.787239&quot; y=&quot;139.563692&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-1&quot; x=&quot;365.530955&quot; y=&quot;139.563692&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-2&quot; x=&quot;385.222084&quot; y=&quot;139.563692&quot;/&gt;
&lt;/g&gt;
&lt;path fill-rule=&quot;evenodd&quot; fill=&quot;rgb(0%, 42.349243%, 71.369934%)&quot; fill-opacity=&quot;1&quot; d=&quot;M 311.03125 331.035156 C 314.054688 330.570312 316.328125 332.027344 317.253906 334.324219 C 318.492188 337.433594 316.484375 341.496094 313.0625 342.003906 C 309.554688 342.53125 306.179688 339.839844 306.179688 336.464844 C 306.179688 333.351562 308.40625 331.433594 311.03125 331.035156 M 308.097656 338.625 C 310.105469 342.621094 316.351562 341.164062 316.242188 336.375 C 316.175781 333.75 314.035156 331.675781 311.144531 332.183594 C 308.5625 332.625 306.597656 335.625 308.097656 338.625 &quot;/&gt;
&lt;path fill-rule=&quot;evenodd&quot; fill=&quot;rgb(0%, 42.349243%, 71.369934%)&quot; fill-opacity=&quot;1&quot; d=&quot;M 314.078125 334.210938 C 314.609375 335.140625 314.210938 336.441406 313.285156 336.59375 C 314.167969 337.035156 314.230469 338.273438 314.519531 339.308594 L 313.152344 339.308594 C 312.777344 338.25 312.820312 336.773438 311.011719 337.167969 L 311.011719 339.308594 L 309.753906 339.308594 L 309.753906 333.882812 C 311.03125 333.507812 313.261719 333.484375 314.078125 334.210938 M 311.03125 334.652344 C 311.078125 335.183594 310.921875 335.890625 311.144531 336.242188 C 313.855469 336.617188 313.085938 333.816406 311.03125 334.652344 &quot;/&gt;
&lt;path fill-rule=&quot;evenodd&quot; fill=&quot;rgb(0%, 42.349243%, 71.369934%)&quot; fill-opacity=&quot;1&quot; d=&quot;M 211.839844 356.367188 C 211.484375 357.230469 211.355469 358.289062 211.15625 359.304688 C 216.804688 359.566406 222.960938 359.347656 228.785156 359.414062 C 229.316406 358.683594 229.273438 357.40625 229.582031 356.476562 C 227.617188 355.925781 224.59375 356.984375 223.359375 355.90625 C 221.878906 354.601562 223.511719 350.144531 223.933594 348.226562 C 224.242188 346.789062 224.460938 345.488281 224.726562 344.273438 C 225.34375 341.472656 225.519531 338.890625 228.675781 338.515625 C 231.058594 338.230469 233.023438 338.515625 235.695312 338.515625 C 237.835938 338.515625 241.871094 338.097656 242.820312 339.308594 C 243.925781 340.699219 242.425781 345.222656 242.027344 347.011719 C 241.742188 348.269531 241.519531 349.550781 241.234375 350.851562 C 240.945312 352.132812 240.792969 353.71875 240.328125 354.582031 C 239.179688 356.699219 236.203125 356.457031 232.757812 356.390625 C 232.25 357.164062 232.25 358.441406 231.964844 359.433594 L 249.617188 359.433594 C 250.171875 358.75 250.171875 357.492188 250.414062 356.5 C 248.117188 355.972656 245.226562 357.074219 244.078125 355.707031 C 243.351562 354.84375 243.703125 353.058594 243.96875 351.867188 C 244.566406 349.175781 245.140625 346.835938 245.667969 344.296875 C 246.21875 341.605469 246.332031 338.933594 249.507812 338.539062 C 251.691406 338.25 254.097656 338.539062 256.96875 338.539062 C 258.910156 338.539062 262.683594 338.117188 263.632812 339.222656 C 264.382812 340.082031 263.917969 341.914062 263.632812 343.304688 C 262.96875 346.480469 262.59375 348.511719 261.933594 351.558594 C 261.601562 353.101562 261.316406 354.601562 260.675781 355.285156 C 259.351562 356.765625 256.347656 356.414062 253.570312 356.414062 C 253.082031 357.183594 253.148438 358.464844 252.773438 359.347656 C 258.46875 359.613281 264.648438 359.390625 270.515625 359.457031 C 270.914062 358.640625 271.046875 357.582031 271.199219 356.523438 C 269.257812 355.992188 266.324219 357.007812 265.089844 355.949219 C 264.117188 355.132812 264.449219 353.300781 264.757812 351.886719 C 265.375 348.910156 265.925781 346.546875 266.566406 343.523438 C 267.117188 340.988281 267.558594 338.933594 270.296875 338.539062 C 272.570312 338.230469 274.84375 338.539062 277.863281 338.539062 C 280.183594 338.539062 283.667969 338.140625 284.53125 339.332031 C 285.609375 340.832031 283.957031 345.578125 283.625 347.144531 C 283.335938 348.445312 283.09375 349.703125 282.832031 350.984375 C 282.542969 352.328125 282.433594 353.832031 281.925781 354.714844 C 280.734375 356.765625 277.734375 356.457031 274.355469 356.414062 C 273.980469 357.25 273.871094 358.355469 273.671875 359.347656 C 279.320312 359.613281 285.476562 359.390625 291.304688 359.457031 C 291.8125 358.730469 291.769531 357.449219 292.097656 356.523438 C 289.230469 355.992188 285.457031 357.472656 285.191406 354.382812 C 285.125 353.433594 285.566406 352.085938 285.875 350.761719 C 286.359375 348.578125 286.867188 346.085938 287.355469 343.855469 C 287.949219 341.074219 288.191406 338.914062 291.195312 338.539062 C 293.488281 338.25 295.605469 338.539062 298.320312 338.539062 C 300.617188 338.539062 304.566406 338.074219 305.449219 339.441406 C 306.355469 340.832031 304.917969 345.402344 304.542969 347.144531 C 304.28125 348.445312 304.015625 349.769531 303.773438 350.984375 C 303.285156 353.324219 302.933594 355.441406 301.058594 356.191406 C 299.511719 356.808594 297.394531 356.214844 295.296875 356.414062 C 294.769531 357.140625 294.8125 358.398438 294.503906 359.347656 C 296.777344 359.613281 299.511719 359.390625 301.960938 359.457031 C 301.5 361.355469 301.058594 363.296875 300.726562 365.347656 L 282.984375 365.347656 C 282.476562 366.078125 282.5 367.335938 282.191406 368.285156 C 284.242188 368.660156 287.441406 367.511719 288.632812 369.078125 C 289.273438 369.941406 288.941406 371.59375 288.632812 373.027344 C 288.058594 375.632812 287.488281 378.324219 286.933594 380.929688 C 286.449219 383.179688 286.050781 385.230469 284.332031 385.917969 C 282.542969 386.621094 279.167969 386.136719 276.761719 386.136719 C 275.128906 386.136719 270.539062 386.6875 269.304688 385.804688 C 267.957031 384.855469 268.796875 382.472656 269.191406 380.597656 C 269.699219 378.125 270.121094 375.898438 270.671875 373.359375 C 270.9375 372.082031 271.179688 370.625 271.574219 369.960938 C 272.789062 367.976562 275.921875 368.21875 279.144531 368.261719 C 279.476562 367.378906 279.609375 366.296875 279.828125 365.328125 L 262.066406 365.328125 C 261.710938 366.144531 261.625 367.226562 261.378906 368.152344 C 263.433594 368.636719 266.367188 367.710938 267.605469 368.835938 C 268.421875 369.585938 268.109375 371.328125 267.824219 372.675781 C 267.230469 375.5 266.808594 377.707031 266.234375 380.488281 C 265.726562 382.960938 265.308594 385.429688 263.191406 386.027344 C 262.152344 386.3125 260.675781 386.136719 259.351562 386.136719 L 255.511719 386.136719 C 253.589844 386.136719 249.421875 386.734375 248.273438 385.5625 C 247.5 384.789062 247.675781 383.203125 248.050781 381.480469 C 248.667969 378.5 249.265625 376.472656 249.863281 373.558594 C 250.171875 372.058594 250.28125 370.535156 250.875 369.71875 C 252.15625 367.953125 255.046875 368.242188 258.226562 368.242188 C 258.734375 367.511719 258.6875 366.210938 259.019531 365.304688 L 241.253906 365.304688 C 240.835938 366.054688 240.746094 367.136719 240.570312 368.128906 C 241.695312 368.351562 242.691406 368.242188 243.617188 368.242188 C 245.09375 368.261719 246.773438 368.261719 247.234375 369.585938 C 247.65625 370.777344 247.058594 372.410156 246.792969 373.648438 C 246.21875 376.296875 245.667969 378.832031 245.09375 381.457031 C 244.585938 383.863281 244.324219 385.652344 241.9375 386.09375 C 240.835938 386.292969 239.46875 386.09375 238.210938 386.09375 L 234.480469 386.09375 C 232.738281 386.09375 228.5 386.578125 227.464844 385.628906 C 226.644531 384.902344 226.933594 383.089844 227.242188 381.679688 C 227.882812 378.613281 228.28125 376.625 228.941406 373.648438 C 229.25 372.277344 229.449219 370.578125 229.957031 369.808594 C 231.191406 367.953125 234.304688 368.175781 237.414062 368.21875 C 237.835938 367.445312 237.878906 366.34375 238.097656 365.394531 C 232.449219 365.128906 226.292969 365.347656 220.445312 365.285156 C 219.914062 366.011719 219.960938 367.292969 219.652344 368.21875 C 221.835938 368.59375 225.101562 367.402344 226.207031 369.125 C 226.777344 370.003906 226.359375 371.816406 226.09375 373.074219 C 225.566406 375.609375 224.992188 378.191406 224.394531 380.886719 C 223.953125 382.894531 223.644531 385.144531 221.792969 385.871094 C 219.960938 386.601562 216.605469 386.09375 214.113281 386.09375 C 212.324219 386.09375 207.800781 386.644531 206.652344 385.628906 C 205.152344 384.328125 206.742188 380.070312 207.226562 377.816406 C 207.535156 376.382812 207.734375 375.125 208.023438 373.757812 C 208.351562 372.191406 208.640625 370.25 209.5 369.34375 C 210.890625 367.910156 213.824219 368.21875 216.628906 368.21875 C 216.957031 367.335938 217.113281 366.277344 217.3125 365.285156 L 199.527344 365.285156 C 199.195312 366.167969 199.0625 367.226562 198.839844 368.21875 C 201.070312 368.550781 203.9375 367.511719 205.175781 368.902344 C 205.902344 369.71875 205.550781 371.703125 205.285156 372.851562 C 204.667969 375.722656 204.160156 377.949219 203.585938 380.664062 C 203.101562 382.9375 202.878906 385.363281 200.652344 385.984375 C 198.664062 386.535156 195.664062 386.09375 192.949219 386.09375 C 191.03125 386.09375 186.792969 386.621094 185.710938 385.519531 C 184.851562 384.636719 185.269531 382.847656 185.601562 381.328125 C 185.933594 379.757812 186.242188 378.324219 186.503906 377.132812 C 187.058594 374.574219 187.320312 370.601562 188.777344 369.210938 C 190.148438 367.886719 193.015625 368.21875 195.6875 368.195312 C 196.214844 367.488281 196.128906 366.144531 196.480469 365.261719 L 189.019531 365.261719 C 189.417969 363.296875 189.882812 361.378906 190.257812 359.371094 L 208 359.371094 C 208.460938 358.550781 208.460938 357.273438 208.792969 356.324219 C 206.699219 355.972656 204.003906 356.917969 202.679688 355.992188 C 201.710938 355.308594 201.910156 353.652344 202.21875 352.152344 C 202.8125 349.371094 203.34375 346.679688 203.917969 344.011719 C 204.511719 341.25 204.800781 338.847656 207.867188 338.472656 C 210.183594 338.183594 212.457031 338.472656 215.324219 338.472656 C 217.398438 338.472656 221.085938 338.007812 221.988281 339.265625 C 222.585938 340.082031 222.320312 341.804688 221.988281 343.347656 C 221.394531 346.195312 220.910156 348.292969 220.292969 351.160156 C 220.003906 352.527344 219.804688 353.960938 219.277344 354.777344 C 218.0625 356.722656 215.195312 356.414062 211.839844 356.367188 M 249.289062 344.714844 C 247.234375 348.070312 247.675781 353.324219 252.003906 353.652344 C 256.414062 353.984375 260.277344 349.570312 259.703125 344.9375 C 259.371094 342.355469 257.210938 341.03125 254.273438 341.429688 C 251.847656 341.78125 250.105469 343.390625 249.289062 344.714844 M 217.046875 343.371094 C 216.363281 341.054688 212.5 341.273438 209.699219 341.671875 C 208.859375 345.578125 208 349.484375 207.203125 353.433594 L 209.34375 353.433594 C 209.832031 352.066406 209.832031 350.210938 210.472656 349.019531 C 214.554688 349.59375 217.953125 346.414062 217.046875 343.371094 M 237.746094 342.90625 C 236.929688 340.855469 232.914062 341.429688 230.398438 341.671875 C 229.648438 345.664062 228.785156 349.550781 227.90625 353.433594 L 230.15625 353.433594 C 230.53125 351.820312 230.730469 350.011719 231.28125 348.578125 C 234.636719 347.785156 233.6875 351.292969 234.105469 353.433594 L 236.398438 353.433594 C 236.070312 352.019531 236.464844 350.167969 236.070312 348.910156 C 235.871094 348.3125 235.386719 348.160156 235.164062 347.671875 C 236.90625 347.121094 238.605469 345.070312 237.746094 342.90625 M 272.703125 341.5625 C 271.886719 345.53125 270.980469 349.417969 270.207031 353.433594 L 272.347656 353.433594 C 272.878906 351.886719 272.921875 349.859375 273.585938 348.445312 L 277.777344 348.445312 C 277.953125 347.917969 278.21875 346.96875 278.109375 346.527344 L 273.804688 346.527344 C 274.136719 345.53125 274.203125 344.273438 274.597656 343.347656 L 279.234375 343.347656 C 279.320312 342.707031 279.5 342.179688 279.5625 341.539062 L 272.703125 341.539062 Z M 295.761719 341.5625 C 294.789062 345.402344 294.0625 349.503906 293.15625 353.433594 L 295.429688 353.433594 C 296.203125 349.417969 297.109375 345.554688 297.925781 341.5625 Z M 254.9375 375.832031 C 255.355469 377.929688 259.085938 377.730469 259.238281 379.5625 C 259.417969 382.011719 255.511719 381.898438 253.921875 380.796875 C 253.65625 381.4375 253.28125 381.964844 253.128906 382.714844 C 256.988281 384.679688 262.351562 382.164062 261.492188 378.304688 C 261.050781 376.296875 257.253906 376.296875 257.1875 374.574219 C 257.121094 372.585938 260.519531 372.566406 261.820312 373.449219 C 261.933594 372.699219 262.550781 372.433594 262.617188 371.640625 C 258.953125 369.960938 254.1875 372.167969 254.9375 375.832031 M 221.128906 373.117188 C 220.6875 370.644531 216.429688 371.109375 213.78125 371.417969 C 212.964844 375.367188 212.125 379.253906 211.289062 383.179688 C 215.546875 383.953125 221.152344 382.539062 220.335938 378.433594 C 220.136719 377.441406 219.410156 377.265625 218.636719 376.738281 C 220.09375 376.117188 221.4375 374.882812 221.128906 373.117188 M 233.90625 371.308594 C 233.621094 373.183594 232.40625 376.714844 232.207031 379.230469 C 231.964844 382.453125 233.796875 383.644531 236.511719 383.421875 C 242.070312 382.9375 241.9375 376.117188 243.175781 371.328125 L 240.902344 371.328125 C 239.929688 374.109375 240.152344 380.003906 237.613281 381.28125 C 237.105469 381.546875 236.445312 381.789062 235.695312 381.613281 C 233.664062 381.171875 234.679688 377.996094 235.011719 376.40625 C 235.429688 374.441406 235.671875 373.007812 236.023438 371.308594 Z M 233.90625 371.308594 &quot;/&gt;
&lt;path fill-rule=&quot;evenodd&quot; fill=&quot;rgb(0%, 42.349243%, 71.369934%)&quot; fill-opacity=&quot;1&quot; d=&quot;M 210.714844 347.210938 C 210.980469 345.90625 211.289062 344.695312 211.507812 343.371094 C 212.679688 342.839844 214.507812 343.171875 214.796875 344.054688 C 215.480469 346.152344 213.007812 347.851562 210.714844 347.210938 &quot;/&gt;
&lt;path fill-rule=&quot;evenodd&quot; fill=&quot;rgb(0%, 42.349243%, 71.369934%)&quot; fill-opacity=&quot;1&quot; d=&quot;M 235.386719 343.589844 C 236.222656 345.972656 234.214844 347.277344 231.546875 346.878906 C 231.921875 345.710938 231.988281 344.230469 232.449219 343.148438 C 233.597656 343.105469 234.765625 343.082031 235.386719 343.589844 &quot;/&gt;
&lt;path fill-rule=&quot;evenodd&quot; fill=&quot;rgb(0%, 42.349243%, 71.369934%)&quot; fill-opacity=&quot;1&quot; d=&quot;M 254.03125 343.261719 C 256.039062 342.839844 257.210938 343.964844 257.320312 345.863281 C 257.453125 348.488281 255.664062 351.269531 253.921875 351.734375 C 249.109375 353.058594 250.214844 346.085938 252.222656 344.164062 C 252.707031 343.703125 253.304688 343.390625 254.03125 343.261719 &quot;/&gt;
&lt;path fill-rule=&quot;evenodd&quot; fill=&quot;rgb(0%, 42.349243%, 71.369934%)&quot; fill-opacity=&quot;1&quot; d=&quot;M 218.636719 373.339844 C 219.253906 375.65625 217.179688 376.25 215.015625 376.164062 C 215.195312 375.015625 215.480469 373.976562 215.699219 372.875 C 216.804688 372.898438 218.105469 372.71875 218.636719 373.339844 &quot;/&gt;
&lt;path fill-rule=&quot;evenodd&quot; fill=&quot;rgb(0%, 42.349243%, 71.369934%)&quot; fill-opacity=&quot;1&quot; d=&quot;M 217.953125 378.65625 C 218.171875 381.214844 216.386719 381.769531 213.890625 381.589844 C 214.066406 380.222656 214.398438 379.007812 214.6875 377.75 C 216.164062 377.664062 217.398438 377.816406 217.953125 378.65625 &quot;/&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-0-3&quot; x=&quot;303.339701&quot; y=&quot;384.159853&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-4&quot; x=&quot;318.406012&quot; y=&quot;384.159853&quot;/&gt;
&lt;/g&gt;
&lt;path fill-rule=&quot;evenodd&quot; fill=&quot;rgb(0%, 42.349243%, 71.369934%)&quot; fill-opacity=&quot;1&quot; d=&quot;M 361.390625 215.929688 C 364.414062 215.46875 366.6875 216.921875 367.613281 219.21875 C 368.847656 222.328125 366.839844 226.390625 363.421875 226.898438 C 359.910156 227.425781 356.535156 224.734375 356.535156 221.359375 C 356.535156 218.246094 358.765625 216.328125 361.390625 215.929688 M 358.457031 223.523438 C 360.464844 227.515625 366.707031 226.058594 366.597656 221.269531 C 366.53125 218.644531 364.390625 216.570312 361.5 217.078125 C 358.917969 217.519531 356.953125 220.519531 358.457031 223.523438 &quot;/&gt;
&lt;path fill-rule=&quot;evenodd&quot; fill=&quot;rgb(0%, 42.349243%, 71.369934%)&quot; fill-opacity=&quot;1&quot; d=&quot;M 364.4375 219.109375 C 364.964844 220.035156 364.566406 221.335938 363.640625 221.492188 C 364.523438 221.933594 364.589844 223.167969 364.878906 224.207031 L 363.507812 224.207031 C 363.132812 223.148438 363.179688 221.667969 361.367188 222.066406 L 361.367188 224.207031 L 360.109375 224.207031 L 360.109375 218.777344 C 361.390625 218.402344 363.621094 218.378906 364.4375 219.109375 M 361.390625 219.550781 C 361.433594 220.078125 361.28125 220.785156 361.5 221.136719 C 364.214844 221.511719 363.441406 218.710938 361.390625 219.550781 &quot;/&gt;
&lt;path fill-rule=&quot;evenodd&quot; fill=&quot;rgb(0%, 42.349243%, 71.369934%)&quot; fill-opacity=&quot;1&quot; d=&quot;M 262.195312 241.265625 C 261.84375 242.125 261.710938 243.183594 261.511719 244.199219 C 267.164062 244.464844 273.320312 244.242188 279.144531 244.308594 C 279.675781 243.582031 279.628906 242.300781 279.941406 241.375 C 277.976562 240.824219 274.953125 241.882812 273.714844 240.800781 C 272.238281 239.5 273.871094 235.039062 274.289062 233.121094 C 274.597656 231.6875 274.820312 230.382812 275.085938 229.171875 C 275.703125 226.367188 275.878906 223.785156 279.035156 223.410156 C 281.417969 223.125 283.382812 223.410156 286.050781 223.410156 C 288.191406 223.410156 292.230469 222.992188 293.179688 224.207031 C 294.285156 225.597656 292.78125 230.121094 292.386719 231.90625 C 292.097656 233.164062 291.878906 234.445312 291.589844 235.746094 C 291.304688 237.027344 291.148438 238.617188 290.6875 239.476562 C 289.539062 241.59375 286.558594 241.351562 283.117188 241.285156 C 282.609375 242.058594 282.609375 243.339844 282.324219 244.332031 L 299.976562 244.332031 C 300.527344 243.648438 300.527344 242.390625 300.769531 241.394531 C 298.476562 240.867188 295.585938 241.96875 294.4375 240.601562 C 293.710938 239.742188 294.0625 237.953125 294.328125 236.761719 C 294.921875 234.070312 295.496094 231.730469 296.027344 229.191406 C 296.578125 226.5 296.6875 223.832031 299.867188 223.433594 C 302.050781 223.148438 304.457031 223.433594 307.324219 223.433594 C 309.265625 223.433594 313.039062 223.015625 313.988281 224.117188 C 314.738281 224.976562 314.277344 226.808594 313.988281 228.199219 C 313.328125 231.378906 312.953125 233.40625 312.289062 236.453125 C 311.960938 237.996094 311.671875 239.5 311.03125 240.183594 C 309.707031 241.660156 306.707031 241.308594 303.925781 241.308594 C 303.441406 242.082031 303.507812 243.359375 303.132812 244.242188 C 308.824219 244.507812 315.003906 244.289062 320.875 244.351562 C 321.273438 243.535156 321.402344 242.476562 321.558594 241.417969 C 319.617188 240.890625 316.683594 241.902344 315.445312 240.84375 C 314.476562 240.027344 314.804688 238.195312 315.113281 236.785156 C 315.734375 233.804688 316.285156 231.445312 316.925781 228.421875 C 317.476562 225.882812 317.917969 223.832031 320.652344 223.433594 C 322.925781 223.125 325.199219 223.433594 328.222656 223.433594 C 330.539062 223.433594 334.027344 223.035156 334.886719 224.226562 C 335.96875 225.726562 334.3125 230.472656 333.984375 232.039062 C 333.695312 233.339844 333.453125 234.597656 333.1875 235.878906 C 332.902344 237.226562 332.792969 238.726562 332.285156 239.609375 C 331.09375 241.660156 328.089844 241.351562 324.714844 241.308594 C 324.339844 242.148438 324.230469 243.25 324.03125 244.242188 C 329.679688 244.507812 335.835938 244.289062 341.664062 244.351562 C 342.167969 243.625 342.125 242.34375 342.457031 241.417969 C 339.589844 240.890625 335.8125 242.367188 335.550781 239.277344 C 335.484375 238.328125 335.925781 236.984375 336.234375 235.660156 C 336.71875 233.472656 337.226562 230.980469 337.710938 228.75 C 338.308594 225.972656 338.550781 223.808594 341.550781 223.433594 C 343.847656 223.148438 345.964844 223.433594 348.679688 223.433594 C 350.976562 223.433594 354.925781 222.96875 355.808594 224.339844 C 356.710938 225.726562 355.277344 230.296875 354.902344 232.039062 C 354.636719 233.339844 354.375 234.664062 354.128906 235.878906 C 353.644531 238.21875 353.292969 240.335938 351.417969 241.085938 C 349.871094 241.707031 347.753906 241.109375 345.65625 241.308594 C 345.125 242.035156 345.171875 243.292969 344.863281 244.242188 C 347.136719 244.507812 349.871094 244.289062 352.320312 244.351562 C 351.859375 246.25 351.417969 248.191406 351.085938 250.246094 L 333.34375 250.246094 C 332.835938 250.972656 332.855469 252.230469 332.546875 253.179688 C 334.601562 253.554688 337.800781 252.40625 338.992188 253.976562 C 339.632812 254.835938 339.300781 256.492188 338.992188 257.925781 C 338.417969 260.527344 337.84375 263.222656 337.292969 265.824219 C 336.808594 268.074219 336.410156 270.128906 334.6875 270.8125 C 332.902344 271.519531 329.523438 271.03125 327.121094 271.03125 C 325.488281 271.03125 320.898438 271.585938 319.660156 270.703125 C 318.316406 269.753906 319.152344 267.371094 319.550781 265.492188 C 320.058594 263.023438 320.476562 260.792969 321.027344 258.257812 C 321.292969 256.976562 321.535156 255.519531 321.933594 254.859375 C 323.148438 252.871094 326.28125 253.113281 329.503906 253.160156 C 329.835938 252.277344 329.964844 251.195312 330.1875 250.222656 L 312.421875 250.222656 C 312.070312 251.039062 311.980469 252.121094 311.738281 253.046875 C 313.792969 253.535156 316.726562 252.605469 317.960938 253.730469 C 318.777344 254.480469 318.46875 256.226562 318.183594 257.570312 C 317.585938 260.398438 317.167969 262.601562 316.59375 265.382812 C 316.085938 267.855469 315.667969 270.328125 313.546875 270.921875 C 312.511719 271.210938 311.03125 271.03125 309.707031 271.03125 L 305.867188 271.03125 C 303.949219 271.03125 299.777344 271.628906 298.628906 270.460938 C 297.859375 269.6875 298.035156 268.097656 298.410156 266.375 C 299.027344 263.398438 299.625 261.367188 300.21875 258.453125 C 300.527344 256.953125 300.640625 255.429688 301.234375 254.613281 C 302.515625 252.847656 305.40625 253.136719 308.582031 253.136719 C 309.089844 252.40625 309.046875 251.105469 309.378906 250.203125 L 291.613281 250.203125 C 291.195312 250.953125 291.105469 252.03125 290.929688 253.027344 C 292.054688 253.246094 293.046875 253.136719 293.972656 253.136719 C 295.453125 253.160156 297.128906 253.160156 297.59375 254.480469 C 298.011719 255.675781 297.417969 257.308594 297.152344 258.542969 C 296.578125 261.191406 296.027344 263.730469 295.453125 266.355469 C 294.945312 268.761719 294.679688 270.546875 292.296875 270.988281 C 291.195312 271.1875 289.824219 270.988281 288.566406 270.988281 L 284.839844 270.988281 C 283.09375 270.988281 278.859375 271.472656 277.820312 270.527344 C 277.003906 269.796875 277.292969 267.988281 277.601562 266.574219 C 278.242188 263.507812 278.636719 261.523438 279.300781 258.542969 C 279.609375 257.175781 279.808594 255.476562 280.316406 254.703125 C 281.550781 252.847656 284.660156 253.070312 287.773438 253.113281 C 288.191406 252.34375 288.238281 251.238281 288.457031 250.289062 C 282.808594 250.023438 276.652344 250.246094 270.804688 250.179688 C 270.273438 250.90625 270.316406 252.1875 270.007812 253.113281 C 272.195312 253.488281 275.460938 252.296875 276.5625 254.019531 C 277.136719 254.902344 276.71875 256.710938 276.453125 257.96875 C 275.921875 260.507812 275.347656 263.089844 274.753906 265.78125 C 274.3125 267.789062 274.003906 270.039062 272.148438 270.769531 C 270.316406 271.496094 266.964844 270.988281 264.46875 270.988281 C 262.683594 270.988281 258.160156 271.539062 257.011719 270.527344 C 255.511719 269.222656 257.101562 264.964844 257.585938 262.714844 C 257.894531 261.277344 258.09375 260.019531 258.378906 258.652344 C 258.710938 257.085938 258.996094 255.144531 259.859375 254.238281 C 261.25 252.804688 264.183594 253.113281 266.984375 253.113281 C 267.316406 252.230469 267.472656 251.171875 267.671875 250.179688 L 249.882812 250.179688 C 249.550781 251.0625 249.421875 252.121094 249.199219 253.113281 C 251.429688 253.445312 254.296875 252.40625 255.53125 253.796875 C 256.261719 254.613281 255.90625 256.601562 255.644531 257.75 C 255.023438 260.617188 254.519531 262.847656 253.945312 265.558594 C 253.457031 267.832031 253.238281 270.261719 251.007812 270.878906 C 249.023438 271.429688 246.023438 270.988281 243.308594 270.988281 C 241.386719 270.988281 237.152344 271.519531 236.070312 270.414062 C 235.207031 269.53125 235.628906 267.746094 235.957031 266.222656 C 236.289062 264.65625 236.597656 263.222656 236.863281 262.03125 C 237.414062 259.46875 237.679688 255.496094 239.136719 254.105469 C 240.503906 252.78125 243.375 253.113281 246.042969 253.09375 C 246.574219 252.386719 246.484375 251.039062 246.839844 250.15625 L 239.378906 250.15625 C 239.777344 248.191406 240.238281 246.273438 240.613281 244.265625 L 258.359375 244.265625 C 258.820312 243.449219 258.820312 242.167969 259.152344 241.21875 C 257.054688 240.867188 254.363281 241.816406 253.039062 240.890625 C 252.066406 240.203125 252.265625 238.550781 252.574219 237.050781 C 253.171875 234.269531 253.703125 231.578125 254.273438 228.90625 C 254.871094 226.148438 255.15625 223.742188 258.226562 223.367188 C 260.542969 223.082031 262.816406 223.367188 265.683594 223.367188 C 267.757812 223.367188 271.445312 222.902344 272.347656 224.160156 C 272.945312 224.976562 272.679688 226.699219 272.347656 228.246094 C 271.753906 231.089844 271.265625 233.1875 270.648438 236.054688 C 270.363281 237.425781 270.164062 238.859375 269.632812 239.675781 C 268.421875 241.617188 265.550781 241.308594 262.195312 241.265625 M 299.644531 229.613281 C 297.59375 232.964844 298.035156 238.21875 302.359375 238.550781 C 306.773438 238.878906 310.636719 234.46875 310.0625 229.832031 C 309.730469 227.25 307.566406 225.925781 304.632812 226.324219 C 302.207031 226.675781 300.460938 228.289062 299.644531 229.613281 M 267.40625 228.265625 C 266.722656 225.949219 262.859375 226.167969 260.058594 226.566406 C 259.21875 230.472656 258.359375 234.378906 257.5625 238.328125 L 259.703125 238.328125 C 260.1875 236.960938 260.1875 235.105469 260.828125 233.914062 C 264.910156 234.488281 268.308594 231.3125 267.40625 228.265625 M 288.105469 227.804688 C 287.289062 225.75 283.273438 226.324219 280.757812 226.566406 C 280.003906 230.5625 279.144531 234.445312 278.261719 238.328125 L 280.511719 238.328125 C 280.886719 236.71875 281.085938 234.910156 281.640625 233.472656 C 284.992188 232.679688 284.042969 236.1875 284.464844 238.328125 L 286.757812 238.328125 C 286.425781 236.917969 286.824219 235.0625 286.425781 233.804688 C 286.230469 233.210938 285.742188 233.054688 285.523438 232.570312 C 287.265625 232.019531 288.964844 229.964844 288.105469 227.804688 M 323.058594 226.457031 C 322.242188 230.429688 321.339844 234.3125 320.566406 238.328125 L 322.707031 238.328125 C 323.234375 236.785156 323.28125 234.753906 323.941406 233.339844 L 328.136719 233.339844 C 328.3125 232.8125 328.578125 231.863281 328.464844 231.421875 L 324.164062 231.421875 C 324.492188 230.429688 324.558594 229.171875 324.957031 228.246094 L 329.589844 228.246094 C 329.679688 227.605469 329.855469 227.074219 329.921875 226.433594 L 323.058594 226.433594 Z M 346.121094 226.457031 C 345.148438 230.296875 344.421875 234.402344 343.515625 238.328125 L 345.789062 238.328125 C 346.5625 234.3125 347.464844 230.449219 348.28125 226.457031 Z M 305.296875 260.726562 C 305.714844 262.824219 309.445312 262.625 309.597656 264.457031 C 309.773438 266.90625 305.867188 266.796875 304.28125 265.691406 C 304.015625 266.332031 303.640625 266.863281 303.484375 267.613281 C 307.347656 269.578125 312.710938 267.0625 311.847656 263.199219 C 311.40625 261.191406 307.613281 261.191406 307.546875 259.46875 C 307.480469 257.484375 310.878906 257.460938 312.179688 258.34375 C 312.289062 257.59375 312.910156 257.328125 312.972656 256.535156 C 309.3125 254.859375 304.542969 257.0625 305.296875 260.726562 M 271.488281 258.011719 C 271.046875 255.542969 266.789062 256.003906 264.140625 256.3125 C 263.324219 260.265625 262.484375 264.148438 261.644531 268.074219 C 265.90625 268.847656 271.507812 267.4375 270.691406 263.332031 C 270.496094 262.339844 269.765625 262.160156 268.992188 261.632812 C 270.449219 261.015625 271.796875 259.777344 271.488281 258.011719 M 284.265625 256.203125 C 283.976562 258.078125 282.765625 261.609375 282.566406 264.125 C 282.324219 267.347656 284.15625 268.539062 286.867188 268.320312 C 292.429688 267.832031 292.296875 261.015625 293.53125 256.226562 L 291.261719 256.226562 C 290.289062 259.007812 290.511719 264.898438 287.972656 266.179688 C 287.464844 266.441406 286.800781 266.6875 286.050781 266.507812 C 284.023438 266.066406 285.035156 262.890625 285.367188 261.300781 C 285.789062 259.335938 286.03125 257.902344 286.382812 256.203125 Z M 284.265625 256.203125 &quot;/&gt;
&lt;path fill-rule=&quot;evenodd&quot; fill=&quot;rgb(0%, 42.349243%, 71.369934%)&quot; fill-opacity=&quot;1&quot; d=&quot;M 261.070312 232.105469 C 261.335938 230.804688 261.644531 229.589844 261.867188 228.265625 C 263.035156 227.738281 264.867188 228.066406 265.152344 228.949219 C 265.839844 231.046875 263.367188 232.746094 261.070312 232.105469 &quot;/&gt;
&lt;path fill-rule=&quot;evenodd&quot; fill=&quot;rgb(0%, 42.349243%, 71.369934%)&quot; fill-opacity=&quot;1&quot; d=&quot;M 285.742188 228.488281 C 286.582031 230.871094 284.574219 232.171875 281.902344 231.773438 C 282.277344 230.605469 282.34375 229.125 282.808594 228.046875 C 283.957031 228 285.125 227.980469 285.742188 228.488281 &quot;/&gt;
&lt;path fill-rule=&quot;evenodd&quot; fill=&quot;rgb(0%, 42.349243%, 71.369934%)&quot; fill-opacity=&quot;1&quot; d=&quot;M 304.390625 228.15625 C 306.398438 227.738281 307.566406 228.863281 307.679688 230.761719 C 307.8125 233.386719 306.023438 236.167969 304.28125 236.628906 C 299.46875 237.953125 300.574219 230.980469 302.582031 229.0625 C 303.066406 228.597656 303.660156 228.289062 304.390625 228.15625 &quot;/&gt;
&lt;path fill-rule=&quot;evenodd&quot; fill=&quot;rgb(0%, 42.349243%, 71.369934%)&quot; fill-opacity=&quot;1&quot; d=&quot;M 268.992188 258.234375 C 269.613281 260.550781 267.539062 261.148438 265.375 261.058594 C 265.550781 259.910156 265.839844 258.875 266.058594 257.769531 C 267.164062 257.792969 268.464844 257.617188 268.992188 258.234375 &quot;/&gt;
&lt;path fill-rule=&quot;evenodd&quot; fill=&quot;rgb(0%, 42.349243%, 71.369934%)&quot; fill-opacity=&quot;1&quot; d=&quot;M 268.308594 263.550781 C 268.53125 266.113281 266.742188 266.664062 264.25 266.488281 C 264.425781 265.117188 264.757812 263.90625 265.042969 262.648438 C 266.523438 262.558594 267.757812 262.714844 268.308594 263.550781 &quot;/&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-0-4&quot; x=&quot;354.473334&quot; y=&quot;269.055777&quot;/&gt;
&lt;/g&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-0-5&quot; x=&quot;365.678839&quot; y=&quot;269.055777&quot;/&gt;
&lt;/g&gt;
&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;rgb(100%, 100%, 100%)&quot; fill-opacity=&quot;1&quot; d=&quot;M 119.683594 167.582031 L 130.566406 167.582031 L 130.566406 181.726562 L 119.683594 181.726562 Z M 119.683594 167.582031 &quot;/&gt;
&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;rgb(100%, 100%, 100%)&quot; fill-opacity=&quot;1&quot; d=&quot;M 140.339844 167.46875 L 151.21875 167.46875 L 151.21875 181.617188 L 140.339844 181.617188 Z M 140.339844 167.46875 &quot;/&gt;
&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;rgb(100%, 100%, 100%)&quot; fill-opacity=&quot;1&quot; d=&quot;M 161.746094 167.46875 L 172.625 167.46875 L 172.625 181.617188 L 161.746094 181.617188 Z M 161.746094 167.46875 &quot;/&gt;
&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;rgb(100%, 100%, 100%)&quot; fill-opacity=&quot;1&quot; d=&quot;M 181.847656 167.46875 L 192.730469 167.46875 L 192.730469 181.617188 L 181.847656 181.617188 Z M 181.847656 167.46875 &quot;/&gt;
&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;rgb(100%, 100%, 100%)&quot; fill-opacity=&quot;1&quot; d=&quot;M 98.589844 167.46875 L 109.46875 167.46875 L 109.46875 181.617188 L 98.589844 181.617188 Z M 98.589844 167.46875 &quot;/&gt;
&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;rgb(100%, 100%, 100%)&quot; fill-opacity=&quot;1&quot; d=&quot;M 101.789062 197.503906 L 115.582031 197.503906 L 115.582031 211.648438 L 101.789062 211.648438 Z M 101.789062 197.503906 &quot;/&gt;
&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;rgb(100%, 100%, 100%)&quot; fill-opacity=&quot;1&quot; d=&quot;M 122.597656 197.304688 L 135.816406 197.304688 L 135.816406 211.449219 L 122.597656 211.449219 Z M 122.597656 197.304688 &quot;/&gt;
&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;rgb(100%, 100%, 100%)&quot; fill-opacity=&quot;1&quot; d=&quot;M 143.671875 197.988281 L 156.890625 197.988281 L 156.890625 212.136719 L 143.671875 212.136719 Z M 143.671875 197.988281 &quot;/&gt;
&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;rgb(17.649841%, 65.098572%, 48.239136%)&quot; fill-opacity=&quot;1&quot; d=&quot;M 106.621094 173.007812 C 106.84375 172.65625 106.953125 172.257812 106.953125 171.816406 C 106.953125 171.554688 106.886719 171.289062 106.796875 171.132812 C 106.6875 170.933594 106.511719 170.78125 106.289062 170.714844 C 106.089844 170.625 105.605469 170.582031 104.898438 170.582031 L 103.332031 170.582031 L 102.714844 173.980469 L 103.398438 173.980469 C 104.546875 173.980469 105.339844 173.890625 105.714844 173.757812 C 106.089844 173.605469 106.402344 173.339844 106.621094 173.007812 &quot;/&gt;
&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;rgb(17.649841%, 65.098572%, 48.239136%)&quot; fill-opacity=&quot;1&quot; d=&quot;M 127.761719 172.8125 C 127.984375 172.5 128.09375 172.125 128.09375 171.773438 C 128.09375 171.332031 127.9375 171.023438 127.609375 170.800781 C 127.429688 170.691406 127.011719 170.625 126.371094 170.625 L 123.988281 170.625 L 123.4375 173.78125 L 124.5625 173.78125 C 125.730469 173.78125 126.527344 173.691406 126.878906 173.539062 C 127.230469 173.382812 127.5625 173.121094 127.761719 172.8125 &quot;/&gt;
&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;rgb(17.649841%, 65.098572%, 48.239136%)&quot; fill-opacity=&quot;1&quot; d=&quot;M 197.847656 166.941406 L 197.695312 166.5 L 197.472656 166.125 L 197.164062 165.816406 L 196.722656 165.527344 L 196.257812 165.375 L 182.753906 165.375 L 182.222656 165.527344 L 181.785156 165.816406 L 181.253906 166.125 L 180.878906 166.5 L 180.589844 166.941406 L 180.28125 167.46875 L 180.128906 168 L 177.746094 181.152344 L 177.746094 181.59375 L 177.8125 182.058594 L 177.964844 182.5625 L 178.273438 182.941406 L 178.5625 183.335938 L 178.9375 183.691406 L 179.398438 183.84375 L 179.929688 183.910156 L 184.320312 183.910156 L 183.945312 186.515625 L 166.070312 186.515625 L 166.558594 183.910156 L 171.523438 183.910156 L 172.117188 183.84375 L 172.625 183.691406 L 173.15625 183.402344 L 173.683594 183.027344 L 174.058594 182.652344 L 174.433594 182.125 L 174.742188 181.660156 L 174.898438 181.152344 L 177.28125 168 L 177.347656 167.46875 L 177.28125 166.941406 L 177.0625 166.5 L 176.816406 166.125 L 176.507812 165.816406 L 176.066406 165.527344 L 175.625 165.375 L 161.769531 165.375 L 161.261719 165.527344 L 160.796875 165.816406 L 160.289062 166.125 L 159.890625 166.5 L 159.582031 166.941406 L 159.363281 167.46875 L 159.230469 168 L 156.847656 181.152344 L 156.757812 181.59375 L 156.914062 182.058594 L 157.066406 182.5625 L 157.289062 182.941406 L 157.597656 183.335938 L 158.039062 183.625 L 158.480469 183.84375 L 158.945312 183.910156 L 163.488281 183.910156 L 163.046875 186.515625 L 145.105469 186.515625 L 145.570312 183.910156 L 150.667969 183.910156 L 151.265625 183.84375 L 151.792969 183.691406 L 152.234375 183.402344 L 152.765625 183.027344 L 153.140625 182.652344 L 153.515625 182.125 L 153.734375 181.660156 L 153.890625 181.152344 L 156.273438 168 L 156.339844 167.46875 L 156.273438 166.941406 L 156.117188 166.5 L 155.808594 166.125 L 155.523438 165.816406 L 155.082031 165.527344 L 154.617188 165.375 L 140.847656 165.375 L 140.253906 165.527344 L 139.8125 165.816406 L 139.347656 166.125 L 138.90625 166.5 L 138.597656 166.941406 L 138.375 167.46875 L 138.222656 168 L 135.839844 181.152344 L 135.839844 182.058594 L 136.082031 182.5625 L 136.300781 182.941406 L 136.589844 183.335938 L 137.050781 183.625 L 137.492188 183.84375 L 137.933594 183.910156 L 142.722656 183.910156 L 142.195312 186.515625 L 124.078125 186.515625 L 124.605469 183.910156 L 129.503906 183.910156 L 130.035156 183.84375 L 130.628906 183.691406 L 131.160156 183.402344 L 131.667969 183.027344 L 132.132812 182.652344 L 132.507812 182.125 L 132.816406 181.660156 L 132.949219 181.152344 L 135.332031 168 L 135.417969 167.46875 L 135.332031 166.941406 L 135.199219 166.5 L 134.890625 166.125 L 134.582031 165.816406 L 134.140625 165.527344 L 133.699219 165.375 L 119.839844 165.375 L 119.332031 165.527344 L 118.800781 165.816406 L 118.359375 166.125 L 117.898438 166.5 L 117.589844 166.941406 L 117.367188 167.46875 L 117.214844 168 L 114.832031 181.152344 L 114.832031 181.59375 L 114.917969 182.058594 L 115.140625 182.5625 L 115.449219 182.941406 L 115.824219 183.335938 L 116.265625 183.625 L 116.726562 183.84375 L 117.167969 183.910156 L 121.648438 183.910156 L 121.207031 186.515625 L 103.3125 186.515625 L 103.773438 183.910156 L 108.851562 183.910156 L 109.359375 183.84375 L 109.886719 183.691406 L 110.417969 183.402344 L 110.945312 183.027344 L 111.320312 182.652344 L 111.695312 182.210938 L 111.984375 181.746094 L 112.136719 181.152344 L 114.457031 168.066406 L 114.523438 167.46875 L 114.457031 167.027344 L 114.300781 166.566406 L 114.082031 166.210938 L 113.769531 165.816406 L 113.328125 165.59375 L 112.867188 165.441406 L 112.359375 165.375 L 99.671875 165.375 L 99.140625 165.441406 L 98.609375 165.59375 L 98.167969 165.816406 L 97.640625 166.210938 L 97.265625 166.566406 L 96.957031 167.027344 L 96.734375 167.46875 L 96.582031 168.066406 L 94.199219 181.152344 L 94.132812 181.660156 L 94.199219 182.121094 L 94.351562 182.652344 L 94.660156 183.027344 L 94.949219 183.402344 L 95.324219 183.691406 L 95.785156 183.84375 L 96.292969 183.910156 L 100.882812 183.910156 L 100.421875 186.515625 L 82.039062 186.515625 L 80.847656 192.980469 L 88.59375 192.980469 L 88.152344 195.585938 L 82.988281 195.585938 L 82.457031 195.671875 L 81.929688 195.804688 L 81.398438 196.113281 L 80.957031 196.421875 L 80.582031 196.863281 L 80.273438 197.238281 L 80.050781 197.769531 L 79.898438 198.296875 L 77.449219 211.449219 L 77.449219 212.488281 L 77.667969 212.863281 L 77.890625 213.304688 L 78.265625 213.613281 L 78.640625 213.855469 L 79.167969 213.988281 L 79.632812 214.078125 L 92.320312 214.078125 L 92.851562 213.988281 L 93.378906 213.855469 L 93.910156 213.613281 L 94.261719 213.304688 L 94.726562 212.863281 L 95.035156 212.488281 L 95.257812 211.957031 L 95.476562 211.449219 L 97.859375 198.296875 L 97.925781 197.769531 L 97.859375 197.238281 L 97.640625 196.796875 L 97.417969 196.421875 L 97.042969 196.113281 L 96.648438 195.804688 L 96.207031 195.671875 L 95.675781 195.585938 L 91.285156 195.585938 L 91.660156 192.980469 L 109.425781 192.980469 L 108.984375 195.585938 L 103.6875 195.585938 L 103.15625 195.671875 L 102.628906 195.804688 L 102.097656 196.113281 L 101.65625 196.421875 L 101.28125 196.863281 L 100.972656 197.238281 L 100.683594 197.769531 L 100.617188 198.296875 L 98.148438 211.449219 L 98.082031 212.023438 L 98.148438 212.488281 L 98.300781 212.863281 L 98.589844 213.304688 L 98.964844 213.613281 L 99.359375 213.855469 L 99.800781 213.988281 L 100.332031 214.078125 L 113.019531 214.078125 L 113.550781 213.988281 L 114.082031 213.855469 L 114.609375 213.613281 L 114.984375 213.304688 L 115.425781 212.863281 L 115.734375 212.488281 L 116.042969 211.957031 L 116.175781 211.449219 L 118.558594 198.296875 L 118.558594 197.238281 L 118.339844 196.796875 L 118.117188 196.421875 L 117.367188 195.804688 L 116.90625 195.671875 L 116.375 195.585938 L 112.027344 195.585938 L 112.492188 192.980469 L 130.300781 192.980469 L 129.925781 195.585938 L 124.714844 195.585938 L 124.121094 195.671875 L 123.589844 195.804688 L 123.148438 196.113281 L 122.621094 196.421875 L 122.246094 196.863281 L 121.9375 197.238281 L 121.714844 197.769531 L 121.5625 198.296875 L 119.179688 211.449219 L 119.113281 211.957031 L 119.179688 212.488281 L 119.332031 212.863281 L 119.554688 213.304688 L 119.949219 213.613281 L 120.304688 213.855469 L 120.832031 213.988281 L 121.296875 214.078125 L 133.851562 214.078125 L 134.449219 213.988281 L 134.910156 213.855469 L 135.441406 213.613281 L 135.882812 213.304688 L 136.257812 212.863281 L 136.632812 212.488281 L 136.855469 211.957031 L 137.007812 211.449219 L 139.390625 198.296875 L 139.457031 197.769531 L 139.390625 197.238281 L 139.238281 196.796875 L 139.015625 196.421875 L 138.265625 195.804688 L 137.738281 195.671875 L 137.207031 195.585938 L 132.902344 195.585938 L 133.433594 192.980469 L 151.21875 192.980469 L 150.757812 195.585938 L 145.59375 195.585938 L 145.0625 195.671875 L 144.535156 195.804688 L 144.003906 196.113281 L 143.5625 196.421875 L 143.1875 196.863281 L 142.878906 197.238281 L 142.589844 197.769531 L 142.4375 198.296875 L 140.054688 211.449219 L 140.054688 211.957031 L 140.121094 212.488281 L 140.273438 212.863281 L 140.496094 213.304688 L 140.871094 213.613281 L 141.246094 213.855469 L 141.773438 213.988281 L 142.214844 214.078125 L 154.53125 214.078125 L 155.058594 213.988281 L 155.589844 213.855469 L 156.117188 213.613281 L 156.558594 213.304688 L 156.933594 212.863281 L 157.246094 212.488281 L 157.464844 211.957031 L 157.621094 211.449219 L 160.070312 198.296875 L 160.15625 197.769531 L 160.070312 197.238281 L 159.847656 196.796875 L 159.605469 196.421875 L 159.253906 196.113281 L 158.878906 195.804688 L 158.414062 195.671875 L 157.882812 195.585938 L 153.734375 195.585938 L 154.199219 192.980469 L 171.808594 192.980469 L 171.433594 195.585938 L 166.269531 195.585938 L 165.738281 195.671875 L 165.210938 195.804688 L 164.679688 196.113281 L 164.304688 196.421875 L 163.863281 196.863281 L 163.554688 197.238281 L 163.246094 197.769531 L 163.113281 198.296875 L 160.730469 211.449219 L 160.730469 211.957031 L 160.796875 212.488281 L 160.953125 212.863281 L 161.261719 213.304688 L 161.480469 213.613281 L 161.921875 213.855469 L 162.453125 213.988281 L 162.914062 214.078125 L 175.492188 214.078125 L 176.023438 213.988281 L 176.554688 213.855469 L 177.082031 213.613281 L 177.523438 213.304688 L 177.898438 212.863281 L 178.207031 212.488281 L 178.429688 211.957031 L 178.582031 211.449219 L 181.03125 198.296875 L 181.097656 197.769531 L 181.03125 197.238281 L 180.8125 196.796875 L 180.589844 196.421875 L 180.28125 196.113281 L 179.820312 195.804688 L 179.378906 195.671875 L 178.847656 195.585938 L 174.546875 195.585938 L 174.988281 192.980469 L 193.082031 192.980469 L 194.25 186.515625 L 186.96875 186.515625 L 187.34375 183.910156 L 192.132812 183.910156 L 192.730469 183.84375 L 193.257812 183.691406 L 193.765625 183.402344 L 194.296875 183.027344 L 194.757812 182.652344 L 195.132812 182.125 L 195.355469 181.660156 L 195.507812 181.152344 L 197.890625 168 L 197.957031 167.46875 Z M 101.566406 180.445312 L 99.40625 180.445312 L 101.566406 168.574219 L 105.828125 168.574219 C 106.554688 168.574219 107.171875 168.683594 107.613281 168.859375 C 108.054688 169.058594 108.410156 169.414062 108.671875 169.855469 C 108.9375 170.339844 109.046875 170.890625 109.046875 171.554688 C 109.046875 172.148438 108.960938 172.746094 108.738281 173.296875 C 108.542969 173.871094 108.253906 174.332031 107.988281 174.6875 C 107.679688 175.039062 107.371094 175.304688 107.039062 175.457031 C 106.710938 175.613281 106.203125 175.769531 105.648438 175.855469 C 105.320312 175.898438 104.679688 175.945312 103.730469 175.945312 L 102.363281 175.945312 Z M 112.269531 198.320312 L 114.808594 198.320312 L 112.667969 210.988281 L 109.910156 210.988281 L 106.113281 202.09375 L 106.070312 202.09375 L 104.636719 210.988281 L 102.054688 210.988281 L 104.195312 198.320312 L 107.039062 198.320312 L 110.8125 207.324219 L 110.859375 207.324219 Z M 123.082031 175.503906 L 122.199219 180.445312 L 120.039062 180.445312 L 122.199219 168.59375 L 126.835938 168.59375 C 127.609375 168.59375 128.246094 168.683594 128.6875 168.859375 C 129.128906 169.035156 129.484375 169.390625 129.769531 169.875 C 130.035156 170.382812 130.1875 171 130.1875 171.683594 C 130.1875 172.679688 129.925781 173.496094 129.460938 174.15625 C 128.929688 174.820312 128.160156 175.214844 127.078125 175.390625 C 127.363281 175.65625 127.628906 176.054688 127.851562 176.472656 C 128.335938 177.402344 128.867188 178.726562 129.460938 180.402344 L 127.167969 180.402344 C 126.96875 179.738281 126.59375 178.703125 126.039062 177.269531 C 125.730469 176.496094 125.421875 175.964844 125.09375 175.722656 C 124.894531 175.589844 124.496094 175.480469 123.988281 175.480469 L 123.082031 175.480469 Z M 135.15625 198.320312 L 134.78125 200.660156 L 127.960938 200.660156 L 127.496094 203.375 L 133.808594 203.375 L 133.433594 205.535156 L 127.121094 205.535156 L 126.59375 208.648438 L 133.523438 208.648438 L 133.125 210.988281 L 123.4375 210.988281 L 125.578125 198.320312 Z M 142.589844 179.871094 C 141.953125 179.386719 141.464844 178.746094 141.222656 178.039062 C 140.9375 177.3125 140.804688 176.5625 140.804688 175.8125 L 140.804688 175.789062 C 140.804688 175.105469 140.890625 174.378906 141.089844 173.605469 C 141.332031 172.566406 141.6875 171.707031 142.171875 170.933594 C 142.65625 170.164062 143.296875 169.566406 144.027344 169.125 C 144.753906 168.707031 145.636719 168.484375 146.585938 168.484375 C 147.867188 168.484375 148.902344 168.925781 149.675781 169.832031 C 150.449219 170.734375 150.84375 171.972656 150.84375 173.449219 C 150.84375 174.6875 150.578125 175.898438 150.09375 177.027344 C 149.585938 178.195312 148.878906 179.121094 147.996094 179.71875 C 147.113281 180.3125 146.121094 180.644531 145.019531 180.644531 C 144.070312 180.601562 143.230469 180.359375 142.589844 179.871094 M 156.140625 199.003906 L 155.742188 201.34375 L 151.992188 201.34375 L 150.269531 211.671875 L 147.46875 211.671875 L 149.210938 201.34375 L 145.261719 201.34375 L 145.660156 199.003906 Z M 164.746094 180.46875 L 162.605469 180.46875 L 164.769531 168.617188 L 172.007812 168.617188 L 171.589844 170.625 L 166.558594 170.625 L 166.050781 173.472656 L 171.082031 173.472656 L 170.683594 175.480469 L 165.695312 175.480469 Z M 187.632812 180.46875 L 185.511719 180.46875 L 187.652344 168.59375 L 189.816406 168.59375 Z M 187.632812 180.46875 &quot;/&gt;
&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;rgb(17.649841%, 65.098572%, 48.239136%)&quot; fill-opacity=&quot;1&quot; d=&quot;M 148.769531 173.429688 C 148.769531 172.5 148.550781 171.773438 148.109375 171.222656 C 147.667969 170.714844 147.09375 170.425781 146.410156 170.425781 C 145.371094 170.425781 144.488281 170.980469 143.847656 172.082031 C 143.210938 173.1875 142.878906 174.421875 142.878906 175.746094 C 142.878906 176.5625 143.097656 177.246094 143.519531 177.796875 C 143.960938 178.328125 144.535156 178.636719 145.261719 178.636719 C 145.8125 178.636719 146.386719 178.414062 146.894531 177.996094 C 147.445312 177.597656 147.886719 176.894531 148.242188 176.011719 C 148.570312 175.148438 148.769531 174.289062 148.769531 173.429688 &quot;/&gt;
&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;rgb(100%, 100%, 100%)&quot; fill-opacity=&quot;1&quot; d=&quot;M 209.476562 163.652344 C 209.476562 166.457031 207.203125 168.707031 204.425781 168.707031 C 201.621094 168.707031 199.371094 166.433594 199.371094 163.652344 C 199.371094 160.851562 201.644531 158.597656 204.425781 158.597656 C 207.203125 158.597656 209.476562 160.871094 209.476562 163.652344 &quot;/&gt;
&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;rgb(17.649841%, 65.098572%, 48.239136%)&quot; fill-opacity=&quot;1&quot; d=&quot;M 209.898438 163.785156 C 209.898438 164.777344 209.65625 165.726562 209.148438 166.585938 C 208.640625 167.449219 207.957031 168.132812 207.09375 168.640625 C 206.234375 169.125 205.308594 169.390625 204.292969 169.390625 C 203.300781 169.390625 202.371094 169.148438 201.511719 168.640625 C 200.652344 168.132812 199.96875 167.46875 199.460938 166.585938 C 198.953125 165.726562 198.710938 164.800781 198.710938 163.785156 C 198.710938 162.792969 198.953125 161.863281 199.460938 160.980469 C 199.96875 160.121094 200.652344 159.4375 201.511719 158.929688 C 202.371094 158.445312 203.300781 158.179688 204.292969 158.179688 C 205.285156 158.179688 206.234375 158.421875 207.09375 158.929688 C 207.957031 159.4375 208.640625 160.101562 209.148438 160.980469 C 209.65625 161.84375 209.898438 162.792969 209.898438 163.785156 M 208.816406 163.785156 C 208.816406 162.550781 208.375 161.488281 207.492188 160.605469 C 206.609375 159.722656 205.550781 159.285156 204.3125 159.285156 C 203.078125 159.285156 202.019531 159.722656 201.136719 160.605469 C 200.253906 161.488281 199.8125 162.550781 199.8125 163.785156 C 199.8125 165.019531 200.253906 166.078125 201.136719 166.960938 C 202.019531 167.84375 203.078125 168.285156 204.3125 168.285156 C 205.550781 168.285156 206.609375 167.84375 207.492188 166.960938 C 208.375 166.078125 208.816406 165.019531 208.816406 163.785156 M 201.777344 160.785156 L 204.445312 160.785156 C 205.195312 160.785156 205.75 160.9375 206.078125 161.246094 C 206.410156 161.554688 206.585938 161.953125 206.585938 162.484375 C 206.585938 162.878906 206.453125 163.234375 206.191406 163.519531 C 205.925781 163.808594 205.527344 164.027344 204.976562 164.160156 C 205.195312 164.25 205.375 164.335938 205.484375 164.445312 C 205.636719 164.578125 205.792969 164.777344 205.96875 165.066406 C 205.96875 165.085938 206.300781 165.660156 206.941406 166.785156 L 205.175781 166.785156 C 204.601562 165.660156 204.226562 164.976562 204.027344 164.757812 C 203.828125 164.535156 203.628906 164.425781 203.429688 164.425781 C 203.386719 164.425781 203.320312 164.425781 203.253906 164.445312 L 203.253906 166.785156 L 201.777344 166.785156 Z M 203.277344 163.320312 L 203.917969 163.320312 C 204.335938 163.320312 204.644531 163.253906 204.820312 163.121094 C 205 162.992188 205.085938 162.8125 205.085938 162.59375 C 205.085938 162.371094 205 162.195312 204.84375 162.0625 C 204.667969 161.929688 204.378906 161.863281 203.984375 161.863281 L 203.277344 161.863281 Z M 203.277344 163.320312 &quot;/&gt;
&lt;use xlink:href=&quot;#source-14&quot; transform=&quot;matrix(0.0993668, 0, 0, 0.0993647, 425.16567, 316.536205)&quot;/&gt;
&lt;g clip-path=&quot;url(#clip-1)&quot;&gt;
&lt;use xlink:href=&quot;#source-17&quot; transform=&quot;matrix(0.104054, 0, 0, 0.104025, 566.7768, 326.846816)&quot;/&gt;
&lt;/g&gt;
&lt;use xlink:href=&quot;#source-20&quot; transform=&quot;matrix(0.112406, 0, 0, 0.112406, 36.689413, 258.98416)&quot;/&gt;
&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;rgb(5.488586%, 25.489807%, 41.958618%)&quot; fill-opacity=&quot;1&quot; d=&quot;M 499.21875 449.121094 L 499.21875 449.449219 L 498.265625 449.449219 L 498.265625 452.039062 L 497.847656 452.039062 L 497.847656 449.449219 L 496.867188 449.449219 L 496.867188 449.121094 &quot;/&gt;
&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;rgb(5.488586%, 25.489807%, 41.958618%)&quot; fill-opacity=&quot;1&quot; d=&quot;M 499.578125 449.121094 L 500.144531 449.121094 L 500.976562 451.59375 L 501.8125 449.121094 L 502.378906 449.121094 L 502.378906 452.039062 L 501.992188 452.039062 L 501.992188 450.3125 C 501.992188 450.253906 501.992188 450.164062 501.992188 450.015625 C 501.992188 449.867188 501.992188 449.714844 501.992188 449.566406 L 501.15625 452.039062 L 500.769531 452.039062 L 499.933594 449.566406 L 499.933594 449.65625 C 499.933594 449.714844 499.933594 449.835938 499.933594 449.984375 C 499.933594 450.132812 499.933594 450.253906 499.933594 450.3125 L 499.933594 452.039062 L 499.578125 452.039062 &quot;/&gt;
&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;rgb(5.488586%, 25.489807%, 41.958618%)&quot; fill-opacity=&quot;1&quot; d=&quot;M 470.144531 467.050781 C 470.292969 470.328125 471.902344 471.847656 474.792969 471.847656 C 476.875 471.847656 478.542969 470.566406 478.871094 469.40625 L 483.460938 469.40625 C 482 473.871094 478.871094 475.777344 474.613281 475.777344 C 468.652344 475.777344 464.960938 471.699219 464.960938 465.832031 C 464.960938 460.171875 468.863281 455.851562 474.613281 455.851562 C 481.046875 455.851562 484.144531 461.242188 483.789062 467.082031 L 470.144531 467.082031 M 478.574219 463.773438 C 478.097656 461.152344 476.964844 459.753906 474.433594 459.753906 C 471.15625 459.753906 470.203125 462.316406 470.113281 463.773438 Z M 478.574219 463.773438 &quot;/&gt;
&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;rgb(5.488586%, 25.489807%, 41.958618%)&quot; fill-opacity=&quot;1&quot; d=&quot;M 494.035156 456.121094 L 497.847656 456.121094 L 497.847656 459.605469 L 494.035156 459.605469 L 494.035156 469.195312 C 494.035156 470.953125 494.484375 471.398438 496.242188 471.398438 C 496.777344 471.398438 497.3125 471.371094 497.847656 471.25 L 497.847656 475.300781 C 496.957031 475.449219 495.851562 475.480469 494.8125 475.480469 C 491.625 475.480469 488.851562 474.734375 488.851562 470.984375 L 488.851562 459.605469 L 485.722656 459.605469 L 485.722656 456.121094 L 488.851562 456.121094 L 488.851562 449.179688 L 494.035156 449.179688 L 494.035156 456.121094 &quot;/&gt;
&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;rgb(96.469116%, 66.668701%, 10.5896%)&quot; fill-opacity=&quot;1&quot; d=&quot;M 462.101562 475.09375 C 462.101562 475.183594 462.039062 475.242188 461.980469 475.242188 L 457.035156 475.242188 C 456.976562 475.242188 456.945312 475.210938 456.917969 475.152344 L 439.636719 449.269531 C 439.636719 449.238281 439.609375 449.238281 439.609375 449.210938 C 439.609375 449.152344 439.667969 449.089844 439.726562 449.089844 L 445.117188 449.089844 C 445.179688 449.089844 445.238281 449.121094 445.238281 449.179688 L 462.101562 475.09375 &quot;/&gt;
&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;rgb(5.488586%, 25.489807%, 41.958618%)&quot; fill-opacity=&quot;1&quot; d=&quot;M 461.890625 466.664062 L 461.890625 449.152344 L 456.527344 449.152344 L 456.527344 457.730469 &quot;/&gt;
&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;rgb(5.488586%, 25.489807%, 41.958618%)&quot; fill-opacity=&quot;1&quot; d=&quot;M 439.457031 457.640625 L 439.457031 475.242188 L 444.851562 475.242188 L 444.851562 466.394531 &quot;/&gt;
&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;rgb(5.488586%, 25.489807%, 41.958618%)&quot; fill-opacity=&quot;1&quot; d=&quot;M 323.660156 449.300781 L 334.953125 449.300781 C 341.742188 449.300781 346.839844 453.558594 346.839844 462.226562 C 346.839844 469.820312 342.964844 475.449219 334.953125 475.449219 L 323.660156 475.449219 L 323.660156 449.300781 M 329.410156 470.625 L 334.535156 470.625 C 337.871094 470.625 341.058594 468.570312 341.058594 462.792969 C 341.058594 457.519531 339.242188 454.15625 333.523438 454.15625 L 329.410156 454.15625 Z M 329.410156 470.625 &quot;/&gt;
&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;rgb(5.488586%, 25.489807%, 41.958618%)&quot; fill-opacity=&quot;1&quot; d=&quot;M 354.167969 467.230469 C 354.316406 470.535156 355.925781 472.027344 358.8125 472.027344 C 360.898438 472.027344 362.597656 470.746094 362.925781 469.582031 L 367.511719 469.582031 C 366.054688 474.050781 362.925781 475.957031 358.636719 475.957031 C 352.675781 475.957031 348.953125 471.847656 348.953125 466.007812 C 348.953125 460.320312 352.886719 456 358.636719 456 C 365.101562 456 368.199219 461.421875 367.839844 467.230469 L 354.167969 467.230469 M 362.628906 463.953125 C 362.152344 461.304688 361.019531 459.933594 358.488281 459.933594 C 355.179688 459.933594 354.226562 462.496094 354.167969 463.953125 Z M 362.628906 463.953125 &quot;/&gt;
&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;rgb(5.488586%, 25.489807%, 41.958618%)&quot; fill-opacity=&quot;1&quot; d=&quot;M 380.679688 475.449219 L 374.871094 475.449219 L 368.40625 456.507812 L 373.859375 456.507812 L 377.851562 469.433594 L 377.910156 469.433594 L 381.933594 456.507812 L 387.085938 456.507812 &quot;/&gt;
&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;rgb(5.488586%, 25.489807%, 41.958618%)&quot; fill-opacity=&quot;1&quot; d=&quot;M 394.058594 453.589844 L 388.84375 453.589844 L 388.84375 449.300781 L 394.058594 449.300781 Z M 388.84375 456.507812 L 394.058594 456.507812 L 394.058594 475.449219 L 388.84375 475.449219 Z M 388.84375 456.507812 &quot;/&gt;
&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;rgb(5.488586%, 25.489807%, 41.958618%)&quot; fill-opacity=&quot;1&quot; d=&quot;M 410.5 463.179688 C 410.175781 461.066406 408.804688 459.902344 406.660156 459.902344 C 403.320312 459.902344 402.21875 463.269531 402.21875 466.070312 C 402.21875 468.777344 403.292969 472.027344 406.539062 472.027344 C 408.953125 472.027344 410.351562 470.507812 410.679688 468.183594 L 415.714844 468.183594 C 415.058594 473.1875 411.574219 475.957031 406.597656 475.957031 C 400.878906 475.957031 397.035156 471.9375 397.035156 466.246094 C 397.035156 460.351562 400.550781 456 406.71875 456 C 411.1875 456 415.296875 458.355469 415.625 463.179688 L 410.5 463.179688 &quot;/&gt;
&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;rgb(5.488586%, 25.489807%, 41.958618%)&quot; fill-opacity=&quot;1&quot; d=&quot;M 422.925781 467.230469 C 423.074219 470.535156 424.683594 472.027344 427.570312 472.027344 C 429.65625 472.027344 431.355469 470.746094 431.683594 469.582031 L 436.269531 469.582031 C 434.8125 474.050781 431.683594 475.957031 427.421875 475.957031 C 421.433594 475.957031 417.742188 471.847656 417.742188 466.007812 C 417.742188 460.320312 421.671875 456 427.421875 456 C 433.859375 456 436.984375 461.421875 436.628906 467.230469 L 422.925781 467.230469 M 431.386719 463.953125 C 430.910156 461.304688 429.777344 459.933594 427.246094 459.933594 C 423.9375 459.933594 422.984375 462.496094 422.925781 463.953125 Z M 431.386719 463.953125 &quot;/&gt;
&lt;path fill-rule=&quot;evenodd&quot; fill=&quot;rgb(0%, 45.489502%, 27.839661%)&quot; fill-opacity=&quot;1&quot; d=&quot;M 108.222656 446.828125 L 104.84375 446.828125 L 104.84375 437.792969 L 108.222656 437.792969 C 108.121094 436.269531 108.453125 434.484375 107.921875 433.257812 C 107.195312 431.539062 104.382812 431.339844 103.519531 433.160156 C 102.890625 434.484375 103.222656 437.132812 103.222656 439.050781 L 103.222656 457.488281 L 92.234375 457.488281 L 92.234375 445.738281 C 92.234375 441.765625 92.035156 437.828125 92.234375 434.054688 C 92.433594 430.445312 94.085938 427.566406 96.007812 425.546875 C 98.027344 423.394531 100.742188 421.839844 104.515625 421.605469 C 109.015625 421.34375 112.425781 422.664062 114.808594 424.851562 C 117.027344 426.902344 118.945312 430.148438 119.210938 433.988281 C 119.34375 435.90625 119.210938 437.925781 119.210938 439.878906 L 119.210938 457.523438 L 108.222656 457.523438 &quot;/&gt;
&lt;path fill-rule=&quot;evenodd&quot; fill=&quot;rgb(0%, 45.489502%, 27.839661%)&quot; fill-opacity=&quot;1&quot; d=&quot;M 142.414062 436.867188 C 142.546875 432.101562 142.414062 427.101562 142.480469 422.234375 L 153.46875 422.234375 L 153.46875 445.140625 C 153.46875 447.722656 153.636719 450.273438 153.46875 452.753906 C 153.238281 455.800781 151.21875 457.953125 148.273438 458.25 C 145.855469 458.480469 144.167969 457.585938 142.945312 456.527344 C 141.621094 455.402344 140.957031 453.878906 140.164062 452.292969 C 138.609375 449.179688 136.921875 446.003906 135.429688 443.023438 C 135.296875 447.757812 135.429688 452.722656 135.363281 457.554688 L 124.375 457.554688 L 124.375 434.714844 C 124.375 432.132812 124.210938 429.585938 124.375 427.167969 C 124.605469 424.089844 126.757812 421.9375 129.605469 421.671875 C 131.988281 421.472656 133.644531 422.335938 134.902344 423.394531 C 136.226562 424.519531 136.921875 426.109375 137.679688 427.632812 C 139.238281 430.742188 140.890625 433.820312 142.414062 436.867188 &quot;/&gt;
&lt;path fill-rule=&quot;evenodd&quot; fill=&quot;rgb(0%, 45.489502%, 27.839661%)&quot; fill-opacity=&quot;1&quot; d=&quot;M 88.226562 422.269531 L 88.226562 432.363281 C 85.082031 432.230469 82.402344 432.398438 80.351562 433.589844 C 78.132812 434.847656 76.578125 437.199219 76.808594 440.738281 C 77.007812 443.320312 78.496094 445.242188 80.351562 446.300781 C 82.335938 447.425781 85.050781 447.65625 88.226562 447.523438 L 88.226562 457.621094 C 84.851562 457.6875 81.871094 457.886719 79.257812 457.355469 C 76.773438 456.859375 74.65625 455.898438 72.804688 454.574219 C 69.226562 452.058594 66.546875 448.351562 65.652344 443.289062 C 64.625 437.460938 66.511719 432.199219 69.128906 428.824219 C 71.710938 425.480469 75.847656 422.667969 81.242188 422.335938 C 83.460938 422.101562 85.644531 422.269531 88.226562 422.269531 &quot;/&gt;
&lt;path fill-rule=&quot;evenodd&quot; fill=&quot;rgb(0%, 45.489502%, 27.839661%)&quot; fill-opacity=&quot;1&quot; d=&quot;M 170.484375 433.191406 C 174.523438 432.859375 177.632812 434.351562 179.652344 436.269531 C 181.671875 438.191406 183.425781 440.773438 183.691406 444.480469 C 183.988281 448.484375 182.632812 451.597656 180.777344 453.8125 C 178.957031 456 176.308594 457.71875 172.703125 457.984375 C 168.730469 458.316406 165.617188 456.859375 163.566406 454.972656 C 161.382812 452.953125 159.824219 450.40625 159.527344 446.765625 C 159.195312 442.59375 160.585938 439.582031 162.339844 437.429688 C 164.0625 435.375 166.976562 433.488281 170.484375 433.191406 M 163.996094 438.753906 C 162.539062 440.574219 161.316406 443.253906 161.582031 446.632812 C 161.8125 449.511719 163.203125 451.925781 164.921875 453.550781 C 166.710938 455.238281 169.390625 456.460938 172.535156 456.230469 C 175.316406 456 177.566406 454.507812 178.992188 452.855469 C 180.546875 451.035156 181.671875 448.683594 181.671875 445.636719 C 181.671875 442.558594 180.347656 439.976562 178.992188 438.421875 C 177.269531 436.402344 174.457031 434.746094 170.683594 435.078125 C 167.636719 435.34375 165.386719 437 163.996094 438.753906 &quot;/&gt;
&lt;path fill-rule=&quot;evenodd&quot; fill=&quot;rgb(0%, 45.489502%, 27.839661%)&quot; fill-opacity=&quot;1&quot; d=&quot;M 192.828125 455.039062 C 192.828125 454.277344 192.828125 453.582031 192.828125 452.921875 C 192.828125 452.753906 193.027344 452.988281 193.125 453.085938 C 195.113281 454.773438 197.132812 456.496094 201.003906 456.199219 C 203.554688 456 205.636719 454.609375 207.09375 453.019531 C 208.882812 451.066406 210.105469 448.320312 209.875 444.710938 C 209.710938 441.996094 208.550781 439.78125 207.09375 438.222656 C 205.503906 436.503906 203.089844 434.746094 199.414062 435.046875 C 196.371094 435.277344 194.183594 436.964844 192.761719 438.886719 C 191.171875 441.039062 190.542969 443.71875 190.542969 447.160156 C 190.542969 453.847656 190.542969 461.328125 190.542969 468.082031 L 188.625 468.082031 L 188.625 445.441406 C 188.625 441.863281 189.847656 439.085938 191.601562 437.066406 C 193.65625 434.746094 196.699219 432.894531 201.234375 433.191406 C 205.472656 433.457031 208.351562 435.875 210.105469 438.785156 C 211.925781 441.832031 212.589844 446.398438 211.066406 450.539062 C 209.808594 453.980469 207.128906 456.5625 203.71875 457.585938 C 201.929688 458.152344 199.414062 458.25 197.429688 457.6875 C 195.542969 457.125 194.183594 456.265625 192.828125 455.039062 &quot;/&gt;
&lt;path fill-rule=&quot;evenodd&quot; fill=&quot;rgb(0%, 45.489502%, 27.839661%)&quot; fill-opacity=&quot;1&quot; d=&quot;M 238.605469 438.953125 C 235.859375 441.039062 232.914062 442.859375 230.101562 444.8125 C 227.253906 446.765625 224.441406 448.683594 221.59375 450.601562 C 221.0625 450.140625 220.667969 449.578125 220.335938 448.949219 C 225.433594 445.539062 230.496094 442.0625 235.628906 438.652344 C 234.898438 437.460938 233.640625 436.632812 232.285156 435.972656 C 230.863281 435.277344 229.171875 434.878906 227.152344 435.011719 C 224.40625 435.210938 222.289062 436.46875 220.667969 438.125 C 218.8125 440.011719 217.421875 442.859375 217.6875 446.597656 C 217.886719 449.378906 219.109375 451.53125 220.667969 453.152344 C 222.488281 455.070312 225.199219 456.429688 228.875 456.164062 C 231.722656 455.964844 233.972656 454.640625 235.527344 452.988281 C 237.152344 451.265625 238.410156 449.082031 238.441406 446.070312 L 240.492188 446.070312 C 240.296875 449.84375 239.070312 452.226562 237.117188 454.246094 C 235.265625 456.132812 232.78125 457.820312 229.339844 458.019531 C 225.367188 458.25 222.222656 457.089844 219.804688 455.105469 C 217.523438 453.25 215.898438 450.472656 215.632812 446.828125 C 215.304688 442.859375 216.527344 439.648438 218.515625 437.363281 C 220.433594 435.144531 223.148438 433.390625 226.890625 433.125 C 232.914062 432.730469 236.191406 435.574219 238.605469 438.953125 &quot;/&gt;
&lt;path fill-rule=&quot;evenodd&quot; fill=&quot;rgb(0%, 45.489502%, 27.839661%)&quot; fill-opacity=&quot;1&quot; d=&quot;M 263.863281 457.554688 L 261.945312 457.554688 L 261.945312 446.070312 C 261.945312 444.050781 262.007812 442.195312 261.578125 440.671875 C 260.71875 437.527344 258.003906 434.683594 253.503906 435.011719 C 251.351562 435.179688 249.761719 436.238281 248.667969 437.527344 C 247.476562 438.953125 246.78125 440.574219 246.652344 442.859375 C 246.417969 447.226562 246.71875 452.6875 246.585938 457.523438 L 244.664062 457.523438 C 244.863281 452.125 244.398438 446.863281 244.664062 442.03125 C 244.796875 439.449219 245.855469 437.460938 247.28125 435.972656 C 248.703125 434.484375 250.621094 433.292969 253.238281 433.09375 C 256.515625 432.859375 258.898438 433.855469 260.652344 435.410156 C 262.339844 436.898438 263.632812 439.085938 263.832031 441.929688 C 263.996094 444.480469 263.832031 447.09375 263.832031 449.742188 L 263.832031 457.554688 Z M 263.863281 457.554688 &quot;/&gt;
&lt;use xlink:href=&quot;#source-23&quot; transform=&quot;matrix(0.124029, 0, 0, 0.124035, 676.955828, 302.14822)&quot;/&gt;
&lt;/svg&gt;
&lt;/div&gt;
&lt;/p&gt;
&lt;/div&gt;

&lt;p&gt;
这一时期，也出现了各种工业总线。比如 Modbus， CAN ，FOUNDATION Feildbus，
PROFIBUS 等串行通信总线，以及后来基于以太网的 PowerLink， HART-IP ，
PROFINET，FF HSE，Modbus TCP 等。可以在DCS/PLC和各种现场仪器和执行器之间，建立稳定、安全、可靠的通信链接。
&lt;/p&gt;

&lt;p&gt;
如今，IT/OT融合，企业对数据利用的要求越来越多，行业内提出了工业4.0，智能智造、工业物联网、工业互联网等愿景，为的是如何降低数据获取的复杂度，提升数据的利用度，获取数据的价值。正如FieldComm Group（ FCG ）的 Paul
Sereiko 所说：“There&amp;rsquo;s a big thirst for plant-floor-to-cloud
communication.”
&lt;/p&gt;

&lt;p&gt;
所以，现场设备越来越多的需要通过移动设备进行便捷地访问，通过边缘服务器快速分析本地数据，通过云服务进行大数据的训练和分析。最基本的，控制系统要能获取现场设备的数据。然后现场操作员想要在移动终端进行现场诊断。现场车间的边缘分析服务器需要设备数据进行计算，做局部优化分析。而工业云则可以利用全局数据进行挖掘，辅助决策。这就对数据采集的便捷性、兼容性、通用型提出更高要求。
&lt;/p&gt;

&lt;p&gt;
比如说，一套工具如果能通吃各种设备的话，不管是 PROFIBUS 还是 MODBUS 设备，只要连上设备，我就可以配置设备参数，调试设备功能，使用设备进行现场测量控制了。
&lt;/p&gt;


&lt;div id=&quot;org809772b&quot; class=&quot;figure&quot;&gt;
&lt;p&gt;&lt;div align=&quot;center&quot;&gt;&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; xmlns:xlink=&quot;http://www.w3.org/1999/xlink&quot; width=&quot;360.95999&quot; height=&quot;361.91998&quot; viewBox=&quot;0 0 360.95999 361.91998&quot;&gt;
&lt;defs&gt;
&lt;g&gt;
&lt;g id=&quot;glyph-0-0&quot;&gt;
&lt;path d=&quot;M 7.601562 -6.726562 L 3.757812 -6.726562 L 3.757812 -1.941406 L 4.371094 -1.941406 L 4.371094 -6.128906 L 6.96875 -6.128906 L 6.96875 -1.941406 L 7.601562 -1.941406 Z M 7.410156 0.726562 C 7.6875 0.726562 7.898438 0.65625 8.035156 0.527344 C 8.183594 0.371094 8.285156 -0.0703125 8.339844 -0.777344 L 7.757812 -0.960938 C 7.722656 -0.425781 7.671875 -0.09375 7.601562 0.015625 C 7.542969 0.105469 7.4375 0.15625 7.300781 0.15625 L 6.691406 0.15625 C 6.511719 0.15625 6.425781 0.0625 6.425781 -0.121094 L 6.425781 -1.972656 L 5.800781 -1.972656 L 5.800781 0.0078125 C 5.800781 0.484375 6.035156 0.726562 6.511719 0.726562 Z M 5.34375 -5.515625 L 5.34375 -3.402344 C 5.324219 -2.433594 5.132812 -1.644531 4.789062 -1.039062 C 4.414062 -0.46875 3.757812 0 2.824219 0.363281 L 3.160156 0.890625 C 4.128906 0.527344 4.824219 0.015625 5.238281 -0.625 C 5.671875 -1.316406 5.90625 -2.242188 5.941406 -3.402344 L 5.941406 -5.515625 Z M 0.546875 -3.871094 L 0.546875 -3.265625 L 1.542969 -3.265625 L 1.542969 -1.109375 C 1.160156 -1.003906 0.777344 -0.917969 0.390625 -0.847656 L 0.535156 -0.25 C 1.515625 -0.484375 2.433594 -0.769531 3.289062 -1.117188 L 3.289062 -1.714844 C 2.925781 -1.566406 2.5625 -1.429688 2.183594 -1.296875 L 2.183594 -3.265625 L 3.152344 -3.265625 L 3.152344 -3.871094 L 2.183594 -3.871094 L 2.183594 -5.898438 L 3.273438 -5.898438 L 3.273438 -6.492188 L 0.433594 -6.492188 L 0.433594 -5.898438 L 1.542969 -5.898438 L 1.542969 -3.871094 Z M 0.546875 -3.871094 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-1-0&quot;&gt;
&lt;path d=&quot;M 4.882812 -3.488281 C 4.605469 -2.640625 4.121094 -1.957031 3.429688 -1.421875 L 3.820312 -0.945312 C 4.597656 -1.550781 5.152344 -2.398438 5.472656 -3.488281 L 6.15625 -3.488281 C 5.972656 -2.570312 5.6875 -1.828125 5.300781 -1.273438 C 4.875 -0.71875 4.25 -0.207031 3.429688 0.25 L 3.808594 0.734375 C 4.710938 0.214844 5.386719 -0.363281 5.835938 -1.011719 C 6.234375 -1.621094 6.546875 -2.441406 6.753906 -3.488281 L 7.378906 -3.488281 C 7.324219 -1.652344 7.246094 -0.589844 7.132812 -0.3125 C 7.011719 0 6.78125 0.15625 6.441406 0.164062 C 6.148438 0.164062 5.84375 0.148438 5.53125 0.128906 L 5.707031 0.734375 C 5.972656 0.746094 6.25 0.753906 6.539062 0.753906 C 7.179688 0.734375 7.566406 0.441406 7.714844 -0.148438 C 7.851562 -0.726562 7.949219 -2.027344 8 -4.042969 L 4.675781 -4.042969 C 5.664062 -4.667969 6.582031 -5.324219 7.410156 -6.035156 L 7.410156 -6.582031 L 3.714844 -6.582031 L 3.714844 -6.007812 L 6.503906 -6.007812 C 5.621094 -5.324219 4.660156 -4.675781 3.609375 -4.070312 L 3.609375 -3.488281 Z M 0.441406 -4.675781 L 0.441406 -4.078125 L 1.480469 -4.078125 L 1.480469 -0.875 C 1.109375 -0.789062 0.726562 -0.703125 0.335938 -0.632812 L 0.503906 0.0273438 C 1.472656 -0.191406 2.382812 -0.457031 3.222656 -0.777344 L 3.222656 -1.429688 C 2.867188 -1.289062 2.503906 -1.167969 2.121094 -1.054688 L 2.121094 -4.078125 L 3.203125 -4.078125 L 3.203125 -4.675781 L 2.121094 -4.675781 L 2.121094 -6.882812 L 1.480469 -6.882812 L 1.480469 -4.675781 Z M 0.441406 -4.675781 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-1-1&quot;&gt;
&lt;path d=&quot;M 1.210938 -6.746094 L 1.210938 -4.640625 L 3.851562 -4.640625 L 3.851562 -6.746094 Z M 3.28125 -5.167969 L 1.773438 -5.167969 L 1.773438 -6.207031 L 3.28125 -6.207031 Z M 4.8125 -6.746094 L 4.8125 -4.640625 L 7.507812 -4.640625 L 7.507812 -6.746094 Z M 6.945312 -5.167969 L 5.386719 -5.167969 L 5.386719 -6.207031 L 6.945312 -6.207031 Z M 0.511719 -3.773438 L 0.511719 -3.222656 L 2.902344 -3.222656 C 2.292969 -2.703125 1.445312 -2.277344 0.335938 -1.949219 L 0.625 -1.4375 C 0.867188 -1.515625 1.101562 -1.59375 1.332031 -1.679688 L 1.332031 0.875 L 1.878906 0.875 L 1.878906 0.503906 L 3.359375 0.503906 L 3.359375 0.875 L 3.914062 0.875 L 3.914062 -1.851562 L 1.742188 -1.851562 C 2.554688 -2.214844 3.203125 -2.667969 3.6875 -3.222656 L 5.152344 -3.222656 C 5.585938 -2.691406 6.226562 -2.234375 7.058594 -1.851562 L 4.746094 -1.851562 L 4.746094 0.875 L 5.300781 0.875 L 5.300781 0.503906 L 6.917969 0.503906 L 6.917969 0.875 L 7.472656 0.875 L 7.472656 -1.671875 C 7.664062 -1.601562 7.863281 -1.523438 8.078125 -1.453125 L 8.328125 -1.984375 C 7.210938 -2.285156 6.371094 -2.703125 5.808594 -3.222656 L 8.148438 -3.222656 L 8.148438 -3.773438 L 6.953125 -3.773438 C 6.8125 -4.042969 6.660156 -4.292969 6.476562 -4.539062 L 5.949219 -4.363281 C 6.085938 -4.191406 6.21875 -3.992188 6.339844 -3.773438 L 4.105469 -3.773438 C 4.226562 -3.984375 4.339844 -4.191406 4.425781 -4.414062 L 3.828125 -4.476562 C 3.722656 -4.234375 3.59375 -4 3.429688 -3.773438 Z M 1.878906 -0.0351562 L 1.878906 -1.332031 L 3.359375 -1.332031 L 3.359375 -0.0351562 Z M 5.300781 -0.0351562 L 5.300781 -1.332031 L 6.917969 -1.332031 L 6.917969 -0.0351562 Z M 5.300781 -0.0351562 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-2-0&quot;&gt;
&lt;path d=&quot;M 1.394531 -6.910156 L 0.960938 -6.503906 C 1.550781 -6.042969 2.007812 -5.609375 2.347656 -5.195312 L 2.769531 -5.628906 C 2.398438 -6.050781 1.941406 -6.476562 1.394531 -6.910156 Z M 0.390625 -4.40625 L 0.390625 -3.808594 L 1.59375 -3.808594 L 1.59375 -0.382812 C 1.59375 -0.242188 1.523438 -0.113281 1.402344 0.0078125 L 1.644531 0.5625 C 2.25 0.164062 2.832031 -0.285156 3.375 -0.796875 L 3.203125 -1.453125 C 2.847656 -1.117188 2.511719 -0.824219 2.199219 -0.5625 L 2.199219 -4.40625 Z M 3.464844 -3.394531 L 3.464844 -2.789062 L 3.941406 -2.789062 C 4.183594 -2.035156 4.625 -1.359375 5.28125 -0.753906 C 4.632812 -0.292969 3.828125 0.078125 2.867188 0.363281 L 3.210938 0.890625 C 4.226562 0.582031 5.082031 0.171875 5.773438 -0.347656 C 6.382812 0.121094 7.144531 0.527344 8.042969 0.890625 L 8.382812 0.355469 C 7.53125 0.0429688 6.8125 -0.3125 6.226562 -0.71875 C 6.859375 -1.308594 7.308594 -2.007812 7.585938 -2.824219 L 7.585938 -3.394531 Z M 4.527344 -2.789062 L 6.96875 -2.789062 C 6.691406 -2.148438 6.277344 -1.59375 5.722656 -1.109375 C 5.152344 -1.601562 4.753906 -2.164062 4.527344 -2.789062 Z M 4.128906 -6.738281 L 4.128906 -5.773438 C 4.128906 -5.089844 3.75 -4.5625 2.996094 -4.191406 L 3.410156 -3.714844 C 4.292969 -4.214844 4.746094 -4.925781 4.746094 -5.84375 L 4.746094 -6.148438 L 6.425781 -6.148438 L 6.425781 -4.734375 C 6.425781 -4.226562 6.683594 -3.964844 7.222656 -3.964844 L 8.171875 -3.964844 L 8.171875 -4.539062 L 7.378906 -4.539062 C 7.152344 -4.539062 7.039062 -4.648438 7.039062 -4.867188 L 7.039062 -6.738281 Z M 4.128906 -6.738281 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-3-0&quot;&gt;
&lt;path d=&quot;M 7.066406 -2.910156 L 1.609375 -2.910156 L 1.609375 0.867188 L 2.207031 0.867188 L 2.207031 0.484375 L 6.46875 0.484375 L 6.46875 0.867188 L 7.066406 0.867188 Z M 2.207031 -0.0507812 L 2.207031 -0.96875 L 4.035156 -0.96875 L 4.035156 -0.0507812 Z M 4.625 -0.0507812 L 4.625 -0.96875 L 6.46875 -0.96875 L 6.46875 -0.0507812 Z M 2.207031 -1.472656 L 2.207031 -2.390625 L 4.035156 -2.390625 L 4.035156 -1.472656 Z M 4.625 -2.390625 L 6.46875 -2.390625 L 6.46875 -1.472656 L 4.625 -1.472656 Z M 3.179688 -7.179688 C 2.546875 -6.25 1.742188 -5.507812 0.769531 -4.945312 L 1.167969 -4.460938 C 1.601562 -4.734375 2.007812 -5.039062 2.390625 -5.386719 C 2.789062 -4.980469 3.246094 -4.613281 3.765625 -4.304688 C 2.796875 -3.871094 1.671875 -3.558594 0.371094 -3.375 L 0.640625 -2.832031 C 2.070312 -3.066406 3.316406 -3.445312 4.371094 -3.972656 C 5.378906 -3.472656 6.589844 -3.117188 8.007812 -2.902344 L 8.277344 -3.453125 C 6.996094 -3.628906 5.898438 -3.90625 4.960938 -4.304688 C 5.722656 -4.769531 6.371094 -5.324219 6.910156 -5.984375 L 6.910156 -6.460938 L 3.386719 -6.460938 C 3.523438 -6.640625 3.664062 -6.832031 3.792969 -7.039062 Z M 2.761719 -5.742188 L 2.933594 -5.914062 L 6.140625 -5.914062 C 5.636719 -5.410156 5.039062 -4.96875 4.347656 -4.589844 C 3.722656 -4.917969 3.195312 -5.300781 2.761719 -5.742188 Z M 2.761719 -5.742188 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-4-0&quot;&gt;
&lt;path d=&quot;M 3.125 -6.890625 C 2.78125 -6.234375 2.398438 -5.671875 1.984375 -5.1875 C 1.507812 -4.640625 0.96875 -4.199219 0.382812 -3.863281 L 0.71875 -3.316406 C 1.4375 -3.800781 2.015625 -4.292969 2.449219 -4.796875 C 2.855469 -5.253906 3.265625 -5.84375 3.671875 -6.5625 Z M 3.410156 -3.03125 C 3.230469 -2.214844 2.960938 -1.558594 2.597656 -1.054688 C 2.191406 -0.535156 1.585938 -0.0625 0.789062 0.371094 L 1.1875 0.890625 C 2.070312 0.398438 2.734375 -0.15625 3.179688 -0.777344 C 3.550781 -1.332031 3.835938 -2.085938 4.042969 -3.03125 L 6.199219 -3.03125 C 6.15625 -1.679688 6.0625 -0.804688 5.90625 -0.390625 C 5.757812 0.0078125 5.453125 0.207031 4.988281 0.207031 C 4.539062 0.207031 4.0625 0.199219 3.558594 0.183594 L 3.730469 0.796875 L 5.308594 0.796875 C 5.742188 0.769531 6.050781 0.632812 6.242188 0.382812 C 6.441406 0.121094 6.582031 -0.347656 6.667969 -1.003906 C 6.753906 -1.671875 6.804688 -2.546875 6.832031 -3.628906 L 1.664062 -3.628906 L 1.664062 -3.03125 Z M 5.566406 -7.003906 L 5.03125 -6.703125 C 5.558594 -5.332031 6.492188 -4.214844 7.835938 -3.351562 L 8.25 -3.84375 C 6.960938 -4.613281 6.070312 -5.671875 5.566406 -7.003906 Z M 5.566406 -7.003906 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-4-1&quot;&gt;
&lt;path d=&quot;M 1.351562 -5.394531 L 2.5625 -5.394531 L 2.5625 -4.277344 L 0.46875 -4.277344 L 0.46875 -3.695312 L 2.5625 -3.695312 L 2.5625 -2.789062 L 0.855469 -2.789062 L 0.855469 0.328125 L 1.464844 0.328125 L 1.464844 -2.207031 L 2.5625 -2.207031 L 2.5625 0.875 L 3.1875 0.875 L 3.1875 -2.207031 L 4.277344 -2.207031 L 4.277344 -0.632812 C 4.277344 -0.40625 4.148438 -0.292969 3.90625 -0.292969 L 3.480469 -0.320312 L 3.636719 0.269531 L 4.09375 0.269531 C 4.613281 0.269531 4.875 0.0078125 4.875 -0.503906 L 4.875 -2.789062 L 3.1875 -2.789062 L 3.1875 -3.695312 L 5.058594 -3.695312 L 5.058594 -4.277344 L 3.1875 -4.277344 L 3.1875 -5.394531 L 4.804688 -5.394531 L 4.804688 -5.972656 L 3.1875 -5.972656 L 3.1875 -7.046875 L 2.5625 -7.046875 L 2.5625 -5.972656 L 1.558594 -5.972656 C 1.628906 -6.207031 1.679688 -6.460938 1.722656 -6.738281 L 1.132812 -6.832031 C 1.011719 -6.007812 0.734375 -5.367188 0.304688 -4.902344 L 0.804688 -4.539062 C 1.011719 -4.761719 1.195312 -5.046875 1.351562 -5.394531 Z M 5.566406 -6.269531 L 5.566406 -0.917969 L 6.171875 -0.917969 L 6.171875 -6.269531 Z M 7.152344 0.789062 C 7.679688 0.789062 7.949219 0.511719 7.949219 -0.0273438 L 7.949219 -7.046875 L 7.332031 -7.046875 L 7.332031 -0.183594 C 7.332031 0.09375 7.195312 0.234375 6.9375 0.234375 C 6.554688 0.234375 6.15625 0.214844 5.742188 0.191406 L 5.878906 0.789062 Z M 7.152344 0.789062 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-4-2&quot;&gt;
&lt;path d=&quot;M 0.777344 -6.46875 L 0.777344 -5.871094 L 3.914062 -5.871094 L 3.914062 -6.46875 Z M 0.441406 -4.128906 L 0.441406 -3.523438 L 1.644531 -3.523438 C 1.210938 -1.949219 0.867188 -0.988281 0.605469 -0.632812 C 0.570312 -0.613281 0.527344 -0.597656 0.46875 -0.582031 L 0.613281 0.0078125 C 1.6875 -0.183594 2.691406 -0.441406 3.609375 -0.769531 C 3.695312 -0.570312 3.785156 -0.363281 3.871094 -0.136719 L 4.40625 -0.414062 C 4.042969 -1.289062 3.652344 -2.09375 3.238281 -2.839844 L 2.710938 -2.582031 C 2.933594 -2.183594 3.152344 -1.757812 3.375 -1.289062 C 2.703125 -1.039062 2.015625 -0.839844 1.332031 -0.703125 C 1.59375 -1.273438 1.894531 -2.207031 2.242188 -3.523438 L 4.242188 -3.523438 L 4.242188 -4.128906 Z M 5.542969 -7.046875 L 5.542969 -5.300781 L 4.371094 -5.300781 L 4.371094 -4.691406 L 5.542969 -4.691406 L 5.542969 -4.589844 C 5.523438 -2.261719 4.96875 -0.570312 3.886719 0.476562 L 4.355469 0.882812 C 5.53125 -0.269531 6.140625 -2.09375 6.164062 -4.589844 L 6.164062 -4.691406 L 7.445312 -4.691406 C 7.429688 -2.363281 7.394531 -0.96875 7.34375 -0.511719 C 7.273438 -0.015625 7.023438 0.234375 6.597656 0.234375 C 6.363281 0.234375 6.085938 0.214844 5.773438 0.199219 L 5.914062 0.753906 C 6.277344 0.769531 6.527344 0.777344 6.675781 0.777344 C 7.421875 0.777344 7.84375 0.425781 7.929688 -0.277344 C 8.007812 -0.917969 8.050781 -2.589844 8.050781 -5.300781 L 6.164062 -5.300781 L 6.164062 -7.046875 Z M 5.542969 -7.046875 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-5-0&quot;&gt;
&lt;path d=&quot;M 2.390625 -3.664062 C 2.648438 -3.34375 2.953125 -2.917969 3.300781 -2.382812 L 3.636719 -2.875 C 3.210938 -3.410156 2.796875 -3.886719 2.390625 -4.3125 L 2.390625 -4.78125 L 3.558594 -4.78125 L 3.558594 -5.378906 L 2.390625 -5.378906 L 2.390625 -7.074219 L 1.773438 -7.074219 L 1.773438 -5.378906 L 0.511719 -5.378906 L 0.511719 -4.78125 L 1.742188 -4.78125 C 1.464844 -3.6875 0.996094 -2.710938 0.335938 -1.863281 L 0.605469 -1.1875 C 1.089844 -1.90625 1.480469 -2.703125 1.773438 -3.585938 L 1.773438 0.839844 L 2.390625 0.839844 Z M 7.664062 -7.039062 C 6.597656 -6.640625 5.402344 -6.425781 4.070312 -6.390625 L 4.070312 -3.609375 C 4.019531 -1.929688 3.628906 -0.613281 2.917969 0.335938 L 3.359375 0.796875 C 4.171875 -0.292969 4.613281 -1.765625 4.675781 -3.609375 L 4.675781 -3.707031 L 6.277344 -3.707031 L 6.277344 0.847656 L 6.902344 0.847656 L 6.902344 -3.707031 L 8.191406 -3.707031 L 8.191406 -4.304688 L 4.675781 -4.304688 L 4.675781 -5.863281 C 5.886719 -5.921875 6.988281 -6.128906 7.976562 -6.484375 Z M 7.664062 -7.039062 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-6-0&quot;&gt;
&lt;path d=&quot;M 2.328125 -7.125 C 1.914062 -5.792969 1.238281 -4.605469 0.3125 -3.566406 L 0.511719 -2.910156 C 0.839844 -3.253906 1.152344 -3.609375 1.429688 -3.984375 L 1.429688 0.867188 L 2.050781 0.867188 L 2.050781 -4.933594 C 2.398438 -5.53125 2.683594 -6.171875 2.910156 -6.847656 Z M 4.726562 -7.082031 L 4.25 -6.738281 C 4.734375 -6.078125 5.144531 -5.453125 5.464844 -4.867188 L 5.972656 -5.210938 C 5.679688 -5.75 5.265625 -6.371094 4.726562 -7.082031 Z M 7.117188 -6.667969 C 6.859375 -4.78125 6.292969 -3.222656 5.445312 -2 C 4.625 -3.039062 3.984375 -4.328125 3.53125 -5.878906 L 2.988281 -5.578125 C 3.488281 -3.957031 4.183594 -2.597656 5.058594 -1.496094 C 4.398438 -0.71875 3.59375 -0.113281 2.625 0.320312 L 2.960938 0.875 C 3.949219 0.433594 4.796875 -0.191406 5.488281 -0.996094 C 6.191406 -0.214844 7.011719 0.40625 7.964844 0.882812 L 8.339844 0.328125 C 7.402344 -0.113281 6.589844 -0.71875 5.878906 -1.488281 C 6.8125 -2.78125 7.421875 -4.46875 7.714844 -6.546875 Z M 7.117188 -6.667969 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-6-1&quot;&gt;
&lt;path d=&quot;M 1.289062 -6.570312 L 1.289062 -5.964844 L 7.457031 -5.964844 L 7.457031 -6.570312 Z M 0.457031 -4.15625 L 0.457031 -3.53125 L 3.375 -3.53125 C 2.46875 -1.6875 1.730469 -0.5625 1.175781 -0.148438 C 1.144531 -0.128906 1.101562 -0.105469 1.03125 -0.0859375 L 1.195312 0.546875 C 3.273438 0.40625 5.1875 0.234375 6.945312 0.0078125 C 7.109375 0.320312 7.257812 0.625 7.394531 0.925781 L 7.949219 0.535156 C 7.515625 -0.347656 6.902344 -1.394531 6.105469 -2.589844 L 5.601562 -2.277344 C 5.984375 -1.6875 6.328125 -1.117188 6.640625 -0.5625 C 5.089844 -0.355469 3.542969 -0.207031 1.984375 -0.121094 C 2.570312 -0.761719 3.273438 -1.894531 4.070312 -3.53125 L 8.226562 -3.53125 L 8.226562 -4.15625 Z M 0.457031 -4.15625 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-7-0&quot;&gt;
&lt;path d=&quot;M 0.933594 -6.890625 L 0.511719 -6.484375 C 1.039062 -6.078125 1.453125 -5.6875 1.75 -5.324219 L 2.15625 -5.742188 C 1.828125 -6.121094 1.421875 -6.511719 0.933594 -6.890625 Z M 0.796875 -4.761719 L 0.371094 -4.363281 C 0.882812 -3.921875 1.28125 -3.507812 1.574219 -3.117188 L 1.984375 -3.523438 C 1.664062 -3.941406 1.265625 -4.347656 0.796875 -4.761719 Z M 1.558594 -2.433594 C 1.230469 -1.429688 0.847656 -0.441406 0.414062 0.519531 L 0.988281 0.761719 C 1.386719 -0.171875 1.757812 -1.167969 2.085938 -2.226562 Z M 5.402344 -6.648438 L 2.503906 -6.648438 L 2.503906 -1.316406 L 3.054688 -1.316406 L 3.054688 -6.113281 L 4.847656 -6.113281 L 4.847656 -1.367188 L 5.402344 -1.367188 Z M 4.476562 -0.960938 L 4.09375 -0.597656 C 4.648438 -0.078125 5.074219 0.40625 5.386719 0.867188 L 5.800781 0.449219 C 5.445312 -0.015625 5.003906 -0.492188 4.476562 -0.960938 Z M 3.695312 -5.515625 L 3.695312 -2.769531 C 3.679688 -1.964844 3.550781 -1.316406 3.324219 -0.8125 C 3.082031 -0.328125 2.648438 0.0625 2.027344 0.355469 L 2.355469 0.875 C 2.996094 0.5625 3.464844 0.128906 3.75 -0.40625 C 4.042969 -0.996094 4.199219 -1.785156 4.214844 -2.769531 L 4.214844 -5.515625 Z M 7.273438 0.796875 C 7.722656 0.796875 7.957031 0.546875 7.957031 0.0625 L 7.957031 -7.023438 L 7.367188 -7.023438 L 7.367188 -0.0859375 C 7.367188 0.136719 7.265625 0.257812 7.066406 0.257812 C 6.789062 0.257812 6.492188 0.242188 6.191406 0.214844 L 6.320312 0.796875 Z M 6.085938 -6.3125 L 6.085938 -0.910156 L 6.632812 -0.910156 L 6.632812 -6.3125 Z M 6.085938 -6.3125 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-8-0&quot;&gt;
&lt;path d=&quot;M 1.324219 -3.445312 L 1.324219 -1.238281 L 4.007812 -1.238281 L 4.007812 -0.753906 L 1.109375 -0.753906 L 1.109375 -0.335938 L 4.007812 -0.335938 L 4.007812 0.171875 L 0.457031 0.171875 L 0.457031 0.65625 L 8.199219 0.65625 L 8.199219 0.171875 L 4.632812 0.171875 L 4.632812 -0.335938 L 7.566406 -0.335938 L 7.566406 -0.753906 L 4.632812 -0.753906 L 4.632812 -1.238281 L 7.351562 -1.238281 L 7.351562 -3.445312 Z M 6.753906 -1.628906 L 4.632812 -1.628906 L 4.632812 -2.15625 L 6.753906 -2.15625 Z M 4.007812 -1.628906 L 1.921875 -1.628906 L 1.921875 -2.15625 L 4.007812 -2.15625 Z M 1.921875 -2.519531 L 1.921875 -3.054688 L 4.007812 -3.054688 L 4.007812 -2.519531 Z M 4.632812 -3.054688 L 6.753906 -3.054688 L 6.753906 -2.519531 L 4.632812 -2.519531 Z M 1.515625 -6.9375 L 1.515625 -4.796875 L 7.167969 -4.796875 L 7.167969 -6.9375 Z M 6.5625 -5.167969 L 2.121094 -5.167969 L 2.121094 -5.679688 L 6.5625 -5.679688 Z M 2.121094 -6.050781 L 2.121094 -6.554688 L 6.5625 -6.554688 L 6.5625 -6.050781 Z M 0.449219 -4.347656 L 0.449219 -3.878906 L 8.207031 -3.878906 L 8.207031 -4.347656 Z M 0.449219 -4.347656 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-9-0&quot;&gt;
&lt;path d=&quot;M 5.699219 -5.152344 L 6.980469 -5.152344 C 6.945312 -3.984375 6.761719 -2.960938 6.425781 -2.085938 C 6.078125 -2.8125 5.800781 -3.6875 5.585938 -4.703125 Z M 6.140625 -1.464844 C 5.742188 -0.726562 5.210938 -0.128906 4.539062 0.335938 L 4.859375 0.855469 C 5.507812 0.390625 6.042969 -0.191406 6.460938 -0.882812 C 6.890625 -0.15625 7.410156 0.433594 8.019531 0.867188 L 8.355469 0.355469 C 7.730469 -0.0703125 7.203125 -0.667969 6.753906 -1.445312 C 7.238281 -2.46875 7.507812 -3.707031 7.550781 -5.152344 L 8.113281 -5.152344 L 8.113281 -5.75 L 5.828125 -5.75 C 5.898438 -6.128906 5.964844 -6.546875 6.019531 -6.988281 L 5.410156 -7.089844 C 5.238281 -5.445312 4.890625 -4.140625 4.382812 -3.167969 L 4.769531 -2.691406 C 4.953125 -3.003906 5.125 -3.359375 5.28125 -3.757812 C 5.515625 -2.890625 5.800781 -2.128906 6.140625 -1.464844 Z M 2.035156 -3.046875 C 1.972656 -2.875 1.90625 -2.691406 1.828125 -2.503906 L 0.5625 -2.503906 L 0.5625 -1.957031 L 1.585938 -1.957031 C 1.410156 -1.609375 1.210938 -1.253906 0.988281 -0.875 C 1.410156 -0.71875 1.808594 -0.554688 2.191406 -0.390625 C 1.6875 -0.105469 1.074219 0.128906 0.363281 0.320312 L 0.65625 0.839844 C 1.523438 0.597656 2.242188 0.277344 2.8125 -0.121094 C 3.324219 0.105469 3.765625 0.335938 4.148438 0.5625 L 4.484375 0.078125 C 4.105469 -0.128906 3.707031 -0.320312 3.289062 -0.511719 C 3.742188 -0.925781 4.0625 -1.421875 4.25 -1.992188 L 4.25 -2.503906 L 2.441406 -2.503906 C 2.492188 -2.660156 2.554688 -2.8125 2.613281 -2.980469 Z M 2.71875 -0.753906 C 2.40625 -0.882812 2.078125 -1.003906 1.730469 -1.125 C 1.90625 -1.386719 2.0625 -1.664062 2.199219 -1.957031 L 3.6875 -1.957031 C 3.480469 -1.507812 3.152344 -1.101562 2.71875 -0.753906 Z M 1.246094 -6.910156 L 0.753906 -6.746094 C 0.960938 -6.417969 1.152344 -6.042969 1.332031 -5.621094 L 1.785156 -5.828125 C 1.628906 -6.207031 1.453125 -6.570312 1.246094 -6.910156 Z M 3.878906 -6.9375 C 3.722656 -6.570312 3.5 -6.207031 3.222656 -5.835938 L 3.664062 -5.609375 C 3.941406 -5.972656 4.15625 -6.347656 4.328125 -6.726562 Z M 0.582031 -5.410156 L 0.582031 -4.867188 L 1.808594 -4.867188 C 1.550781 -4.390625 1.082031 -3.957031 0.414062 -3.566406 L 0.71875 -3.066406 C 1.464844 -3.566406 1.984375 -4.15625 2.269531 -4.839844 L 2.269531 -3.195312 L 2.847656 -3.195312 L 2.847656 -4.320312 C 3.160156 -4.113281 3.53125 -3.835938 3.964844 -3.488281 L 4.285156 -3.972656 C 3.800781 -4.269531 3.316406 -4.539062 2.847656 -4.769531 L 2.847656 -4.867188 L 4.425781 -4.867188 L 4.425781 -5.410156 L 2.847656 -5.410156 L 2.847656 -7.066406 L 2.269531 -7.066406 L 2.269531 -5.410156 Z M 0.582031 -5.410156 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-9-1&quot;&gt;
&lt;path d=&quot;M 1.421875 0.789062 C 1.90625 0.789062 2.148438 0.527344 2.148438 0.0273438 L 2.148438 -2.503906 C 2.414062 -2.625 2.683594 -2.746094 2.953125 -2.882812 L 2.953125 -3.5 C 2.691406 -3.359375 2.425781 -3.230469 2.148438 -3.109375 L 2.148438 -4.8125 L 2.980469 -4.8125 L 2.980469 -5.410156 L 2.148438 -5.410156 L 2.148438 -7.046875 L 1.542969 -7.046875 L 1.542969 -5.410156 L 0.503906 -5.410156 L 0.503906 -4.8125 L 1.542969 -4.8125 L 1.542969 -2.855469 C 1.160156 -2.71875 0.761719 -2.597656 0.363281 -2.503906 L 0.519531 -1.894531 C 0.855469 -2 1.195312 -2.121094 1.542969 -2.25 L 1.542969 -0.128906 C 1.542969 0.113281 1.429688 0.242188 1.210938 0.242188 C 1.003906 0.242188 0.777344 0.226562 0.554688 0.199219 L 0.683594 0.789062 Z M 4.007812 -3.039062 L 5.773438 -3.039062 L 5.773438 -1.972656 L 4.328125 -1.972656 L 4.328125 0.867188 L 4.910156 0.867188 L 4.910156 0.441406 L 7.257812 0.441406 L 7.257812 0.867188 L 7.835938 0.867188 L 7.835938 -1.972656 L 6.382812 -1.972656 L 6.382812 -3.039062 L 8.234375 -3.039062 L 8.234375 -3.601562 L 6.382812 -3.601562 L 6.382812 -4.625 L 8.007812 -4.625 L 8.007812 -6.726562 L 3.445312 -6.726562 L 3.445312 -4.019531 C 3.4375 -2.199219 3.125 -0.710938 2.511719 0.433594 L 2.996094 0.867188 C 3.566406 -0.257812 3.90625 -1.558594 4.007812 -3.039062 Z M 5.773438 -4.625 L 5.773438 -3.601562 L 4.042969 -3.601562 C 4.042969 -3.742188 4.050781 -3.878906 4.050781 -4.019531 L 4.050781 -4.625 Z M 4.910156 -0.113281 L 4.910156 -1.421875 L 7.257812 -1.421875 L 7.257812 -0.113281 Z M 7.402344 -6.148438 L 7.402344 -5.1875 L 4.050781 -5.1875 L 4.050781 -6.148438 Z M 7.402344 -6.148438 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-9-2&quot;&gt;
&lt;path d=&quot;M 5.359375 -1.914062 L 5.359375 -0.015625 L 2.996094 -0.015625 L 2.996094 0.589844 L 8.285156 0.589844 L 8.285156 -0.015625 L 5.984375 -0.015625 L 5.984375 -1.914062 L 7.964844 -1.914062 L 7.964844 -2.492188 L 3.34375 -2.492188 L 3.34375 -1.914062 Z M 1.410156 0.789062 C 1.914062 0.789062 2.171875 0.535156 2.171875 0.0351562 L 2.171875 -2.519531 C 2.425781 -2.632812 2.675781 -2.753906 2.925781 -2.875 L 2.925781 -3.507812 C 2.683594 -3.375 2.433594 -3.253906 2.171875 -3.132812 L 2.171875 -4.8125 L 2.890625 -4.8125 L 2.890625 -5.410156 L 2.171875 -5.410156 L 2.171875 -7.066406 L 1.53125 -7.066406 L 1.53125 -5.410156 L 0.476562 -5.410156 L 0.476562 -4.8125 L 1.53125 -4.8125 L 1.53125 -2.875 C 1.144531 -2.734375 0.746094 -2.613281 0.335938 -2.511719 L 0.492188 -1.886719 C 0.839844 -2 1.1875 -2.121094 1.53125 -2.25 L 1.53125 -0.121094 C 1.53125 0.105469 1.421875 0.214844 1.195312 0.214844 C 0.976562 0.214844 0.753906 0.199219 0.519531 0.183594 L 0.648438 0.789062 Z M 5.59375 -7.167969 L 4.960938 -7.066406 C 5.117188 -6.789062 5.265625 -6.46875 5.402344 -6.121094 L 3.253906 -6.121094 L 3.253906 -4.484375 L 3.84375 -4.484375 L 3.84375 -5.558594 L 7.480469 -5.558594 L 7.480469 -4.484375 L 8.0625 -4.484375 L 8.0625 -6.121094 L 6.027344 -6.121094 C 5.886719 -6.511719 5.742188 -6.859375 5.59375 -7.167969 Z M 4.789062 -5.023438 C 4.460938 -4.277344 3.964844 -3.679688 3.316406 -3.230469 L 3.765625 -2.839844 C 4.414062 -3.289062 4.933594 -3.949219 5.332031 -4.804688 Z M 6.460938 -5.039062 L 5.929688 -4.8125 C 6.449219 -4.261719 6.917969 -3.621094 7.34375 -2.910156 L 7.886719 -3.1875 C 7.472656 -3.863281 6.996094 -4.484375 6.460938 -5.039062 Z M 6.460938 -5.039062 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-10-0&quot;&gt;
&lt;path d=&quot;M 4.007812 0.839844 C 4.492188 0.839844 4.746094 0.589844 4.746094 0.105469 L 4.746094 -2.214844 C 5.488281 -2.277344 6.15625 -2.335938 6.753906 -2.40625 C 6.960938 -2.105469 7.152344 -1.808594 7.316406 -1.515625 L 7.820312 -1.871094 C 7.4375 -2.484375 6.890625 -3.203125 6.183594 -4.035156 L 5.714844 -3.75 C 5.949219 -3.472656 6.171875 -3.1875 6.390625 -2.910156 C 5.386719 -2.789062 4.171875 -2.691406 2.761719 -2.613281 C 3.851562 -3.1875 5.125 -4.113281 6.589844 -5.402344 L 6.019531 -5.6875 C 5.601562 -5.316406 5.203125 -4.96875 4.8125 -4.660156 C 4.105469 -4.597656 3.402344 -4.546875 2.710938 -4.511719 C 3.265625 -4.875 3.808594 -5.359375 4.347656 -5.984375 C 5.578125 -6.078125 6.632812 -6.234375 7.53125 -6.441406 L 7.230469 -6.96875 C 5.585938 -6.605469 3.515625 -6.425781 1.03125 -6.425781 L 1.210938 -5.878906 C 2.042969 -5.878906 2.824219 -5.898438 3.558594 -5.929688 C 2.96875 -5.289062 2.460938 -4.867188 2.027344 -4.648438 C 1.894531 -4.597656 1.757812 -4.554688 1.601562 -4.539062 L 1.730469 -3.984375 C 2.597656 -4.035156 3.410156 -4.085938 4.164062 -4.148438 C 3.28125 -3.488281 2.484375 -3.003906 1.773438 -2.691406 C 1.609375 -2.640625 1.429688 -2.597656 1.230469 -2.582031 L 1.402344 -2.027344 C 2.382812 -2.070312 3.28125 -2.121094 4.113281 -2.171875 L 4.113281 -0.0507812 C 4.113281 0.15625 4 0.269531 3.792969 0.269531 C 3.507812 0.269531 3.210938 0.25 2.902344 0.226562 L 3.039062 0.839844 Z M 5.929688 -1.6875 L 5.515625 -1.289062 C 6.433594 -0.597656 7.152344 0.0507812 7.679688 0.65625 L 8.121094 0.214844 C 7.53125 -0.425781 6.804688 -1.054688 5.929688 -1.6875 Z M 2.632812 -1.628906 C 2.0625 -0.96875 1.351562 -0.390625 0.503906 0.113281 L 0.890625 0.613281 C 1.757812 0.0859375 2.484375 -0.527344 3.074219 -1.238281 Z M 2.632812 -1.628906 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-10-1&quot;&gt;
&lt;path d=&quot;M 3.308594 -1.109375 C 2.511719 -0.710938 1.585938 -0.398438 0.527344 -0.164062 L 0.605469 0.457031 C 1.609375 0.214844 2.511719 -0.113281 3.308594 -0.511719 Z M 1.921875 -7.089844 C 1.574219 -6.070312 1.175781 -5.167969 0.710938 -4.382812 C 0.625 -4.261719 0.535156 -4.183594 0.433594 -4.140625 L 0.597656 -3.566406 C 1.074219 -3.636719 1.550781 -3.722656 2.015625 -3.808594 C 1.542969 -2.980469 1.132812 -2.398438 0.804688 -2.050781 C 0.726562 -1.984375 0.632812 -1.914062 0.519531 -1.863281 L 0.691406 -1.289062 C 1.523438 -1.429688 2.398438 -1.679688 3.308594 -2.0625 L 3.308594 -2.640625 C 2.691406 -2.371094 2.085938 -2.164062 1.480469 -2.007812 C 1.984375 -2.632812 2.613281 -3.664062 3.375 -5.101562 L 2.8125 -5.316406 C 2.648438 -4.988281 2.492188 -4.683594 2.335938 -4.390625 C 1.957031 -4.320312 1.574219 -4.25 1.195312 -4.199219 C 1.644531 -4.859375 2.085938 -5.742188 2.519531 -6.847656 Z M 3.601562 -3.289062 C 4.867188 -3.386719 6.035156 -3.515625 7.109375 -3.6875 C 7.257812 -3.464844 7.386719 -3.246094 7.507812 -3.023438 L 7.992188 -3.359375 C 7.671875 -3.929688 7.210938 -4.589844 6.625 -5.34375 L 6.148438 -5.046875 C 6.363281 -4.769531 6.570312 -4.484375 6.761719 -4.207031 C 5.964844 -4.078125 5.160156 -3.984375 4.355469 -3.914062 C 4.648438 -4.261719 4.988281 -4.804688 5.367188 -5.558594 L 8.019531 -5.558594 L 8.019531 -6.15625 L 6.070312 -6.15625 C 5.949219 -6.519531 5.820312 -6.859375 5.6875 -7.152344 L 5.058594 -7.046875 C 5.195312 -6.78125 5.324219 -6.484375 5.445312 -6.15625 L 3.238281 -6.15625 L 3.238281 -5.558594 L 4.71875 -5.558594 C 4.25 -4.660156 3.878906 -4.105469 3.585938 -3.886719 C 3.550781 -3.878906 3.515625 -3.863281 3.464844 -3.84375 Z M 4.304688 -2.933594 C 4.269531 -1.957031 4.148438 -1.246094 3.941406 -0.796875 C 3.722656 -0.355469 3.359375 0.0273438 2.847656 0.355469 L 3.246094 0.847656 C 3.835938 0.46875 4.25 0.0078125 4.503906 -0.527344 C 4.726562 -1.039062 4.867188 -1.84375 4.910156 -2.933594 Z M 7.386719 0.710938 C 7.765625 0.691406 8.007812 0.589844 8.121094 0.414062 C 8.234375 0.226562 8.296875 -0.285156 8.296875 -1.101562 L 7.757812 -1.289062 C 7.757812 -0.777344 7.730469 -0.40625 7.699219 -0.164062 C 7.664062 0.0273438 7.550781 0.128906 7.359375 0.148438 L 6.796875 0.148438 C 6.660156 0.128906 6.597656 0.0351562 6.597656 -0.148438 L 6.597656 -3.011719 L 6 -3.011719 L 6 -0.0429688 C 6 0.457031 6.261719 0.710938 6.78125 0.710938 Z M 7.386719 0.710938 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-10-2&quot;&gt;
&lt;path d=&quot;M 3.210938 -0.847656 C 2.40625 -0.554688 1.472656 -0.3125 0.40625 -0.136719 L 0.492188 0.511719 C 1.507812 0.320312 2.414062 0.078125 3.210938 -0.214844 Z M 1.828125 -7.101562 C 1.480469 -6.097656 1.082031 -5.210938 0.613281 -4.433594 C 0.546875 -4.320312 0.457031 -4.242188 0.363281 -4.207031 L 0.511719 -3.636719 C 0.988281 -3.707031 1.464844 -3.792969 1.941406 -3.878906 C 1.488281 -3.03125 1.109375 -2.433594 0.789062 -2.078125 C 0.710938 -2.007812 0.613281 -1.949219 0.511719 -1.90625 L 0.675781 -1.332031 C 1.367188 -1.4375 2.105469 -1.636719 2.867188 -1.921875 L 2.867188 -2.484375 C 2.382812 -2.292969 1.886719 -2.140625 1.402344 -2.015625 C 1.90625 -2.675781 2.535156 -3.792969 3.308594 -5.367188 L 2.761719 -5.566406 C 2.570312 -5.167969 2.390625 -4.789062 2.214844 -4.433594 C 1.84375 -4.363281 1.472656 -4.304688 1.101562 -4.261719 C 1.550781 -4.917969 1.984375 -5.785156 2.40625 -6.875 Z M 4.988281 -2.441406 L 4.667969 -1.964844 C 5.480469 -1.722656 6.269531 -1.402344 7.046875 -0.988281 L 7.359375 -1.464844 C 6.648438 -1.84375 5.851562 -2.171875 4.988281 -2.441406 Z M 3.941406 -0.96875 L 3.59375 -0.449219 C 4.890625 -0.128906 6.164062 0.3125 7.402344 0.867188 L 7.730469 0.347656 C 6.589844 -0.171875 5.324219 -0.605469 3.941406 -0.96875 Z M 4.761719 -7.101562 C 4.492188 -6.128906 3.984375 -5.300781 3.238281 -4.625 L 3.628906 -4.113281 C 3.886719 -4.355469 4.128906 -4.613281 4.347656 -4.890625 C 4.660156 -4.527344 5.003906 -4.183594 5.378906 -3.871094 C 4.703125 -3.332031 3.929688 -2.925781 3.046875 -2.648438 L 3.351562 -2.09375 C 4.304688 -2.425781 5.132812 -2.882812 5.851562 -3.480469 C 6.503906 -2.980469 7.230469 -2.546875 8.027344 -2.199219 L 8.347656 -2.761719 C 7.585938 -3.074219 6.902344 -3.453125 6.285156 -3.886719 C 6.804688 -4.414062 7.246094 -5.03125 7.621094 -5.742188 L 7.621094 -6.25 L 5.132812 -6.25 C 5.230469 -6.492188 5.316406 -6.753906 5.394531 -7.023438 Z M 5.808594 -4.25 C 5.394531 -4.589844 5.011719 -4.953125 4.675781 -5.351562 C 4.726562 -5.445312 4.789062 -5.542969 4.847656 -5.644531 L 6.910156 -5.644531 C 6.589844 -5.125 6.226562 -4.660156 5.808594 -4.25 Z M 5.808594 -4.25 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-10-3&quot;&gt;
&lt;path d=&quot;M 3.003906 -0.882812 C 2.261719 -0.5625 1.386719 -0.3125 0.382812 -0.121094 L 0.457031 0.484375 C 1.410156 0.277344 2.261719 0.015625 3.003906 -0.292969 Z M 1.75 -7.101562 C 1.4375 -6.0625 1.074219 -5.152344 0.640625 -4.355469 C 0.5625 -4.234375 0.46875 -4.148438 0.363281 -4.09375 L 0.527344 -3.488281 C 0.976562 -3.574219 1.429688 -3.664062 1.878906 -3.765625 C 1.453125 -2.960938 1.089844 -2.390625 0.796875 -2.050781 C 0.71875 -1.984375 0.625 -1.921875 0.503906 -1.871094 L 0.675781 -1.28125 C 1.402344 -1.402344 2.164062 -1.636719 2.960938 -1.984375 L 2.960938 -2.535156 C 2.460938 -2.320312 1.949219 -2.148438 1.445312 -2.015625 C 1.914062 -2.675781 2.511719 -3.75 3.230469 -5.238281 L 2.683594 -5.4375 C 2.511719 -5.058594 2.335938 -4.691406 2.171875 -4.347656 C 1.808594 -4.269531 1.453125 -4.199219 1.109375 -4.148438 C 1.523438 -4.824219 1.941406 -5.730469 2.347656 -6.867188 Z M 3.714844 -4.8125 L 6.355469 -4.8125 L 6.15625 -4.285156 L 3.265625 -4.285156 L 3.265625 -3.742188 L 5.160156 -3.742188 C 4.78125 -3.394531 4.113281 -3.074219 3.152344 -2.78125 L 3.453125 -2.285156 C 4.027344 -2.492188 4.519531 -2.726562 4.925781 -2.96875 C 5.046875 -2.847656 5.167969 -2.710938 5.273438 -2.5625 C 4.691406 -2.078125 4 -1.707031 3.1875 -1.4375 L 3.5 -0.988281 C 4.261719 -1.265625 4.945312 -1.652344 5.53125 -2.164062 C 5.621094 -1.992188 5.699219 -1.800781 5.765625 -1.59375 C 4.996094 -0.925781 4.070312 -0.414062 2.988281 -0.0507812 L 3.332031 0.441406 C 4.285156 0.09375 5.132812 -0.40625 5.878906 -1.054688 L 5.90625 -0.703125 C 5.90625 -0.292969 5.851562 -0.0273438 5.765625 0.113281 C 5.699219 0.226562 5.515625 0.285156 5.222656 0.292969 L 4.625 0.292969 L 4.824219 0.8125 L 5.300781 0.8125 C 5.820312 0.8125 6.15625 0.691406 6.304688 0.457031 C 6.433594 0.242188 6.503906 -0.148438 6.503906 -0.703125 C 6.492188 -1.117188 6.425781 -1.507812 6.285156 -1.871094 C 6.40625 -1.921875 6.527344 -1.984375 6.660156 -2.050781 C 6.953125 -1.023438 7.378906 -0.234375 7.929688 0.320312 L 8.355469 -0.164062 C 7.800781 -0.613281 7.378906 -1.324219 7.074219 -2.3125 C 7.367188 -2.527344 7.652344 -2.789062 7.921875 -3.082031 L 7.542969 -3.453125 C 7.074219 -2.96875 6.589844 -2.597656 6.070312 -2.355469 C 5.886719 -2.683594 5.652344 -2.996094 5.359375 -3.273438 C 5.542969 -3.421875 5.699219 -3.574219 5.835938 -3.742188 L 8.15625 -3.742188 L 8.15625 -4.285156 L 6.761719 -4.285156 L 7.488281 -6.261719 L 7.488281 -6.511719 L 5.011719 -6.511719 L 5.230469 -7.03125 L 4.632812 -7.125 Z M 6.539062 -5.300781 L 4.519531 -5.300781 L 4.804688 -6.007812 L 6.796875 -6.007812 Z M 6.539062 -5.300781 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-11-0&quot;&gt;
&lt;path d=&quot;M 0.613281 -5.898438 C 1.023438 -5.941406 1.410156 -5.992188 1.785156 -6.042969 L 1.785156 -4.703125 L 0.46875 -4.703125 L 0.46875 -4.105469 L 1.714844 -4.105469 C 1.429688 -3.152344 0.953125 -2.304688 0.277344 -1.550781 L 0.546875 -0.875 C 1.066406 -1.550781 1.472656 -2.292969 1.785156 -3.109375 L 1.785156 0.832031 L 2.390625 0.832031 L 2.390625 -3.089844 C 2.640625 -2.824219 2.945312 -2.460938 3.289062 -1.992188 L 3.636719 -2.511719 C 3.210938 -2.925781 2.796875 -3.300781 2.390625 -3.628906 L 2.390625 -4.105469 L 3.53125 -4.105469 L 3.53125 -4.703125 L 2.390625 -4.703125 L 2.390625 -6.15625 C 2.78125 -6.234375 3.152344 -6.320312 3.5 -6.425781 L 3.28125 -7.011719 C 2.46875 -6.753906 1.542969 -6.582031 0.492188 -6.484375 Z M 6.484375 -3.785156 C 5.914062 -2.933594 4.882812 -2.328125 3.386719 -1.964844 L 3.765625 -1.402344 C 4.625 -1.636719 5.351562 -1.957031 5.941406 -2.363281 L 7.601562 -2.363281 C 7.324219 -1.773438 6.847656 -1.265625 6.183594 -0.839844 C 5.921875 -1.117188 5.652344 -1.375 5.367188 -1.621094 L 4.917969 -1.308594 L 5.671875 -0.554688 C 5.011719 -0.226562 4.199219 0.0507812 3.230469 0.257812 L 3.550781 0.839844 C 6.164062 0.199219 7.742188 -0.882812 8.277344 -2.398438 L 8.277344 -2.925781 L 6.589844 -2.925781 C 6.761719 -3.117188 6.917969 -3.324219 7.058594 -3.542969 Z M 6.121094 -6.980469 L 5.507812 -7.109375 C 4.96875 -6.347656 4.304688 -5.75 3.507812 -5.316406 L 3.921875 -4.8125 C 4.425781 -5.101562 4.882812 -5.445312 5.28125 -5.851562 L 7.074219 -5.851562 C 6.78125 -5.300781 6.328125 -4.8125 5.730469 -4.414062 C 5.578125 -4.675781 5.378906 -4.933594 5.117188 -5.195312 L 4.683594 -4.875 C 4.859375 -4.71875 5.066406 -4.484375 5.300781 -4.15625 C 4.796875 -3.894531 4.214844 -3.671875 3.542969 -3.5 L 3.851562 -3.03125 C 5.914062 -3.601562 7.1875 -4.554688 7.6875 -5.886719 L 7.6875 -6.40625 L 5.75 -6.40625 C 5.878906 -6.589844 6 -6.78125 6.121094 -6.980469 Z M 6.121094 -6.980469 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-11-1&quot;&gt;
&lt;path d=&quot;M 0.371094 -5.628906 L 0.371094 -5.039062 L 3.109375 -5.039062 L 3.109375 -5.628906 L 2.09375 -5.628906 C 1.972656 -6.128906 1.851562 -6.582031 1.730469 -6.96875 L 1.109375 -6.867188 C 1.253906 -6.492188 1.386719 -6.078125 1.507812 -5.628906 Z M 1.082031 -4.527344 L 0.570312 -4.363281 C 0.769531 -3.28125 0.933594 -2.15625 1.066406 -0.988281 L 1.574219 -1.117188 C 1.429688 -2.398438 1.265625 -3.542969 1.082031 -4.527344 Z M 3.101562 -1.039062 C 2.875 -0.953125 2.632812 -0.875 2.390625 -0.789062 C 2.597656 -1.949219 2.761719 -3.203125 2.867188 -4.5625 L 2.304688 -4.640625 C 2.207031 -3.222656 2.0625 -1.886719 1.851562 -0.625 C 1.367188 -0.484375 0.867188 -0.371094 0.355469 -0.285156 L 0.511719 0.328125 C 1.4375 0.121094 2.304688 -0.128906 3.101562 -0.441406 Z M 7.210938 -5.394531 L 6.035156 -5.394531 L 6.035156 -7.058594 L 5.429688 -7.058594 L 5.429688 -5.394531 L 4.277344 -5.394531 L 4.277344 -6.71875 L 3.679688 -6.71875 L 3.679688 -4.847656 L 7.800781 -4.847656 L 7.800781 -6.71875 L 7.210938 -6.71875 Z M 3.308594 -4.121094 L 3.308594 -3.550781 L 5.34375 -3.550781 C 5.289062 -3.265625 5.203125 -2.988281 5.101562 -2.71875 L 3.558594 -2.71875 L 3.558594 0.832031 L 4.121094 0.832031 L 4.121094 -2.164062 L 4.882812 -2.164062 L 4.882812 0.703125 L 5.410156 0.703125 L 5.410156 -2.164062 L 6.113281 -2.164062 L 6.113281 0.691406 L 6.640625 0.691406 L 6.640625 -2.164062 L 7.421875 -2.164062 L 7.421875 0.0625 C 7.421875 0.214844 7.359375 0.292969 7.246094 0.292969 L 6.890625 0.269531 L 7.039062 0.832031 L 7.4375 0.832031 C 7.800781 0.832031 7.984375 0.613281 7.984375 0.183594 L 7.984375 -2.71875 L 5.707031 -2.71875 C 5.808594 -2.988281 5.898438 -3.265625 5.957031 -3.550781 L 8.234375 -3.550781 L 8.234375 -4.121094 Z M 3.308594 -4.121094 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-12-0&quot;&gt;
&lt;path d=&quot;M 4.71875 -7.066406 L 4.71875 -5.6875 L 3.074219 -5.6875 L 3.074219 -5.089844 L 4.710938 -5.089844 C 4.640625 -3.253906 4.035156 -1.90625 2.882812 -1.054688 L 3.359375 -0.632812 C 4.597656 -1.585938 5.253906 -3.074219 5.34375 -5.089844 L 7.230469 -5.089844 C 7.203125 -3.367188 7.125 -2.304688 7.003906 -1.90625 C 6.867188 -1.488281 6.539062 -1.28125 6.019531 -1.273438 C 5.851562 -1.273438 5.644531 -1.289062 5.394531 -1.308594 L 5.558594 -0.71875 C 5.792969 -0.703125 5.992188 -0.691406 6.164062 -0.691406 C 6.78125 -0.691406 7.210938 -0.933594 7.464844 -1.402344 C 7.707031 -1.871094 7.835938 -3.300781 7.851562 -5.6875 L 5.351562 -5.6875 L 5.351562 -7.066406 Z M 1.066406 -6.9375 L 0.632812 -6.527344 C 1.253906 -6.035156 1.742188 -5.578125 2.09375 -5.144531 L 2.546875 -5.601562 C 2.148438 -6.042969 1.652344 -6.484375 1.066406 -6.9375 Z M 6.328125 0.710938 L 8.15625 0.710938 L 8.3125 0.078125 C 8.105469 0.09375 7.800781 0.105469 7.410156 0.113281 C 7.011719 0.113281 6.632812 0.121094 6.25 0.121094 C 5.542969 0.121094 4.945312 0.113281 4.46875 0.105469 C 3.929688 0.0859375 3.515625 0.0273438 3.238281 -0.0859375 C 2.988281 -0.207031 2.753906 -0.390625 2.527344 -0.632812 C 2.449219 -0.71875 2.371094 -0.777344 2.304688 -0.832031 L 2.304688 -4.085938 L 0.457031 -4.085938 L 0.457031 -3.480469 L 1.707031 -3.480469 L 1.707031 -0.867188 C 1.34375 -0.710938 0.933594 -0.257812 0.46875 0.476562 L 0.933594 0.902344 C 1.421875 0.0859375 1.773438 -0.3125 1.984375 -0.3125 C 2.09375 -0.3125 2.214844 -0.242188 2.335938 -0.09375 C 2.613281 0.214844 2.933594 0.433594 3.300781 0.535156 C 3.652344 0.632812 4.128906 0.683594 4.71875 0.691406 C 5.300781 0.703125 5.835938 0.710938 6.328125 0.710938 Z M 6.328125 0.710938 &quot;/&gt;
&lt;/g&gt;
&lt;/g&gt;
&lt;/defs&gt;
&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;rgb(100%, 100%, 100%)&quot; fill-opacity=&quot;1&quot; d=&quot;M 0 0 L 361.5 0 L 361.5 361.5 L 0 361.5 Z M 0 0 &quot;/&gt;
&lt;path fill=&quot;none&quot; stroke-width=&quot;1&quot; stroke-linecap=&quot;butt&quot; stroke-linejoin=&quot;miter&quot; stroke=&quot;rgb(0%, 0%, 0%)&quot; stroke-opacity=&quot;1&quot; stroke-miterlimit=&quot;10&quot; d=&quot;M 250.000004 199.999614 L 250.000004 126.368681 &quot; transform=&quot;matrix(0.721557, 0, 0, 0.721557, 0.360778, 0.360778)&quot;/&gt;
&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot; stroke-width=&quot;1&quot; stroke-linecap=&quot;butt&quot; stroke-linejoin=&quot;miter&quot; stroke=&quot;rgb(0%, 0%, 0%)&quot; stroke-opacity=&quot;1&quot; stroke-miterlimit=&quot;10&quot; d=&quot;M 250.000004 121.117449 L 253.50263 128.122701 L 250.000004 126.368681 L 246.497378 128.122701 Z M 250.000004 121.117449 &quot; transform=&quot;matrix(0.721557, 0, 0, 0.721557, 0.360778, 0.360778)&quot;/&gt;
&lt;path fill=&quot;none&quot; stroke-width=&quot;1&quot; stroke-linecap=&quot;butt&quot; stroke-linejoin=&quot;miter&quot; stroke=&quot;rgb(0%, 0%, 0%)&quot; stroke-opacity=&quot;1&quot; stroke-miterlimit=&quot;10&quot; d=&quot;M 209.99861 240.001009 L 136.367676 240.001009 &quot; transform=&quot;matrix(0.721557, 0, 0, 0.721557, 0.360778, 0.360778)&quot;/&gt;
&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot; stroke-width=&quot;1&quot; stroke-linecap=&quot;butt&quot; stroke-linejoin=&quot;miter&quot; stroke=&quot;rgb(0%, 0%, 0%)&quot; stroke-opacity=&quot;1&quot; stroke-miterlimit=&quot;10&quot; d=&quot;M 131.121858 240.001009 L 138.121696 236.498383 L 136.367676 240.001009 L 138.121696 243.498221 Z M 131.121858 240.001009 &quot; transform=&quot;matrix(0.721557, 0, 0, 0.721557, 0.360778, 0.360778)&quot;/&gt;
&lt;path fill=&quot;none&quot; stroke-width=&quot;1&quot; stroke-linecap=&quot;butt&quot; stroke-linejoin=&quot;miter&quot; stroke=&quot;rgb(0%, 0%, 0%)&quot; stroke-opacity=&quot;1&quot; stroke-miterlimit=&quot;10&quot; d=&quot;M 290.001399 240.001009 L 363.632332 240.001009 &quot; transform=&quot;matrix(0.721557, 0, 0, 0.721557, 0.360778, 0.360778)&quot;/&gt;
&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot; stroke-width=&quot;1&quot; stroke-linecap=&quot;butt&quot; stroke-linejoin=&quot;miter&quot; stroke=&quot;rgb(0%, 0%, 0%)&quot; stroke-opacity=&quot;1&quot; stroke-miterlimit=&quot;10&quot; d=&quot;M 368.878151 240.001009 L 361.878313 243.498221 L 363.632332 240.001009 L 361.878313 236.498383 Z M 368.878151 240.001009 &quot; transform=&quot;matrix(0.721557, 0, 0, 0.721557, 0.360778, 0.360778)&quot;/&gt;
&lt;path fill=&quot;none&quot; stroke-width=&quot;1&quot; stroke-linecap=&quot;butt&quot; stroke-linejoin=&quot;miter&quot; stroke=&quot;rgb(0%, 0%, 0%)&quot; stroke-opacity=&quot;1&quot; stroke-miterlimit=&quot;10&quot; d=&quot;M 250.000004 280.002404 L 250.000004 353.627924 &quot; transform=&quot;matrix(0.721557, 0, 0, 0.721557, 0.360778, 0.360778)&quot;/&gt;
&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot; stroke-width=&quot;1&quot; stroke-linecap=&quot;butt&quot; stroke-linejoin=&quot;miter&quot; stroke=&quot;rgb(0%, 0%, 0%)&quot; stroke-opacity=&quot;1&quot; stroke-miterlimit=&quot;10&quot; d=&quot;M 250.000004 358.879155 L 246.497378 351.879317 L 250.000004 353.627924 L 253.50263 351.879317 Z M 250.000004 358.879155 &quot; transform=&quot;matrix(0.721557, 0, 0, 0.721557, 0.360778, 0.360778)&quot;/&gt;
&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;rgb(100%, 100%, 100%)&quot; fill-opacity=&quot;1&quot; stroke-width=&quot;1&quot; stroke-linecap=&quot;butt&quot; stroke-linejoin=&quot;miter&quot; stroke=&quot;rgb(0%, 0%, 0%)&quot; stroke-opacity=&quot;1&quot; stroke-miterlimit=&quot;4&quot; d=&quot;M 290.001399 240.001009 C 290.001399 241.31111 289.936435 242.615798 289.806508 243.920485 C 289.67658 245.225173 289.487103 246.519033 289.232662 247.802066 C 288.978221 249.090513 288.658816 250.357305 288.279861 251.613269 C 287.895492 252.86382 287.456988 254.098131 286.953519 255.305373 C 286.455464 256.518028 285.892445 257.698202 285.27529 258.856721 C 284.658135 260.009827 283.986844 261.135864 283.261416 262.224006 C 282.530574 263.312148 281.75101 264.362394 280.922723 265.374745 C 280.089022 266.387096 279.212012 267.356138 278.286279 268.28187 C 277.360547 269.213017 276.386091 270.090027 275.37374 270.918314 C 274.36139 271.752014 273.311143 272.531579 272.223001 273.257007 C 271.134859 273.987848 270.008822 274.65914 268.855716 275.276295 C 267.702611 275.89345 266.517023 276.456469 265.309781 276.954524 C 264.097126 277.457992 262.862816 277.896497 261.612265 278.275452 C 260.3563 278.659821 259.089508 278.973812 257.801061 279.233667 C 256.518028 279.488108 255.224168 279.677585 253.91948 279.807513 C 252.614793 279.93744 251.310105 280.002404 250.000004 280.002404 C 248.689903 280.002404 247.385216 279.93744 246.080528 279.807513 C 244.775841 279.677585 243.48198 279.488108 242.198947 279.233667 C 240.910501 278.973812 239.643709 278.659821 238.387744 278.275452 C 237.137193 277.896497 235.902883 277.457992 234.690227 276.954524 C 233.482985 276.456469 232.297398 275.89345 231.144292 275.276295 C 229.991186 274.65914 228.865149 273.987848 227.777007 273.257007 C 226.688865 272.531579 225.638619 271.752014 224.626268 270.918314 C 223.613917 270.090027 222.639462 269.213017 221.713729 268.28187 C 220.787997 267.356138 219.910987 266.387096 219.077286 265.374745 C 218.248999 264.362394 217.469434 263.312148 216.738593 262.224006 C 216.013165 261.135864 215.341873 260.009827 214.724718 258.856721 C 214.107563 257.698202 213.544545 256.518028 213.04649 255.305373 C 212.543021 254.098131 212.104516 252.86382 211.720148 251.613269 C 211.341193 250.357305 211.021788 249.090513 210.767347 247.802066 C 210.512906 246.519033 210.323428 245.225173 210.193501 243.920485 C 210.063573 242.615798 209.99861 241.31111 209.99861 240.001009 C 209.99861 238.690908 210.063573 237.380807 210.193501 236.081533 C 210.323428 234.776845 210.512906 233.482985 210.767347 232.194538 C 211.021788 230.911505 211.341193 229.644713 211.720148 228.388749 C 212.104516 227.132784 212.543021 225.903887 213.04649 224.691232 C 213.544545 223.48399 214.107563 222.298402 214.724718 221.145297 C 215.341873 219.986778 216.013165 218.866154 216.738593 217.778012 C 217.469434 216.68987 218.248999 215.639624 219.077286 214.621859 C 219.910987 213.609508 220.787997 212.640467 221.713729 211.714734 C 222.639462 210.789001 223.613917 209.911991 224.626268 209.078291 C 225.638619 208.250004 226.688865 207.470439 227.777007 206.739598 C 228.865149 206.01417 229.991186 205.342878 231.144292 204.725723 C 232.297398 204.103154 233.482985 203.545549 234.690227 203.047494 C 235.902883 202.544026 237.137193 202.100107 238.387744 201.721152 C 239.643709 201.342197 240.910501 201.022793 242.198947 200.768351 C 243.48198 200.51391 244.775841 200.319019 246.080528 200.194505 C 247.385216 200.064578 248.689903 199.999614 250.000004 199.999614 C 251.310105 199.999614 252.614793 200.064578 253.91948 200.194505 C 255.224168 200.319019 256.518028 200.51391 257.801061 200.768351 C 259.089508 201.022793 260.3563 201.342197 261.612265 201.721152 C 262.862816 202.100107 264.097126 202.544026 265.309781 203.047494 C 266.517023 203.545549 267.702611 204.103154 268.855716 204.725723 C 270.008822 205.342878 271.134859 206.01417 272.223001 206.739598 C 273.311143 207.470439 274.36139 208.250004 275.37374 209.078291 C 276.386091 209.911991 277.360547 210.789001 278.286279 211.714734 C 279.212012 212.640467 280.089022 213.609508 280.922723 214.621859 C 281.75101 215.639624 282.530574 216.68987 283.261416 217.778012 C 283.986844 218.866154 284.658135 219.986778 285.27529 221.145297 C 285.892445 222.298402 286.455464 223.48399 286.953519 224.691232 C 287.456988 225.903887 287.895492 227.132784 288.279861 228.388749 C 288.658816 229.644713 288.978221 230.911505 289.232662 232.194538 C 289.487103 233.482985 289.67658 234.776845 289.806508 236.081533 C 289.936435 237.380807 290.001399 238.690908 290.001399 240.001009 Z M 290.001399 240.001009 &quot; transform=&quot;matrix(0.721557, 0, 0, 0.721557, 0.360778, 0.360778)&quot;/&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-0-0&quot; x=&quot;163.071854&quot; y=&quot;165.958081&quot;/&gt;
&lt;/g&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-1-0&quot; x=&quot;171.730536&quot; y=&quot;165.958081&quot;/&gt;
&lt;/g&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-2-0&quot; x=&quot;180.389219&quot; y=&quot;165.958081&quot;/&gt;
&lt;/g&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-3-0&quot; x=&quot;189.047902&quot; y=&quot;165.958081&quot;/&gt;
&lt;/g&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-4-0&quot; x=&quot;163.071854&quot; y=&quot;176.059877&quot;/&gt;
&lt;/g&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-5-0&quot; x=&quot;171.730536&quot; y=&quot;176.059877&quot;/&gt;
&lt;/g&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-6-0&quot; x=&quot;180.389219&quot; y=&quot;176.059877&quot;/&gt;
&lt;/g&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-1-1&quot; x=&quot;189.047902&quot; y=&quot;176.059877&quot;/&gt;
&lt;/g&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-7-0&quot; x=&quot;163.071854&quot; y=&quot;186.88323&quot;/&gt;
&lt;/g&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-8-0&quot; x=&quot;171.730536&quot; y=&quot;186.88323&quot;/&gt;
&lt;/g&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-6-0&quot; x=&quot;180.389219&quot; y=&quot;186.88323&quot;/&gt;
&lt;/g&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-1-1&quot; x=&quot;189.047902&quot; y=&quot;186.88323&quot;/&gt;
&lt;/g&gt;
&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;rgb(100%, 100%, 100%)&quot; fill-opacity=&quot;1&quot; stroke-width=&quot;1&quot; stroke-linecap=&quot;butt&quot; stroke-linejoin=&quot;miter&quot; stroke=&quot;rgb(0%, 0%, 0%)&quot; stroke-opacity=&quot;1&quot; stroke-miterlimit=&quot;4&quot; d=&quot;M 190.000619 59.99744 L 309.999389 59.99744 L 309.999389 120.002239 L 190.000619 120.002239 Z M 190.000619 59.99744 &quot; transform=&quot;matrix(0.721557, 0, 0, 0.721557, 0.360778, 0.360778)&quot;/&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-6-1&quot; x=&quot;158.742512&quot; y=&quot;67.826346&quot;/&gt;
&lt;/g&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-9-0&quot; x=&quot;167.401195&quot; y=&quot;67.826346&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-9-1&quot; x=&quot;176.059878&quot; y=&quot;67.826346&quot;/&gt;
&lt;/g&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-4-0&quot; x=&quot;184.718561&quot; y=&quot;67.826346&quot;/&gt;
&lt;/g&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-5-0&quot; x=&quot;193.377244&quot; y=&quot;67.826346&quot;/&gt;
&lt;/g&gt;
&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;rgb(100%, 100%, 100%)&quot; fill-opacity=&quot;1&quot; stroke-width=&quot;1&quot; stroke-linecap=&quot;butt&quot; stroke-linejoin=&quot;miter&quot; stroke=&quot;rgb(0%, 0%, 0%)&quot; stroke-opacity=&quot;1&quot; stroke-miterlimit=&quot;4&quot; d=&quot;M 10.002464 209.99861 L 130.001234 209.99861 L 130.001234 269.997995 L 10.002464 269.997995 Z M 10.002464 209.99861 &quot; transform=&quot;matrix(0.721557, 0, 0, 0.721557, 0.360778, 0.360778)&quot;/&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-9-2&quot; x=&quot;33.191616&quot; y=&quot;176.059877&quot;/&gt;
&lt;/g&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-4-1&quot; x=&quot;41.850299&quot; y=&quot;176.059877&quot;/&gt;
&lt;/g&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-10-0&quot; x=&quot;50.508982&quot; y=&quot;176.059877&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-10-1&quot; x=&quot;59.167665&quot; y=&quot;176.059877&quot;/&gt;
&lt;/g&gt;
&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;rgb(100%, 100%, 100%)&quot; fill-opacity=&quot;1&quot; stroke-width=&quot;1&quot; stroke-linecap=&quot;butt&quot; stroke-linejoin=&quot;miter&quot; stroke=&quot;rgb(0%, 0%, 0%)&quot; stroke-opacity=&quot;1&quot; stroke-miterlimit=&quot;4&quot; d=&quot;M 190.000619 359.999779 L 309.999389 359.999779 L 309.999389 419.999164 L 190.000619 419.999164 Z M 190.000619 359.999779 &quot; transform=&quot;matrix(0.721557, 0, 0, 0.721557, 0.360778, 0.360778)&quot;/&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-11-0&quot; x=&quot;163.071854&quot; y=&quot;284.293408&quot;/&gt;
&lt;/g&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-4-2&quot; x=&quot;171.730536&quot; y=&quot;284.293408&quot;/&gt;
&lt;/g&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-10-2&quot; x=&quot;180.389219&quot; y=&quot;284.293408&quot;/&gt;
&lt;/g&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-11-1&quot; x=&quot;189.047902&quot; y=&quot;284.293408&quot;/&gt;
&lt;/g&gt;
&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;rgb(100%, 100%, 100%)&quot; fill-opacity=&quot;1&quot; stroke-width=&quot;1&quot; stroke-linecap=&quot;butt&quot; stroke-linejoin=&quot;miter&quot; stroke=&quot;rgb(0%, 0%, 0%)&quot; stroke-opacity=&quot;1&quot; stroke-miterlimit=&quot;4&quot; d=&quot;M 369.998774 209.99861 L 489.997545 209.99861 L 489.997545 269.997995 L 369.998774 269.997995 Z M 369.998774 209.99861 &quot; transform=&quot;matrix(0.721557, 0, 0, 0.721557, 0.360778, 0.360778)&quot;/&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-12-0&quot; x=&quot;292.952091&quot; y=&quot;176.059877&quot;/&gt;
&lt;/g&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-10-3&quot; x=&quot;301.610774&quot; y=&quot;176.059877&quot;/&gt;
&lt;/g&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-4-0&quot; x=&quot;310.269457&quot; y=&quot;176.059877&quot;/&gt;
&lt;/g&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-5-0&quot; x=&quot;318.92814&quot; y=&quot;176.059877&quot;/&gt;
&lt;/g&gt;
&lt;/svg&gt;
&lt;/div&gt;
&lt;/p&gt;
&lt;/div&gt;

&lt;p&gt;
而目前的现状如图所示 &lt;a href=&quot;#org4ae5aa5&quot;&gt;1&lt;/a&gt; ，上世纪 90 年代提出的普渡自动化金字塔层级架构，把工业企业的自动化应用和控制分成多个层级。最底下是所要管控的工业现场；往上一层是部署在现场的传感器、执行器和 SIS ，它们直接和物理世界进行交互；在这些现场设备上一层是 PLC ，DCS ，SCADA 等执行监控任务的控制设备；再上一层是数据历史系统、生产执行系统等运营管理软件；最上层则是企业信息系统，包括供应商管理软件、客户管理软件、财务管理软件等。
&lt;/p&gt;


&lt;div id=&quot;org4ae5aa5&quot; class=&quot;figure&quot;&gt;
&lt;p&gt;&lt;div align=&quot;center&quot;&gt;&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; xmlns:xlink=&quot;http://www.w3.org/1999/xlink&quot; width=&quot;841.91998&quot; height=&quot;597.12&quot; viewBox=&quot;0 0 841.91998 597.12&quot;&gt;
&lt;defs&gt;
&lt;g&gt;
&lt;g id=&quot;glyph-0-0&quot;&gt;
&lt;path d=&quot;M 0.953125 -9.296875 L 2.75 -9.296875 L 5.421875 -1.4375 L 8.078125 -9.296875 L 9.859375 -9.296875 L 9.859375 0 L 8.671875 0 L 8.671875 -5.484375 C 8.671875 -5.671875 8.671875 -5.984375 8.671875 -6.421875 C 8.679688 -6.859375 8.6875 -7.332031 8.6875 -7.84375 L 6.046875 0 L 4.796875 0 L 2.125 -7.84375 L 2.125 -7.546875 C 2.125 -7.316406 2.128906 -6.96875 2.140625 -6.5 C 2.148438 -6.039062 2.15625 -5.703125 2.15625 -5.484375 L 2.15625 0 L 0.953125 0 Z M 0.953125 -9.296875 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-0-1&quot;&gt;
&lt;path d=&quot;M 1.703125 -1.796875 C 1.703125 -1.472656 1.820312 -1.210938 2.0625 -1.015625 C 2.300781 -0.828125 2.585938 -0.734375 2.921875 -0.734375 C 3.316406 -0.734375 3.703125 -0.828125 4.078125 -1.015625 C 4.710938 -1.328125 5.03125 -1.832031 5.03125 -2.53125 L 5.03125 -3.453125 C 4.894531 -3.359375 4.71875 -3.28125 4.5 -3.21875 C 4.28125 -3.164062 4.066406 -3.125 3.859375 -3.09375 L 3.15625 -3.015625 C 2.75 -2.953125 2.441406 -2.863281 2.234375 -2.75 C 1.878906 -2.550781 1.703125 -2.234375 1.703125 -1.796875 Z M 4.46875 -4.109375 C 4.726562 -4.140625 4.898438 -4.25 4.984375 -4.4375 C 5.035156 -4.53125 5.0625 -4.675781 5.0625 -4.875 C 5.0625 -5.257812 4.921875 -5.539062 4.640625 -5.71875 C 4.367188 -5.894531 3.976562 -5.984375 3.46875 -5.984375 C 2.875 -5.984375 2.453125 -5.820312 2.203125 -5.5 C 2.066406 -5.320312 1.972656 -5.054688 1.921875 -4.703125 L 0.859375 -4.703125 C 0.878906 -5.535156 1.148438 -6.113281 1.671875 -6.4375 C 2.191406 -6.769531 2.796875 -6.9375 3.484375 -6.9375 C 4.285156 -6.9375 4.9375 -6.785156 5.4375 -6.484375 C 5.925781 -6.179688 6.171875 -5.707031 6.171875 -5.0625 L 6.171875 -1.15625 C 6.171875 -1.039062 6.191406 -0.945312 6.234375 -0.875 C 6.285156 -0.800781 6.390625 -0.765625 6.546875 -0.765625 C 6.597656 -0.765625 6.65625 -0.769531 6.71875 -0.78125 C 6.78125 -0.789062 6.847656 -0.800781 6.921875 -0.8125 L 6.921875 0.03125 C 6.742188 0.0820312 6.609375 0.113281 6.515625 0.125 C 6.421875 0.132812 6.296875 0.140625 6.140625 0.140625 C 5.742188 0.140625 5.457031 0.00390625 5.28125 -0.265625 C 5.1875 -0.421875 5.125 -0.628906 5.09375 -0.890625 C 4.863281 -0.585938 4.53125 -0.320312 4.09375 -0.09375 C 3.65625 0.121094 3.175781 0.234375 2.65625 0.234375 C 2.03125 0.234375 1.515625 0.0390625 1.109375 -0.34375 C 0.710938 -0.726562 0.515625 -1.207031 0.515625 -1.78125 C 0.515625 -2.40625 0.707031 -2.890625 1.09375 -3.234375 C 1.488281 -3.578125 2.007812 -3.789062 2.65625 -3.875 Z M 3.515625 -6.9375 Z M 3.515625 -6.9375 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-0-2&quot;&gt;
&lt;path d=&quot;M 0.828125 -6.78125 L 1.921875 -6.78125 L 1.921875 -5.8125 C 2.234375 -6.207031 2.566406 -6.488281 2.921875 -6.65625 C 3.285156 -6.832031 3.6875 -6.921875 4.125 -6.921875 C 5.09375 -6.921875 5.742188 -6.585938 6.078125 -5.921875 C 6.265625 -5.554688 6.359375 -5.03125 6.359375 -4.34375 L 6.359375 0 L 5.203125 0 L 5.203125 -4.265625 C 5.203125 -4.679688 5.140625 -5.015625 5.015625 -5.265625 C 4.816406 -5.691406 4.453125 -5.90625 3.921875 -5.90625 C 3.648438 -5.90625 3.425781 -5.875 3.25 -5.8125 C 2.9375 -5.71875 2.660156 -5.535156 2.421875 -5.265625 C 2.234375 -5.035156 2.109375 -4.800781 2.046875 -4.5625 C 1.992188 -4.332031 1.96875 -3.992188 1.96875 -3.546875 L 1.96875 0 L 0.828125 0 Z M 3.515625 -6.9375 Z M 3.515625 -6.9375 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-0-3&quot;&gt;
&lt;path d=&quot;M 1.96875 -6.78125 L 1.96875 -2.28125 C 1.96875 -1.9375 2.023438 -1.648438 2.140625 -1.421875 C 2.335938 -1.023438 2.710938 -0.828125 3.265625 -0.828125 C 4.054688 -0.828125 4.597656 -1.179688 4.890625 -1.890625 C 5.046875 -2.265625 5.125 -2.785156 5.125 -3.453125 L 5.125 -6.78125 L 6.265625 -6.78125 L 6.265625 0 L 5.1875 0 L 5.203125 -1 C 5.054688 -0.738281 4.875 -0.519531 4.65625 -0.34375 C 4.21875 0.0078125 3.6875 0.1875 3.0625 0.1875 C 2.101562 0.1875 1.445312 -0.132812 1.09375 -0.78125 C 0.90625 -1.125 0.8125 -1.585938 0.8125 -2.171875 L 0.8125 -6.78125 Z M 3.53125 -6.9375 Z M 3.53125 -6.9375 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-0-4&quot;&gt;
&lt;path d=&quot;M 1.125 -7.8125 C 1.132812 -8.28125 1.210938 -8.625 1.359375 -8.84375 C 1.628906 -9.226562 2.144531 -9.421875 2.90625 -9.421875 C 2.976562 -9.421875 3.050781 -9.414062 3.125 -9.40625 C 3.195312 -9.40625 3.285156 -9.40625 3.390625 -9.40625 L 3.390625 -8.359375 C 3.265625 -8.367188 3.175781 -8.375 3.125 -8.375 C 3.070312 -8.375 3.023438 -8.375 2.984375 -8.375 C 2.628906 -8.375 2.421875 -8.285156 2.359375 -8.109375 C 2.296875 -7.929688 2.265625 -7.476562 2.265625 -6.75 L 3.390625 -6.75 L 3.390625 -5.84375 L 2.25 -5.84375 L 2.25 0 L 1.125 0 L 1.125 -5.84375 L 0.171875 -5.84375 L 0.171875 -6.75 L 1.125 -6.75 Z M 1.125 -7.8125 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-0-5&quot;&gt;
&lt;path d=&quot;M 3.453125 -6.96875 C 4.210938 -6.96875 4.832031 -6.78125 5.3125 -6.40625 C 5.789062 -6.039062 6.078125 -5.40625 6.171875 -4.5 L 5.0625 -4.5 C 5 -4.914062 4.847656 -5.257812 4.609375 -5.53125 C 4.367188 -5.8125 3.984375 -5.953125 3.453125 -5.953125 C 2.722656 -5.953125 2.203125 -5.597656 1.890625 -4.890625 C 1.691406 -4.429688 1.59375 -3.863281 1.59375 -3.1875 C 1.59375 -2.507812 1.734375 -1.9375 2.015625 -1.46875 C 2.304688 -1.007812 2.757812 -0.78125 3.375 -0.78125 C 3.84375 -0.78125 4.210938 -0.921875 4.484375 -1.203125 C 4.765625 -1.492188 4.957031 -1.890625 5.0625 -2.390625 L 6.171875 -2.390625 C 6.046875 -1.492188 5.726562 -0.835938 5.21875 -0.421875 C 4.71875 -0.00390625 4.070312 0.203125 3.28125 0.203125 C 2.394531 0.203125 1.6875 -0.117188 1.15625 -0.765625 C 0.632812 -1.421875 0.375 -2.234375 0.375 -3.203125 C 0.375 -4.390625 0.660156 -5.3125 1.234375 -5.96875 C 1.816406 -6.632812 2.554688 -6.96875 3.453125 -6.96875 Z M 3.265625 -6.9375 Z M 3.265625 -6.9375 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-0-6&quot;&gt;
&lt;path d=&quot;M 1.0625 -8.671875 L 2.21875 -8.671875 L 2.21875 -6.78125 L 3.296875 -6.78125 L 3.296875 -5.84375 L 2.21875 -5.84375 L 2.21875 -1.421875 C 2.21875 -1.179688 2.296875 -1.023438 2.453125 -0.953125 C 2.546875 -0.898438 2.691406 -0.875 2.890625 -0.875 C 2.953125 -0.875 3.015625 -0.875 3.078125 -0.875 C 3.140625 -0.882812 3.210938 -0.890625 3.296875 -0.890625 L 3.296875 0 C 3.160156 0.0390625 3.019531 0.0664062 2.875 0.078125 C 2.738281 0.0976562 2.585938 0.109375 2.421875 0.109375 C 1.890625 0.109375 1.53125 -0.0234375 1.34375 -0.296875 C 1.15625 -0.566406 1.0625 -0.921875 1.0625 -1.359375 L 1.0625 -5.84375 L 0.140625 -5.84375 L 0.140625 -6.78125 L 1.0625 -6.78125 Z M 1.0625 -8.671875 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-0-7&quot;&gt;
&lt;path d=&quot;M 0.859375 -6.78125 L 1.953125 -6.78125 L 1.953125 -5.609375 C 2.035156 -5.828125 2.25 -6.097656 2.59375 -6.421875 C 2.945312 -6.753906 3.347656 -6.921875 3.796875 -6.921875 C 3.816406 -6.921875 3.851562 -6.914062 3.90625 -6.90625 C 3.957031 -6.90625 4.039062 -6.898438 4.15625 -6.890625 L 4.15625 -5.6875 C 4.09375 -5.707031 4.03125 -5.71875 3.96875 -5.71875 C 3.914062 -5.71875 3.851562 -5.71875 3.78125 -5.71875 C 3.207031 -5.71875 2.765625 -5.53125 2.453125 -5.15625 C 2.148438 -4.789062 2 -4.367188 2 -3.890625 L 2 0 L 0.859375 0 Z M 0.859375 -6.78125 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-0-8&quot;&gt;
&lt;path d=&quot;M 0.828125 -6.75 L 2 -6.75 L 2 0 L 0.828125 0 Z M 0.828125 -9.296875 L 2 -9.296875 L 2 -8 L 0.828125 -8 Z M 0.828125 -9.296875 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-0-9&quot;&gt;
&lt;path d=&quot;M 3.21875 -6.890625 C 3.75 -6.890625 4.210938 -6.757812 4.609375 -6.5 C 4.828125 -6.351562 5.050781 -6.140625 5.28125 -5.859375 L 5.28125 -6.703125 L 6.328125 -6.703125 L 6.328125 -0.546875 C 6.328125 0.304688 6.195312 0.984375 5.9375 1.484375 C 5.46875 2.398438 4.578125 2.859375 3.265625 2.859375 C 2.535156 2.859375 1.921875 2.695312 1.421875 2.375 C 0.929688 2.050781 0.65625 1.539062 0.59375 0.84375 L 1.75 0.84375 C 1.800781 1.144531 1.910156 1.378906 2.078125 1.546875 C 2.335938 1.796875 2.742188 1.921875 3.296875 1.921875 C 4.171875 1.921875 4.742188 1.613281 5.015625 1 C 5.171875 0.632812 5.242188 -0.0078125 5.234375 -0.9375 C 5.003906 -0.59375 4.726562 -0.335938 4.40625 -0.171875 C 4.082031 -0.00390625 3.660156 0.078125 3.140625 0.078125 C 2.398438 0.078125 1.753906 -0.179688 1.203125 -0.703125 C 0.660156 -1.222656 0.390625 -2.082031 0.390625 -3.28125 C 0.390625 -4.414062 0.664062 -5.300781 1.21875 -5.9375 C 1.769531 -6.570312 2.4375 -6.890625 3.21875 -6.890625 Z M 5.28125 -3.421875 C 5.28125 -4.253906 5.101562 -4.875 4.75 -5.28125 C 4.40625 -5.6875 3.96875 -5.890625 3.4375 -5.890625 C 2.632812 -5.890625 2.085938 -5.515625 1.796875 -4.765625 C 1.640625 -4.359375 1.5625 -3.832031 1.5625 -3.1875 C 1.5625 -2.425781 1.710938 -1.84375 2.015625 -1.4375 C 2.328125 -1.039062 2.742188 -0.84375 3.265625 -0.84375 C 4.085938 -0.84375 4.664062 -1.210938 5 -1.953125 C 5.1875 -2.367188 5.28125 -2.859375 5.28125 -3.421875 Z M 3.359375 -6.9375 Z M 3.359375 -6.9375 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-0-10&quot;&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-0-11&quot;&gt;
&lt;path d=&quot;M 3.6875 -0.765625 C 4.21875 -0.765625 4.660156 -0.984375 5.015625 -1.421875 C 5.367188 -1.867188 5.546875 -2.535156 5.546875 -3.421875 C 5.546875 -3.960938 5.46875 -4.425781 5.3125 -4.8125 C 5.019531 -5.5625 4.476562 -5.9375 3.6875 -5.9375 C 2.90625 -5.9375 2.367188 -5.539062 2.078125 -4.75 C 1.921875 -4.332031 1.84375 -3.800781 1.84375 -3.15625 C 1.84375 -2.625 1.921875 -2.175781 2.078125 -1.8125 C 2.367188 -1.113281 2.90625 -0.765625 3.6875 -0.765625 Z M 0.75 -6.75 L 1.859375 -6.75 L 1.859375 -5.84375 C 2.078125 -6.15625 2.320312 -6.394531 2.59375 -6.5625 C 2.976562 -6.8125 3.429688 -6.9375 3.953125 -6.9375 C 4.722656 -6.9375 5.375 -6.640625 5.90625 -6.046875 C 6.4375 -5.460938 6.703125 -4.625 6.703125 -3.53125 C 6.703125 -2.0625 6.316406 -1.007812 5.546875 -0.375 C 5.054688 0.0273438 4.488281 0.234375 3.84375 0.234375 C 3.332031 0.234375 2.90625 0.117188 2.5625 -0.109375 C 2.363281 -0.234375 2.140625 -0.453125 1.890625 -0.765625 L 1.890625 2.703125 L 0.75 2.703125 Z M 0.75 -6.75 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-0-12&quot;&gt;
&lt;path d=&quot;M 3.515625 -0.734375 C 4.273438 -0.734375 4.796875 -1.019531 5.078125 -1.59375 C 5.359375 -2.164062 5.5 -2.800781 5.5 -3.5 C 5.5 -4.132812 5.394531 -4.648438 5.1875 -5.046875 C 4.875 -5.671875 4.320312 -5.984375 3.53125 -5.984375 C 2.832031 -5.984375 2.328125 -5.71875 2.015625 -5.1875 C 1.703125 -4.65625 1.546875 -4.007812 1.546875 -3.25 C 1.546875 -2.53125 1.703125 -1.929688 2.015625 -1.453125 C 2.328125 -0.972656 2.828125 -0.734375 3.515625 -0.734375 Z M 3.5625 -6.96875 C 4.4375 -6.96875 5.175781 -6.675781 5.78125 -6.09375 C 6.382812 -5.507812 6.6875 -4.65625 6.6875 -3.53125 C 6.6875 -2.4375 6.421875 -1.53125 5.890625 -0.8125 C 5.359375 -0.101562 4.535156 0.25 3.421875 0.25 C 2.484375 0.25 1.738281 -0.0625 1.1875 -0.6875 C 0.644531 -1.320312 0.375 -2.171875 0.375 -3.234375 C 0.375 -4.378906 0.660156 -5.285156 1.234375 -5.953125 C 1.816406 -6.628906 2.59375 -6.96875 3.5625 -6.96875 Z M 3.53125 -6.9375 Z M 3.53125 -6.9375 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-0-13&quot;&gt;
&lt;path d=&quot;M 3.65625 -6.921875 C 4.132812 -6.921875 4.597656 -6.804688 5.046875 -6.578125 C 5.503906 -6.359375 5.847656 -6.070312 6.078125 -5.71875 C 6.304688 -5.375 6.460938 -4.972656 6.546875 -4.515625 C 6.609375 -4.203125 6.640625 -3.703125 6.640625 -3.015625 L 1.671875 -3.015625 C 1.691406 -2.335938 1.851562 -1.789062 2.15625 -1.375 C 2.46875 -0.957031 2.941406 -0.75 3.578125 -0.75 C 4.171875 -0.75 4.644531 -0.941406 5 -1.328125 C 5.195312 -1.554688 5.335938 -1.820312 5.421875 -2.125 L 6.546875 -2.125 C 6.515625 -1.875 6.414062 -1.59375 6.25 -1.28125 C 6.082031 -0.976562 5.894531 -0.734375 5.6875 -0.546875 C 5.34375 -0.203125 4.914062 0.0234375 4.40625 0.140625 C 4.132812 0.203125 3.828125 0.234375 3.484375 0.234375 C 2.640625 0.234375 1.921875 -0.0664062 1.328125 -0.671875 C 0.742188 -1.285156 0.453125 -2.144531 0.453125 -3.25 C 0.453125 -4.34375 0.742188 -5.226562 1.328125 -5.90625 C 1.921875 -6.582031 2.695312 -6.921875 3.65625 -6.921875 Z M 5.46875 -3.921875 C 5.425781 -4.421875 5.316406 -4.816406 5.140625 -5.109375 C 4.835938 -5.660156 4.320312 -5.9375 3.59375 -5.9375 C 3.0625 -5.9375 2.617188 -5.742188 2.265625 -5.359375 C 1.910156 -4.984375 1.722656 -4.503906 1.703125 -3.921875 Z M 3.546875 -6.9375 Z M 3.546875 -6.9375 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-0-14&quot;&gt;
&lt;path d=&quot;M 1.515625 -2.125 C 1.546875 -1.75 1.640625 -1.457031 1.796875 -1.25 C 2.078125 -0.882812 2.570312 -0.703125 3.28125 -0.703125 C 3.707031 -0.703125 4.078125 -0.789062 4.390625 -0.96875 C 4.710938 -1.15625 4.875 -1.441406 4.875 -1.828125 C 4.875 -2.117188 4.75 -2.335938 4.5 -2.484375 C 4.332031 -2.578125 4.003906 -2.6875 3.515625 -2.8125 L 2.625 -3.046875 C 2.039062 -3.179688 1.613281 -3.335938 1.34375 -3.515625 C 0.851562 -3.828125 0.609375 -4.253906 0.609375 -4.796875 C 0.609375 -5.441406 0.835938 -5.960938 1.296875 -6.359375 C 1.765625 -6.753906 2.382812 -6.953125 3.15625 -6.953125 C 4.175781 -6.953125 4.914062 -6.648438 5.375 -6.046875 C 5.65625 -5.671875 5.789062 -5.265625 5.78125 -4.828125 L 4.703125 -4.828125 C 4.679688 -5.085938 4.59375 -5.320312 4.4375 -5.53125 C 4.175781 -5.832031 3.722656 -5.984375 3.078125 -5.984375 C 2.640625 -5.984375 2.3125 -5.898438 2.09375 -5.734375 C 1.875 -5.566406 1.765625 -5.347656 1.765625 -5.078125 C 1.765625 -4.785156 1.910156 -4.550781 2.203125 -4.375 C 2.367188 -4.269531 2.617188 -4.175781 2.953125 -4.09375 L 3.703125 -3.90625 C 4.515625 -3.707031 5.0625 -3.515625 5.34375 -3.328125 C 5.789062 -3.035156 6.015625 -2.578125 6.015625 -1.953125 C 6.015625 -1.359375 5.785156 -0.835938 5.328125 -0.390625 C 4.867188 0.0429688 4.171875 0.265625 3.234375 0.265625 C 2.222656 0.265625 1.507812 0.0351562 1.09375 -0.421875 C 0.675781 -0.878906 0.453125 -1.445312 0.421875 -2.125 Z M 3.1875 -6.9375 Z M 3.1875 -6.9375 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-0-15&quot;&gt;
&lt;path d=&quot;M 1.5625 -3.3125 C 1.5625 -2.582031 1.710938 -1.972656 2.015625 -1.484375 C 2.328125 -0.992188 2.820312 -0.75 3.5 -0.75 C 4.019531 -0.75 4.453125 -0.972656 4.796875 -1.421875 C 5.140625 -1.878906 5.3125 -2.535156 5.3125 -3.390625 C 5.3125 -4.242188 5.132812 -4.875 4.78125 -5.28125 C 4.425781 -5.695312 3.992188 -5.90625 3.484375 -5.90625 C 2.910156 -5.90625 2.445312 -5.679688 2.09375 -5.234375 C 1.738281 -4.796875 1.5625 -4.15625 1.5625 -3.3125 Z M 3.265625 -6.890625 C 3.785156 -6.890625 4.222656 -6.78125 4.578125 -6.5625 C 4.773438 -6.4375 5.003906 -6.21875 5.265625 -5.90625 L 5.265625 -9.328125 L 6.359375 -9.328125 L 6.359375 0 L 5.328125 0 L 5.328125 -0.9375 C 5.066406 -0.519531 4.753906 -0.21875 4.390625 -0.03125 C 4.023438 0.144531 3.609375 0.234375 3.140625 0.234375 C 2.390625 0.234375 1.738281 -0.078125 1.1875 -0.703125 C 0.632812 -1.335938 0.359375 -2.1875 0.359375 -3.25 C 0.359375 -4.226562 0.609375 -5.078125 1.109375 -5.796875 C 1.609375 -6.523438 2.328125 -6.890625 3.265625 -6.890625 Z M 3.265625 -6.890625 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-0-16&quot;&gt;
&lt;path d=&quot;M 1.5625 -3.296875 C 1.5625 -2.710938 1.644531 -2.222656 1.8125 -1.828125 C 2.101562 -1.117188 2.625 -0.765625 3.375 -0.765625 C 4.164062 -0.765625 4.710938 -1.132812 5.015625 -1.875 C 5.179688 -2.28125 5.265625 -2.804688 5.265625 -3.453125 C 5.265625 -4.035156 5.171875 -4.523438 4.984375 -4.921875 C 4.679688 -5.585938 4.140625 -5.921875 3.359375 -5.921875 C 2.867188 -5.921875 2.445312 -5.707031 2.09375 -5.28125 C 1.738281 -4.851562 1.5625 -4.191406 1.5625 -3.296875 Z M 3.25 -6.921875 C 3.8125 -6.921875 4.285156 -6.78125 4.671875 -6.5 C 4.878906 -6.351562 5.082031 -6.128906 5.28125 -5.828125 L 5.28125 -6.78125 L 6.359375 -6.78125 L 6.359375 2.703125 L 5.21875 2.703125 L 5.21875 -0.78125 C 5.019531 -0.476562 4.753906 -0.234375 4.421875 -0.046875 C 4.085938 0.128906 3.671875 0.21875 3.171875 0.21875 C 2.453125 0.21875 1.804688 -0.0625 1.234375 -0.625 C 0.660156 -1.195312 0.375 -2.0625 0.375 -3.21875 C 0.375 -4.300781 0.640625 -5.1875 1.171875 -5.875 C 1.710938 -6.570312 2.40625 -6.921875 3.25 -6.921875 Z M 3.25 -6.921875 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-0-17&quot;&gt;
&lt;path d=&quot;M 0.828125 -6.78125 L 1.953125 -6.78125 L 1.953125 -5.8125 C 2.222656 -6.144531 2.46875 -6.390625 2.6875 -6.546875 C 3.0625 -6.796875 3.488281 -6.921875 3.96875 -6.921875 C 4.507812 -6.921875 4.945312 -6.789062 5.28125 -6.53125 C 5.457031 -6.375 5.625 -6.148438 5.78125 -5.859375 C 6.03125 -6.222656 6.328125 -6.488281 6.671875 -6.65625 C 7.015625 -6.832031 7.398438 -6.921875 7.828125 -6.921875 C 8.734375 -6.921875 9.351562 -6.59375 9.6875 -5.9375 C 9.863281 -5.582031 9.953125 -5.109375 9.953125 -4.515625 L 9.953125 0 L 8.765625 0 L 8.765625 -4.703125 C 8.765625 -5.148438 8.648438 -5.457031 8.421875 -5.625 C 8.203125 -5.800781 7.929688 -5.890625 7.609375 -5.890625 C 7.160156 -5.890625 6.773438 -5.738281 6.453125 -5.4375 C 6.128906 -5.132812 5.96875 -4.632812 5.96875 -3.9375 L 5.96875 0 L 4.8125 0 L 4.8125 -4.421875 C 4.8125 -4.878906 4.753906 -5.210938 4.640625 -5.421875 C 4.472656 -5.742188 4.148438 -5.90625 3.671875 -5.90625 C 3.242188 -5.90625 2.851562 -5.738281 2.5 -5.40625 C 2.144531 -5.070312 1.96875 -4.46875 1.96875 -3.59375 L 1.96875 0 L 0.828125 0 Z M 0.828125 -6.78125 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-0-18&quot;&gt;
&lt;path d=&quot;M 1.8125 -3 C 1.84375 -2.46875 1.96875 -2.039062 2.1875 -1.71875 C 2.601562 -1.101562 3.335938 -0.796875 4.390625 -0.796875 C 4.859375 -0.796875 5.285156 -0.863281 5.671875 -1 C 6.429688 -1.257812 6.8125 -1.722656 6.8125 -2.390625 C 6.8125 -2.898438 6.648438 -3.265625 6.328125 -3.484375 C 6.003906 -3.691406 5.503906 -3.875 4.828125 -4.03125 L 3.5625 -4.3125 C 2.738281 -4.5 2.160156 -4.703125 1.828125 -4.921875 C 1.234375 -5.316406 0.9375 -5.898438 0.9375 -6.671875 C 0.9375 -7.503906 1.222656 -8.1875 1.796875 -8.71875 C 2.378906 -9.257812 3.195312 -9.53125 4.25 -9.53125 C 5.226562 -9.53125 6.054688 -9.289062 6.734375 -8.8125 C 7.421875 -8.34375 7.765625 -7.59375 7.765625 -6.5625 L 6.578125 -6.5625 C 6.515625 -7.0625 6.378906 -7.441406 6.171875 -7.703125 C 5.785156 -8.191406 5.132812 -8.4375 4.21875 -8.4375 C 3.476562 -8.4375 2.941406 -8.28125 2.609375 -7.96875 C 2.285156 -7.65625 2.125 -7.289062 2.125 -6.875 C 2.125 -6.425781 2.316406 -6.09375 2.703125 -5.875 C 2.953125 -5.738281 3.515625 -5.570312 4.390625 -5.375 L 5.6875 -5.078125 C 6.320312 -4.929688 6.804688 -4.734375 7.140625 -4.484375 C 7.734375 -4.054688 8.03125 -3.425781 8.03125 -2.59375 C 8.03125 -1.570312 7.65625 -0.835938 6.90625 -0.390625 C 6.15625 0.0429688 5.285156 0.265625 4.296875 0.265625 C 3.140625 0.265625 2.238281 -0.0234375 1.59375 -0.609375 C 0.9375 -1.203125 0.613281 -2 0.625 -3 Z M 4.34375 -9.546875 Z M 4.34375 -9.546875 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-0-19&quot;&gt;
&lt;path d=&quot;M 5.75 -3.8125 L 4.34375 -7.90625 L 2.84375 -3.8125 Z M 3.6875 -9.296875 L 5.109375 -9.296875 L 8.484375 0 L 7.109375 0 L 6.15625 -2.78125 L 2.484375 -2.78125 L 1.484375 0 L 0.1875 0 Z M 3.6875 -9.296875 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-0-20&quot;&gt;
&lt;path d=&quot;M 1.265625 -9.296875 L 2.546875 -9.296875 L 2.546875 0 L 1.265625 0 Z M 1.265625 -9.296875 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-0-21&quot;&gt;
&lt;path d=&quot;M 4.90625 -9.546875 C 6.082031 -9.546875 6.992188 -9.234375 7.640625 -8.609375 C 8.285156 -7.992188 8.644531 -7.289062 8.71875 -6.5 L 7.5 -6.5 C 7.351562 -7.101562 7.070312 -7.578125 6.65625 -7.921875 C 6.25 -8.273438 5.671875 -8.453125 4.921875 -8.453125 C 4.003906 -8.453125 3.265625 -8.128906 2.703125 -7.484375 C 2.140625 -6.835938 1.859375 -5.851562 1.859375 -4.53125 C 1.859375 -3.4375 2.109375 -2.550781 2.609375 -1.875 C 3.117188 -1.195312 3.878906 -0.859375 4.890625 -0.859375 C 5.816406 -0.859375 6.523438 -1.21875 7.015625 -1.9375 C 7.265625 -2.3125 7.453125 -2.804688 7.578125 -3.421875 L 8.8125 -3.421875 C 8.695312 -2.441406 8.332031 -1.617188 7.71875 -0.953125 C 6.976562 -0.160156 5.984375 0.234375 4.734375 0.234375 C 3.660156 0.234375 2.753906 -0.0859375 2.015625 -0.734375 C 1.046875 -1.597656 0.5625 -2.9375 0.5625 -4.75 C 0.5625 -6.113281 0.925781 -7.234375 1.65625 -8.109375 C 2.4375 -9.066406 3.519531 -9.546875 4.90625 -9.546875 Z M 4.65625 -9.546875 Z M 4.65625 -9.546875 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-0-22&quot;&gt;
&lt;path d=&quot;M 4.546875 -1.078125 C 4.972656 -1.078125 5.328125 -1.117188 5.609375 -1.203125 C 6.097656 -1.367188 6.5 -1.6875 6.8125 -2.15625 C 7.050781 -2.53125 7.226562 -3.007812 7.34375 -3.59375 C 7.40625 -3.945312 7.4375 -4.273438 7.4375 -4.578125 C 7.4375 -5.722656 7.207031 -6.613281 6.75 -7.25 C 6.289062 -7.882812 5.554688 -8.203125 4.546875 -8.203125 L 2.3125 -8.203125 L 2.3125 -1.078125 Z M 1.046875 -9.296875 L 4.8125 -9.296875 C 6.082031 -9.296875 7.070312 -8.84375 7.78125 -7.9375 C 8.40625 -7.113281 8.71875 -6.0625 8.71875 -4.78125 C 8.71875 -3.800781 8.535156 -2.910156 8.171875 -2.109375 C 7.515625 -0.703125 6.390625 0 4.796875 0 L 1.046875 0 Z M 1.046875 -9.296875 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-0-23&quot;&gt;
&lt;path d=&quot;M 2.953125 -9.296875 L 3.90625 -9.296875 L 0.96875 0 L 0 0 Z M 2.953125 -9.296875 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-0-24&quot;&gt;
&lt;path d=&quot;M 7.75 -9.296875 L 7.75 -8.1875 L 4.609375 -8.1875 L 4.609375 0 L 3.34375 0 L 3.34375 -8.1875 L 0.203125 -8.1875 L 0.203125 -9.296875 Z M 7.75 -9.296875 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-0-25&quot;&gt;
&lt;path d=&quot;M 2.359375 -9.296875 L 2.359375 -3.546875 C 2.359375 -2.867188 2.484375 -2.304688 2.734375 -1.859375 C 3.109375 -1.191406 3.738281 -0.859375 4.625 -0.859375 C 5.695312 -0.859375 6.425781 -1.222656 6.8125 -1.953125 C 7.007812 -2.347656 7.109375 -2.878906 7.109375 -3.546875 L 7.109375 -9.296875 L 8.390625 -9.296875 L 8.390625 -4.078125 C 8.390625 -2.929688 8.238281 -2.050781 7.9375 -1.4375 C 7.363281 -0.3125 6.296875 0.25 4.734375 0.25 C 3.160156 0.25 2.09375 -0.3125 1.53125 -1.4375 C 1.226562 -2.050781 1.078125 -2.929688 1.078125 -4.078125 L 1.078125 -9.296875 Z M 4.734375 -9.296875 Z M 4.734375 -9.296875 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-0-26&quot;&gt;
&lt;path d=&quot;M 1.015625 -9.296875 L 2.296875 -9.296875 L 2.296875 -5.453125 L 7.125 -5.453125 L 7.125 -9.296875 L 8.390625 -9.296875 L 8.390625 0 L 7.125 0 L 7.125 -4.34375 L 2.296875 -4.34375 L 2.296875 0 L 1.015625 0 Z M 1.015625 -9.296875 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-0-27&quot;&gt;
&lt;path d=&quot;M 1.109375 -9.296875 L 5.28125 -9.296875 C 6.113281 -9.296875 6.78125 -9.0625 7.28125 -8.59375 C 7.789062 -8.125 8.046875 -7.46875 8.046875 -6.625 C 8.046875 -5.90625 7.816406 -5.273438 7.359375 -4.734375 C 6.910156 -4.191406 6.21875 -3.921875 5.28125 -3.921875 L 2.359375 -3.921875 L 2.359375 0 L 1.109375 0 Z M 6.78125 -6.625 C 6.78125 -7.300781 6.523438 -7.765625 6.015625 -8.015625 C 5.734375 -8.140625 5.351562 -8.203125 4.875 -8.203125 L 2.359375 -8.203125 L 2.359375 -4.984375 L 4.875 -4.984375 C 5.4375 -4.984375 5.894531 -5.101562 6.25 -5.34375 C 6.601562 -5.59375 6.78125 -6.019531 6.78125 -6.625 Z M 6.78125 -6.625 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-0-28&quot;&gt;
&lt;path d=&quot;M 0.984375 -9.296875 L 2.25 -9.296875 L 2.25 -1.109375 L 6.953125 -1.109375 L 6.953125 0 L 0.984375 0 Z M 0.984375 -9.296875 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-0-29&quot;&gt;
&lt;path d=&quot;M 5.3125 -5.03125 C 5.894531 -5.03125 6.359375 -5.148438 6.703125 -5.390625 C 7.046875 -5.628906 7.21875 -6.054688 7.21875 -6.671875 C 7.21875 -7.328125 6.976562 -7.773438 6.5 -8.015625 C 6.238281 -8.140625 5.894531 -8.203125 5.46875 -8.203125 L 2.390625 -8.203125 L 2.390625 -5.03125 Z M 1.140625 -9.296875 L 5.4375 -9.296875 C 6.144531 -9.296875 6.726562 -9.191406 7.1875 -8.984375 C 8.0625 -8.585938 8.5 -7.851562 8.5 -6.78125 C 8.5 -6.226562 8.382812 -5.773438 8.15625 -5.421875 C 7.925781 -5.066406 7.601562 -4.78125 7.1875 -4.5625 C 7.550781 -4.414062 7.820312 -4.222656 8 -3.984375 C 8.1875 -3.742188 8.289062 -3.351562 8.3125 -2.8125 L 8.359375 -1.5625 C 8.367188 -1.207031 8.398438 -0.945312 8.453125 -0.78125 C 8.523438 -0.476562 8.660156 -0.285156 8.859375 -0.203125 L 8.859375 0 L 7.3125 0 C 7.269531 -0.0820312 7.234375 -0.1875 7.203125 -0.3125 C 7.179688 -0.4375 7.160156 -0.679688 7.140625 -1.046875 L 7.078125 -2.59375 C 7.046875 -3.195312 6.816406 -3.601562 6.390625 -3.8125 C 6.148438 -3.925781 5.773438 -3.984375 5.265625 -3.984375 L 2.390625 -3.984375 L 2.390625 0 L 1.140625 0 Z M 1.140625 -9.296875 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-0-30&quot;&gt;
&lt;path d=&quot;M 0.859375 -9.296875 L 2 -9.296875 L 2 0 L 0.859375 0 Z M 0.859375 -9.296875 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-0-31&quot;&gt;
&lt;path d=&quot;M 1.109375 -9.296875 L 7.875 -9.296875 L 7.875 -8.15625 L 2.328125 -8.15625 L 2.328125 -5.328125 L 7.46875 -5.328125 L 7.46875 -4.25 L 2.328125 -4.25 L 2.328125 -1.109375 L 7.96875 -1.109375 L 7.96875 0 L 1.109375 0 Z M 4.546875 -9.296875 Z M 4.546875 -9.296875 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-0-32&quot;&gt;
&lt;path d=&quot;M 1.59375 -9.296875 L 3.359375 -1.734375 L 5.453125 -9.296875 L 6.8125 -9.296875 L 8.921875 -1.734375 L 10.671875 -9.296875 L 12.046875 -9.296875 L 9.609375 0 L 8.28125 0 L 6.140625 -7.703125 L 3.984375 0 L 2.65625 0 L 0.234375 -9.296875 Z M 1.59375 -9.296875 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-0-33&quot;&gt;
&lt;path d=&quot;M 0.828125 -9.328125 L 1.96875 -9.328125 L 1.96875 -5.859375 C 2.238281 -6.203125 2.484375 -6.441406 2.703125 -6.578125 C 3.066406 -6.816406 3.523438 -6.9375 4.078125 -6.9375 C 5.054688 -6.9375 5.722656 -6.59375 6.078125 -5.90625 C 6.265625 -5.53125 6.359375 -5.007812 6.359375 -4.34375 L 6.359375 0 L 5.1875 0 L 5.1875 -4.265625 C 5.1875 -4.765625 5.125 -5.128906 5 -5.359375 C 4.789062 -5.734375 4.398438 -5.921875 3.828125 -5.921875 C 3.359375 -5.921875 2.929688 -5.757812 2.546875 -5.4375 C 2.160156 -5.113281 1.96875 -4.5 1.96875 -3.59375 L 1.96875 0 L 0.828125 0 Z M 0.828125 -9.328125 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-0-34&quot;&gt;
&lt;path d=&quot;M 0.75 -9.328125 L 1.859375 -9.328125 L 1.859375 -5.953125 C 2.097656 -6.273438 2.390625 -6.519531 2.734375 -6.6875 C 3.085938 -6.863281 3.46875 -6.953125 3.875 -6.953125 C 4.71875 -6.953125 5.398438 -6.660156 5.921875 -6.078125 C 6.441406 -5.503906 6.703125 -4.648438 6.703125 -3.515625 C 6.703125 -2.441406 6.441406 -1.550781 5.921875 -0.84375 C 5.410156 -0.132812 4.695312 0.21875 3.78125 0.21875 C 3.257812 0.21875 2.820312 0.0898438 2.46875 -0.15625 C 2.257812 -0.300781 2.035156 -0.535156 1.796875 -0.859375 L 1.796875 0 L 0.75 0 Z M 3.703125 -0.796875 C 4.316406 -0.796875 4.773438 -1.039062 5.078125 -1.53125 C 5.390625 -2.019531 5.546875 -2.660156 5.546875 -3.453125 C 5.546875 -4.171875 5.390625 -4.765625 5.078125 -5.234375 C 4.773438 -5.703125 4.328125 -5.9375 3.734375 -5.9375 C 3.210938 -5.9375 2.757812 -5.742188 2.375 -5.359375 C 1.988281 -4.972656 1.796875 -4.335938 1.796875 -3.453125 C 1.796875 -2.816406 1.875 -2.300781 2.03125 -1.90625 C 2.332031 -1.164062 2.890625 -0.796875 3.703125 -0.796875 Z M 3.703125 -0.796875 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-0-35&quot;&gt;
&lt;path d=&quot;M 3.703125 -5.671875 C 4.097656 -5.960938 4.375 -6.195312 4.53125 -6.375 C 4.78125 -6.65625 4.90625 -6.972656 4.90625 -7.328125 C 4.90625 -7.597656 4.8125 -7.832031 4.625 -8.03125 C 4.445312 -8.226562 4.203125 -8.328125 3.890625 -8.328125 C 3.421875 -8.328125 3.097656 -8.171875 2.921875 -7.859375 C 2.828125 -7.703125 2.78125 -7.53125 2.78125 -7.34375 C 2.78125 -7.082031 2.847656 -6.832031 2.984375 -6.59375 C 3.128906 -6.363281 3.367188 -6.054688 3.703125 -5.671875 Z M 3.40625 -0.78125 C 3.875 -0.78125 4.273438 -0.882812 4.609375 -1.09375 C 4.953125 -1.3125 5.210938 -1.554688 5.390625 -1.828125 L 3.296875 -4.390625 C 2.703125 -3.992188 2.3125 -3.691406 2.125 -3.484375 C 1.851562 -3.160156 1.71875 -2.773438 1.71875 -2.328125 C 1.71875 -1.828125 1.894531 -1.441406 2.25 -1.171875 C 2.613281 -0.910156 3 -0.78125 3.40625 -0.78125 Z M 2.65625 -5.171875 C 2.269531 -5.617188 2.007812 -5.992188 1.875 -6.296875 C 1.738281 -6.609375 1.671875 -6.910156 1.671875 -7.203125 C 1.671875 -7.796875 1.875 -8.289062 2.28125 -8.6875 C 2.6875 -9.082031 3.226562 -9.28125 3.90625 -9.28125 C 4.550781 -9.28125 5.054688 -9.09375 5.421875 -8.71875 C 5.785156 -8.351562 5.96875 -7.914062 5.96875 -7.40625 C 5.96875 -6.8125 5.78125 -6.289062 5.40625 -5.84375 C 5.1875 -5.582031 4.816406 -5.285156 4.296875 -4.953125 L 6 -2.921875 C 6.113281 -3.253906 6.191406 -3.503906 6.234375 -3.671875 C 6.273438 -3.835938 6.320312 -4.070312 6.375 -4.375 L 7.453125 -4.375 C 7.378906 -3.78125 7.234375 -3.207031 7.015625 -2.65625 C 6.804688 -2.113281 6.703125 -1.894531 6.703125 -2 L 8.34375 0 L 6.875 0 L 6.015625 -1.0625 C 5.660156 -0.6875 5.34375 -0.410156 5.0625 -0.234375 C 4.5625 0.0664062 3.984375 0.21875 3.328125 0.21875 C 2.359375 0.21875 1.65625 -0.0390625 1.21875 -0.5625 C 0.78125 -1.082031 0.5625 -1.671875 0.5625 -2.328125 C 0.5625 -3.035156 0.773438 -3.625 1.203125 -4.09375 C 1.460938 -4.375 1.945312 -4.734375 2.65625 -5.171875 Z M 2.65625 -5.171875 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-0-36&quot;&gt;
&lt;path d=&quot;M 5 -9.546875 C 6.632812 -9.546875 7.847656 -9.019531 8.640625 -7.96875 C 9.253906 -7.144531 9.5625 -6.09375 9.5625 -4.8125 C 9.5625 -3.414062 9.207031 -2.257812 8.5 -1.34375 C 7.675781 -0.269531 6.5 0.265625 4.96875 0.265625 C 3.539062 0.265625 2.414062 -0.203125 1.59375 -1.140625 C 0.863281 -2.054688 0.5 -3.207031 0.5 -4.59375 C 0.5 -5.851562 0.8125 -6.929688 1.4375 -7.828125 C 2.238281 -8.972656 3.425781 -9.546875 5 -9.546875 Z M 5.125 -0.859375 C 6.226562 -0.859375 7.023438 -1.253906 7.515625 -2.046875 C 8.015625 -2.835938 8.265625 -3.75 8.265625 -4.78125 C 8.265625 -5.875 7.976562 -6.753906 7.40625 -7.421875 C 6.84375 -8.085938 6.066406 -8.421875 5.078125 -8.421875 C 4.109375 -8.421875 3.320312 -8.085938 2.71875 -7.421875 C 2.113281 -6.765625 1.8125 -5.796875 1.8125 -4.515625 C 1.8125 -3.484375 2.070312 -2.613281 2.59375 -1.90625 C 3.113281 -1.207031 3.957031 -0.859375 5.125 -0.859375 Z M 5.03125 -9.546875 Z M 5.03125 -9.546875 &quot;/&gt;
&lt;/g&gt;
&lt;/g&gt;
&lt;clipPath id=&quot;clip-0&quot;&gt;
&lt;path clip-rule=&quot;nonzero&quot; d=&quot;M 0 0 L 841.921875 0 L 841.921875 597 L 0 597 Z M 0 0 &quot;/&gt;
&lt;/clipPath&gt;
&lt;/defs&gt;
&lt;g clip-path=&quot;url(#clip-0)&quot;&gt;
&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;rgb(100%, 100%, 100%)&quot; fill-opacity=&quot;1&quot; d=&quot;M 0 0 L 842.25 0 L 842.25 596.054688 L 0 596.054688 Z M 0 0 &quot;/&gt;
&lt;/g&gt;
&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;rgb(100%, 100%, 100%)&quot; fill-opacity=&quot;1&quot; stroke-width=&quot;1&quot; stroke-linecap=&quot;butt&quot; stroke-linejoin=&quot;miter&quot; stroke=&quot;rgb(0%, 0%, 0%)&quot; stroke-opacity=&quot;1&quot; stroke-miterlimit=&quot;4&quot; d=&quot;M 79.999366 619.998992 L 1079.998471 619.998992 L 1079.998471 679.997744 L 79.999366 679.997744 Z M 79.999366 619.998992 &quot; transform=&quot;matrix(0.719872, 0, 0, 0.719872, 0.359936, 0.359936)&quot;/&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-0-0&quot; x=&quot;300.467718&quot; y=&quot;472.955732&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-1&quot; x=&quot;311.261576&quot; y=&quot;472.955732&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-2&quot; x=&quot;318.468027&quot; y=&quot;472.955732&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-3&quot; x=&quot;325.674477&quot; y=&quot;472.955732&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-4&quot; x=&quot;332.880927&quot; y=&quot;472.955732&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-1&quot; x=&quot;336.480989&quot; y=&quot;472.955732&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-5&quot; x=&quot;343.687439&quot; y=&quot;472.955732&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-6&quot; x=&quot;350.166285&quot; y=&quot;472.955732&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-3&quot; x=&quot;353.766347&quot; y=&quot;472.955732&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-7&quot; x=&quot;360.972797&quot; y=&quot;472.955732&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-8&quot; x=&quot;365.287809&quot; y=&quot;472.955732&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-2&quot; x=&quot;368.166593&quot; y=&quot;472.955732&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-9&quot; x=&quot;375.373044&quot; y=&quot;472.955732&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-10&quot; x=&quot;382.579494&quot; y=&quot;472.955732&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-11&quot; x=&quot;386.179556&quot; y=&quot;472.955732&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-7&quot; x=&quot;393.386006&quot; y=&quot;472.955732&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-12&quot; x=&quot;397.701018&quot; y=&quot;472.955732&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-5&quot; x=&quot;404.907469&quot; y=&quot;472.955732&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-13&quot; x=&quot;411.386314&quot; y=&quot;472.955732&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-14&quot; x=&quot;418.592765&quot; y=&quot;472.955732&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-14&quot; x=&quot;425.07161&quot; y=&quot;472.955732&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-13&quot; x=&quot;431.550456&quot; y=&quot;472.955732&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-14&quot; x=&quot;438.756906&quot; y=&quot;472.955732&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-10&quot; x=&quot;445.235752&quot; y=&quot;472.955732&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-1&quot; x=&quot;448.835814&quot; y=&quot;472.955732&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-2&quot; x=&quot;456.042264&quot; y=&quot;472.955732&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-15&quot; x=&quot;463.248714&quot; y=&quot;472.955732&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-10&quot; x=&quot;470.455165&quot; y=&quot;472.955732&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-13&quot; x=&quot;474.055226&quot; y=&quot;472.955732&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-16&quot; x=&quot;481.261677&quot; y=&quot;472.955732&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-3&quot; x=&quot;488.468127&quot; y=&quot;472.955732&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-8&quot; x=&quot;495.674577&quot; y=&quot;472.955732&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-11&quot; x=&quot;498.553361&quot; y=&quot;472.955732&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-17&quot; x=&quot;505.759812&quot; y=&quot;472.955732&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-13&quot; x=&quot;516.55367&quot; y=&quot;472.955732&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-2&quot; x=&quot;523.76012&quot; y=&quot;472.955732&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-6&quot; x=&quot;530.96657&quot; y=&quot;472.955732&quot;/&gt;
&lt;/g&gt;
&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;rgb(100%, 100%, 100%)&quot; fill-opacity=&quot;1&quot; stroke-width=&quot;1&quot; stroke-linecap=&quot;butt&quot; stroke-linejoin=&quot;miter&quot; stroke=&quot;rgb(0%, 0%, 0%)&quot; stroke-opacity=&quot;1&quot; stroke-miterlimit=&quot;4&quot; d=&quot;M 79.999366 500.001487 L 480.000094 500.001487 L 480.000094 560.000239 L 79.999366 560.000239 Z M 79.999366 500.001487 &quot; transform=&quot;matrix(0.719872, 0, 0, 0.719872, 0.359936, 0.359936)&quot;/&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-0-18&quot; x=&quot;177.785823&quot; y=&quot;386.571123&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-13&quot; x=&quot;186.428502&quot; y=&quot;386.571123&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-2&quot; x=&quot;193.634953&quot; y=&quot;386.571123&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-14&quot; x=&quot;200.841403&quot; y=&quot;386.571123&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-12&quot; x=&quot;207.320248&quot; y=&quot;386.571123&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-7&quot; x=&quot;214.526699&quot; y=&quot;386.571123&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-14&quot; x=&quot;218.841711&quot; y=&quot;386.571123&quot;/&gt;
&lt;/g&gt;
&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;rgb(100%, 100%, 100%)&quot; fill-opacity=&quot;1&quot; stroke-width=&quot;1&quot; stroke-linecap=&quot;butt&quot; stroke-linejoin=&quot;miter&quot; stroke=&quot;rgb(0%, 0%, 0%)&quot; stroke-opacity=&quot;1&quot; stroke-miterlimit=&quot;4&quot; d=&quot;M 480.000094 500.001487 L 880.000821 500.001487 L 880.000821 560.000239 L 480.000094 560.000239 Z M 480.000094 500.001487 &quot; transform=&quot;matrix(0.719872, 0, 0, 0.719872, 0.359936, 0.359936)&quot;/&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-0-19&quot; x=&quot;462.13516&quot; y=&quot;386.571123&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-5&quot; x=&quot;470.777839&quot; y=&quot;386.571123&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-6&quot; x=&quot;477.256684&quot; y=&quot;386.571123&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-3&quot; x=&quot;480.856746&quot; y=&quot;386.571123&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-1&quot; x=&quot;488.063196&quot; y=&quot;386.571123&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-6&quot; x=&quot;495.269647&quot; y=&quot;386.571123&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-12&quot; x=&quot;498.869708&quot; y=&quot;386.571123&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-7&quot; x=&quot;506.076159&quot; y=&quot;386.571123&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-14&quot; x=&quot;510.391171&quot; y=&quot;386.571123&quot;/&gt;
&lt;/g&gt;
&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;rgb(100%, 100%, 100%)&quot; fill-opacity=&quot;1&quot; stroke-width=&quot;1&quot; stroke-linecap=&quot;butt&quot; stroke-linejoin=&quot;miter&quot; stroke=&quot;rgb(0%, 0%, 0%)&quot; stroke-opacity=&quot;1&quot; stroke-miterlimit=&quot;4&quot; d=&quot;M 880.000821 500.001487 L 1079.998471 500.001487 L 1079.998471 560.000239 L 880.000821 560.000239 Z M 880.000821 500.001487 &quot; transform=&quot;matrix(0.719872, 0, 0, 0.719872, 0.359936, 0.359936)&quot;/&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-0-18&quot; x=&quot;695.024919&quot; y=&quot;386.571123&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-20&quot; x=&quot;703.667598&quot; y=&quot;386.571123&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-18&quot; x=&quot;707.267659&quot; y=&quot;386.571123&quot;/&gt;
&lt;/g&gt;
&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;rgb(100%, 100%, 100%)&quot; fill-opacity=&quot;1&quot; stroke-width=&quot;1&quot; stroke-linecap=&quot;butt&quot; stroke-linejoin=&quot;miter&quot; stroke=&quot;rgb(0%, 0%, 0%)&quot; stroke-opacity=&quot;1&quot; stroke-miterlimit=&quot;4&quot; d=&quot;M 880.000821 379.998555 L 1079.998471 379.998555 L 1079.998471 439.997308 L 880.000821 439.997308 Z M 880.000821 379.998555 &quot; transform=&quot;matrix(0.719872, 0, 0, 0.719872, 0.359936, 0.359936)&quot;/&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-0-18&quot; x=&quot;646.793512&quot; y=&quot;300.186515&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-21&quot; x=&quot;655.436191&quot; y=&quot;300.186515&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-19&quot; x=&quot;664.793821&quot; y=&quot;300.186515&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-22&quot; x=&quot;673.4365&quot; y=&quot;300.186515&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-19&quot; x=&quot;682.794129&quot; y=&quot;300.186515&quot;/&gt;
&lt;/g&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-0-10&quot; x=&quot;690.728184&quot; y=&quot;300.186515&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-23&quot; x=&quot;694.328246&quot; y=&quot;300.186515&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-10&quot; x=&quot;697.928308&quot; y=&quot;300.186515&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-0&quot; x=&quot;701.528369&quot; y=&quot;300.186515&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-24&quot; x=&quot;712.322227&quot; y=&quot;300.186515&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-25&quot; x=&quot;720.237301&quot; y=&quot;300.186515&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-10&quot; x=&quot;729.594931&quot; y=&quot;300.186515&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-23&quot; x=&quot;733.194993&quot; y=&quot;300.186515&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-10&quot; x=&quot;736.795054&quot; y=&quot;300.186515&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-26&quot; x=&quot;740.395116&quot; y=&quot;300.186515&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-0&quot; x=&quot;749.752746&quot; y=&quot;300.186515&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-20&quot; x=&quot;760.546604&quot; y=&quot;300.186515&quot;/&gt;
&lt;/g&gt;
&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;rgb(100%, 100%, 100%)&quot; fill-opacity=&quot;1&quot; stroke-width=&quot;1&quot; stroke-linecap=&quot;butt&quot; stroke-linejoin=&quot;miter&quot; stroke=&quot;rgb(0%, 0%, 0%)&quot; stroke-opacity=&quot;1&quot; stroke-miterlimit=&quot;4&quot; d=&quot;M 79.999366 379.998555 L 239.999657 379.998555 L 239.999657 439.997308 L 79.999366 439.997308 Z M 79.999366 379.998555 &quot; transform=&quot;matrix(0.719872, 0, 0, 0.719872, 0.359936, 0.359936)&quot;/&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-0-27&quot; x=&quot;102.570475&quot; y=&quot;300.186515&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-28&quot; x=&quot;111.213154&quot; y=&quot;300.186515&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-21&quot; x=&quot;118.419604&quot; y=&quot;300.186515&quot;/&gt;
&lt;/g&gt;
&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;rgb(100%, 100%, 100%)&quot; fill-opacity=&quot;1&quot; stroke-width=&quot;1&quot; stroke-linecap=&quot;butt&quot; stroke-linejoin=&quot;miter&quot; stroke=&quot;rgb(0%, 0%, 0%)&quot; stroke-opacity=&quot;1&quot; stroke-miterlimit=&quot;4&quot; d=&quot;M 399.999948 379.998555 L 560.000239 379.998555 L 560.000239 439.997308 L 399.999948 439.997308 Z M 399.999948 379.998555 &quot; transform=&quot;matrix(0.719872, 0, 0, 0.719872, 0.359936, 0.359936)&quot;/&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-0-29&quot; x=&quot;332.333287&quot; y=&quot;300.186515&quot;/&gt;
&lt;/g&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-0-24&quot; x=&quot;341.463145&quot; y=&quot;300.186515&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-25&quot; x=&quot;349.378219&quot; y=&quot;300.186515&quot;/&gt;
&lt;/g&gt;
&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;rgb(100%, 100%, 100%)&quot; fill-opacity=&quot;1&quot; stroke-width=&quot;1&quot; stroke-linecap=&quot;butt&quot; stroke-linejoin=&quot;miter&quot; stroke=&quot;rgb(0%, 0%, 0%)&quot; stroke-opacity=&quot;1&quot; stroke-miterlimit=&quot;4&quot; d=&quot;M 239.999657 379.998555 L 399.999948 379.998555 L 399.999948 439.997308 L 239.999657 439.997308 Z M 239.999657 379.998555 &quot; transform=&quot;matrix(0.719872, 0, 0, 0.719872, 0.359936, 0.359936)&quot;/&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-0-22&quot; x=&quot;216.670149&quot; y=&quot;300.186515&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-21&quot; x=&quot;226.027778&quot; y=&quot;300.186515&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-18&quot; x=&quot;235.385408&quot; y=&quot;300.186515&quot;/&gt;
&lt;/g&gt;
&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;rgb(100%, 100%, 100%)&quot; fill-opacity=&quot;1&quot; stroke-width=&quot;1&quot; stroke-linecap=&quot;butt&quot; stroke-linejoin=&quot;miter&quot; stroke=&quot;rgb(0%, 0%, 0%)&quot; stroke-opacity=&quot;1&quot; stroke-miterlimit=&quot;4&quot; d=&quot;M 280.002443 200.002298 L 480.000094 200.002298 L 480.000094 319.999803 L 280.002443 319.999803 Z M 280.002443 200.002298 &quot; transform=&quot;matrix(0.719872, 0, 0, 0.719872, 0.359936, 0.359936)&quot;/&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-0-20&quot; x=&quot;236.579101&quot; y=&quot;192.205754&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-20&quot; x=&quot;240.179163&quot; y=&quot;192.205754&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-12&quot; x=&quot;243.779225&quot; y=&quot;192.205754&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-24&quot; x=&quot;250.985675&quot; y=&quot;192.205754&quot;/&gt;
&lt;/g&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-0-10&quot; x=&quot;258.672977&quot; y=&quot;192.205754&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-27&quot; x=&quot;262.273039&quot; y=&quot;192.205754&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-30&quot; x=&quot;270.915718&quot; y=&quot;192.205754&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-1&quot; x=&quot;273.794502&quot; y=&quot;192.205754&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-6&quot; x=&quot;281.000952&quot; y=&quot;192.205754&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-4&quot; x=&quot;284.601014&quot; y=&quot;192.205754&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-12&quot; x=&quot;288.201075&quot; y=&quot;192.205754&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-7&quot; x=&quot;295.407526&quot; y=&quot;192.205754&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-17&quot; x=&quot;299.722538&quot; y=&quot;192.205754&quot;/&gt;
&lt;/g&gt;
&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;rgb(100%, 100%, 100%)&quot; fill-opacity=&quot;1&quot; stroke-width=&quot;1&quot; stroke-linecap=&quot;butt&quot; stroke-linejoin=&quot;miter&quot; stroke=&quot;rgb(0%, 0%, 0%)&quot; stroke-opacity=&quot;1&quot; stroke-miterlimit=&quot;4&quot; d=&quot;M 480.000094 200.002298 L 679.997744 200.002298 L 679.997744 319.999803 L 480.000094 319.999803 Z M 480.000094 200.002298 &quot; transform=&quot;matrix(0.719872, 0, 0, 0.719872, 0.359936, 0.359936)&quot;/&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-0-26&quot; x=&quot;391.958917&quot; y=&quot;192.205754&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-8&quot; x=&quot;401.316547&quot; y=&quot;192.205754&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-14&quot; x=&quot;404.195331&quot; y=&quot;192.205754&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-6&quot; x=&quot;410.674176&quot; y=&quot;192.205754&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-12&quot; x=&quot;414.274238&quot; y=&quot;192.205754&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-7&quot; x=&quot;421.480688&quot; y=&quot;192.205754&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-8&quot; x=&quot;425.795701&quot; y=&quot;192.205754&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-1&quot; x=&quot;428.674485&quot; y=&quot;192.205754&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-2&quot; x=&quot;435.880935&quot; y=&quot;192.205754&quot;/&gt;
&lt;/g&gt;
&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;rgb(100%, 100%, 100%)&quot; fill-opacity=&quot;1&quot; stroke-width=&quot;1&quot; stroke-linecap=&quot;butt&quot; stroke-linejoin=&quot;miter&quot; stroke=&quot;rgb(0%, 0%, 0%)&quot; stroke-opacity=&quot;1&quot; stroke-miterlimit=&quot;4&quot; d=&quot;M 679.997744 200.002298 L 880.000821 200.002298 L 880.000821 319.999803 L 679.997744 319.999803 Z M 679.997744 200.002298 &quot; transform=&quot;matrix(0.719872, 0, 0, 0.719872, 0.359936, 0.359936)&quot;/&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-0-0&quot; x=&quot;547.451212&quot; y=&quot;192.205754&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-31&quot; x=&quot;558.24507&quot; y=&quot;192.205754&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-18&quot; x=&quot;566.887749&quot; y=&quot;192.205754&quot;/&gt;
&lt;/g&gt;
&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;rgb(100%, 100%, 100%)&quot; fill-opacity=&quot;1&quot; stroke-width=&quot;1&quot; stroke-linecap=&quot;butt&quot; stroke-linejoin=&quot;miter&quot; stroke=&quot;rgb(0%, 0%, 0%)&quot; stroke-opacity=&quot;1&quot; stroke-miterlimit=&quot;4&quot; d=&quot;M 880.000821 200.002298 L 1079.998471 200.002298 L 1079.998471 319.999803 L 880.000821 319.999803 Z M 880.000821 200.002298 &quot; transform=&quot;matrix(0.719872, 0, 0, 0.719872, 0.359936, 0.359936)&quot;/&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-0-32&quot; x=&quot;689.637125&quot; y=&quot;192.205754&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-0&quot; x=&quot;701.867212&quot; y=&quot;192.205754&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-18&quot; x=&quot;712.66107&quot; y=&quot;192.205754&quot;/&gt;
&lt;/g&gt;
&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;rgb(100%, 100%, 100%)&quot; fill-opacity=&quot;1&quot; stroke-width=&quot;1&quot; stroke-linecap=&quot;butt&quot; stroke-linejoin=&quot;miter&quot; stroke=&quot;rgb(0%, 0%, 0%)&quot; stroke-opacity=&quot;1&quot; stroke-miterlimit=&quot;4&quot; d=&quot;M 79.999366 260.00105 L 280.002443 260.00105 L 280.002443 319.999803 L 79.999366 319.999803 Z M 79.999366 260.00105 &quot; transform=&quot;matrix(0.719872, 0, 0, 0.719872, 0.359936, 0.359936)&quot;/&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-0-20&quot; x=&quot;102.311771&quot; y=&quot;213.801906&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-20&quot; x=&quot;105.911832&quot; y=&quot;213.801906&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-12&quot; x=&quot;109.511894&quot; y=&quot;213.801906&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-24&quot; x=&quot;116.718344&quot; y=&quot;213.801906&quot;/&gt;
&lt;/g&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-0-10&quot; x=&quot;124.405647&quot; y=&quot;213.801906&quot;/&gt;
&lt;/g&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-0-19&quot; x=&quot;127.297085&quot; y=&quot;213.801906&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-11&quot; x=&quot;135.939763&quot; y=&quot;213.801906&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-11&quot; x=&quot;143.146214&quot; y=&quot;213.801906&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-14&quot; x=&quot;150.352664&quot; y=&quot;213.801906&quot;/&gt;
&lt;/g&gt;
&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;rgb(100%, 100%, 100%)&quot; fill-opacity=&quot;1&quot; stroke-width=&quot;1&quot; stroke-linecap=&quot;butt&quot; stroke-linejoin=&quot;miter&quot; stroke=&quot;rgb(0%, 0%, 0%)&quot; stroke-opacity=&quot;1&quot; stroke-miterlimit=&quot;4&quot; d=&quot;M 79.999366 200.002298 L 280.002443 200.002298 L 280.002443 260.00105 L 79.999366 260.00105 Z M 79.999366 200.002298 &quot; transform=&quot;matrix(0.719872, 0, 0, 0.719872, 0.359936, 0.359936)&quot;/&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-0-20&quot; x=&quot;85.394785&quot; y=&quot;170.609602&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-20&quot; x=&quot;88.994847&quot; y=&quot;170.609602&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-12&quot; x=&quot;92.594908&quot; y=&quot;170.609602&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-24&quot; x=&quot;99.801359&quot; y=&quot;170.609602&quot;/&gt;
&lt;/g&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-0-10&quot; x=&quot;107.488661&quot; y=&quot;170.609602&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-22&quot; x=&quot;111.088722&quot; y=&quot;170.609602&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-1&quot; x=&quot;120.446352&quot; y=&quot;170.609602&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-14&quot; x=&quot;127.652802&quot; y=&quot;170.609602&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-33&quot; x=&quot;134.131648&quot; y=&quot;170.609602&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-34&quot; x=&quot;141.338098&quot; y=&quot;170.609602&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-12&quot; x=&quot;148.544549&quot; y=&quot;170.609602&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-7&quot; x=&quot;155.750999&quot; y=&quot;170.609602&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-15&quot; x=&quot;160.066011&quot; y=&quot;170.609602&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-14&quot; x=&quot;167.272462&quot; y=&quot;170.609602&quot;/&gt;
&lt;/g&gt;
&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;rgb(100%, 100%, 100%)&quot; fill-opacity=&quot;1&quot; stroke-width=&quot;1&quot; stroke-linecap=&quot;butt&quot; stroke-linejoin=&quot;miter&quot; stroke=&quot;rgb(0%, 0%, 0%)&quot; stroke-opacity=&quot;1&quot; stroke-miterlimit=&quot;4&quot; d=&quot;M 79.999366 79.999366 L 239.999657 79.999366 L 239.999657 139.998119 L 79.999366 139.998119 Z M 79.999366 79.999366 &quot; transform=&quot;matrix(0.719872, 0, 0, 0.719872, 0.359936, 0.359936)&quot;/&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-0-18&quot; x=&quot;100.782043&quot; y=&quot;84.224993&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-29&quot; x=&quot;109.424722&quot; y=&quot;84.224993&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-0&quot; x=&quot;118.782352&quot; y=&quot;84.224993&quot;/&gt;
&lt;/g&gt;
&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;rgb(100%, 100%, 100%)&quot; fill-opacity=&quot;1&quot; stroke-width=&quot;1&quot; stroke-linecap=&quot;butt&quot; stroke-linejoin=&quot;miter&quot; stroke=&quot;rgb(0%, 0%, 0%)&quot; stroke-opacity=&quot;1&quot; stroke-miterlimit=&quot;4&quot; d=&quot;M 239.999657 79.999366 L 399.999948 79.999366 L 399.999948 139.998119 L 239.999657 139.998119 Z M 239.999657 79.999366 &quot; transform=&quot;matrix(0.719872, 0, 0, 0.719872, 0.359936, 0.359936)&quot;/&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-0-21&quot; x=&quot;215.601586&quot; y=&quot;84.224993&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-29&quot; x=&quot;224.959215&quot; y=&quot;84.224993&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-0&quot; x=&quot;234.316845&quot; y=&quot;84.224993&quot;/&gt;
&lt;/g&gt;
&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;rgb(100%, 100%, 100%)&quot; fill-opacity=&quot;1&quot; stroke-width=&quot;1&quot; stroke-linecap=&quot;butt&quot; stroke-linejoin=&quot;miter&quot; stroke=&quot;rgb(0%, 0%, 0%)&quot; stroke-opacity=&quot;1&quot; stroke-miterlimit=&quot;4&quot; d=&quot;M 399.999948 79.999366 L 560.000239 79.999366 L 560.000239 139.998119 L 399.999948 139.998119 Z M 399.999948 79.999366 &quot; transform=&quot;matrix(0.719872, 0, 0, 0.719872, 0.359936, 0.359936)&quot;/&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-0-0&quot; x=&quot;331.140999&quot; y=&quot;84.224993&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-29&quot; x=&quot;341.934858&quot; y=&quot;84.224993&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-27&quot; x=&quot;351.292487&quot; y=&quot;84.224993&quot;/&gt;
&lt;/g&gt;
&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;rgb(100%, 100%, 100%)&quot; fill-opacity=&quot;1&quot; stroke-width=&quot;1&quot; stroke-linecap=&quot;butt&quot; stroke-linejoin=&quot;miter&quot; stroke=&quot;rgb(0%, 0%, 0%)&quot; stroke-opacity=&quot;1&quot; stroke-miterlimit=&quot;4&quot; d=&quot;M 560.000239 79.999366 L 720.00053 79.999366 L 720.00053 139.998119 L 560.000239 139.998119 Z M 560.000239 79.999366 &quot; transform=&quot;matrix(0.719872, 0, 0, 0.719872, 0.359936, 0.359936)&quot;/&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-0-18&quot; x=&quot;442.709874&quot; y=&quot;84.224993&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-35&quot; x=&quot;451.352553&quot; y=&quot;84.224993&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-36&quot; x=&quot;459.995232&quot; y=&quot;84.224993&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-27&quot; x=&quot;470.07414&quot; y=&quot;84.224993&quot;/&gt;
&lt;/g&gt;
&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;rgb(100%, 100%, 100%)&quot; fill-opacity=&quot;1&quot; stroke-width=&quot;1&quot; stroke-linecap=&quot;butt&quot; stroke-linejoin=&quot;miter&quot; stroke=&quot;rgb(0%, 0%, 0%)&quot; stroke-opacity=&quot;1&quot; stroke-miterlimit=&quot;4&quot; d=&quot;M 720.00053 79.999366 L 880.000821 79.999366 L 880.000821 139.998119 L 720.00053 139.998119 Z M 720.00053 79.999366 &quot; transform=&quot;matrix(0.719872, 0, 0, 0.719872, 0.359936, 0.359936)&quot;/&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-0-24&quot; x=&quot;563.288391&quot; y=&quot;84.224993&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-27&quot; x=&quot;571.203465&quot; y=&quot;84.224993&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-18&quot; x=&quot;579.846144&quot; y=&quot;84.224993&quot;/&gt;
&lt;/g&gt;
&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;rgb(100%, 100%, 100%)&quot; fill-opacity=&quot;1&quot; stroke-width=&quot;1&quot; stroke-linecap=&quot;butt&quot; stroke-linejoin=&quot;miter&quot; stroke=&quot;rgb(0%, 0%, 0%)&quot; stroke-opacity=&quot;1&quot; stroke-miterlimit=&quot;4&quot; d=&quot;M 880.000821 79.999366 L 1079.998471 79.999366 L 1079.998471 139.998119 L 880.000821 139.998119 Z M 880.000821 79.999366 &quot; transform=&quot;matrix(0.719872, 0, 0, 0.719872, 0.359936, 0.359936)&quot;/&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-0-31&quot; x=&quot;692.145432&quot; y=&quot;84.224993&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-29&quot; x=&quot;700.788111&quot; y=&quot;84.224993&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-27&quot; x=&quot;710.14574&quot; y=&quot;84.224993&quot;/&gt;
&lt;/g&gt;
&lt;path fill=&quot;none&quot; stroke-width=&quot;1&quot; stroke-linecap=&quot;butt&quot; stroke-linejoin=&quot;miter&quot; stroke=&quot;rgb(0%, 0%, 0%)&quot; stroke-opacity=&quot;1&quot; stroke-miterlimit=&quot;10&quot; d=&quot;M 284.169852 609.499074 L 274.169156 609.499074 L 274.169156 589.497681 L 263.669238 589.497681 L 279.172217 570.500156 L 294.66977 589.497681 L 284.169852 589.497681 Z M 284.169852 609.499074 &quot; transform=&quot;matrix(0.719872, 0, 0, 0.719872, 0.359936, 0.359936)&quot;/&gt;
&lt;path fill=&quot;none&quot; stroke-width=&quot;1&quot; stroke-linecap=&quot;butt&quot; stroke-linejoin=&quot;miter&quot; stroke=&quot;rgb(0%, 0%, 0%)&quot; stroke-opacity=&quot;1&quot; stroke-miterlimit=&quot;10&quot; d=&quot;M 685.000805 590.501549 L 695.500723 590.501549 L 679.997744 609.499074 L 664.500192 590.501549 L 675.000109 590.501549 L 675.000109 570.500156 L 685.000805 570.500156 Z M 685.000805 590.501549 &quot; transform=&quot;matrix(0.719872, 0, 0, 0.719872, 0.359936, 0.359936)&quot;/&gt;
&lt;path fill=&quot;none&quot; stroke-width=&quot;1&quot; stroke-linecap=&quot;butt&quot; stroke-linejoin=&quot;miter&quot; stroke=&quot;rgb(0%, 0%, 0%)&quot; stroke-opacity=&quot;1&quot; stroke-miterlimit=&quot;10&quot; d=&quot;M 285.000078 489.501569 L 274.999382 489.501569 L 274.999382 469.500176 L 264.499464 469.500176 L 280.002443 450.502651 L 295.499996 469.500176 L 285.000078 469.500176 Z M 285.000078 489.501569 &quot; transform=&quot;matrix(0.719872, 0, 0, 0.719872, 0.359936, 0.359936)&quot;/&gt;
&lt;path fill=&quot;none&quot; stroke-width=&quot;1&quot; stroke-linecap=&quot;butt&quot; stroke-linejoin=&quot;miter&quot; stroke=&quot;rgb(0%, 0%, 0%)&quot; stroke-opacity=&quot;1&quot; stroke-miterlimit=&quot;10&quot; d=&quot;M 685.000805 470.498618 L 695.500723 470.498618 L 679.997744 489.501569 L 664.500192 470.498618 L 675.000109 470.498618 L 675.000109 450.502651 L 685.000805 450.502651 Z M 685.000805 470.498618 &quot; transform=&quot;matrix(0.719872, 0, 0, 0.719872, 0.359936, 0.359936)&quot;/&gt;
&lt;path fill=&quot;none&quot; stroke-width=&quot;1&quot; stroke-linecap=&quot;butt&quot; stroke-linejoin=&quot;miter&quot; stroke=&quot;rgb(0%, 0%, 0%)&quot; stroke-opacity=&quot;1&quot; stroke-miterlimit=&quot;10&quot; d=&quot;M 284.169852 369.498638 L 274.169156 369.498638 L 274.169156 349.502671 L 263.669238 349.502671 L 279.172217 330.49972 L 294.66977 349.502671 L 284.169852 349.502671 Z M 284.169852 369.498638 &quot; transform=&quot;matrix(0.719872, 0, 0, 0.719872, 0.359936, 0.359936)&quot;/&gt;
&lt;path fill=&quot;none&quot; stroke-width=&quot;1&quot; stroke-linecap=&quot;butt&quot; stroke-linejoin=&quot;miter&quot; stroke=&quot;rgb(0%, 0%, 0%)&quot; stroke-opacity=&quot;1&quot; stroke-miterlimit=&quot;10&quot; d=&quot;M 684.170579 350.501113 L 694.670497 350.501113 L 679.167518 369.498638 L 663.669966 350.501113 L 674.169883 350.501113 L 674.169883 330.49972 L 684.170579 330.49972 Z M 684.170579 350.501113 &quot; transform=&quot;matrix(0.719872, 0, 0, 0.719872, 0.359936, 0.359936)&quot;/&gt;
&lt;path fill=&quot;none&quot; stroke-width=&quot;1&quot; stroke-linecap=&quot;butt&quot; stroke-linejoin=&quot;miter&quot; stroke=&quot;rgb(0%, 0%, 0%)&quot; stroke-opacity=&quot;1&quot; stroke-miterlimit=&quot;10&quot; d=&quot;M 285.000078 189.50238 L 274.999382 189.50238 L 274.999382 169.500987 L 264.499464 169.500987 L 280.002443 150.498036 L 295.499996 169.500987 L 285.000078 169.500987 Z M 285.000078 189.50238 &quot; transform=&quot;matrix(0.719872, 0, 0, 0.719872, 0.359936, 0.359936)&quot;/&gt;
&lt;path fill=&quot;none&quot; stroke-width=&quot;1&quot; stroke-linecap=&quot;butt&quot; stroke-linejoin=&quot;miter&quot; stroke=&quot;rgb(0%, 0%, 0%)&quot; stroke-opacity=&quot;1&quot; stroke-miterlimit=&quot;10&quot; d=&quot;M 685.000805 170.499429 L 695.500723 170.499429 L 679.997744 189.50238 L 664.500192 170.499429 L 675.000109 170.499429 L 675.000109 150.498036 L 685.000805 150.498036 Z M 685.000805 170.499429 &quot; transform=&quot;matrix(0.719872, 0, 0, 0.719872, 0.359936, 0.359936)&quot;/&gt;
&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;rgb(100%, 100%, 100%)&quot; fill-opacity=&quot;1&quot; stroke-width=&quot;1&quot; stroke-linecap=&quot;butt&quot; stroke-linejoin=&quot;miter&quot; stroke=&quot;rgb(0%, 0%, 0%)&quot; stroke-opacity=&quot;1&quot; stroke-miterlimit=&quot;4&quot; d=&quot;M 560.000239 379.998555 L 720.00053 379.998555 L 720.00053 439.997308 L 560.000239 439.997308 Z M 560.000239 379.998555 &quot; transform=&quot;matrix(0.719872, 0, 0, 0.719872, 0.359936, 0.359936)&quot;/&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-0-27&quot; x=&quot;447.872701&quot; y=&quot;300.186515&quot;/&gt;
&lt;/g&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-0-19&quot; x=&quot;455.560003&quot; y=&quot;300.186515&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-21&quot; x=&quot;464.202682&quot; y=&quot;300.186515&quot;/&gt;
&lt;/g&gt;
&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;rgb(100%, 100%, 100%)&quot; fill-opacity=&quot;1&quot; stroke-width=&quot;1&quot; stroke-linecap=&quot;butt&quot; stroke-linejoin=&quot;miter&quot; stroke=&quot;rgb(0%, 0%, 0%)&quot; stroke-opacity=&quot;1&quot; stroke-miterlimit=&quot;4&quot; d=&quot;M 720.00053 379.998555 L 880.000821 379.998555 L 880.000821 439.997308 L 720.00053 439.997308 Z M 720.00053 379.998555 &quot; transform=&quot;matrix(0.719872, 0, 0, 0.719872, 0.359936, 0.359936)&quot;/&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-0-20&quot; x=&quot;565.08807&quot; y=&quot;300.186515&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-31&quot; x=&quot;568.688132&quot; y=&quot;300.186515&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-22&quot; x=&quot;577.33081&quot; y=&quot;300.186515&quot;/&gt;
&lt;/g&gt;
&lt;/svg&gt;
&lt;/div&gt;
&lt;/p&gt;
&lt;/div&gt;

&lt;p&gt;
普渡自动化金字塔层级架构在过去几十年，构成了工业企业信息化的参考模型。但是，随着流程工业对数据的获取、理解、分析、利用的要求越来越高。如果们把关注点放在工业现场层，可以发现，IT/OT 的融合、全面的数字化，还是路漫漫其修远兮：
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;数据分散在不同的设备和系统中，汇集这些数据需要很多软件、硬件、资金和工作量的投入。&lt;/li&gt;
&lt;li&gt;数据链路纷繁复杂，在现场设备和控制系统之间，看似简单的两个箭头，其实需要多种系统、多个协议、多个版本的工具、不同的工作人员互相交互才可以建立数据通路。这其中的连线和调试的复杂性可想而知。&lt;/li&gt;
&lt;li&gt;数据接口繁多，不同的工具、设备和协议有不同的访问方式，获取数据的接口各不相同，数据的格式也不统一，所以数据处理的过程、展示数据的过程也各不相同。&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
从普渡自动化金字塔层级结构中，我们可以看到，过程自动化现场有分析仪器、测量仪器、执行仪器等，他们传统的来说会连接到工业主机控制器，由工程配置软件通过主机控制器对这些仪器进行配置，HMI 软件又通过主机控制器获取实时测量数据、实时运行参数、设备状态数据，并根据情况调整工艺参数、修改输出数据。
&lt;/p&gt;

&lt;p&gt;
首选，是要明确，为了实现数据互联互通的愿景，需要获取哪些数据？比如：
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;设备能提供什么样的功能？&lt;/li&gt;
&lt;li&gt;应用程序可以调用设备的哪些服务？&lt;/li&gt;
&lt;li&gt;需要用什么样的协议传输数据？什么样的格式保存数据？&lt;/li&gt;
&lt;li&gt;设备和设备之间是什么关系？&lt;/li&gt;
&lt;li&gt;实现这些功能需要哪些信息安全保障机制？&lt;/li&gt;
&lt;/ul&gt;


&lt;div id=&quot;org3fc3453&quot; class=&quot;figure&quot;&gt;
&lt;p&gt;&lt;div align=&quot;center&quot;&gt;&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; xmlns:xlink=&quot;http://www.w3.org/1999/xlink&quot; width=&quot;595.91998&quot; height=&quot;421.91998&quot; viewBox=&quot;0 0 595.91998 421.91998&quot;&gt;
&lt;defs&gt;
&lt;clipPath id=&quot;clip-0&quot;&gt;
&lt;path clip-rule=&quot;nonzero&quot; d=&quot;M 0 0 L 595.921875 0 L 595.921875 421 L 0 421 Z M 0 0 &quot;/&gt;
&lt;/clipPath&gt;
&lt;image id=&quot;source-5&quot; x=&quot;0&quot; y=&quot;0&quot; width=&quot;686&quot; height=&quot;514&quot; xlink:href=&quot;data:image/png;base64,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&quot;/&gt;
&lt;image id=&quot;source-8&quot; x=&quot;0&quot; y=&quot;0&quot; width=&quot;752&quot; height=&quot;828&quot; xlink:href=&quot;data:image/png;base64,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v9VZuP3U78RprkEcmXeH2FcRd4SYhybiE+P9w2+/Zmy/vW/bkje+/9eoUrYPwtsXeLezII6ZiIiIdURCE/GJETXG74n3d3q8Zgq43ofm7Zxddh38gJeNiIj4yhEJTURERERERMTBI+ahiYiIiIiIiDh4REITERERERERcfCIhCYiIiIiIiLi4BEJTURERERERMTBIxKaiIiIiIiIiINHJDQRERERERERB49IaCIiIiIiIiIOHpHQRERERERERBw8IqGJiIiIiIiIOHhEQhMRERERERFx8IiEJiIiIiIiIuLgYT51BSIiIiIiDh7XbwuIGLcTjbhzxM0pIyIiIiLeC16OjKXJNoOJnCbirhEJTURERETEHWJDykRmE3FHiD40EREREREREQeP6EMTERER8fEwqCt2Kiqut9ocKBCjKSDiYyASmoiIiIjPBYcr+/dV29Oyw32uiANCHGQRERERHw+qeqPqxU/LB6ShUVUR8Z/H1R7YzKepVsRXhkhoIiIiIiLeC6q6z1gW2UzER0M0OUVEREREvBf2sZbIZiI+JqKGJiIiIiLiznG9N3RExPsjamgiIiIiPg2+ngQtceUc8REQCU1ERETEJ4D28F99HBAiHiitiZQl4pMjEpqI98X2NHbjxHZNgfeZy3dedvuCeO2vuufzzivcheS5fXvi29dBb7rFxqN9qIuPr3Z34nq77zYq8z5P927V2HlwqFv4UwAEVEUivHZ0XT90r60R7vp8Qz2vP772RKoiqrAKzhpHN23c7/qnOEg2F/F5IBKaiHfExgQ9lh+6q8y+czdwp4RmmF53yFddfZH+wL4LbkzTa1e45vb7yoxKboi66y+8XZMdpXHtFwWQXcJe18+g/t816bf/Af0vslVzGLXrcNmd+FBibNx32z2Io7/rng43D8Cte3l8342yw9e+oTAURlAE7JUzuN65GzUfPt9ATIZb+psoeNK0qgeuimxXcnvs6Z4CHk61dc5fdvwghEjrtGYfudn+NTKbiLdFJDQR74INuSsAddPOF8u6bduuA0Qg9Os1J4KIRCiiouL3sANC6PXqQ8oNRCREFT/D94p37TXz/ZSMRESISKIizg1TqwLCap4dRY36WZUoS5Iiy4o0ydPES1ZUQFXENeEhAAIoAK21ZxcXF5dXl/OrpmmtdXmeV1V57+T0eDY1hAaRht1D/HP11oPx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&quot;/&gt;
&lt;image id=&quot;source-11&quot; x=&quot;0&quot; y=&quot;0&quot; width=&quot;1304&quot; height=&quot;1244&quot; xlink:href=&quot;data:image/png;base64,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&quot;/&gt;
&lt;image id=&quot;source-14&quot; x=&quot;0&quot; y=&quot;0&quot; width=&quot;1650&quot; height=&quot;664&quot; xlink:href=&quot;data:image/png;base64,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&quot;/&gt;
&lt;image id=&quot;source-17&quot; x=&quot;0&quot; y=&quot;0&quot; width=&quot;384&quot; height=&quot;210&quot; xlink:href=&quot;data:image/png;base64,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&quot;/&gt;
&lt;image id=&quot;source-20&quot; x=&quot;0&quot; y=&quot;0&quot; width=&quot;684&quot; height=&quot;464&quot; xlink:href=&quot;data:image/png;base64,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&quot;/&gt;
&lt;image id=&quot;source-23&quot; x=&quot;0&quot; y=&quot;0&quot; width=&quot;1876&quot; height=&quot;1542&quot; xlink:href=&quot;data:image/png;base64,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JFvecMMNZ5111g9/+MNSqdTQIfbv3//Zz372/PPPf/rpp8fd2LKsr371qw3tH5PEMIx/+qd/mu4qcJxCobBp06b/+I//+Lu/+7sLL7xw0aJFX/ziF3fs2JHw4fxJrFetVn/961+PscGUzXyILFy48G1ve9vY29x5551TUwyAScU7ZyTBOzEAOB2M34sHnDre/va333DDDX/913+dZOMtW7asW7fune9855//+Z9fddVVuVxu7O3DMHzyySdvu+22u+66q1AoJCxp8eLFd955p6ZpCbc/bf3rv/7rL3/5y76+vnG33LFjx5e+9KVvfetbn/vc577whS+M3bSyY8eORx555OGHH77vvvuq1WrCYq699lqmkZ46rrrqqksuueTZZ5+d7kLSZtxZ2zEpZblcLpVKpVKpUCj09vZO+KCO49x0000s4BN79NFHi8XiGBtMcfgrhPjQhz409u12xx13fOUrX5myegBMHt45IwneiQFA6ilhGE53DaeKSqWSyWRG++3SpUv5IuQp4qMf/WijQwmz2eyHP/zhyy+/fMmSJUuWLFm8eLFt20EQHDp0aN++ffv27duyZcvtt9/e6EtsWdaGDRsuvvjihh512rrxxhu/+MUvNvqobDa7fMjixYullD09Pd3d3T09Pdu2bdu1a1ejO8R/jSMAACAASURBVFy0aNFrr72WzWYbfeDpwLIs13VH/NVf/MVfJFm/ZWI2bNhw2WWXJd9+9+7dSb7Kmnpz587t6uqa7iqOURTlZz/72cc+9rHpLuQUcs011/z4xz8e7bfz588/ePDgFGflr7/++urVq8feZteuXcuXL5+SctLgk5/85G233Tbab++///73ve99U1lP+syePbunp2fEXymKcjLTok4TvHOeQXgnBgCYDHT+Yua55ZZbDh06tGHDhuQPKZVKP/nJT37yk5/EP2ltbS0Wi0EQTLgMVVVvvfVW3r8m9/nPf/6WW255/vnnG3pUqVTaunXr1q1bm1KDoij/9m//RvJ7qvmDP/iDD37wg2OPRsWp73vf+x7Jb70gCH7xi1+MscEVV1wx9V3SZ5111rnnnrtt27Yxtrnjjjuuu+66KSsJwKTinTPGxTsxAEg3Zv5i5slkMvfdd99b3/rWk9lJf3//yb9/JeZoiKqqN954o6pO55+db3/723/6p386jQVgNP/8z/+cZFVAnLKuvfbaL3/5y9NdxanlmWeeGbs1e+pnPkQ+9KEPjb1Bo02CAE5lvHNGErwTA4AUI/zFjJTP5x944IF169ZNy9FVVb355ps/8YlPTMvRZ7T169f/6Ec/mq55oFdfffU3vvGNaTk0xnX22Wdfc801010FJuirX/3qDTfcMN1VnHLuvvvuMX5rWdbll18+ZcXU++AHPzj2Bps2bdq5c+fUFANgCvDOGePinRgApBjhL2aq9vb2p556auq7OFtaWu65555PfvKTU3zc1PjCF77w05/+dOo7C6644oqbb755ig+KhnzrW98ad3kZnGry+fxdd911/fXXs8jbicb+/uw73/nO6brg169fv2TJkrG3ufPOO6emGABTg3fOGBfvxAAgrQh/MYPlcrm7777761//+pQd8eyzz964ceOf/MmfTNkRU+njH//43Xffbdv2lB3xS1/60r333juVR8QEzJ8//ytf+cp0V4EGrF279vnnn//IRz4y3YWcirZs2TL2ipTTNfNBCKEoyrgBEJMfgPThnTPGxjsxAEgrwl/MbIqi/MM//MN999032QvOKoryuc99buPGjeMuko4kPvCBDzz44IMdHR2TfSDDMH74wx/+4Ac/0DRtso+Fk3fttdfOnz9/uqvA+M4666yf/exnmzdv5k/iaMae+SCmNfwVCcb+bt68eceOHVNTDIApwztnjI13YgCQSoS/SIP3v//9W7du/Zu/+ZtJCvjWrl37zDPP/Pu//3s+n5+M/Z+eLrvssh07dlx33XWT15B7+eWXb9my5S//8i8naf9oulwu9/d///fTXQVGpSjKW9/61ptvvnnbtm1XX3319K7feIobe+bDeeedt3z58qmqZQSXXXbZuB+/0fwLpBXvnDEa3okBQCrxP9uQEtls9nvf+94rr7zy2c9+1jTNZu127dq1t91226ZNmy655JJm7ROxtra2f/mXf3n99dc/9alPNTdFWrFixc9//vOHH374nHPOaeJuMQU+85nP8KqdanRdf8c73vGDH/xgz549zz333Kc//Wla6ce2c+fOLVu2jLHB9Lb9CiF0XR+3BsJfIMV454zR8E4MANKH8Dep888/f7pLwPjOPvvsm266affu3V//+tfPOuusCe8nl8t95CMfeeSRR1566aVPfOITxByTasmSJbfccstLL7107bXXrlmz5mR25TjOn/3Znz300ENvvvnmhz/84WZVCDGFfwN1Xf/ud787xgZLlixpb2+fmmJOK4ZhdHR0LFu2bM2aNZdeeumVV175ta997fbbb9+yZUuxWHziiSe+9KUvjbtKGCKPPfbY2BtMe/grEkx+6O3tdV13aopJq1wut3LlyumuIs14f36SeOc8g/BODAAwYUoYhtNdAzBZtm/ffu+9927YsOHll1/et2/f2Bvncrnzzjtv/fr1H/jAB971rndZljU1RWKYgwcPPvTQQw8++ODjjz9+5MiRcbfP5XLr1q276KKLLr744iuuuKKlpWUKigQAAEgZ3jkDAJBKhL84XfT19W3btq27u3tgYGBgYKBYLFqW1TJk1apVy5cvVxRlusvEcTzP6+7u7u7u7urqiv5ZKpVyuVxra2tbW1tbW9ucOXNWrVrF4FEAAIAm4p0zAACpQfgLAAAAAAAAAClEuxwAAAAAAAAApBDhLwAAAAAAAACkEOEvAAAAAAAAAKQQ4S8AAAAAAAAApBDhLwAAAAAAAACkEOEvAAAAAAAAAKQQ4S8AAAAAAAAApBDhLwAAAAAAAACkEOEvAAAAAAAAAKQQ4S8AAAAAAAAApBDhLwAAAAAAAACkEOEvAAAAAAAAAKQQ4S8AAAAAAAAApBDhLwAAAAAAAACkEOEvAAAAAAAAAKQQ4S8AAAAAAAAApBDhLwAAAAAAAACkEOEvAAAAAAAAAKQQ4S8AAAAAAAAApBDhLwAAAAAAAACkEOEvAAAAAAAAAKQQ4S8AAAAAAAAApBDhLwAAAAAAAACkEOEvAAAAAAAAAKQQ4S8AAAAAAAAApBDhLwAAAAAAAACkEOEvAAAAAAAAAKQQ4S8AAAAAAAAApBDhLwAAAAAAAACkEOEvAAAAAAAAAKQQ4S8AAAAAAAAApBDhLwAAAAAAAACkEOEvAAAAAAAAAKQQ4S8AAAAAAAAApBDhLwAAAAAAAACkEOEvAAAAAAAAAKQQ4S8AAAAAAAAApBDhLwAAAAAAAACkEOEvAAAAAAAAAKQQ4S8AAAAAAAAApBDhLwAAAAAAAACkEOEvAAAAAAAAAKQQ4S8AAAAAAAAApBDhLwAAAAAAAACkEOEvAAAAAAAAAKQQ4S8AAAAAAAAApBDhLwAAAAAAAACkEOEvAAAAAAAAAKQQ4S8AAAAAAAAApBDhLwAAAAAAAACkEOEvAAAAAAAAAKQQ4S8AAAAAAAAApBDhLwAAAAAAAACkEOEvAAAAAAAAAKQQ4S8AAAAAAAAApBDhLwAAAAAAAACkEOEvAAAAAAAAAKQQ4S8AAAAAAAAApBDhLwAAAAAAAACkEOEvAAAAAAAAAKQQ4S8AAAAAAAAApBDhLwAAAAAAAACkEOEvAAAAAAAAAKQQ4S8AAAAAAAAApBDhLwAAAAAAAACkEOEvAAAAAAAAAKQQ4S8AAAAAAAAApBDhLwAAAAAAAACkEOEvAAAAAAAAAKQQ4S8AAAAAAAAApBDhLwAAAAAAAACkEOEvAAAAAAAAAKQQ4S8AAAAAAAAApBDhLwAAAAAAAACkEOEvAAAAAAAAAKQQ4S8AAAAAAAAApBDhLwAAAAAAAACkEOEvAAAAAAAAAKQQ4S8AAAAAAAAApBDhLwAAAAAAAACkEOEvAAAAAAAAAKQQ4S8AAAAAAAAApBDhLwAAAAAAAACkEOEvAAAAAAAAAKQQ4S8AAAAAAAAApBDhLwAAAAAAAACkEOEvAAAAAAAAAKQQ4S8AAAAAAAAApBDhLwAAAAAAAACkEOEvAAAAAAAAAKQQ4S8AAAAAAAAApBDhLwAAAAAAAACkEOEvAAAAAAAAAKQQ4S8AAAAAAAAApBDhLwAAAAAAAACkEOEvAAAAAAAAAKQQ4S8AAAAAAAAApBDhLwAAAAAAAACkEOEvAAAAAAAAAKQQ4S8AAAAAAAAApBDhLwAAAAAAAACkEOEvAAAAAAAAAKQQ4S8AAAAAAAAApBDhLwAAAAAAAACkEOEvAAAAAAAAAKQQ4S8AAAAAAAAApBDhLwAAAAAAAACkEOEvAAAAAAAAAKQQ4S8AAAAAAAAApBDhLwAAAAAAAACkEOEvAAAAAAAAAKQQ4S8AAAAAAAAApBDhLwAAAAAAAACkEOEvAAAAAAAAAKQQ4S8AAAAAAAAApBDhLwAAAAAAAACkEOEvAAAAAAAAAKQQ4S8AAAAAAAAApBDhLwAAAAAAAACkEOEvAAAAAAAAAKQQ4S8AAAAAAAAApBDhLwAAAAAAAACkEOEvAAAAAAAAAKQQ4S8AAAAAAAAApBDhLwAAAAAAAACkEOEvAAAAAAAAAKQQ4S8AAAAAAAAApBDhLwAAAAAAAACkEOEvAAAAAAAAAKQQ4S8AAAAAAAAApBDhLwAAAAAAAACkEOEvAAAAAAAAAKQQ4S8AAAAAAAAApBDh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AAAAARJ/AQAAAAACJP4CAAAAAARI/AUAAAAACJD4CwAAAAAQIPEXAAAAACBA4i8AAAAAQIDEXwAAAACAAIm/AAAAAAABEn8BAAAAAAIk/gIAAAAABEj8BQAAAAAIkPgLAAAAABAg8RcAAAAAIEDiLwAAAABAgMRfAAAAAIAAib8AAAAAAAESfwEAAAAAAiT+AgAAAAAESPwFAAAAAAiQ+AsAAAAAECDxFwAAAAAgQOIvAAAAAECAxF8AAAAAgACJvwAAAAAAARJ/AQAAAAACJP4CAAAAAARI/AUAAAAACJD4CwAAAAAQIPEXAAAAACBA4i8AAAAAQIDEXwAAAACAAIm/AAAAAAABEn8BAAAAAAIk/gIAAAAABEj8BQAAAAAIkPgLAAAAABAg8RcAAAAAIEDiLwAAAABAgMRfAAAAAIAAib8AAAAAAAESfwEAAAAAAiT+AgAAAAAESPwFAAAAAAiQ+AsAAAAAECDxFwAAAAAgQOIvAAAAAECAxF8AAAAAgACJvwAAAAAAARJ/AQAAAAACJP4CAAAAAARI/AUAAAAACJD4CwAAAAAQIPEXAAAAACBA4i8AAAAAQIDEXwAAAACAAIm/AAAAAAABEn8BAAAAAAIk/gIAAAAABEj8BQAAAAAIkPgLAAAAABAg8RcAAAAAIEDiLwAAAABAgMRfAAAAAIAAib8AAAAAAAESfwEAAAAAAiT+AgAAAAAESPwFAAAAAAiQ+AsAAAAAECDxFwAAAAAgQOIvAAAAAECAxF8AAAAAgACJvwAAAAAAARJ/AQAAAAACJP4CAAAAAARI/AUAAAAACJD4CwAAAAAQIPEXAAAAACBA4i8AAAAAQIDEXwAAAACAAIm/AAAAAAABEn8BAAAAAAIk/gIAAAAABEj8BQAAAAAIkPgLAAAAABAg8RcAAAAAIEDiLwAAAABAgMRfAAAAAIAAib8AAAAAAAESfwEAAAAAAiT+AgAAAAAESPwFAAAAAAiQ+AsAAAAAECDxFwAAAAAgQOIvAAAAAECAxF8AAAAAgACJvwAAAAAAARJ/AQAAAAACJP4CAAAAAARI/AUAAAAACJD4CwAAAAAQIPEXAAAAACBA4i8AAAAAQIDEXwAAAACAAIm/AAAAAAABEn8BAAAAAAIk/gIAAAAABEj8BQAAAAAIkPgLAAAAABAg8RcAAAAAIEDiLwAAAABAgMRfAAAAAIAAib8AAAAAAAESfwEAAAAAAiT+AgAAAAAESPwFAAAAAAiQ+AsAAAAAECDxFwAAAAAgQOIvAAAAAECAxF8AAAAAgACJvwAAAAAAARJ/AQAAAAACJP4CAAAAAARI/AUAAAAACJD4CwAAAAAQIPEXAAAAACBA4i8AAAAAQIDEXwAAAACAAIm/AAAAAAABEn8BAAAAAAIk/gIAAAAABEj8BQAAAAAIkPgLAAAAABAg8RcAAAAAIEDiLwAAAABAgMRfAAAAAIAAib8AAAAAAAESfwEAAAAAAiT+AgAAAAAESPwFAAAAAAiQ+AsAAAAAECDxFwAAAAAgQOIvAAAAAECAxF8AAAAAgACJvwAAAAAAARJ/AQAAAAACJP4CAAAAAARI/AUAAAAACJD4CwAAAAAQIPEXAAAAACBA4i8AAAAAQIDEXwAAAACAAIm/AAAAAAABEn8BAAAAAAIk/gIAAAAABEj8BQAAAAAIkPgLAAAAABAg8RcAAAAAIEDiLwAAAABAgMRfAAAAAIAAib8AAAAAAAESfwEAAAAAAiT+AgAAAAAESPwFAAAAAAiQ+AsAAAAAECDxFwAAAAAgQOIvAAAAAECAxF8AAAAAgACJvwAAAAAAARJ/AQAAAAACJP4CAAAAAARI/AUAAAAACJD4CwAAAAAQIPEXAAAAACBA4i8AAAAAQIDEXwAAAACAAIm/AAAAAAABEn8BAAAAAAIk/gIAAAAABEj8BQAAAAAIkPgLAAAAABAg8RcAAAAAIEDiLwAAAABAgMRfAAAAAIAAib8AAAAAAAESfwEAAAAAAiT+AgAAAAAESPwFAAAAAAiQ+AsAAAAAECDxFwAAAAAgQOIvAAAAAECAxF8AAAAAgACJvwAAAAAAARJ/AQAAAAACJP4CAAAAAARI/AUAAAAACJD4CwAAAAAQIPEXAAAAACBA4i8AAAAAQIDEXwAAAACAAIm/AAAAAAABEn8BAAAAAAIk/gIAAAAABEj8BQAAAAAIkPgLAAAAABAg8RcAAAAAIEDiLwAAAABAgMRfAAAAAIAAib8AAAAAAAESfwEAAAAAAiT+AgAAAAAESPwFAAAAAAiQ+AsAAAAAECDxFwAAAAAgQOIvAAAAAECAxF8AAAAAgACJvwAAAAAAARJ/AQAAAAACJP4CAAAAAARI/AUAAAAACJD4CwAAAAAQIPEXAAAAACBA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745Q2aZNm65du15yySUPP/xw586da2G2+NqyZctzzz23YcOGw4cPV/fZ1NTUjP8vJyen019q2rRpIgY+zbp161588cVVq1Zt27atqKjo1D9mycnJ7du379Gjx+jRo+++++6UlOpdqH/77bdff/31DRs2HDp06Ew1jRo1atKkSfv27bt37z5w4MArrrii5r+TGikqKpoxY8af/vSn7du3//nPfz569OiZKps0aXLBBRf06dNn4sSJkf9VFBQU3HXXXUVFRbEMlpOTM3369GbNmp38ZOPGja+88soHH3xQuTg7O/viiy++//77zz///CDNd+7c+eyzz65du3bv3r2nfdWsWbOxY8eOGzeudv5DAQAAAFADyRU3TBu0b7/99vrrr//jH/8Y37ZdunTp16/fwIEDb7755latWsW3+Un33HPPSy+9VK1HmjZtumnTpo4dOyZopERYvnz54MGDjx07lojmPXr06Nu3b9++fW+88cY2bdok4oiioqL27dsHiSn/6Z/+6bHHHgvYtry8/M4775w6dWp157nuuut+8pOfjBo1qroP1sCxY8f+/d///cknn9y1a1e1HuzTp8+CBQtyc3PPVPDQQw/94he/iHnApP/6r//64Q9/WPHPpaWlubm5Bw8ejFCfkZGRn58/duzYyG0//vjjQYMGFRYWRqi58847f/Ob31R3YAAAAIDaEYadv3/3d38X9+Q3KSmpoKBg8uTJeXl57dq1mzRp0qeffhr3I7Zv316D5Ojw4cO/+tWv4j5MQt17770JSn6TkpLWr1//wgsvjB07Njc39+KLL/63f/u3CFdoa2bLli0BL6h+8sknwdu+9NJLNUh+k5KSPvjgg9GjRz/11FM1eLa6fvrTn/74xz+ubvKblJS0atWqBx98MELB559/HsNc/2fdunUn/3np0qWRk9+kpKTS0tK77rrryy+/jFBTXFx8++23R05+k5KSXnvttcT9wQYAAACIUYMPf0+cODFv3ryEHnHs2LHf/va3vXr16t+//8aNG+PYedq0aWVlZTV4MD8/vwFFTvv3709EOl+l9evX//SnP+3YsePf//3ff/XVV7VzaI09+eSTsTz+0EMPzZw5M17DVGn27NnPPfdcjR+fMmXKnj17zvTtgQMHatz5VKemvRs2bAjyyKFDh1544YUIBdOmTdu8eXPUPvv27fvmm2+CnAgA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&quot;/&gt;
&lt;/defs&gt;
&lt;g clip-path=&quot;url(#clip-0)&quot;&gt;
&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;rgb(100%, 100%, 100%)&quot; fill-opacity=&quot;1&quot; d=&quot;M 0 0 L 596.25 0 L 596.25 420.542969 L 0 420.542969 Z M 0 0 &quot;/&gt;
&lt;/g&gt;
&lt;use xlink:href=&quot;#source-5&quot; transform=&quot;matrix(0.19614, 0, 0, 0.196139, 50.407608, 28.804348)&quot;/&gt;
&lt;use xlink:href=&quot;#source-8&quot; transform=&quot;matrix(0.130462, 0, 0, 0.130454, 237.635865, 28.804343)&quot;/&gt;
&lt;use xlink:href=&quot;#source-11&quot; transform=&quot;matrix(0.0810398, 0, 0, 0.0810412, 432.065238, 32.40489)&quot;/&gt;
&lt;use xlink:href=&quot;#source-14&quot; transform=&quot;matrix(0.130139, 0, 0, 0.13014, 184.959923, 180.027172)&quot;/&gt;
&lt;use xlink:href=&quot;#source-17&quot; transform=&quot;matrix(0.411493, 0, 0, 0.411491, 43.206521, 295.244534)&quot;/&gt;
&lt;use xlink:href=&quot;#source-20&quot; transform=&quot;matrix(0.186239, 0, 0, 0.186235, 244.836947, 302.445655)&quot;/&gt;
&lt;use xlink:href=&quot;#source-23&quot; transform=&quot;matrix(0.0653779, 0, 0, 0.0653795, 432.065238, 302.445671)&quot;/&gt;
&lt;/svg&gt;
&lt;/div&gt;
&lt;/p&gt;
&lt;/div&gt;

&lt;p&gt;
于是，针对这些个问题，各种现场总线的协会和标准组织也提出了很多解决方案：
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;工业4.0组织提出了资产管理壳（Asset Administration Shell，简称 AAS）&lt;/li&gt;
&lt;li&gt;W3C WoT 提出了Thing Description方案&lt;/li&gt;
&lt;li&gt;NAMUR 提出Module Type Package方案，简称 MTP&lt;/li&gt;
&lt;li&gt;Automation Markup Language，简称 AutomationML&lt;/li&gt;
&lt;li&gt;FDT Group 提出 Field Device Tool，简称 FDT&lt;/li&gt;
&lt;li&gt;FieldComm Group 提出了Field Device Integration方案，简称 FDI&lt;/li&gt;
&lt;li&gt;以及OPC UA的 PA-DIM 过程自动化信息模型方案&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
以 FDT 和 FDI 为例，我们看看他们是怎么进行集成的。
&lt;/p&gt;


&lt;div id=&quot;org49c253e&quot; class=&quot;figure&quot;&gt;
&lt;p&gt;&lt;div align=&quot;center&quot;&gt;&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; xmlns:xlink=&quot;http://www.w3.org/1999/xlink&quot; width=&quot;432.95999&quot; height=&quot;289.91998&quot; viewBox=&quot;0 0 432.95999 289.91998&quot;&gt;
&lt;defs&gt;
&lt;g&gt;
&lt;g id=&quot;glyph-0-0&quot;&gt;
&lt;path d=&quot;M 0.734375 -6.203125 L 5.046875 -6.203125 L 5.046875 -5.453125 L 1.578125 -5.453125 L 1.578125 -3.5625 L 4.625 -3.5625 L 4.625 -2.828125 L 1.578125 -2.828125 L 1.578125 0 L 0.734375 0 Z M 0.734375 -6.203125 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-0-1&quot;&gt;
&lt;path d=&quot;M 3.046875 -0.71875 C 3.328125 -0.71875 3.5625 -0.75 3.75 -0.8125 C 4.070312 -0.914062 4.335938 -1.125 4.546875 -1.4375 C 4.710938 -1.6875 4.832031 -2.007812 4.90625 -2.40625 C 4.945312 -2.632812 4.96875 -2.851562 4.96875 -3.0625 C 4.96875 -3.820312 4.8125 -4.414062 4.5 -4.84375 C 4.195312 -5.269531 3.707031 -5.484375 3.03125 -5.484375 L 1.546875 -5.484375 L 1.546875 -0.71875 Z M 0.703125 -6.203125 L 3.21875 -6.203125 C 4.070312 -6.203125 4.734375 -5.898438 5.203125 -5.296875 C 5.617188 -4.753906 5.828125 -4.054688 5.828125 -3.203125 C 5.828125 -2.535156 5.703125 -1.9375 5.453125 -1.40625 C 5.015625 -0.46875 4.265625 0 3.203125 0 L 0.703125 0 Z M 0.703125 -6.203125 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-0-2&quot;&gt;
&lt;path d=&quot;M 5.171875 -6.203125 L 5.171875 -5.46875 L 3.078125 -5.46875 L 3.078125 0 L 2.234375 0 L 2.234375 -5.46875 L 0.140625 -5.46875 L 0.140625 -6.203125 Z M 5.171875 -6.203125 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-0-3&quot;&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-0-4&quot;&gt;
&lt;path d=&quot;M 0.6875 -6.203125 L 1.53125 -6.203125 L 1.53125 -3.640625 L 4.765625 -3.640625 L 4.765625 -6.203125 L 5.609375 -6.203125 L 5.609375 0 L 4.765625 0 L 4.765625 -2.90625 L 1.53125 -2.90625 L 1.53125 0 L 0.6875 0 Z M 0.6875 -6.203125 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-0-5&quot;&gt;
&lt;path d=&quot;M 2.359375 -0.484375 C 2.859375 -0.484375 3.203125 -0.675781 3.390625 -1.0625 C 3.578125 -1.445312 3.671875 -1.875 3.671875 -2.34375 C 3.671875 -2.757812 3.601562 -3.101562 3.46875 -3.375 C 3.257812 -3.789062 2.890625 -4 2.359375 -4 C 1.898438 -4 1.5625 -3.816406 1.34375 -3.453125 C 1.132812 -3.097656 1.03125 -2.671875 1.03125 -2.171875 C 1.03125 -1.691406 1.132812 -1.289062 1.34375 -0.96875 C 1.5625 -0.644531 1.898438 -0.484375 2.359375 -0.484375 Z M 2.390625 -4.65625 C 2.972656 -4.65625 3.460938 -4.457031 3.859375 -4.0625 C 4.265625 -3.675781 4.46875 -3.109375 4.46875 -2.359375 C 4.46875 -1.628906 4.289062 -1.023438 3.9375 -0.546875 C 3.582031 -0.0664062 3.03125 0.171875 2.28125 0.171875 C 1.65625 0.171875 1.160156 -0.0351562 0.796875 -0.453125 C 0.429688 -0.878906 0.25 -1.453125 0.25 -2.171875 C 0.25 -2.929688 0.441406 -3.535156 0.828125 -3.984375 C 1.210938 -4.429688 1.734375 -4.65625 2.390625 -4.65625 Z M 2.359375 -4.640625 Z M 2.359375 -4.640625 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-0-6&quot;&gt;
&lt;path d=&quot;M 1.015625 -1.421875 C 1.035156 -1.171875 1.097656 -0.976562 1.203125 -0.84375 C 1.390625 -0.59375 1.722656 -0.46875 2.203125 -0.46875 C 2.484375 -0.46875 2.726562 -0.53125 2.9375 -0.65625 C 3.15625 -0.78125 3.265625 -0.96875 3.265625 -1.21875 C 3.265625 -1.414062 3.175781 -1.566406 3 -1.671875 C 2.894531 -1.734375 2.679688 -1.800781 2.359375 -1.875 L 1.75 -2.03125 C 1.363281 -2.125 1.078125 -2.234375 0.890625 -2.359375 C 0.566406 -2.554688 0.40625 -2.835938 0.40625 -3.203125 C 0.40625 -3.628906 0.554688 -3.972656 0.859375 -4.234375 C 1.171875 -4.503906 1.585938 -4.640625 2.109375 -4.640625 C 2.796875 -4.640625 3.289062 -4.441406 3.59375 -4.046875 C 3.78125 -3.796875 3.867188 -3.519531 3.859375 -3.21875 L 3.140625 -3.21875 C 3.128906 -3.394531 3.070312 -3.550781 2.96875 -3.6875 C 2.789062 -3.894531 2.484375 -4 2.046875 -4 C 1.765625 -4 1.546875 -3.941406 1.390625 -3.828125 C 1.242188 -3.722656 1.171875 -3.578125 1.171875 -3.390625 C 1.171875 -3.191406 1.269531 -3.035156 1.46875 -2.921875 C 1.582031 -2.847656 1.75 -2.785156 1.96875 -2.734375 L 2.46875 -2.609375 C 3.019531 -2.472656 3.390625 -2.347656 3.578125 -2.234375 C 3.867188 -2.035156 4.015625 -1.726562 4.015625 -1.3125 C 4.015625 -0.90625 3.859375 -0.554688 3.546875 -0.265625 C 3.242188 0.0234375 2.78125 0.171875 2.15625 0.171875 C 1.488281 0.171875 1.015625 0.0195312 0.734375 -0.28125 C 0.453125 -0.59375 0.300781 -0.972656 0.28125 -1.421875 Z M 2.140625 -4.640625 Z M 2.140625 -4.640625 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-0-7&quot;&gt;
&lt;path d=&quot;M 0.703125 -5.796875 L 1.484375 -5.796875 L 1.484375 -4.53125 L 2.203125 -4.53125 L 2.203125 -3.90625 L 1.484375 -3.90625 L 1.484375 -0.953125 C 1.484375 -0.796875 1.535156 -0.691406 1.640625 -0.640625 C 1.703125 -0.609375 1.800781 -0.59375 1.9375 -0.59375 C 1.96875 -0.59375 2.003906 -0.59375 2.046875 -0.59375 C 2.097656 -0.59375 2.148438 -0.59375 2.203125 -0.59375 L 2.203125 0 C 2.117188 0.0195312 2.023438 0.0351562 1.921875 0.046875 C 1.828125 0.0664062 1.726562 0.078125 1.625 0.078125 C 1.269531 0.078125 1.023438 -0.0078125 0.890625 -0.1875 C 0.765625 -0.375 0.703125 -0.613281 0.703125 -0.90625 L 0.703125 -3.90625 L 0.09375 -3.90625 L 0.09375 -4.53125 L 0.703125 -4.53125 Z M 0.703125 -5.796875 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-0-8&quot;&gt;
&lt;path d=&quot;M 1.96875 -6.203125 L 2.609375 -6.203125 L 0.640625 0 L 0 0 Z M 1.96875 -6.203125 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-0-9&quot;&gt;
&lt;path d=&quot;M 0.578125 -4.53125 L 1.296875 -4.53125 L 1.296875 -3.75 C 1.359375 -3.894531 1.503906 -4.078125 1.734375 -4.296875 C 1.960938 -4.515625 2.226562 -4.625 2.53125 -4.625 C 2.550781 -4.625 2.578125 -4.625 2.609375 -4.625 C 2.640625 -4.625 2.695312 -4.617188 2.78125 -4.609375 L 2.78125 -3.796875 C 2.738281 -3.804688 2.695312 -3.8125 2.65625 -3.8125 C 2.613281 -3.820312 2.570312 -3.828125 2.53125 -3.828125 C 2.144531 -3.828125 1.847656 -3.703125 1.640625 -3.453125 C 1.441406 -3.203125 1.34375 -2.921875 1.34375 -2.609375 L 1.34375 0 L 0.578125 0 Z M 0.578125 -4.53125 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-0-10&quot;&gt;
&lt;path d=&quot;M 1.140625 -1.203125 C 1.140625 -0.984375 1.21875 -0.8125 1.375 -0.6875 C 1.539062 -0.5625 1.734375 -0.5 1.953125 -0.5 C 2.222656 -0.5 2.484375 -0.5625 2.734375 -0.6875 C 3.148438 -0.882812 3.359375 -1.21875 3.359375 -1.6875 L 3.359375 -2.296875 C 3.265625 -2.242188 3.144531 -2.195312 3 -2.15625 C 2.851562 -2.113281 2.710938 -2.085938 2.578125 -2.078125 L 2.109375 -2.015625 C 1.835938 -1.972656 1.628906 -1.914062 1.484375 -1.84375 C 1.253906 -1.707031 1.140625 -1.492188 1.140625 -1.203125 Z M 2.984375 -2.75 C 3.160156 -2.769531 3.273438 -2.84375 3.328125 -2.96875 C 3.367188 -3.03125 3.390625 -3.125 3.390625 -3.25 C 3.390625 -3.507812 3.296875 -3.695312 3.109375 -3.8125 C 2.921875 -3.9375 2.65625 -4 2.3125 -4 C 1.914062 -4 1.632812 -3.890625 1.46875 -3.671875 C 1.375 -3.554688 1.316406 -3.378906 1.296875 -3.140625 L 0.578125 -3.140625 C 0.585938 -3.703125 0.765625 -4.09375 1.109375 -4.3125 C 1.460938 -4.53125 1.867188 -4.640625 2.328125 -4.640625 C 2.859375 -4.640625 3.289062 -4.535156 3.625 -4.328125 C 3.957031 -4.128906 4.125 -3.816406 4.125 -3.390625 L 4.125 -0.78125 C 4.125 -0.695312 4.140625 -0.628906 4.171875 -0.578125 C 4.203125 -0.535156 4.269531 -0.515625 4.375 -0.515625 C 4.40625 -0.515625 4.441406 -0.515625 4.484375 -0.515625 C 4.535156 -0.523438 4.582031 -0.535156 4.625 -0.546875 L 4.625 0.015625 C 4.507812 0.0546875 4.421875 0.078125 4.359375 0.078125 C 4.296875 0.0859375 4.210938 0.09375 4.109375 0.09375 C 3.847656 0.09375 3.65625 0 3.53125 -0.1875 C 3.46875 -0.28125 3.425781 -0.414062 3.40625 -0.59375 C 3.25 -0.394531 3.023438 -0.21875 2.734375 -0.0625 C 2.441406 0.0820312 2.125 0.15625 1.78125 0.15625 C 1.351562 0.15625 1.003906 0.0273438 0.734375 -0.21875 C 0.472656 -0.476562 0.34375 -0.800781 0.34375 -1.1875 C 0.34375 -1.601562 0.472656 -1.925781 0.734375 -2.15625 C 0.992188 -2.394531 1.335938 -2.539062 1.765625 -2.59375 Z M 2.359375 -4.640625 Z M 2.359375 -4.640625 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-0-11&quot;&gt;
&lt;path d=&quot;M 0.5625 -4.53125 L 1.3125 -4.53125 L 1.3125 -3.890625 C 1.488281 -4.109375 1.648438 -4.269531 1.796875 -4.375 C 2.046875 -4.539062 2.332031 -4.625 2.65625 -4.625 C 3.019531 -4.625 3.3125 -4.535156 3.53125 -4.359375 C 3.65625 -4.253906 3.765625 -4.101562 3.859375 -3.90625 C 4.023438 -4.15625 4.222656 -4.335938 4.453125 -4.453125 C 4.679688 -4.566406 4.941406 -4.625 5.234375 -4.625 C 5.835938 -4.625 6.25 -4.40625 6.46875 -3.96875 C 6.59375 -3.726562 6.65625 -3.410156 6.65625 -3.015625 L 6.65625 0 L 5.859375 0 L 5.859375 -3.140625 C 5.859375 -3.441406 5.78125 -3.648438 5.625 -3.765625 C 5.476562 -3.878906 5.296875 -3.9375 5.078125 -3.9375 C 4.773438 -3.9375 4.515625 -3.832031 4.296875 -3.625 C 4.085938 -3.425781 3.984375 -3.097656 3.984375 -2.640625 L 3.984375 0 L 3.21875 0 L 3.21875 -2.953125 C 3.21875 -3.265625 3.179688 -3.488281 3.109375 -3.625 C 2.984375 -3.832031 2.765625 -3.9375 2.453125 -3.9375 C 2.171875 -3.9375 1.910156 -3.828125 1.671875 -3.609375 C 1.429688 -3.390625 1.3125 -2.988281 1.3125 -2.40625 L 1.3125 0 L 0.5625 0 Z M 0.5625 -4.53125 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-0-12&quot;&gt;
&lt;path d=&quot;M 2.4375 -4.625 C 2.757812 -4.625 3.070312 -4.546875 3.375 -4.390625 C 3.675781 -4.242188 3.90625 -4.050781 4.0625 -3.8125 C 4.21875 -3.582031 4.320312 -3.316406 4.375 -3.015625 C 4.414062 -2.804688 4.4375 -2.472656 4.4375 -2.015625 L 1.125 -2.015625 C 1.132812 -1.554688 1.238281 -1.1875 1.4375 -0.90625 C 1.644531 -0.632812 1.960938 -0.5 2.390625 -0.5 C 2.785156 -0.5 3.101562 -0.628906 3.34375 -0.890625 C 3.476562 -1.046875 3.570312 -1.222656 3.625 -1.421875 L 4.375 -1.421875 C 4.351562 -1.253906 4.285156 -1.066406 4.171875 -0.859375 C 4.066406 -0.660156 3.941406 -0.492188 3.796875 -0.359375 C 3.566406 -0.140625 3.285156 0.0078125 2.953125 0.09375 C 2.765625 0.132812 2.554688 0.15625 2.328125 0.15625 C 1.765625 0.15625 1.285156 -0.046875 0.890625 -0.453125 C 0.492188 -0.859375 0.296875 -1.429688 0.296875 -2.171875 C 0.296875 -2.898438 0.492188 -3.488281 0.890625 -3.9375 C 1.285156 -4.394531 1.800781 -4.625 2.4375 -4.625 Z M 3.65625 -2.625 C 3.625 -2.957031 3.550781 -3.222656 3.4375 -3.421875 C 3.226562 -3.785156 2.878906 -3.96875 2.390625 -3.96875 C 2.046875 -3.96875 1.753906 -3.835938 1.515625 -3.578125 C 1.273438 -3.328125 1.148438 -3.007812 1.140625 -2.625 Z M 2.375 -4.640625 Z M 2.375 -4.640625 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-0-13&quot;&gt;
&lt;path d=&quot;M 3.34375 -6.375 C 4.4375 -6.375 5.25 -6.023438 5.78125 -5.328125 C 6.1875 -4.773438 6.390625 -4.070312 6.390625 -3.21875 C 6.390625 -2.289062 6.15625 -1.519531 5.6875 -0.90625 C 5.132812 -0.175781 4.347656 0.1875 3.328125 0.1875 C 2.367188 0.1875 1.613281 -0.128906 1.0625 -0.765625 C 0.582031 -1.367188 0.34375 -2.140625 0.34375 -3.078125 C 0.34375 -3.910156 0.550781 -4.628906 0.96875 -5.234375 C 1.5 -5.992188 2.289062 -6.375 3.34375 -6.375 Z M 3.421875 -0.578125 C 4.160156 -0.578125 4.695312 -0.84375 5.03125 -1.375 C 5.363281 -1.90625 5.53125 -2.515625 5.53125 -3.203125 C 5.53125 -3.929688 5.335938 -4.515625 4.953125 -4.953125 C 4.578125 -5.398438 4.054688 -5.625 3.390625 -5.625 C 2.742188 -5.625 2.21875 -5.40625 1.8125 -4.96875 C 1.40625 -4.53125 1.203125 -3.878906 1.203125 -3.015625 C 1.203125 -2.328125 1.375 -1.75 1.71875 -1.28125 C 2.070312 -0.8125 2.640625 -0.578125 3.421875 -0.578125 Z M 3.359375 -6.375 Z M 3.359375 -6.375 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-0-14&quot;&gt;
&lt;path d=&quot;M 0.734375 -6.203125 L 3.53125 -6.203125 C 4.082031 -6.203125 4.523438 -6.046875 4.859375 -5.734375 C 5.203125 -5.429688 5.375 -4.992188 5.375 -4.421875 C 5.375 -3.941406 5.222656 -3.519531 4.921875 -3.15625 C 4.617188 -2.800781 4.15625 -2.625 3.53125 -2.625 L 1.578125 -2.625 L 1.578125 0 L 0.734375 0 Z M 4.53125 -4.421875 C 4.53125 -4.878906 4.359375 -5.191406 4.015625 -5.359375 C 3.828125 -5.441406 3.570312 -5.484375 3.25 -5.484375 L 1.578125 -5.484375 L 1.578125 -3.328125 L 3.25 -3.328125 C 3.632812 -3.328125 3.941406 -3.40625 4.171875 -3.5625 C 4.410156 -3.726562 4.53125 -4.015625 4.53125 -4.421875 Z M 4.53125 -4.421875 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-0-15&quot;&gt;
&lt;path d=&quot;M 3.28125 -6.375 C 4.0625 -6.375 4.664062 -6.164062 5.09375 -5.75 C 5.53125 -5.34375 5.773438 -4.875 5.828125 -4.34375 L 5.015625 -4.34375 C 4.921875 -4.738281 4.734375 -5.050781 4.453125 -5.28125 C 4.171875 -5.519531 3.78125 -5.640625 3.28125 -5.640625 C 2.664062 -5.640625 2.171875 -5.425781 1.796875 -5 C 1.421875 -4.570312 1.234375 -3.914062 1.234375 -3.03125 C 1.234375 -2.300781 1.398438 -1.707031 1.734375 -1.25 C 2.078125 -0.800781 2.585938 -0.578125 3.265625 -0.578125 C 3.890625 -0.578125 4.363281 -0.816406 4.6875 -1.296875 C 4.851562 -1.546875 4.976562 -1.875 5.0625 -2.28125 L 5.890625 -2.28125 C 5.816406 -1.625 5.570312 -1.078125 5.15625 -0.640625 C 4.664062 -0.109375 4.003906 0.15625 3.171875 0.15625 C 2.441406 0.15625 1.832031 -0.0625 1.34375 -0.5 C 0.695312 -1.070312 0.375 -1.960938 0.375 -3.171875 C 0.375 -4.085938 0.617188 -4.835938 1.109375 -5.421875 C 1.628906 -6.054688 2.351562 -6.375 3.28125 -6.375 Z M 3.109375 -6.375 Z M 3.109375 -6.375 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-0-16&quot;&gt;
&lt;path d=&quot;M 1.578125 -6.203125 L 1.578125 -2.375 C 1.578125 -1.914062 1.660156 -1.539062 1.828125 -1.25 C 2.078125 -0.800781 2.5 -0.578125 3.09375 -0.578125 C 3.800781 -0.578125 4.285156 -0.816406 4.546875 -1.296875 C 4.679688 -1.566406 4.75 -1.925781 4.75 -2.375 L 4.75 -6.203125 L 5.609375 -6.203125 L 5.609375 -2.71875 C 5.609375 -1.957031 5.503906 -1.367188 5.296875 -0.953125 C 4.921875 -0.203125 4.207031 0.171875 3.15625 0.171875 C 2.113281 0.171875 1.40625 -0.203125 1.03125 -0.953125 C 0.820312 -1.367188 0.71875 -1.957031 0.71875 -2.71875 L 0.71875 -6.203125 Z M 3.171875 -6.203125 Z M 3.171875 -6.203125 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-0-17&quot;&gt;
&lt;path d=&quot;M 3.84375 -2.546875 L 2.90625 -5.28125 L 1.90625 -2.546875 Z M 2.46875 -6.203125 L 3.421875 -6.203125 L 5.671875 0 L 4.75 0 L 4.109375 -1.859375 L 1.65625 -1.859375 L 0.984375 0 L 0.125 0 Z M 2.46875 -6.203125 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-0-18&quot;&gt;
&lt;path d=&quot;M 3.546875 -3.359375 C 3.941406 -3.359375 4.253906 -3.4375 4.484375 -3.59375 C 4.710938 -3.757812 4.828125 -4.046875 4.828125 -4.453125 C 4.828125 -4.898438 4.664062 -5.203125 4.34375 -5.359375 C 4.175781 -5.441406 3.945312 -5.484375 3.65625 -5.484375 L 1.609375 -5.484375 L 1.609375 -3.359375 Z M 0.765625 -6.203125 L 3.640625 -6.203125 C 4.109375 -6.203125 4.5 -6.132812 4.8125 -6 C 5.394531 -5.738281 5.6875 -5.25 5.6875 -4.53125 C 5.6875 -4.164062 5.609375 -3.863281 5.453125 -3.625 C 5.296875 -3.382812 5.082031 -3.191406 4.8125 -3.046875 C 5.050781 -2.953125 5.226562 -2.820312 5.34375 -2.65625 C 5.46875 -2.5 5.539062 -2.238281 5.5625 -1.875 L 5.59375 -1.046875 C 5.59375 -0.804688 5.609375 -0.628906 5.640625 -0.515625 C 5.691406 -0.316406 5.785156 -0.191406 5.921875 -0.140625 L 5.921875 0 L 4.890625 0 C 4.859375 -0.0507812 4.832031 -0.117188 4.8125 -0.203125 C 4.800781 -0.285156 4.789062 -0.453125 4.78125 -0.703125 L 4.71875 -1.734375 C 4.707031 -2.140625 4.554688 -2.410156 4.265625 -2.546875 C 4.109375 -2.617188 3.859375 -2.65625 3.515625 -2.65625 L 1.609375 -2.65625 L 1.609375 0 L 0.765625 0 Z M 0.765625 -6.203125 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-0-19&quot;&gt;
&lt;path d=&quot;M 0.84375 -6.203125 L 1.703125 -6.203125 L 1.703125 0 L 0.84375 0 Z M 0.84375 -6.203125 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-0-20&quot;&gt;
&lt;path d=&quot;M 3 -3.578125 C 3.351562 -3.578125 3.628906 -3.628906 3.828125 -3.734375 C 4.128906 -3.890625 4.28125 -4.164062 4.28125 -4.5625 C 4.28125 -4.96875 4.117188 -5.242188 3.796875 -5.390625 C 3.609375 -5.460938 3.332031 -5.5 2.96875 -5.5 L 1.46875 -5.5 L 1.46875 -3.578125 Z M 3.28125 -0.71875 C 3.789062 -0.71875 4.15625 -0.867188 4.375 -1.171875 C 4.519531 -1.359375 4.59375 -1.582031 4.59375 -1.84375 C 4.59375 -2.300781 4.390625 -2.609375 3.984375 -2.765625 C 3.765625 -2.859375 3.476562 -2.90625 3.125 -2.90625 L 1.46875 -2.90625 L 1.46875 -0.71875 Z M 0.640625 -6.203125 L 3.3125 -6.203125 C 4.03125 -6.203125 4.546875 -5.988281 4.859375 -5.5625 C 5.035156 -5.300781 5.125 -5.003906 5.125 -4.671875 C 5.125 -4.273438 5.015625 -3.953125 4.796875 -3.703125 C 4.679688 -3.578125 4.515625 -3.457031 4.296875 -3.34375 C 4.609375 -3.21875 4.847656 -3.082031 5.015625 -2.9375 C 5.285156 -2.664062 5.421875 -2.289062 5.421875 -1.8125 C 5.421875 -1.414062 5.296875 -1.054688 5.046875 -0.734375 C 4.671875 -0.242188 4.078125 0 3.265625 0 L 0.640625 0 Z M 0.640625 -6.203125 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-0-21&quot;&gt;
&lt;path d=&quot;M 1.203125 -2 C 1.222656 -1.644531 1.304688 -1.359375 1.453125 -1.140625 C 1.734375 -0.734375 2.226562 -0.53125 2.9375 -0.53125 C 3.25 -0.53125 3.535156 -0.570312 3.796875 -0.65625 C 4.296875 -0.832031 4.546875 -1.148438 4.546875 -1.609375 C 4.546875 -1.941406 4.441406 -2.179688 4.234375 -2.328125 C 4.015625 -2.460938 3.675781 -2.582031 3.21875 -2.6875 L 2.390625 -2.875 C 1.835938 -3 1.445312 -3.140625 1.21875 -3.296875 C 0.820312 -3.554688 0.625 -3.941406 0.625 -4.453125 C 0.625 -5.015625 0.816406 -5.472656 1.203125 -5.828125 C 1.585938 -6.179688 2.132812 -6.359375 2.84375 -6.359375 C 3.5 -6.359375 4.050781 -6.203125 4.5 -5.890625 C 4.957031 -5.578125 5.1875 -5.078125 5.1875 -4.390625 L 4.390625 -4.390625 C 4.347656 -4.722656 4.257812 -4.976562 4.125 -5.15625 C 3.863281 -5.476562 3.425781 -5.640625 2.8125 -5.640625 C 2.320312 -5.640625 1.96875 -5.535156 1.75 -5.328125 C 1.53125 -5.117188 1.421875 -4.875 1.421875 -4.59375 C 1.421875 -4.289062 1.550781 -4.070312 1.8125 -3.9375 C 1.96875 -3.84375 2.34375 -3.726562 2.9375 -3.59375 L 3.796875 -3.390625 C 4.222656 -3.296875 4.550781 -3.164062 4.78125 -3 C 5.175781 -2.707031 5.375 -2.285156 5.375 -1.734375 C 5.375 -1.046875 5.125 -0.550781 4.625 -0.25 C 4.125 0.0390625 3.539062 0.1875 2.875 0.1875 C 2.101562 0.1875 1.5 -0.0078125 1.0625 -0.40625 C 0.625 -0.800781 0.410156 -1.332031 0.421875 -2 Z M 2.90625 -6.375 Z M 2.90625 -6.375 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-0-22&quot;&gt;
&lt;path d=&quot;M 0.9375 -4.53125 L 2.140625 -0.84375 L 3.40625 -4.53125 L 4.234375 -4.53125 L 2.53125 0 L 1.71875 0 L 0.046875 -4.53125 Z M 0.9375 -4.53125 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-0-23&quot;&gt;
&lt;path d=&quot;M 0.5625 -4.5 L 1.328125 -4.5 L 1.328125 0 L 0.5625 0 Z M 0.5625 -6.203125 L 1.328125 -6.203125 L 1.328125 -5.34375 L 0.5625 -5.34375 Z M 0.5625 -6.203125 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-0-24&quot;&gt;
&lt;path d=&quot;M 2.296875 -4.65625 C 2.804688 -4.65625 3.222656 -4.53125 3.546875 -4.28125 C 3.867188 -4.03125 4.0625 -3.601562 4.125 -3 L 3.390625 -3 C 3.335938 -3.28125 3.234375 -3.515625 3.078125 -3.703125 C 2.921875 -3.890625 2.660156 -3.984375 2.296875 -3.984375 C 1.816406 -3.984375 1.472656 -3.742188 1.265625 -3.265625 C 1.128906 -2.960938 1.0625 -2.582031 1.0625 -2.125 C 1.0625 -1.675781 1.15625 -1.296875 1.34375 -0.984375 C 1.539062 -0.671875 1.84375 -0.515625 2.25 -0.515625 C 2.5625 -0.515625 2.8125 -0.609375 3 -0.796875 C 3.1875 -0.992188 3.316406 -1.265625 3.390625 -1.609375 L 4.125 -1.609375 C 4.039062 -1.003906 3.828125 -0.5625 3.484375 -0.28125 C 3.148438 -0.0078125 2.71875 0.125 2.1875 0.125 C 1.601562 0.125 1.132812 -0.0859375 0.78125 -0.515625 C 0.425781 -0.953125 0.25 -1.492188 0.25 -2.140625 C 0.25 -2.929688 0.441406 -3.546875 0.828125 -3.984375 C 1.210938 -4.429688 1.703125 -4.65625 2.296875 -4.65625 Z M 2.1875 -4.640625 Z M 2.1875 -4.640625 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-0-25&quot;&gt;
&lt;path d=&quot;M 0.90625 -4.53125 L 1.78125 -0.953125 L 2.65625 -4.53125 L 3.515625 -4.53125 L 4.40625 -0.984375 L 5.328125 -4.53125 L 6.09375 -4.53125 L 4.78125 0 L 3.984375 0 L 3.0625 -3.5 L 2.171875 0 L 1.375 0 L 0.078125 -4.53125 Z M 0.90625 -4.53125 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-0-26&quot;&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-0-27&quot;&gt;
&lt;path d=&quot;M 0.578125 -6.203125 L 1.34375 -6.203125 L 1.34375 0 L 0.578125 0 Z M 0.578125 -6.203125 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-0-28&quot;&gt;
&lt;path d=&quot;M 0.5625 -4.53125 L 1.28125 -4.53125 L 1.28125 -3.890625 C 1.5 -4.148438 1.726562 -4.335938 1.96875 -4.453125 C 2.207031 -4.566406 2.472656 -4.625 2.765625 -4.625 C 3.398438 -4.625 3.832031 -4.398438 4.0625 -3.953125 C 4.1875 -3.710938 4.25 -3.363281 4.25 -2.90625 L 4.25 0 L 3.46875 0 L 3.46875 -2.859375 C 3.46875 -3.128906 3.429688 -3.347656 3.359375 -3.515625 C 3.222656 -3.796875 2.972656 -3.9375 2.609375 -3.9375 C 2.429688 -3.9375 2.285156 -3.921875 2.171875 -3.890625 C 1.960938 -3.828125 1.78125 -3.703125 1.625 -3.515625 C 1.5 -3.367188 1.414062 -3.210938 1.375 -3.046875 C 1.332031 -2.890625 1.3125 -2.664062 1.3125 -2.375 L 1.3125 0 L 0.5625 0 Z M 2.34375 -4.640625 Z M 2.34375 -4.640625 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-0-29&quot;&gt;
&lt;path d=&quot;M 0.640625 -6.203125 L 1.84375 -6.203125 L 3.625 -0.953125 L 5.390625 -6.203125 L 6.59375 -6.203125 L 6.59375 0 L 5.796875 0 L 5.796875 -3.671875 C 5.796875 -3.796875 5.796875 -4.003906 5.796875 -4.296875 C 5.804688 -4.585938 5.8125 -4.898438 5.8125 -5.234375 L 4.03125 0 L 3.203125 0 L 1.421875 -5.234375 L 1.421875 -5.046875 C 1.421875 -4.890625 1.421875 -4.65625 1.421875 -4.34375 C 1.429688 -4.039062 1.4375 -3.816406 1.4375 -3.671875 L 1.4375 0 L 0.640625 0 Z M 0.640625 -6.203125 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-0-30&quot;&gt;
&lt;path d=&quot;M 3.390625 -4.53125 L 4.234375 -4.53125 C 4.117188 -4.238281 3.878906 -3.578125 3.515625 -2.546875 C 3.234375 -1.765625 3 -1.128906 2.8125 -0.640625 C 2.375 0.511719 2.066406 1.21875 1.890625 1.46875 C 1.710938 1.726562 1.398438 1.859375 0.953125 1.859375 C 0.847656 1.859375 0.765625 1.851562 0.703125 1.84375 C 0.648438 1.832031 0.582031 1.816406 0.5 1.796875 L 0.5 1.109375 C 0.632812 1.140625 0.726562 1.160156 0.78125 1.171875 C 0.84375 1.179688 0.894531 1.1875 0.9375 1.1875 C 1.082031 1.1875 1.1875 1.160156 1.25 1.109375 C 1.320312 1.066406 1.378906 1.007812 1.421875 0.9375 C 1.429688 0.914062 1.476562 0.800781 1.5625 0.59375 C 1.65625 0.382812 1.722656 0.226562 1.765625 0.125 L 0.09375 -4.53125 L 0.953125 -4.53125 L 2.171875 -0.84375 Z M 2.15625 -4.640625 Z M 2.15625 -4.640625 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-0-31&quot;&gt;
&lt;path d=&quot;M 0.734375 -6.203125 L 5.265625 -6.203125 L 5.265625 -5.453125 L 1.5625 -5.453125 L 1.5625 -3.5625 L 4.984375 -3.5625 L 4.984375 -2.84375 L 1.5625 -2.84375 L 1.5625 -0.734375 L 5.328125 -0.734375 L 5.328125 0 L 0.734375 0 Z M 3.03125 -6.203125 Z M 3.03125 -6.203125 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-0-32&quot;&gt;
&lt;path d=&quot;M 0.5625 -6.234375 L 1.3125 -6.234375 L 1.3125 -3.90625 C 1.5 -4.132812 1.664062 -4.296875 1.8125 -4.390625 C 2.050781 -4.554688 2.351562 -4.640625 2.71875 -4.640625 C 3.375 -4.640625 3.820312 -4.410156 4.0625 -3.953125 C 4.1875 -3.703125 4.25 -3.351562 4.25 -2.90625 L 4.25 0 L 3.46875 0 L 3.46875 -2.859375 C 3.46875 -3.191406 3.425781 -3.429688 3.34375 -3.578125 C 3.195312 -3.828125 2.9375 -3.953125 2.5625 -3.953125 C 2.25 -3.953125 1.960938 -3.84375 1.703125 -3.625 C 1.441406 -3.414062 1.3125 -3.007812 1.3125 -2.40625 L 1.3125 0 L 0.5625 0 Z M 0.5625 -6.234375 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-1-0&quot;&gt;
&lt;path d=&quot;M 0.515625 -4.125 L 1.21875 -4.125 L 1.21875 0 L 0.515625 0 Z M 0.515625 -5.6875 L 1.21875 -5.6875 L 1.21875 -4.90625 L 0.515625 -4.90625 Z M 0.515625 -5.6875 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-1-1&quot;&gt;
&lt;path d=&quot;M 0.515625 -4.15625 L 1.203125 -4.15625 L 1.203125 -3.5625 C 1.367188 -3.769531 1.519531 -3.914062 1.65625 -4 C 1.882812 -4.164062 2.144531 -4.25 2.4375 -4.25 C 2.769531 -4.25 3.035156 -4.164062 3.234375 -4 C 3.347656 -3.90625 3.453125 -3.769531 3.546875 -3.59375 C 3.703125 -3.8125 3.882812 -3.972656 4.09375 -4.078125 C 4.300781 -4.191406 4.535156 -4.25 4.796875 -4.25 C 5.347656 -4.25 5.726562 -4.046875 5.9375 -3.640625 C 6.039062 -3.421875 6.09375 -3.128906 6.09375 -2.765625 L 6.09375 0 L 5.375 0 L 5.375 -2.890625 C 5.375 -3.160156 5.300781 -3.347656 5.15625 -3.453125 C 5.019531 -3.554688 4.851562 -3.609375 4.65625 -3.609375 C 4.382812 -3.609375 4.148438 -3.515625 3.953125 -3.328125 C 3.753906 -3.148438 3.65625 -2.847656 3.65625 -2.421875 L 3.65625 0 L 2.953125 0 L 2.953125 -2.703125 C 2.953125 -2.984375 2.914062 -3.191406 2.84375 -3.328125 C 2.738281 -3.515625 2.539062 -3.609375 2.25 -3.609375 C 1.988281 -3.609375 1.75 -3.503906 1.53125 -3.296875 C 1.3125 -3.097656 1.203125 -2.734375 1.203125 -2.203125 L 1.203125 0 L 0.515625 0 Z M 0.515625 -4.15625 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-1-2&quot;&gt;
&lt;path d=&quot;M 2.265625 -0.46875 C 2.585938 -0.46875 2.859375 -0.601562 3.078125 -0.875 C 3.296875 -1.144531 3.40625 -1.550781 3.40625 -2.09375 C 3.40625 -2.425781 3.351562 -2.710938 3.25 -2.953125 C 3.070312 -3.410156 2.742188 -3.640625 2.265625 -3.640625 C 1.773438 -3.640625 1.441406 -3.398438 1.265625 -2.921875 C 1.171875 -2.660156 1.125 -2.332031 1.125 -1.9375 C 1.125 -1.613281 1.171875 -1.335938 1.265625 -1.109375 C 1.453125 -0.679688 1.785156 -0.46875 2.265625 -0.46875 Z M 0.453125 -4.125 L 1.140625 -4.125 L 1.140625 -3.578125 C 1.273438 -3.765625 1.425781 -3.910156 1.59375 -4.015625 C 1.832031 -4.171875 2.109375 -4.25 2.421875 -4.25 C 2.890625 -4.25 3.285156 -4.066406 3.609375 -3.703125 C 3.941406 -3.347656 4.109375 -2.835938 4.109375 -2.171875 C 4.109375 -1.265625 3.875 -0.617188 3.40625 -0.234375 C 3.101562 0.0117188 2.753906 0.140625 2.359375 0.140625 C 2.046875 0.140625 1.78125 0.0703125 1.5625 -0.0625 C 1.445312 -0.144531 1.3125 -0.28125 1.15625 -0.46875 L 1.15625 1.65625 L 0.453125 1.65625 Z M 0.453125 -4.125 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-1-3&quot;&gt;
&lt;path d=&quot;M 2.15625 -0.453125 C 2.625 -0.453125 2.941406 -0.625 3.109375 -0.96875 C 3.285156 -1.320312 3.375 -1.710938 3.375 -2.140625 C 3.375 -2.523438 3.3125 -2.84375 3.1875 -3.09375 C 2.988281 -3.46875 2.648438 -3.65625 2.171875 -3.65625 C 1.742188 -3.65625 1.429688 -3.492188 1.234375 -3.171875 C 1.046875 -2.847656 0.953125 -2.457031 0.953125 -2 C 0.953125 -1.550781 1.046875 -1.179688 1.234375 -0.890625 C 1.429688 -0.597656 1.738281 -0.453125 2.15625 -0.453125 Z M 2.1875 -4.265625 C 2.71875 -4.265625 3.164062 -4.085938 3.53125 -3.734375 C 3.90625 -3.378906 4.09375 -2.851562 4.09375 -2.15625 C 4.09375 -1.488281 3.929688 -0.9375 3.609375 -0.5 C 3.285156 -0.0625 2.78125 0.15625 2.09375 0.15625 C 1.519531 0.15625 1.066406 -0.0351562 0.734375 -0.421875 C 0.398438 -0.804688 0.234375 -1.328125 0.234375 -1.984375 C 0.234375 -2.679688 0.410156 -3.234375 0.765625 -3.640625 C 1.117188 -4.054688 1.59375 -4.265625 2.1875 -4.265625 Z M 2.15625 -4.25 Z M 2.15625 -4.25 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-1-4&quot;&gt;
&lt;path d=&quot;M 0.53125 -4.15625 L 1.1875 -4.15625 L 1.1875 -3.4375 C 1.25 -3.570312 1.382812 -3.738281 1.59375 -3.9375 C 1.800781 -4.144531 2.046875 -4.25 2.328125 -4.25 C 2.335938 -4.25 2.359375 -4.242188 2.390625 -4.234375 C 2.421875 -4.234375 2.472656 -4.226562 2.546875 -4.21875 L 2.546875 -3.484375 C 2.503906 -3.492188 2.46875 -3.5 2.4375 -3.5 C 2.40625 -3.5 2.367188 -3.5 2.328125 -3.5 C 1.972656 -3.5 1.703125 -3.382812 1.515625 -3.15625 C 1.328125 -2.9375 1.234375 -2.679688 1.234375 -2.390625 L 1.234375 0 L 0.53125 0 Z M 0.53125 -4.15625 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-1-5&quot;&gt;
&lt;path d=&quot;M 0.65625 -5.3125 L 1.359375 -5.3125 L 1.359375 -4.15625 L 2.015625 -4.15625 L 2.015625 -3.578125 L 1.359375 -3.578125 L 1.359375 -0.875 C 1.359375 -0.726562 1.40625 -0.628906 1.5 -0.578125 C 1.550781 -0.546875 1.644531 -0.53125 1.78125 -0.53125 C 1.8125 -0.53125 1.84375 -0.53125 1.875 -0.53125 C 1.914062 -0.539062 1.960938 -0.546875 2.015625 -0.546875 L 2.015625 0 C 1.941406 0.0195312 1.859375 0.0351562 1.765625 0.046875 C 1.679688 0.0546875 1.585938 0.0625 1.484375 0.0625 C 1.160156 0.0625 0.941406 -0.0195312 0.828125 -0.1875 C 0.710938 -0.351562 0.65625 -0.566406 0.65625 -0.828125 L 0.65625 -3.578125 L 0.09375 -3.578125 L 0.09375 -4.15625 L 0.65625 -4.15625 Z M 0.65625 -5.3125 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-2-0&quot;&gt;
&lt;path d=&quot;M 5.078125 -5.125 L 1.953125 -5.125 L 1.953125 -3.6875 L 4.6875 -3.6875 L 4.6875 -2.609375 L 1.953125 -2.609375 L 1.953125 0 L 0.65625 0 L 0.65625 -6.21875 L 5.078125 -6.21875 Z M 5.078125 -5.125 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-2-1&quot;&gt;
&lt;path d=&quot;M 3.34375 0 L 0.65625 0 L 0.65625 -6.234375 L 3.34375 -6.234375 C 3.726562 -6.222656 4.050781 -6.175781 4.3125 -6.09375 C 4.75 -5.945312 5.101562 -5.679688 5.375 -5.296875 C 5.582031 -4.992188 5.726562 -4.660156 5.8125 -4.296875 C 5.894531 -3.929688 5.9375 -3.585938 5.9375 -3.265625 C 5.9375 -2.441406 5.769531 -1.738281 5.4375 -1.15625 C 4.976562 -0.382812 4.28125 0 3.34375 0 Z M 4.3125 -4.640625 C 4.113281 -4.972656 3.71875 -5.140625 3.125 -5.140625 L 1.921875 -5.140625 L 1.921875 -1.078125 L 3.125 -1.078125 C 3.738281 -1.078125 4.164062 -1.378906 4.40625 -1.984375 C 4.539062 -2.316406 4.609375 -2.710938 4.609375 -3.171875 C 4.609375 -3.804688 4.507812 -4.296875 4.3125 -4.640625 Z M 4.3125 -4.640625 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-2-2&quot;&gt;
&lt;path d=&quot;M 0.5625 -6.234375 L 1.84375 -6.234375 L 1.84375 0 L 0.5625 0 Z M 0.5625 -6.234375 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-2-3&quot;&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-2-4&quot;&gt;
&lt;path d=&quot;M 3.3125 -2.234375 L 1.984375 -2.234375 L 1.984375 0 L 0.6875 0 L 0.6875 -6.234375 L 3.40625 -6.234375 C 4.03125 -6.234375 4.523438 -6.070312 4.890625 -5.75 C 5.265625 -5.425781 5.453125 -4.925781 5.453125 -4.25 C 5.453125 -3.519531 5.265625 -3 4.890625 -2.6875 C 4.523438 -2.382812 4 -2.234375 3.3125 -2.234375 Z M 3.90625 -3.53125 C 4.082031 -3.6875 4.171875 -3.925781 4.171875 -4.25 C 4.171875 -4.570312 4.082031 -4.800781 3.90625 -4.9375 C 3.738281 -5.070312 3.503906 -5.140625 3.203125 -5.140625 L 1.984375 -5.140625 L 1.984375 -3.3125 L 3.203125 -3.3125 C 3.503906 -3.3125 3.738281 -3.382812 3.90625 -3.53125 Z M 3.90625 -3.53125 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-2-5&quot;&gt;
&lt;path d=&quot;M 0.734375 -4.109375 C 1.054688 -4.515625 1.601562 -4.71875 2.375 -4.71875 C 2.875 -4.71875 3.320312 -4.617188 3.71875 -4.421875 C 4.113281 -4.210938 4.3125 -3.832031 4.3125 -3.28125 L 4.3125 -1.171875 C 4.3125 -1.023438 4.3125 -0.847656 4.3125 -0.640625 C 4.320312 -0.484375 4.347656 -0.375 4.390625 -0.3125 C 4.429688 -0.257812 4.488281 -0.210938 4.5625 -0.171875 L 4.5625 0 L 3.25 0 C 3.21875 -0.09375 3.191406 -0.179688 3.171875 -0.265625 C 3.160156 -0.347656 3.148438 -0.441406 3.140625 -0.546875 C 2.972656 -0.359375 2.78125 -0.203125 2.5625 -0.078125 C 2.3125 0.0664062 2.019531 0.140625 1.6875 0.140625 C 1.269531 0.140625 0.925781 0.0195312 0.65625 -0.21875 C 0.382812 -0.457031 0.25 -0.789062 0.25 -1.21875 C 0.25 -1.789062 0.46875 -2.203125 0.90625 -2.453125 C 1.144531 -2.585938 1.5 -2.6875 1.96875 -2.75 L 2.375 -2.796875 C 2.59375 -2.828125 2.75 -2.863281 2.84375 -2.90625 C 3.019531 -2.976562 3.109375 -3.09375 3.109375 -3.25 C 3.109375 -3.4375 3.039062 -3.566406 2.90625 -3.640625 C 2.78125 -3.710938 2.585938 -3.75 2.328125 -3.75 C 2.046875 -3.75 1.847656 -3.675781 1.734375 -3.53125 C 1.648438 -3.425781 1.59375 -3.285156 1.5625 -3.109375 L 0.390625 -3.109375 C 0.421875 -3.515625 0.535156 -3.847656 0.734375 -4.109375 Z M 1.625 -0.875 C 1.738281 -0.78125 1.878906 -0.734375 2.046875 -0.734375 C 2.304688 -0.734375 2.546875 -0.804688 2.765625 -0.953125 C 2.984375 -1.109375 3.097656 -1.390625 3.109375 -1.796875 L 3.109375 -2.234375 C 3.023438 -2.191406 2.941406 -2.15625 2.859375 -2.125 C 2.785156 -2.09375 2.679688 -2.066406 2.546875 -2.046875 L 2.28125 -1.984375 C 2.03125 -1.941406 1.847656 -1.890625 1.734375 -1.828125 C 1.546875 -1.710938 1.453125 -1.539062 1.453125 -1.3125 C 1.453125 -1.101562 1.507812 -0.957031 1.625 -0.875 Z M 1.625 -0.875 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-2-6&quot;&gt;
&lt;path d=&quot;M 4.546875 -2.953125 L 3.3125 -2.953125 C 3.289062 -3.128906 3.234375 -3.285156 3.140625 -3.421875 C 3.003906 -3.609375 2.796875 -3.703125 2.515625 -3.703125 C 2.109375 -3.703125 1.828125 -3.5 1.671875 -3.09375 C 1.597656 -2.875 1.5625 -2.585938 1.5625 -2.234375 C 1.5625 -1.898438 1.597656 -1.628906 1.671875 -1.421875 C 1.816406 -1.035156 2.085938 -0.84375 2.484375 -0.84375 C 2.765625 -0.84375 2.960938 -0.921875 3.078125 -1.078125 C 3.203125 -1.234375 3.28125 -1.429688 3.3125 -1.671875 L 4.53125 -1.671875 C 4.507812 -1.304688 4.378906 -0.957031 4.140625 -0.625 C 3.765625 -0.101562 3.203125 0.15625 2.453125 0.15625 C 1.710938 0.15625 1.164062 -0.0625 0.8125 -0.5 C 0.46875 -0.9375 0.296875 -1.503906 0.296875 -2.203125 C 0.296875 -2.992188 0.488281 -3.609375 0.875 -4.046875 C 1.257812 -4.492188 1.796875 -4.71875 2.484375 -4.71875 C 3.054688 -4.71875 3.523438 -4.585938 3.890625 -4.328125 C 4.265625 -4.066406 4.484375 -3.609375 4.546875 -2.953125 Z M 4.546875 -2.953125 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-2-7&quot;&gt;
&lt;path d=&quot;M 4.78125 0 L 3.328125 0 L 2.234375 -1.96875 L 1.734375 -1.453125 L 1.734375 0 L 0.546875 0 L 0.546875 -6.203125 L 1.734375 -6.203125 L 1.734375 -2.859375 L 3.234375 -4.59375 L 4.71875 -4.59375 L 3.109375 -2.828125 Z M 4.78125 0 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-2-8&quot;&gt;
&lt;path d=&quot;M 1.859375 0.8125 C 1.992188 0.914062 2.210938 0.96875 2.515625 0.96875 C 2.953125 0.96875 3.242188 0.820312 3.390625 0.53125 C 3.484375 0.351562 3.53125 0.0390625 3.53125 -0.40625 L 3.53125 -0.703125 C 3.414062 -0.503906 3.289062 -0.351562 3.15625 -0.25 C 2.914062 -0.0703125 2.609375 0.015625 2.234375 0.015625 C 1.640625 0.015625 1.164062 -0.1875 0.8125 -0.59375 C 0.457031 -1.007812 0.28125 -1.578125 0.28125 -2.296875 C 0.28125 -2.972656 0.445312 -3.546875 0.78125 -4.015625 C 1.125 -4.484375 1.609375 -4.71875 2.234375 -4.71875 C 2.472656 -4.71875 2.675781 -4.679688 2.84375 -4.609375 C 3.132812 -4.484375 3.367188 -4.257812 3.546875 -3.9375 L 3.546875 -4.609375 L 4.71875 -4.609375 L 4.71875 -0.234375 C 4.71875 0.355469 4.617188 0.804688 4.421875 1.109375 C 4.078125 1.628906 3.421875 1.890625 2.453125 1.890625 C 1.859375 1.890625 1.375 1.769531 1 1.53125 C 0.632812 1.300781 0.429688 0.957031 0.390625 0.5 L 1.703125 0.5 C 1.734375 0.644531 1.785156 0.75 1.859375 0.8125 Z M 1.65625 -1.578125 C 1.820312 -1.179688 2.117188 -0.984375 2.546875 -0.984375 C 2.828125 -0.984375 3.0625 -1.085938 3.25 -1.296875 C 3.445312 -1.515625 3.546875 -1.859375 3.546875 -2.328125 C 3.546875 -2.765625 3.453125 -3.097656 3.265625 -3.328125 C 3.085938 -3.554688 2.84375 -3.671875 2.53125 -3.671875 C 2.101562 -3.671875 1.8125 -3.46875 1.65625 -3.0625 C 1.570312 -2.851562 1.53125 -2.59375 1.53125 -2.28125 C 1.53125 -2.019531 1.570312 -1.785156 1.65625 -1.578125 Z M 1.65625 -1.578125 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-2-9&quot;&gt;
&lt;path d=&quot;M 4.5 -1.359375 C 4.46875 -1.078125 4.328125 -0.796875 4.078125 -0.515625 C 3.679688 -0.0664062 3.128906 0.15625 2.421875 0.15625 C 1.835938 0.15625 1.320312 -0.03125 0.875 -0.40625 C 0.425781 -0.789062 0.203125 -1.40625 0.203125 -2.25 C 0.203125 -3.050781 0.398438 -3.664062 0.796875 -4.09375 C 1.203125 -4.519531 1.726562 -4.734375 2.375 -4.734375 C 2.757812 -4.734375 3.101562 -4.660156 3.40625 -4.515625 C 3.71875 -4.367188 3.972656 -4.140625 4.171875 -3.828125 C 4.359375 -3.554688 4.476562 -3.238281 4.53125 -2.875 C 4.5625 -2.664062 4.570312 -2.363281 4.5625 -1.96875 L 1.40625 -1.96875 C 1.425781 -1.507812 1.570312 -1.1875 1.84375 -1 C 2.007812 -0.882812 2.210938 -0.828125 2.453125 -0.828125 C 2.691406 -0.828125 2.890625 -0.894531 3.046875 -1.03125 C 3.128906 -1.113281 3.207031 -1.222656 3.28125 -1.359375 Z M 3.3125 -2.765625 C 3.289062 -3.078125 3.191406 -3.316406 3.015625 -3.484375 C 2.847656 -3.648438 2.632812 -3.734375 2.375 -3.734375 C 2.101562 -3.734375 1.890625 -3.644531 1.734375 -3.46875 C 1.578125 -3.300781 1.476562 -3.066406 1.4375 -2.765625 Z M 3.3125 -2.765625 &quot;/&gt;
&lt;/g&gt;
&lt;/g&gt;
&lt;/defs&gt;
&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;rgb(100%, 100%, 100%)&quot; fill-opacity=&quot;1&quot; d=&quot;M 0 0 L 433.5 0 L 433.5 289.242188 L 0 289.242188 Z M 0 0 &quot;/&gt;
&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;rgb(100%, 100%, 100%)&quot; fill-opacity=&quot;1&quot; stroke-width=&quot;1&quot; stroke-linecap=&quot;butt&quot; stroke-linejoin=&quot;miter&quot; stroke=&quot;rgb(0%, 0%, 0%)&quot; stroke-opacity=&quot;1&quot; stroke-miterlimit=&quot;4&quot; d=&quot;M 39.99775 160.001713 L 160.001713 160.001713 L 160.001713 220.000986 L 39.99775 220.000986 Z M 39.99775 160.001713 &quot; transform=&quot;matrix(0.721298, 0, 0, 0.721298, 0.360649, 0.360649)&quot;/&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-0-0&quot; x=&quot;39.975676&quot; y=&quot;139.931772&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-1&quot; x=&quot;45.262845&quot; y=&quot;139.931772&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-2&quot; x=&quot;51.513623&quot; y=&quot;139.931772&quot;/&gt;
&lt;/g&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-0-3&quot; x=&quot;56.648643&quot; y=&quot;139.931772&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-4&quot; x=&quot;59.053439&quot; y=&quot;139.931772&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-5&quot; x=&quot;65.304217&quot; y=&quot;139.931772&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-6&quot; x=&quot;70.118034&quot; y=&quot;139.931772&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-7&quot; x=&quot;74.445821&quot; y=&quot;139.931772&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-8&quot; x=&quot;76.850617&quot; y=&quot;139.931772&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-0&quot; x=&quot;79.255412&quot; y=&quot;139.931772&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-9&quot; x=&quot;84.542582&quot; y=&quot;139.931772&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-10&quot; x=&quot;87.424955&quot; y=&quot;139.931772&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-11&quot; x=&quot;92.238773&quot; y=&quot;139.931772&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-12&quot; x=&quot;99.448933&quot; y=&quot;139.931772&quot;/&gt;
&lt;/g&gt;
&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;rgb(100%, 100%, 100%)&quot; fill-opacity=&quot;1&quot; stroke-width=&quot;1&quot; stroke-linecap=&quot;butt&quot; stroke-linejoin=&quot;miter&quot; stroke=&quot;rgb(0%, 0%, 0%)&quot; stroke-opacity=&quot;1&quot; stroke-miterlimit=&quot;4&quot; d=&quot;M 80.002681 160.001713 L 160.001713 160.001713 L 160.001713 180.001471 L 80.002681 180.001471 Z M 80.002681 160.001713 &quot; transform=&quot;matrix(0.721298, 0, 0, 0.721298, 0.360649, 0.360649)&quot;/&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-0-13&quot; x=&quot;69.954616&quot; y=&quot;125.505816&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-14&quot; x=&quot;76.687198&quot; y=&quot;125.505816&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-15&quot; x=&quot;82.460398&quot; y=&quot;125.505816&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-3&quot; x=&quot;88.711176&quot; y=&quot;125.505816&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-16&quot; x=&quot;91.115972&quot; y=&quot;125.505816&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-17&quot; x=&quot;97.366749&quot; y=&quot;125.505816&quot;/&gt;
&lt;/g&gt;
&lt;path fill=&quot;none&quot; stroke-width=&quot;1&quot; stroke-linecap=&quot;butt&quot; stroke-linejoin=&quot;miter&quot; stroke=&quot;rgb(0%, 0%, 0%)&quot; stroke-opacity=&quot;1&quot; stroke-miterlimit=&quot;10&quot; d=&quot;M 120.002197 220.000986 L 120.002197 249.997915 L 100.002439 249.997915 L 100.002439 273.631531 &quot; transform=&quot;matrix(0.721298, 0, 0, 0.721298, 0.360649, 0.360649)&quot;/&gt;
&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot; stroke-width=&quot;1&quot; stroke-linecap=&quot;butt&quot; stroke-linejoin=&quot;miter&quot; stroke=&quot;rgb(0%, 0%, 0%)&quot; stroke-opacity=&quot;1&quot; stroke-miterlimit=&quot;10&quot; d=&quot;M 100.002439 278.879234 L 96.498555 271.882297 L 100.002439 273.631531 L 103.500907 271.882297 Z M 100.002439 278.879234 &quot; transform=&quot;matrix(0.721298, 0, 0, 0.721298, 0.360649, 0.360649)&quot;/&gt;
&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;rgb(100%, 100%, 100%)&quot; fill-opacity=&quot;1&quot; stroke-width=&quot;1&quot; stroke-linecap=&quot;butt&quot; stroke-linejoin=&quot;miter&quot; stroke=&quot;rgb(0%, 0%, 0%)&quot; stroke-opacity=&quot;1&quot; stroke-miterlimit=&quot;4&quot; d=&quot;M 80.002681 200.001228 L 160.001713 200.001228 L 160.001713 220.000986 L 80.002681 220.000986 Z M 80.002681 200.001228 &quot; transform=&quot;matrix(0.721298, 0, 0, 0.721298, 0.360649, 0.360649)&quot;/&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-0-14&quot; x=&quot;64.432179&quot; y=&quot;154.357728&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-18&quot; x=&quot;70.205379&quot; y=&quot;154.357728&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-13&quot; x=&quot;76.456157&quot; y=&quot;154.357728&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-0&quot; x=&quot;83.18874&quot; y=&quot;154.357728&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-19&quot; x=&quot;88.475909&quot; y=&quot;154.357728&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-20&quot; x=&quot;90.880704&quot; y=&quot;154.357728&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-16&quot; x=&quot;96.653904&quot; y=&quot;154.357728&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-21&quot; x=&quot;102.904682&quot; y=&quot;154.357728&quot;/&gt;
&lt;/g&gt;
&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;rgb(85.488892%, 90.979004%, 98.81897%)&quot; fill-opacity=&quot;1&quot; stroke-width=&quot;1&quot; stroke-linecap=&quot;butt&quot; stroke-linejoin=&quot;miter&quot; stroke=&quot;rgb(42.349243%, 55.688477%, 74.899292%)&quot; stroke-opacity=&quot;1&quot; stroke-miterlimit=&quot;4&quot; d=&quot;M 39.99775 280.00026 L 160.001713 280.00026 L 160.001713 339.999534 L 39.99775 339.999534 Z M 39.99775 280.00026 &quot; transform=&quot;matrix(0.721298, 0, 0, 0.721298, 0.360649, 0.360649)&quot;/&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-0-14&quot; x=&quot;50.006224&quot; y=&quot;221.438423&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-18&quot; x=&quot;55.779424&quot; y=&quot;221.438423&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-13&quot; x=&quot;62.030202&quot; y=&quot;221.438423&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-0&quot; x=&quot;68.762784&quot; y=&quot;221.438423&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-19&quot; x=&quot;74.049953&quot; y=&quot;221.438423&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-20&quot; x=&quot;76.454749&quot; y=&quot;221.438423&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-16&quot; x=&quot;82.227949&quot; y=&quot;221.438423&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-21&quot; x=&quot;88.478726&quot; y=&quot;221.438423&quot;/&gt;
&lt;/g&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-0-1&quot; x=&quot;58.898473&quot; y=&quot;232.25789&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-12&quot; x=&quot;65.149251&quot; y=&quot;232.25789&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-22&quot; x=&quot;69.963068&quot; y=&quot;232.25789&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-23&quot; x=&quot;74.290855&quot; y=&quot;232.25789&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-24&quot; x=&quot;76.213846&quot; y=&quot;232.25789&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-12&quot; x=&quot;80.541633&quot; y=&quot;232.25789&quot;/&gt;
&lt;/g&gt;
&lt;path fill=&quot;none&quot; stroke-width=&quot;1&quot; stroke-linecap=&quot;butt&quot; stroke-linejoin=&quot;miter&quot; stroke=&quot;rgb(0%, 0%, 0%)&quot; stroke-opacity=&quot;1&quot; stroke-miterlimit=&quot;10&quot; d=&quot;M 100.002439 100.002439 L 100.002439 129.999368 L 120.002197 129.999368 L 120.002197 153.627568 &quot; transform=&quot;matrix(0.721298, 0, 0, 0.721298, 0.360649, 0.360649)&quot;/&gt;
&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot; stroke-width=&quot;1&quot; stroke-linecap=&quot;butt&quot; stroke-linejoin=&quot;miter&quot; stroke=&quot;rgb(0%, 0%, 0%)&quot; stroke-opacity=&quot;1&quot; stroke-miterlimit=&quot;10&quot; d=&quot;M 120.002197 158.880686 L 116.498313 151.878334 L 120.002197 153.627568 L 123.500665 151.878334 Z M 120.002197 158.880686 &quot; transform=&quot;matrix(0.721298, 0, 0, 0.721298, 0.360649, 0.360649)&quot;/&gt;
&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;rgb(83.529663%, 90.979004%, 83.139038%)&quot; fill-opacity=&quot;1&quot; stroke-width=&quot;1&quot; stroke-linecap=&quot;butt&quot; stroke-linejoin=&quot;miter&quot; stroke=&quot;rgb(50.979614%, 70.199585%, 39.99939%)&quot; stroke-opacity=&quot;1&quot; stroke-miterlimit=&quot;4&quot; d=&quot;M 39.99775 39.99775 L 160.001713 39.99775 L 160.001713 100.002439 L 39.99775 100.002439 Z M 39.99775 39.99775 &quot; transform=&quot;matrix(0.721298, 0, 0, 0.721298, 0.360649, 0.360649)&quot;/&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-0-0&quot; x=&quot;40.212352&quot; y=&quot;48.326952&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-1&quot; x=&quot;45.499521&quot; y=&quot;48.326952&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-2&quot; x=&quot;51.750299&quot; y=&quot;48.326952&quot;/&gt;
&lt;/g&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-0-3&quot; x=&quot;56.885319&quot; y=&quot;48.326952&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-10&quot; x=&quot;59.290115&quot; y=&quot;48.326952&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-25&quot; x=&quot;64.103932&quot; y=&quot;48.326952&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-10&quot; x=&quot;70.35471&quot; y=&quot;48.326952&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-9&quot; x=&quot;75.168528&quot; y=&quot;48.326952&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-12&quot; x=&quot;78.050901&quot; y=&quot;48.326952&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-26&quot; x=&quot;82.864719&quot; y=&quot;48.326952&quot;/&gt;
&lt;/g&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-0-13&quot; x=&quot;85.270924&quot; y=&quot;48.326952&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-14&quot; x=&quot;92.003506&quot; y=&quot;48.326952&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-15&quot; x=&quot;97.776706&quot; y=&quot;48.326952&quot;/&gt;
&lt;/g&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-0-16&quot; x=&quot;53.838118&quot; y=&quot;59.146419&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-17&quot; x=&quot;60.088896&quot; y=&quot;59.146419&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-26&quot; x=&quot;65.862096&quot; y=&quot;59.146419&quot;/&gt;
&lt;/g&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-0-15&quot; x=&quot;68.275344&quot; y=&quot;59.146419&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-27&quot; x=&quot;74.526122&quot; y=&quot;59.146419&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-23&quot; x=&quot;76.449113&quot; y=&quot;59.146419&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-12&quot; x=&quot;78.372105&quot; y=&quot;59.146419&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-28&quot; x=&quot;83.185922&quot; y=&quot;59.146419&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-7&quot; x=&quot;87.99974&quot; y=&quot;59.146419&quot;/&gt;
&lt;/g&gt;
&lt;path fill=&quot;none&quot; stroke-width=&quot;1&quot; stroke-linecap=&quot;butt&quot; stroke-linejoin=&quot;miter&quot; stroke=&quot;rgb(0%, 0%, 0%)&quot; stroke-opacity=&quot;1&quot; stroke-miterlimit=&quot;10&quot; d=&quot;M 240.000744 240.000744 L 240.000744 189.998642 L 166.370441 189.998642 &quot; transform=&quot;matrix(0.721298, 0, 0, 0.721298, 0.360649, 0.360649)&quot;/&gt;
&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot; stroke-width=&quot;1&quot; stroke-linecap=&quot;butt&quot; stroke-linejoin=&quot;miter&quot; stroke=&quot;rgb(0%, 0%, 0%)&quot; stroke-opacity=&quot;1&quot; stroke-miterlimit=&quot;10&quot; d=&quot;M 161.117323 189.998642 L 168.119676 186.500173 L 166.370441 189.998642 L 168.119676 193.502526 Z M 161.117323 189.998642 &quot; transform=&quot;matrix(0.721298, 0, 0, 0.721298, 0.360649, 0.360649)&quot;/&gt;
&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;rgb(100%, 100%, 100%)&quot; fill-opacity=&quot;1&quot; d=&quot;M 151.472656 132.71875 L 173.832031 132.71875 L 173.832031 142.09375 L 151.472656 142.09375 Z M 151.472656 132.71875 &quot;/&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-1-0&quot; x=&quot;151.630321&quot; y=&quot;139.931772&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-1-1&quot; x=&quot;153.393063&quot; y=&quot;139.931772&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-1-2&quot; x=&quot;160.002376&quot; y=&quot;139.931772&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-1-3&quot; x=&quot;164.415042&quot; y=&quot;139.931772&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-1-4&quot; x=&quot;168.827708&quot; y=&quot;139.931772&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-1-5&quot; x=&quot;171.469884&quot; y=&quot;139.931772&quot;/&gt;
&lt;/g&gt;
&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;rgb(88.238525%, 83.529663%, 90.589905%)&quot; fill-opacity=&quot;1&quot; stroke-width=&quot;1&quot; stroke-linecap=&quot;butt&quot; stroke-linejoin=&quot;miter&quot; stroke=&quot;rgb(58.81958%, 45.098877%, 65.098572%)&quot; stroke-opacity=&quot;1&quot; stroke-miterlimit=&quot;10&quot; d=&quot;M 200.001228 240.000744 L 280.00026 240.000744 L 280.00026 290.999315 C 266.667088 280.200637 253.333916 280.200637 240.000744 290.999315 C 226.667572 301.797992 213.3344 301.797992 200.001228 290.999315 Z M 200.001228 240.000744 &quot; transform=&quot;matrix(0.721298, 0, 0, 0.721298, 0.360649, 0.360649)&quot;/&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-0-14&quot; x=&quot;150.976644&quot; y=&quot;186.094831&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-18&quot; x=&quot;156.749844&quot; y=&quot;186.094831&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-13&quot; x=&quot;163.000622&quot; y=&quot;186.094831&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-0&quot; x=&quot;169.733205&quot; y=&quot;186.094831&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-19&quot; x=&quot;175.020374&quot; y=&quot;186.094831&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-20&quot; x=&quot;177.425169&quot; y=&quot;186.094831&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-16&quot; x=&quot;183.198369&quot; y=&quot;186.094831&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-21&quot; x=&quot;189.449147&quot; y=&quot;186.094831&quot;/&gt;
&lt;/g&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-0-1&quot; x=&quot;149.297377&quot; y=&quot;196.914298&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-12&quot; x=&quot;155.548155&quot; y=&quot;196.914298&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-22&quot; x=&quot;160.361972&quot; y=&quot;196.914298&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-23&quot; x=&quot;164.689759&quot; y=&quot;196.914298&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-24&quot; x=&quot;166.61275&quot; y=&quot;196.914298&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-12&quot; x=&quot;170.940537&quot; y=&quot;196.914298&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-3&quot; x=&quot;175.754354&quot; y=&quot;196.914298&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-1&quot; x=&quot;178.15915&quot; y=&quot;196.914298&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-2&quot; x=&quot;184.409928&quot; y=&quot;196.914298&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-29&quot; x=&quot;189.697097&quot; y=&quot;196.914298&quot;/&gt;
&lt;/g&gt;
&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;rgb(100%, 100%, 100%)&quot; fill-opacity=&quot;1&quot; stroke-width=&quot;1&quot; stroke-linecap=&quot;butt&quot; stroke-linejoin=&quot;miter&quot; stroke=&quot;rgb(0%, 0%, 0%)&quot; stroke-opacity=&quot;1&quot; stroke-miterlimit=&quot;4&quot; d=&quot;M 300.000018 160.001713 L 419.998565 160.001713 L 419.998565 220.000986 L 300.000018 220.000986 Z M 300.000018 160.001713 &quot; transform=&quot;matrix(0.721298, 0, 0, 0.721298, 0.360649, 0.360649)&quot;/&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-0-0&quot; x=&quot;226.960859&quot; y=&quot;139.931772&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-1&quot; x=&quot;232.248028&quot; y=&quot;139.931772&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-19&quot; x=&quot;238.498806&quot; y=&quot;139.931772&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-3&quot; x=&quot;240.903602&quot; y=&quot;139.931772&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-4&quot; x=&quot;243.308397&quot; y=&quot;139.931772&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-5&quot; x=&quot;249.559175&quot; y=&quot;139.931772&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-6&quot; x=&quot;254.372993&quot; y=&quot;139.931772&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-7&quot; x=&quot;258.700779&quot; y=&quot;139.931772&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-3&quot; x=&quot;261.105575&quot; y=&quot;139.931772&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-21&quot; x=&quot;263.510371&quot; y=&quot;139.931772&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-30&quot; x=&quot;269.28357&quot; y=&quot;139.931772&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-6&quot; x=&quot;273.611357&quot; y=&quot;139.931772&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-7&quot; x=&quot;277.939144&quot; y=&quot;139.931772&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-12&quot; x=&quot;280.34394&quot; y=&quot;139.931772&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-11&quot; x=&quot;285.157757&quot; y=&quot;139.931772&quot;/&gt;
&lt;/g&gt;
&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;rgb(100%, 100%, 100%)&quot; fill-opacity=&quot;1&quot; stroke-width=&quot;1&quot; stroke-linecap=&quot;butt&quot; stroke-linejoin=&quot;miter&quot; stroke=&quot;rgb(0%, 0%, 0%)&quot; stroke-opacity=&quot;1&quot; stroke-miterlimit=&quot;4&quot; d=&quot;M 339.999534 160.001713 L 419.998565 160.001713 L 419.998565 180.001471 L 339.999534 180.001471 Z M 339.999534 160.001713 &quot; transform=&quot;matrix(0.721298, 0, 0, 0.721298, 0.360649, 0.360649)&quot;/&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-0-13&quot; x=&quot;257.492046&quot; y=&quot;125.505816&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-14&quot; x=&quot;264.224628&quot; y=&quot;125.505816&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-15&quot; x=&quot;269.997828&quot; y=&quot;125.505816&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-3&quot; x=&quot;276.248606&quot; y=&quot;125.505816&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-16&quot; x=&quot;278.653402&quot; y=&quot;125.505816&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-17&quot; x=&quot;284.90418&quot; y=&quot;125.505816&quot;/&gt;
&lt;/g&gt;
&lt;path fill=&quot;none&quot; stroke-width=&quot;1&quot; stroke-linecap=&quot;butt&quot; stroke-linejoin=&quot;miter&quot; stroke=&quot;rgb(0%, 0%, 0%)&quot; stroke-opacity=&quot;1&quot; stroke-miterlimit=&quot;10&quot; d=&quot;M 379.999049 220.000986 L 379.999049 249.997915 L 359.999292 249.997915 L 359.999292 273.631531 &quot; transform=&quot;matrix(0.721298, 0, 0, 0.721298, 0.360649, 0.360649)&quot;/&gt;
&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot; stroke-width=&quot;1&quot; stroke-linecap=&quot;butt&quot; stroke-linejoin=&quot;miter&quot; stroke=&quot;rgb(0%, 0%, 0%)&quot; stroke-opacity=&quot;1&quot; stroke-miterlimit=&quot;10&quot; d=&quot;M 359.999292 278.879234 L 356.500823 271.882297 L 359.999292 273.631531 L 363.49776 271.882297 Z M 359.999292 278.879234 &quot; transform=&quot;matrix(0.721298, 0, 0, 0.721298, 0.360649, 0.360649)&quot;/&gt;
&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;rgb(100%, 100%, 100%)&quot; fill-opacity=&quot;1&quot; stroke-width=&quot;1&quot; stroke-linecap=&quot;butt&quot; stroke-linejoin=&quot;miter&quot; stroke=&quot;rgb(0%, 0%, 0%)&quot; stroke-opacity=&quot;1&quot; stroke-miterlimit=&quot;4&quot; d=&quot;M 339.999534 200.001228 L 419.998565 200.001228 L 419.998565 220.000986 L 339.999534 220.000986 Z M 339.999534 200.001228 &quot; transform=&quot;matrix(0.721298, 0, 0, 0.721298, 0.360649, 0.360649)&quot;/&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-0-14&quot; x=&quot;251.96961&quot; y=&quot;154.357728&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-18&quot; x=&quot;257.742809&quot; y=&quot;154.357728&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-13&quot; x=&quot;263.993587&quot; y=&quot;154.357728&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-0&quot; x=&quot;270.72617&quot; y=&quot;154.357728&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-19&quot; x=&quot;276.013339&quot; y=&quot;154.357728&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-20&quot; x=&quot;278.418134&quot; y=&quot;154.357728&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-16&quot; x=&quot;284.191334&quot; y=&quot;154.357728&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-21&quot; x=&quot;290.442112&quot; y=&quot;154.357728&quot;/&gt;
&lt;/g&gt;
&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;rgb(85.488892%, 90.979004%, 98.81897%)&quot; fill-opacity=&quot;1&quot; stroke-width=&quot;1&quot; stroke-linecap=&quot;butt&quot; stroke-linejoin=&quot;miter&quot; stroke=&quot;rgb(42.349243%, 55.688477%, 74.899292%)&quot; stroke-opacity=&quot;1&quot; stroke-miterlimit=&quot;4&quot; d=&quot;M 300.000018 280.00026 L 419.998565 280.00026 L 419.998565 339.999534 L 300.000018 339.999534 Z M 300.000018 280.00026 &quot; transform=&quot;matrix(0.721298, 0, 0, 0.721298, 0.360649, 0.360649)&quot;/&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-0-14&quot; x=&quot;237.543654&quot; y=&quot;221.438423&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-18&quot; x=&quot;243.316854&quot; y=&quot;221.438423&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-13&quot; x=&quot;249.567632&quot; y=&quot;221.438423&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-0&quot; x=&quot;256.300214&quot; y=&quot;221.438423&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-19&quot; x=&quot;261.587383&quot; y=&quot;221.438423&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-20&quot; x=&quot;263.992179&quot; y=&quot;221.438423&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-16&quot; x=&quot;269.765379&quot; y=&quot;221.438423&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-21&quot; x=&quot;276.016157&quot; y=&quot;221.438423&quot;/&gt;
&lt;/g&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-0-1&quot; x=&quot;246.435899&quot; y=&quot;232.25789&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-12&quot; x=&quot;252.686677&quot; y=&quot;232.25789&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-22&quot; x=&quot;257.500495&quot; y=&quot;232.25789&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-23&quot; x=&quot;261.828282&quot; y=&quot;232.25789&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-24&quot; x=&quot;263.751273&quot; y=&quot;232.25789&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-12&quot; x=&quot;268.07906&quot; y=&quot;232.25789&quot;/&gt;
&lt;/g&gt;
&lt;path fill=&quot;none&quot; stroke-width=&quot;1&quot; stroke-linecap=&quot;butt&quot; stroke-linejoin=&quot;miter&quot; stroke=&quot;rgb(0%, 0%, 0%)&quot; stroke-opacity=&quot;1&quot; stroke-miterlimit=&quot;10&quot; d=&quot;M 359.999292 100.002439 L 359.999292 129.999368 L 379.999049 129.999368 L 379.999049 153.627568 &quot; transform=&quot;matrix(0.721298, 0, 0, 0.721298, 0.360649, 0.360649)&quot;/&gt;
&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot; stroke-width=&quot;1&quot; stroke-linecap=&quot;butt&quot; stroke-linejoin=&quot;miter&quot; stroke=&quot;rgb(0%, 0%, 0%)&quot; stroke-opacity=&quot;1&quot; stroke-miterlimit=&quot;10&quot; d=&quot;M 379.999049 158.880686 L 376.500581 151.878334 L 379.999049 153.627568 L 383.497518 151.878334 Z M 379.999049 158.880686 &quot; transform=&quot;matrix(0.721298, 0, 0, 0.721298, 0.360649, 0.360649)&quot;/&gt;
&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;rgb(83.529663%, 90.979004%, 83.139038%)&quot; fill-opacity=&quot;1&quot; stroke-width=&quot;1&quot; stroke-linecap=&quot;butt&quot; stroke-linejoin=&quot;miter&quot; stroke=&quot;rgb(50.979614%, 70.199585%, 39.99939%)&quot; stroke-opacity=&quot;1&quot; stroke-miterlimit=&quot;4&quot; d=&quot;M 300.000018 39.99775 L 419.998565 39.99775 L 419.998565 100.002439 L 300.000018 100.002439 Z M 300.000018 39.99775 &quot; transform=&quot;matrix(0.721298, 0, 0, 0.721298, 0.360649, 0.360649)&quot;/&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-0-0&quot; x=&quot;229.113486&quot; y=&quot;48.326952&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-1&quot; x=&quot;234.400655&quot; y=&quot;48.326952&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-19&quot; x=&quot;240.651433&quot; y=&quot;48.326952&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-3&quot; x=&quot;243.056228&quot; y=&quot;48.326952&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-10&quot; x=&quot;245.461024&quot; y=&quot;48.326952&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-25&quot; x=&quot;250.274841&quot; y=&quot;48.326952&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-10&quot; x=&quot;256.525619&quot; y=&quot;48.326952&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-9&quot; x=&quot;261.339437&quot; y=&quot;48.326952&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-12&quot; x=&quot;264.22181&quot; y=&quot;48.326952&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-26&quot; x=&quot;269.035628&quot; y=&quot;48.326952&quot;/&gt;
&lt;/g&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-0-13&quot; x=&quot;271.44465&quot; y=&quot;48.326952&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-14&quot; x=&quot;278.177232&quot; y=&quot;48.326952&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-15&quot; x=&quot;283.950432&quot; y=&quot;48.326952&quot;/&gt;
&lt;/g&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-0-16&quot; x=&quot;241.375548&quot; y=&quot;59.146419&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-17&quot; x=&quot;247.626326&quot; y=&quot;59.146419&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-26&quot; x=&quot;253.399526&quot; y=&quot;59.146419&quot;/&gt;
&lt;/g&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-0-15&quot; x=&quot;255.812771&quot; y=&quot;59.146419&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-27&quot; x=&quot;262.063549&quot; y=&quot;59.146419&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-23&quot; x=&quot;263.98654&quot; y=&quot;59.146419&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-12&quot; x=&quot;265.909531&quot; y=&quot;59.146419&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-28&quot; x=&quot;270.723349&quot; y=&quot;59.146419&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-7&quot; x=&quot;275.537166&quot; y=&quot;59.146419&quot;/&gt;
&lt;/g&gt;
&lt;path fill=&quot;none&quot; stroke-width=&quot;1&quot; stroke-linecap=&quot;butt&quot; stroke-linejoin=&quot;miter&quot; stroke=&quot;rgb(0%, 0%, 0%)&quot; stroke-opacity=&quot;1&quot; stroke-miterlimit=&quot;10&quot; d=&quot;M 534.998527 240.000744 L 534.998527 189.998642 L 426.367294 189.998642 &quot; transform=&quot;matrix(0.721298, 0, 0, 0.721298, 0.360649, 0.360649)&quot;/&gt;
&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot; stroke-width=&quot;1&quot; stroke-linecap=&quot;butt&quot; stroke-linejoin=&quot;miter&quot; stroke=&quot;rgb(0%, 0%, 0%)&quot; stroke-opacity=&quot;1&quot; stroke-miterlimit=&quot;10&quot; d=&quot;M 421.119592 189.998642 L 428.121944 186.500173 L 426.367294 189.998642 L 428.121944 193.502526 Z M 421.119592 189.998642 &quot; transform=&quot;matrix(0.721298, 0, 0, 0.721298, 0.360649, 0.360649)&quot;/&gt;
&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;rgb(100%, 100%, 100%)&quot; fill-opacity=&quot;1&quot; d=&quot;M 351.273438 132.71875 L 373.632812 132.71875 L 373.632812 142.09375 L 351.273438 142.09375 Z M 351.273438 132.71875 &quot;/&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-1-0&quot; x=&quot;351.42981&quot; y=&quot;139.931772&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-1-1&quot; x=&quot;353.192551&quot; y=&quot;139.931772&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-1-2&quot; x=&quot;359.801865&quot; y=&quot;139.931772&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-1-3&quot; x=&quot;364.214531&quot; y=&quot;139.931772&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-1-4&quot; x=&quot;368.627197&quot; y=&quot;139.931772&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-1-5&quot; x=&quot;371.269373&quot; y=&quot;139.931772&quot;/&gt;
&lt;/g&gt;
&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;rgb(88.238525%, 83.529663%, 90.589905%)&quot; fill-opacity=&quot;1&quot; stroke-width=&quot;1&quot; stroke-linecap=&quot;butt&quot; stroke-linejoin=&quot;miter&quot; stroke=&quot;rgb(58.81958%, 45.098877%, 65.098572%)&quot; stroke-opacity=&quot;1&quot; stroke-miterlimit=&quot;10&quot; d=&quot;M 479.997839 269.997673 L 479.997839 240.000744 L 571.997808 240.000744 L 571.997808 269.997673 M 479.997839 269.997673 L 580.002044 269.997673 L 580.002044 319.999776 L 479.997839 319.999776 Z M 479.997839 269.997673 &quot; transform=&quot;matrix(0.721298, 0, 0, 0.721298, 0.360649, 0.360649)&quot;/&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-2-0&quot; x=&quot;356.546516&quot; y=&quot;186.816129&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-2-1&quot; x=&quot;361.833685&quot; y=&quot;186.816129&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-2-2&quot; x=&quot;368.084463&quot; y=&quot;186.816129&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-2-3&quot; x=&quot;370.489258&quot; y=&quot;186.816129&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-2-4&quot; x=&quot;372.894054&quot; y=&quot;186.816129&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-2-5&quot; x=&quot;378.667254&quot; y=&quot;186.816129&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-2-6&quot; x=&quot;383.481071&quot; y=&quot;186.816129&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-2-7&quot; x=&quot;388.294889&quot; y=&quot;186.816129&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-2-5&quot; x=&quot;393.108706&quot; y=&quot;186.816129&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-2-8&quot; x=&quot;397.922524&quot; y=&quot;186.816129&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-2-9&quot; x=&quot;403.209693&quot; y=&quot;186.816129&quot;/&gt;
&lt;/g&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-0-31&quot; x=&quot;373.136365&quot; y=&quot;207.733765&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-1&quot; x=&quot;378.909565&quot; y=&quot;207.733765&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-1&quot; x=&quot;385.160343&quot; y=&quot;207.733765&quot;/&gt;
&lt;/g&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-0-16&quot; x=&quot;375.063586&quot; y=&quot;217.831934&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-19&quot; x=&quot;381.314364&quot; y=&quot;217.831934&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-14&quot; x=&quot;383.71916&quot; y=&quot;217.831934&quot;/&gt;
&lt;/g&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-0-17&quot; x=&quot;358.225791&quot; y=&quot;228.651401&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-7&quot; x=&quot;363.998991&quot; y=&quot;228.651401&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-7&quot; x=&quot;366.403786&quot; y=&quot;228.651401&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-10&quot; x=&quot;368.808582&quot; y=&quot;228.651401&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-24&quot; x=&quot;373.622399&quot; y=&quot;228.651401&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-32&quot; x=&quot;377.950186&quot; y=&quot;228.651401&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-11&quot; x=&quot;382.764004&quot; y=&quot;228.651401&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-12&quot; x=&quot;389.974164&quot; y=&quot;228.651401&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-28&quot; x=&quot;394.787981&quot; y=&quot;228.651401&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-7&quot; x=&quot;399.601799&quot; y=&quot;228.651401&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-6&quot; x=&quot;402.006594&quot; y=&quot;228.651401&quot;/&gt;
&lt;/g&gt;
&lt;/svg&gt;
&lt;/div&gt;
&lt;/p&gt;
&lt;/div&gt;

&lt;p&gt;
FDT 的全称是 Field Device Tool/Technology，国际标准编号为 IEC 62453。
FDT 定义了一套厂商和协议中立的现场设备集成接口。FDT 提供一套叫作 FDT
Frame 的应用框架来承载运行 DTM 模块（Device Type Manager）。不同的设备有一套自己的 DTM 程序，这套程序按照 FDT 的接口开发，导入到 FDT 应用框架中，就能把设备用起来。这个方式打印机的安装方式。我们如果想要用特定打印机，就要安装打印机的驱动程序。而 DTM 正是设备的驱动程序。
&lt;/p&gt;

&lt;p&gt;
FDI 的全称是 Field Device Integration，国际标准编号为 IEC 62769。FDI
改进了 FDT 的设备描述机制，不再使用程序开发的 DTM 作为设备驱动，而是用
EDDL 编写的设备描述文件。FDI 也有一个应用框架叫作FDI Host System，它可以执行导入的 FDI Package，FDI Package包含了核心的 EDD 设备描述文件外，还有 UIP 和附件。UIP 是User Interface Plug-in，即用户界面插件。通过 UIP可以定义配置使用设备的工具界面。而附件则是设备的说明书、认证证书等。这样一来，就可以利用描述文件来构造程序，而不需要写代码开发 DTM
了。
&lt;/p&gt;

&lt;p&gt;
后来，FDT 和 FDI 都支持在其运行系统之上提供OPC UA服务器，这样一来，各种不同的工业总线就可以通过FDT/FDI集成，提供数据给OPC UA客户端了。
&lt;/p&gt;

&lt;p&gt;
但是，不同的现场总线的集成技术会设计出不同的OPC UA地址空间，互相不兼容。于是，多个厂商、用户协会共同开发了过程自动化设备信息模型（ PA-DIM ）。这些组织包括：现场通信组（FieldComm Group, FCG)、OPC 基金会（OPC
Foundation, OPCF）、NAMUR 德国化学行业测量和控制技术标准工作组（Normen
Arbeitsgemeinschaft für Mess- und Regeltechnik in der chemischen
Industrie, NAMUR）、ZVEI 德国电气电子厂商协会（Zentralverband
Elektrotechnik und Elektronikindustrie e. V.）、PROFIBUS &amp;amp; PROFINET 国际组织（PROFIBUS &amp;amp; PROFINET International, PI）、ODVA 开放 DeviceNet
厂商协会（Open DeviceNet Vendors Association）、ISA100 国际自动化协会（International Society of Automation）、VDMA 德国机械设备制造业联合会（Der Verband Deutscher Maschinen- und Anlagenbau e.V.）、FDT
Group（Field Device Technology Group）。
&lt;/p&gt;

&lt;p&gt;
PA-DIM 的目的是为了更轻松的采集数据；又能兼容支持工业现场已经安装的设备；并且要基于最新的、面向未来的技术标准；同时又能沿用现有的设备集成技术。最终目的是，确保任何设备供应商、任何协议，都能以标准化的方式集成设备。PA-DIM 的主要技术内容如下：
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;定义了设备标识、设备诊断、过程变量等常见参数。&lt;/li&gt;
&lt;li&gt;用统一的层级数据结构呈现这些参数数据。&lt;/li&gt;
&lt;li&gt;套用标准的数据语义字典，确保数据名称的一致性。&lt;/li&gt;
&lt;/ul&gt;


&lt;div id=&quot;org04db1b0&quot; class=&quot;figure&quot;&gt;
&lt;p&gt;&lt;div align=&quot;center&quot;&gt;&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; xmlns:xlink=&quot;http://www.w3.org/1999/xlink&quot; width=&quot;595.91998&quot; height=&quot;421.91998&quot; viewBox=&quot;0 0 595.91998 421.91998&quot;&gt;
&lt;defs&gt;
&lt;g&gt;
&lt;g id=&quot;glyph-0-0&quot;&gt;
&lt;path d=&quot;M 9.625 -6.515625 L 5.765625 -6.515625 L 5.765625 0 L 2 0 L 2 -18.140625 L 9.90625 -18.140625 C 11.726562 -18.140625 13.179688 -17.671875 14.265625 -16.734375 C 15.347656 -15.796875 15.890625 -14.347656 15.890625 -12.390625 C 15.890625 -10.253906 15.347656 -8.738281 14.265625 -7.84375 C 13.179688 -6.957031 11.632812 -6.515625 9.625 -6.515625 Z M 11.390625 -10.296875 C 11.890625 -10.734375 12.140625 -11.425781 12.140625 -12.375 C 12.140625 -13.3125 11.890625 -13.976562 11.390625 -14.375 C 10.890625 -14.78125 10.191406 -14.984375 9.296875 -14.984375 L 5.765625 -14.984375 L 5.765625 -9.640625 L 9.296875 -9.640625 C 10.191406 -9.640625 10.890625 -9.859375 11.390625 -10.296875 Z M 11.390625 -10.296875 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-0-1&quot;&gt;
&lt;path d=&quot;M 12.546875 -3.734375 L 5.859375 -3.734375 L 4.609375 0 L 0.640625 0 L 7.109375 -18.140625 L 11.390625 -18.140625 L 17.8125 0 L 13.703125 0 Z M 11.484375 -6.859375 L 9.21875 -13.984375 L 6.875 -6.859375 Z M 11.484375 -6.859375 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-0-2&quot;&gt;
&lt;path d=&quot;M 0.578125 -8.6875 L 7.640625 -8.6875 L 7.640625 -5.359375 L 0.578125 -5.359375 Z M 0.578125 -8.6875 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-0-3&quot;&gt;
&lt;path d=&quot;M 9.734375 0 L 1.921875 0 L 1.921875 -18.140625 L 9.734375 -18.140625 C 10.859375 -18.117188 11.796875 -17.988281 12.546875 -17.75 C 13.816406 -17.332031 14.84375 -16.5625 15.625 -15.4375 C 16.257812 -14.539062 16.691406 -13.566406 16.921875 -12.515625 C 17.148438 -11.460938 17.265625 -10.460938 17.265625 -9.515625 C 17.265625 -7.097656 16.78125 -5.054688 15.8125 -3.390625 C 14.5 -1.128906 12.472656 0 9.734375 0 Z M 12.546875 -13.515625 C 11.960938 -14.492188 10.8125 -14.984375 9.09375 -14.984375 L 5.59375 -14.984375 L 5.59375 -3.15625 L 9.09375 -3.15625 C 10.882812 -3.15625 12.128906 -4.035156 12.828125 -5.796875 C 13.210938 -6.765625 13.40625 -7.914062 13.40625 -9.25 C 13.40625 -11.09375 13.117188 -12.515625 12.546875 -13.515625 Z M 12.546875 -13.515625 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-0-4&quot;&gt;
&lt;path d=&quot;M 1.625 -18.140625 L 5.390625 -18.140625 L 5.390625 0 L 1.625 0 Z M 1.625 -18.140625 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-0-5&quot;&gt;
&lt;path d=&quot;M 5.390625 0 L 1.859375 0 L 1.859375 -18.140625 L 7.375 -18.140625 L 10.671875 -3.875 L 13.9375 -18.140625 L 19.390625 -18.140625 L 19.390625 0 L 15.859375 0 L 15.859375 -12.265625 C 15.859375 -12.617188 15.863281 -13.113281 15.875 -13.75 C 15.882812 -14.382812 15.890625 -14.875 15.890625 -15.21875 L 12.453125 0 L 8.78125 0 L 5.359375 -15.21875 C 5.359375 -14.875 5.363281 -14.382812 5.375 -13.75 C 5.382812 -13.113281 5.390625 -12.617188 5.390625 -12.265625 Z M 5.390625 0 &quot;/&gt;
&lt;/g&gt;
&lt;/g&gt;
&lt;clipPath id=&quot;clip-0&quot;&gt;
&lt;path clip-rule=&quot;nonzero&quot; d=&quot;M 0 0 L 595.921875 0 L 595.921875 421 L 0 421 Z M 0 0 &quot;/&gt;
&lt;/clipPath&gt;
&lt;clipPath id=&quot;clip-1&quot;&gt;
&lt;path clip-rule=&quot;nonzero&quot; d=&quot;M 74.128906 74 L 147 74 L 147 93.613281 L 74.128906 93.613281 Z M 74.128906 74 &quot;/&gt;
&lt;/clipPath&gt;
&lt;clipPath id=&quot;clip-2&quot;&gt;
&lt;path clip-rule=&quot;nonzero&quot; d=&quot;M 76.328125 73.714844 L 79 73.714844 L 79 76.4375 L 76.328125 76.4375 Z M 76.328125 73.714844 &quot;/&gt;
&lt;/clipPath&gt;
&lt;clipPath id=&quot;clip-3&quot;&gt;
&lt;path clip-rule=&quot;nonzero&quot; d=&quot;M 76.519531 75.046875 L 77.730469 73.835938 L 78.941406 75.046875 L 77.730469 76.257812 Z M 76.519531 75.046875 &quot;/&gt;
&lt;/clipPath&gt;
&lt;clipPath id=&quot;clip-4&quot;&gt;
&lt;path clip-rule=&quot;nonzero&quot; d=&quot;M 77.710938 77.46875 L 75.296875 75.054688 L 77.710938 72.625 L 80.144531 75.054688 Z M 77.710938 77.46875 &quot;/&gt;
&lt;/clipPath&gt;
&lt;linearGradient id=&quot;linear-pattern-0&quot; gradientUnits=&quot;userSpaceOnUse&quot; x1=&quot;-46.692072&quot; y1=&quot;700.74908&quot; x2=&quot;-42.047213&quot; y2=&quot;700.74908&quot; gradientTransform=&quot;matrix(0.521533, 0.521225, 0.521533, -0.521225, -264.60077, 463.427457)&quot;&gt;
&lt;stop offset=&quot;0&quot; stop-color=&quot;rgb(0%, 0%, 0%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.125&quot; stop-color=&quot;rgb(0%, 0%, 0%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.15625&quot; stop-color=&quot;rgb(0%, 0%, 0%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.164062&quot; stop-color=&quot;rgb(0%, 0%, 0%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.167969&quot; stop-color=&quot;rgb(0%, 0.198364%, 0.349426%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.171875&quot; stop-color=&quot;rgb(0%, 0.398254%, 0.698853%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.175781&quot; stop-color=&quot;rgb(0%, 0.737%, 1.292419%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.179688&quot; stop-color=&quot;rgb(0%, 1.077271%, 1.885986%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.183594&quot; stop-color=&quot;rgb(0%, 1.416016%, 2.479553%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.1875&quot; stop-color=&quot;rgb(0%, 1.756287%, 3.074646%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.191406&quot; stop-color=&quot;rgb(0%, 2.087402%, 3.656006%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.195312&quot; stop-color=&quot;rgb(0%, 2.418518%, 4.237366%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.199219&quot; stop-color=&quot;rgb(0%, 2.74353%, 4.811096%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.203125&quot; stop-color=&quot;rgb(0%, 3.070068%, 5.384827%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.207031&quot; stop-color=&quot;rgb(0%, 3.396606%, 5.958557%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.210937&quot; stop-color=&quot;rgb(0%, 3.723145%, 6.533813%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.214844&quot; stop-color=&quot;rgb(0%, 4.048157%, 7.107544%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.21875&quot; stop-color=&quot;rgb(0%, 4.374695%, 7.681274%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.222656&quot; stop-color=&quot;rgb(0%, 4.701233%, 8.255005%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.226562&quot; stop-color=&quot;rgb(0%, 5.027771%, 8.828735%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.230469&quot; stop-color=&quot;rgb(0%, 5.354309%, 9.402466%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.234375&quot; stop-color=&quot;rgb(0%, 5.680847%, 9.977722%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.238281&quot; stop-color=&quot;rgb(0%, 6.005859%, 10.551453%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.242188&quot; stop-color=&quot;rgb(0%, 6.332397%, 11.125183%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.246094&quot; stop-color=&quot;rgb(0%, 6.658936%, 11.698914%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.25&quot; stop-color=&quot;rgb(0%, 6.985474%, 12.27417%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.253906&quot; stop-color=&quot;rgb(0%, 7.310486%, 12.8479%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.257812&quot; stop-color=&quot;rgb(0%, 7.637024%, 13.421631%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.261719&quot; stop-color=&quot;rgb(0%, 7.963562%, 13.995361%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.265625&quot; stop-color=&quot;rgb(0%, 8.2901%, 14.570618%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.269531&quot; stop-color=&quot;rgb(0%, 8.615112%, 15.144348%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.273438&quot; stop-color=&quot;rgb(0%, 8.94165%, 15.718079%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.277344&quot; stop-color=&quot;rgb(0%, 9.268188%, 16.291809%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.28125&quot; stop-color=&quot;rgb(0%, 9.594727%, 16.867065%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.285156&quot; stop-color=&quot;rgb(0%, 9.919739%, 17.440796%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.289062&quot; stop-color=&quot;rgb(0%, 10.246277%, 18.014526%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.292969&quot; stop-color=&quot;rgb(0%, 10.572815%, 18.588257%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.296875&quot; stop-color=&quot;rgb(0%, 10.899353%, 19.163513%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.300781&quot; stop-color=&quot;rgb(0%, 11.224365%, 19.737244%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.304687&quot; stop-color=&quot;rgb(0%, 11.550903%, 20.310974%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.308594&quot; stop-color=&quot;rgb(0%, 11.877441%, 20.884705%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.3125&quot; stop-color=&quot;rgb(0%, 12.203979%, 21.459961%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.316406&quot; stop-color=&quot;rgb(0%, 12.530518%, 22.033691%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.320312&quot; stop-color=&quot;rgb(0%, 12.857056%, 22.607422%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.324219&quot; stop-color=&quot;rgb(0%, 13.182068%, 23.181152%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.328125&quot; stop-color=&quot;rgb(0%, 13.508606%, 23.756409%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.332031&quot; stop-color=&quot;rgb(0%, 13.835144%, 24.330139%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.335938&quot; stop-color=&quot;rgb(0%, 14.161682%, 24.90387%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.339844&quot; stop-color=&quot;rgb(0%, 14.457703%, 25.439453%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.34375&quot; stop-color=&quot;rgb(0%, 14.753723%, 25.976562%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.347656&quot; stop-color=&quot;rgb(0%, 15.0177%, 26.472473%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.351562&quot; stop-color=&quot;rgb(0%, 15.283203%, 26.968384%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.355469&quot; stop-color=&quot;rgb(0%, 15.54718%, 27.464294%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.359375&quot; stop-color=&quot;rgb(0%, 15.812683%, 27.960205%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.363281&quot; stop-color=&quot;rgb(0%, 16.07666%, 28.45459%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.367188&quot; stop-color=&quot;rgb(0%, 16.342163%, 28.9505%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.371094&quot; stop-color=&quot;rgb(0%, 16.60614%, 29.446411%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.375&quot; stop-color=&quot;rgb(0%, 16.871643%, 29.942322%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.378906&quot; stop-color=&quot;rgb(0%, 17.13562%, 30.438232%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.382812&quot; stop-color=&quot;rgb(0%, 17.401123%, 30.934143%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.386719&quot; stop-color=&quot;rgb(0%, 17.6651%, 31.428528%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.390625&quot; stop-color=&quot;rgb(0%, 17.930603%, 31.924438%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.394531&quot; stop-color=&quot;rgb(0%, 18.19458%, 32.420349%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.398438&quot; stop-color=&quot;rgb(0%, 18.460083%, 32.91626%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.402344&quot; stop-color=&quot;rgb(0%, 18.72406%, 33.41217%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.40625&quot; stop-color=&quot;rgb(0%, 18.989563%, 33.908081%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.410156&quot; stop-color=&quot;rgb(0%, 19.25354%, 34.403992%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.414062&quot; stop-color=&quot;rgb(0%, 19.519043%, 34.899902%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.417969&quot; stop-color=&quot;rgb(0%, 19.78302%, 35.394287%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.421875&quot; stop-color=&quot;rgb(0%, 20.048523%, 35.890198%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.425781&quot; stop-color=&quot;rgb(0%, 20.3125%, 36.386108%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.429688&quot; stop-color=&quot;rgb(0%, 20.578003%, 36.882019%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.433594&quot; stop-color=&quot;rgb(0%, 20.84198%, 37.37793%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.4375&quot; stop-color=&quot;rgb(0%, 21.107483%, 37.87384%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.441406&quot; stop-color=&quot;rgb(0%, 21.37146%, 38.368225%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.445312&quot; stop-color=&quot;rgb(0%, 21.636963%, 38.864136%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.449219&quot; stop-color=&quot;rgb(0%, 21.90094%, 39.360046%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.453125&quot; stop-color=&quot;rgb(0%, 22.166443%, 39.855957%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.457031&quot; stop-color=&quot;rgb(0%, 22.431946%, 40.351868%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.460937&quot; stop-color=&quot;rgb(0%, 22.697449%, 40.847778%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.464844&quot; stop-color=&quot;rgb(0%, 22.961426%, 41.343689%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.46875&quot; stop-color=&quot;rgb(0%, 23.226929%, 41.8396%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.472656&quot; stop-color=&quot;rgb(0%, 23.490906%, 42.333984%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.476562&quot; stop-color=&quot;rgb(0%, 23.756409%, 42.829895%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.480469&quot; stop-color=&quot;rgb(0%, 23.991394%, 43.254089%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.484375&quot; stop-color=&quot;rgb(0%, 24.226379%, 43.67981%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.488281&quot; stop-color=&quot;rgb(0%, 24.450684%, 44.078064%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.492187&quot; stop-color=&quot;rgb(0%, 24.676514%, 44.477844%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.496094&quot; stop-color=&quot;rgb(0%, 24.900818%, 44.876099%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.5&quot; stop-color=&quot;rgb(0%, 25.125122%, 45.275879%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.503906&quot; stop-color=&quot;rgb(0%, 25.349426%, 45.674133%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.507812&quot; stop-color=&quot;rgb(0%, 25.575256%, 46.072388%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.511719&quot; stop-color=&quot;rgb(0%, 25.799561%, 46.470642%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.515625&quot; stop-color=&quot;rgb(0%, 26.023865%, 46.870422%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.519531&quot; stop-color=&quot;rgb(0%, 26.248169%, 47.268677%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.523438&quot; stop-color=&quot;rgb(0%, 26.473999%, 47.666931%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.527344&quot; stop-color=&quot;rgb(0%, 26.698303%, 48.065186%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.53125&quot; stop-color=&quot;rgb(0%, 26.922607%, 48.464966%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.535156&quot; stop-color=&quot;rgb(0%, 27.146912%, 48.86322%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.539062&quot; stop-color=&quot;rgb(0%, 27.371216%, 49.261475%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.542969&quot; stop-color=&quot;rgb(0%, 27.59552%, 49.659729%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.546875&quot; stop-color=&quot;rgb(0%, 27.82135%, 50.059509%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.550781&quot; stop-color=&quot;rgb(0%, 28.045654%, 50.457764%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.554688&quot; stop-color=&quot;rgb(0%, 28.269958%, 50.856018%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.558594&quot; stop-color=&quot;rgb(0%, 28.494263%, 51.254272%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.5625&quot; stop-color=&quot;rgb(0%, 28.720093%, 51.654053%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.566406&quot; stop-color=&quot;rgb(0%, 28.944397%, 52.052307%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.570312&quot; stop-color=&quot;rgb(0%, 29.168701%, 52.452087%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.574219&quot; stop-color=&quot;rgb(0%, 29.393005%, 52.850342%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.578125&quot; stop-color=&quot;rgb(0%, 29.618835%, 53.248596%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.582031&quot; stop-color=&quot;rgb(0%, 29.84314%, 53.646851%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.585938&quot; stop-color=&quot;rgb(0%, 30.067444%, 54.046631%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.589844&quot; stop-color=&quot;rgb(0%, 30.291748%, 54.444885%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.59375&quot; stop-color=&quot;rgb(0%, 30.517578%, 54.84314%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.597656&quot; stop-color=&quot;rgb(0%, 30.741882%, 55.241394%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.601562&quot; stop-color=&quot;rgb(0%, 30.966187%, 55.641174%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.605469&quot; stop-color=&quot;rgb(0%, 31.132507%, 55.92804%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.609375&quot; stop-color=&quot;rgb(0%, 31.300354%, 56.216431%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.613281&quot; stop-color=&quot;rgb(0%, 31.462097%, 56.495667%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.617188&quot; stop-color=&quot;rgb(0%, 31.62384%, 56.774902%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.621094&quot; stop-color=&quot;rgb(0%, 31.785583%, 57.054138%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.625&quot; stop-color=&quot;rgb(0%, 31.948853%, 57.333374%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.628906&quot; stop-color=&quot;rgb(0%, 32.110596%, 57.61261%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.632812&quot; stop-color=&quot;rgb(0%, 32.272339%, 57.891846%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.636719&quot; stop-color=&quot;rgb(0%, 32.434082%, 58.169556%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.640625&quot; stop-color=&quot;rgb(0%, 32.597351%, 58.448792%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.644531&quot; stop-color=&quot;rgb(0%, 32.759094%, 58.728027%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.648437&quot; stop-color=&quot;rgb(0%, 32.920837%, 59.007263%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.652344&quot; stop-color=&quot;rgb(0%, 33.082581%, 59.286499%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.65625&quot; stop-color=&quot;rgb(0%, 33.24585%, 59.565735%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.660156&quot; stop-color=&quot;rgb(0%, 33.407593%, 59.844971%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.664062&quot; stop-color=&quot;rgb(0%, 33.570862%, 60.124207%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.667969&quot; stop-color=&quot;rgb(0%, 33.732605%, 60.401917%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.671875&quot; stop-color=&quot;rgb(0%, 33.894348%, 60.681152%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.675781&quot; stop-color=&quot;rgb(0%, 34.056091%, 60.960388%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.679687&quot; stop-color=&quot;rgb(0%, 34.21936%, 61.239624%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.683594&quot; stop-color=&quot;rgb(0%, 34.381104%, 61.51886%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.6875&quot; stop-color=&quot;rgb(0%, 34.542847%, 61.798096%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.691406&quot; stop-color=&quot;rgb(0%, 34.70459%, 62.077332%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.695312&quot; stop-color=&quot;rgb(0%, 34.867859%, 62.356567%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.699219&quot; stop-color=&quot;rgb(0%, 35.029602%, 62.635803%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.703125&quot; stop-color=&quot;rgb(0%, 35.191345%, 62.915039%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.710937&quot; stop-color=&quot;rgb(0%, 35.30426%, 63.108826%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.71875&quot; stop-color=&quot;rgb(0%, 35.50415%, 63.458252%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.726562&quot; stop-color=&quot;rgb(0%, 35.679626%, 63.764954%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.734375&quot; stop-color=&quot;rgb(0%, 35.855103%, 64.071655%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.742187&quot; stop-color=&quot;rgb(0%, 36.030579%, 64.379883%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.75&quot; stop-color=&quot;rgb(0%, 36.206055%, 64.686584%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.757812&quot; stop-color=&quot;rgb(0%, 36.381531%, 64.993286%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.765625&quot; stop-color=&quot;rgb(0%, 36.557007%, 65.301514%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.773438&quot; stop-color=&quot;rgb(0%, 36.732483%, 65.608215%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.78125&quot; stop-color=&quot;rgb(0%, 36.859131%, 65.830994%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.8125&quot; stop-color=&quot;rgb(0%, 36.898804%, 65.899658%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.875&quot; stop-color=&quot;rgb(0%, 36.898804%, 65.899658%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;1&quot; stop-color=&quot;rgb(0%, 36.898804%, 65.899658%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;/linearGradient&gt;
&lt;clipPath id=&quot;clip-5&quot;&gt;
&lt;path clip-rule=&quot;nonzero&quot; d=&quot;M 81.195312 74.296875 L 83.726562 74.296875 L 83.726562 76.824219 L 81.195312 76.824219 Z M 81.195312 74.296875 &quot;/&gt;
&lt;/clipPath&gt;
&lt;clipPath id=&quot;clip-6&quot;&gt;
&lt;path clip-rule=&quot;nonzero&quot; d=&quot;M 81.242188 75.609375 L 82.453125 74.398438 L 83.664062 75.609375 L 82.453125 76.820312 Z M 81.242188 75.609375 &quot;/&gt;
&lt;/clipPath&gt;
&lt;clipPath id=&quot;clip-7&quot;&gt;
&lt;path clip-rule=&quot;nonzero&quot; d=&quot;M 82.460938 78.011719 L 80.046875 75.601562 L 82.460938 73.1875 L 84.875 75.601562 Z M 82.460938 78.011719 &quot;/&gt;
&lt;/clipPath&gt;
&lt;linearGradient id=&quot;linear-pattern-1&quot; gradientUnits=&quot;userSpaceOnUse&quot; x1=&quot;-43.428943&quot; y1=&quot;703.34412&quot; x2=&quot;-38.783404&quot; y2=&quot;703.34412&quot; gradientTransform=&quot;matrix(0.521455, 0.521147, 0.521455, -0.521147, -262.86603, 463.569516)&quot;&gt;
&lt;stop offset=&quot;0&quot; stop-color=&quot;rgb(0%, 0%, 0%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.125&quot; stop-color=&quot;rgb(0%, 0%, 0%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.15625&quot; stop-color=&quot;rgb(0%, 0%, 0%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.171875&quot; stop-color=&quot;rgb(0%, 0.0320435%, 0.0564575%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.175781&quot; stop-color=&quot;rgb(0%, 0.402832%, 0.708008%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.179688&quot; stop-color=&quot;rgb(0%, 0.743103%, 1.301575%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.183594&quot; stop-color=&quot;rgb(0%, 1.081848%, 1.895142%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.1875&quot; stop-color=&quot;rgb(0%, 1.422119%, 2.490234%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.191406&quot; stop-color=&quot;rgb(0%, 1.759338%, 3.08075%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.195312&quot; stop-color=&quot;rgb(0%, 2.098083%, 3.672791%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.199219&quot; stop-color=&quot;rgb(0%, 2.423096%, 4.246521%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.203125&quot; stop-color=&quot;rgb(0%, 2.749634%, 4.820251%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.207031&quot; stop-color=&quot;rgb(0%, 3.076172%, 5.393982%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.210938&quot; stop-color=&quot;rgb(0%, 3.40271%, 5.969238%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.214844&quot; stop-color=&quot;rgb(0%, 3.727722%, 6.542969%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.21875&quot; stop-color=&quot;rgb(0%, 4.05426%, 7.116699%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.222656&quot; stop-color=&quot;rgb(0%, 4.380798%, 7.69043%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.226562&quot; stop-color=&quot;rgb(0%, 4.707336%, 8.265686%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.230469&quot; stop-color=&quot;rgb(0%, 5.033875%, 8.839417%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.234375&quot; stop-color=&quot;rgb(0%, 5.360413%, 9.413147%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.238281&quot; stop-color=&quot;rgb(0%, 5.685425%, 9.986877%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.242188&quot; stop-color=&quot;rgb(0%, 6.011963%, 10.562134%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.246094&quot; stop-color=&quot;rgb(0%, 6.338501%, 11.135864%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.25&quot; stop-color=&quot;rgb(0%, 6.665039%, 11.709595%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.253906&quot; stop-color=&quot;rgb(0%, 6.990051%, 12.283325%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.257812&quot; stop-color=&quot;rgb(0%, 7.316589%, 12.858582%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.261719&quot; stop-color=&quot;rgb(0%, 7.643127%, 13.432312%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.265625&quot; stop-color=&quot;rgb(0%, 7.969666%, 14.007568%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.269531&quot; stop-color=&quot;rgb(0%, 8.294678%, 14.581299%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.273438&quot; stop-color=&quot;rgb(0%, 8.621216%, 15.155029%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.277344&quot; stop-color=&quot;rgb(0%, 8.947754%, 15.72876%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.28125&quot; stop-color=&quot;rgb(0%, 9.274292%, 16.304016%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.285156&quot; stop-color=&quot;rgb(0%, 9.60083%, 16.877747%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.289062&quot; stop-color=&quot;rgb(0%, 9.927368%, 17.451477%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.292969&quot; stop-color=&quot;rgb(0%, 10.25238%, 18.025208%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.296875&quot; stop-color=&quot;rgb(0%, 10.578918%, 18.600464%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.300781&quot; stop-color=&quot;rgb(0%, 10.905457%, 19.174194%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.304688&quot; stop-color=&quot;rgb(0%, 11.231995%, 19.747925%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.308594&quot; stop-color=&quot;rgb(0%, 11.557007%, 20.321655%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.3125&quot; stop-color=&quot;rgb(0%, 11.883545%, 20.896912%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.316406&quot; stop-color=&quot;rgb(0%, 12.210083%, 21.470642%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.320312&quot; stop-color=&quot;rgb(0%, 12.536621%, 22.045898%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.324219&quot; stop-color=&quot;rgb(0%, 12.863159%, 22.619629%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.328125&quot; stop-color=&quot;rgb(0%, 13.189697%, 23.193359%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.332031&quot; stop-color=&quot;rgb(0%, 13.514709%, 23.76709%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.335938&quot; stop-color=&quot;rgb(0%, 13.841248%, 24.342346%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.339844&quot; stop-color=&quot;rgb(0%, 14.167786%, 24.916077%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.34375&quot; stop-color=&quot;rgb(0%, 14.494324%, 25.489807%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.347656&quot; stop-color=&quot;rgb(0%, 14.759827%, 25.985718%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.351562&quot; stop-color=&quot;rgb(0%, 15.02533%, 26.483154%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.355469&quot; stop-color=&quot;rgb(0%, 15.289307%, 26.979065%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.359375&quot; stop-color=&quot;rgb(0%, 15.55481%, 27.474976%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.363281&quot; stop-color=&quot;rgb(0%, 15.818787%, 27.96936%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.367188&quot; stop-color=&quot;rgb(0%, 16.08429%, 28.465271%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.371094&quot; stop-color=&quot;rgb(0%, 16.348267%, 28.961182%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.375&quot; stop-color=&quot;rgb(0%, 16.61377%, 29.457092%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.378906&quot; stop-color=&quot;rgb(0%, 16.877747%, 29.953003%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.382812&quot; stop-color=&quot;rgb(0%, 17.14325%, 30.448914%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.386719&quot; stop-color=&quot;rgb(0%, 17.407227%, 30.944824%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.390625&quot; stop-color=&quot;rgb(0%, 17.672729%, 31.440735%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.394531&quot; stop-color=&quot;rgb(0%, 17.936707%, 31.936646%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.398437&quot; stop-color=&quot;rgb(0%, 18.202209%, 32.432556%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.402344&quot; stop-color=&quot;rgb(0%, 18.466187%, 32.926941%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.40625&quot; stop-color=&quot;rgb(0%, 18.731689%, 33.422852%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.410156&quot; stop-color=&quot;rgb(0%, 18.995667%, 33.918762%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.414062&quot; stop-color=&quot;rgb(0%, 19.261169%, 34.414673%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.417969&quot; stop-color=&quot;rgb(0%, 19.525146%, 34.910583%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.421875&quot; stop-color=&quot;rgb(0%, 19.790649%, 35.406494%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.425781&quot; stop-color=&quot;rgb(0%, 20.054626%, 35.902405%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.429688&quot; stop-color=&quot;rgb(0%, 20.320129%, 36.398315%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.433594&quot; stop-color=&quot;rgb(0%, 20.584106%, 36.894226%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.4375&quot; stop-color=&quot;rgb(0%, 20.849609%, 37.390137%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.441406&quot; stop-color=&quot;rgb(0%, 21.113586%, 37.884521%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.445312&quot; stop-color=&quot;rgb(0%, 21.379089%, 38.380432%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.449219&quot; stop-color=&quot;rgb(0%, 21.643066%, 38.876343%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.453125&quot; stop-color=&quot;rgb(0%, 21.908569%, 39.372253%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.457031&quot; stop-color=&quot;rgb(0%, 22.172546%, 39.868164%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.460938&quot; stop-color=&quot;rgb(0%, 22.438049%, 40.364075%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.464844&quot; stop-color=&quot;rgb(0%, 22.702026%, 40.859985%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.46875&quot; stop-color=&quot;rgb(0%, 22.967529%, 41.355896%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.472656&quot; stop-color=&quot;rgb(0%, 23.231506%, 41.850281%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.476562&quot; stop-color=&quot;rgb(0%, 23.497009%, 42.346191%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.480469&quot; stop-color=&quot;rgb(0%, 23.751831%, 42.819214%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.484375&quot; stop-color=&quot;rgb(0%, 24.008179%, 43.292236%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.488281&quot; stop-color=&quot;rgb(0%, 24.232483%, 43.690491%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.492188&quot; stop-color=&quot;rgb(0%, 24.456787%, 44.088745%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.496094&quot; stop-color=&quot;rgb(0%, 24.681091%, 44.487%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.5&quot; stop-color=&quot;rgb(0%, 24.906921%, 44.88678%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.503906&quot; stop-color=&quot;rgb(0%, 25.131226%, 45.285034%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.507812&quot; stop-color=&quot;rgb(0%, 25.35553%, 45.683289%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.511719&quot; stop-color=&quot;rgb(0%, 25.579834%, 46.081543%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.515625&quot; stop-color=&quot;rgb(0%, 25.805664%, 46.481323%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.519531&quot; stop-color=&quot;rgb(0%, 26.029968%, 46.879578%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.523437&quot; stop-color=&quot;rgb(0%, 26.254272%, 47.279358%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.527344&quot; stop-color=&quot;rgb(0%, 26.478577%, 47.677612%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.53125&quot; stop-color=&quot;rgb(0%, 26.704407%, 48.075867%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.535156&quot; stop-color=&quot;rgb(0%, 26.928711%, 48.474121%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.539062&quot; stop-color=&quot;rgb(0%, 27.153015%, 48.873901%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.542969&quot; stop-color=&quot;rgb(0%, 27.377319%, 49.272156%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.546875&quot; stop-color=&quot;rgb(0%, 27.603149%, 49.671936%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.550781&quot; stop-color=&quot;rgb(0%, 27.827454%, 50.07019%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.554688&quot; stop-color=&quot;rgb(0%, 28.051758%, 50.468445%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.558594&quot; stop-color=&quot;rgb(0%, 28.276062%, 50.866699%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.5625&quot; stop-color=&quot;rgb(0%, 28.501892%, 51.266479%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.566406&quot; stop-color=&quot;rgb(0%, 28.726196%, 51.664734%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.570312&quot; stop-color=&quot;rgb(0%, 28.9505%, 52.062988%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.574219&quot; stop-color=&quot;rgb(0%, 29.174805%, 52.461243%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.578125&quot; stop-color=&quot;rgb(0%, 29.400635%, 52.861023%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.582031&quot; stop-color=&quot;rgb(0%, 29.624939%, 53.259277%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.585938&quot; stop-color=&quot;rgb(0%, 29.849243%, 53.659058%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.589844&quot; stop-color=&quot;rgb(0%, 30.073547%, 54.057312%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.59375&quot; stop-color=&quot;rgb(0%, 30.299377%, 54.455566%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.597656&quot; stop-color=&quot;rgb(0%, 30.523682%, 54.853821%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.601562&quot; stop-color=&quot;rgb(0%, 30.747986%, 55.253601%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.605469&quot; stop-color=&quot;rgb(0%, 30.944824%, 55.59845%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.609375&quot; stop-color=&quot;rgb(0%, 31.141663%, 55.944824%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.613281&quot; stop-color=&quot;rgb(0%, 31.303406%, 56.22406%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.617187&quot; stop-color=&quot;rgb(0%, 31.466675%, 56.503296%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.621094&quot; stop-color=&quot;rgb(0%, 31.628418%, 56.782532%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.625&quot; stop-color=&quot;rgb(0%, 31.791687%, 57.061768%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.628906&quot; stop-color=&quot;rgb(0%, 31.95343%, 57.341003%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.632812&quot; stop-color=&quot;rgb(0%, 32.115173%, 57.620239%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.636719&quot; stop-color=&quot;rgb(0%, 32.276917%, 57.899475%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.640625&quot; stop-color=&quot;rgb(0%, 32.440186%, 58.178711%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.644531&quot; stop-color=&quot;rgb(0%, 32.601929%, 58.457947%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.648438&quot; stop-color=&quot;rgb(0%, 32.763672%, 58.737183%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.652344&quot; stop-color=&quot;rgb(0%, 32.925415%, 59.014893%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.65625&quot; stop-color=&quot;rgb(0%, 33.088684%, 59.294128%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.660156&quot; stop-color=&quot;rgb(0%, 33.250427%, 59.573364%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.664062&quot; stop-color=&quot;rgb(0%, 33.41217%, 59.8526%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.667969&quot; stop-color=&quot;rgb(0%, 33.573914%, 60.131836%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.671875&quot; stop-color=&quot;rgb(0%, 33.737183%, 60.411072%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.675781&quot; stop-color=&quot;rgb(0%, 33.898926%, 60.690308%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.679688&quot; stop-color=&quot;rgb(0%, 34.062195%, 60.969543%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.683594&quot; stop-color=&quot;rgb(0%, 34.223938%, 61.248779%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.6875&quot; stop-color=&quot;rgb(0%, 34.385681%, 61.528015%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.691406&quot; stop-color=&quot;rgb(0%, 34.547424%, 61.807251%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.695312&quot; stop-color=&quot;rgb(0%, 34.710693%, 62.086487%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.699219&quot; stop-color=&quot;rgb(0%, 34.872437%, 62.364197%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.703125&quot; stop-color=&quot;rgb(0%, 35.03418%, 62.643433%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.707031&quot; stop-color=&quot;rgb(0%, 35.18219%, 62.89978%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.710938&quot; stop-color=&quot;rgb(0%, 35.331726%, 63.156128%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.71875&quot; stop-color=&quot;rgb(0%, 35.418701%, 63.308716%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.726562&quot; stop-color=&quot;rgb(0%, 35.594177%, 63.616943%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.734375&quot; stop-color=&quot;rgb(0%, 35.769653%, 63.923645%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.742188&quot; stop-color=&quot;rgb(0%, 35.945129%, 64.230347%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.75&quot; stop-color=&quot;rgb(0%, 36.120605%, 64.538574%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.757812&quot; stop-color=&quot;rgb(0%, 36.296082%, 64.845276%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.765625&quot; stop-color=&quot;rgb(0%, 36.471558%, 65.151978%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.773438&quot; stop-color=&quot;rgb(0%, 36.647034%, 65.460205%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.78125&quot; stop-color=&quot;rgb(0%, 36.816406%, 65.756226%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.8125&quot; stop-color=&quot;rgb(0%, 36.898804%, 65.899658%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.875&quot; stop-color=&quot;rgb(0%, 36.898804%, 65.899658%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;1&quot; stop-color=&quot;rgb(0%, 36.898804%, 65.899658%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;/linearGradient&gt;
&lt;clipPath id=&quot;clip-8&quot;&gt;
&lt;path clip-rule=&quot;nonzero&quot; d=&quot;M 79.441406 77.605469 L 82 77.605469 L 82 80.132812 L 79.441406 80.132812 Z M 79.441406 77.605469 &quot;/&gt;
&lt;/clipPath&gt;
&lt;clipPath id=&quot;clip-9&quot;&gt;
&lt;path clip-rule=&quot;nonzero&quot; d=&quot;M 79.578125 78.910156 L 80.789062 77.699219 L 82 78.910156 L 80.789062 80.121094 Z M 79.578125 78.910156 &quot;/&gt;
&lt;/clipPath&gt;
&lt;clipPath id=&quot;clip-10&quot;&gt;
&lt;path clip-rule=&quot;nonzero&quot; d=&quot;M 80.785156 81.320312 L 78.371094 78.90625 L 80.785156 76.476562 L 83.199219 78.90625 Z M 80.785156 81.320312 &quot;/&gt;
&lt;/clipPath&gt;
&lt;linearGradient id=&quot;linear-pattern-2&quot; gradientUnits=&quot;userSpaceOnUse&quot; x1=&quot;-42.39617&quot; y1=&quot;700.2641&quot; x2=&quot;-37.751318&quot; y2=&quot;700.2641&quot; gradientTransform=&quot;matrix(0.521533, 0.521225, 0.521533, -0.521225, -263.51605, 464.787473)&quot;&gt;
&lt;stop offset=&quot;0&quot; stop-color=&quot;rgb(0%, 0%, 0%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.125&quot; stop-color=&quot;rgb(0%, 0%, 0%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.15625&quot; stop-color=&quot;rgb(0%, 0%, 0%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.164062&quot; stop-color=&quot;rgb(0%, 0%, 0%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.167969&quot; stop-color=&quot;rgb(0%, 0.210571%, 0.370789%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.171875&quot; stop-color=&quot;rgb(0%, 0.422668%, 0.741577%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.175781&quot; stop-color=&quot;rgb(0%, 0.761414%, 1.335144%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.179688&quot; stop-color=&quot;rgb(0%, 1.101685%, 1.928711%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.183594&quot; stop-color=&quot;rgb(0%, 1.44043%, 2.522278%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.1875&quot; stop-color=&quot;rgb(0%, 1.780701%, 3.117371%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.191406&quot; stop-color=&quot;rgb(0%, 2.110291%, 3.697205%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.195312&quot; stop-color=&quot;rgb(0%, 2.441406%, 4.277039%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.199219&quot; stop-color=&quot;rgb(0%, 2.767944%, 4.850769%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.203125&quot; stop-color=&quot;rgb(0%, 3.094482%, 5.426025%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.207031&quot; stop-color=&quot;rgb(0%, 3.419495%, 5.999756%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.210938&quot; stop-color=&quot;rgb(0%, 3.746033%, 6.573486%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.214844&quot; stop-color=&quot;rgb(0%, 4.072571%, 7.147217%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.21875&quot; stop-color=&quot;rgb(0%, 4.399109%, 7.722473%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.222656&quot; stop-color=&quot;rgb(0%, 4.724121%, 8.296204%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.226562&quot; stop-color=&quot;rgb(0%, 5.050659%, 8.869934%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.230469&quot; stop-color=&quot;rgb(0%, 5.377197%, 9.443665%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.234375&quot; stop-color=&quot;rgb(0%, 5.703735%, 10.018921%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.238281&quot; stop-color=&quot;rgb(0%, 6.028748%, 10.592651%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.242188&quot; stop-color=&quot;rgb(0%, 6.355286%, 11.166382%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.246094&quot; stop-color=&quot;rgb(0%, 6.681824%, 11.740112%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.25&quot; stop-color=&quot;rgb(0%, 7.008362%, 12.315369%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.253906&quot; stop-color=&quot;rgb(0%, 7.333374%, 12.889099%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.257812&quot; stop-color=&quot;rgb(0%, 7.659912%, 13.46283%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.261719&quot; stop-color=&quot;rgb(0%, 7.98645%, 14.03656%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.265625&quot; stop-color=&quot;rgb(0%, 8.312988%, 14.610291%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.269531&quot; stop-color=&quot;rgb(0%, 8.638%, 15.184021%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.273438&quot; stop-color=&quot;rgb(0%, 8.964539%, 15.759277%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.277344&quot; stop-color=&quot;rgb(0%, 9.291077%, 16.333008%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.28125&quot; stop-color=&quot;rgb(0%, 9.617615%, 16.906738%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.285156&quot; stop-color=&quot;rgb(0%, 9.942627%, 17.480469%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.289062&quot; stop-color=&quot;rgb(0%, 10.269165%, 18.055725%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.292969&quot; stop-color=&quot;rgb(0%, 10.595703%, 18.629456%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.296875&quot; stop-color=&quot;rgb(0%, 10.922241%, 19.203186%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.300781&quot; stop-color=&quot;rgb(0%, 11.247253%, 19.776917%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.304688&quot; stop-color=&quot;rgb(0%, 11.573792%, 20.352173%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.308594&quot; stop-color=&quot;rgb(0%, 11.90033%, 20.925903%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.3125&quot; stop-color=&quot;rgb(0%, 12.226868%, 21.499634%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.316406&quot; stop-color=&quot;rgb(0%, 12.553406%, 22.073364%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.320312&quot; stop-color=&quot;rgb(0%, 12.879944%, 22.648621%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.324219&quot; stop-color=&quot;rgb(0%, 13.204956%, 23.222351%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.328125&quot; stop-color=&quot;rgb(0%, 13.531494%, 23.796082%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.332031&quot; stop-color=&quot;rgb(0%, 13.858032%, 24.369812%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.335938&quot; stop-color=&quot;rgb(0%, 14.18457%, 24.943542%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.339844&quot; stop-color=&quot;rgb(0%, 14.477539%, 25.4776%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.34375&quot; stop-color=&quot;rgb(0%, 14.772034%, 26.011658%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.347656&quot; stop-color=&quot;rgb(0%, 15.036011%, 26.507568%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.351562&quot; stop-color=&quot;rgb(0%, 15.301514%, 27.003479%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.355469&quot; stop-color=&quot;rgb(0%, 15.565491%, 27.497864%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.359375&quot; stop-color=&quot;rgb(0%, 15.830994%, 27.993774%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.363281&quot; stop-color=&quot;rgb(0%, 16.094971%, 28.489685%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.367188&quot; stop-color=&quot;rgb(0%, 16.360474%, 28.985596%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.371094&quot; stop-color=&quot;rgb(0%, 16.624451%, 29.481506%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.375&quot; stop-color=&quot;rgb(0%, 16.889954%, 29.977417%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.378906&quot; stop-color=&quot;rgb(0%, 17.153931%, 30.471802%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.382812&quot; stop-color=&quot;rgb(0%, 17.419434%, 30.967712%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.386719&quot; stop-color=&quot;rgb(0%, 17.683411%, 31.463623%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.390625&quot; stop-color=&quot;rgb(0%, 17.948914%, 31.959534%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.394531&quot; stop-color=&quot;rgb(0%, 18.212891%, 32.455444%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.398438&quot; stop-color=&quot;rgb(0%, 18.478394%, 32.951355%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.402344&quot; stop-color=&quot;rgb(0%, 18.742371%, 33.44574%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.40625&quot; stop-color=&quot;rgb(0%, 19.007874%, 33.94165%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.410156&quot; stop-color=&quot;rgb(0%, 19.271851%, 34.437561%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.414062&quot; stop-color=&quot;rgb(0%, 19.537354%, 34.933472%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.417969&quot; stop-color=&quot;rgb(0%, 19.801331%, 35.429382%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.421875&quot; stop-color=&quot;rgb(0%, 20.066833%, 35.925293%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.425781&quot; stop-color=&quot;rgb(0%, 20.330811%, 36.421204%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.429688&quot; stop-color=&quot;rgb(0%, 20.596313%, 36.917114%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.433594&quot; stop-color=&quot;rgb(0%, 20.860291%, 37.411499%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.4375&quot; stop-color=&quot;rgb(0%, 21.125793%, 37.90741%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.441406&quot; stop-color=&quot;rgb(0%, 21.389771%, 38.40332%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.445312&quot; stop-color=&quot;rgb(0%, 21.655273%, 38.899231%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.449219&quot; stop-color=&quot;rgb(0%, 21.91925%, 39.395142%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.453125&quot; stop-color=&quot;rgb(0%, 22.184753%, 39.891052%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.457031&quot; stop-color=&quot;rgb(0%, 22.44873%, 40.385437%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.460938&quot; stop-color=&quot;rgb(0%, 22.714233%, 40.881348%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.464844&quot; stop-color=&quot;rgb(0%, 22.97821%, 41.377258%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.46875&quot; stop-color=&quot;rgb(0%, 23.243713%, 41.873169%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.472656&quot; stop-color=&quot;rgb(0%, 23.50769%, 42.36908%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.476562&quot; stop-color=&quot;rgb(0%, 23.773193%, 42.86499%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.480469&quot; stop-color=&quot;rgb(0%, 24.006653%, 43.286133%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.484375&quot; stop-color=&quot;rgb(0%, 24.241638%, 43.707275%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.488281&quot; stop-color=&quot;rgb(0%, 24.465942%, 44.10553%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.492188&quot; stop-color=&quot;rgb(0%, 24.691772%, 44.50531%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.496094&quot; stop-color=&quot;rgb(0%, 24.916077%, 44.903564%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.5&quot; stop-color=&quot;rgb(0%, 25.140381%, 45.301819%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.503906&quot; stop-color=&quot;rgb(0%, 25.364685%, 45.700073%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.507812&quot; stop-color=&quot;rgb(0%, 25.590515%, 46.099854%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.511719&quot; stop-color=&quot;rgb(0%, 25.814819%, 46.498108%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.515625&quot; stop-color=&quot;rgb(0%, 26.039124%, 46.897888%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.519531&quot; stop-color=&quot;rgb(0%, 26.263428%, 47.296143%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.523438&quot; stop-color=&quot;rgb(0%, 26.489258%, 47.694397%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.527344&quot; stop-color=&quot;rgb(0%, 26.713562%, 48.092651%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.53125&quot; stop-color=&quot;rgb(0%, 26.937866%, 48.492432%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.535156&quot; stop-color=&quot;rgb(0%, 27.16217%, 48.890686%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.539063&quot; stop-color=&quot;rgb(0%, 27.386475%, 49.28894%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.542969&quot; stop-color=&quot;rgb(0%, 27.610779%, 49.687195%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.546875&quot; stop-color=&quot;rgb(0%, 27.836609%, 50.086975%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.550781&quot; stop-color=&quot;rgb(0%, 28.060913%, 50.485229%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.554688&quot; stop-color=&quot;rgb(0%, 28.285217%, 50.883484%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.558594&quot; stop-color=&quot;rgb(0%, 28.509521%, 51.281738%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.5625&quot; stop-color=&quot;rgb(0%, 28.735352%, 51.681519%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.566406&quot; stop-color=&quot;rgb(0%, 28.959656%, 52.079773%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.570313&quot; stop-color=&quot;rgb(0%, 29.18396%, 52.478027%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.574219&quot; stop-color=&quot;rgb(0%, 29.408264%, 52.876282%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.578125&quot; stop-color=&quot;rgb(0%, 29.634094%, 53.276062%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.582031&quot; stop-color=&quot;rgb(0%, 29.858398%, 53.674316%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.585938&quot; stop-color=&quot;rgb(0%, 30.082703%, 54.072571%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.589844&quot; stop-color=&quot;rgb(0%, 30.307007%, 54.470825%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.59375&quot; stop-color=&quot;rgb(0%, 30.532837%, 54.870605%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.597656&quot; stop-color=&quot;rgb(0%, 30.757141%, 55.26886%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.601562&quot; stop-color=&quot;rgb(0%, 30.981445%, 55.66864%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.605469&quot; stop-color=&quot;rgb(0%, 31.14624%, 55.950928%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.609375&quot; stop-color=&quot;rgb(0%, 31.311035%, 56.234741%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.613281&quot; stop-color=&quot;rgb(0%, 31.472778%, 56.513977%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.617188&quot; stop-color=&quot;rgb(0%, 31.634521%, 56.793213%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.621094&quot; stop-color=&quot;rgb(0%, 31.796265%, 57.072449%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.625&quot; stop-color=&quot;rgb(0%, 31.959534%, 57.351685%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.628906&quot; stop-color=&quot;rgb(0%, 32.121277%, 57.63092%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.632813&quot; stop-color=&quot;rgb(0%, 32.284546%, 57.910156%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.636719&quot; stop-color=&quot;rgb(0%, 32.446289%, 58.189392%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.640625&quot; stop-color=&quot;rgb(0%, 32.608032%, 58.468628%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.644531&quot; stop-color=&quot;rgb(0%, 32.769775%, 58.746338%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.648438&quot; stop-color=&quot;rgb(0%, 32.933044%, 59.025574%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.652344&quot; stop-color=&quot;rgb(0%, 33.094788%, 59.30481%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.65625&quot; stop-color=&quot;rgb(0%, 33.256531%, 59.584045%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.660156&quot; stop-color=&quot;rgb(0%, 33.418274%, 59.863281%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.664063&quot; stop-color=&quot;rgb(0%, 33.581543%, 60.142517%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.667969&quot; stop-color=&quot;rgb(0%, 33.743286%, 60.421753%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.671875&quot; stop-color=&quot;rgb(0%, 33.905029%, 60.700989%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.675781&quot; stop-color=&quot;rgb(0%, 34.066772%, 60.978699%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.679688&quot; stop-color=&quot;rgb(0%, 34.230042%, 61.257935%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.683594&quot; stop-color=&quot;rgb(0%, 34.391785%, 61.53717%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.6875&quot; stop-color=&quot;rgb(0%, 34.553528%, 61.816406%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.691406&quot; stop-color=&quot;rgb(0%, 34.715271%, 62.095642%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.695313&quot; stop-color=&quot;rgb(0%, 34.87854%, 62.374878%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.699219&quot; stop-color=&quot;rgb(0%, 35.040283%, 62.654114%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.703125&quot; stop-color=&quot;rgb(0%, 35.202026%, 62.93335%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.710938&quot; stop-color=&quot;rgb(0%, 35.31189%, 63.124084%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.71875&quot; stop-color=&quot;rgb(0%, 35.510254%, 63.467407%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.726563&quot; stop-color=&quot;rgb(0%, 35.68573%, 63.775635%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.734375&quot; stop-color=&quot;rgb(0%, 35.861206%, 64.082336%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.742188&quot; stop-color=&quot;rgb(0%, 36.036682%, 64.389038%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.75&quot; stop-color=&quot;rgb(0%, 36.212158%, 64.697266%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.757813&quot; stop-color=&quot;rgb(0%, 36.387634%, 65.003967%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.765625&quot; stop-color=&quot;rgb(0%, 36.56311%, 65.310669%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.773438&quot; stop-color=&quot;rgb(0%, 36.738586%, 65.618896%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.78125&quot; stop-color=&quot;rgb(0%, 36.862183%, 65.835571%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.8125&quot; stop-color=&quot;rgb(0%, 36.898804%, 65.899658%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.875&quot; stop-color=&quot;rgb(0%, 36.898804%, 65.899658%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;1&quot; stop-color=&quot;rgb(0%, 36.898804%, 65.899658%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;/linearGradient&gt;
&lt;clipPath id=&quot;clip-11&quot;&gt;
&lt;path clip-rule=&quot;nonzero&quot; d=&quot;M 86.0625 84.800781 L 88.785156 84.800781 L 88.785156 87.332031 L 86.0625 87.332031 Z M 86.0625 84.800781 &quot;/&gt;
&lt;/clipPath&gt;
&lt;clipPath id=&quot;clip-12&quot;&gt;
&lt;path clip-rule=&quot;nonzero&quot; d=&quot;M 86.175781 86.082031 L 87.386719 84.871094 L 88.597656 86.082031 L 87.386719 87.292969 Z M 86.175781 86.082031 &quot;/&gt;
&lt;/clipPath&gt;
&lt;clipPath id=&quot;clip-13&quot;&gt;
&lt;path clip-rule=&quot;nonzero&quot; d=&quot;M 87.382812 88.496094 L 84.96875 86.085938 L 87.382812 83.671875 L 89.796875 86.085938 Z M 87.382812 88.496094 &quot;/&gt;
&lt;/clipPath&gt;
&lt;linearGradient id=&quot;linear-pattern-3&quot; gradientUnits=&quot;userSpaceOnUse&quot; x1=&quot;-33.848755&quot; y1=&quot;699.89899&quot; x2=&quot;-29.204605&quot; y2=&quot;699.89899&quot; gradientTransform=&quot;matrix(0.521611, 0.521302, 0.521611, -0.521302, -261.24622, 467.377683)&quot;&gt;
&lt;stop offset=&quot;0&quot; stop-color=&quot;rgb(0%, 0%, 0%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.125&quot; stop-color=&quot;rgb(0%, 0%, 0%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.15625&quot; stop-color=&quot;rgb(0%, 0%, 0%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.164062&quot; stop-color=&quot;rgb(0%, 0%, 0%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.167969&quot; stop-color=&quot;rgb(0%, 0.175476%, 0.308228%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.171875&quot; stop-color=&quot;rgb(0%, 0.352478%, 0.616455%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.175781&quot; stop-color=&quot;rgb(0%, 0.691223%, 1.210022%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.179687&quot; stop-color=&quot;rgb(0%, 1.029968%, 1.803589%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.183594&quot; stop-color=&quot;rgb(0%, 1.368713%, 2.397156%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.1875&quot; stop-color=&quot;rgb(0%, 1.708984%, 2.992249%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.191406&quot; stop-color=&quot;rgb(0%, 2.0401%, 3.573608%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.195312&quot; stop-color=&quot;rgb(0%, 2.372742%, 4.156494%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.199219&quot; stop-color=&quot;rgb(0%, 2.69928%, 4.730225%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.203125&quot; stop-color=&quot;rgb(0%, 3.025818%, 5.305481%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.207031&quot; stop-color=&quot;rgb(0%, 3.35083%, 5.879211%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.210938&quot; stop-color=&quot;rgb(0%, 3.677368%, 6.452942%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.214844&quot; stop-color=&quot;rgb(0%, 4.00238%, 7.026672%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.21875&quot; stop-color=&quot;rgb(0%, 4.328918%, 7.600403%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.222656&quot; stop-color=&quot;rgb(0%, 4.655457%, 8.174133%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.226562&quot; stop-color=&quot;rgb(0%, 4.981995%, 8.74939%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.230469&quot; stop-color=&quot;rgb(0%, 5.307007%, 9.32312%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.234375&quot; stop-color=&quot;rgb(0%, 5.633545%, 9.896851%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.238281&quot; stop-color=&quot;rgb(0%, 5.960083%, 10.470581%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.242188&quot; stop-color=&quot;rgb(0%, 6.286621%, 11.044312%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.246094&quot; stop-color=&quot;rgb(0%, 6.611633%, 11.618042%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.25&quot; stop-color=&quot;rgb(0%, 6.938171%, 12.193298%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.253906&quot; stop-color=&quot;rgb(0%, 7.264709%, 12.767029%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.257812&quot; stop-color=&quot;rgb(0%, 7.591248%, 13.340759%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.261719&quot; stop-color=&quot;rgb(0%, 7.91626%, 13.91449%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.265625&quot; stop-color=&quot;rgb(0%, 8.242798%, 14.48822%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.269531&quot; stop-color=&quot;rgb(0%, 8.569336%, 15.061951%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.273438&quot; stop-color=&quot;rgb(0%, 8.895874%, 15.637207%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.277344&quot; stop-color=&quot;rgb(0%, 9.220886%, 16.210938%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.28125&quot; stop-color=&quot;rgb(0%, 9.547424%, 16.784668%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.285156&quot; stop-color=&quot;rgb(0%, 9.873962%, 17.358398%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.289062&quot; stop-color=&quot;rgb(0%, 10.2005%, 17.932129%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.292969&quot; stop-color=&quot;rgb(0%, 10.525513%, 18.505859%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.296875&quot; stop-color=&quot;rgb(0%, 10.852051%, 19.081116%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.300781&quot; stop-color=&quot;rgb(0%, 11.178589%, 19.654846%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.304688&quot; stop-color=&quot;rgb(0%, 11.505127%, 20.228577%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.308594&quot; stop-color=&quot;rgb(0%, 11.830139%, 20.802307%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.3125&quot; stop-color=&quot;rgb(0%, 12.156677%, 21.376038%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.316406&quot; stop-color=&quot;rgb(0%, 12.481689%, 21.949768%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.320312&quot; stop-color=&quot;rgb(0%, 12.808228%, 22.525024%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.324219&quot; stop-color=&quot;rgb(0%, 13.134766%, 23.098755%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.328125&quot; stop-color=&quot;rgb(0%, 13.461304%, 23.672485%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.332031&quot; stop-color=&quot;rgb(0%, 13.786316%, 24.246216%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.335938&quot; stop-color=&quot;rgb(0%, 14.112854%, 24.819946%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.339844&quot; stop-color=&quot;rgb(0%, 14.413452%, 25.361633%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.34375&quot; stop-color=&quot;rgb(0%, 14.715576%, 25.904846%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.347656&quot; stop-color=&quot;rgb(0%, 14.979553%, 26.399231%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.351562&quot; stop-color=&quot;rgb(0%, 15.245056%, 26.895142%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.355469&quot; stop-color=&quot;rgb(0%, 15.509033%, 27.391052%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.359375&quot; stop-color=&quot;rgb(0%, 15.774536%, 27.886963%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.363281&quot; stop-color=&quot;rgb(0%, 16.038513%, 28.381348%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.367188&quot; stop-color=&quot;rgb(0%, 16.304016%, 28.877258%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.371094&quot; stop-color=&quot;rgb(0%, 16.567993%, 29.373169%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.375&quot; stop-color=&quot;rgb(0%, 16.833496%, 29.86908%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.378906&quot; stop-color=&quot;rgb(0%, 17.097473%, 30.36499%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.382812&quot; stop-color=&quot;rgb(0%, 17.362976%, 30.860901%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.386719&quot; stop-color=&quot;rgb(0%, 17.626953%, 31.355286%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.390625&quot; stop-color=&quot;rgb(0%, 17.892456%, 31.851196%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.394531&quot; stop-color=&quot;rgb(0%, 18.156433%, 32.347107%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.398438&quot; stop-color=&quot;rgb(0%, 18.421936%, 32.843018%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.402344&quot; stop-color=&quot;rgb(0%, 18.685913%, 33.337402%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.40625&quot; stop-color=&quot;rgb(0%, 18.951416%, 33.833313%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.410156&quot; stop-color=&quot;rgb(0%, 19.215393%, 34.329224%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.414062&quot; stop-color=&quot;rgb(0%, 19.47937%, 34.825134%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.417969&quot; stop-color=&quot;rgb(0%, 19.743347%, 35.321045%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.421875&quot; stop-color=&quot;rgb(0%, 20.00885%, 35.816956%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.425781&quot; stop-color=&quot;rgb(0%, 20.272827%, 36.31134%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.429688&quot; stop-color=&quot;rgb(0%, 20.53833%, 36.807251%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.433594&quot; stop-color=&quot;rgb(0%, 20.802307%, 37.303162%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.4375&quot; stop-color=&quot;rgb(0%, 21.06781%, 37.799072%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.441406&quot; stop-color=&quot;rgb(0%, 21.331787%, 38.293457%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.445312&quot; stop-color=&quot;rgb(0%, 21.59729%, 38.789368%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.449219&quot; stop-color=&quot;rgb(0%, 21.861267%, 39.285278%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.453125&quot; stop-color=&quot;rgb(0%, 22.12677%, 39.781189%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.457031&quot; stop-color=&quot;rgb(0%, 22.390747%, 40.2771%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.460937&quot; stop-color=&quot;rgb(0%, 22.65625%, 40.77301%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.464844&quot; stop-color=&quot;rgb(0%, 22.920227%, 41.267395%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.46875&quot; stop-color=&quot;rgb(0%, 23.18573%, 41.763306%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.472656&quot; stop-color=&quot;rgb(0%, 23.449707%, 42.259216%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.476563&quot; stop-color=&quot;rgb(0%, 23.71521%, 42.755127%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.480469&quot; stop-color=&quot;rgb(0%, 23.953247%, 43.186951%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.484375&quot; stop-color=&quot;rgb(0%, 24.19281%, 43.618774%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.488281&quot; stop-color=&quot;rgb(0%, 24.417114%, 44.017029%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.492187&quot; stop-color=&quot;rgb(0%, 24.641418%, 44.416809%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.496094&quot; stop-color=&quot;rgb(0%, 24.865723%, 44.815063%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.5&quot; stop-color=&quot;rgb(0%, 25.091553%, 45.213318%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.503906&quot; stop-color=&quot;rgb(0%, 25.315857%, 45.611572%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.507812&quot; stop-color=&quot;rgb(0%, 25.540161%, 46.011353%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.511719&quot; stop-color=&quot;rgb(0%, 25.764465%, 46.409607%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.515625&quot; stop-color=&quot;rgb(0%, 25.98877%, 46.807861%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.519531&quot; stop-color=&quot;rgb(0%, 26.213074%, 47.206116%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.523438&quot; stop-color=&quot;rgb(0%, 26.438904%, 47.605896%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.527344&quot; stop-color=&quot;rgb(0%, 26.663208%, 48.00415%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.53125&quot; stop-color=&quot;rgb(0%, 26.887512%, 48.402405%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.535156&quot; stop-color=&quot;rgb(0%, 27.111816%, 48.800659%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.539062&quot; stop-color=&quot;rgb(0%, 27.337646%, 49.200439%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.542969&quot; stop-color=&quot;rgb(0%, 27.561951%, 49.598694%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.546875&quot; stop-color=&quot;rgb(0%, 27.786255%, 49.996948%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.550781&quot; stop-color=&quot;rgb(0%, 28.010559%, 50.395203%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.554688&quot; stop-color=&quot;rgb(0%, 28.234863%, 50.794983%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.558594&quot; stop-color=&quot;rgb(0%, 28.459167%, 51.193237%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.5625&quot; stop-color=&quot;rgb(0%, 28.684998%, 51.591492%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.566406&quot; stop-color=&quot;rgb(0%, 28.909302%, 51.989746%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.570312&quot; stop-color=&quot;rgb(0%, 29.133606%, 52.389526%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.574219&quot; stop-color=&quot;rgb(0%, 29.35791%, 52.787781%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.578125&quot; stop-color=&quot;rgb(0%, 29.58374%, 53.186035%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.582031&quot; stop-color=&quot;rgb(0%, 29.808044%, 53.58429%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.585938&quot; stop-color=&quot;rgb(0%, 30.032349%, 53.982544%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.589844&quot; stop-color=&quot;rgb(0%, 30.256653%, 54.380798%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.59375&quot; stop-color=&quot;rgb(0%, 30.480957%, 54.780579%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.597656&quot; stop-color=&quot;rgb(0%, 30.705261%, 55.178833%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.601562&quot; stop-color=&quot;rgb(0%, 30.931091%, 55.577087%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.605469&quot; stop-color=&quot;rgb(0%, 31.10199%, 55.874634%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.609375&quot; stop-color=&quot;rgb(0%, 31.274414%, 56.17218%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.613281&quot; stop-color=&quot;rgb(0%, 31.436157%, 56.451416%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.617188&quot; stop-color=&quot;rgb(0%, 31.5979%, 56.730652%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.621094&quot; stop-color=&quot;rgb(0%, 31.759644%, 57.008362%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.625&quot; stop-color=&quot;rgb(0%, 31.922913%, 57.287598%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.628906&quot; stop-color=&quot;rgb(0%, 32.084656%, 57.566833%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.632812&quot; stop-color=&quot;rgb(0%, 32.246399%, 57.846069%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.636719&quot; stop-color=&quot;rgb(0%, 32.408142%, 58.125305%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.640625&quot; stop-color=&quot;rgb(0%, 32.571411%, 58.404541%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.644531&quot; stop-color=&quot;rgb(0%, 32.733154%, 58.683777%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.648438&quot; stop-color=&quot;rgb(0%, 32.894897%, 58.963013%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.652344&quot; stop-color=&quot;rgb(0%, 33.056641%, 59.240723%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.65625&quot; stop-color=&quot;rgb(0%, 33.21991%, 59.519958%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.660156&quot; stop-color=&quot;rgb(0%, 33.381653%, 59.799194%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.664062&quot; stop-color=&quot;rgb(0%, 33.543396%, 60.07843%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.667969&quot; stop-color=&quot;rgb(0%, 33.705139%, 60.357666%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.671875&quot; stop-color=&quot;rgb(0%, 33.868408%, 60.636902%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.675781&quot; stop-color=&quot;rgb(0%, 34.030151%, 60.916138%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.679688&quot; stop-color=&quot;rgb(0%, 34.191895%, 61.195374%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.683594&quot; stop-color=&quot;rgb(0%, 34.353638%, 61.473083%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.6875&quot; stop-color=&quot;rgb(0%, 34.516907%, 61.752319%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.691406&quot; stop-color=&quot;rgb(0%, 34.67865%, 62.031555%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.695312&quot; stop-color=&quot;rgb(0%, 34.840393%, 62.310791%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.699219&quot; stop-color=&quot;rgb(0%, 35.002136%, 62.590027%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.703125&quot; stop-color=&quot;rgb(0%, 35.165405%, 62.869263%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.707031&quot; stop-color=&quot;rgb(0%, 35.282898%, 63.07373%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.710938&quot; stop-color=&quot;rgb(0%, 35.401917%, 63.279724%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.71875&quot; stop-color=&quot;rgb(0%, 35.488892%, 63.432312%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.726562&quot; stop-color=&quot;rgb(0%, 35.664368%, 63.739014%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.734375&quot; stop-color=&quot;rgb(0%, 35.839844%, 64.047241%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.742188&quot; stop-color=&quot;rgb(0%, 36.01532%, 64.353943%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.75&quot; stop-color=&quot;rgb(0%, 36.190796%, 64.660645%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.757812&quot; stop-color=&quot;rgb(0%, 36.366272%, 64.968872%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.765625&quot; stop-color=&quot;rgb(0%, 36.541748%, 65.275574%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.773438&quot; stop-color=&quot;rgb(0%, 36.717224%, 65.582275%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.78125&quot; stop-color=&quot;rgb(0%, 36.851501%, 65.817261%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.8125&quot; stop-color=&quot;rgb(0%, 36.898804%, 65.899658%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.875&quot; stop-color=&quot;rgb(0%, 36.898804%, 65.899658%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;1&quot; stop-color=&quot;rgb(0%, 36.898804%, 65.899658%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;/linearGradient&gt;
&lt;clipPath id=&quot;clip-14&quot;&gt;
&lt;path clip-rule=&quot;nonzero&quot; d=&quot;M 79.246094 80.910156 L 81.972656 80.910156 L 81.972656 83.441406 L 79.246094 83.441406 Z M 79.246094 80.910156 &quot;/&gt;
&lt;/clipPath&gt;
&lt;clipPath id=&quot;clip-15&quot;&gt;
&lt;path clip-rule=&quot;nonzero&quot; d=&quot;M 79.359375 82.132812 L 80.570312 80.921875 L 81.78125 82.132812 L 80.570312 83.34375 Z M 79.359375 82.132812 &quot;/&gt;
&lt;/clipPath&gt;
&lt;clipPath id=&quot;clip-16&quot;&gt;
&lt;path clip-rule=&quot;nonzero&quot; d=&quot;M 80.570312 84.546875 L 78.15625 82.136719 L 80.570312 79.722656 L 82.984375 82.136719 Z M 80.570312 84.546875 &quot;/&gt;
&lt;/clipPath&gt;
&lt;linearGradient id=&quot;linear-pattern-4&quot; gradientUnits=&quot;userSpaceOnUse&quot; x1=&quot;-40.519493&quot; y1=&quot;698.12378&quot; x2=&quot;-35.876034&quot; y2=&quot;698.12378&quot; gradientTransform=&quot;matrix(0.521689, 0.52138, 0.521689, -0.52138, -263.711, 466.040341)&quot;&gt;
&lt;stop offset=&quot;0&quot; stop-color=&quot;rgb(0%, 0%, 0%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.125&quot; stop-color=&quot;rgb(0%, 0%, 0%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.15625&quot; stop-color=&quot;rgb(0%, 0%, 0%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.171875&quot; stop-color=&quot;rgb(0%, 0.102234%, 0.178528%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.175781&quot; stop-color=&quot;rgb(0%, 0.543213%, 0.952148%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.179688&quot; stop-color=&quot;rgb(0%, 0.883484%, 1.547241%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.183594&quot; stop-color=&quot;rgb(0%, 1.222229%, 2.140808%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.1875&quot; stop-color=&quot;rgb(0%, 1.5625%, 2.734375%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.191406&quot; stop-color=&quot;rgb(0%, 1.896667%, 3.320312%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.195312&quot; stop-color=&quot;rgb(0%, 2.230835%, 3.907776%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.199219&quot; stop-color=&quot;rgb(0%, 2.557373%, 4.481506%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.203125&quot; stop-color=&quot;rgb(0%, 2.883911%, 5.055237%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.207031&quot; stop-color=&quot;rgb(0%, 3.208923%, 5.628967%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.210938&quot; stop-color=&quot;rgb(0%, 3.535461%, 6.202698%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.214844&quot; stop-color=&quot;rgb(0%, 3.860474%, 6.776428%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.21875&quot; stop-color=&quot;rgb(0%, 4.187012%, 7.351685%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.222656&quot; stop-color=&quot;rgb(0%, 4.51355%, 7.925415%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.226562&quot; stop-color=&quot;rgb(0%, 4.840088%, 8.499146%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.230469&quot; stop-color=&quot;rgb(0%, 5.1651%, 9.072876%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.234375&quot; stop-color=&quot;rgb(0%, 5.491638%, 9.646606%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.238281&quot; stop-color=&quot;rgb(0%, 5.818176%, 10.220337%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.242187&quot; stop-color=&quot;rgb(0%, 6.144714%, 10.794067%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.246094&quot; stop-color=&quot;rgb(0%, 6.469727%, 11.367798%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.25&quot; stop-color=&quot;rgb(0%, 6.796265%, 11.941528%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.253906&quot; stop-color=&quot;rgb(0%, 7.121277%, 12.515259%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.257812&quot; stop-color=&quot;rgb(0%, 7.447815%, 13.090515%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.261719&quot; stop-color=&quot;rgb(0%, 7.774353%, 13.664246%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.265625&quot; stop-color=&quot;rgb(0%, 8.100891%, 14.237976%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.269531&quot; stop-color=&quot;rgb(0%, 8.425903%, 14.811707%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.273437&quot; stop-color=&quot;rgb(0%, 8.752441%, 15.385437%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.277344&quot; stop-color=&quot;rgb(0%, 9.078979%, 15.959167%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.28125&quot; stop-color=&quot;rgb(0%, 9.405518%, 16.532898%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.285156&quot; stop-color=&quot;rgb(0%, 9.73053%, 17.106628%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.289062&quot; stop-color=&quot;rgb(0%, 10.057068%, 17.681885%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.292969&quot; stop-color=&quot;rgb(0%, 10.38208%, 18.255615%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.296875&quot; stop-color=&quot;rgb(0%, 10.708618%, 18.829346%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.300781&quot; stop-color=&quot;rgb(0%, 11.035156%, 19.403076%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.304687&quot; stop-color=&quot;rgb(0%, 11.361694%, 19.976807%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.308594&quot; stop-color=&quot;rgb(0%, 11.686707%, 20.550537%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.3125&quot; stop-color=&quot;rgb(0%, 12.013245%, 21.124268%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.316406&quot; stop-color=&quot;rgb(0%, 12.339783%, 21.697998%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.320312&quot; stop-color=&quot;rgb(0%, 12.666321%, 22.271729%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.324219&quot; stop-color=&quot;rgb(0%, 12.991333%, 22.845459%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.328125&quot; stop-color=&quot;rgb(0%, 13.317871%, 23.420715%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.332031&quot; stop-color=&quot;rgb(0%, 13.642883%, 23.994446%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.335938&quot; stop-color=&quot;rgb(0%, 13.969421%, 24.568176%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.339844&quot; stop-color=&quot;rgb(0%, 14.283752%, 25.126648%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.34375&quot; stop-color=&quot;rgb(0%, 14.599609%, 25.686646%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.347656&quot; stop-color=&quot;rgb(0%, 14.863586%, 26.18103%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.351562&quot; stop-color=&quot;rgb(0%, 15.129089%, 26.676941%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.355469&quot; stop-color=&quot;rgb(0%, 15.393066%, 27.172852%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.359375&quot; stop-color=&quot;rgb(0%, 15.657043%, 27.668762%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.363281&quot; stop-color=&quot;rgb(0%, 15.921021%, 28.163147%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.367188&quot; stop-color=&quot;rgb(0%, 16.186523%, 28.659058%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.371094&quot; stop-color=&quot;rgb(0%, 16.4505%, 29.154968%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.375&quot; stop-color=&quot;rgb(0%, 16.716003%, 29.650879%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.378906&quot; stop-color=&quot;rgb(0%, 16.97998%, 30.145264%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.382812&quot; stop-color=&quot;rgb(0%, 17.245483%, 30.641174%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.386719&quot; stop-color=&quot;rgb(0%, 17.50946%, 31.137085%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.390625&quot; stop-color=&quot;rgb(0%, 17.774963%, 31.632996%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.394531&quot; stop-color=&quot;rgb(0%, 18.03894%, 32.12738%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.398437&quot; stop-color=&quot;rgb(0%, 18.304443%, 32.623291%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.402344&quot; stop-color=&quot;rgb(0%, 18.56842%, 33.119202%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.40625&quot; stop-color=&quot;rgb(0%, 18.833923%, 33.615112%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.410156&quot; stop-color=&quot;rgb(0%, 19.0979%, 34.109497%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.414062&quot; stop-color=&quot;rgb(0%, 19.363403%, 34.605408%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.417969&quot; stop-color=&quot;rgb(0%, 19.62738%, 35.101318%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.421875&quot; stop-color=&quot;rgb(0%, 19.892883%, 35.597229%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.425781&quot; stop-color=&quot;rgb(0%, 20.15686%, 36.091614%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.429688&quot; stop-color=&quot;rgb(0%, 20.422363%, 36.587524%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.433594&quot; stop-color=&quot;rgb(0%, 20.68634%, 37.083435%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.4375&quot; stop-color=&quot;rgb(0%, 20.950317%, 37.579346%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.441406&quot; stop-color=&quot;rgb(0%, 21.214294%, 38.07373%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.445312&quot; stop-color=&quot;rgb(0%, 21.479797%, 38.569641%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.449219&quot; stop-color=&quot;rgb(0%, 21.743774%, 39.065552%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.453125&quot; stop-color=&quot;rgb(0%, 22.009277%, 39.561462%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.457031&quot; stop-color=&quot;rgb(0%, 22.273254%, 40.055847%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.460937&quot; stop-color=&quot;rgb(0%, 22.538757%, 40.551758%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.464844&quot; stop-color=&quot;rgb(0%, 22.802734%, 41.047668%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.46875&quot; stop-color=&quot;rgb(0%, 23.068237%, 41.543579%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.472656&quot; stop-color=&quot;rgb(0%, 23.332214%, 42.037964%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.476563&quot; stop-color=&quot;rgb(0%, 23.597717%, 42.533875%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.480469&quot; stop-color=&quot;rgb(0%, 23.84491%, 42.987061%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.484375&quot; stop-color=&quot;rgb(0%, 24.092102%, 43.441772%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.488281&quot; stop-color=&quot;rgb(0%, 24.316406%, 43.840027%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.492188&quot; stop-color=&quot;rgb(0%, 24.542236%, 44.239807%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.496094&quot; stop-color=&quot;rgb(0%, 24.766541%, 44.638062%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.5&quot; stop-color=&quot;rgb(0%, 24.990845%, 45.036316%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.503906&quot; stop-color=&quot;rgb(0%, 25.215149%, 45.43457%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.507812&quot; stop-color=&quot;rgb(0%, 25.439453%, 45.832825%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.511719&quot; stop-color=&quot;rgb(0%, 25.663757%, 46.231079%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.515625&quot; stop-color=&quot;rgb(0%, 25.889587%, 46.630859%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.519531&quot; stop-color=&quot;rgb(0%, 26.113892%, 47.029114%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.523438&quot; stop-color=&quot;rgb(0%, 26.338196%, 47.427368%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.527344&quot; stop-color=&quot;rgb(0%, 26.5625%, 47.825623%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.53125&quot; stop-color=&quot;rgb(0%, 26.786804%, 48.223877%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.535156&quot; stop-color=&quot;rgb(0%, 27.011108%, 48.622131%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.539063&quot; stop-color=&quot;rgb(0%, 27.236938%, 49.021912%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.542969&quot; stop-color=&quot;rgb(0%, 27.461243%, 49.420166%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.546875&quot; stop-color=&quot;rgb(0%, 27.685547%, 49.81842%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.550781&quot; stop-color=&quot;rgb(0%, 27.909851%, 50.216675%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.554688&quot; stop-color=&quot;rgb(0%, 28.134155%, 50.616455%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.558594&quot; stop-color=&quot;rgb(0%, 28.358459%, 51.014709%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.5625&quot; stop-color=&quot;rgb(0%, 28.58429%, 51.412964%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.566406&quot; stop-color=&quot;rgb(0%, 28.808594%, 51.811218%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.570312&quot; stop-color=&quot;rgb(0%, 29.032898%, 52.209473%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.574219&quot; stop-color=&quot;rgb(0%, 29.257202%, 52.607727%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.578125&quot; stop-color=&quot;rgb(0%, 29.483032%, 53.007507%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.582031&quot; stop-color=&quot;rgb(0%, 29.707336%, 53.405762%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.585938&quot; stop-color=&quot;rgb(0%, 29.931641%, 53.804016%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.589844&quot; stop-color=&quot;rgb(0%, 30.155945%, 54.202271%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.59375&quot; stop-color=&quot;rgb(0%, 30.380249%, 54.602051%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.597656&quot; stop-color=&quot;rgb(0%, 30.604553%, 55.000305%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.601563&quot; stop-color=&quot;rgb(0%, 30.830383%, 55.39856%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.605469&quot; stop-color=&quot;rgb(0%, 31.015015%, 55.722046%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.609375&quot; stop-color=&quot;rgb(0%, 31.201172%, 56.047058%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.613281&quot; stop-color=&quot;rgb(0%, 31.362915%, 56.324768%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.617188&quot; stop-color=&quot;rgb(0%, 31.524658%, 56.604004%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.621094&quot; stop-color=&quot;rgb(0%, 31.686401%, 56.88324%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.625&quot; stop-color=&quot;rgb(0%, 31.84967%, 57.162476%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.628906&quot; stop-color=&quot;rgb(0%, 32.011414%, 57.441711%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.632812&quot; stop-color=&quot;rgb(0%, 32.173157%, 57.720947%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.636719&quot; stop-color=&quot;rgb(0%, 32.3349%, 57.998657%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.640625&quot; stop-color=&quot;rgb(0%, 32.498169%, 58.277893%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.644531&quot; stop-color=&quot;rgb(0%, 32.659912%, 58.557129%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.648438&quot; stop-color=&quot;rgb(0%, 32.821655%, 58.836365%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.652344&quot; stop-color=&quot;rgb(0%, 32.983398%, 59.115601%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.65625&quot; stop-color=&quot;rgb(0%, 33.146667%, 59.394836%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.660156&quot; stop-color=&quot;rgb(0%, 33.308411%, 59.672546%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.664063&quot; stop-color=&quot;rgb(0%, 33.470154%, 59.951782%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.667969&quot; stop-color=&quot;rgb(0%, 33.631897%, 60.231018%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.671875&quot; stop-color=&quot;rgb(0%, 33.795166%, 60.510254%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.675781&quot; stop-color=&quot;rgb(0%, 33.956909%, 60.78949%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.679688&quot; stop-color=&quot;rgb(0%, 34.118652%, 61.068726%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.683594&quot; stop-color=&quot;rgb(0%, 34.280396%, 61.346436%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.6875&quot; stop-color=&quot;rgb(0%, 34.443665%, 61.625671%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.691406&quot; stop-color=&quot;rgb(0%, 34.605408%, 61.904907%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.695312&quot; stop-color=&quot;rgb(0%, 34.767151%, 62.184143%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.699219&quot; stop-color=&quot;rgb(0%, 34.928894%, 62.463379%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.703125&quot; stop-color=&quot;rgb(0%, 35.092163%, 62.742615%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.707031&quot; stop-color=&quot;rgb(0%, 35.22644%, 62.976074%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.710938&quot; stop-color=&quot;rgb(0%, 35.362244%, 63.209534%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.71875&quot; stop-color=&quot;rgb(0%, 35.449219%, 63.362122%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.726562&quot; stop-color=&quot;rgb(0%, 35.624695%, 63.670349%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.734375&quot; stop-color=&quot;rgb(0%, 35.800171%, 63.977051%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.742188&quot; stop-color=&quot;rgb(0%, 35.975647%, 64.283752%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.75&quot; stop-color=&quot;rgb(0%, 36.151123%, 64.59198%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.757812&quot; stop-color=&quot;rgb(0%, 36.326599%, 64.898682%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.765625&quot; stop-color=&quot;rgb(0%, 36.502075%, 65.205383%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.773438&quot; stop-color=&quot;rgb(0%, 36.677551%, 65.512085%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.78125&quot; stop-color=&quot;rgb(0%, 36.831665%, 65.782166%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.8125&quot; stop-color=&quot;rgb(0%, 36.898804%, 65.899658%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.875&quot; stop-color=&quot;rgb(0%, 36.898804%, 65.899658%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;1&quot; stop-color=&quot;rgb(0%, 36.898804%, 65.899658%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;/linearGradient&gt;
&lt;clipPath id=&quot;clip-17&quot;&gt;
&lt;path clip-rule=&quot;nonzero&quot; d=&quot;M 82.167969 78.964844 L 84.894531 78.964844 L 84.894531 81.496094 L 82.167969 81.496094 Z M 82.167969 78.964844 &quot;/&gt;
&lt;/clipPath&gt;
&lt;clipPath id=&quot;clip-18&quot;&gt;
&lt;path clip-rule=&quot;nonzero&quot; d=&quot;M 82.324219 80.1875 L 83.535156 78.976562 L 84.746094 80.1875 L 83.535156 81.398438 Z M 82.324219 80.1875 &quot;/&gt;
&lt;/clipPath&gt;
&lt;clipPath id=&quot;clip-19&quot;&gt;
&lt;path clip-rule=&quot;nonzero&quot; d=&quot;M 83.53125 82.601562 L 81.117188 80.191406 L 83.53125 77.757812 L 85.945312 80.191406 Z M 83.53125 82.601562 &quot;/&gt;
&lt;/clipPath&gt;
&lt;linearGradient id=&quot;linear-pattern-5&quot; gradientUnits=&quot;userSpaceOnUse&quot; x1=&quot;-39.90337&quot; y1=&quot;701.16418&quot; x2=&quot;-35.258524&quot; y2=&quot;701.16418&quot; gradientTransform=&quot;matrix(0.521533, 0.521225, 0.521533, -0.521225, -262.54962, 465.240964)&quot;&gt;
&lt;stop offset=&quot;0&quot; stop-color=&quot;rgb(0%, 0%, 0%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.125&quot; stop-color=&quot;rgb(0%, 0%, 0%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.15625&quot; stop-color=&quot;rgb(0%, 0%, 0%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.164062&quot; stop-color=&quot;rgb(0%, 0%, 0%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.167969&quot; stop-color=&quot;rgb(0%, 0.198364%, 0.349426%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.171875&quot; stop-color=&quot;rgb(0%, 0.398254%, 0.698853%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.175781&quot; stop-color=&quot;rgb(0%, 0.737%, 1.292419%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.179687&quot; stop-color=&quot;rgb(0%, 1.077271%, 1.885986%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.183594&quot; stop-color=&quot;rgb(0%, 1.416016%, 2.479553%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.1875&quot; stop-color=&quot;rgb(0%, 1.756287%, 3.074646%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.191406&quot; stop-color=&quot;rgb(0%, 2.087402%, 3.65448%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.195312&quot; stop-color=&quot;rgb(0%, 2.418518%, 4.23584%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.199219&quot; stop-color=&quot;rgb(0%, 2.74353%, 4.80957%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.203125&quot; stop-color=&quot;rgb(0%, 3.070068%, 5.384827%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.207031&quot; stop-color=&quot;rgb(0%, 3.396606%, 5.958557%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.210937&quot; stop-color=&quot;rgb(0%, 3.723145%, 6.532288%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.214844&quot; stop-color=&quot;rgb(0%, 4.048157%, 7.106018%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.21875&quot; stop-color=&quot;rgb(0%, 4.374695%, 7.681274%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.222656&quot; stop-color=&quot;rgb(0%, 4.701233%, 8.255005%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.226562&quot; stop-color=&quot;rgb(0%, 5.027771%, 8.828735%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.230469&quot; stop-color=&quot;rgb(0%, 5.352783%, 9.402466%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.234375&quot; stop-color=&quot;rgb(0%, 5.679321%, 9.977722%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.238281&quot; stop-color=&quot;rgb(0%, 6.005859%, 10.551453%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.242187&quot; stop-color=&quot;rgb(0%, 6.332397%, 11.125183%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.246094&quot; stop-color=&quot;rgb(0%, 6.65741%, 11.698914%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.25&quot; stop-color=&quot;rgb(0%, 6.983948%, 12.27417%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.253906&quot; stop-color=&quot;rgb(0%, 7.310486%, 12.8479%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.257812&quot; stop-color=&quot;rgb(0%, 7.637024%, 13.421631%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.261719&quot; stop-color=&quot;rgb(0%, 7.963562%, 13.995361%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.265625&quot; stop-color=&quot;rgb(0%, 8.2901%, 14.569092%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.269531&quot; stop-color=&quot;rgb(0%, 8.615112%, 15.142822%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.273437&quot; stop-color=&quot;rgb(0%, 8.94165%, 15.718079%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.277344&quot; stop-color=&quot;rgb(0%, 9.268188%, 16.291809%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.28125&quot; stop-color=&quot;rgb(0%, 9.594727%, 16.86554%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.285156&quot; stop-color=&quot;rgb(0%, 9.919739%, 17.43927%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.289062&quot; stop-color=&quot;rgb(0%, 10.246277%, 18.014526%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.292969&quot; stop-color=&quot;rgb(0%, 10.572815%, 18.588257%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.296875&quot; stop-color=&quot;rgb(0%, 10.899353%, 19.161987%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.300781&quot; stop-color=&quot;rgb(0%, 11.224365%, 19.735718%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.304688&quot; stop-color=&quot;rgb(0%, 11.550903%, 20.310974%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.308594&quot; stop-color=&quot;rgb(0%, 11.877441%, 20.884705%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.3125&quot; stop-color=&quot;rgb(0%, 12.203979%, 21.458435%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.316406&quot; stop-color=&quot;rgb(0%, 12.528992%, 22.032166%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.320312&quot; stop-color=&quot;rgb(0%, 12.85553%, 22.607422%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.324219&quot; stop-color=&quot;rgb(0%, 13.182068%, 23.181152%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.328125&quot; stop-color=&quot;rgb(0%, 13.508606%, 23.754883%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.332031&quot; stop-color=&quot;rgb(0%, 13.833618%, 24.328613%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.335938&quot; stop-color=&quot;rgb(0%, 14.160156%, 24.90387%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.339844&quot; stop-color=&quot;rgb(0%, 14.456177%, 25.439453%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.34375&quot; stop-color=&quot;rgb(0%, 14.753723%, 25.976562%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.347656&quot; stop-color=&quot;rgb(0%, 15.0177%, 26.470947%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.351562&quot; stop-color=&quot;rgb(0%, 15.283203%, 26.966858%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.355469&quot; stop-color=&quot;rgb(0%, 15.54718%, 27.462769%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.359375&quot; stop-color=&quot;rgb(0%, 15.812683%, 27.958679%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.363281&quot; stop-color=&quot;rgb(0%, 16.07666%, 28.45459%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.367187&quot; stop-color=&quot;rgb(0%, 16.342163%, 28.9505%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.371094&quot; stop-color=&quot;rgb(0%, 16.60614%, 29.444885%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.375&quot; stop-color=&quot;rgb(0%, 16.871643%, 29.940796%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.378906&quot; stop-color=&quot;rgb(0%, 17.13562%, 30.436707%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.382812&quot; stop-color=&quot;rgb(0%, 17.401123%, 30.932617%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.386719&quot; stop-color=&quot;rgb(0%, 17.6651%, 31.428528%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.390625&quot; stop-color=&quot;rgb(0%, 17.930603%, 31.924438%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.394531&quot; stop-color=&quot;rgb(0%, 18.19458%, 32.418823%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.398438&quot; stop-color=&quot;rgb(0%, 18.460083%, 32.914734%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.402344&quot; stop-color=&quot;rgb(0%, 18.72406%, 33.410645%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.40625&quot; stop-color=&quot;rgb(0%, 18.989563%, 33.906555%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.410156&quot; stop-color=&quot;rgb(0%, 19.25354%, 34.402466%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.414062&quot; stop-color=&quot;rgb(0%, 19.519043%, 34.898376%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.417969&quot; stop-color=&quot;rgb(0%, 19.78302%, 35.394287%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.421875&quot; stop-color=&quot;rgb(0%, 20.048523%, 35.890198%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.425781&quot; stop-color=&quot;rgb(0%, 20.3125%, 36.384583%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.429687&quot; stop-color=&quot;rgb(0%, 20.578003%, 36.880493%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.433594&quot; stop-color=&quot;rgb(0%, 20.84198%, 37.376404%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.4375&quot; stop-color=&quot;rgb(0%, 21.107483%, 37.872314%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.441406&quot; stop-color=&quot;rgb(0%, 21.37146%, 38.368225%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.445312&quot; stop-color=&quot;rgb(0%, 21.636963%, 38.864136%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.449219&quot; stop-color=&quot;rgb(0%, 21.90094%, 39.358521%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.453125&quot; stop-color=&quot;rgb(0%, 22.166443%, 39.854431%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.457031&quot; stop-color=&quot;rgb(0%, 22.43042%, 40.350342%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.460937&quot; stop-color=&quot;rgb(0%, 22.695923%, 40.846252%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.464844&quot; stop-color=&quot;rgb(0%, 22.9599%, 41.342163%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.46875&quot; stop-color=&quot;rgb(0%, 23.225403%, 41.838074%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.472656&quot; stop-color=&quot;rgb(0%, 23.48938%, 42.332458%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.476562&quot; stop-color=&quot;rgb(0%, 23.754883%, 42.828369%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.480469&quot; stop-color=&quot;rgb(0%, 23.989868%, 43.254089%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.484375&quot; stop-color=&quot;rgb(0%, 24.226379%, 43.67981%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.488281&quot; stop-color=&quot;rgb(0%, 24.450684%, 44.078064%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.492187&quot; stop-color=&quot;rgb(0%, 24.674988%, 44.476318%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.496094&quot; stop-color=&quot;rgb(0%, 24.899292%, 44.874573%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.5&quot; stop-color=&quot;rgb(0%, 25.125122%, 45.274353%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.503906&quot; stop-color=&quot;rgb(0%, 25.349426%, 45.672607%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.507812&quot; stop-color=&quot;rgb(0%, 25.57373%, 46.070862%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.511719&quot; stop-color=&quot;rgb(0%, 25.798035%, 46.469116%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.515625&quot; stop-color=&quot;rgb(0%, 26.023865%, 46.868896%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.519531&quot; stop-color=&quot;rgb(0%, 26.248169%, 47.267151%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.523438&quot; stop-color=&quot;rgb(0%, 26.472473%, 47.665405%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.527344&quot; stop-color=&quot;rgb(0%, 26.696777%, 48.06366%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.53125&quot; stop-color=&quot;rgb(0%, 26.921082%, 48.46344%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.535156&quot; stop-color=&quot;rgb(0%, 27.145386%, 48.861694%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.539062&quot; stop-color=&quot;rgb(0%, 27.371216%, 49.259949%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.542969&quot; stop-color=&quot;rgb(0%, 27.59552%, 49.658203%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.546875&quot; stop-color=&quot;rgb(0%, 27.819824%, 50.057983%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.550781&quot; stop-color=&quot;rgb(0%, 28.044128%, 50.456238%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.554688&quot; stop-color=&quot;rgb(0%, 28.269958%, 50.856018%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.558594&quot; stop-color=&quot;rgb(0%, 28.494263%, 51.254272%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.5625&quot; stop-color=&quot;rgb(0%, 28.718567%, 51.652527%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.566406&quot; stop-color=&quot;rgb(0%, 28.942871%, 52.050781%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.570312&quot; stop-color=&quot;rgb(0%, 29.168701%, 52.450562%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.574219&quot; stop-color=&quot;rgb(0%, 29.393005%, 52.848816%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.578125&quot; stop-color=&quot;rgb(0%, 29.61731%, 53.24707%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.582031&quot; stop-color=&quot;rgb(0%, 29.841614%, 53.645325%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.585937&quot; stop-color=&quot;rgb(0%, 30.067444%, 54.045105%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.589844&quot; stop-color=&quot;rgb(0%, 30.291748%, 54.443359%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.59375&quot; stop-color=&quot;rgb(0%, 30.516052%, 54.841614%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.597656&quot; stop-color=&quot;rgb(0%, 30.740356%, 55.239868%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.601562&quot; stop-color=&quot;rgb(0%, 30.966187%, 55.639648%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.605469&quot; stop-color=&quot;rgb(0%, 31.132507%, 55.926514%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.609375&quot; stop-color=&quot;rgb(0%, 31.298828%, 56.214905%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.613281&quot; stop-color=&quot;rgb(0%, 31.460571%, 56.494141%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.617188&quot; stop-color=&quot;rgb(0%, 31.62384%, 56.773376%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.621094&quot; stop-color=&quot;rgb(0%, 31.785583%, 57.052612%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.625&quot; stop-color=&quot;rgb(0%, 31.947327%, 57.331848%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.628906&quot; stop-color=&quot;rgb(0%, 32.10907%, 57.611084%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.632812&quot; stop-color=&quot;rgb(0%, 32.272339%, 57.89032%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.636719&quot; stop-color=&quot;rgb(0%, 32.434082%, 58.16803%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.640625&quot; stop-color=&quot;rgb(0%, 32.595825%, 58.447266%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.644531&quot; stop-color=&quot;rgb(0%, 32.757568%, 58.726501%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.648438&quot; stop-color=&quot;rgb(0%, 32.920837%, 59.005737%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.652344&quot; stop-color=&quot;rgb(0%, 33.082581%, 59.284973%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.65625&quot; stop-color=&quot;rgb(0%, 33.24585%, 59.564209%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.660156&quot; stop-color=&quot;rgb(0%, 33.407593%, 59.843445%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.664062&quot; stop-color=&quot;rgb(0%, 33.569336%, 60.122681%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.667969&quot; stop-color=&quot;rgb(0%, 33.731079%, 60.401917%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.671875&quot; stop-color=&quot;rgb(0%, 33.894348%, 60.681152%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.675781&quot; stop-color=&quot;rgb(0%, 34.056091%, 60.958862%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.679688&quot; stop-color=&quot;rgb(0%, 34.217834%, 61.238098%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.683594&quot; stop-color=&quot;rgb(0%, 34.379578%, 61.517334%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.6875&quot; stop-color=&quot;rgb(0%, 34.542847%, 61.79657%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.691406&quot; stop-color=&quot;rgb(0%, 34.70459%, 62.075806%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.695312&quot; stop-color=&quot;rgb(0%, 34.866333%, 62.355042%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.699219&quot; stop-color=&quot;rgb(0%, 35.028076%, 62.634277%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.703125&quot; stop-color=&quot;rgb(0%, 35.191345%, 62.913513%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.710938&quot; stop-color=&quot;rgb(0%, 35.302734%, 63.108826%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.71875&quot; stop-color=&quot;rgb(0%, 35.502625%, 63.456726%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.726562&quot; stop-color=&quot;rgb(0%, 35.678101%, 63.764954%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.734375&quot; stop-color=&quot;rgb(0%, 35.853577%, 64.071655%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.742188&quot; stop-color=&quot;rgb(0%, 36.030579%, 64.378357%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.75&quot; stop-color=&quot;rgb(0%, 36.206055%, 64.685059%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.757812&quot; stop-color=&quot;rgb(0%, 36.381531%, 64.993286%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.765625&quot; stop-color=&quot;rgb(0%, 36.557007%, 65.299988%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.773437&quot; stop-color=&quot;rgb(0%, 36.732483%, 65.606689%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.78125&quot; stop-color=&quot;rgb(0%, 36.859131%, 65.829468%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.8125&quot; stop-color=&quot;rgb(0%, 36.898804%, 65.899658%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.875&quot; stop-color=&quot;rgb(0%, 36.898804%, 65.899658%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;1&quot; stop-color=&quot;rgb(0%, 36.898804%, 65.899658%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;/linearGradient&gt;
&lt;clipPath id=&quot;clip-20&quot;&gt;
&lt;path clip-rule=&quot;nonzero&quot; d=&quot;M 85.476562 75.660156 L 88.203125 75.660156 L 88.203125 78.382812 L 85.476562 78.382812 Z M 85.476562 75.660156 &quot;/&gt;
&lt;/clipPath&gt;
&lt;clipPath id=&quot;clip-21&quot;&gt;
&lt;path clip-rule=&quot;nonzero&quot; d=&quot;M 85.664062 77.003906 L 86.875 75.792969 L 88.085938 77 L 86.875 78.210938 Z M 85.664062 77.003906 &quot;/&gt;
&lt;/clipPath&gt;
&lt;clipPath id=&quot;clip-22&quot;&gt;
&lt;path clip-rule=&quot;nonzero&quot; d=&quot;M 86.878906 79.414062 L 84.464844 77 L 86.878906 74.589844 L 89.292969 77 Z M 86.878906 79.414062 &quot;/&gt;
&lt;/clipPath&gt;
&lt;linearGradient id=&quot;linear-pattern-6&quot; gradientUnits=&quot;userSpaceOnUse&quot; x1=&quot;-39.801298&quot; y1=&quot;705.21997&quot; x2=&quot;-35.157146&quot; y2=&quot;705.21997&quot; gradientTransform=&quot;matrix(0.521611, 0.521302, 0.521611, -0.521302, -261.42377, 464.171811)&quot;&gt;
&lt;stop offset=&quot;0&quot; stop-color=&quot;rgb(0%, 0%, 0%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.125&quot; stop-color=&quot;rgb(0%, 0%, 0%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.15625&quot; stop-color=&quot;rgb(0%, 0%, 0%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.171875&quot; stop-color=&quot;rgb(0%, 0.0991821%, 0.172424%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.175781&quot; stop-color=&quot;rgb(0%, 0.537109%, 0.939941%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.179688&quot; stop-color=&quot;rgb(0%, 0.875854%, 1.535034%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.183594&quot; stop-color=&quot;rgb(0%, 1.2146%, 2.128601%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.1875&quot; stop-color=&quot;rgb(0%, 1.554871%, 2.722168%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.191406&quot; stop-color=&quot;rgb(0%, 1.889038%, 3.308105%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.195312&quot; stop-color=&quot;rgb(0%, 2.224731%, 3.895569%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.199219&quot; stop-color=&quot;rgb(0%, 2.549744%, 4.469299%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.203125&quot; stop-color=&quot;rgb(0%, 2.876282%, 5.044556%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.207031&quot; stop-color=&quot;rgb(0%, 3.20282%, 5.618286%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.210938&quot; stop-color=&quot;rgb(0%, 3.529358%, 6.192017%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.214844&quot; stop-color=&quot;rgb(0%, 3.85437%, 6.765747%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.21875&quot; stop-color=&quot;rgb(0%, 4.180908%, 7.339478%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.222656&quot; stop-color=&quot;rgb(0%, 4.507446%, 7.913208%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.226562&quot; stop-color=&quot;rgb(0%, 4.833984%, 8.488464%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.230469&quot; stop-color=&quot;rgb(0%, 5.158997%, 9.062195%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.234375&quot; stop-color=&quot;rgb(0%, 5.485535%, 9.635925%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.238281&quot; stop-color=&quot;rgb(0%, 5.812073%, 10.209656%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.242188&quot; stop-color=&quot;rgb(0%, 6.138611%, 10.783386%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.246094&quot; stop-color=&quot;rgb(0%, 6.463623%, 11.357117%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.25&quot; stop-color=&quot;rgb(0%, 6.790161%, 11.932373%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.253906&quot; stop-color=&quot;rgb(0%, 7.116699%, 12.506104%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.257812&quot; stop-color=&quot;rgb(0%, 7.443237%, 13.079834%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.261719&quot; stop-color=&quot;rgb(0%, 7.76825%, 13.653564%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.265625&quot; stop-color=&quot;rgb(0%, 8.094788%, 14.227295%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.269531&quot; stop-color=&quot;rgb(0%, 8.421326%, 14.801025%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.273438&quot; stop-color=&quot;rgb(0%, 8.747864%, 15.376282%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.277344&quot; stop-color=&quot;rgb(0%, 9.072876%, 15.950012%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.28125&quot; stop-color=&quot;rgb(0%, 9.399414%, 16.523743%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.285156&quot; stop-color=&quot;rgb(0%, 9.724426%, 17.097473%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.289062&quot; stop-color=&quot;rgb(0%, 10.050964%, 17.671204%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.292969&quot; stop-color=&quot;rgb(0%, 10.377502%, 18.244934%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.296875&quot; stop-color=&quot;rgb(0%, 10.704041%, 18.82019%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.300781&quot; stop-color=&quot;rgb(0%, 11.029053%, 19.393921%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.304688&quot; stop-color=&quot;rgb(0%, 11.355591%, 19.967651%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.308594&quot; stop-color=&quot;rgb(0%, 11.682129%, 20.541382%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.3125&quot; stop-color=&quot;rgb(0%, 12.008667%, 21.115112%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.316406&quot; stop-color=&quot;rgb(0%, 12.333679%, 21.688843%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.320312&quot; stop-color=&quot;rgb(0%, 12.660217%, 22.264099%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.324219&quot; stop-color=&quot;rgb(0%, 12.986755%, 22.83783%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.328125&quot; stop-color=&quot;rgb(0%, 13.313293%, 23.41156%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.332031&quot; stop-color=&quot;rgb(0%, 13.638306%, 23.985291%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.335938&quot; stop-color=&quot;rgb(0%, 13.964844%, 24.559021%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.339844&quot; stop-color=&quot;rgb(0%, 14.279175%, 25.119019%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.34375&quot; stop-color=&quot;rgb(0%, 14.595032%, 25.679016%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.347656&quot; stop-color=&quot;rgb(0%, 14.859009%, 26.174927%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.351562&quot; stop-color=&quot;rgb(0%, 15.124512%, 26.670837%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.355469&quot; stop-color=&quot;rgb(0%, 15.388489%, 27.165222%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.359375&quot; stop-color=&quot;rgb(0%, 15.653992%, 27.661133%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.363281&quot; stop-color=&quot;rgb(0%, 15.917969%, 28.157043%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.367188&quot; stop-color=&quot;rgb(0%, 16.183472%, 28.652954%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.371094&quot; stop-color=&quot;rgb(0%, 16.447449%, 29.147339%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.375&quot; stop-color=&quot;rgb(0%, 16.712952%, 29.64325%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.378906&quot; stop-color=&quot;rgb(0%, 16.976929%, 30.13916%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.382813&quot; stop-color=&quot;rgb(0%, 17.242432%, 30.635071%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.386719&quot; stop-color=&quot;rgb(0%, 17.506409%, 31.130981%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.390625&quot; stop-color=&quot;rgb(0%, 17.771912%, 31.626892%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.394531&quot; stop-color=&quot;rgb(0%, 18.035889%, 32.121277%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.398438&quot; stop-color=&quot;rgb(0%, 18.301392%, 32.617188%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.402344&quot; stop-color=&quot;rgb(0%, 18.565369%, 33.113098%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.40625&quot; stop-color=&quot;rgb(0%, 18.830872%, 33.609009%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.410156&quot; stop-color=&quot;rgb(0%, 19.094849%, 34.103394%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.414062&quot; stop-color=&quot;rgb(0%, 19.360352%, 34.599304%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.417969&quot; stop-color=&quot;rgb(0%, 19.624329%, 35.095215%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.421875&quot; stop-color=&quot;rgb(0%, 19.889832%, 35.591125%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.425781&quot; stop-color=&quot;rgb(0%, 20.153809%, 36.087036%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.429688&quot; stop-color=&quot;rgb(0%, 20.419312%, 36.582947%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.433594&quot; stop-color=&quot;rgb(0%, 20.683289%, 37.077332%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.4375&quot; stop-color=&quot;rgb(0%, 20.947266%, 37.573242%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.441406&quot; stop-color=&quot;rgb(0%, 21.211243%, 38.069153%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.445312&quot; stop-color=&quot;rgb(0%, 21.476746%, 38.565063%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.449219&quot; stop-color=&quot;rgb(0%, 21.740723%, 39.059448%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.453125&quot; stop-color=&quot;rgb(0%, 22.006226%, 39.555359%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.457031&quot; stop-color=&quot;rgb(0%, 22.270203%, 40.05127%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.460937&quot; stop-color=&quot;rgb(0%, 22.535706%, 40.54718%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.464844&quot; stop-color=&quot;rgb(0%, 22.799683%, 41.043091%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.46875&quot; stop-color=&quot;rgb(0%, 23.065186%, 41.539001%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.472656&quot; stop-color=&quot;rgb(0%, 23.329163%, 42.033386%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.476562&quot; stop-color=&quot;rgb(0%, 23.594666%, 42.529297%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.480469&quot; stop-color=&quot;rgb(0%, 23.841858%, 42.984009%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.484375&quot; stop-color=&quot;rgb(0%, 24.090576%, 43.438721%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.488281&quot; stop-color=&quot;rgb(0%, 24.31488%, 43.836975%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.492188&quot; stop-color=&quot;rgb(0%, 24.539185%, 44.235229%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.496094&quot; stop-color=&quot;rgb(0%, 24.763489%, 44.633484%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.5&quot; stop-color=&quot;rgb(0%, 24.989319%, 45.033264%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.503906&quot; stop-color=&quot;rgb(0%, 25.213623%, 45.431519%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.507812&quot; stop-color=&quot;rgb(0%, 25.437927%, 45.829773%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.511719&quot; stop-color=&quot;rgb(0%, 25.662231%, 46.228027%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.515625&quot; stop-color=&quot;rgb(0%, 25.886536%, 46.627808%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.519531&quot; stop-color=&quot;rgb(0%, 26.11084%, 47.026062%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.523438&quot; stop-color=&quot;rgb(0%, 26.33667%, 47.424316%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.527344&quot; stop-color=&quot;rgb(0%, 26.560974%, 47.822571%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.53125&quot; stop-color=&quot;rgb(0%, 26.785278%, 48.222351%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.535156&quot; stop-color=&quot;rgb(0%, 27.009583%, 48.620605%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.539062&quot; stop-color=&quot;rgb(0%, 27.235413%, 49.01886%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.542969&quot; stop-color=&quot;rgb(0%, 27.459717%, 49.417114%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.546875&quot; stop-color=&quot;rgb(0%, 27.684021%, 49.815369%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.550781&quot; stop-color=&quot;rgb(0%, 27.908325%, 50.213623%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.554687&quot; stop-color=&quot;rgb(0%, 28.132629%, 50.613403%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.558594&quot; stop-color=&quot;rgb(0%, 28.356934%, 51.011658%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.5625&quot; stop-color=&quot;rgb(0%, 28.582764%, 51.409912%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.566406&quot; stop-color=&quot;rgb(0%, 28.807068%, 51.808167%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.570312&quot; stop-color=&quot;rgb(0%, 29.031372%, 52.207947%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.574219&quot; stop-color=&quot;rgb(0%, 29.255676%, 52.606201%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.578125&quot; stop-color=&quot;rgb(0%, 29.481506%, 53.004456%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.582031&quot; stop-color=&quot;rgb(0%, 29.705811%, 53.40271%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.585938&quot; stop-color=&quot;rgb(0%, 29.930115%, 53.80249%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.589844&quot; stop-color=&quot;rgb(0%, 30.154419%, 54.200745%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.59375&quot; stop-color=&quot;rgb(0%, 30.378723%, 54.598999%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.597656&quot; stop-color=&quot;rgb(0%, 30.603027%, 54.997253%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.601562&quot; stop-color=&quot;rgb(0%, 30.828857%, 55.397034%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.605469&quot; stop-color=&quot;rgb(0%, 31.015015%, 55.72052%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.609375&quot; stop-color=&quot;rgb(0%, 31.201172%, 56.045532%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.613281&quot; stop-color=&quot;rgb(0%, 31.362915%, 56.324768%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.617188&quot; stop-color=&quot;rgb(0%, 31.524658%, 56.604004%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.621094&quot; stop-color=&quot;rgb(0%, 31.686401%, 56.881714%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.625&quot; stop-color=&quot;rgb(0%, 31.84967%, 57.16095%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.628906&quot; stop-color=&quot;rgb(0%, 32.011414%, 57.440186%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.632812&quot; stop-color=&quot;rgb(0%, 32.173157%, 57.719421%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.636719&quot; stop-color=&quot;rgb(0%, 32.3349%, 57.998657%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.640625&quot; stop-color=&quot;rgb(0%, 32.498169%, 58.277893%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.644531&quot; stop-color=&quot;rgb(0%, 32.659912%, 58.557129%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.648438&quot; stop-color=&quot;rgb(0%, 32.821655%, 58.836365%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.652344&quot; stop-color=&quot;rgb(0%, 32.983398%, 59.114075%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.65625&quot; stop-color=&quot;rgb(0%, 33.146667%, 59.393311%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.660156&quot; stop-color=&quot;rgb(0%, 33.308411%, 59.672546%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.664062&quot; stop-color=&quot;rgb(0%, 33.470154%, 59.951782%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.667969&quot; stop-color=&quot;rgb(0%, 33.631897%, 60.231018%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.671875&quot; stop-color=&quot;rgb(0%, 33.795166%, 60.510254%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.675781&quot; stop-color=&quot;rgb(0%, 33.956909%, 60.787964%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.679688&quot; stop-color=&quot;rgb(0%, 34.118652%, 61.0672%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.683594&quot; stop-color=&quot;rgb(0%, 34.280396%, 61.346436%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.6875&quot; stop-color=&quot;rgb(0%, 34.443665%, 61.625671%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.691406&quot; stop-color=&quot;rgb(0%, 34.605408%, 61.904907%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.695312&quot; stop-color=&quot;rgb(0%, 34.767151%, 62.184143%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.699219&quot; stop-color=&quot;rgb(0%, 34.928894%, 62.463379%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.703125&quot; stop-color=&quot;rgb(0%, 35.092163%, 62.742615%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.707031&quot; stop-color=&quot;rgb(0%, 35.22644%, 62.976074%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.710938&quot; stop-color=&quot;rgb(0%, 35.362244%, 63.209534%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.71875&quot; stop-color=&quot;rgb(0%, 35.449219%, 63.362122%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.726562&quot; stop-color=&quot;rgb(0%, 35.624695%, 63.670349%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.734375&quot; stop-color=&quot;rgb(0%, 35.800171%, 63.977051%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.742188&quot; stop-color=&quot;rgb(0%, 35.975647%, 64.283752%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.75&quot; stop-color=&quot;rgb(0%, 36.151123%, 64.59198%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.757812&quot; stop-color=&quot;rgb(0%, 36.326599%, 64.898682%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.765625&quot; stop-color=&quot;rgb(0%, 36.502075%, 65.205383%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.773438&quot; stop-color=&quot;rgb(0%, 36.677551%, 65.513611%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.78125&quot; stop-color=&quot;rgb(0%, 36.831665%, 65.783691%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.8125&quot; stop-color=&quot;rgb(0%, 36.898804%, 65.899658%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.875&quot; stop-color=&quot;rgb(0%, 36.898804%, 65.899658%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;1&quot; stop-color=&quot;rgb(0%, 36.898804%, 65.899658%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;/linearGradient&gt;
&lt;clipPath id=&quot;clip-23&quot;&gt;
&lt;path clip-rule=&quot;nonzero&quot; d=&quot;M 88.203125 86 L 92.875 86 L 92.875 90.636719 L 88.203125 90.636719 Z M 88.203125 86 &quot;/&gt;
&lt;/clipPath&gt;
&lt;clipPath id=&quot;clip-24&quot;&gt;
&lt;path clip-rule=&quot;nonzero&quot; d=&quot;M 88.230469 88.296875 L 90.472656 86.054688 L 92.71875 88.296875 L 90.476562 90.539062 Z M 88.230469 88.296875 &quot;/&gt;
&lt;/clipPath&gt;
&lt;clipPath id=&quot;clip-25&quot;&gt;
&lt;path clip-rule=&quot;nonzero&quot; d=&quot;M 90.480469 92.757812 L 86.003906 88.285156 L 90.480469 83.808594 L 94.957031 88.285156 Z M 90.480469 92.757812 &quot;/&gt;
&lt;/clipPath&gt;
&lt;linearGradient id=&quot;linear-pattern-7&quot; gradientUnits=&quot;userSpaceOnUse&quot; x1=&quot;-8.161149&quot; y1=&quot;710.07422&quot; x2=&quot;-3.519477&quot; y2=&quot;710.07422&quot; gradientTransform=&quot;matrix(0.966684, 0.966112, 0.966684, -0.966112, -590.29053, 779.9433)&quot;&gt;
&lt;stop offset=&quot;0&quot; stop-color=&quot;rgb(0%, 0%, 0%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.125&quot; stop-color=&quot;rgb(0%, 0%, 0%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.1875&quot; stop-color=&quot;rgb(0%, 0%, 0%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.203125&quot; stop-color=&quot;rgb(0%, 0%, 0%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.207031&quot; stop-color=&quot;rgb(0%, 0.222778%, 0.390625%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.210938&quot; stop-color=&quot;rgb(0%, 0.447083%, 0.782776%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.214844&quot; stop-color=&quot;rgb(0%, 0.785828%, 1.376343%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.21875&quot; stop-color=&quot;rgb(0%, 1.126099%, 1.96991%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.222656&quot; stop-color=&quot;rgb(0%, 1.464844%, 2.563477%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.226562&quot; stop-color=&quot;rgb(0%, 1.803589%, 3.157043%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.230469&quot; stop-color=&quot;rgb(0%, 2.133179%, 3.736877%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.234375&quot; stop-color=&quot;rgb(0%, 2.462769%, 4.316711%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.238281&quot; stop-color=&quot;rgb(0%, 2.789307%, 4.890442%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.242187&quot; stop-color=&quot;rgb(0%, 3.115845%, 5.464172%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.246094&quot; stop-color=&quot;rgb(0%, 3.440857%, 6.037903%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.25&quot; stop-color=&quot;rgb(0%, 3.767395%, 6.611633%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.253906&quot; stop-color=&quot;rgb(0%, 4.092407%, 7.185364%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.257812&quot; stop-color=&quot;rgb(0%, 4.418945%, 7.759094%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.261719&quot; stop-color=&quot;rgb(0%, 4.743958%, 8.332825%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.265625&quot; stop-color=&quot;rgb(0%, 5.070496%, 8.906555%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.269531&quot; stop-color=&quot;rgb(0%, 5.397034%, 9.480286%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.273438&quot; stop-color=&quot;rgb(0%, 5.723572%, 10.054016%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.277344&quot; stop-color=&quot;rgb(0%, 6.048584%, 10.626221%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.28125&quot; stop-color=&quot;rgb(0%, 6.375122%, 11.199951%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.285156&quot; stop-color=&quot;rgb(0%, 6.700134%, 11.773682%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.289062&quot; stop-color=&quot;rgb(0%, 7.026672%, 12.347412%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.292969&quot; stop-color=&quot;rgb(0%, 7.351685%, 12.921143%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.296875&quot; stop-color=&quot;rgb(0%, 7.678223%, 13.494873%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.300781&quot; stop-color=&quot;rgb(0%, 8.004761%, 14.068604%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.304688&quot; stop-color=&quot;rgb(0%, 8.331299%, 14.642334%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.308594&quot; stop-color=&quot;rgb(0%, 8.656311%, 15.216064%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.3125&quot; stop-color=&quot;rgb(0%, 8.982849%, 15.789795%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.316406&quot; stop-color=&quot;rgb(0%, 9.307861%, 16.363525%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.320312&quot; stop-color=&quot;rgb(0%, 9.634399%, 16.937256%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.324219&quot; stop-color=&quot;rgb(0%, 9.959412%, 17.510986%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.328125&quot; stop-color=&quot;rgb(0%, 10.28595%, 18.084717%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.332031&quot; stop-color=&quot;rgb(0%, 10.612488%, 18.658447%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.335938&quot; stop-color=&quot;rgb(0%, 10.939026%, 19.232178%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.339844&quot; stop-color=&quot;rgb(0%, 11.264038%, 19.805908%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.34375&quot; stop-color=&quot;rgb(0%, 11.590576%, 20.379639%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.347656&quot; stop-color=&quot;rgb(0%, 11.915588%, 20.953369%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.351562&quot; stop-color=&quot;rgb(0%, 12.242126%, 21.5271%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.355469&quot; stop-color=&quot;rgb(0%, 12.567139%, 22.10083%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.359375&quot; stop-color=&quot;rgb(0%, 12.893677%, 22.674561%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.363281&quot; stop-color=&quot;rgb(0%, 13.220215%, 23.248291%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.367187&quot; stop-color=&quot;rgb(0%, 13.546753%, 23.822021%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.371094&quot; stop-color=&quot;rgb(0%, 13.871765%, 24.395752%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.375&quot; stop-color=&quot;rgb(0%, 14.198303%, 24.969482%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.378906&quot; stop-color=&quot;rgb(0%, 14.491272%, 25.500488%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.382812&quot; stop-color=&quot;rgb(0%, 14.784241%, 26.03302%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.386719&quot; stop-color=&quot;rgb(0%, 15.048218%, 26.527405%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.390625&quot; stop-color=&quot;rgb(0%, 15.313721%, 27.023315%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.394531&quot; stop-color=&quot;rgb(0%, 15.577698%, 27.5177%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.398437&quot; stop-color=&quot;rgb(0%, 15.841675%, 28.013611%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.402344&quot; stop-color=&quot;rgb(0%, 16.105652%, 28.509521%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.40625&quot; stop-color=&quot;rgb(0%, 16.371155%, 29.005432%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.410156&quot; stop-color=&quot;rgb(0%, 16.635132%, 29.499817%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.414062&quot; stop-color=&quot;rgb(0%, 16.900635%, 29.995728%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.417969&quot; stop-color=&quot;rgb(0%, 17.164612%, 30.490112%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.421875&quot; stop-color=&quot;rgb(0%, 17.430115%, 30.986023%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.425781&quot; stop-color=&quot;rgb(0%, 17.694092%, 31.480408%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.429687&quot; stop-color=&quot;rgb(0%, 17.959595%, 31.976318%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.433594&quot; stop-color=&quot;rgb(0%, 18.223572%, 32.472229%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.4375&quot; stop-color=&quot;rgb(0%, 18.487549%, 32.96814%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.441406&quot; stop-color=&quot;rgb(0%, 18.751526%, 33.462524%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.445313&quot; stop-color=&quot;rgb(0%, 19.017029%, 33.958435%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.449219&quot; stop-color=&quot;rgb(0%, 19.281006%, 34.45282%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.453125&quot; stop-color=&quot;rgb(0%, 19.546509%, 34.94873%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.457031&quot; stop-color=&quot;rgb(0%, 19.810486%, 35.443115%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.460938&quot; stop-color=&quot;rgb(0%, 20.075989%, 35.939026%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.464844&quot; stop-color=&quot;rgb(0%, 20.339966%, 36.434937%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.46875&quot; stop-color=&quot;rgb(0%, 20.603943%, 36.930847%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.472656&quot; stop-color=&quot;rgb(0%, 20.86792%, 37.425232%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.476562&quot; stop-color=&quot;rgb(0%, 21.133423%, 37.921143%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.480469&quot; stop-color=&quot;rgb(0%, 21.3974%, 38.415527%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.484375&quot; stop-color=&quot;rgb(0%, 21.662903%, 38.911438%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.488281&quot; stop-color=&quot;rgb(0%, 21.92688%, 39.407349%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.492188&quot; stop-color=&quot;rgb(0%, 22.192383%, 39.903259%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.496094&quot; stop-color=&quot;rgb(0%, 22.45636%, 40.397644%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.5&quot; stop-color=&quot;rgb(0%, 22.720337%, 40.893555%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.503906&quot; stop-color=&quot;rgb(0%, 22.984314%, 41.387939%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.507812&quot; stop-color=&quot;rgb(0%, 23.249817%, 41.88385%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.511719&quot; stop-color=&quot;rgb(0%, 23.513794%, 42.378235%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.515625&quot; stop-color=&quot;rgb(0%, 23.779297%, 42.874146%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.519531&quot; stop-color=&quot;rgb(0%, 24.012756%, 43.293762%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.523438&quot; stop-color=&quot;rgb(0%, 24.246216%, 43.714905%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.527344&quot; stop-color=&quot;rgb(0%, 24.47052%, 44.113159%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.53125&quot; stop-color=&quot;rgb(0%, 24.694824%, 44.512939%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.535156&quot; stop-color=&quot;rgb(0%, 24.919128%, 44.911194%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.539062&quot; stop-color=&quot;rgb(0%, 25.144958%, 45.309448%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.542969&quot; stop-color=&quot;rgb(0%, 25.369263%, 45.707703%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.546875&quot; stop-color=&quot;rgb(0%, 25.593567%, 46.105957%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.550781&quot; stop-color=&quot;rgb(0%, 25.817871%, 46.504211%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.554688&quot; stop-color=&quot;rgb(0%, 26.042175%, 46.902466%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.558594&quot; stop-color=&quot;rgb(0%, 26.266479%, 47.30072%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.5625&quot; stop-color=&quot;rgb(0%, 26.490784%, 47.698975%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.566406&quot; stop-color=&quot;rgb(0%, 26.715088%, 48.097229%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.570312&quot; stop-color=&quot;rgb(0%, 26.940918%, 48.497009%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.574219&quot; stop-color=&quot;rgb(0%, 27.165222%, 48.895264%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.578125&quot; stop-color=&quot;rgb(0%, 27.389526%, 49.293518%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.582031&quot; stop-color=&quot;rgb(0%, 27.613831%, 49.691772%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.585937&quot; stop-color=&quot;rgb(0%, 27.838135%, 50.090027%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.589844&quot; stop-color=&quot;rgb(0%, 28.062439%, 50.488281%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.59375&quot; stop-color=&quot;rgb(0%, 28.288269%, 50.886536%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.597656&quot; stop-color=&quot;rgb(0%, 28.512573%, 51.28479%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.601562&quot; stop-color=&quot;rgb(0%, 28.736877%, 51.683044%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.605469&quot; stop-color=&quot;rgb(0%, 28.961182%, 52.081299%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.609375&quot; stop-color=&quot;rgb(0%, 29.185486%, 52.481079%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.613281&quot; stop-color=&quot;rgb(0%, 29.40979%, 52.879333%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.617187&quot; stop-color=&quot;rgb(0%, 29.634094%, 53.277588%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.621094&quot; stop-color=&quot;rgb(0%, 29.858398%, 53.675842%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.625&quot; stop-color=&quot;rgb(0%, 30.084229%, 54.074097%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.628906&quot; stop-color=&quot;rgb(0%, 30.308533%, 54.472351%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.632812&quot; stop-color=&quot;rgb(0%, 30.532837%, 54.870605%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.636719&quot; stop-color=&quot;rgb(0%, 30.757141%, 55.26886%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.640625&quot; stop-color=&quot;rgb(0%, 30.981445%, 55.667114%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.644531&quot; stop-color=&quot;rgb(0%, 31.14624%, 55.950928%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.648437&quot; stop-color=&quot;rgb(0%, 31.311035%, 56.234741%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.652344&quot; stop-color=&quot;rgb(0%, 31.472778%, 56.513977%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.65625&quot; stop-color=&quot;rgb(0%, 31.634521%, 56.793213%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.660156&quot; stop-color=&quot;rgb(0%, 31.796265%, 57.070923%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.664062&quot; stop-color=&quot;rgb(0%, 31.959534%, 57.350159%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.667969&quot; stop-color=&quot;rgb(0%, 32.121277%, 57.629395%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.671875&quot; stop-color=&quot;rgb(0%, 32.28302%, 57.90863%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.675781&quot; stop-color=&quot;rgb(0%, 32.444763%, 58.18634%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.679688&quot; stop-color=&quot;rgb(0%, 32.606506%, 58.465576%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.683594&quot; stop-color=&quot;rgb(0%, 32.76825%, 58.744812%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.6875&quot; stop-color=&quot;rgb(0%, 32.931519%, 59.024048%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.691406&quot; stop-color=&quot;rgb(0%, 33.093262%, 59.301758%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.695312&quot; stop-color=&quot;rgb(0%, 33.255005%, 59.580994%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.699219&quot; stop-color=&quot;rgb(0%, 33.416748%, 59.860229%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.703125&quot; stop-color=&quot;rgb(0%, 33.580017%, 60.139465%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.707031&quot; stop-color=&quot;rgb(0%, 33.74176%, 60.418701%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.710938&quot; stop-color=&quot;rgb(0%, 33.903503%, 60.697937%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.714844&quot; stop-color=&quot;rgb(0%, 34.065247%, 60.975647%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.71875&quot; stop-color=&quot;rgb(0%, 34.22699%, 61.254883%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.722656&quot; stop-color=&quot;rgb(0%, 34.388733%, 61.534119%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.726562&quot; stop-color=&quot;rgb(0%, 34.552002%, 61.813354%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.730469&quot; stop-color=&quot;rgb(0%, 34.713745%, 62.091064%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.734375&quot; stop-color=&quot;rgb(0%, 34.875488%, 62.3703%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.738281&quot; stop-color=&quot;rgb(0%, 35.037231%, 62.649536%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.742188&quot; stop-color=&quot;rgb(0%, 35.2005%, 62.928772%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.75&quot; stop-color=&quot;rgb(0%, 35.310364%, 63.119507%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.757812&quot; stop-color=&quot;rgb(0%, 35.507202%, 63.464355%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.765625&quot; stop-color=&quot;rgb(0%, 35.682678%, 63.772583%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.773438&quot; stop-color=&quot;rgb(0%, 35.858154%, 64.079285%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.78125&quot; stop-color=&quot;rgb(0%, 36.03363%, 64.385986%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.789062&quot; stop-color=&quot;rgb(0%, 36.209106%, 64.692688%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.796875&quot; stop-color=&quot;rgb(0%, 36.384583%, 64.99939%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.804687&quot; stop-color=&quot;rgb(0%, 36.560059%, 65.307617%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.8125&quot; stop-color=&quot;rgb(0%, 36.735535%, 65.614319%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.875&quot; stop-color=&quot;rgb(0%, 36.860657%, 65.834045%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;1&quot; stop-color=&quot;rgb(0%, 36.898804%, 65.899658%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;/linearGradient&gt;
&lt;clipPath id=&quot;clip-26&quot;&gt;
&lt;path clip-rule=&quot;nonzero&quot; d=&quot;M 82.75 82.078125 L 86.253906 82.078125 L 86.253906 85.578125 L 82.75 85.578125 Z M 82.75 82.078125 &quot;/&gt;
&lt;/clipPath&gt;
&lt;clipPath id=&quot;clip-27&quot;&gt;
&lt;path clip-rule=&quot;nonzero&quot; d=&quot;M 82.804688 83.820312 L 84.441406 82.183594 L 86.078125 83.820312 L 84.441406 85.457031 Z M 82.804688 83.820312 &quot;/&gt;
&lt;/clipPath&gt;
&lt;clipPath id=&quot;clip-28&quot;&gt;
&lt;path clip-rule=&quot;nonzero&quot; d=&quot;M 84.445312 87.078125 L 81.175781 83.808594 L 84.445312 80.542969 L 87.714844 83.808594 Z M 84.445312 87.078125 &quot;/&gt;
&lt;/clipPath&gt;
&lt;linearGradient id=&quot;linear-pattern-8&quot; gradientUnits=&quot;userSpaceOnUse&quot; x1=&quot;-22.677689&quot; y1=&quot;705.18481&quot; x2=&quot;-18.034692&quot; y2=&quot;705.18481&quot; gradientTransform=&quot;matrix(0.705538, 0.705121, 0.705538, -0.705121, -398.7218, 595.40521)&quot;&gt;
&lt;stop offset=&quot;0&quot; stop-color=&quot;rgb(0%, 0%, 0%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.125&quot; stop-color=&quot;rgb(0%, 0%, 0%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.15625&quot; stop-color=&quot;rgb(0%, 0%, 0%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.171875&quot; stop-color=&quot;rgb(0%, 0%, 0%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.179688&quot; stop-color=&quot;rgb(0%, 0.0762939%, 0.135803%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.183594&quot; stop-color=&quot;rgb(0%, 0.492859%, 0.865173%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.1875&quot; stop-color=&quot;rgb(0%, 0.83313%, 1.45874%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.191406&quot; stop-color=&quot;rgb(0%, 1.171875%, 2.052307%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.195313&quot; stop-color=&quot;rgb(0%, 1.512146%, 2.645874%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.199219&quot; stop-color=&quot;rgb(0%, 1.846313%, 3.233337%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.203125&quot; stop-color=&quot;rgb(0%, 2.182007%, 3.822327%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.207031&quot; stop-color=&quot;rgb(0%, 2.508545%, 4.396057%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.210938&quot; stop-color=&quot;rgb(0%, 2.835083%, 4.969788%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.214844&quot; stop-color=&quot;rgb(0%, 3.160095%, 5.543518%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.21875&quot; stop-color=&quot;rgb(0%, 3.486633%, 6.117249%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.222656&quot; stop-color=&quot;rgb(0%, 3.811646%, 6.690979%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.226562&quot; stop-color=&quot;rgb(0%, 4.138184%, 7.264709%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.230469&quot; stop-color=&quot;rgb(0%, 4.464722%, 7.83844%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.234375&quot; stop-color=&quot;rgb(0%, 4.79126%, 8.41217%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.238281&quot; stop-color=&quot;rgb(0%, 5.116272%, 8.985901%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.242188&quot; stop-color=&quot;rgb(0%, 5.44281%, 9.559631%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.246094&quot; stop-color=&quot;rgb(0%, 5.767822%, 10.133362%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.25&quot; stop-color=&quot;rgb(0%, 6.09436%, 10.708618%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.253906&quot; stop-color=&quot;rgb(0%, 6.420898%, 11.282349%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.257813&quot; stop-color=&quot;rgb(0%, 6.747437%, 11.856079%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.261719&quot; stop-color=&quot;rgb(0%, 7.072449%, 12.42981%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.265625&quot; stop-color=&quot;rgb(0%, 7.398987%, 13.00354%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.269531&quot; stop-color=&quot;rgb(0%, 7.725525%, 13.577271%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.273438&quot; stop-color=&quot;rgb(0%, 8.052063%, 14.151001%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.277344&quot; stop-color=&quot;rgb(0%, 8.377075%, 14.724731%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.28125&quot; stop-color=&quot;rgb(0%, 8.703613%, 15.298462%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.285156&quot; stop-color=&quot;rgb(0%, 9.028625%, 15.872192%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.289062&quot; stop-color=&quot;rgb(0%, 9.355164%, 16.445923%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.292969&quot; stop-color=&quot;rgb(0%, 9.681702%, 17.019653%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.296875&quot; stop-color=&quot;rgb(0%, 10.00824%, 17.593384%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.300781&quot; stop-color=&quot;rgb(0%, 10.333252%, 18.167114%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.304688&quot; stop-color=&quot;rgb(0%, 10.65979%, 18.742371%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.308594&quot; stop-color=&quot;rgb(0%, 10.984802%, 19.316101%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.3125&quot; stop-color=&quot;rgb(0%, 11.31134%, 19.889832%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.316406&quot; stop-color=&quot;rgb(0%, 11.637878%, 20.463562%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.320313&quot; stop-color=&quot;rgb(0%, 11.964417%, 21.037292%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.324219&quot; stop-color=&quot;rgb(0%, 12.289429%, 21.611023%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.328125&quot; stop-color=&quot;rgb(0%, 12.615967%, 22.184753%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.332031&quot; stop-color=&quot;rgb(0%, 12.940979%, 22.758484%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.335938&quot; stop-color=&quot;rgb(0%, 13.267517%, 23.332214%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.339844&quot; stop-color=&quot;rgb(0%, 13.594055%, 23.905945%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.34375&quot; stop-color=&quot;rgb(0%, 13.920593%, 24.479675%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.347656&quot; stop-color=&quot;rgb(0%, 14.239502%, 25.04425%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.351563&quot; stop-color=&quot;rgb(0%, 14.558411%, 25.610352%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.355469&quot; stop-color=&quot;rgb(0%, 14.822388%, 26.104736%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.359375&quot; stop-color=&quot;rgb(0%, 15.087891%, 26.600647%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.363281&quot; stop-color=&quot;rgb(0%, 15.351868%, 27.096558%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.367188&quot; stop-color=&quot;rgb(0%, 15.617371%, 27.592468%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.371094&quot; stop-color=&quot;rgb(0%, 15.881348%, 28.086853%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.375&quot; stop-color=&quot;rgb(0%, 16.146851%, 28.582764%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.378906&quot; stop-color=&quot;rgb(0%, 16.410828%, 29.078674%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.382813&quot; stop-color=&quot;rgb(0%, 16.676331%, 29.574585%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.386719&quot; stop-color=&quot;rgb(0%, 16.940308%, 30.06897%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.390625&quot; stop-color=&quot;rgb(0%, 17.204285%, 30.56488%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.394531&quot; stop-color=&quot;rgb(0%, 17.468262%, 31.060791%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.398438&quot; stop-color=&quot;rgb(0%, 17.733765%, 31.556702%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.402344&quot; stop-color=&quot;rgb(0%, 17.997742%, 32.051086%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.40625&quot; stop-color=&quot;rgb(0%, 18.263245%, 32.546997%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.410156&quot; stop-color=&quot;rgb(0%, 18.527222%, 33.041382%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.414062&quot; stop-color=&quot;rgb(0%, 18.792725%, 33.537292%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.417969&quot; stop-color=&quot;rgb(0%, 19.056702%, 34.033203%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.421875&quot; stop-color=&quot;rgb(0%, 19.322205%, 34.529114%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.425781&quot; stop-color=&quot;rgb(0%, 19.586182%, 35.023499%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.429688&quot; stop-color=&quot;rgb(0%, 19.851685%, 35.519409%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.433594&quot; stop-color=&quot;rgb(0%, 20.115662%, 36.01532%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.4375&quot; stop-color=&quot;rgb(0%, 20.381165%, 36.51123%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.441406&quot; stop-color=&quot;rgb(0%, 20.645142%, 37.005615%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.445312&quot; stop-color=&quot;rgb(0%, 20.909119%, 37.501526%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.449219&quot; stop-color=&quot;rgb(0%, 21.173096%, 37.997437%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.453125&quot; stop-color=&quot;rgb(0%, 21.438599%, 38.493347%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.457031&quot; stop-color=&quot;rgb(0%, 21.702576%, 38.987732%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.460938&quot; stop-color=&quot;rgb(0%, 21.968079%, 39.483643%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.464844&quot; stop-color=&quot;rgb(0%, 22.232056%, 39.979553%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.46875&quot; stop-color=&quot;rgb(0%, 22.497559%, 40.475464%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.472656&quot; stop-color=&quot;rgb(0%, 22.761536%, 40.969849%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.476562&quot; stop-color=&quot;rgb(0%, 23.027039%, 41.465759%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.480469&quot; stop-color=&quot;rgb(0%, 23.291016%, 41.960144%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.484375&quot; stop-color=&quot;rgb(0%, 23.556519%, 42.456055%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.488281&quot; stop-color=&quot;rgb(0%, 23.806763%, 42.91687%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.492188&quot; stop-color=&quot;rgb(0%, 24.057007%, 43.379211%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.496094&quot; stop-color=&quot;rgb(0%, 24.281311%, 43.777466%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.5&quot; stop-color=&quot;rgb(0%, 24.505615%, 44.17572%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.503906&quot; stop-color=&quot;rgb(0%, 24.729919%, 44.573975%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.507812&quot; stop-color=&quot;rgb(0%, 24.95575%, 44.973755%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.511719&quot; stop-color=&quot;rgb(0%, 25.180054%, 45.372009%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.515625&quot; stop-color=&quot;rgb(0%, 25.404358%, 45.770264%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.519531&quot; stop-color=&quot;rgb(0%, 25.628662%, 46.168518%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.523438&quot; stop-color=&quot;rgb(0%, 25.852966%, 46.566772%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.527344&quot; stop-color=&quot;rgb(0%, 26.077271%, 46.965027%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.53125&quot; stop-color=&quot;rgb(0%, 26.303101%, 47.364807%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.535156&quot; stop-color=&quot;rgb(0%, 26.527405%, 47.763062%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.539062&quot; stop-color=&quot;rgb(0%, 26.751709%, 48.161316%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.542969&quot; stop-color=&quot;rgb(0%, 26.976013%, 48.55957%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.546875&quot; stop-color=&quot;rgb(0%, 27.200317%, 48.959351%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.550781&quot; stop-color=&quot;rgb(0%, 27.424622%, 49.357605%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.554688&quot; stop-color=&quot;rgb(0%, 27.650452%, 49.755859%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.558594&quot; stop-color=&quot;rgb(0%, 27.874756%, 50.154114%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.5625&quot; stop-color=&quot;rgb(0%, 28.09906%, 50.552368%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.566406&quot; stop-color=&quot;rgb(0%, 28.323364%, 50.950623%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.570312&quot; stop-color=&quot;rgb(0%, 28.547668%, 51.350403%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.574219&quot; stop-color=&quot;rgb(0%, 28.771973%, 51.748657%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.578125&quot; stop-color=&quot;rgb(0%, 28.997803%, 52.146912%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.582031&quot; stop-color=&quot;rgb(0%, 29.222107%, 52.545166%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.585938&quot; stop-color=&quot;rgb(0%, 29.446411%, 52.94342%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.589844&quot; stop-color=&quot;rgb(0%, 29.670715%, 53.341675%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.59375&quot; stop-color=&quot;rgb(0%, 29.89502%, 53.741455%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.597656&quot; stop-color=&quot;rgb(0%, 30.119324%, 54.139709%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.601562&quot; stop-color=&quot;rgb(0%, 30.345154%, 54.537964%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.605469&quot; stop-color=&quot;rgb(0%, 30.569458%, 54.936218%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.609375&quot; stop-color=&quot;rgb(0%, 30.793762%, 55.334473%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.613281&quot; stop-color=&quot;rgb(0%, 30.984497%, 55.667114%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.617188&quot; stop-color=&quot;rgb(0%, 31.175232%, 56.001282%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.621094&quot; stop-color=&quot;rgb(0%, 31.336975%, 56.280518%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.625&quot; stop-color=&quot;rgb(0%, 31.498718%, 56.559753%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.628906&quot; stop-color=&quot;rgb(0%, 31.660461%, 56.838989%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.632812&quot; stop-color=&quot;rgb(0%, 31.82373%, 57.118225%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.636719&quot; stop-color=&quot;rgb(0%, 31.985474%, 57.395935%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.640625&quot; stop-color=&quot;rgb(0%, 32.147217%, 57.675171%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.644531&quot; stop-color=&quot;rgb(0%, 32.30896%, 57.954407%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.648438&quot; stop-color=&quot;rgb(0%, 32.472229%, 58.233643%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.652344&quot; stop-color=&quot;rgb(0%, 32.633972%, 58.512878%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.65625&quot; stop-color=&quot;rgb(0%, 32.795715%, 58.792114%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.660156&quot; stop-color=&quot;rgb(0%, 32.957458%, 59.069824%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.664062&quot; stop-color=&quot;rgb(0%, 33.120728%, 59.34906%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.667969&quot; stop-color=&quot;rgb(0%, 33.282471%, 59.628296%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.671875&quot; stop-color=&quot;rgb(0%, 33.444214%, 59.907532%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.675781&quot; stop-color=&quot;rgb(0%, 33.605957%, 60.186768%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.679688&quot; stop-color=&quot;rgb(0%, 33.769226%, 60.466003%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.683594&quot; stop-color=&quot;rgb(0%, 33.930969%, 60.743713%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.6875&quot; stop-color=&quot;rgb(0%, 34.092712%, 61.022949%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.691406&quot; stop-color=&quot;rgb(0%, 34.254456%, 61.302185%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.695312&quot; stop-color=&quot;rgb(0%, 34.417725%, 61.581421%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.699219&quot; stop-color=&quot;rgb(0%, 34.579468%, 61.859131%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.703125&quot; stop-color=&quot;rgb(0%, 34.741211%, 62.138367%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.707031&quot; stop-color=&quot;rgb(0%, 34.902954%, 62.417603%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.710937&quot; stop-color=&quot;rgb(0%, 35.066223%, 62.696838%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.714844&quot; stop-color=&quot;rgb(0%, 35.206604%, 62.940979%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.71875&quot; stop-color=&quot;rgb(0%, 35.348511%, 63.18512%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.726562&quot; stop-color=&quot;rgb(0%, 35.435486%, 63.337708%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.734375&quot; stop-color=&quot;rgb(0%, 35.610962%, 63.644409%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.742187&quot; stop-color=&quot;rgb(0%, 35.786438%, 63.952637%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.75&quot; stop-color=&quot;rgb(0%, 35.961914%, 64.259338%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.757813&quot; stop-color=&quot;rgb(0%, 36.13739%, 64.56604%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.765625&quot; stop-color=&quot;rgb(0%, 36.312866%, 64.872742%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.773438&quot; stop-color=&quot;rgb(0%, 36.488342%, 65.180969%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.78125&quot; stop-color=&quot;rgb(0%, 36.663818%, 65.487671%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.8125&quot; stop-color=&quot;rgb(0%, 36.825562%, 65.769958%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.875&quot; stop-color=&quot;rgb(0%, 36.898804%, 65.899658%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;1&quot; stop-color=&quot;rgb(0%, 36.898804%, 65.899658%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;/linearGradient&gt;
&lt;clipPath id=&quot;clip-29&quot;&gt;
&lt;path clip-rule=&quot;nonzero&quot; d=&quot;M 91.316406 74.6875 L 95 74.6875 L 95 78.1875 L 91.316406 78.1875 Z M 91.316406 74.6875 &quot;/&gt;
&lt;/clipPath&gt;
&lt;clipPath id=&quot;clip-30&quot;&gt;
&lt;path clip-rule=&quot;nonzero&quot; d=&quot;M 91.4375 76.40625 L 93.15625 74.6875 L 94.878906 76.40625 L 93.15625 78.125 Z M 91.4375 76.40625 &quot;/&gt;
&lt;/clipPath&gt;
&lt;clipPath id=&quot;clip-31&quot;&gt;
&lt;path clip-rule=&quot;nonzero&quot; d=&quot;M 93.144531 79.839844 L 89.699219 76.398438 L 93.144531 72.953125 L 96.609375 76.398438 Z M 93.144531 79.839844 &quot;/&gt;
&lt;/clipPath&gt;
&lt;linearGradient id=&quot;linear-pattern-9&quot; gradientUnits=&quot;userSpaceOnUse&quot; x1=&quot;-20.041909&quot; y1=&quot;713.03497&quot; x2=&quot;-15.418774&quot; y2=&quot;713.03497&quot; gradientTransform=&quot;matrix(0.744293, 0.743853, 0.744293, -0.743853, -424.3595, 619.99365)&quot;&gt;
&lt;stop offset=&quot;0&quot; stop-color=&quot;rgb(0%, 0%, 0%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.125&quot; stop-color=&quot;rgb(0%, 0%, 0%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.1875&quot; stop-color=&quot;rgb(0%, 0%, 0%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.21875&quot; stop-color=&quot;rgb(0%, 0.0549316%, 0.0976562%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.222656&quot; stop-color=&quot;rgb(0%, 0.448608%, 0.785828%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.226562&quot; stop-color=&quot;rgb(0%, 0.787354%, 1.377869%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.230469&quot; stop-color=&quot;rgb(0%, 1.124573%, 1.968384%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.234375&quot; stop-color=&quot;rgb(0%, 1.463318%, 2.560425%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.238281&quot; stop-color=&quot;rgb(0%, 1.797485%, 3.146362%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.242188&quot; stop-color=&quot;rgb(0%, 2.133179%, 3.733826%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.246094&quot; stop-color=&quot;rgb(0%, 2.456665%, 4.304504%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.25&quot; stop-color=&quot;rgb(0%, 2.781677%, 4.876709%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.253906&quot; stop-color=&quot;rgb(0%, 3.106689%, 5.447388%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.257812&quot; stop-color=&quot;rgb(0%, 3.431702%, 6.019592%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.261719&quot; stop-color=&quot;rgb(0%, 3.755188%, 6.590271%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.265625&quot; stop-color=&quot;rgb(0%, 4.0802%, 7.162476%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.269531&quot; stop-color=&quot;rgb(0%, 4.405212%, 7.733154%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.273438&quot; stop-color=&quot;rgb(0%, 4.730225%, 8.305359%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.277344&quot; stop-color=&quot;rgb(0%, 5.053711%, 8.876038%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.28125&quot; stop-color=&quot;rgb(0%, 5.378723%, 9.448242%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.285156&quot; stop-color=&quot;rgb(0%, 5.703735%, 10.018921%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.289062&quot; stop-color=&quot;rgb(0%, 6.028748%, 10.591125%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.292969&quot; stop-color=&quot;rgb(0%, 6.352234%, 11.161804%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.296875&quot; stop-color=&quot;rgb(0%, 6.677246%, 11.734009%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.300781&quot; stop-color=&quot;rgb(0%, 7.002258%, 12.304688%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.304688&quot; stop-color=&quot;rgb(0%, 7.327271%, 12.876892%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.308594&quot; stop-color=&quot;rgb(0%, 7.652283%, 13.447571%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.3125&quot; stop-color=&quot;rgb(0%, 7.977295%, 14.019775%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.316406&quot; stop-color=&quot;rgb(0%, 8.300781%, 14.590454%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.320312&quot; stop-color=&quot;rgb(0%, 8.625793%, 15.162659%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.324219&quot; stop-color=&quot;rgb(0%, 8.950806%, 15.733337%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.328125&quot; stop-color=&quot;rgb(0%, 9.275818%, 16.305542%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.332031&quot; stop-color=&quot;rgb(0%, 9.599304%, 16.876221%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.335938&quot; stop-color=&quot;rgb(0%, 9.924316%, 17.448425%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.339844&quot; stop-color=&quot;rgb(0%, 10.249329%, 18.019104%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.34375&quot; stop-color=&quot;rgb(0%, 10.574341%, 18.589783%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.347656&quot; stop-color=&quot;rgb(0%, 10.897827%, 19.160461%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.351562&quot; stop-color=&quot;rgb(0%, 11.222839%, 19.732666%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.355469&quot; stop-color=&quot;rgb(0%, 11.547852%, 20.303345%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.359375&quot; stop-color=&quot;rgb(0%, 11.872864%, 20.875549%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.363281&quot; stop-color=&quot;rgb(0%, 12.19635%, 21.446228%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.367187&quot; stop-color=&quot;rgb(0%, 12.521362%, 22.018433%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.371094&quot; stop-color=&quot;rgb(0%, 12.846375%, 22.589111%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.375&quot; stop-color=&quot;rgb(0%, 13.171387%, 23.161316%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.378906&quot; stop-color=&quot;rgb(0%, 13.494873%, 23.731995%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.382812&quot; stop-color=&quot;rgb(0%, 13.819885%, 24.304199%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.386719&quot; stop-color=&quot;rgb(0%, 14.144897%, 24.874878%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.390625&quot; stop-color=&quot;rgb(0%, 14.46991%, 25.447083%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.394531&quot; stop-color=&quot;rgb(0%, 14.735413%, 25.942993%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.398437&quot; stop-color=&quot;rgb(0%, 15.002441%, 26.44043%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.402344&quot; stop-color=&quot;rgb(0%, 15.264893%, 26.933289%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.40625&quot; stop-color=&quot;rgb(0%, 15.52887%, 27.427673%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.410156&quot; stop-color=&quot;rgb(0%, 15.792847%, 27.920532%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.414062&quot; stop-color=&quot;rgb(0%, 16.056824%, 28.414917%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.417969&quot; stop-color=&quot;rgb(0%, 16.319275%, 28.907776%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.421875&quot; stop-color=&quot;rgb(0%, 16.583252%, 29.400635%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.425781&quot; stop-color=&quot;rgb(0%, 16.845703%, 29.893494%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.429687&quot; stop-color=&quot;rgb(0%, 17.10968%, 30.387878%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.433594&quot; stop-color=&quot;rgb(0%, 17.373657%, 30.880737%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.4375&quot; stop-color=&quot;rgb(0%, 17.637634%, 31.375122%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.441406&quot; stop-color=&quot;rgb(0%, 17.900085%, 31.867981%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.445312&quot; stop-color=&quot;rgb(0%, 18.164062%, 32.36084%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.449219&quot; stop-color=&quot;rgb(0%, 18.426514%, 32.853699%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.453125&quot; stop-color=&quot;rgb(0%, 18.690491%, 33.348083%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.457031&quot; stop-color=&quot;rgb(0%, 18.954468%, 33.840942%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.460937&quot; stop-color=&quot;rgb(0%, 19.218445%, 34.335327%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.464844&quot; stop-color=&quot;rgb(0%, 19.480896%, 34.828186%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.46875&quot; stop-color=&quot;rgb(0%, 19.744873%, 35.321045%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.472656&quot; stop-color=&quot;rgb(0%, 20.00885%, 35.813904%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.476562&quot; stop-color=&quot;rgb(0%, 20.272827%, 36.308289%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.480469&quot; stop-color=&quot;rgb(0%, 20.535278%, 36.801147%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.484375&quot; stop-color=&quot;rgb(0%, 20.799255%, 37.295532%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.488281&quot; stop-color=&quot;rgb(0%, 21.061707%, 37.788391%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.492187&quot; stop-color=&quot;rgb(0%, 21.325684%, 38.28125%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.496094&quot; stop-color=&quot;rgb(0%, 21.589661%, 38.774109%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.5&quot; stop-color=&quot;rgb(0%, 21.853638%, 39.268494%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.503906&quot; stop-color=&quot;rgb(0%, 22.116089%, 39.761353%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.507812&quot; stop-color=&quot;rgb(0%, 22.380066%, 40.255737%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.511719&quot; stop-color=&quot;rgb(0%, 22.642517%, 40.748596%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.515625&quot; stop-color=&quot;rgb(0%, 22.906494%, 41.241455%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.519531&quot; stop-color=&quot;rgb(0%, 23.170471%, 41.734314%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.523438&quot; stop-color=&quot;rgb(0%, 23.434448%, 42.228699%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.527344&quot; stop-color=&quot;rgb(0%, 23.692322%, 42.710876%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.53125&quot; stop-color=&quot;rgb(0%, 23.951721%, 43.193054%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.535156&quot; stop-color=&quot;rgb(0%, 24.1745%, 43.589783%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.539062&quot; stop-color=&quot;rgb(0%, 24.398804%, 43.986511%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.542969&quot; stop-color=&quot;rgb(0%, 24.621582%, 44.38324%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.546875&quot; stop-color=&quot;rgb(0%, 24.845886%, 44.779968%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.550781&quot; stop-color=&quot;rgb(0%, 25.068665%, 45.176697%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.554687&quot; stop-color=&quot;rgb(0%, 25.292969%, 45.573425%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.558594&quot; stop-color=&quot;rgb(0%, 25.515747%, 45.970154%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.5625&quot; stop-color=&quot;rgb(0%, 25.740051%, 46.366882%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.566406&quot; stop-color=&quot;rgb(0%, 25.96283%, 46.763611%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.570312&quot; stop-color=&quot;rgb(0%, 26.187134%, 47.160339%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.574219&quot; stop-color=&quot;rgb(0%, 26.411438%, 47.557068%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.578125&quot; stop-color=&quot;rgb(0%, 26.635742%, 47.953796%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.582031&quot; stop-color=&quot;rgb(0%, 26.858521%, 48.350525%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.585937&quot; stop-color=&quot;rgb(0%, 27.082825%, 48.747253%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.589844&quot; stop-color=&quot;rgb(0%, 27.305603%, 49.143982%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.59375&quot; stop-color=&quot;rgb(0%, 27.529907%, 49.542236%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.597656&quot; stop-color=&quot;rgb(0%, 27.752686%, 49.938965%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.601562&quot; stop-color=&quot;rgb(0%, 27.97699%, 50.335693%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.605469&quot; stop-color=&quot;rgb(0%, 28.199768%, 50.732422%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.609375&quot; stop-color=&quot;rgb(0%, 28.424072%, 51.12915%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.613281&quot; stop-color=&quot;rgb(0%, 28.646851%, 51.525879%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.617187&quot; stop-color=&quot;rgb(0%, 28.871155%, 51.922607%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.621094&quot; stop-color=&quot;rgb(0%, 29.093933%, 52.319336%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.625&quot; stop-color=&quot;rgb(0%, 29.318237%, 52.716064%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.628906&quot; stop-color=&quot;rgb(0%, 29.541016%, 53.112793%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.632812&quot; stop-color=&quot;rgb(0%, 29.76532%, 53.509521%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.636719&quot; stop-color=&quot;rgb(0%, 29.988098%, 53.90625%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.640625&quot; stop-color=&quot;rgb(0%, 30.212402%, 54.302979%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.644531&quot; stop-color=&quot;rgb(0%, 30.435181%, 54.699707%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.648438&quot; stop-color=&quot;rgb(0%, 30.659485%, 55.096436%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.652344&quot; stop-color=&quot;rgb(0%, 30.86853%, 55.464172%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.65625&quot; stop-color=&quot;rgb(0%, 31.077576%, 55.833435%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.660156&quot; stop-color=&quot;rgb(0%, 31.237793%, 56.111145%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.664063&quot; stop-color=&quot;rgb(0%, 31.399536%, 56.388855%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.667969&quot; stop-color=&quot;rgb(0%, 31.561279%, 56.666565%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.671875&quot; stop-color=&quot;rgb(0%, 31.723022%, 56.944275%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.675781&quot; stop-color=&quot;rgb(0%, 31.88324%, 57.221985%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.679687&quot; stop-color=&quot;rgb(0%, 32.044983%, 57.499695%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.683594&quot; stop-color=&quot;rgb(0%, 32.206726%, 57.777405%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.6875&quot; stop-color=&quot;rgb(0%, 32.368469%, 58.055115%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.691406&quot; stop-color=&quot;rgb(0%, 32.528687%, 58.332825%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.695312&quot; stop-color=&quot;rgb(0%, 32.69043%, 58.610535%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.699219&quot; stop-color=&quot;rgb(0%, 32.852173%, 58.888245%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.703125&quot; stop-color=&quot;rgb(0%, 33.013916%, 59.165955%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.707031&quot; stop-color=&quot;rgb(0%, 33.174133%, 59.443665%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.710938&quot; stop-color=&quot;rgb(0%, 33.335876%, 59.721375%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.714844&quot; stop-color=&quot;rgb(0%, 33.49762%, 59.999084%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.71875&quot; stop-color=&quot;rgb(0%, 33.659363%, 60.276794%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.722656&quot; stop-color=&quot;rgb(0%, 33.821106%, 60.554504%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.726562&quot; stop-color=&quot;rgb(0%, 33.982849%, 60.832214%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.730469&quot; stop-color=&quot;rgb(0%, 34.143066%, 61.109924%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.734375&quot; stop-color=&quot;rgb(0%, 34.30481%, 61.387634%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.738281&quot; stop-color=&quot;rgb(0%, 34.466553%, 61.665344%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.742187&quot; stop-color=&quot;rgb(0%, 34.628296%, 61.943054%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.746094&quot; stop-color=&quot;rgb(0%, 34.788513%, 62.220764%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.75&quot; stop-color=&quot;rgb(0%, 34.950256%, 62.5%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.753906&quot; stop-color=&quot;rgb(0%, 35.112%, 62.77771%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.757812&quot; stop-color=&quot;rgb(0%, 35.273743%, 63.05542%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.765625&quot; stop-color=&quot;rgb(0%, 35.366821%, 63.217163%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.773437&quot; stop-color=&quot;rgb(0%, 35.546875%, 63.53302%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.78125&quot; stop-color=&quot;rgb(0%, 35.722351%, 63.838196%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.789062&quot; stop-color=&quot;rgb(0%, 35.896301%, 64.144897%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.796875&quot; stop-color=&quot;rgb(0%, 36.071777%, 64.450073%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.804687&quot; stop-color=&quot;rgb(0%, 36.245728%, 64.756775%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.8125&quot; stop-color=&quot;rgb(0%, 36.421204%, 65.061951%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.820312&quot; stop-color=&quot;rgb(0%, 36.595154%, 65.367126%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.828125&quot; stop-color=&quot;rgb(0%, 36.77063%, 65.673828%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.84375&quot; stop-color=&quot;rgb(0%, 36.877441%, 65.863037%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.875&quot; stop-color=&quot;rgb(0%, 36.898804%, 65.899658%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;1&quot; stop-color=&quot;rgb(0%, 36.898804%, 65.899658%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;/linearGradient&gt;
&lt;clipPath id=&quot;clip-32&quot;&gt;
&lt;path clip-rule=&quot;nonzero&quot; d=&quot;M 89 77.410156 L 92.484375 77.410156 L 92.484375 81 L 89 81 Z M 89 77.410156 &quot;/&gt;
&lt;/clipPath&gt;
&lt;clipPath id=&quot;clip-33&quot;&gt;
&lt;path clip-rule=&quot;nonzero&quot; d=&quot;M 89.019531 79.199219 L 90.738281 77.480469 L 92.460938 79.199219 L 90.738281 80.921875 Z M 89.019531 79.199219 &quot;/&gt;
&lt;/clipPath&gt;
&lt;clipPath id=&quot;clip-34&quot;&gt;
&lt;path clip-rule=&quot;nonzero&quot; d=&quot;M 90.75 82.640625 L 87.304688 79.199219 L 90.75 75.753906 L 94.195312 79.199219 Z M 90.75 82.640625 &quot;/&gt;
&lt;/clipPath&gt;
&lt;linearGradient id=&quot;linear-pattern-10&quot; gradientUnits=&quot;userSpaceOnUse&quot; x1=&quot;-19.873715&quot; y1=&quot;710.77979&quot; x2=&quot;-15.251301&quot; y2=&quot;710.77979&quot; gradientTransform=&quot;matrix(0.74441, 0.74397, 0.74441, -0.74397, -425.29004, 621.05731)&quot;&gt;
&lt;stop offset=&quot;0&quot; stop-color=&quot;rgb(0%, 0%, 0%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.125&quot; stop-color=&quot;rgb(0%, 0%, 0%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.1875&quot; stop-color=&quot;rgb(0%, 0%, 0%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.21875&quot; stop-color=&quot;rgb(0%, 0%, 0%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.222656&quot; stop-color=&quot;rgb(0%, 0.318909%, 0.558472%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.226562&quot; stop-color=&quot;rgb(0%, 0.637817%, 1.116943%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.230469&quot; stop-color=&quot;rgb(0%, 0.975037%, 1.707458%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.234375&quot; stop-color=&quot;rgb(0%, 1.313782%, 2.2995%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.238281&quot; stop-color=&quot;rgb(0%, 1.651001%, 2.890015%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.242188&quot; stop-color=&quot;rgb(0%, 1.989746%, 3.482056%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.246094&quot; stop-color=&quot;rgb(0%, 2.313232%, 4.052734%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.25&quot; stop-color=&quot;rgb(0%, 2.638245%, 4.624939%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.253906&quot; stop-color=&quot;rgb(0%, 2.963257%, 5.195618%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.257812&quot; stop-color=&quot;rgb(0%, 3.288269%, 5.767822%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.261719&quot; stop-color=&quot;rgb(0%, 3.611755%, 6.338501%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.265625&quot; stop-color=&quot;rgb(0%, 3.936768%, 6.910706%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.269531&quot; stop-color=&quot;rgb(0%, 4.26178%, 7.481384%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.273438&quot; stop-color=&quot;rgb(0%, 4.586792%, 8.052063%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.277344&quot; stop-color=&quot;rgb(0%, 4.910278%, 8.622742%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.28125&quot; stop-color=&quot;rgb(0%, 5.235291%, 9.194946%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.285156&quot; stop-color=&quot;rgb(0%, 5.560303%, 9.765625%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.289062&quot; stop-color=&quot;rgb(0%, 5.885315%, 10.33783%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.292969&quot; stop-color=&quot;rgb(0%, 6.208801%, 10.908508%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.296875&quot; stop-color=&quot;rgb(0%, 6.533813%, 11.480713%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.300781&quot; stop-color=&quot;rgb(0%, 6.858826%, 12.051392%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.304688&quot; stop-color=&quot;rgb(0%, 7.183838%, 12.623596%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.308594&quot; stop-color=&quot;rgb(0%, 7.507324%, 13.194275%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.3125&quot; stop-color=&quot;rgb(0%, 7.832336%, 13.766479%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.316406&quot; stop-color=&quot;rgb(0%, 8.157349%, 14.337158%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.320312&quot; stop-color=&quot;rgb(0%, 8.482361%, 14.907837%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.324219&quot; stop-color=&quot;rgb(0%, 8.805847%, 15.478516%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.328125&quot; stop-color=&quot;rgb(0%, 9.130859%, 16.05072%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.332031&quot; stop-color=&quot;rgb(0%, 9.455872%, 16.621399%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.335938&quot; stop-color=&quot;rgb(0%, 9.780884%, 17.193604%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.339844&quot; stop-color=&quot;rgb(0%, 10.10437%, 17.764282%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.34375&quot; stop-color=&quot;rgb(0%, 10.429382%, 18.336487%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.347656&quot; stop-color=&quot;rgb(0%, 10.752869%, 18.907166%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.351563&quot; stop-color=&quot;rgb(0%, 11.077881%, 19.47937%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.355469&quot; stop-color=&quot;rgb(0%, 11.402893%, 20.050049%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.359375&quot; stop-color=&quot;rgb(0%, 11.727905%, 20.622253%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.363281&quot; stop-color=&quot;rgb(0%, 12.051392%, 21.192932%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.367188&quot; stop-color=&quot;rgb(0%, 12.376404%, 21.763611%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.371094&quot; stop-color=&quot;rgb(0%, 12.701416%, 22.33429%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.375&quot; stop-color=&quot;rgb(0%, 13.026428%, 22.906494%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.378906&quot; stop-color=&quot;rgb(0%, 13.349915%, 23.477173%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.382812&quot; stop-color=&quot;rgb(0%, 13.674927%, 24.049377%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.386719&quot; stop-color=&quot;rgb(0%, 13.999939%, 24.620056%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.390625&quot; stop-color=&quot;rgb(0%, 14.324951%, 25.192261%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.394531&quot; stop-color=&quot;rgb(0%, 14.604187%, 25.706482%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.398438&quot; stop-color=&quot;rgb(0%, 14.884949%, 26.220703%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.402344&quot; stop-color=&quot;rgb(0%, 15.1474%, 26.713562%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.40625&quot; stop-color=&quot;rgb(0%, 15.411377%, 27.207947%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.410156&quot; stop-color=&quot;rgb(0%, 15.673828%, 27.700806%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.414062&quot; stop-color=&quot;rgb(0%, 15.937805%, 28.193665%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.417969&quot; stop-color=&quot;rgb(0%, 16.201782%, 28.686523%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.421875&quot; stop-color=&quot;rgb(0%, 16.465759%, 29.180908%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.425781&quot; stop-color=&quot;rgb(0%, 16.72821%, 29.673767%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.429688&quot; stop-color=&quot;rgb(0%, 16.992188%, 30.166626%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.433594&quot; stop-color=&quot;rgb(0%, 17.254639%, 30.659485%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.4375&quot; stop-color=&quot;rgb(0%, 17.518616%, 31.15387%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.441406&quot; stop-color=&quot;rgb(0%, 17.782593%, 31.646729%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.445313&quot; stop-color=&quot;rgb(0%, 18.04657%, 32.139587%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.449219&quot; stop-color=&quot;rgb(0%, 18.309021%, 32.632446%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.453125&quot; stop-color=&quot;rgb(0%, 18.572998%, 33.126831%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.457031&quot; stop-color=&quot;rgb(0%, 18.835449%, 33.61969%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.460938&quot; stop-color=&quot;rgb(0%, 19.099426%, 34.114075%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.464844&quot; stop-color=&quot;rgb(0%, 19.363403%, 34.606934%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.46875&quot; stop-color=&quot;rgb(0%, 19.62738%, 35.099792%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.472656&quot; stop-color=&quot;rgb(0%, 19.889832%, 35.592651%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.476562&quot; stop-color=&quot;rgb(0%, 20.153809%, 36.087036%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.480469&quot; stop-color=&quot;rgb(0%, 20.41626%, 36.579895%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.484375&quot; stop-color=&quot;rgb(0%, 20.680237%, 37.072754%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.488281&quot; stop-color=&quot;rgb(0%, 20.944214%, 37.565613%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.492188&quot; stop-color=&quot;rgb(0%, 21.208191%, 38.059998%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.496094&quot; stop-color=&quot;rgb(0%, 21.470642%, 38.552856%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.5&quot; stop-color=&quot;rgb(0%, 21.734619%, 39.047241%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.503906&quot; stop-color=&quot;rgb(0%, 21.99707%, 39.5401%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.507812&quot; stop-color=&quot;rgb(0%, 22.261047%, 40.032959%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.511719&quot; stop-color=&quot;rgb(0%, 22.525024%, 40.525818%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.515625&quot; stop-color=&quot;rgb(0%, 22.789001%, 41.020203%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.519531&quot; stop-color=&quot;rgb(0%, 23.051453%, 41.513062%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.523438&quot; stop-color=&quot;rgb(0%, 23.31543%, 42.00592%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.527344&quot; stop-color=&quot;rgb(0%, 23.577881%, 42.498779%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.53125&quot; stop-color=&quot;rgb(0%, 23.841858%, 42.993164%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.535156&quot; stop-color=&quot;rgb(0%, 24.069214%, 43.400574%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.539062&quot; stop-color=&quot;rgb(0%, 24.298096%, 43.807983%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.542969&quot; stop-color=&quot;rgb(0%, 24.520874%, 44.204712%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.546875&quot; stop-color=&quot;rgb(0%, 24.745178%, 44.60144%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.550781&quot; stop-color=&quot;rgb(0%, 24.967957%, 44.998169%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.554688&quot; stop-color=&quot;rgb(0%, 25.192261%, 45.394897%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.558594&quot; stop-color=&quot;rgb(0%, 25.415039%, 45.791626%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.5625&quot; stop-color=&quot;rgb(0%, 25.639343%, 46.188354%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.566406&quot; stop-color=&quot;rgb(0%, 25.862122%, 46.585083%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.570312&quot; stop-color=&quot;rgb(0%, 26.086426%, 46.981812%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.574219&quot; stop-color=&quot;rgb(0%, 26.309204%, 47.37854%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.578125&quot; stop-color=&quot;rgb(0%, 26.533508%, 47.775269%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.582031&quot; stop-color=&quot;rgb(0%, 26.756287%, 48.171997%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.585938&quot; stop-color=&quot;rgb(0%, 26.980591%, 48.568726%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.589844&quot; stop-color=&quot;rgb(0%, 27.203369%, 48.965454%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.59375&quot; stop-color=&quot;rgb(0%, 27.427673%, 49.362183%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.597656&quot; stop-color=&quot;rgb(0%, 27.650452%, 49.758911%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.601562&quot; stop-color=&quot;rgb(0%, 27.874756%, 50.15564%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.605469&quot; stop-color=&quot;rgb(0%, 28.097534%, 50.552368%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.609375&quot; stop-color=&quot;rgb(0%, 28.321838%, 50.949097%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.613281&quot; stop-color=&quot;rgb(0%, 28.544617%, 51.345825%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.617188&quot; stop-color=&quot;rgb(0%, 28.768921%, 51.742554%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.621094&quot; stop-color=&quot;rgb(0%, 28.993225%, 52.139282%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.625&quot; stop-color=&quot;rgb(0%, 29.217529%, 52.536011%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.628906&quot; stop-color=&quot;rgb(0%, 29.440308%, 52.932739%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.632812&quot; stop-color=&quot;rgb(0%, 29.664612%, 53.329468%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.636719&quot; stop-color=&quot;rgb(0%, 29.88739%, 53.726196%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.640625&quot; stop-color=&quot;rgb(0%, 30.111694%, 54.122925%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.644531&quot; stop-color=&quot;rgb(0%, 30.334473%, 54.519653%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.648438&quot; stop-color=&quot;rgb(0%, 30.558777%, 54.916382%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.652344&quot; stop-color=&quot;rgb(0%, 30.781555%, 55.311584%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.65625&quot; stop-color=&quot;rgb(0%, 31.004333%, 55.706787%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.660156&quot; stop-color=&quot;rgb(0%, 31.164551%, 55.984497%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.664062&quot; stop-color=&quot;rgb(0%, 31.326294%, 56.262207%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.667969&quot; stop-color=&quot;rgb(0%, 31.488037%, 56.539917%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.671875&quot; stop-color=&quot;rgb(0%, 31.64978%, 56.817627%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.675781&quot; stop-color=&quot;rgb(0%, 31.809998%, 57.095337%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.679688&quot; stop-color=&quot;rgb(0%, 31.971741%, 57.373047%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.683594&quot; stop-color=&quot;rgb(0%, 32.133484%, 57.650757%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.6875&quot; stop-color=&quot;rgb(0%, 32.295227%, 57.928467%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.691406&quot; stop-color=&quot;rgb(0%, 32.455444%, 58.206177%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.695312&quot; stop-color=&quot;rgb(0%, 32.617188%, 58.483887%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.699219&quot; stop-color=&quot;rgb(0%, 32.778931%, 58.761597%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.703125&quot; stop-color=&quot;rgb(0%, 32.940674%, 59.039307%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.707031&quot; stop-color=&quot;rgb(0%, 33.100891%, 59.317017%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.710938&quot; stop-color=&quot;rgb(0%, 33.262634%, 59.594727%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.714844&quot; stop-color=&quot;rgb(0%, 33.424377%, 59.872437%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.71875&quot; stop-color=&quot;rgb(0%, 33.586121%, 60.150146%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.722656&quot; stop-color=&quot;rgb(0%, 33.746338%, 60.427856%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.726562&quot; stop-color=&quot;rgb(0%, 33.908081%, 60.705566%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.730469&quot; stop-color=&quot;rgb(0%, 34.069824%, 60.983276%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.734375&quot; stop-color=&quot;rgb(0%, 34.231567%, 61.260986%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.738281&quot; stop-color=&quot;rgb(0%, 34.391785%, 61.538696%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.742188&quot; stop-color=&quot;rgb(0%, 34.553528%, 61.816406%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.746094&quot; stop-color=&quot;rgb(0%, 34.715271%, 62.094116%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.75&quot; stop-color=&quot;rgb(0%, 34.877014%, 62.371826%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.753906&quot; stop-color=&quot;rgb(0%, 35.037231%, 62.649536%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.757812&quot; stop-color=&quot;rgb(0%, 35.198975%, 62.927246%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.765625&quot; stop-color=&quot;rgb(0%, 35.308838%, 63.117981%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.773438&quot; stop-color=&quot;rgb(0%, 35.507202%, 63.46283%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.78125&quot; stop-color=&quot;rgb(0%, 35.681152%, 63.769531%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.789062&quot; stop-color=&quot;rgb(0%, 35.856628%, 64.074707%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.796875&quot; stop-color=&quot;rgb(0%, 36.030579%, 64.379883%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.804688&quot; stop-color=&quot;rgb(0%, 36.206055%, 64.686584%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.8125&quot; stop-color=&quot;rgb(0%, 36.380005%, 64.99176%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.820312&quot; stop-color=&quot;rgb(0%, 36.555481%, 65.296936%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.828125&quot; stop-color=&quot;rgb(0%, 36.729431%, 65.603638%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.84375&quot; stop-color=&quot;rgb(0%, 36.857605%, 65.827942%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.875&quot; stop-color=&quot;rgb(0%, 36.898804%, 65.899658%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;1&quot; stop-color=&quot;rgb(0%, 36.898804%, 65.899658%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;/linearGradient&gt;
&lt;clipPath id=&quot;clip-35&quot;&gt;
&lt;path clip-rule=&quot;nonzero&quot; d=&quot;M 96 75.851562 L 99.492188 75.851562 L 99.492188 79.355469 L 96 79.355469 Z M 96 75.851562 &quot;/&gt;
&lt;/clipPath&gt;
&lt;clipPath id=&quot;clip-36&quot;&gt;
&lt;path clip-rule=&quot;nonzero&quot; d=&quot;M 99.453125 77.585938 L 97.738281 75.851562 L 96.007812 77.585938 L 97.738281 79.296875 Z M 99.453125 77.585938 &quot;/&gt;
&lt;/clipPath&gt;
&lt;clipPath id=&quot;clip-37&quot;&gt;
&lt;path clip-rule=&quot;nonzero&quot; d=&quot;M 97.738281 81.027344 L 94.292969 77.585938 L 97.738281 74.121094 L 101.183594 77.585938 Z M 97.738281 81.027344 &quot;/&gt;
&lt;/clipPath&gt;
&lt;linearGradient id=&quot;linear-pattern-11&quot; gradientUnits=&quot;userSpaceOnUse&quot; x1=&quot;-15.936084&quot; y1=&quot;714.79242&quot; x2=&quot;-11.499103&quot; y2=&quot;714.79242&quot; gradientTransform=&quot;matrix(0.776508, 0.776049, 0.776508, -0.776049, -446.66461, 642.93835)&quot;&gt;
&lt;stop offset=&quot;0&quot; stop-color=&quot;rgb(0%, 0%, 0%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.125&quot; stop-color=&quot;rgb(0%, 0%, 0%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.15625&quot; stop-color=&quot;rgb(0%, 0%, 0%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.171875&quot; stop-color=&quot;rgb(0%, 0%, 0%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.179688&quot; stop-color=&quot;rgb(0%, 0%, 0%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.183594&quot; stop-color=&quot;rgb(0%, 0.210571%, 0.369263%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.1875&quot; stop-color=&quot;rgb(0%, 0.422668%, 0.740051%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.191406&quot; stop-color=&quot;rgb(0%, 0.746155%, 1.307678%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.195312&quot; stop-color=&quot;rgb(0%, 1.071167%, 1.875305%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.199219&quot; stop-color=&quot;rgb(0%, 1.394653%, 2.442932%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.203125&quot; stop-color=&quot;rgb(0%, 1.719666%, 3.010559%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.207031&quot; stop-color=&quot;rgb(0%, 2.037048%, 3.565979%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.210938&quot; stop-color=&quot;rgb(0%, 2.354431%, 4.122925%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.214844&quot; stop-color=&quot;rgb(0%, 2.66571%, 4.670715%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.21875&quot; stop-color=&quot;rgb(0%, 2.97699%, 5.220032%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.222656&quot; stop-color=&quot;rgb(0%, 3.288269%, 5.767822%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.226562&quot; stop-color=&quot;rgb(0%, 3.599548%, 6.317139%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.230469&quot; stop-color=&quot;rgb(0%, 3.910828%, 6.864929%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.234375&quot; stop-color=&quot;rgb(0%, 4.223633%, 7.41272%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.238281&quot; stop-color=&quot;rgb(0%, 4.534912%, 7.96051%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.242188&quot; stop-color=&quot;rgb(0%, 4.846191%, 8.509827%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.246094&quot; stop-color=&quot;rgb(0%, 5.157471%, 9.057617%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.25&quot; stop-color=&quot;rgb(0%, 5.46875%, 9.606934%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.253906&quot; stop-color=&quot;rgb(0%, 5.780029%, 10.154724%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.257812&quot; stop-color=&quot;rgb(0%, 6.092834%, 10.704041%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.261719&quot; stop-color=&quot;rgb(0%, 6.404114%, 11.251831%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.265625&quot; stop-color=&quot;rgb(0%, 6.715393%, 11.801147%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.269531&quot; stop-color=&quot;rgb(0%, 7.026672%, 12.348938%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.273438&quot; stop-color=&quot;rgb(0%, 7.339478%, 12.896729%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.277344&quot; stop-color=&quot;rgb(0%, 7.650757%, 13.444519%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.28125&quot; stop-color=&quot;rgb(0%, 7.962036%, 13.993835%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.285156&quot; stop-color=&quot;rgb(0%, 8.273315%, 14.541626%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.289063&quot; stop-color=&quot;rgb(0%, 8.584595%, 15.090942%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.292969&quot; stop-color=&quot;rgb(0%, 8.895874%, 15.638733%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.296875&quot; stop-color=&quot;rgb(0%, 9.208679%, 16.188049%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.300781&quot; stop-color=&quot;rgb(0%, 9.519958%, 16.73584%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.304688&quot; stop-color=&quot;rgb(0%, 9.831238%, 17.28363%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.308594&quot; stop-color=&quot;rgb(0%, 10.142517%, 17.831421%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.3125&quot; stop-color=&quot;rgb(0%, 10.455322%, 18.380737%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.316406&quot; stop-color=&quot;rgb(0%, 10.766602%, 18.928528%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.320312&quot; stop-color=&quot;rgb(0%, 11.077881%, 19.477844%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.324219&quot; stop-color=&quot;rgb(0%, 11.38916%, 20.025635%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.328125&quot; stop-color=&quot;rgb(0%, 11.700439%, 20.574951%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.332031&quot; stop-color=&quot;rgb(0%, 12.011719%, 21.122742%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.335938&quot; stop-color=&quot;rgb(0%, 12.324524%, 21.672058%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.339844&quot; stop-color=&quot;rgb(0%, 12.635803%, 22.219849%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.34375&quot; stop-color=&quot;rgb(0%, 12.947083%, 22.767639%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.347656&quot; stop-color=&quot;rgb(0%, 13.258362%, 23.31543%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.351563&quot; stop-color=&quot;rgb(0%, 13.571167%, 23.864746%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.355469&quot; stop-color=&quot;rgb(0%, 13.882446%, 24.412537%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.359375&quot; stop-color=&quot;rgb(0%, 14.193726%, 24.961853%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.363281&quot; stop-color=&quot;rgb(0%, 14.474487%, 25.471497%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.367188&quot; stop-color=&quot;rgb(0%, 14.756775%, 25.982666%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.371094&quot; stop-color=&quot;rgb(0%, 15.010071%, 26.455688%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.375&quot; stop-color=&quot;rgb(0%, 15.263367%, 26.928711%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.378906&quot; stop-color=&quot;rgb(0%, 15.515137%, 27.401733%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.382812&quot; stop-color=&quot;rgb(0%, 15.768433%, 27.876282%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.386719&quot; stop-color=&quot;rgb(0%, 16.021729%, 28.349304%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.390625&quot; stop-color=&quot;rgb(0%, 16.275024%, 28.822327%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.394531&quot; stop-color=&quot;rgb(0%, 16.526794%, 29.295349%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.398438&quot; stop-color=&quot;rgb(0%, 16.78009%, 29.769897%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.402344&quot; stop-color=&quot;rgb(0%, 17.033386%, 30.24292%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.40625&quot; stop-color=&quot;rgb(0%, 17.286682%, 30.717468%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.410156&quot; stop-color=&quot;rgb(0%, 17.538452%, 31.190491%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.414063&quot; stop-color=&quot;rgb(0%, 17.791748%, 31.663513%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.417969&quot; stop-color=&quot;rgb(0%, 18.043518%, 32.136536%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.421875&quot; stop-color=&quot;rgb(0%, 18.296814%, 32.611084%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.425781&quot; stop-color=&quot;rgb(0%, 18.55011%, 33.084106%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.429688&quot; stop-color=&quot;rgb(0%, 18.803406%, 33.558655%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.433594&quot; stop-color=&quot;rgb(0%, 19.055176%, 34.031677%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.4375&quot; stop-color=&quot;rgb(0%, 19.308472%, 34.5047%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.441406&quot; stop-color=&quot;rgb(0%, 19.561768%, 34.977722%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.445313&quot; stop-color=&quot;rgb(0%, 19.815063%, 35.452271%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.449219&quot; stop-color=&quot;rgb(0%, 20.066833%, 35.925293%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.453125&quot; stop-color=&quot;rgb(0%, 20.320129%, 36.398315%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.457031&quot; stop-color=&quot;rgb(0%, 20.573425%, 36.871338%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.460938&quot; stop-color=&quot;rgb(0%, 20.826721%, 37.345886%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.464844&quot; stop-color=&quot;rgb(0%, 21.078491%, 37.818909%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.46875&quot; stop-color=&quot;rgb(0%, 21.331787%, 38.293457%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.472656&quot; stop-color=&quot;rgb(0%, 21.585083%, 38.766479%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.476562&quot; stop-color=&quot;rgb(0%, 21.838379%, 39.239502%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.480469&quot; stop-color=&quot;rgb(0%, 22.090149%, 39.712524%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.484375&quot; stop-color=&quot;rgb(0%, 22.343445%, 40.187073%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.488281&quot; stop-color=&quot;rgb(0%, 22.596741%, 40.660095%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.492188&quot; stop-color=&quot;rgb(0%, 22.850037%, 41.133118%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.496094&quot; stop-color=&quot;rgb(0%, 23.101807%, 41.60614%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.5&quot; stop-color=&quot;rgb(0%, 23.355103%, 42.080688%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.503906&quot; stop-color=&quot;rgb(0%, 23.608398%, 42.553711%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.507812&quot; stop-color=&quot;rgb(0%, 23.861694%, 43.028259%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.511719&quot; stop-color=&quot;rgb(0%, 24.078369%, 43.415833%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.515625&quot; stop-color=&quot;rgb(0%, 24.29657%, 43.803406%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.519531&quot; stop-color=&quot;rgb(0%, 24.510193%, 44.18335%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.523438&quot; stop-color=&quot;rgb(0%, 24.725342%, 44.564819%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.527344&quot; stop-color=&quot;rgb(0%, 24.938965%, 44.944763%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.53125&quot; stop-color=&quot;rgb(0%, 25.154114%, 45.326233%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.535156&quot; stop-color=&quot;rgb(0%, 25.367737%, 45.707703%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.539062&quot; stop-color=&quot;rgb(0%, 25.582886%, 46.089172%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.542969&quot; stop-color=&quot;rgb(0%, 25.798035%, 46.469116%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.546875&quot; stop-color=&quot;rgb(0%, 26.013184%, 46.850586%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.550781&quot; stop-color=&quot;rgb(0%, 26.226807%, 47.23053%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.554688&quot; stop-color=&quot;rgb(0%, 26.441956%, 47.612%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.558594&quot; stop-color=&quot;rgb(0%, 26.655579%, 47.991943%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.5625&quot; stop-color=&quot;rgb(0%, 26.870728%, 48.373413%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.566406&quot; stop-color=&quot;rgb(0%, 27.085876%, 48.753357%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.570312&quot; stop-color=&quot;rgb(0%, 27.301025%, 49.134827%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.574219&quot; stop-color=&quot;rgb(0%, 27.514648%, 49.514771%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.578125&quot; stop-color=&quot;rgb(0%, 27.729797%, 49.89624%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.582031&quot; stop-color=&quot;rgb(0%, 27.94342%, 50.27771%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.585938&quot; stop-color=&quot;rgb(0%, 28.158569%, 50.65918%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.589844&quot; stop-color=&quot;rgb(0%, 28.372192%, 51.039124%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.59375&quot; stop-color=&quot;rgb(0%, 28.587341%, 51.420593%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.597656&quot; stop-color=&quot;rgb(0%, 28.80249%, 51.800537%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.601563&quot; stop-color=&quot;rgb(0%, 29.017639%, 52.182007%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.605469&quot; stop-color=&quot;rgb(0%, 29.231262%, 52.561951%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.609375&quot; stop-color=&quot;rgb(0%, 29.446411%, 52.94342%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.613281&quot; stop-color=&quot;rgb(0%, 29.660034%, 53.323364%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.617188&quot; stop-color=&quot;rgb(0%, 29.875183%, 53.704834%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.621094&quot; stop-color=&quot;rgb(0%, 30.090332%, 54.084778%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.625&quot; stop-color=&quot;rgb(0%, 30.305481%, 54.466248%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.628906&quot; stop-color=&quot;rgb(0%, 30.519104%, 54.846191%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.632812&quot; stop-color=&quot;rgb(0%, 30.734253%, 55.227661%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.636719&quot; stop-color=&quot;rgb(0%, 30.924988%, 55.56488%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.640625&quot; stop-color=&quot;rgb(0%, 31.117249%, 55.9021%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.644531&quot; stop-color=&quot;rgb(0%, 31.271362%, 56.169128%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.648438&quot; stop-color=&quot;rgb(0%, 31.427002%, 56.436157%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.652344&quot; stop-color=&quot;rgb(0%, 31.581116%, 56.70166%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.65625&quot; stop-color=&quot;rgb(0%, 31.736755%, 56.968689%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.660156&quot; stop-color=&quot;rgb(0%, 31.890869%, 57.235718%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.664062&quot; stop-color=&quot;rgb(0%, 32.046509%, 57.502747%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.667969&quot; stop-color=&quot;rgb(0%, 32.200623%, 57.76825%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.671875&quot; stop-color=&quot;rgb(0%, 32.356262%, 58.035278%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.675781&quot; stop-color=&quot;rgb(0%, 32.510376%, 58.300781%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.679688&quot; stop-color=&quot;rgb(0%, 32.666016%, 58.56781%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.683594&quot; stop-color=&quot;rgb(0%, 32.820129%, 58.834839%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.6875&quot; stop-color=&quot;rgb(0%, 32.975769%, 59.101868%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.691406&quot; stop-color=&quot;rgb(0%, 33.129883%, 59.367371%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.695313&quot; stop-color=&quot;rgb(0%, 33.285522%, 59.634399%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.699219&quot; stop-color=&quot;rgb(0%, 33.439636%, 59.901428%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.703125&quot; stop-color=&quot;rgb(0%, 33.595276%, 60.168457%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.707031&quot; stop-color=&quot;rgb(0%, 33.74939%, 60.43396%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.710938&quot; stop-color=&quot;rgb(0%, 33.905029%, 60.700989%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.714844&quot; stop-color=&quot;rgb(0%, 34.060669%, 60.968018%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.71875&quot; stop-color=&quot;rgb(0%, 34.216309%, 61.235046%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.722656&quot; stop-color=&quot;rgb(0%, 34.370422%, 61.500549%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.726562&quot; stop-color=&quot;rgb(0%, 34.526062%, 61.767578%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.730469&quot; stop-color=&quot;rgb(0%, 34.680176%, 62.033081%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.734375&quot; stop-color=&quot;rgb(0%, 34.835815%, 62.30011%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.738281&quot; stop-color=&quot;rgb(0%, 34.989929%, 62.567139%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.742188&quot; stop-color=&quot;rgb(0%, 35.145569%, 62.834167%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.746094&quot; stop-color=&quot;rgb(0%, 35.264587%, 63.040161%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.75&quot; stop-color=&quot;rgb(0%, 35.383606%, 63.246155%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.757812&quot; stop-color=&quot;rgb(0%, 35.467529%, 63.392639%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.765625&quot; stop-color=&quot;rgb(0%, 35.635376%, 63.687134%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.773438&quot; stop-color=&quot;rgb(0%, 35.803223%, 63.980103%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.78125&quot; stop-color=&quot;rgb(0%, 35.969543%, 64.273071%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.789063&quot; stop-color=&quot;rgb(0%, 36.13739%, 64.567566%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.796875&quot; stop-color=&quot;rgb(0%, 36.305237%, 64.860535%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.804688&quot; stop-color=&quot;rgb(0%, 36.473083%, 65.153503%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.8125&quot; stop-color=&quot;rgb(0%, 36.64093%, 65.446472%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.875&quot; stop-color=&quot;rgb(0%, 36.811829%, 65.74707%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;1&quot; stop-color=&quot;rgb(0%, 36.898804%, 65.899658%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;/linearGradient&gt;
&lt;clipPath id=&quot;clip-38&quot;&gt;
&lt;path clip-rule=&quot;nonzero&quot; d=&quot;M 78.078125 72.011719 L 80.414062 72.011719 L 80.414062 74.101562 L 78.078125 74.101562 Z M 78.078125 72.011719 &quot;/&gt;
&lt;/clipPath&gt;
&lt;clipPath id=&quot;clip-39&quot;&gt;
&lt;path clip-rule=&quot;nonzero&quot; d=&quot;M 78.203125 73.027344 L 79.222656 72.011719 L 80.242188 73.027344 L 79.222656 74.046875 Z M 78.203125 73.027344 &quot;/&gt;
&lt;/clipPath&gt;
&lt;clipPath id=&quot;clip-40&quot;&gt;
&lt;path clip-rule=&quot;nonzero&quot; d=&quot;M 79.226562 75.054688 L 77.203125 73.03125 L 79.226562 71.007812 L 81.253906 73.03125 Z M 79.226562 75.054688 &quot;/&gt;
&lt;/clipPath&gt;
&lt;linearGradient id=&quot;linear-pattern-12&quot; gradientUnits=&quot;userSpaceOnUse&quot; x1=&quot;-59.684825&quot; y1=&quot;699.38281&quot; x2=&quot;-55.026843&quot; y2=&quot;699.38281&quot; gradientTransform=&quot;matrix(0.437326, 0.437068, 0.437326, -0.437068, -201.55571, 403.778562)&quot;&gt;
&lt;stop offset=&quot;0&quot; stop-color=&quot;rgb(0%, 0%, 0%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.125&quot; stop-color=&quot;rgb(0%, 0%, 0%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.1875&quot; stop-color=&quot;rgb(0%, 0%, 0%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.21875&quot; stop-color=&quot;rgb(0%, 0%, 0%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.226562&quot; stop-color=&quot;rgb(0%, 0%, 0%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.230469&quot; stop-color=&quot;rgb(0%, 0.276184%, 0.483704%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.234375&quot; stop-color=&quot;rgb(0%, 0.552368%, 0.967407%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.238281&quot; stop-color=&quot;rgb(0%, 0.892639%, 1.5625%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.242188&quot; stop-color=&quot;rgb(0%, 1.23291%, 2.159119%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.246094&quot; stop-color=&quot;rgb(0%, 1.573181%, 2.754211%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.25&quot; stop-color=&quot;rgb(0%, 1.913452%, 3.35083%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.253906&quot; stop-color=&quot;rgb(0%, 2.241516%, 3.927612%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.257812&quot; stop-color=&quot;rgb(0%, 2.571106%, 4.50592%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.261719&quot; stop-color=&quot;rgb(0%, 2.897644%, 5.081177%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.265625&quot; stop-color=&quot;rgb(0%, 3.225708%, 5.657959%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.269531&quot; stop-color=&quot;rgb(0%, 3.552246%, 6.233215%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.273438&quot; stop-color=&quot;rgb(0%, 3.88031%, 6.809998%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.277344&quot; stop-color=&quot;rgb(0%, 4.206848%, 7.385254%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.28125&quot; stop-color=&quot;rgb(0%, 4.534912%, 7.96051%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.285156&quot; stop-color=&quot;rgb(0%, 4.86145%, 8.535767%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.289062&quot; stop-color=&quot;rgb(0%, 5.187988%, 9.112549%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.292969&quot; stop-color=&quot;rgb(0%, 5.514526%, 9.687805%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.296875&quot; stop-color=&quot;rgb(0%, 5.84259%, 10.263062%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.300781&quot; stop-color=&quot;rgb(0%, 6.169128%, 10.838318%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.304688&quot; stop-color=&quot;rgb(0%, 6.497192%, 11.4151%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.308594&quot; stop-color=&quot;rgb(0%, 6.82373%, 11.990356%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.3125&quot; stop-color=&quot;rgb(0%, 7.150269%, 12.565613%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.316406&quot; stop-color=&quot;rgb(0%, 7.476807%, 13.140869%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.320312&quot; stop-color=&quot;rgb(0%, 7.804871%, 13.717651%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.324219&quot; stop-color=&quot;rgb(0%, 8.131409%, 14.292908%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.328125&quot; stop-color=&quot;rgb(0%, 8.459473%, 14.86969%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.332031&quot; stop-color=&quot;rgb(0%, 8.786011%, 15.444946%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.335938&quot; stop-color=&quot;rgb(0%, 9.114075%, 16.020203%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.339844&quot; stop-color=&quot;rgb(0%, 9.440613%, 16.595459%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.34375&quot; stop-color=&quot;rgb(0%, 9.767151%, 17.172241%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.347656&quot; stop-color=&quot;rgb(0%, 10.093689%, 17.747498%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.351562&quot; stop-color=&quot;rgb(0%, 10.421753%, 18.322754%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.355469&quot; stop-color=&quot;rgb(0%, 10.748291%, 18.89801%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.359375&quot; stop-color=&quot;rgb(0%, 11.076355%, 19.474792%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.363281&quot; stop-color=&quot;rgb(0%, 11.402893%, 20.050049%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.367188&quot; stop-color=&quot;rgb(0%, 11.730957%, 20.625305%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.371094&quot; stop-color=&quot;rgb(0%, 12.057495%, 21.200562%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.375&quot; stop-color=&quot;rgb(0%, 12.384033%, 21.777344%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.378906&quot; stop-color=&quot;rgb(0%, 12.710571%, 22.3526%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.382812&quot; stop-color=&quot;rgb(0%, 13.038635%, 22.929382%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.386719&quot; stop-color=&quot;rgb(0%, 13.365173%, 23.504639%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.390625&quot; stop-color=&quot;rgb(0%, 13.693237%, 24.079895%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.394531&quot; stop-color=&quot;rgb(0%, 14.019775%, 24.655151%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.398438&quot; stop-color=&quot;rgb(0%, 14.347839%, 25.231934%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.402344&quot; stop-color=&quot;rgb(0%, 14.627075%, 25.746155%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.40625&quot; stop-color=&quot;rgb(0%, 14.906311%, 26.261902%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.410156&quot; stop-color=&quot;rgb(0%, 15.171814%, 26.759338%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.414062&quot; stop-color=&quot;rgb(0%, 15.437317%, 27.256775%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.417969&quot; stop-color=&quot;rgb(0%, 15.70282%, 27.752686%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.421875&quot; stop-color=&quot;rgb(0%, 15.968323%, 28.250122%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.425781&quot; stop-color=&quot;rgb(0%, 16.233826%, 28.747559%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.429688&quot; stop-color=&quot;rgb(0%, 16.499329%, 29.244995%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.433594&quot; stop-color=&quot;rgb(0%, 16.764832%, 29.740906%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.4375&quot; stop-color=&quot;rgb(0%, 17.030334%, 30.238342%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.441406&quot; stop-color=&quot;rgb(0%, 17.295837%, 30.735779%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.445312&quot; stop-color=&quot;rgb(0%, 17.56134%, 31.233215%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.449219&quot; stop-color=&quot;rgb(0%, 17.826843%, 31.729126%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.453125&quot; stop-color=&quot;rgb(0%, 18.092346%, 32.226562%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.457031&quot; stop-color=&quot;rgb(0%, 18.357849%, 32.723999%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.460937&quot; stop-color=&quot;rgb(0%, 18.623352%, 33.221436%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.464844&quot; stop-color=&quot;rgb(0%, 18.888855%, 33.718872%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.46875&quot; stop-color=&quot;rgb(0%, 19.154358%, 34.216309%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.472656&quot; stop-color=&quot;rgb(0%, 19.419861%, 34.712219%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.476562&quot; stop-color=&quot;rgb(0%, 19.685364%, 35.209656%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.480469&quot; stop-color=&quot;rgb(0%, 19.950867%, 35.707092%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.484375&quot; stop-color=&quot;rgb(0%, 20.21637%, 36.204529%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.488281&quot; stop-color=&quot;rgb(0%, 20.481873%, 36.700439%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.492188&quot; stop-color=&quot;rgb(0%, 20.747375%, 37.197876%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.496094&quot; stop-color=&quot;rgb(0%, 21.012878%, 37.695312%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.5&quot; stop-color=&quot;rgb(0%, 21.278381%, 38.192749%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.503906&quot; stop-color=&quot;rgb(0%, 21.543884%, 38.68866%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.507812&quot; stop-color=&quot;rgb(0%, 21.809387%, 39.186096%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.511719&quot; stop-color=&quot;rgb(0%, 22.07489%, 39.683533%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.515625&quot; stop-color=&quot;rgb(0%, 22.340393%, 40.180969%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.519531&quot; stop-color=&quot;rgb(0%, 22.605896%, 40.67688%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.523438&quot; stop-color=&quot;rgb(0%, 22.871399%, 41.174316%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.527344&quot; stop-color=&quot;rgb(0%, 23.136902%, 41.671753%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.53125&quot; stop-color=&quot;rgb(0%, 23.402405%, 42.169189%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.535156&quot; stop-color=&quot;rgb(0%, 23.664856%, 42.658997%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.539062&quot; stop-color=&quot;rgb(0%, 23.928833%, 43.15033%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.542969&quot; stop-color=&quot;rgb(0%, 24.153137%, 43.55011%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.546875&quot; stop-color=&quot;rgb(0%, 24.378967%, 43.94989%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.550781&quot; stop-color=&quot;rgb(0%, 24.603271%, 44.34967%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.554688&quot; stop-color=&quot;rgb(0%, 24.829102%, 44.749451%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.558594&quot; stop-color=&quot;rgb(0%, 25.053406%, 45.149231%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.5625&quot; stop-color=&quot;rgb(0%, 25.279236%, 45.549011%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.566406&quot; stop-color=&quot;rgb(0%, 25.505066%, 45.948792%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.570312&quot; stop-color=&quot;rgb(0%, 25.730896%, 46.348572%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.574219&quot; stop-color=&quot;rgb(0%, 25.9552%, 46.748352%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.578125&quot; stop-color=&quot;rgb(0%, 26.18103%, 47.148132%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.582031&quot; stop-color=&quot;rgb(0%, 26.405334%, 47.547913%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.585938&quot; stop-color=&quot;rgb(0%, 26.631165%, 47.947693%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.589844&quot; stop-color=&quot;rgb(0%, 26.856995%, 48.347473%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.59375&quot; stop-color=&quot;rgb(0%, 27.082825%, 48.747253%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.597656&quot; stop-color=&quot;rgb(0%, 27.307129%, 49.147034%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.601562&quot; stop-color=&quot;rgb(0%, 27.532959%, 49.546814%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.605469&quot; stop-color=&quot;rgb(0%, 27.757263%, 49.946594%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.609375&quot; stop-color=&quot;rgb(0%, 27.983093%, 50.346375%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.613281&quot; stop-color=&quot;rgb(0%, 28.207397%, 50.746155%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.617187&quot; stop-color=&quot;rgb(0%, 28.433228%, 51.145935%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.621094&quot; stop-color=&quot;rgb(0%, 28.659058%, 51.545715%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.625&quot; stop-color=&quot;rgb(0%, 28.884888%, 51.945496%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.628906&quot; stop-color=&quot;rgb(0%, 29.109192%, 52.345276%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.632812&quot; stop-color=&quot;rgb(0%, 29.335022%, 52.745056%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.636719&quot; stop-color=&quot;rgb(0%, 29.559326%, 53.144836%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.640625&quot; stop-color=&quot;rgb(0%, 29.785156%, 53.544617%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.644531&quot; stop-color=&quot;rgb(0%, 30.010986%, 53.944397%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.648438&quot; stop-color=&quot;rgb(0%, 30.236816%, 54.344177%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.652344&quot; stop-color=&quot;rgb(0%, 30.461121%, 54.743958%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.65625&quot; stop-color=&quot;rgb(0%, 30.686951%, 55.145264%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.660156&quot; stop-color=&quot;rgb(0%, 30.892944%, 55.506897%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.664062&quot; stop-color=&quot;rgb(0%, 31.098938%, 55.870056%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.667969&quot; stop-color=&quot;rgb(0%, 31.260681%, 56.149292%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.671875&quot; stop-color=&quot;rgb(0%, 31.42395%, 56.430054%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.675781&quot; stop-color=&quot;rgb(0%, 31.585693%, 56.70929%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.679688&quot; stop-color=&quot;rgb(0%, 31.748962%, 56.990051%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.683594&quot; stop-color=&quot;rgb(0%, 31.910706%, 57.269287%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.6875&quot; stop-color=&quot;rgb(0%, 32.073975%, 57.550049%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.691406&quot; stop-color=&quot;rgb(0%, 32.237244%, 57.829285%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.695312&quot; stop-color=&quot;rgb(0%, 32.400513%, 58.110046%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.699219&quot; stop-color=&quot;rgb(0%, 32.562256%, 58.389282%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.703125&quot; stop-color=&quot;rgb(0%, 32.725525%, 58.668518%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.707031&quot; stop-color=&quot;rgb(0%, 32.887268%, 58.947754%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.710937&quot; stop-color=&quot;rgb(0%, 33.050537%, 59.228516%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.714844&quot; stop-color=&quot;rgb(0%, 33.21228%, 59.507751%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.71875&quot; stop-color=&quot;rgb(0%, 33.375549%, 59.788513%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.722656&quot; stop-color=&quot;rgb(0%, 33.537292%, 60.067749%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.726562&quot; stop-color=&quot;rgb(0%, 33.700562%, 60.348511%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.730469&quot; stop-color=&quot;rgb(0%, 33.862305%, 60.627747%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.734375&quot; stop-color=&quot;rgb(0%, 34.025574%, 60.908508%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.738281&quot; stop-color=&quot;rgb(0%, 34.187317%, 61.187744%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.742188&quot; stop-color=&quot;rgb(0%, 34.350586%, 61.468506%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.746094&quot; stop-color=&quot;rgb(0%, 34.513855%, 61.747742%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.75&quot; stop-color=&quot;rgb(0%, 34.677124%, 62.026978%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.753906&quot; stop-color=&quot;rgb(0%, 34.838867%, 62.306213%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.757812&quot; stop-color=&quot;rgb(0%, 35.002136%, 62.586975%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.761719&quot; stop-color=&quot;rgb(0%, 35.157776%, 62.85553%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.765625&quot; stop-color=&quot;rgb(0%, 35.314941%, 63.12561%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.773438&quot; stop-color=&quot;rgb(0%, 35.401917%, 63.279724%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.78125&quot; stop-color=&quot;rgb(0%, 35.577393%, 63.587952%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.789062&quot; stop-color=&quot;rgb(0%, 35.754395%, 63.896179%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.796875&quot; stop-color=&quot;rgb(0%, 35.929871%, 64.202881%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.804687&quot; stop-color=&quot;rgb(0%, 36.105347%, 64.511108%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.8125&quot; stop-color=&quot;rgb(0%, 36.282349%, 64.819336%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.820312&quot; stop-color=&quot;rgb(0%, 36.457825%, 65.127563%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.828125&quot; stop-color=&quot;rgb(0%, 36.633301%, 65.435791%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.84375&quot; stop-color=&quot;rgb(0%, 36.810303%, 65.744019%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.875&quot; stop-color=&quot;rgb(0%, 36.898804%, 65.899658%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;1&quot; stop-color=&quot;rgb(0%, 36.898804%, 65.899658%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;/linearGradient&gt;
&lt;clipPath id=&quot;clip-41&quot;&gt;
&lt;path clip-rule=&quot;nonzero&quot; d=&quot;M 85.476562 80.132812 L 90.148438 80.132812 L 90.148438 84.800781 L 85.476562 84.800781 Z M 85.476562 80.132812 &quot;/&gt;
&lt;/clipPath&gt;
&lt;clipPath id=&quot;clip-42&quot;&gt;
&lt;path clip-rule=&quot;nonzero&quot; d=&quot;M 87.171875 83.070312 C 87.171875 82.894531 87.304688 82.71875 87.5 82.71875 C 87.695312 82.71875 87.851562 82.875 87.851562 83.070312 C 87.851562 83.265625 87.695312 83.402344 87.5 83.402344 C 87.304688 83.402344 87.171875 83.246094 87.171875 83.070312 M 87.171875 81.785156 C 87.171875 81.609375 87.304688 81.457031 87.5 81.457031 C 87.695312 81.457031 87.851562 81.609375 87.851562 81.785156 C 87.851562 81.980469 87.695312 82.136719 87.5 82.136719 C 87.304688 82.136719 87.171875 81.980469 87.171875 81.785156 M 85.554688 82.546875 L 87.792969 84.78125 L 90.03125 82.546875 L 87.792969 80.308594 Z M 85.554688 82.546875 &quot;/&gt;
&lt;/clipPath&gt;
&lt;clipPath id=&quot;clip-43&quot;&gt;
&lt;path clip-rule=&quot;nonzero&quot; d=&quot;M 87.792969 87.019531 L 83.316406 82.546875 L 87.792969 78.070312 L 92.269531 82.546875 Z M 87.792969 87.019531 &quot;/&gt;
&lt;/clipPath&gt;
&lt;linearGradient id=&quot;linear-pattern-13&quot; gradientUnits=&quot;userSpaceOnUse&quot; x1=&quot;-6.512143&quot; y1=&quot;712.63281&quot; x2=&quot;-2.535794&quot; y2=&quot;712.63281&quot; gradientTransform=&quot;matrix(1.12591, 1.125244, 1.12591, -1.125244, -709.46356, 889.51141)&quot;&gt;
&lt;stop offset=&quot;0&quot; stop-color=&quot;rgb(0%, 0%, 0%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.125&quot; stop-color=&quot;rgb(0%, 0%, 0%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.140625&quot; stop-color=&quot;rgb(0%, 0%, 0%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.144531&quot; stop-color=&quot;rgb(0%, 0.154114%, 0.268555%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.148438&quot; stop-color=&quot;rgb(0%, 0.308228%, 0.538635%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.152344&quot; stop-color=&quot;rgb(0%, 0.598145%, 1.046753%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.15625&quot; stop-color=&quot;rgb(0%, 0.889587%, 1.556396%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.160156&quot; stop-color=&quot;rgb(0%, 1.179504%, 2.064514%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.164062&quot; stop-color=&quot;rgb(0%, 1.469421%, 2.572632%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.167969&quot; stop-color=&quot;rgb(0%, 1.759338%, 3.079224%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.171875&quot; stop-color=&quot;rgb(0%, 2.049255%, 3.587341%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.175781&quot; stop-color=&quot;rgb(0%, 2.328491%, 4.078674%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.179687&quot; stop-color=&quot;rgb(0%, 2.607727%, 4.570007%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.183594&quot; stop-color=&quot;rgb(0%, 2.886963%, 5.06134%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.1875&quot; stop-color=&quot;rgb(0%, 3.166199%, 5.552673%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.191406&quot; stop-color=&quot;rgb(0%, 3.445435%, 6.044006%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.195312&quot; stop-color=&quot;rgb(0%, 3.72467%, 6.535339%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.199219&quot; stop-color=&quot;rgb(0%, 4.003906%, 7.026672%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.203125&quot; stop-color=&quot;rgb(0%, 4.283142%, 7.518005%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.207031&quot; stop-color=&quot;rgb(0%, 4.562378%, 8.009338%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.210938&quot; stop-color=&quot;rgb(0%, 4.841614%, 8.502197%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.214844&quot; stop-color=&quot;rgb(0%, 5.12085%, 8.99353%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.21875&quot; stop-color=&quot;rgb(0%, 5.400085%, 9.484863%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.222656&quot; stop-color=&quot;rgb(0%, 5.679321%, 9.976196%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.226562&quot; stop-color=&quot;rgb(0%, 5.958557%, 10.467529%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.230469&quot; stop-color=&quot;rgb(0%, 6.237793%, 10.958862%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.234375&quot; stop-color=&quot;rgb(0%, 6.517029%, 11.450195%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.238281&quot; stop-color=&quot;rgb(0%, 6.796265%, 11.941528%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.242188&quot; stop-color=&quot;rgb(0%, 7.0755%, 12.432861%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.246094&quot; stop-color=&quot;rgb(0%, 7.354736%, 12.924194%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.25&quot; stop-color=&quot;rgb(0%, 7.633972%, 13.415527%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.253906&quot; stop-color=&quot;rgb(0%, 7.913208%, 13.90686%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.257812&quot; stop-color=&quot;rgb(0%, 8.192444%, 14.399719%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.261719&quot; stop-color=&quot;rgb(0%, 8.47168%, 14.891052%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.265625&quot; stop-color=&quot;rgb(0%, 8.750916%, 15.382385%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.269531&quot; stop-color=&quot;rgb(0%, 9.030151%, 15.873718%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.273438&quot; stop-color=&quot;rgb(0%, 9.309387%, 16.365051%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.277344&quot; stop-color=&quot;rgb(0%, 9.588623%, 16.856384%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.28125&quot; stop-color=&quot;rgb(0%, 9.867859%, 17.347717%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.285156&quot; stop-color=&quot;rgb(0%, 10.147095%, 17.83905%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.289062&quot; stop-color=&quot;rgb(0%, 10.426331%, 18.330383%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.292969&quot; stop-color=&quot;rgb(0%, 10.705566%, 18.821716%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.296875&quot; stop-color=&quot;rgb(0%, 10.984802%, 19.314575%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.300781&quot; stop-color=&quot;rgb(0%, 11.264038%, 19.805908%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.304688&quot; stop-color=&quot;rgb(0%, 11.543274%, 20.297241%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.308594&quot; stop-color=&quot;rgb(0%, 11.82251%, 20.788574%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.3125&quot; stop-color=&quot;rgb(0%, 12.101746%, 21.279907%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.316406&quot; stop-color=&quot;rgb(0%, 12.380981%, 21.77124%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.320312&quot; stop-color=&quot;rgb(0%, 12.660217%, 22.262573%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.324219&quot; stop-color=&quot;rgb(0%, 12.939453%, 22.753906%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.328125&quot; stop-color=&quot;rgb(0%, 13.218689%, 23.245239%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.332031&quot; stop-color=&quot;rgb(0%, 13.497925%, 23.736572%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.335937&quot; stop-color=&quot;rgb(0%, 13.777161%, 24.227905%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.339844&quot; stop-color=&quot;rgb(0%, 14.056396%, 24.719238%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.34375&quot; stop-color=&quot;rgb(0%, 14.335632%, 25.212097%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.347656&quot; stop-color=&quot;rgb(0%, 14.576721%, 25.656128%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.351562&quot; stop-color=&quot;rgb(0%, 14.819336%, 26.100159%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.355469&quot; stop-color=&quot;rgb(0%, 15.045166%, 26.524353%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.359375&quot; stop-color=&quot;rgb(0%, 15.272522%, 26.948547%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.363281&quot; stop-color=&quot;rgb(0%, 15.498352%, 27.372742%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.367187&quot; stop-color=&quot;rgb(0%, 15.725708%, 27.796936%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.371094&quot; stop-color=&quot;rgb(0%, 15.953064%, 28.22113%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.375&quot; stop-color=&quot;rgb(0%, 16.18042%, 28.645325%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.378906&quot; stop-color=&quot;rgb(0%, 16.40625%, 29.069519%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.382812&quot; stop-color=&quot;rgb(0%, 16.633606%, 29.493713%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.386719&quot; stop-color=&quot;rgb(0%, 16.859436%, 29.917908%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.390625&quot; stop-color=&quot;rgb(0%, 17.086792%, 30.343628%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.394531&quot; stop-color=&quot;rgb(0%, 17.312622%, 30.767822%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.398437&quot; stop-color=&quot;rgb(0%, 17.539978%, 31.192017%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.402344&quot; stop-color=&quot;rgb(0%, 17.765808%, 31.616211%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.40625&quot; stop-color=&quot;rgb(0%, 17.993164%, 32.040405%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.410156&quot; stop-color=&quot;rgb(0%, 18.218994%, 32.4646%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.414062&quot; stop-color=&quot;rgb(0%, 18.44635%, 32.888794%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.417969&quot; stop-color=&quot;rgb(0%, 18.67218%, 33.312988%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.421875&quot; stop-color=&quot;rgb(0%, 18.899536%, 33.737183%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.425781&quot; stop-color=&quot;rgb(0%, 19.125366%, 34.161377%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.429688&quot; stop-color=&quot;rgb(0%, 19.352722%, 34.587097%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.433594&quot; stop-color=&quot;rgb(0%, 19.578552%, 35.011292%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.4375&quot; stop-color=&quot;rgb(0%, 19.805908%, 35.435486%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.441406&quot; stop-color=&quot;rgb(0%, 20.031738%, 35.85968%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.445312&quot; stop-color=&quot;rgb(0%, 20.259094%, 36.283875%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.449219&quot; stop-color=&quot;rgb(0%, 20.484924%, 36.708069%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.453125&quot; stop-color=&quot;rgb(0%, 20.71228%, 37.132263%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.457031&quot; stop-color=&quot;rgb(0%, 20.93811%, 37.556458%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.460938&quot; stop-color=&quot;rgb(0%, 21.165466%, 37.982178%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.464844&quot; stop-color=&quot;rgb(0%, 21.391296%, 38.406372%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.46875&quot; stop-color=&quot;rgb(0%, 21.618652%, 38.830566%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.472656&quot; stop-color=&quot;rgb(0%, 21.844482%, 39.254761%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.476562&quot; stop-color=&quot;rgb(0%, 22.071838%, 39.678955%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.480469&quot; stop-color=&quot;rgb(0%, 22.297668%, 40.103149%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.484375&quot; stop-color=&quot;rgb(0%, 22.525024%, 40.527344%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.488281&quot; stop-color=&quot;rgb(0%, 22.75238%, 40.951538%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.492188&quot; stop-color=&quot;rgb(0%, 22.979736%, 41.375732%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.496094&quot; stop-color=&quot;rgb(0%, 23.205566%, 41.799927%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.5&quot; stop-color=&quot;rgb(0%, 23.432922%, 42.225647%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.503906&quot; stop-color=&quot;rgb(0%, 23.658752%, 42.649841%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.507812&quot; stop-color=&quot;rgb(0%, 23.886108%, 43.074036%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.511719&quot; stop-color=&quot;rgb(0%, 24.078369%, 43.417358%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.515625&quot; stop-color=&quot;rgb(0%, 24.272156%, 43.760681%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.519531&quot; stop-color=&quot;rgb(0%, 24.464417%, 44.102478%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.523437&quot; stop-color=&quot;rgb(0%, 24.656677%, 44.444275%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.527344&quot; stop-color=&quot;rgb(0%, 24.848938%, 44.784546%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.53125&quot; stop-color=&quot;rgb(0%, 25.041199%, 45.126343%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.535156&quot; stop-color=&quot;rgb(0%, 25.233459%, 45.466614%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.539062&quot; stop-color=&quot;rgb(0%, 25.42572%, 45.808411%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.542969&quot; stop-color=&quot;rgb(0%, 25.617981%, 46.150208%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.546875&quot; stop-color=&quot;rgb(0%, 25.810242%, 46.492004%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.550781&quot; stop-color=&quot;rgb(0%, 26.002502%, 46.832275%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.554687&quot; stop-color=&quot;rgb(0%, 26.194763%, 47.174072%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.558594&quot; stop-color=&quot;rgb(0%, 26.387024%, 47.515869%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.5625&quot; stop-color=&quot;rgb(0%, 26.580811%, 47.857666%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.566406&quot; stop-color=&quot;rgb(0%, 26.773071%, 48.197937%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.570312&quot; stop-color=&quot;rgb(0%, 26.965332%, 48.539734%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.574219&quot; stop-color=&quot;rgb(0%, 27.157593%, 48.880005%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.578125&quot; stop-color=&quot;rgb(0%, 27.349854%, 49.221802%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.582031&quot; stop-color=&quot;rgb(0%, 27.542114%, 49.563599%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.585938&quot; stop-color=&quot;rgb(0%, 27.734375%, 49.905396%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.589844&quot; stop-color=&quot;rgb(0%, 27.926636%, 50.245667%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.59375&quot; stop-color=&quot;rgb(0%, 28.118896%, 50.587463%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.597656&quot; stop-color=&quot;rgb(0%, 28.311157%, 50.927734%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.601562&quot; stop-color=&quot;rgb(0%, 28.503418%, 51.269531%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.605469&quot; stop-color=&quot;rgb(0%, 28.695679%, 51.611328%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.609375&quot; stop-color=&quot;rgb(0%, 28.887939%, 51.953125%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.613281&quot; stop-color=&quot;rgb(0%, 29.0802%, 52.293396%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.617188&quot; stop-color=&quot;rgb(0%, 29.272461%, 52.635193%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.621094&quot; stop-color=&quot;rgb(0%, 29.464722%, 52.975464%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.625&quot; stop-color=&quot;rgb(0%, 29.656982%, 53.317261%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.628906&quot; stop-color=&quot;rgb(0%, 29.849243%, 53.659058%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.632812&quot; stop-color=&quot;rgb(0%, 30.041504%, 54.000854%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.636719&quot; stop-color=&quot;rgb(0%, 30.233765%, 54.341125%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.640625&quot; stop-color=&quot;rgb(0%, 30.426025%, 54.682922%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.644531&quot; stop-color=&quot;rgb(0%, 30.618286%, 55.023193%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.648438&quot; stop-color=&quot;rgb(0%, 30.810547%, 55.36499%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.652344&quot; stop-color=&quot;rgb(0%, 30.975342%, 55.653381%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.65625&quot; stop-color=&quot;rgb(0%, 31.141663%, 55.943298%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.660156&quot; stop-color=&quot;rgb(0%, 31.280518%, 56.181335%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.664062&quot; stop-color=&quot;rgb(0%, 31.419373%, 56.420898%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.667969&quot; stop-color=&quot;rgb(0%, 31.558228%, 56.658936%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.671875&quot; stop-color=&quot;rgb(0%, 31.697083%, 56.898499%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.675781&quot; stop-color=&quot;rgb(0%, 31.835938%, 57.138062%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.679688&quot; stop-color=&quot;rgb(0%, 31.974792%, 57.377625%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.683594&quot; stop-color=&quot;rgb(0%, 32.113647%, 57.615662%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.6875&quot; stop-color=&quot;rgb(0%, 32.252502%, 57.855225%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.691406&quot; stop-color=&quot;rgb(0%, 32.391357%, 58.093262%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.695312&quot; stop-color=&quot;rgb(0%, 32.530212%, 58.332825%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.699219&quot; stop-color=&quot;rgb(0%, 32.667542%, 58.570862%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.703125&quot; stop-color=&quot;rgb(0%, 32.806396%, 58.810425%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.707031&quot; stop-color=&quot;rgb(0%, 32.945251%, 59.048462%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.710938&quot; stop-color=&quot;rgb(0%, 33.084106%, 59.288025%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.714844&quot; stop-color=&quot;rgb(0%, 33.222961%, 59.526062%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.71875&quot; stop-color=&quot;rgb(0%, 33.361816%, 59.765625%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.722656&quot; stop-color=&quot;rgb(0%, 33.500671%, 60.003662%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.726563&quot; stop-color=&quot;rgb(0%, 33.639526%, 60.243225%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.730469&quot; stop-color=&quot;rgb(0%, 33.778381%, 60.482788%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.734375&quot; stop-color=&quot;rgb(0%, 33.917236%, 60.722351%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.738281&quot; stop-color=&quot;rgb(0%, 34.056091%, 60.960388%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.742188&quot; stop-color=&quot;rgb(0%, 34.194946%, 61.199951%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.746094&quot; stop-color=&quot;rgb(0%, 34.333801%, 61.437988%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.75&quot; stop-color=&quot;rgb(0%, 34.472656%, 61.677551%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.753906&quot; stop-color=&quot;rgb(0%, 34.611511%, 61.915588%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.757812&quot; stop-color=&quot;rgb(0%, 34.750366%, 62.155151%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.761719&quot; stop-color=&quot;rgb(0%, 34.889221%, 62.393188%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.765625&quot; stop-color=&quot;rgb(0%, 35.028076%, 62.632751%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.769531&quot; stop-color=&quot;rgb(0%, 35.165405%, 62.869263%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.773437&quot; stop-color=&quot;rgb(0%, 35.302734%, 63.105774%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.78125&quot; stop-color=&quot;rgb(0%, 35.377502%, 63.237%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.789062&quot; stop-color=&quot;rgb(0%, 35.528564%, 63.499451%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.796875&quot; stop-color=&quot;rgb(0%, 35.678101%, 63.763428%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.804687&quot; stop-color=&quot;rgb(0%, 35.829163%, 64.025879%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.8125&quot; stop-color=&quot;rgb(0%, 35.978699%, 64.28833%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.820312&quot; stop-color=&quot;rgb(0%, 36.129761%, 64.552307%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.828125&quot; stop-color=&quot;rgb(0%, 36.279297%, 64.814758%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.835938&quot; stop-color=&quot;rgb(0%, 36.430359%, 65.077209%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.84375&quot; stop-color=&quot;rgb(0%, 36.579895%, 65.341187%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.851562&quot; stop-color=&quot;rgb(0%, 36.730957%, 65.603638%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.859375&quot; stop-color=&quot;rgb(0%, 36.851501%, 65.817261%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.875&quot; stop-color=&quot;rgb(0%, 36.898804%, 65.899658%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;1&quot; stop-color=&quot;rgb(0%, 36.898804%, 65.899658%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;/linearGradient&gt;
&lt;clipPath id=&quot;clip-44&quot;&gt;
&lt;path clip-rule=&quot;nonzero&quot; d=&quot;M 89.5625 81.496094 L 94.234375 81.496094 L 94.234375 86.164062 L 89.5625 86.164062 Z M 89.5625 81.496094 &quot;/&gt;
&lt;/clipPath&gt;
&lt;clipPath id=&quot;clip-45&quot;&gt;
&lt;path clip-rule=&quot;nonzero&quot; d=&quot;M 91.179688 84.277344 C 91.179688 84.101562 91.316406 83.925781 91.511719 83.925781 C 91.707031 83.925781 91.859375 84.082031 91.859375 84.277344 C 91.859375 84.472656 91.707031 84.605469 91.511719 84.605469 C 91.335938 84.605469 91.179688 84.453125 91.179688 84.277344 M 91.179688 82.992188 C 91.179688 82.816406 91.316406 82.660156 91.511719 82.660156 C 91.707031 82.660156 91.859375 82.816406 91.859375 82.992188 C 91.859375 83.1875 91.707031 83.34375 91.511719 83.34375 C 91.335938 83.34375 91.179688 83.1875 91.179688 82.992188 M 89.582031 83.847656 L 91.824219 86.085938 L 94.0625 83.847656 L 91.824219 81.609375 Z M 89.582031 83.847656 &quot;/&gt;
&lt;/clipPath&gt;
&lt;clipPath id=&quot;clip-46&quot;&gt;
&lt;path clip-rule=&quot;nonzero&quot; d=&quot;M 91.824219 88.34375 L 87.34375 83.867188 L 91.824219 79.375 L 96.300781 83.867188 Z M 91.824219 88.34375 &quot;/&gt;
&lt;/clipPath&gt;
&lt;linearGradient id=&quot;linear-pattern-14&quot; gradientUnits=&quot;userSpaceOnUse&quot; x1=&quot;-4.979378&quot; y1=&quot;713.40918&quot; x2=&quot;-1.003304&quot; y2=&quot;713.40918&quot; gradientTransform=&quot;matrix(1.125988, 1.125322, 1.125988, -1.125322, -708.10419, 890.03442)&quot;&gt;
&lt;stop offset=&quot;0&quot; stop-color=&quot;rgb(0%, 0%, 0%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.125&quot; stop-color=&quot;rgb(0%, 0%, 0%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.140625&quot; stop-color=&quot;rgb(0%, 0%, 0%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.144531&quot; stop-color=&quot;rgb(0%, 0.123596%, 0.216675%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.148438&quot; stop-color=&quot;rgb(0%, 0.248718%, 0.434875%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.152344&quot; stop-color=&quot;rgb(0%, 0.538635%, 0.942993%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.15625&quot; stop-color=&quot;rgb(0%, 0.830078%, 1.452637%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.160156&quot; stop-color=&quot;rgb(0%, 1.119995%, 1.960754%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.164063&quot; stop-color=&quot;rgb(0%, 1.409912%, 2.468872%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.167969&quot; stop-color=&quot;rgb(0%, 1.699829%, 2.97699%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.171875&quot; stop-color=&quot;rgb(0%, 1.991272%, 3.485107%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.175781&quot; stop-color=&quot;rgb(0%, 2.270508%, 3.97644%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.179688&quot; stop-color=&quot;rgb(0%, 2.549744%, 4.469299%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.183594&quot; stop-color=&quot;rgb(0%, 2.828979%, 4.960632%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.1875&quot; stop-color=&quot;rgb(0%, 3.108215%, 5.451965%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.191406&quot; stop-color=&quot;rgb(0%, 3.387451%, 5.943298%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.195313&quot; stop-color=&quot;rgb(0%, 3.666687%, 6.434631%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.199219&quot; stop-color=&quot;rgb(0%, 3.945923%, 6.925964%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.203125&quot; stop-color=&quot;rgb(0%, 4.225159%, 7.417297%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.207031&quot; stop-color=&quot;rgb(0%, 4.504395%, 7.90863%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.210938&quot; stop-color=&quot;rgb(0%, 4.78363%, 8.399963%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.214844&quot; stop-color=&quot;rgb(0%, 5.062866%, 8.891296%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.21875&quot; stop-color=&quot;rgb(0%, 5.342102%, 9.382629%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.222656&quot; stop-color=&quot;rgb(0%, 5.621338%, 9.873962%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.226563&quot; stop-color=&quot;rgb(0%, 5.900574%, 10.365295%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.230469&quot; stop-color=&quot;rgb(0%, 6.17981%, 10.856628%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.234375&quot; stop-color=&quot;rgb(0%, 6.459045%, 11.349487%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.238281&quot; stop-color=&quot;rgb(0%, 6.738281%, 11.84082%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.242188&quot; stop-color=&quot;rgb(0%, 7.017517%, 12.332153%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.246094&quot; stop-color=&quot;rgb(0%, 7.296753%, 12.823486%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.25&quot; stop-color=&quot;rgb(0%, 7.575989%, 13.314819%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.253906&quot; stop-color=&quot;rgb(0%, 7.855225%, 13.806152%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.257812&quot; stop-color=&quot;rgb(0%, 8.13446%, 14.297485%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.261719&quot; stop-color=&quot;rgb(0%, 8.413696%, 14.788818%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.265625&quot; stop-color=&quot;rgb(0%, 8.692932%, 15.280151%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.269531&quot; stop-color=&quot;rgb(0%, 8.972168%, 15.771484%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.273438&quot; stop-color=&quot;rgb(0%, 9.251404%, 16.262817%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.277344&quot; stop-color=&quot;rgb(0%, 9.53064%, 16.75415%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.28125&quot; stop-color=&quot;rgb(0%, 9.809875%, 17.245483%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.285156&quot; stop-color=&quot;rgb(0%, 10.089111%, 17.736816%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.289062&quot; stop-color=&quot;rgb(0%, 10.368347%, 18.228149%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.292969&quot; stop-color=&quot;rgb(0%, 10.647583%, 18.719482%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.296875&quot; stop-color=&quot;rgb(0%, 10.926819%, 19.210815%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.300781&quot; stop-color=&quot;rgb(0%, 11.206055%, 19.702148%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.304688&quot; stop-color=&quot;rgb(0%, 11.485291%, 20.195007%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.308594&quot; stop-color=&quot;rgb(0%, 11.764526%, 20.68634%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.3125&quot; stop-color=&quot;rgb(0%, 12.043762%, 21.177673%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.316406&quot; stop-color=&quot;rgb(0%, 12.322998%, 21.669006%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.320312&quot; stop-color=&quot;rgb(0%, 12.602234%, 22.160339%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.324219&quot; stop-color=&quot;rgb(0%, 12.88147%, 22.651672%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.328125&quot; stop-color=&quot;rgb(0%, 13.160706%, 23.143005%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.332031&quot; stop-color=&quot;rgb(0%, 13.439941%, 23.634338%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.335938&quot; stop-color=&quot;rgb(0%, 13.719177%, 24.125671%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.339844&quot; stop-color=&quot;rgb(0%, 13.998413%, 24.617004%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.34375&quot; stop-color=&quot;rgb(0%, 14.277649%, 25.108337%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.347656&quot; stop-color=&quot;rgb(0%, 14.524841%, 25.558472%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.351562&quot; stop-color=&quot;rgb(0%, 14.772034%, 26.010132%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.355469&quot; stop-color=&quot;rgb(0%, 14.997864%, 26.434326%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.359375&quot; stop-color=&quot;rgb(0%, 15.22522%, 26.858521%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.363281&quot; stop-color=&quot;rgb(0%, 15.45105%, 27.282715%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.367188&quot; stop-color=&quot;rgb(0%, 15.678406%, 27.706909%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.371094&quot; stop-color=&quot;rgb(0%, 15.904236%, 28.131104%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.375&quot; stop-color=&quot;rgb(0%, 16.131592%, 28.556824%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.378906&quot; stop-color=&quot;rgb(0%, 16.357422%, 28.981018%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.382812&quot; stop-color=&quot;rgb(0%, 16.584778%, 29.405212%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.386719&quot; stop-color=&quot;rgb(0%, 16.810608%, 29.829407%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.390625&quot; stop-color=&quot;rgb(0%, 17.037964%, 30.253601%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.394531&quot; stop-color=&quot;rgb(0%, 17.263794%, 30.677795%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.398438&quot; stop-color=&quot;rgb(0%, 17.49115%, 31.10199%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.402344&quot; stop-color=&quot;rgb(0%, 17.71698%, 31.526184%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.40625&quot; stop-color=&quot;rgb(0%, 17.944336%, 31.950378%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.410156&quot; stop-color=&quot;rgb(0%, 18.170166%, 32.374573%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.414062&quot; stop-color=&quot;rgb(0%, 18.397522%, 32.798767%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.417969&quot; stop-color=&quot;rgb(0%, 18.623352%, 33.222961%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.421875&quot; stop-color=&quot;rgb(0%, 18.850708%, 33.648682%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.425781&quot; stop-color=&quot;rgb(0%, 19.078064%, 34.072876%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.429688&quot; stop-color=&quot;rgb(0%, 19.30542%, 34.49707%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.433594&quot; stop-color=&quot;rgb(0%, 19.53125%, 34.921265%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.4375&quot; stop-color=&quot;rgb(0%, 19.758606%, 35.345459%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.441406&quot; stop-color=&quot;rgb(0%, 19.984436%, 35.769653%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.445312&quot; stop-color=&quot;rgb(0%, 20.211792%, 36.193848%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.449219&quot; stop-color=&quot;rgb(0%, 20.437622%, 36.618042%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.453125&quot; stop-color=&quot;rgb(0%, 20.664978%, 37.042236%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.457031&quot; stop-color=&quot;rgb(0%, 20.890808%, 37.466431%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.460938&quot; stop-color=&quot;rgb(0%, 21.118164%, 37.890625%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.464844&quot; stop-color=&quot;rgb(0%, 21.343994%, 38.314819%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.46875&quot; stop-color=&quot;rgb(0%, 21.57135%, 38.739014%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.472656&quot; stop-color=&quot;rgb(0%, 21.79718%, 39.163208%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.476562&quot; stop-color=&quot;rgb(0%, 22.024536%, 39.588928%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.480469&quot; stop-color=&quot;rgb(0%, 22.250366%, 40.013123%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.484375&quot; stop-color=&quot;rgb(0%, 22.477722%, 40.437317%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.488281&quot; stop-color=&quot;rgb(0%, 22.703552%, 40.861511%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.492188&quot; stop-color=&quot;rgb(0%, 22.930908%, 41.285706%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.496094&quot; stop-color=&quot;rgb(0%, 23.156738%, 41.7099%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.5&quot; stop-color=&quot;rgb(0%, 23.384094%, 42.134094%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.503906&quot; stop-color=&quot;rgb(0%, 23.609924%, 42.558289%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.507812&quot; stop-color=&quot;rgb(0%, 23.83728%, 42.982483%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.511719&quot; stop-color=&quot;rgb(0%, 24.034119%, 43.334961%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.515625&quot; stop-color=&quot;rgb(0%, 24.230957%, 43.687439%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.519531&quot; stop-color=&quot;rgb(0%, 24.423218%, 44.029236%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.523438&quot; stop-color=&quot;rgb(0%, 24.615479%, 44.371033%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.527344&quot; stop-color=&quot;rgb(0%, 24.807739%, 44.711304%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.53125&quot; stop-color=&quot;rgb(0%, 25%, 45.053101%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.535156&quot; stop-color=&quot;rgb(0%, 25.192261%, 45.393372%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.539062&quot; stop-color=&quot;rgb(0%, 25.384521%, 45.735168%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.542969&quot; stop-color=&quot;rgb(0%, 25.576782%, 46.076965%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.546875&quot; stop-color=&quot;rgb(0%, 25.769043%, 46.418762%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.550781&quot; stop-color=&quot;rgb(0%, 25.961304%, 46.759033%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.554688&quot; stop-color=&quot;rgb(0%, 26.153564%, 47.10083%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.558594&quot; stop-color=&quot;rgb(0%, 26.345825%, 47.441101%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.5625&quot; stop-color=&quot;rgb(0%, 26.538086%, 47.782898%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.566406&quot; stop-color=&quot;rgb(0%, 26.730347%, 48.124695%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.570312&quot; stop-color=&quot;rgb(0%, 26.922607%, 48.466492%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.574219&quot; stop-color=&quot;rgb(0%, 27.114868%, 48.806763%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.578125&quot; stop-color=&quot;rgb(0%, 27.308655%, 49.14856%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.582031&quot; stop-color=&quot;rgb(0%, 27.500916%, 49.488831%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.585938&quot; stop-color=&quot;rgb(0%, 27.693176%, 49.830627%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.589844&quot; stop-color=&quot;rgb(0%, 27.885437%, 50.172424%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.59375&quot; stop-color=&quot;rgb(0%, 28.077698%, 50.514221%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.597656&quot; stop-color=&quot;rgb(0%, 28.269958%, 50.854492%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.601562&quot; stop-color=&quot;rgb(0%, 28.462219%, 51.196289%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.605469&quot; stop-color=&quot;rgb(0%, 28.65448%, 51.53656%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.609375&quot; stop-color=&quot;rgb(0%, 28.846741%, 51.878357%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.613281&quot; stop-color=&quot;rgb(0%, 29.039001%, 52.218628%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.617188&quot; stop-color=&quot;rgb(0%, 29.231262%, 52.560425%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.621094&quot; stop-color=&quot;rgb(0%, 29.423523%, 52.902222%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.625&quot; stop-color=&quot;rgb(0%, 29.615784%, 53.244019%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.628906&quot; stop-color=&quot;rgb(0%, 29.808044%, 53.58429%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.632812&quot; stop-color=&quot;rgb(0%, 30.000305%, 53.926086%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.636719&quot; stop-color=&quot;rgb(0%, 30.192566%, 54.266357%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.640625&quot; stop-color=&quot;rgb(0%, 30.384827%, 54.608154%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.644531&quot; stop-color=&quot;rgb(0%, 30.577087%, 54.949951%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.648438&quot; stop-color=&quot;rgb(0%, 30.769348%, 55.291748%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.652344&quot; stop-color=&quot;rgb(0%, 30.940247%, 55.59082%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.65625&quot; stop-color=&quot;rgb(0%, 31.111145%, 55.891418%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.660156&quot; stop-color=&quot;rgb(0%, 31.25%, 56.129456%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.664062&quot; stop-color=&quot;rgb(0%, 31.388855%, 56.369019%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.667969&quot; stop-color=&quot;rgb(0%, 31.52771%, 56.607056%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.671875&quot; stop-color=&quot;rgb(0%, 31.666565%, 56.846619%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.675781&quot; stop-color=&quot;rgb(0%, 31.80542%, 57.084656%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.679688&quot; stop-color=&quot;rgb(0%, 31.944275%, 57.324219%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.683594&quot; stop-color=&quot;rgb(0%, 32.08313%, 57.562256%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.6875&quot; stop-color=&quot;rgb(0%, 32.221985%, 57.801819%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.691406&quot; stop-color=&quot;rgb(0%, 32.36084%, 58.041382%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.695312&quot; stop-color=&quot;rgb(0%, 32.499695%, 58.280945%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.699219&quot; stop-color=&quot;rgb(0%, 32.63855%, 58.518982%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.703125&quot; stop-color=&quot;rgb(0%, 32.777405%, 58.758545%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.707031&quot; stop-color=&quot;rgb(0%, 32.914734%, 58.996582%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.710938&quot; stop-color=&quot;rgb(0%, 33.053589%, 59.236145%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.714844&quot; stop-color=&quot;rgb(0%, 33.192444%, 59.474182%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.71875&quot; stop-color=&quot;rgb(0%, 33.331299%, 59.713745%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.722656&quot; stop-color=&quot;rgb(0%, 33.470154%, 59.951782%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.726562&quot; stop-color=&quot;rgb(0%, 33.609009%, 60.191345%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.730469&quot; stop-color=&quot;rgb(0%, 33.747864%, 60.429382%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.734375&quot; stop-color=&quot;rgb(0%, 33.886719%, 60.668945%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.738281&quot; stop-color=&quot;rgb(0%, 34.025574%, 60.906982%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.742188&quot; stop-color=&quot;rgb(0%, 34.164429%, 61.146545%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.746094&quot; stop-color=&quot;rgb(0%, 34.303284%, 61.384583%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.75&quot; stop-color=&quot;rgb(0%, 34.442139%, 61.624146%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.753906&quot; stop-color=&quot;rgb(0%, 34.580994%, 61.862183%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.757813&quot; stop-color=&quot;rgb(0%, 34.719849%, 62.101746%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.761719&quot; stop-color=&quot;rgb(0%, 34.858704%, 62.341309%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.765625&quot; stop-color=&quot;rgb(0%, 34.997559%, 62.580872%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.769531&quot; stop-color=&quot;rgb(0%, 35.136414%, 62.818909%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.773438&quot; stop-color=&quot;rgb(0%, 35.275269%, 63.058472%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.78125&quot; stop-color=&quot;rgb(0%, 35.35614%, 63.198853%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.789062&quot; stop-color=&quot;rgb(0%, 35.51178%, 63.470459%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.796875&quot; stop-color=&quot;rgb(0%, 35.661316%, 63.734436%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.804688&quot; stop-color=&quot;rgb(0%, 35.812378%, 63.996887%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.8125&quot; stop-color=&quot;rgb(0%, 35.961914%, 64.259338%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.820313&quot; stop-color=&quot;rgb(0%, 36.112976%, 64.523315%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.828125&quot; stop-color=&quot;rgb(0%, 36.262512%, 64.785767%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.835938&quot; stop-color=&quot;rgb(0%, 36.413574%, 65.048218%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.84375&quot; stop-color=&quot;rgb(0%, 36.56311%, 65.312195%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.851562&quot; stop-color=&quot;rgb(0%, 36.714172%, 65.574646%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.859375&quot; stop-color=&quot;rgb(0%, 36.843872%, 65.802002%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.875&quot; stop-color=&quot;rgb(0%, 36.898804%, 65.899658%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;1&quot; stop-color=&quot;rgb(0%, 36.898804%, 65.899658%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;/linearGradient&gt;
&lt;clipPath id=&quot;clip-47&quot;&gt;
&lt;path clip-rule=&quot;nonzero&quot; d=&quot;M 92.09375 77.796875 L 96.765625 77.796875 L 96.765625 82.660156 L 92.09375 82.660156 Z M 92.09375 77.796875 &quot;/&gt;
&lt;/clipPath&gt;
&lt;clipPath id=&quot;clip-48&quot;&gt;
&lt;path clip-rule=&quot;nonzero&quot; d=&quot;M 94.527344 81.457031 C 94.527344 81.28125 94.664062 81.105469 94.859375 81.105469 C 95.054688 81.105469 95.210938 81.261719 95.210938 81.457031 C 95.210938 81.648438 95.054688 81.785156 94.859375 81.785156 C 94.664062 81.785156 94.527344 81.648438 94.527344 81.457031 M 94.527344 80.191406 C 94.527344 80.015625 94.664062 79.859375 94.859375 79.859375 C 95.054688 79.859375 95.210938 80.015625 95.210938 80.191406 C 95.210938 80.386719 95.054688 80.542969 94.859375 80.542969 C 94.664062 80.523438 94.527344 80.367188 94.527344 80.191406 M 92.25 80.25 L 94.488281 82.488281 L 96.726562 80.25 L 94.488281 77.992188 Z M 92.25 80.25 &quot;/&gt;
&lt;/clipPath&gt;
&lt;clipPath id=&quot;clip-49&quot;&gt;
&lt;path clip-rule=&quot;nonzero&quot; d=&quot;M 94.488281 84.722656 L 90.011719 80.25 L 94.488281 75.753906 L 98.984375 80.25 Z M 94.488281 84.722656 &quot;/&gt;
&lt;/clipPath&gt;
&lt;linearGradient id=&quot;linear-pattern-15&quot; gradientUnits=&quot;userSpaceOnUse&quot; x1=&quot;-5.259447&quot; y1=&quot;715.21838&quot; x2=&quot;-1.27411&quot; y2=&quot;715.21838&quot; gradientTransform=&quot;matrix(1.125812, 1.125147, 1.125812, -1.125147, -707.03613, 888.64227)&quot;&gt;
&lt;stop offset=&quot;0&quot; stop-color=&quot;rgb(0%, 0%, 0%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.125&quot; stop-color=&quot;rgb(0%, 0%, 0%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.140625&quot; stop-color=&quot;rgb(0%, 0%, 0%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.148438&quot; stop-color=&quot;rgb(0%, 0.0717163%, 0.126648%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.152344&quot; stop-color=&quot;rgb(0%, 0.436401%, 0.764465%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.15625&quot; stop-color=&quot;rgb(0%, 0.727844%, 1.274109%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.160156&quot; stop-color=&quot;rgb(0%, 1.019287%, 1.783752%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.164062&quot; stop-color=&quot;rgb(0%, 1.31073%, 2.293396%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.167969&quot; stop-color=&quot;rgb(0%, 1.600647%, 2.80304%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.171875&quot; stop-color=&quot;rgb(0%, 1.89209%, 3.312683%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.175781&quot; stop-color=&quot;rgb(0%, 2.174377%, 3.808594%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.179688&quot; stop-color=&quot;rgb(0%, 2.456665%, 4.304504%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.183594&quot; stop-color=&quot;rgb(0%, 2.735901%, 4.795837%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.1875&quot; stop-color=&quot;rgb(0%, 3.016663%, 5.288696%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.191406&quot; stop-color=&quot;rgb(0%, 3.295898%, 5.781555%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.195313&quot; stop-color=&quot;rgb(0%, 3.57666%, 6.274414%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.199219&quot; stop-color=&quot;rgb(0%, 3.855896%, 6.767273%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.203125&quot; stop-color=&quot;rgb(0%, 4.135132%, 7.260132%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.207031&quot; stop-color=&quot;rgb(0%, 4.414368%, 7.751465%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.210938&quot; stop-color=&quot;rgb(0%, 4.695129%, 8.244324%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.214844&quot; stop-color=&quot;rgb(0%, 4.974365%, 8.737183%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.21875&quot; stop-color=&quot;rgb(0%, 5.255127%, 9.230042%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.222656&quot; stop-color=&quot;rgb(0%, 5.534363%, 9.7229%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.226563&quot; stop-color=&quot;rgb(0%, 5.815125%, 10.215759%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.230469&quot; stop-color=&quot;rgb(0%, 6.09436%, 10.707092%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.234375&quot; stop-color=&quot;rgb(0%, 6.375122%, 11.199951%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.238281&quot; stop-color=&quot;rgb(0%, 6.654358%, 11.69281%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.242188&quot; stop-color=&quot;rgb(0%, 6.93512%, 12.185669%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.246094&quot; stop-color=&quot;rgb(0%, 7.214355%, 12.677002%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.25&quot; stop-color=&quot;rgb(0%, 7.493591%, 13.169861%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.253906&quot; stop-color=&quot;rgb(0%, 7.772827%, 13.66272%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.257812&quot; stop-color=&quot;rgb(0%, 8.053589%, 14.155579%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.261719&quot; stop-color=&quot;rgb(0%, 8.332825%, 14.648438%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.265625&quot; stop-color=&quot;rgb(0%, 8.613586%, 15.141296%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.269531&quot; stop-color=&quot;rgb(0%, 8.892822%, 15.632629%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.273438&quot; stop-color=&quot;rgb(0%, 9.173584%, 16.125488%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.277344&quot; stop-color=&quot;rgb(0%, 9.45282%, 16.618347%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.28125&quot; stop-color=&quot;rgb(0%, 9.733582%, 17.111206%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.285156&quot; stop-color=&quot;rgb(0%, 10.012817%, 17.602539%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.289062&quot; stop-color=&quot;rgb(0%, 10.293579%, 18.095398%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.292969&quot; stop-color=&quot;rgb(0%, 10.572815%, 18.588257%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.296875&quot; stop-color=&quot;rgb(0%, 10.852051%, 19.081116%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.300781&quot; stop-color=&quot;rgb(0%, 11.131287%, 19.573975%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.304688&quot; stop-color=&quot;rgb(0%, 11.412048%, 20.066833%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.308594&quot; stop-color=&quot;rgb(0%, 11.691284%, 20.558167%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.3125&quot; stop-color=&quot;rgb(0%, 11.972046%, 21.051025%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.316406&quot; stop-color=&quot;rgb(0%, 12.251282%, 21.543884%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.320313&quot; stop-color=&quot;rgb(0%, 12.532043%, 22.036743%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.324219&quot; stop-color=&quot;rgb(0%, 12.811279%, 22.528076%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.328125&quot; stop-color=&quot;rgb(0%, 13.092041%, 23.020935%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.332031&quot; stop-color=&quot;rgb(0%, 13.371277%, 23.513794%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.335938&quot; stop-color=&quot;rgb(0%, 13.650513%, 24.006653%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.339844&quot; stop-color=&quot;rgb(0%, 13.929749%, 24.499512%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.34375&quot; stop-color=&quot;rgb(0%, 14.21051%, 24.992371%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.347656&quot; stop-color=&quot;rgb(0%, 14.465332%, 25.45166%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.351562&quot; stop-color=&quot;rgb(0%, 14.720154%, 25.912476%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.355469&quot; stop-color=&quot;rgb(0%, 14.945984%, 26.33667%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.359375&quot; stop-color=&quot;rgb(0%, 15.17334%, 26.76239%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.363281&quot; stop-color=&quot;rgb(0%, 15.400696%, 27.186584%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.367187&quot; stop-color=&quot;rgb(0%, 15.628052%, 27.612305%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.371094&quot; stop-color=&quot;rgb(0%, 15.855408%, 28.038025%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.375&quot; stop-color=&quot;rgb(0%, 16.082764%, 28.463745%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.378906&quot; stop-color=&quot;rgb(0%, 16.31012%, 28.887939%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.382812&quot; stop-color=&quot;rgb(0%, 16.537476%, 29.31366%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.386719&quot; stop-color=&quot;rgb(0%, 16.763306%, 29.73938%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.390625&quot; stop-color=&quot;rgb(0%, 16.990662%, 30.1651%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.394531&quot; stop-color=&quot;rgb(0%, 17.218018%, 30.589294%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.398438&quot; stop-color=&quot;rgb(0%, 17.445374%, 31.015015%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.402344&quot; stop-color=&quot;rgb(0%, 17.672729%, 31.440735%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.40625&quot; stop-color=&quot;rgb(0%, 17.900085%, 31.866455%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.410156&quot; stop-color=&quot;rgb(0%, 18.125916%, 32.290649%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.414063&quot; stop-color=&quot;rgb(0%, 18.353271%, 32.71637%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.417969&quot; stop-color=&quot;rgb(0%, 18.580627%, 33.14209%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.421875&quot; stop-color=&quot;rgb(0%, 18.807983%, 33.56781%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.425781&quot; stop-color=&quot;rgb(0%, 19.035339%, 33.992004%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.429688&quot; stop-color=&quot;rgb(0%, 19.262695%, 34.417725%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.433594&quot; stop-color=&quot;rgb(0%, 19.490051%, 34.841919%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.4375&quot; stop-color=&quot;rgb(0%, 19.717407%, 35.267639%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.441406&quot; stop-color=&quot;rgb(0%, 19.943237%, 35.693359%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.445313&quot; stop-color=&quot;rgb(0%, 20.170593%, 36.11908%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.449219&quot; stop-color=&quot;rgb(0%, 20.397949%, 36.543274%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.453125&quot; stop-color=&quot;rgb(0%, 20.625305%, 36.968994%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.457031&quot; stop-color=&quot;rgb(0%, 20.852661%, 37.394714%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.460938&quot; stop-color=&quot;rgb(0%, 21.080017%, 37.820435%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.464844&quot; stop-color=&quot;rgb(0%, 21.307373%, 38.244629%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.46875&quot; stop-color=&quot;rgb(0%, 21.534729%, 38.670349%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.472656&quot; stop-color=&quot;rgb(0%, 21.760559%, 39.096069%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.476562&quot; stop-color=&quot;rgb(0%, 21.987915%, 39.52179%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.480469&quot; stop-color=&quot;rgb(0%, 22.215271%, 39.945984%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.484375&quot; stop-color=&quot;rgb(0%, 22.442627%, 40.371704%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.488281&quot; stop-color=&quot;rgb(0%, 22.669983%, 40.797424%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.492188&quot; stop-color=&quot;rgb(0%, 22.897339%, 41.223145%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.496094&quot; stop-color=&quot;rgb(0%, 23.123169%, 41.647339%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.5&quot; stop-color=&quot;rgb(0%, 23.350525%, 42.073059%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.503906&quot; stop-color=&quot;rgb(0%, 23.577881%, 42.497253%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.507812&quot; stop-color=&quot;rgb(0%, 23.805237%, 42.922974%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.511719&quot; stop-color=&quot;rgb(0%, 24.005127%, 43.281555%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.515625&quot; stop-color=&quot;rgb(0%, 24.205017%, 43.641663%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.519531&quot; stop-color=&quot;rgb(0%, 24.397278%, 43.983459%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.523438&quot; stop-color=&quot;rgb(0%, 24.591064%, 44.326782%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.527344&quot; stop-color=&quot;rgb(0%, 24.783325%, 44.668579%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.53125&quot; stop-color=&quot;rgb(0%, 24.975586%, 45.010376%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.535156&quot; stop-color=&quot;rgb(0%, 25.167847%, 45.352173%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.539062&quot; stop-color=&quot;rgb(0%, 25.361633%, 45.69397%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.542969&quot; stop-color=&quot;rgb(0%, 25.553894%, 46.035767%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.546875&quot; stop-color=&quot;rgb(0%, 25.747681%, 46.379089%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.550781&quot; stop-color=&quot;rgb(0%, 25.939941%, 46.720886%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.554688&quot; stop-color=&quot;rgb(0%, 26.132202%, 47.062683%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.558594&quot; stop-color=&quot;rgb(0%, 26.324463%, 47.40448%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.5625&quot; stop-color=&quot;rgb(0%, 26.51825%, 47.746277%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.566406&quot; stop-color=&quot;rgb(0%, 26.71051%, 48.088074%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.570312&quot; stop-color=&quot;rgb(0%, 26.904297%, 48.431396%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.574219&quot; stop-color=&quot;rgb(0%, 27.096558%, 48.773193%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.578125&quot; stop-color=&quot;rgb(0%, 27.288818%, 49.11499%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.582031&quot; stop-color=&quot;rgb(0%, 27.481079%, 49.456787%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.585938&quot; stop-color=&quot;rgb(0%, 27.674866%, 49.798584%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.589844&quot; stop-color=&quot;rgb(0%, 27.867126%, 50.140381%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.59375&quot; stop-color=&quot;rgb(0%, 28.060913%, 50.483704%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.597656&quot; stop-color=&quot;rgb(0%, 28.253174%, 50.8255%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.601562&quot; stop-color=&quot;rgb(0%, 28.445435%, 51.167297%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.605469&quot; stop-color=&quot;rgb(0%, 28.637695%, 51.509094%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.609375&quot; stop-color=&quot;rgb(0%, 28.831482%, 51.852417%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.613281&quot; stop-color=&quot;rgb(0%, 29.023743%, 52.194214%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.617188&quot; stop-color=&quot;rgb(0%, 29.216003%, 52.536011%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.621094&quot; stop-color=&quot;rgb(0%, 29.408264%, 52.877808%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.625&quot; stop-color=&quot;rgb(0%, 29.602051%, 53.219604%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.628906&quot; stop-color=&quot;rgb(0%, 29.794312%, 53.561401%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.632812&quot; stop-color=&quot;rgb(0%, 29.988098%, 53.904724%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.636719&quot; stop-color=&quot;rgb(0%, 30.180359%, 54.246521%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.640625&quot; stop-color=&quot;rgb(0%, 30.37262%, 54.588318%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.644531&quot; stop-color=&quot;rgb(0%, 30.56488%, 54.930115%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.648437&quot; stop-color=&quot;rgb(0%, 30.758667%, 55.271912%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.652344&quot; stop-color=&quot;rgb(0%, 30.931091%, 55.575562%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.65625&quot; stop-color=&quot;rgb(0%, 31.103516%, 55.879211%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.660156&quot; stop-color=&quot;rgb(0%, 31.242371%, 56.118774%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.664062&quot; stop-color=&quot;rgb(0%, 31.382751%, 56.358337%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.667969&quot; stop-color=&quot;rgb(0%, 31.521606%, 56.5979%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.671875&quot; stop-color=&quot;rgb(0%, 31.660461%, 56.837463%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.675781&quot; stop-color=&quot;rgb(0%, 31.799316%, 57.077026%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.679688&quot; stop-color=&quot;rgb(0%, 31.938171%, 57.316589%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.683594&quot; stop-color=&quot;rgb(0%, 32.077026%, 57.554626%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.6875&quot; stop-color=&quot;rgb(0%, 32.217407%, 57.794189%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.691406&quot; stop-color=&quot;rgb(0%, 32.356262%, 58.033752%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.695312&quot; stop-color=&quot;rgb(0%, 32.495117%, 58.273315%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.699219&quot; stop-color=&quot;rgb(0%, 32.633972%, 58.512878%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.703125&quot; stop-color=&quot;rgb(0%, 32.772827%, 58.752441%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.707031&quot; stop-color=&quot;rgb(0%, 32.911682%, 58.992004%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.710938&quot; stop-color=&quot;rgb(0%, 33.052063%, 59.231567%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.714844&quot; stop-color=&quot;rgb(0%, 33.190918%, 59.47113%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.71875&quot; stop-color=&quot;rgb(0%, 33.329773%, 59.710693%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.722656&quot; stop-color=&quot;rgb(0%, 33.468628%, 59.950256%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.726562&quot; stop-color=&quot;rgb(0%, 33.609009%, 60.189819%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.730469&quot; stop-color=&quot;rgb(0%, 33.747864%, 60.427856%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.734375&quot; stop-color=&quot;rgb(0%, 33.886719%, 60.667419%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.738281&quot; stop-color=&quot;rgb(0%, 34.025574%, 60.906982%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.742187&quot; stop-color=&quot;rgb(0%, 34.164429%, 61.146545%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.746094&quot; stop-color=&quot;rgb(0%, 34.303284%, 61.386108%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.75&quot; stop-color=&quot;rgb(0%, 34.443665%, 61.625671%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.753906&quot; stop-color=&quot;rgb(0%, 34.58252%, 61.865234%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.757812&quot; stop-color=&quot;rgb(0%, 34.721375%, 62.104797%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.761719&quot; stop-color=&quot;rgb(0%, 34.860229%, 62.34436%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.765625&quot; stop-color=&quot;rgb(0%, 34.999084%, 62.583923%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.769531&quot; stop-color=&quot;rgb(0%, 35.137939%, 62.823486%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.773438&quot; stop-color=&quot;rgb(0%, 35.27832%, 63.063049%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.78125&quot; stop-color=&quot;rgb(0%, 35.357666%, 63.201904%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.789062&quot; stop-color=&quot;rgb(0%, 35.513306%, 63.473511%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.796875&quot; stop-color=&quot;rgb(0%, 35.664368%, 63.737488%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.804688&quot; stop-color=&quot;rgb(0%, 35.813904%, 64.001465%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.8125&quot; stop-color=&quot;rgb(0%, 35.964966%, 64.263916%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.820312&quot; stop-color=&quot;rgb(0%, 36.116028%, 64.527893%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.828125&quot; stop-color=&quot;rgb(0%, 36.265564%, 64.79187%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.835938&quot; stop-color=&quot;rgb(0%, 36.416626%, 65.055847%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.84375&quot; stop-color=&quot;rgb(0%, 36.567688%, 65.318298%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.851562&quot; stop-color=&quot;rgb(0%, 36.71875%, 65.582275%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.859375&quot; stop-color=&quot;rgb(0%, 36.845398%, 65.80658%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.875&quot; stop-color=&quot;rgb(0%, 36.898804%, 65.899658%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;1&quot; stop-color=&quot;rgb(0%, 36.898804%, 65.899658%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;/linearGradient&gt;
&lt;clipPath id=&quot;clip-50&quot;&gt;
&lt;path clip-rule=&quot;nonzero&quot; d=&quot;M 91.511719 85.386719 L 96.183594 85.386719 L 96.183594 90.054688 L 91.511719 90.054688 Z M 91.511719 85.386719 &quot;/&gt;
&lt;/clipPath&gt;
&lt;clipPath id=&quot;clip-51&quot;&gt;
&lt;path clip-rule=&quot;nonzero&quot; d=&quot;M 93.359375 88.011719 C 93.359375 87.835938 93.496094 87.660156 93.691406 87.660156 C 93.886719 87.660156 94.042969 87.816406 94.042969 88.011719 C 94.042969 88.207031 93.886719 88.34375 93.691406 88.34375 C 93.496094 88.34375 93.359375 88.1875 93.359375 88.011719 M 93.359375 86.726562 C 93.359375 86.550781 93.496094 86.398438 93.691406 86.398438 C 93.886719 86.398438 94.042969 86.550781 94.042969 86.726562 C 94.042969 86.921875 93.886719 87.078125 93.691406 87.078125 C 93.496094 87.078125 93.359375 86.921875 93.359375 86.726562 M 91.648438 87.777344 L 93.886719 90.015625 L 96.125 87.777344 L 93.886719 85.539062 Z M 91.648438 87.777344 &quot;/&gt;
&lt;/clipPath&gt;
&lt;clipPath id=&quot;clip-52&quot;&gt;
&lt;path clip-rule=&quot;nonzero&quot; d=&quot;M 93.886719 92.253906 L 89.410156 87.777344 L 93.886719 83.304688 L 98.363281 87.777344 Z M 93.886719 92.253906 &quot;/&gt;
&lt;/clipPath&gt;
&lt;linearGradient id=&quot;linear-pattern-16&quot; gradientUnits=&quot;userSpaceOnUse&quot; x1=&quot;-3.257434&quot; y1=&quot;712.87408&quot; x2=&quot;0.718645&quot; y2=&quot;712.87408&quot; gradientTransform=&quot;matrix(1.125988, 1.125322, 1.125988, -1.125322, -707.37451, 891.42144)&quot;&gt;
&lt;stop offset=&quot;0&quot; stop-color=&quot;rgb(0%, 0%, 0%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.125&quot; stop-color=&quot;rgb(0%, 0%, 0%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.140625&quot; stop-color=&quot;rgb(0%, 0%, 0%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.144531&quot; stop-color=&quot;rgb(0%, 0.119019%, 0.209045%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.148437&quot; stop-color=&quot;rgb(0%, 0.239563%, 0.419617%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.152344&quot; stop-color=&quot;rgb(0%, 0.52948%, 0.927734%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.15625&quot; stop-color=&quot;rgb(0%, 0.820923%, 1.437378%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.160156&quot; stop-color=&quot;rgb(0%, 1.11084%, 1.945496%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.164062&quot; stop-color=&quot;rgb(0%, 1.402283%, 2.453613%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.167969&quot; stop-color=&quot;rgb(0%, 1.6922%, 2.961731%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.171875&quot; stop-color=&quot;rgb(0%, 1.983643%, 3.471375%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.175781&quot; stop-color=&quot;rgb(0%, 2.262878%, 3.962708%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.179688&quot; stop-color=&quot;rgb(0%, 2.542114%, 4.454041%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.183594&quot; stop-color=&quot;rgb(0%, 2.82135%, 4.945374%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.1875&quot; stop-color=&quot;rgb(0%, 3.100586%, 5.436707%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.191406&quot; stop-color=&quot;rgb(0%, 3.379822%, 5.92804%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.195312&quot; stop-color=&quot;rgb(0%, 3.659058%, 6.420898%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.199219&quot; stop-color=&quot;rgb(0%, 3.938293%, 6.912231%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.203125&quot; stop-color=&quot;rgb(0%, 4.217529%, 7.403564%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.207031&quot; stop-color=&quot;rgb(0%, 4.496765%, 7.894897%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.210937&quot; stop-color=&quot;rgb(0%, 4.776001%, 8.38623%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.214844&quot; stop-color=&quot;rgb(0%, 5.055237%, 8.877563%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.21875&quot; stop-color=&quot;rgb(0%, 5.334473%, 9.368896%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.222656&quot; stop-color=&quot;rgb(0%, 5.613708%, 9.860229%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.226562&quot; stop-color=&quot;rgb(0%, 5.892944%, 10.351562%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.230469&quot; stop-color=&quot;rgb(0%, 6.17218%, 10.842896%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.234375&quot; stop-color=&quot;rgb(0%, 6.451416%, 11.334229%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.238281&quot; stop-color=&quot;rgb(0%, 6.730652%, 11.825562%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.242187&quot; stop-color=&quot;rgb(0%, 7.009888%, 12.316895%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.246094&quot; stop-color=&quot;rgb(0%, 7.289124%, 12.808228%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.25&quot; stop-color=&quot;rgb(0%, 7.568359%, 13.299561%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.253906&quot; stop-color=&quot;rgb(0%, 7.847595%, 13.790894%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.257812&quot; stop-color=&quot;rgb(0%, 8.126831%, 14.282227%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.261719&quot; stop-color=&quot;rgb(0%, 8.406067%, 14.77356%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.265625&quot; stop-color=&quot;rgb(0%, 8.685303%, 15.266418%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.269531&quot; stop-color=&quot;rgb(0%, 8.964539%, 15.757751%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.273437&quot; stop-color=&quot;rgb(0%, 9.243774%, 16.249084%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.277344&quot; stop-color=&quot;rgb(0%, 9.52301%, 16.740417%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.28125&quot; stop-color=&quot;rgb(0%, 9.802246%, 17.23175%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.285156&quot; stop-color=&quot;rgb(0%, 10.081482%, 17.723083%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.289062&quot; stop-color=&quot;rgb(0%, 10.360718%, 18.214417%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.292969&quot; stop-color=&quot;rgb(0%, 10.639954%, 18.70575%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.296875&quot; stop-color=&quot;rgb(0%, 10.919189%, 19.197083%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.300781&quot; stop-color=&quot;rgb(0%, 11.196899%, 19.688416%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.304688&quot; stop-color=&quot;rgb(0%, 11.476135%, 20.179749%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.308594&quot; stop-color=&quot;rgb(0%, 11.755371%, 20.671082%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.3125&quot; stop-color=&quot;rgb(0%, 12.034607%, 21.162415%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.316406&quot; stop-color=&quot;rgb(0%, 12.313843%, 21.653748%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.320312&quot; stop-color=&quot;rgb(0%, 12.593079%, 22.145081%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.324219&quot; stop-color=&quot;rgb(0%, 12.872314%, 22.636414%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.328125&quot; stop-color=&quot;rgb(0%, 13.15155%, 23.127747%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.332031&quot; stop-color=&quot;rgb(0%, 13.430786%, 23.61908%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.335938&quot; stop-color=&quot;rgb(0%, 13.710022%, 24.111938%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.339844&quot; stop-color=&quot;rgb(0%, 13.989258%, 24.603271%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.34375&quot; stop-color=&quot;rgb(0%, 14.268494%, 25.094604%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.347656&quot; stop-color=&quot;rgb(0%, 14.517212%, 25.546265%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.351562&quot; stop-color=&quot;rgb(0%, 14.76593%, 25.997925%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.355469&quot; stop-color=&quot;rgb(0%, 14.99176%, 26.422119%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.359375&quot; stop-color=&quot;rgb(0%, 15.219116%, 26.846313%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.363281&quot; stop-color=&quot;rgb(0%, 15.444946%, 27.270508%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.367187&quot; stop-color=&quot;rgb(0%, 15.672302%, 27.694702%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.371094&quot; stop-color=&quot;rgb(0%, 15.898132%, 28.118896%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.375&quot; stop-color=&quot;rgb(0%, 16.125488%, 28.544617%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.378906&quot; stop-color=&quot;rgb(0%, 16.351318%, 28.968811%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.382812&quot; stop-color=&quot;rgb(0%, 16.578674%, 29.393005%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.386719&quot; stop-color=&quot;rgb(0%, 16.804504%, 29.8172%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.390625&quot; stop-color=&quot;rgb(0%, 17.03186%, 30.241394%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.394531&quot; stop-color=&quot;rgb(0%, 17.25769%, 30.665588%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.398437&quot; stop-color=&quot;rgb(0%, 17.485046%, 31.089783%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.402344&quot; stop-color=&quot;rgb(0%, 17.710876%, 31.513977%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.40625&quot; stop-color=&quot;rgb(0%, 17.938232%, 31.938171%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.410156&quot; stop-color=&quot;rgb(0%, 18.164062%, 32.362366%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.414062&quot; stop-color=&quot;rgb(0%, 18.391418%, 32.78656%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.417969&quot; stop-color=&quot;rgb(0%, 18.617249%, 33.210754%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.421875&quot; stop-color=&quot;rgb(0%, 18.844604%, 33.634949%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.425781&quot; stop-color=&quot;rgb(0%, 19.070435%, 34.059143%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.429688&quot; stop-color=&quot;rgb(0%, 19.297791%, 34.484863%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.433594&quot; stop-color=&quot;rgb(0%, 19.523621%, 34.909058%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.4375&quot; stop-color=&quot;rgb(0%, 19.750977%, 35.333252%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.441406&quot; stop-color=&quot;rgb(0%, 19.976807%, 35.757446%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.445312&quot; stop-color=&quot;rgb(0%, 20.204163%, 36.181641%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.449219&quot; stop-color=&quot;rgb(0%, 20.429993%, 36.605835%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.453125&quot; stop-color=&quot;rgb(0%, 20.657349%, 37.030029%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.457031&quot; stop-color=&quot;rgb(0%, 20.883179%, 37.454224%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.460938&quot; stop-color=&quot;rgb(0%, 21.110535%, 37.878418%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.464844&quot; stop-color=&quot;rgb(0%, 21.336365%, 38.302612%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.46875&quot; stop-color=&quot;rgb(0%, 21.563721%, 38.726807%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.472656&quot; stop-color=&quot;rgb(0%, 21.789551%, 39.151001%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.476562&quot; stop-color=&quot;rgb(0%, 22.016907%, 39.575195%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.480469&quot; stop-color=&quot;rgb(0%, 22.242737%, 39.99939%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.484375&quot; stop-color=&quot;rgb(0%, 22.470093%, 40.42511%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.488281&quot; stop-color=&quot;rgb(0%, 22.695923%, 40.849304%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.492187&quot; stop-color=&quot;rgb(0%, 22.923279%, 41.273499%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.496094&quot; stop-color=&quot;rgb(0%, 23.149109%, 41.697693%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.5&quot; stop-color=&quot;rgb(0%, 23.376465%, 42.121887%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.503906&quot; stop-color=&quot;rgb(0%, 23.603821%, 42.546082%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.507812&quot; stop-color=&quot;rgb(0%, 23.831177%, 42.970276%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.511719&quot; stop-color=&quot;rgb(0%, 24.028015%, 43.32428%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.515625&quot; stop-color=&quot;rgb(0%, 24.224854%, 43.678284%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.519531&quot; stop-color=&quot;rgb(0%, 24.417114%, 44.018555%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.523438&quot; stop-color=&quot;rgb(0%, 24.609375%, 44.360352%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.527344&quot; stop-color=&quot;rgb(0%, 24.801636%, 44.702148%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.53125&quot; stop-color=&quot;rgb(0%, 24.995422%, 45.043945%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.535156&quot; stop-color=&quot;rgb(0%, 25.187683%, 45.384216%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.539062&quot; stop-color=&quot;rgb(0%, 25.379944%, 45.726013%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.542969&quot; stop-color=&quot;rgb(0%, 25.572205%, 46.066284%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.546875&quot; stop-color=&quot;rgb(0%, 25.764465%, 46.408081%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.550781&quot; stop-color=&quot;rgb(0%, 25.956726%, 46.748352%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.554687&quot; stop-color=&quot;rgb(0%, 26.148987%, 47.090149%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.558594&quot; stop-color=&quot;rgb(0%, 26.341248%, 47.431946%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.5625&quot; stop-color=&quot;rgb(0%, 26.533508%, 47.773743%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.566406&quot; stop-color=&quot;rgb(0%, 26.725769%, 48.114014%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.570312&quot; stop-color=&quot;rgb(0%, 26.91803%, 48.455811%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.574219&quot; stop-color=&quot;rgb(0%, 27.110291%, 48.796082%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.578125&quot; stop-color=&quot;rgb(0%, 27.302551%, 49.137878%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.582031&quot; stop-color=&quot;rgb(0%, 27.494812%, 49.479675%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.585937&quot; stop-color=&quot;rgb(0%, 27.687073%, 49.821472%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.589844&quot; stop-color=&quot;rgb(0%, 27.879333%, 50.161743%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.59375&quot; stop-color=&quot;rgb(0%, 28.071594%, 50.50354%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.597656&quot; stop-color=&quot;rgb(0%, 28.263855%, 50.843811%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.601562&quot; stop-color=&quot;rgb(0%, 28.456116%, 51.185608%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.605469&quot; stop-color=&quot;rgb(0%, 28.648376%, 51.527405%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.609375&quot; stop-color=&quot;rgb(0%, 28.840637%, 51.869202%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.613281&quot; stop-color=&quot;rgb(0%, 29.032898%, 52.209473%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.617188&quot; stop-color=&quot;rgb(0%, 29.225159%, 52.55127%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.621094&quot; stop-color=&quot;rgb(0%, 29.417419%, 52.891541%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.625&quot; stop-color=&quot;rgb(0%, 29.60968%, 53.233337%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.628906&quot; stop-color=&quot;rgb(0%, 29.801941%, 53.575134%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.632812&quot; stop-color=&quot;rgb(0%, 29.994202%, 53.916931%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.636719&quot; stop-color=&quot;rgb(0%, 30.186462%, 54.257202%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.640625&quot; stop-color=&quot;rgb(0%, 30.378723%, 54.598999%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.644531&quot; stop-color=&quot;rgb(0%, 30.570984%, 54.93927%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.648438&quot; stop-color=&quot;rgb(0%, 30.763245%, 55.281067%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.652344&quot; stop-color=&quot;rgb(0%, 30.934143%, 55.581665%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.65625&quot; stop-color=&quot;rgb(0%, 31.106567%, 55.883789%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.660156&quot; stop-color=&quot;rgb(0%, 31.245422%, 56.123352%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.664063&quot; stop-color=&quot;rgb(0%, 31.384277%, 56.362915%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.667969&quot; stop-color=&quot;rgb(0%, 31.523132%, 56.600952%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.671875&quot; stop-color=&quot;rgb(0%, 31.661987%, 56.840515%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.675781&quot; stop-color=&quot;rgb(0%, 31.800842%, 57.078552%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.679688&quot; stop-color=&quot;rgb(0%, 31.939697%, 57.318115%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.683594&quot; stop-color=&quot;rgb(0%, 32.078552%, 57.556152%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.6875&quot; stop-color=&quot;rgb(0%, 32.217407%, 57.795715%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.691406&quot; stop-color=&quot;rgb(0%, 32.356262%, 58.033752%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.695313&quot; stop-color=&quot;rgb(0%, 32.495117%, 58.273315%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.699219&quot; stop-color=&quot;rgb(0%, 32.633972%, 58.511353%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.703125&quot; stop-color=&quot;rgb(0%, 32.772827%, 58.750916%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.707031&quot; stop-color=&quot;rgb(0%, 32.911682%, 58.988953%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.710938&quot; stop-color=&quot;rgb(0%, 33.050537%, 59.228516%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.714844&quot; stop-color=&quot;rgb(0%, 33.189392%, 59.466553%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.71875&quot; stop-color=&quot;rgb(0%, 33.328247%, 59.706116%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.722656&quot; stop-color=&quot;rgb(0%, 33.467102%, 59.944153%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.726562&quot; stop-color=&quot;rgb(0%, 33.605957%, 60.183716%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.730469&quot; stop-color=&quot;rgb(0%, 33.744812%, 60.423279%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.734375&quot; stop-color=&quot;rgb(0%, 33.883667%, 60.662842%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.738281&quot; stop-color=&quot;rgb(0%, 34.022522%, 60.900879%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.742188&quot; stop-color=&quot;rgb(0%, 34.161377%, 61.140442%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.746094&quot; stop-color=&quot;rgb(0%, 34.300232%, 61.378479%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.75&quot; stop-color=&quot;rgb(0%, 34.439087%, 61.618042%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.753906&quot; stop-color=&quot;rgb(0%, 34.576416%, 61.856079%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.757812&quot; stop-color=&quot;rgb(0%, 34.715271%, 62.095642%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.761719&quot; stop-color=&quot;rgb(0%, 34.854126%, 62.333679%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.765625&quot; stop-color=&quot;rgb(0%, 34.992981%, 62.573242%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.769531&quot; stop-color=&quot;rgb(0%, 35.131836%, 62.811279%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.773438&quot; stop-color=&quot;rgb(0%, 35.270691%, 63.050842%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.78125&quot; stop-color=&quot;rgb(0%, 35.351562%, 63.192749%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.789062&quot; stop-color=&quot;rgb(0%, 35.508728%, 63.467407%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.796875&quot; stop-color=&quot;rgb(0%, 35.65979%, 63.729858%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.804688&quot; stop-color=&quot;rgb(0%, 35.809326%, 63.99231%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.8125&quot; stop-color=&quot;rgb(0%, 35.960388%, 64.256287%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.820312&quot; stop-color=&quot;rgb(0%, 36.109924%, 64.518738%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.828125&quot; stop-color=&quot;rgb(0%, 36.260986%, 64.781189%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.835938&quot; stop-color=&quot;rgb(0%, 36.410522%, 65.045166%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.84375&quot; stop-color=&quot;rgb(0%, 36.561584%, 65.307617%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.851562&quot; stop-color=&quot;rgb(0%, 36.711121%, 65.570068%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.859375&quot; stop-color=&quot;rgb(0%, 36.842346%, 65.800476%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.875&quot; stop-color=&quot;rgb(0%, 36.898804%, 65.899658%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;1&quot; stop-color=&quot;rgb(0%, 36.898804%, 65.899658%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;/linearGradient&gt;
&lt;clipPath id=&quot;clip-53&quot;&gt;
&lt;path clip-rule=&quot;nonzero&quot; d=&quot;M 77 72.011719 L 79 72.011719 L 79 74 L 77 74 Z M 77 72.011719 &quot;/&gt;
&lt;/clipPath&gt;
&lt;clipPath id=&quot;clip-54&quot;&gt;
&lt;path clip-rule=&quot;nonzero&quot; d=&quot;M 94.042969 82.660156 L 98.714844 82.660156 L 98.714844 87.332031 L 94.042969 87.332031 Z M 94.042969 82.660156 &quot;/&gt;
&lt;/clipPath&gt;
&lt;clipPath id=&quot;clip-55&quot;&gt;
&lt;path clip-rule=&quot;nonzero&quot; d=&quot;M 96.511719 84.527344 C 96.511719 84.355469 96.648438 84.179688 96.84375 84.179688 C 97.039062 84.179688 97.195312 84.335938 97.195312 84.527344 C 97.195312 84.722656 97.039062 84.859375 96.84375 84.859375 C 96.648438 84.859375 96.511719 84.722656 96.511719 84.527344 M 94.15625 84.996094 L 96.398438 87.234375 L 98.636719 84.996094 L 97.214844 83.574219 L 96.511719 83.632812 L 96.398438 82.738281 Z M 94.15625 84.996094 &quot;/&gt;
&lt;/clipPath&gt;
&lt;clipPath id=&quot;clip-56&quot;&gt;
&lt;path clip-rule=&quot;nonzero&quot; d=&quot;M 96.398438 89.46875 L 91.917969 84.996094 L 96.398438 80.523438 L 100.875 84.996094 Z M 96.398438 89.46875 &quot;/&gt;
&lt;/clipPath&gt;
&lt;linearGradient id=&quot;linear-pattern-17&quot; gradientUnits=&quot;userSpaceOnUse&quot; x1=&quot;-3.350035&quot; y1=&quot;714.39642&quot; x2=&quot;0.635583&quot; y2=&quot;714.39642&quot; gradientTransform=&quot;matrix(1.125735, 1.125069, 1.125735, -1.125069, -706.30316, 890.26562)&quot;&gt;
&lt;stop offset=&quot;0&quot; stop-color=&quot;rgb(0%, 0%, 0%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.125&quot; stop-color=&quot;rgb(0%, 0%, 0%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.140625&quot; stop-color=&quot;rgb(0%, 0%, 0%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.148438&quot; stop-color=&quot;rgb(0%, 0.0350952%, 0.062561%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.152344&quot; stop-color=&quot;rgb(0%, 0.363159%, 0.636292%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.15625&quot; stop-color=&quot;rgb(0%, 0.654602%, 1.145935%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.160156&quot; stop-color=&quot;rgb(0%, 0.944519%, 1.655579%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.164062&quot; stop-color=&quot;rgb(0%, 1.235962%, 2.165222%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.167969&quot; stop-color=&quot;rgb(0%, 1.527405%, 2.674866%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.171875&quot; stop-color=&quot;rgb(0%, 1.818848%, 3.184509%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.175781&quot; stop-color=&quot;rgb(0%, 2.102661%, 3.681946%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.179688&quot; stop-color=&quot;rgb(0%, 2.386475%, 4.179382%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.183594&quot; stop-color=&quot;rgb(0%, 2.66571%, 4.672241%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.1875&quot; stop-color=&quot;rgb(0%, 2.944946%, 5.1651%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.191406&quot; stop-color=&quot;rgb(0%, 3.224182%, 5.657959%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.195312&quot; stop-color=&quot;rgb(0%, 3.504944%, 6.150818%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.199219&quot; stop-color=&quot;rgb(0%, 3.78418%, 6.642151%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.203125&quot; stop-color=&quot;rgb(0%, 4.064941%, 7.13501%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.207031&quot; stop-color=&quot;rgb(0%, 4.344177%, 7.627869%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.210938&quot; stop-color=&quot;rgb(0%, 4.624939%, 8.120728%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.214844&quot; stop-color=&quot;rgb(0%, 4.904175%, 8.612061%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.21875&quot; stop-color=&quot;rgb(0%, 5.184937%, 9.104919%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.222656&quot; stop-color=&quot;rgb(0%, 5.464172%, 9.597778%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.226563&quot; stop-color=&quot;rgb(0%, 5.744934%, 10.090637%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.230469&quot; stop-color=&quot;rgb(0%, 6.02417%, 10.583496%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.234375&quot; stop-color=&quot;rgb(0%, 6.304932%, 11.076355%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.238281&quot; stop-color=&quot;rgb(0%, 6.584167%, 11.567688%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.242188&quot; stop-color=&quot;rgb(0%, 6.863403%, 12.060547%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.246094&quot; stop-color=&quot;rgb(0%, 7.142639%, 12.553406%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.25&quot; stop-color=&quot;rgb(0%, 7.423401%, 13.046265%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.253906&quot; stop-color=&quot;rgb(0%, 7.702637%, 13.539124%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.257812&quot; stop-color=&quot;rgb(0%, 7.983398%, 14.031982%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.261719&quot; stop-color=&quot;rgb(0%, 8.262634%, 14.523315%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.265625&quot; stop-color=&quot;rgb(0%, 8.543396%, 15.016174%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.269531&quot; stop-color=&quot;rgb(0%, 8.822632%, 15.509033%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.273438&quot; stop-color=&quot;rgb(0%, 9.103394%, 16.001892%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.277344&quot; stop-color=&quot;rgb(0%, 9.382629%, 16.494751%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.28125&quot; stop-color=&quot;rgb(0%, 9.663391%, 16.98761%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.285156&quot; stop-color=&quot;rgb(0%, 9.942627%, 17.478943%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.289063&quot; stop-color=&quot;rgb(0%, 10.221863%, 17.971802%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.292969&quot; stop-color=&quot;rgb(0%, 10.501099%, 18.464661%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.296875&quot; stop-color=&quot;rgb(0%, 10.78186%, 18.95752%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.300781&quot; stop-color=&quot;rgb(0%, 11.061096%, 19.450378%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.304688&quot; stop-color=&quot;rgb(0%, 11.341858%, 19.943237%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.308594&quot; stop-color=&quot;rgb(0%, 11.621094%, 20.43457%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.3125&quot; stop-color=&quot;rgb(0%, 11.901855%, 20.927429%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.316406&quot; stop-color=&quot;rgb(0%, 12.181091%, 21.420288%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.320313&quot; stop-color=&quot;rgb(0%, 12.461853%, 21.913147%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.324219&quot; stop-color=&quot;rgb(0%, 12.741089%, 22.406006%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.328125&quot; stop-color=&quot;rgb(0%, 13.021851%, 22.898865%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.332031&quot; stop-color=&quot;rgb(0%, 13.301086%, 23.390198%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.335938&quot; stop-color=&quot;rgb(0%, 13.581848%, 23.883057%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.339844&quot; stop-color=&quot;rgb(0%, 13.861084%, 24.375916%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.34375&quot; stop-color=&quot;rgb(0%, 14.14032%, 24.868774%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.347656&quot; stop-color=&quot;rgb(0%, 14.401245%, 25.337219%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.351562&quot; stop-color=&quot;rgb(0%, 14.66217%, 25.805664%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.355469&quot; stop-color=&quot;rgb(0%, 14.889526%, 26.229858%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.359375&quot; stop-color=&quot;rgb(0%, 15.116882%, 26.655579%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.363281&quot; stop-color=&quot;rgb(0%, 15.344238%, 27.081299%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.367188&quot; stop-color=&quot;rgb(0%, 15.571594%, 27.507019%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.371094&quot; stop-color=&quot;rgb(0%, 15.79895%, 27.931213%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.375&quot; stop-color=&quot;rgb(0%, 16.026306%, 28.356934%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.378906&quot; stop-color=&quot;rgb(0%, 16.252136%, 28.782654%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.382812&quot; stop-color=&quot;rgb(0%, 16.479492%, 29.208374%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.386719&quot; stop-color=&quot;rgb(0%, 16.706848%, 29.632568%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.390625&quot; stop-color=&quot;rgb(0%, 16.934204%, 30.058289%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.394531&quot; stop-color=&quot;rgb(0%, 17.16156%, 30.484009%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.398438&quot; stop-color=&quot;rgb(0%, 17.388916%, 30.909729%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.402344&quot; stop-color=&quot;rgb(0%, 17.616272%, 31.333923%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.40625&quot; stop-color=&quot;rgb(0%, 17.843628%, 31.759644%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.410156&quot; stop-color=&quot;rgb(0%, 18.069458%, 32.185364%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.414062&quot; stop-color=&quot;rgb(0%, 18.296814%, 32.611084%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.417969&quot; stop-color=&quot;rgb(0%, 18.52417%, 33.035278%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.421875&quot; stop-color=&quot;rgb(0%, 18.751526%, 33.460999%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.425781&quot; stop-color=&quot;rgb(0%, 18.978882%, 33.886719%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.429688&quot; stop-color=&quot;rgb(0%, 19.206238%, 34.312439%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.433594&quot; stop-color=&quot;rgb(0%, 19.433594%, 34.736633%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.4375&quot; stop-color=&quot;rgb(0%, 19.66095%, 35.162354%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.441406&quot; stop-color=&quot;rgb(0%, 19.88678%, 35.588074%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.445312&quot; stop-color=&quot;rgb(0%, 20.114136%, 36.013794%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.449219&quot; stop-color=&quot;rgb(0%, 20.341492%, 36.437988%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.453125&quot; stop-color=&quot;rgb(0%, 20.568848%, 36.863708%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.457031&quot; stop-color=&quot;rgb(0%, 20.796204%, 37.289429%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.460938&quot; stop-color=&quot;rgb(0%, 21.02356%, 37.715149%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.464844&quot; stop-color=&quot;rgb(0%, 21.250916%, 38.139343%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.46875&quot; stop-color=&quot;rgb(0%, 21.478271%, 38.565063%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.472656&quot; stop-color=&quot;rgb(0%, 21.704102%, 38.990784%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.476562&quot; stop-color=&quot;rgb(0%, 21.931458%, 39.416504%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.480469&quot; stop-color=&quot;rgb(0%, 22.158813%, 39.840698%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.484375&quot; stop-color=&quot;rgb(0%, 22.386169%, 40.266418%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.488281&quot; stop-color=&quot;rgb(0%, 22.613525%, 40.692139%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.492188&quot; stop-color=&quot;rgb(0%, 22.840881%, 41.117859%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.496094&quot; stop-color=&quot;rgb(0%, 23.068237%, 41.542053%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.5&quot; stop-color=&quot;rgb(0%, 23.295593%, 41.967773%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.503906&quot; stop-color=&quot;rgb(0%, 23.521423%, 42.393494%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.507813&quot; stop-color=&quot;rgb(0%, 23.748779%, 42.819214%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.511719&quot; stop-color=&quot;rgb(0%, 23.953247%, 43.188477%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.515625&quot; stop-color=&quot;rgb(0%, 24.157715%, 43.557739%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.519531&quot; stop-color=&quot;rgb(0%, 24.349976%, 43.899536%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.523438&quot; stop-color=&quot;rgb(0%, 24.543762%, 44.241333%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.527344&quot; stop-color=&quot;rgb(0%, 24.736023%, 44.58313%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.53125&quot; stop-color=&quot;rgb(0%, 24.928284%, 44.926453%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.535156&quot; stop-color=&quot;rgb(0%, 25.120544%, 45.26825%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.539062&quot; stop-color=&quot;rgb(0%, 25.314331%, 45.610046%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.542969&quot; stop-color=&quot;rgb(0%, 25.506592%, 45.951843%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.546875&quot; stop-color=&quot;rgb(0%, 25.700378%, 46.29364%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.550781&quot; stop-color=&quot;rgb(0%, 25.892639%, 46.635437%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.554688&quot; stop-color=&quot;rgb(0%, 26.0849%, 46.97876%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.558594&quot; stop-color=&quot;rgb(0%, 26.277161%, 47.320557%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.5625&quot; stop-color=&quot;rgb(0%, 26.470947%, 47.662354%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.566406&quot; stop-color=&quot;rgb(0%, 26.663208%, 48.00415%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.570312&quot; stop-color=&quot;rgb(0%, 26.856995%, 48.347473%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.574219&quot; stop-color=&quot;rgb(0%, 27.049255%, 48.68927%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.578125&quot; stop-color=&quot;rgb(0%, 27.241516%, 49.031067%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.582031&quot; stop-color=&quot;rgb(0%, 27.433777%, 49.372864%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.585938&quot; stop-color=&quot;rgb(0%, 27.627563%, 49.714661%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.589844&quot; stop-color=&quot;rgb(0%, 27.819824%, 50.056458%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.59375&quot; stop-color=&quot;rgb(0%, 28.013611%, 50.39978%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.597656&quot; stop-color=&quot;rgb(0%, 28.205872%, 50.741577%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.601562&quot; stop-color=&quot;rgb(0%, 28.398132%, 51.083374%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.605469&quot; stop-color=&quot;rgb(0%, 28.590393%, 51.425171%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.609375&quot; stop-color=&quot;rgb(0%, 28.78418%, 51.768494%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.613281&quot; stop-color=&quot;rgb(0%, 28.97644%, 52.110291%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.617188&quot; stop-color=&quot;rgb(0%, 29.168701%, 52.452087%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.621094&quot; stop-color=&quot;rgb(0%, 29.360962%, 52.793884%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.625&quot; stop-color=&quot;rgb(0%, 29.554749%, 53.135681%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.628906&quot; stop-color=&quot;rgb(0%, 29.747009%, 53.477478%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.632812&quot; stop-color=&quot;rgb(0%, 29.940796%, 53.820801%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.636719&quot; stop-color=&quot;rgb(0%, 30.133057%, 54.162598%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.640625&quot; stop-color=&quot;rgb(0%, 30.325317%, 54.504395%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.644531&quot; stop-color=&quot;rgb(0%, 30.517578%, 54.846191%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.648438&quot; stop-color=&quot;rgb(0%, 30.711365%, 55.187988%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.652344&quot; stop-color=&quot;rgb(0%, 30.889893%, 55.503845%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.65625&quot; stop-color=&quot;rgb(0%, 31.069946%, 55.821228%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.660156&quot; stop-color=&quot;rgb(0%, 31.208801%, 56.060791%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.664062&quot; stop-color=&quot;rgb(0%, 31.347656%, 56.300354%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.667969&quot; stop-color=&quot;rgb(0%, 31.486511%, 56.538391%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.671875&quot; stop-color=&quot;rgb(0%, 31.626892%, 56.777954%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.675781&quot; stop-color=&quot;rgb(0%, 31.765747%, 57.017517%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.679688&quot; stop-color=&quot;rgb(0%, 31.904602%, 57.25708%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.683594&quot; stop-color=&quot;rgb(0%, 32.043457%, 57.496643%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.6875&quot; stop-color=&quot;rgb(0%, 32.182312%, 57.736206%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.691406&quot; stop-color=&quot;rgb(0%, 32.321167%, 57.975769%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.695313&quot; stop-color=&quot;rgb(0%, 32.461548%, 58.215332%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.699219&quot; stop-color=&quot;rgb(0%, 32.600403%, 58.454895%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.703125&quot; stop-color=&quot;rgb(0%, 32.739258%, 58.694458%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.707031&quot; stop-color=&quot;rgb(0%, 32.878113%, 58.934021%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.710938&quot; stop-color=&quot;rgb(0%, 33.018494%, 59.173584%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.714844&quot; stop-color=&quot;rgb(0%, 33.157349%, 59.413147%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.71875&quot; stop-color=&quot;rgb(0%, 33.296204%, 59.65271%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.722656&quot; stop-color=&quot;rgb(0%, 33.435059%, 59.890747%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.726563&quot; stop-color=&quot;rgb(0%, 33.573914%, 60.13031%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.730469&quot; stop-color=&quot;rgb(0%, 33.712769%, 60.369873%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.734375&quot; stop-color=&quot;rgb(0%, 33.853149%, 60.609436%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.738281&quot; stop-color=&quot;rgb(0%, 33.992004%, 60.848999%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.742188&quot; stop-color=&quot;rgb(0%, 34.130859%, 61.088562%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.746094&quot; stop-color=&quot;rgb(0%, 34.269714%, 61.328125%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.75&quot; stop-color=&quot;rgb(0%, 34.410095%, 61.567688%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.753906&quot; stop-color=&quot;rgb(0%, 34.54895%, 61.807251%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.757812&quot; stop-color=&quot;rgb(0%, 34.687805%, 62.046814%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.761719&quot; stop-color=&quot;rgb(0%, 34.82666%, 62.286377%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.765625&quot; stop-color=&quot;rgb(0%, 34.965515%, 62.52594%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.769531&quot; stop-color=&quot;rgb(0%, 35.10437%, 62.765503%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.773438&quot; stop-color=&quot;rgb(0%, 35.244751%, 63.005066%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.78125&quot; stop-color=&quot;rgb(0%, 35.331726%, 63.157654%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.789063&quot; stop-color=&quot;rgb(0%, 35.494995%, 63.441467%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.796875&quot; stop-color=&quot;rgb(0%, 35.646057%, 63.705444%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.804688&quot; stop-color=&quot;rgb(0%, 35.795593%, 63.969421%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.8125&quot; stop-color=&quot;rgb(0%, 35.946655%, 64.233398%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.820313&quot; stop-color=&quot;rgb(0%, 36.097717%, 64.49585%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.828125&quot; stop-color=&quot;rgb(0%, 36.247253%, 64.759827%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.835938&quot; stop-color=&quot;rgb(0%, 36.398315%, 65.023804%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.84375&quot; stop-color=&quot;rgb(0%, 36.549377%, 65.287781%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.851562&quot; stop-color=&quot;rgb(0%, 36.700439%, 65.550232%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.859375&quot; stop-color=&quot;rgb(0%, 36.836243%, 65.791321%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.875&quot; stop-color=&quot;rgb(0%, 36.898804%, 65.899658%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;1&quot; stop-color=&quot;rgb(0%, 36.898804%, 65.899658%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;/linearGradient&gt;
&lt;clipPath id=&quot;clip-57&quot;&gt;
&lt;path clip-rule=&quot;nonzero&quot; d=&quot;M 95.210938 80.714844 L 98.90625 80.714844 L 98.90625 84.414062 L 95.210938 84.414062 Z M 95.210938 80.714844 &quot;/&gt;
&lt;/clipPath&gt;
&lt;clipPath id=&quot;clip-58&quot;&gt;
&lt;path clip-rule=&quot;nonzero&quot; d=&quot;M 96.511719 83.265625 C 96.511719 83.089844 96.648438 82.933594 96.84375 82.933594 C 97.039062 82.933594 97.195312 83.089844 97.195312 83.265625 C 97.195312 83.460938 97.039062 83.613281 96.84375 83.613281 C 96.648438 83.59375 96.511719 83.441406 96.511719 83.265625 M 95.269531 82.546875 L 97 84.277344 L 98.734375 82.546875 L 97 80.8125 Z M 95.269531 82.546875 &quot;/&gt;
&lt;/clipPath&gt;
&lt;clipPath id=&quot;clip-59&quot;&gt;
&lt;path clip-rule=&quot;nonzero&quot; d=&quot;M 96.980469 85.988281 L 93.535156 82.546875 L 96.980469 79.101562 L 100.425781 82.546875 Z M 96.980469 85.988281 &quot;/&gt;
&lt;/clipPath&gt;
&lt;linearGradient id=&quot;linear-pattern-18&quot; gradientUnits=&quot;userSpaceOnUse&quot; x1=&quot;-8.021053&quot; y1=&quot;714.09161&quot; x2=&quot;-4.351103&quot; y2=&quot;714.09161&quot; gradientTransform=&quot;matrix(0.944104, 0.943546, 0.944104, -0.943546, -571.35114, 762.17474)&quot;&gt;
&lt;stop offset=&quot;0&quot; stop-color=&quot;rgb(0%, 0%, 0%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.0625&quot; stop-color=&quot;rgb(0%, 0%, 0%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.09375&quot; stop-color=&quot;rgb(0%, 0%, 0%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.109375&quot; stop-color=&quot;rgb(0%, 0%, 0%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.113281&quot; stop-color=&quot;rgb(0%, 0.144958%, 0.253296%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.117188&quot; stop-color=&quot;rgb(0%, 0.289917%, 0.506592%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.121094&quot; stop-color=&quot;rgb(0%, 0.556946%, 0.976562%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.125&quot; stop-color=&quot;rgb(0%, 0.8255%, 1.446533%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.128906&quot; stop-color=&quot;rgb(0%, 1.094055%, 1.914978%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.132813&quot; stop-color=&quot;rgb(0%, 1.36261%, 2.384949%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.136719&quot; stop-color=&quot;rgb(0%, 1.629639%, 2.853394%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.140625&quot; stop-color=&quot;rgb(0%, 1.898193%, 3.323364%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.144531&quot; stop-color=&quot;rgb(0%, 2.157593%, 3.779602%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.148438&quot; stop-color=&quot;rgb(0%, 2.418518%, 4.23584%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.152344&quot; stop-color=&quot;rgb(0%, 2.674866%, 4.689026%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.15625&quot; stop-color=&quot;rgb(0%, 2.932739%, 5.143738%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.160156&quot; stop-color=&quot;rgb(0%, 3.190613%, 5.596924%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.164062&quot; stop-color=&quot;rgb(0%, 3.448486%, 6.05011%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.167969&quot; stop-color=&quot;rgb(0%, 3.70636%, 6.503296%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.171875&quot; stop-color=&quot;rgb(0%, 3.964233%, 6.958008%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.175781&quot; stop-color=&quot;rgb(0%, 4.222107%, 7.411194%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.179688&quot; stop-color=&quot;rgb(0%, 4.47998%, 7.86438%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.183594&quot; stop-color=&quot;rgb(0%, 4.737854%, 8.317566%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.1875&quot; stop-color=&quot;rgb(0%, 4.995728%, 8.772278%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.191406&quot; stop-color=&quot;rgb(0%, 5.252075%, 9.225464%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.195312&quot; stop-color=&quot;rgb(0%, 5.509949%, 9.67865%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.199219&quot; stop-color=&quot;rgb(0%, 5.767822%, 10.131836%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.203125&quot; stop-color=&quot;rgb(0%, 6.025696%, 10.586548%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.207031&quot; stop-color=&quot;rgb(0%, 6.283569%, 11.039734%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.210938&quot; stop-color=&quot;rgb(0%, 6.541443%, 11.49292%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.214844&quot; stop-color=&quot;rgb(0%, 6.799316%, 11.946106%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.21875&quot; stop-color=&quot;rgb(0%, 7.05719%, 12.400818%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.222656&quot; stop-color=&quot;rgb(0%, 7.315063%, 12.854004%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.226563&quot; stop-color=&quot;rgb(0%, 7.572937%, 13.30719%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.230469&quot; stop-color=&quot;rgb(0%, 7.829285%, 13.760376%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.234375&quot; stop-color=&quot;rgb(0%, 8.087158%, 14.215088%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.238281&quot; stop-color=&quot;rgb(0%, 8.345032%, 14.668274%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.242188&quot; stop-color=&quot;rgb(0%, 8.602905%, 15.122986%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.246094&quot; stop-color=&quot;rgb(0%, 8.860779%, 15.576172%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.25&quot; stop-color=&quot;rgb(0%, 9.118652%, 16.029358%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.253906&quot; stop-color=&quot;rgb(0%, 9.376526%, 16.482544%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.257813&quot; stop-color=&quot;rgb(0%, 9.634399%, 16.937256%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.261719&quot; stop-color=&quot;rgb(0%, 9.892273%, 17.390442%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.265625&quot; stop-color=&quot;rgb(0%, 10.150146%, 17.843628%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.269531&quot; stop-color=&quot;rgb(0%, 10.406494%, 18.296814%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.273438&quot; stop-color=&quot;rgb(0%, 10.664368%, 18.751526%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.277344&quot; stop-color=&quot;rgb(0%, 10.922241%, 19.204712%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.28125&quot; stop-color=&quot;rgb(0%, 11.180115%, 19.657898%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.285156&quot; stop-color=&quot;rgb(0%, 11.437988%, 20.111084%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.289062&quot; stop-color=&quot;rgb(0%, 11.695862%, 20.565796%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.292969&quot; stop-color=&quot;rgb(0%, 11.953735%, 21.018982%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.296875&quot; stop-color=&quot;rgb(0%, 12.211609%, 21.472168%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.300781&quot; stop-color=&quot;rgb(0%, 12.469482%, 21.925354%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.304688&quot; stop-color=&quot;rgb(0%, 12.727356%, 22.380066%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.308594&quot; stop-color=&quot;rgb(0%, 12.983704%, 22.833252%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.3125&quot; stop-color=&quot;rgb(0%, 13.241577%, 23.286438%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.316406&quot; stop-color=&quot;rgb(0%, 13.499451%, 23.739624%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.320312&quot; stop-color=&quot;rgb(0%, 13.757324%, 24.194336%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.324219&quot; stop-color=&quot;rgb(0%, 14.015198%, 24.647522%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.328125&quot; stop-color=&quot;rgb(0%, 14.273071%, 25.100708%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.332031&quot; stop-color=&quot;rgb(0%, 14.503479%, 25.518799%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.335938&quot; stop-color=&quot;rgb(0%, 14.733887%, 25.938416%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.339844&quot; stop-color=&quot;rgb(0%, 14.942932%, 26.330566%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.34375&quot; stop-color=&quot;rgb(0%, 15.151978%, 26.722717%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.347656&quot; stop-color=&quot;rgb(0%, 15.361023%, 27.113342%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.351562&quot; stop-color=&quot;rgb(0%, 15.571594%, 27.505493%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.355469&quot; stop-color=&quot;rgb(0%, 15.78064%, 27.896118%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.359375&quot; stop-color=&quot;rgb(0%, 15.989685%, 28.288269%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.363281&quot; stop-color=&quot;rgb(0%, 16.19873%, 28.68042%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.367188&quot; stop-color=&quot;rgb(0%, 16.407776%, 29.072571%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.371094&quot; stop-color=&quot;rgb(0%, 16.616821%, 29.463196%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.375&quot; stop-color=&quot;rgb(0%, 16.825867%, 29.855347%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.378906&quot; stop-color=&quot;rgb(0%, 17.034912%, 30.247498%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.382812&quot; stop-color=&quot;rgb(0%, 17.243958%, 30.639648%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.386719&quot; stop-color=&quot;rgb(0%, 17.453003%, 31.030273%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.390625&quot; stop-color=&quot;rgb(0%, 17.662048%, 31.422424%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.394531&quot; stop-color=&quot;rgb(0%, 17.871094%, 31.813049%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.398437&quot; stop-color=&quot;rgb(0%, 18.081665%, 32.2052%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.402344&quot; stop-color=&quot;rgb(0%, 18.29071%, 32.597351%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.40625&quot; stop-color=&quot;rgb(0%, 18.499756%, 32.989502%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.410156&quot; stop-color=&quot;rgb(0%, 18.708801%, 33.380127%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.414062&quot; stop-color=&quot;rgb(0%, 18.917847%, 33.772278%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.417969&quot; stop-color=&quot;rgb(0%, 19.126892%, 34.162903%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.421875&quot; stop-color=&quot;rgb(0%, 19.335938%, 34.555054%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.425781&quot; stop-color=&quot;rgb(0%, 19.544983%, 34.947205%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.429687&quot; stop-color=&quot;rgb(0%, 19.754028%, 35.339355%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.433594&quot; stop-color=&quot;rgb(0%, 19.963074%, 35.72998%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.4375&quot; stop-color=&quot;rgb(0%, 20.172119%, 36.122131%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.441406&quot; stop-color=&quot;rgb(0%, 20.381165%, 36.512756%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.445313&quot; stop-color=&quot;rgb(0%, 20.591736%, 36.904907%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.449219&quot; stop-color=&quot;rgb(0%, 20.800781%, 37.297058%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.453125&quot; stop-color=&quot;rgb(0%, 21.009827%, 37.689209%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.457031&quot; stop-color=&quot;rgb(0%, 21.218872%, 38.079834%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.460938&quot; stop-color=&quot;rgb(0%, 21.427917%, 38.471985%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.464844&quot; stop-color=&quot;rgb(0%, 21.636963%, 38.86261%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.46875&quot; stop-color=&quot;rgb(0%, 21.846008%, 39.254761%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.472656&quot; stop-color=&quot;rgb(0%, 22.055054%, 39.646912%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.476562&quot; stop-color=&quot;rgb(0%, 22.264099%, 40.039062%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.480469&quot; stop-color=&quot;rgb(0%, 22.473145%, 40.429688%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.484375&quot; stop-color=&quot;rgb(0%, 22.683716%, 40.821838%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.488281&quot; stop-color=&quot;rgb(0%, 22.892761%, 41.212463%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.492188&quot; stop-color=&quot;rgb(0%, 23.101807%, 41.604614%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.496094&quot; stop-color=&quot;rgb(0%, 23.310852%, 41.996765%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.5&quot; stop-color=&quot;rgb(0%, 23.519897%, 42.388916%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.503906&quot; stop-color=&quot;rgb(0%, 23.725891%, 42.773438%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.507813&quot; stop-color=&quot;rgb(0%, 23.931885%, 43.157959%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.511719&quot; stop-color=&quot;rgb(0%, 24.108887%, 43.47229%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.515625&quot; stop-color=&quot;rgb(0%, 24.287415%, 43.788147%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.519531&quot; stop-color=&quot;rgb(0%, 24.464417%, 44.102478%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.523438&quot; stop-color=&quot;rgb(0%, 24.642944%, 44.418335%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.527344&quot; stop-color=&quot;rgb(0%, 24.819946%, 44.732666%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.53125&quot; stop-color=&quot;rgb(0%, 24.996948%, 45.046997%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.535156&quot; stop-color=&quot;rgb(0%, 25.17395%, 45.361328%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.539063&quot; stop-color=&quot;rgb(0%, 25.352478%, 45.677185%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.542969&quot; stop-color=&quot;rgb(0%, 25.52948%, 45.991516%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.546875&quot; stop-color=&quot;rgb(0%, 25.706482%, 46.307373%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.550781&quot; stop-color=&quot;rgb(0%, 25.883484%, 46.621704%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.554688&quot; stop-color=&quot;rgb(0%, 26.062012%, 46.937561%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.558594&quot; stop-color=&quot;rgb(0%, 26.239014%, 47.251892%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.5625&quot; stop-color=&quot;rgb(0%, 26.417542%, 47.567749%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.566406&quot; stop-color=&quot;rgb(0%, 26.594543%, 47.88208%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.570312&quot; stop-color=&quot;rgb(0%, 26.771545%, 48.197937%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.574219&quot; stop-color=&quot;rgb(0%, 26.948547%, 48.512268%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.578125&quot; stop-color=&quot;rgb(0%, 27.127075%, 48.828125%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.582031&quot; stop-color=&quot;rgb(0%, 27.304077%, 49.142456%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.585938&quot; stop-color=&quot;rgb(0%, 27.482605%, 49.458313%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.589844&quot; stop-color=&quot;rgb(0%, 27.659607%, 49.772644%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.59375&quot; stop-color=&quot;rgb(0%, 27.836609%, 50.088501%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.597656&quot; stop-color=&quot;rgb(0%, 28.013611%, 50.402832%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.601562&quot; stop-color=&quot;rgb(0%, 28.192139%, 50.717163%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.605469&quot; stop-color=&quot;rgb(0%, 28.369141%, 51.031494%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.609375&quot; stop-color=&quot;rgb(0%, 28.547668%, 51.347351%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.613281&quot; stop-color=&quot;rgb(0%, 28.72467%, 51.661682%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.617188&quot; stop-color=&quot;rgb(0%, 28.901672%, 51.977539%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.621094&quot; stop-color=&quot;rgb(0%, 29.078674%, 52.29187%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.625&quot; stop-color=&quot;rgb(0%, 29.257202%, 52.607727%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.628906&quot; stop-color=&quot;rgb(0%, 29.434204%, 52.922058%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.632812&quot; stop-color=&quot;rgb(0%, 29.612732%, 53.237915%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.636719&quot; stop-color=&quot;rgb(0%, 29.789734%, 53.552246%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.640625&quot; stop-color=&quot;rgb(0%, 29.966736%, 53.868103%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.644531&quot; stop-color=&quot;rgb(0%, 30.143738%, 54.182434%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.648438&quot; stop-color=&quot;rgb(0%, 30.322266%, 54.498291%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.652344&quot; stop-color=&quot;rgb(0%, 30.499268%, 54.812622%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.65625&quot; stop-color=&quot;rgb(0%, 30.677795%, 55.128479%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.660156&quot; stop-color=&quot;rgb(0%, 30.85022%, 55.433655%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.664062&quot; stop-color=&quot;rgb(0%, 31.022644%, 55.740356%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.667969&quot; stop-color=&quot;rgb(0%, 31.150818%, 55.960083%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.671875&quot; stop-color=&quot;rgb(0%, 31.278992%, 56.181335%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.675781&quot; stop-color=&quot;rgb(0%, 31.407166%, 56.401062%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.679688&quot; stop-color=&quot;rgb(0%, 31.535339%, 56.622314%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.683594&quot; stop-color=&quot;rgb(0%, 31.663513%, 56.842041%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.6875&quot; stop-color=&quot;rgb(0%, 31.791687%, 57.063293%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.691406&quot; stop-color=&quot;rgb(0%, 31.919861%, 57.28302%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.695312&quot; stop-color=&quot;rgb(0%, 32.048035%, 57.504272%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.699219&quot; stop-color=&quot;rgb(0%, 32.176208%, 57.723999%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.703125&quot; stop-color=&quot;rgb(0%, 32.304382%, 57.945251%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.707031&quot; stop-color=&quot;rgb(0%, 32.432556%, 58.164978%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.710938&quot; stop-color=&quot;rgb(0%, 32.56073%, 58.38623%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.714844&quot; stop-color=&quot;rgb(0%, 32.688904%, 58.605957%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.71875&quot; stop-color=&quot;rgb(0%, 32.817078%, 58.827209%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.722656&quot; stop-color=&quot;rgb(0%, 32.945251%, 59.046936%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.726562&quot; stop-color=&quot;rgb(0%, 33.073425%, 59.268188%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.730469&quot; stop-color=&quot;rgb(0%, 33.201599%, 59.487915%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.734375&quot; stop-color=&quot;rgb(0%, 33.329773%, 59.709167%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.738281&quot; stop-color=&quot;rgb(0%, 33.457947%, 59.928894%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.742188&quot; stop-color=&quot;rgb(0%, 33.586121%, 60.150146%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.746094&quot; stop-color=&quot;rgb(0%, 33.714294%, 60.369873%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.75&quot; stop-color=&quot;rgb(0%, 33.842468%, 60.591125%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.753906&quot; stop-color=&quot;rgb(0%, 33.970642%, 60.810852%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.757812&quot; stop-color=&quot;rgb(0%, 34.098816%, 61.032104%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.761719&quot; stop-color=&quot;rgb(0%, 34.22699%, 61.251831%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.765625&quot; stop-color=&quot;rgb(0%, 34.355164%, 61.473083%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.769531&quot; stop-color=&quot;rgb(0%, 34.481812%, 61.69281%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.773438&quot; stop-color=&quot;rgb(0%, 34.609985%, 61.914062%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.777344&quot; stop-color=&quot;rgb(0%, 34.738159%, 62.133789%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.78125&quot; stop-color=&quot;rgb(0%, 34.866333%, 62.355042%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.785156&quot; stop-color=&quot;rgb(0%, 34.994507%, 62.574768%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.789062&quot; stop-color=&quot;rgb(0%, 35.122681%, 62.796021%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.796875&quot; stop-color=&quot;rgb(0%, 35.232544%, 62.985229%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.804687&quot; stop-color=&quot;rgb(0%, 35.411072%, 63.296509%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.8125&quot; stop-color=&quot;rgb(0%, 35.549927%, 63.539124%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.820312&quot; stop-color=&quot;rgb(0%, 35.688782%, 63.781738%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.828125&quot; stop-color=&quot;rgb(0%, 35.827637%, 64.024353%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.835937&quot; stop-color=&quot;rgb(0%, 35.966492%, 64.266968%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.84375&quot; stop-color=&quot;rgb(0%, 36.105347%, 64.509583%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.851562&quot; stop-color=&quot;rgb(0%, 36.244202%, 64.752197%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.859375&quot; stop-color=&quot;rgb(0%, 36.381531%, 64.994812%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.867187&quot; stop-color=&quot;rgb(0%, 36.520386%, 65.237427%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.875&quot; stop-color=&quot;rgb(0%, 36.659241%, 65.480042%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;1&quot; stop-color=&quot;rgb(0%, 36.813354%, 65.750122%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;/linearGradient&gt;
&lt;clipPath id=&quot;clip-60&quot;&gt;
&lt;path clip-rule=&quot;nonzero&quot; d=&quot;M 95.597656 86.746094 L 100.269531 86.746094 L 100.269531 91.414062 L 95.597656 91.414062 Z M 95.597656 86.746094 &quot;/&gt;
&lt;/clipPath&gt;
&lt;clipPath id=&quot;clip-61&quot;&gt;
&lt;path clip-rule=&quot;nonzero&quot; d=&quot;M 95.777344 89.007812 L 98.019531 86.765625 L 100.261719 89.007812 L 98.019531 91.25 Z M 95.777344 89.007812 &quot;/&gt;
&lt;/clipPath&gt;
&lt;clipPath id=&quot;clip-62&quot;&gt;
&lt;path clip-rule=&quot;nonzero&quot; d=&quot;M 98.011719 93.496094 L 93.535156 89.023438 L 98.011719 84.527344 L 102.488281 89.023438 Z M 98.011719 93.496094 &quot;/&gt;
&lt;/clipPath&gt;
&lt;linearGradient id=&quot;linear-pattern-19&quot; gradientUnits=&quot;userSpaceOnUse&quot; x1=&quot;-5.609302&quot; y1=&quot;712.27618&quot; x2=&quot;-0.926806&quot; y2=&quot;712.27618&quot; gradientTransform=&quot;matrix(0.958255, 0.957689, 0.958255, -0.957689, -581.39355, 774.27942)&quot;&gt;
&lt;stop offset=&quot;0&quot; stop-color=&quot;rgb(0%, 0%, 0%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.125&quot; stop-color=&quot;rgb(0%, 0%, 0%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.1875&quot; stop-color=&quot;rgb(0%, 0%, 0%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.195312&quot; stop-color=&quot;rgb(0%, 0%, 0%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.199219&quot; stop-color=&quot;rgb(0%, 0.209045%, 0.366211%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.203125&quot; stop-color=&quot;rgb(0%, 0.418091%, 0.733948%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.207031&quot; stop-color=&quot;rgb(0%, 0.759888%, 1.332092%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.210938&quot; stop-color=&quot;rgb(0%, 1.10321%, 1.930237%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.214844&quot; stop-color=&quot;rgb(0%, 1.445007%, 2.528381%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.21875&quot; stop-color=&quot;rgb(0%, 1.786804%, 3.128052%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.222656&quot; stop-color=&quot;rgb(0%, 2.119446%, 3.712463%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.226562&quot; stop-color=&quot;rgb(0%, 2.453613%, 4.298401%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.230469&quot; stop-color=&quot;rgb(0%, 2.781677%, 4.876709%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.234375&quot; stop-color=&quot;rgb(0%, 3.111267%, 5.455017%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.238281&quot; stop-color=&quot;rgb(0%, 3.439331%, 6.033325%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.242188&quot; stop-color=&quot;rgb(0%, 3.768921%, 6.613159%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.246094&quot; stop-color=&quot;rgb(0%, 4.096985%, 7.191467%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.25&quot; stop-color=&quot;rgb(0%, 4.426575%, 7.771301%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.253906&quot; stop-color=&quot;rgb(0%, 4.754639%, 8.349609%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.257812&quot; stop-color=&quot;rgb(0%, 5.084229%, 8.927917%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.261719&quot; stop-color=&quot;rgb(0%, 5.412292%, 9.506226%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.265625&quot; stop-color=&quot;rgb(0%, 5.741882%, 10.08606%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.269531&quot; stop-color=&quot;rgb(0%, 6.069946%, 10.664368%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.273438&quot; stop-color=&quot;rgb(0%, 6.399536%, 11.242676%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.277344&quot; stop-color=&quot;rgb(0%, 6.7276%, 11.820984%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.28125&quot; stop-color=&quot;rgb(0%, 7.05719%, 12.400818%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.285156&quot; stop-color=&quot;rgb(0%, 7.385254%, 12.979126%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.289062&quot; stop-color=&quot;rgb(0%, 7.714844%, 13.557434%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.292969&quot; stop-color=&quot;rgb(0%, 8.042908%, 14.135742%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.296875&quot; stop-color=&quot;rgb(0%, 8.372498%, 14.715576%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.300781&quot; stop-color=&quot;rgb(0%, 8.700562%, 15.293884%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.304688&quot; stop-color=&quot;rgb(0%, 9.030151%, 15.872192%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.308594&quot; stop-color=&quot;rgb(0%, 9.358215%, 16.4505%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.3125&quot; stop-color=&quot;rgb(0%, 9.687805%, 17.030334%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.316406&quot; stop-color=&quot;rgb(0%, 10.015869%, 17.608643%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.320313&quot; stop-color=&quot;rgb(0%, 10.345459%, 18.186951%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.324219&quot; stop-color=&quot;rgb(0%, 10.673523%, 18.765259%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.328125&quot; stop-color=&quot;rgb(0%, 11.003113%, 19.345093%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.332031&quot; stop-color=&quot;rgb(0%, 11.331177%, 19.923401%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.335938&quot; stop-color=&quot;rgb(0%, 11.660767%, 20.503235%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.339844&quot; stop-color=&quot;rgb(0%, 11.988831%, 21.081543%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.34375&quot; stop-color=&quot;rgb(0%, 12.31842%, 21.659851%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.347656&quot; stop-color=&quot;rgb(0%, 12.646484%, 22.238159%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.351562&quot; stop-color=&quot;rgb(0%, 12.976074%, 22.817993%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.355469&quot; stop-color=&quot;rgb(0%, 13.304138%, 23.396301%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.359375&quot; stop-color=&quot;rgb(0%, 13.633728%, 23.974609%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.363281&quot; stop-color=&quot;rgb(0%, 13.961792%, 24.552917%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.367188&quot; stop-color=&quot;rgb(0%, 14.291382%, 25.132751%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.371094&quot; stop-color=&quot;rgb(0%, 14.576721%, 25.657654%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.375&quot; stop-color=&quot;rgb(0%, 14.863586%, 26.182556%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.378906&quot; stop-color=&quot;rgb(0%, 15.130615%, 26.681519%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.382812&quot; stop-color=&quot;rgb(0%, 15.397644%, 27.180481%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.386719&quot; stop-color=&quot;rgb(0%, 15.664673%, 27.679443%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.390625&quot; stop-color=&quot;rgb(0%, 15.931702%, 28.179932%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.394531&quot; stop-color=&quot;rgb(0%, 16.19873%, 28.678894%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.398438&quot; stop-color=&quot;rgb(0%, 16.465759%, 29.179382%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.402344&quot; stop-color=&quot;rgb(0%, 16.731262%, 29.678345%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.40625&quot; stop-color=&quot;rgb(0%, 16.998291%, 30.178833%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.410156&quot; stop-color=&quot;rgb(0%, 17.26532%, 30.677795%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.414062&quot; stop-color=&quot;rgb(0%, 17.532349%, 31.178284%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.417969&quot; stop-color=&quot;rgb(0%, 17.799377%, 31.677246%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.421875&quot; stop-color=&quot;rgb(0%, 18.066406%, 32.177734%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.425781&quot; stop-color=&quot;rgb(0%, 18.333435%, 32.676697%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.429688&quot; stop-color=&quot;rgb(0%, 18.600464%, 33.177185%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.433594&quot; stop-color=&quot;rgb(0%, 18.867493%, 33.676147%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.4375&quot; stop-color=&quot;rgb(0%, 19.134521%, 34.176636%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.441406&quot; stop-color=&quot;rgb(0%, 19.400024%, 34.675598%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.445313&quot; stop-color=&quot;rgb(0%, 19.667053%, 35.176086%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.449219&quot; stop-color=&quot;rgb(0%, 19.934082%, 35.675049%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.453125&quot; stop-color=&quot;rgb(0%, 20.201111%, 36.175537%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.457031&quot; stop-color=&quot;rgb(0%, 20.46814%, 36.6745%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.460938&quot; stop-color=&quot;rgb(0%, 20.735168%, 37.174988%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.464844&quot; stop-color=&quot;rgb(0%, 21.002197%, 37.67395%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.46875&quot; stop-color=&quot;rgb(0%, 21.269226%, 38.174438%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.472656&quot; stop-color=&quot;rgb(0%, 21.536255%, 38.673401%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.476562&quot; stop-color=&quot;rgb(0%, 21.803284%, 39.173889%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.480469&quot; stop-color=&quot;rgb(0%, 22.068787%, 39.672852%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.484375&quot; stop-color=&quot;rgb(0%, 22.335815%, 40.17334%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.488281&quot; stop-color=&quot;rgb(0%, 22.602844%, 40.672302%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.492188&quot; stop-color=&quot;rgb(0%, 22.869873%, 41.172791%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.496094&quot; stop-color=&quot;rgb(0%, 23.136902%, 41.671753%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.5&quot; stop-color=&quot;rgb(0%, 23.403931%, 42.172241%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.503906&quot; stop-color=&quot;rgb(0%, 23.667908%, 42.6651%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.507812&quot; stop-color=&quot;rgb(0%, 23.931885%, 43.157959%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.511719&quot; stop-color=&quot;rgb(0%, 24.157715%, 43.559265%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.515625&quot; stop-color=&quot;rgb(0%, 24.385071%, 43.960571%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.519531&quot; stop-color=&quot;rgb(0%, 24.610901%, 44.361877%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.523438&quot; stop-color=&quot;rgb(0%, 24.838257%, 44.764709%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.527344&quot; stop-color=&quot;rgb(0%, 25.064087%, 45.166016%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.53125&quot; stop-color=&quot;rgb(0%, 25.291443%, 45.568848%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.535156&quot; stop-color=&quot;rgb(0%, 25.517273%, 45.970154%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.539062&quot; stop-color=&quot;rgb(0%, 25.743103%, 46.372986%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.542969&quot; stop-color=&quot;rgb(0%, 25.968933%, 46.774292%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.546875&quot; stop-color=&quot;rgb(0%, 26.196289%, 47.177124%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.550781&quot; stop-color=&quot;rgb(0%, 26.422119%, 47.57843%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.554688&quot; stop-color=&quot;rgb(0%, 26.649475%, 47.979736%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.558594&quot; stop-color=&quot;rgb(0%, 26.875305%, 48.381042%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.5625&quot; stop-color=&quot;rgb(0%, 27.102661%, 48.783875%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.566406&quot; stop-color=&quot;rgb(0%, 27.328491%, 49.185181%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.570312&quot; stop-color=&quot;rgb(0%, 27.555847%, 49.588013%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.574219&quot; stop-color=&quot;rgb(0%, 27.781677%, 49.989319%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.578125&quot; stop-color=&quot;rgb(0%, 28.009033%, 50.392151%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.582031&quot; stop-color=&quot;rgb(0%, 28.234863%, 50.793457%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.585938&quot; stop-color=&quot;rgb(0%, 28.460693%, 51.194763%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.589844&quot; stop-color=&quot;rgb(0%, 28.686523%, 51.596069%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.59375&quot; stop-color=&quot;rgb(0%, 28.913879%, 51.998901%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.597656&quot; stop-color=&quot;rgb(0%, 29.139709%, 52.400208%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.601562&quot; stop-color=&quot;rgb(0%, 29.367065%, 52.80304%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.605469&quot; stop-color=&quot;rgb(0%, 29.592896%, 53.204346%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.609375&quot; stop-color=&quot;rgb(0%, 29.820251%, 53.607178%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.613281&quot; stop-color=&quot;rgb(0%, 30.046082%, 54.008484%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.617188&quot; stop-color=&quot;rgb(0%, 30.273438%, 54.411316%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.621094&quot; stop-color=&quot;rgb(0%, 30.499268%, 54.812622%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.625&quot; stop-color=&quot;rgb(0%, 30.726624%, 55.213928%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.628906&quot; stop-color=&quot;rgb(0%, 30.92804%, 55.567932%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.632813&quot; stop-color=&quot;rgb(0%, 31.129456%, 55.921936%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.636719&quot; stop-color=&quot;rgb(0%, 31.292725%, 56.202698%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.640625&quot; stop-color=&quot;rgb(0%, 31.455994%, 56.484985%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.644531&quot; stop-color=&quot;rgb(0%, 31.619263%, 56.765747%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.648438&quot; stop-color=&quot;rgb(0%, 31.782532%, 57.048035%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.652344&quot; stop-color=&quot;rgb(0%, 31.945801%, 57.328796%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.65625&quot; stop-color=&quot;rgb(0%, 32.10907%, 57.611084%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.660156&quot; stop-color=&quot;rgb(0%, 32.272339%, 57.891846%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.664062&quot; stop-color=&quot;rgb(0%, 32.437134%, 58.172607%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.667969&quot; stop-color=&quot;rgb(0%, 32.600403%, 58.453369%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.671875&quot; stop-color=&quot;rgb(0%, 32.763672%, 58.735657%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.675781&quot; stop-color=&quot;rgb(0%, 32.926941%, 59.016418%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.679688&quot; stop-color=&quot;rgb(0%, 33.09021%, 59.298706%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.683594&quot; stop-color=&quot;rgb(0%, 33.253479%, 59.579468%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.6875&quot; stop-color=&quot;rgb(0%, 33.418274%, 59.861755%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.691406&quot; stop-color=&quot;rgb(0%, 33.581543%, 60.142517%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.695312&quot; stop-color=&quot;rgb(0%, 33.744812%, 60.423279%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.699219&quot; stop-color=&quot;rgb(0%, 33.908081%, 60.704041%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.703125&quot; stop-color=&quot;rgb(0%, 34.07135%, 60.986328%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.707031&quot; stop-color=&quot;rgb(0%, 34.234619%, 61.26709%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.710938&quot; stop-color=&quot;rgb(0%, 34.397888%, 61.549377%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.714844&quot; stop-color=&quot;rgb(0%, 34.561157%, 61.830139%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.71875&quot; stop-color=&quot;rgb(0%, 34.725952%, 62.112427%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.722656&quot; stop-color=&quot;rgb(0%, 34.889221%, 62.393188%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.726563&quot; stop-color=&quot;rgb(0%, 35.05249%, 62.67395%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.730469&quot; stop-color=&quot;rgb(0%, 35.197449%, 62.924194%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.734375&quot; stop-color=&quot;rgb(0%, 35.342407%, 63.174438%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.742188&quot; stop-color=&quot;rgb(0%, 35.430908%, 63.328552%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.75&quot; stop-color=&quot;rgb(0%, 35.60791%, 63.638306%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.757813&quot; stop-color=&quot;rgb(0%, 35.784912%, 63.948059%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.765625&quot; stop-color=&quot;rgb(0%, 35.961914%, 64.257812%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.773438&quot; stop-color=&quot;rgb(0%, 36.138916%, 64.567566%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.78125&quot; stop-color=&quot;rgb(0%, 36.315918%, 64.877319%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.789062&quot; stop-color=&quot;rgb(0%, 36.49292%, 65.187073%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.796875&quot; stop-color=&quot;rgb(0%, 36.669922%, 65.496826%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.8125&quot; stop-color=&quot;rgb(0%, 36.828613%, 65.776062%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;0.875&quot; stop-color=&quot;rgb(0%, 36.898804%, 65.899658%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;stop offset=&quot;1&quot; stop-color=&quot;rgb(0%, 36.898804%, 65.899658%)&quot; stop-opacity=&quot;1&quot;/&gt;
&lt;/linearGradient&gt;
&lt;clipPath id=&quot;clip-63&quot;&gt;
&lt;path clip-rule=&quot;nonzero&quot; d=&quot;M 154 74 L 172 74 L 172 93.613281 L 154 93.613281 Z M 154 74 &quot;/&gt;
&lt;/clipPath&gt;
&lt;clipPath id=&quot;clip-64&quot;&gt;
&lt;path clip-rule=&quot;nonzero&quot; d=&quot;M 170 74 L 190.902344 74 L 190.902344 93.613281 L 170 93.613281 Z M 170 74 &quot;/&gt;
&lt;/clipPath&gt;
&lt;image id=&quot;source-5&quot; x=&quot;0&quot; y=&quot;0&quot; width=&quot;800&quot; height=&quot;423&quot; xlink:href=&quot;data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD//gA7Q1JFQVRPUjogZ2QtanBlZyB2MS4wICh1c2luZyBJSkcgSlBFRyB2NjIpLCBxdWFsaXR5ID0gODAK/9sAQwAGBAUGBQQGBgUGBwcGCAoQCgoJCQoUDg8MEBcUGBgXFBYWGh0lHxobIxwWFiAsICMmJykqKRkfLTAtKDAlKCko/9sAQwEHBwcKCAoTCgoTKBoWGigoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgo/8AAEQgBpwMgAwEiAAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMFBQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkqNDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+v/EAB8BAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwABAgMRBAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVGR0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/aAAwDAQACEQMRAD8A+qaKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAoPSiigAFFFFABQelFFAAKKKKACg9KKKAAUUUUAFB6UUUAAooooAKD0oooABRRRQAUHpRRQACiiigAoPSiigAFFFFABQelFFAAKKKKACg9KKKAAUUUUAFB6UUUAAooooAKD0oooABRRRQAUHpRRQACiiigAoPSiigAFFFFABQelFFAAKKKKACg9KKKAAUUUUAFB6UUUAAooooAKD0oooABRRRQAUHpRRQACiiigAoPSiigAFFFFABQelFFAAKKKKACg9KKKAAUUUUAFB6UUUAAooooAKD0oooABRRRQAUHpRRQACiiigAoPSiigAFFFFABQelFB6UAAooHSigAoPSig9KAAUUDpRQAUHpRQelAAKKB0ooAKD0ooPSgAFFA6UUAFB6UUHpQACigdKKACg9KKD0oABRQOlFABQelFB6UAAooHSigAoPSig9KAAUUDpRQAUHpRQelAAKKB0ooAKD0ooPSgAFFA6UUAFB6UUHpQACigdKKACg9KKD0oABRQOlFABQelFB6UAAooHSigAoPSig9KAAUUDpRQAUHpRQelAAKKB0ooAKD0ooPSgAFFA6UUAFB6UUHpQACigdKKACg9KKD0oABRQOlFABQelFB6UAAooHSigAoPSig9KAAUUDpRQAUHpRQelAAKKB0ooAKD0ooPSgAFFA6UUAFB6UUHpQACiqN3rGmWWftmo2dvgZPmzqmPzNU/+Es8Of9B/SP8AwNj/APiqpQk9kS5xW7Nqg9KpWuraddqzWt/aTKoyTHMrAD8DV09KTTW4077AKKB0opDCg9KKD0oABRQOlFABQaKKAAUUUUAFBoooABRRRQAUGiigAFFFFABQaKKAAUUUUAFBoooABRRRQAUGiigAFFFFABQaKKAAUUUUAFBoooABRRRQAUGiigAFFFFABQaKKAAUUUUAFBoooABRRRQAUGiigAFFFFABQaKKAAUUUUAFBoooABRRRQAUGiigAFFFFABQaKKAAUUUUAFBoooABRRRQAUGiigAFFFFABQaKKAAUUUUAFBoooABRRRQAUGiigAFFFFABQaKKAAUUVHPNHbxGSVtqDAJxnqcUAZ+va5Y6HZy3F/KUVE3Y2k59BkDAyeOa+f/ABn8Wb7UJZotM/cxtkBhkMo+bGCCOxH4isH4meMH8R6w6Wjt9iUjacAGTIXrwM4OeorpPhn8OI7y2Osa98sESidIvUDkMSp46MME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&quot;/&gt;
&lt;image id=&quot;source-8&quot; x=&quot;0&quot; y=&quot;0&quot; width=&quot;474&quot; height=&quot;176&quot; xlink:href=&quot;data:image/jpeg;base64,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&quot;/&gt;
&lt;image id=&quot;source-11&quot; x=&quot;0&quot; y=&quot;0&quot; width=&quot;2000&quot; height=&quot;954&quot; xlink:href=&quot;data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEASABIAAD//gAUQ3JlYXRlZCB3aXRoIEdJTVAA/9sAQwACAQECAQECAgICAgICAgMFAwMDAwMGBAQDBQcGBwcHBgcHCAkLCQgICggHBwoNCgoLDAwMDAcJDg8NDA4LDAwM/9sAQwECAgIDAwMGAwMGDAgHCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM/8AAEQgDugfQAwEiAAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMFBQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkqNDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+v/EAB8BAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwABAgMRBAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVGR0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/aAAwDAQACEQMRAD8A/fyiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooqK9vYdOtZJ7iSOGGJdzu7BVUepJ6VM5xhFyk7JbsaTbsiWqmr69Y+HrNrjULy1sbdcAyzyrGgzwOWIHNeHfFP9sm3WzltPCscrXJJX7bcRDYowfmRSck+m4AcdDXhfizxrq3jrUvterX019PjAL4CoPRVGAo9gBX4Dxl9ILJcqk8NlkfrNVdU7QT/xbv5K3mffZL4fY7FpVcS/Zx8/ify6fN/I+oPG/wC1n4W8JyNDaySa1cL2tMGMf9tDwf8AgOa4i+/bonZWFv4biRv4WkvSw/EBB/OvAulGM1/P2ceP3F2Mk3h6saMe0Ixf4yUn+R+g4Pw9yijG1WLqPu21+Csj2Sf9tvxM0n7rTdBROweOVj+fmD+VEH7bfiZZP3mm6C6+ixSqfz8w143mivmv+IucYXv9fqfh/kep/qjk1rfV4/j/AJnvll+3ROFUXHhuKRv4mjvSv6FD/Ou48EftaeF/FbrFdySaLcN0F1jyz9JBx/31ivkvFFfS5P4/cXYOSeIqxrR7TjFfjFRZ5eM8PcorRtTi6b7pt/g7o++dG16x8Q2a3Gn3lrfW7EgSW8qyIcdeVJHFW818H+E/GureBtS+16TfTWM+MEpyrj0ZTkEexBr3T4XftlQNZRWniqOZbgHb9tt4gUYY+86g5B9doI56Cv6B4N+kFkuayjhs0j9Wqvq3eDf+LdfNW8z8/wA68PcdhE6mGftI+Xxfd1+T+R74KKjs72HUbWOe3kjmhlG5HRtysPUEVJX79CcZxUou6ezPz9pp2YUUUVQBRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFYfxE+IGn/DTwvPqmoybY4/liQDLTyYJVF9zj6DqcAE1y4zGUMJQnicTJRhBNtt2SS6s0o0Z1ZqlTV5N2SXVh49+Imk/DXRlvtYuvs8Lv5cYCM7SPgkKAoPoeTx718l/F7436t8X76P7UqWtjbsTDaxE7Vz3Y/xNx1474AyayviV8Rb74oeK5tUv9qsw8uKNfuwRgkhB64yTk9STWBX8G+KfjHjeI6k8vwLdPCJ2stHU85eXVR++72/euFeDKOXRWIxHvVvwj5Lz7v7gooor8PPugooooAKKKKACiiigAooooA7P4Q/G/VvhBfyfZdl1YXDAz2spO1sd1P8AC2OM8g9wcCvrXwF8RNJ+JWjtfaRc/aIY38qQFGRo3wCVIYDsRyOK+F63vhx8RNQ+GHiiPVNOKGRVMckbj5ZoyQSp79geO4FfuHhZ4x43hypDL8e3UwjdrP4qfnHy6uPXpZ7/AAvFXBlHMYvEYf3a34S9fPs/vPuaisL4dfEHT/iX4Wt9U0+TdHIAsqc7oJMAsh9xnr0PUcGt2v7ywWMoYuhDFYaSlCaTTWqaezR+C1qM6U3SqK0k7NPowooorqMwooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAjurqOytpJppEhhiUu7u21UA5JJPQV8b/HP4x3XxY8UzOsk8ejwsBaWxb5RgY8wjpuOSfUA4+vr37ZHxPbRfD8Hh2zkj87VAXuysnzxRKVKqQP75zz6KRg54+aa/jf6Q3iFOviv9WcDL3KdnVafxSeqh6RTu/N66xP2Tw74ejCl/adday0hfour+b0XkvMKKKK/ls/VAooooAKKKKACiiigAooooAKKKKACiiigDt/gb8Yrr4T+K4ZHknk0edit3bK52nIxvA6bhgH1IGO9fZNrdR31tHNDIksMqh0dDuVweQQe4Nfn/AF9LfscfFBtZ0Cfw5eSR+dpgD2ZaT55YmLFlx/sH36MBgY5/qP6PPiFOhiv9WsdK8Kl3Sb+zJauPpJars1ZfEflfiJw9GdL+06C96Ok/NdH6p6Py9D26iiiv7JPxsKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKraxqkOh6RdXtw2y3s4Xmlb+6qgkn8hVmvNP2r/ABhN4T+ElxHCP3mrTCwJ/uqysW/NVI/GvC4mzqGU5TiMyntSg5fNLRfN2R3Zbg5YvF08NH7TSPmP4meNX+InjvUtYdWjF5LmND1RFAVAffaBn3zWFQOKK/y8zDHVsbiqmMxDvOpJyk+7bu/xP6kw2HhQpRo01aMUkvRaBRRRXGbBRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABW58NfGknw98dabrEa7/scuXUAEvGwKuBnuVJx71h0GuzL8dWwWKp4zDvlnTkpJ9mndGOIw8K9KVGorxkmn6M++9G1WHXdItb63bfb3kKTxN/eVgCD+RqzXmX7JnjCbxX8JYY7jHmaTMbFT/eRVQr+QbH4V6bX+oXC+dQzfKcPmVParBS+bWq+Tufy3mWDlhMXUw0vstoKKKK944QooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACvmv8Abf8AEMk/i3R9LHENvaG6P+0zuy/oE/WvpSvkX9rTWP7W+NF5H20+CK2znPbf/NzX4X9IbMJYbhKVKL/izhH5ayf/AKSfc+HmHVTN1J/Zi3+n6nmoooor+Bz9/CiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA9w/Yh8QSweLtY0v70NzaC65/hZHVePqJP/HRX0p3r5F/ZO1v+yPjPZR8gahDLbE5wPu7+fxQfjivrqv74+jzmTxPCcaLf8Kc4/J2kvzP5/8AELDqlnEpL7UYv9P0Ciiiv3Q+HCiiigAooooAKKKKACiiigAooozQAUUE7RzXKeK/jf4V8GRSG81qxMsJ2tBDKJpgfTYuSPxrgzDNcHgKTrY2rGnFdZNJfib4fC1q8uSjFyfZJv8AI6uivB9a/blsre7K6f4furqHs89yIWP/AAEK386wtV/bg1aYt9j0Wwt/Tzpnlx+W32r8yx3jlwZhny/W+d/3YTf48tvxPpqPA2dVFf2Nl5uK/C9z6Vor5Zi/bW8VLIPMsdDZe4EcoJ/8fNbGm/tyX0Kf6XoFrcN6xXTRj9VauGj9IDg2crSryj605/omby4AzpK6pp+ko/5n0dRXifhf9tnRdSfbqumXmlns8bi4T8eFb8ga9Q8NfEnQfGDKum6xp95I67hFHOplA90zuH4ivvcj484fzjTLsXCb7Xs//AZWf4Hg47I8wwf+80pRXe1196ujcooor608kKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAEY4Wvir49XX2v4x+Im+bi9dOT/AHfl/pX2seVr4r/aAtPsXxm8RJjbuuy/X+8A39a/m/6THN/YGGfT2v8A7bI/SPDK39oVP8H6o4+iiiv4jP3AKKKKACiiigAoopskixIzMyqqjJJOABTim3ZEykormlsh2aK+FPij+1d4o1D4y6hrWg63PZ2duz2lgkYVoWtwSAzIylWLff8AmBIJ4xgY9x+Cv7dOh+NFsdO8Ro2jaxMfLacL/oMjEgLhslkzn+IbRj71fqOc+Eee4DA08fGPtFKKclG/NC+uq6rzV/Q/nvhX6S3CGcZvWyepUdCUZuMJTsoVEna6lfRvopWurWbeh71RSI+8AjByMjB60tflzi07M/oSMlJc0dgooopFBRRRQAUUUUAdb8CLk2vxi8OsO96icHHDfL/Wvtevir4B232v4y+HVxnbdrJwf7oLf0r7Vr+2vozc39hYm+3tf/bYn4j4nW+v07b8n6sKKKK/pI/NQooooAKKKKACiiigAoopskixIWZgqqMkk9BSckldgOrzv4tftH6J8MF8hGXVtSJK/ZoJl/dEY/1jc7OvTBPtXnfxz/axkmkk0vwrNJD5cjx3F6VVvMwQB5RyflPPzYz0x614GTuYk8k9TX8weJnj9TwM5Zbw3adRaSquzjF9or7TXVtW7XP1Dhnw/liIrE5l7sekdm/XsvTX0O2+I3x98R/EW/maS+uLGxkBRbO2lZI9hzw2PvnHBJ6+g6VxNFFfyPm2eY/M67xOYVZVJvrJ3+5bL0Wh+u4PA4fCU1Sw0FFLsv6v8woooryzrCiiigAqS2upbKdZYZJIZYzlXRirKfYio6KqMpRfNF2YpRTVmenfC/8Aam8QeA5Wj1CSfX7OTnZc3B82M8ciQhjj2OR6Y5r6O+HHxf0P4nadFJp95CLpk3SW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iigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAOY+Hl2t7rni516LrXl/itpbKf1FdPXA/AWZp38bM3UeKr1fwAjA/lXfV83wjiJYjKqdeW8nN/fOR6WbUvZYp010UV/5Kgooor6Q80KKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigArzv9qLwWfGXwkvWVtsmkn+0F/2hGrbgf8AgLN+IFeiVHd2sd9ayQzIskMylHRhlWUjBBHcGvH4gyinmuWV8uq/DVjKP3rR/J6nZl+MlhcTDEw3i0/uPz/7UV1Xxq8A/wDCtviPqGmxrJ9lVxLbMyFQ0bAMAPXbkrnuVPTpXK1/l3m2WV8uxtXAYlWnTk4v1Tt/w3kf1Hg8VTxNCGIpfDJJr5hRRRXnnSFFFFAHif7c3xa/4QL4WDR7driPUvEpMMckUmwwxIyGUkjruBCY4yHPpg/EdfUn/BSHw+2PCuqxwNtBuLSaYD5QfkeNT7n96R9D6V8t1/afgvgsJR4Zp1sP8VRyc3/eTat6JJfn1P8AKX6VObZli+Pq+FxnwUYwjSXTkcVK/q5Sd/S3QcIXMLSBW8tWCs2PlBOcAn1OD+RptfTrfs4f8Ih+xbrV01ub3XNWitdZcGMhrNEKsFA67kiebJ4++w6CvmKvteHeKMJnP1h4TVUpuF+9knf0bbS9D8p458Psx4WWCWYq0sTRVVL+W8pLlfmkk3/iseofCb9mO++NPw11LWNF1C3bVdNujbnTJV2ecuxWDLIThSclQrDHyklhXC+NPA2rfDvX5tL1qyksL63wXichuCMgggkMD6gkV7V/wTx8Ttp/xU1PS5LlY7fUtOaRImbHnTRuhXA7kI0p9cA19U+P/hfoHxR0r7Hr2l2uoRqpWN3T99BkgkxuPmQnaM7SM45yK/K+IfE7G8N8RVMBmEPaYeVpRa0lFPt0aTvo1fzP6I4J8AMp474Ho5zktT2GOhzQmm26c5RfVauLacdU+X+6fLH/AATz8Wyab8UNS0h7jy7bUrBpViOcSTRupGO2djSflX2NXyxD+x1rnwS+KPhvxBoF/NrGm2uqw/akSLZdW1uz7XJAJEi+WSCVwfm+7jJH1PX4/wCLGMy7MMzhm2WVFOFaKvbRqUdGmnqnax/UH0b8szzJMgrcN5/RdOrhqj5b6qUJ+8nGSumubm2enWwUUUV+Vn9EBRRWb4s1r+wdCmuF2+ZwsYJxljx+nXHtV06bnJQXUqEXKSiupwfj/Vf7V8SzYGFt/wBwPfaTn9SaxaV3aV2ZmLMxySTkk0lfa0qahBQXQ+upU1CCgugVc0TX77w1frdabe3en3SjCzW0zRSD/gSkHsPyqnRXRTqTpy5qbafkVUpxmuWauvM9F8GftY/ELwRfedb+KNUvFYgtFqEzXkbdeP3hJHX+EivafCn/AAU+uIo7WPW/CkczbgLi4sr0pxnqsTKecdi/PqK+UaK+yyfxE4iyzTDYqVu0vfX/AJNe3ysfL5nwRkmP1r4eN+8bxf8A5La/zufot4J/bV+HPjd4YY9fj0+6mQN5N/E9vsPHyl2Hl7uegY57Zr1SKZZk3KwZSMgg5Br8la7D4e/H7xj8Lri2bRvEGpW9va5CWjztJa4PUGJiU5yeQMjOQQea/XOH/H+qmqec0E1/NDT74tu/ya9D82znwbhZzyus/wDDPX7pJL8U/U/Tysnx14xtfAHhS81e9Zhb2aBiFGWckhVUe5YgenPPFfN/wu/4KWWOrajb2firRTpkcgCvf2kxljVsjloiu5VxnkMx9u4tftV/G+08cR6bpeg6la3+kSRC6nmtLgSJK+4hY229Nu3JB7sOBiv0HiLxcyahw9XzXLaynUStGLupc70jeLs7J6vpZbn57h+BczhmNPB46k4xbu3uuVb2krq9tuvkeS+JvEl54u1661K/lM13eOZJGP5AD0AGAB2AAqjRRX+e2IxFSvVlXrNylJttvdtu7b9Wfv1OnGnBU4KySsl2SCiiisSwooooAKKKKACiiigAooooAKKKKACiiigDsPgj8TpPhZ48tb5pJv7Pkby72JGwJEIIDEdypO4d+COMmvtKOQSxqyncrDII71+ftfWn7J3j/wD4TH4ZpZzTSTX2jOYJTI+5mQkmM/Tb8o/3DX9WfRt4ylGvV4bxEvdknOn5NfHFeq963k31PyfxKyZOEMyprVe7L0+y/wBPmj1Ciiiv7APx8KKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA4D4CRNE3jYMMH/hKr1vwIjIrv65X4aWC6brHjCNeja40vTu9rbOf1auqr5ng/DyoZTToy3i5r7pyPSzeoqmKlUXVRf/AJKgooor6Y80KKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA8k/a5+GbeL/A66taozXmh7pCqjmSJtu//vnG76BvWvlav0EPIr5K/aV+Cf8AwrLxAdQsUgj0PUJAkESyEtA+wEqQ3OCQxBBPpxxn+RvpEeHs+f8A1owMdLKNVLy0jP7rRfy7s/XPDviKKX9l133cH+cf1XzPMKKKK/kw/XAooooA8v8A2xvDP/CT/s868FhWa4sBHexE/wDLPy5FLsPfyvMH418m/sr/AAo/4W58X7GzkaH7DpoGo3iSgkTRRyIDGB33MyjnHBJ7YP39d20d7bSQyxrJHMpR1boyngg/hmvPv2dPgRD8C9D1e2DQzTahqEkyyrksLcHbChJ6kLlj6F25PWv17hHxCeUcM4zLov8Aeyf7vy51aT/7dtf1Z/MniZ4Jribj/LM7nG+HjF+28/Zy5oJ/43Ll9Is9AvbOLUrGa3nRZYLhGjkRujqRgg/U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KKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACmyyrDGzMyqqjJJOABXL/FH4v6P8KdIabUJ1a7kRjb2in95OwBx0BwM8bjwP0r5T+Kfxr1r4s3wa+kW3s4+I7SAsIhySCQSdzdsn8AK/JfELxeynhdew/jYjpTi9v8T15fS132PrOHeEcZmr517lP+Zr8l1/I9x+IX7Y+i6Cbi10W3m1S7jICzHC2p9cHO44+mD614t4r/aK8YeMIpobjV5Le2mYt5NqiwhQf4QyjeRz0LH3zXEjiiv454o8XOJs8nL2uIdOm/sU24q3Z2d382fsmVcH5ZgUuWmpy/mlq/l0XyB2MjlmZmZjkknkmiiivzWUpSfNJ6n06SWiCiiipGSWl1JY3CzQySQzRncjoxVlPqCOlegeFf2pfGPhh4lfUF1K3iXb5V3ErZHH8YAfPHUsevevO6K9zJ+Jc1ymp7TLcROk/wC7JpP1Wz+aODG5XhMXHlxNOMvVK/ye6PrT4aftV+H/AB5eQ2Nws2kahKMBZyDC7c/Kr59v4guScDJr1AHNfn3XoXwb/aJ1b4UyR2jf6dozShpIJPmeJeNxjORg4HQ8fTJNf0xwH9IyfNHB8SwVtvax0t/ij+q+4/Ms+8OEk62WP/tx/o/0f3n2FQTtFY/gbx7pfxF0JdQ0m5W4ty2xuCrRuACVYHkEZH556V84/t//ALS/9j6fN4F0W4ja6u026w4V1ktkPlyRorcKd6k7uvy8d6/o7PuMMuyzKHnEpqdO3uWafO3sovrf8Fd9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ooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigDi/2hfEU/hf4O65d27bZvKWFWH8PmOsZP4BjXxfX05+2vrzWHgDT7FWwdQu8t7ogyf/AB4rXzHX8K/SQzR4jiaGDT0o04r5ybk/wcfuP3Xw1wvs8slWe85P7kkvzuFFFFfz6foYUUUUAFFFFABRRRQAV+a/xW/5Kd4i/wCwpdf+jnr9KK/M/wCIE7XHjrWpHbc8l9OzH1JlY1/R/wBHtfv8a/KH5yP4V+mxL/ZMrj/eq/lAx6KKK/p0/wA/T1f9lr9m+b44+ImurxvJ8O6ZKovG3MklwSGIjjOCCchd3IKq4PUivubR9Ls/D2l29jYwwWtpaoIoYowFWNR0AFfmzpfxA17RLGO1sta1eztYs7IYLySONMkk4UHAyST9TWjF8bfGkMaqni7xQqqMBV1WcAD/AL6r8T488OM64kxntZYqMaUfghaVl5vXWT6u2myP6y8G/HThXgTLPYU8uqVMTU1qVeaKcu0Umrxguivq9Xrt+jwlB/iX86cDkV8NfAKb4nfGrxf9j0/xd4mhs4cNe3kuoTSR2yE+hbBc4+VRyeegBI+2fD+jL4e0W3sluby8+zptM93MZppT3ZmPUn8AOgAGBX868acHrh6vHC1MRGpUerjFP3V532v0XzP7i8KvE+XG2DnmNHA1KFBaRnNpqb68tlql1e19O9rlY/j2zN54UugqgtGBIM9sEE/pmtim3EIuIHjYZV1Kkeor42jNwqKS6M/W6c+Wal2Z4zRRRX3B9iFFFFABRRRQAUUUUAFFFFABRRRQAUUV0nhb4ez6yVmut1vasu5SCN8gPTHXH41lWrQpR5pszq1oU4802cve6GviawuNPeNpo76NoHRerKwKkfketfGXirw/N4T8T6lpVwVafTbqW0kK9C0blTj8RX6X6Xo9to1oIbeJY07+rfU96+Kv27vA8HhP43vd2yyLHrlol6+R8ol3NG4H12Kx93PtX6r4J8TJ5pVy16RqRuvWP/Ab+4/hH6a2QLMciwme0oe9h5uEn/cqd/JSS+880+GHjH/hX/xA0nWGj86KxuFeaMAEyRH5ZFGe5QsB7mv0itNLt7ADyYIYsf3EC1+X/Sv0J/Zd8a3Hj/4E+H9Qumja6WBraUqckmJ2jBb/AGmVVY+7V6X0gMpbo4bNIdG4S+fvRv6Wl95+e/Qs4rlDEY/hypLSSjWgr9VaE7LzTh9x3+KRkVxgqCPpS0V/MfMz/QC7M++8KadqI/fWcJPqo2t+YwayNV+Ftlcpm1aS1fHAzvX8c8/rXT0VtTxVaD92TNqeIqw+GTPL9d8D3+gQ+ZIqSxd3iJYL9eBWPXtFYfiXwJa6+WmX9xc7eHXhWP8AtDv9eteths4u+Wsvmeph816VV8zzOirmtaBdeH7gR3UezdnawOVcD0P+TzVOvcjJSXNHVHsRkpLmjsFFFFUUFaHhLwxd+NfFGn6PYoJLzU7hLaEH7u52Cgk9gM5J7AGq+l6Zca3qdvZWkL3F1eSrDDEgy0jsQqqB6kkCvvj9j39liL4F6B/aupL5nijU4Atx8wK2cZ2t5K4JBOQNzAkEgY4GT95wDwNiuJMcqUbxox1nO2y7L+8+n3nx/GPFtDI8Jzy1qy+CPd935Lr9xufst/s6Wv7PngVYZBbza9fqDqV1C7tHMVZyiqG6BVfGQBu6kenqFFFf3JlWV4bLsJDBYOPLTgrJfq+7e7fV6n8n5hj6+NxE8ViZc05O7f8AXRbJdFoFFFFegcYUUUUAY/i7wHo/juy+z6tp9vfRjO3evzR+pVhgqeOoIrzvxX+xx4X1iP8A4lrXejyKMDZI0yE+pDkn8iOleuCivl884LyLOE/7SwsKjfVxXN/4Eve/E9LA5xjsH/u1WUV2Tdvu2/A+ZtW/Yh12GXFjrGlXCZ6zLJCcfQK/86qf8MUeLMf8f2g/9/5f/jdfUnWivzvEfR+4OqO6pTj6Tl+tz6On4gZzFWc0/WKPltP2J/FRZd2oaCq55ImlJA/7910vhr9h6NGV9Y1x5F7xWkWz/wAfbP8A6CK9/orqwPgPwdhpKf1dz/xTk1910jLEcd5zVXL7Xl9Ek/vOG8Ofs4eDfDF5Hc2+jRyXEX3XnlebBznO1mK546gV3CIsaBVAVV4AHalor9OyvI8vy2n7LL6EKUe0IqP32SufMYrGYjEy58RNyfm2/wAwooor1DmCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA+e/wBuo5k8Lj0F1/7Rr5/r3/8AboH73wx9Lr/2jXgFf52+OUpPjXGc39z/ANNwP6I4D/5EdH/t7/0phRRRX5KfYBRRRQAUUUUAFFFFABX5k+Mp1uvF2qSRnckl3MynHUF2Ir9NqwX+FnhiRyzeG9BZmOSTp8WSf++a/TfDnxAp8MSryqUXU9oorRpWtfyfc/AfHTwXr+IFPCU6OKVD2Dm3eLlfm5ezVrWPzVor9JLn4N+EL3b53hXw3Nt6b9MhbH5rUX/CjfBP/Qn+Fv8AwUwf/EV+rR+kJhLa4OX/AIGv8j+cZfQnzO/u5pTt/wBe5f8AyR+cFdh8E/g3qnxr8aQ6bYQyfZo2SS+uQQFtIC4Vn+YgFsE4UcnB7Akfd3/CjfBX/Qn+Ff8AwUwf/E1s+G/B+k+DraSHSNL07SoZm3yJZ2yQK7YxkhQMnHGTXFmn0gI1MLOGAwzjUasnJppedlvbp5nq8O/QvqUcxpVc4x8alCLvKMIyjKSXS7bST66XtsVfh58PtL+F3hG00XSYfJtLRANzY8yZv4pHIAy7dScD2AAAG3RRX834nE1cRVlXrScpSbbb3bZ/dmAwOHwWGhhMJBQpwSjGKVkktEkFFFBrE6zxy+i+z3s0f/PN2X8jUVWN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wD8br8Qvg/4f1M3P2q5ks447pzjcZ0ULJnHQllJ+hFfEf7R/xX/4XH8WdQ1WFpP7Pjxa2KOc7YU4B6DG9tz4PTfjJxW58Ov2iJfh1+znr3hvT5JLfWNR1ENHN/ct5YgspXsGHlBexHnZHIyPJ6+d4A8PVlGc43MasdHJxpeUX7zf5L5M+48Z/Gt8TcL5TkmHm7qEZ1/OpFckU/S0pP1i+h9c/wDBOzxzDd+D9Z8OySf6XZ3X26JWflopFVTtX0VkyT6yivo+vir/AIJ/G6Hx0m+zLCYW0ucXRZsMse+LBXjk+Z5Y+hPpX2rX4P4xZZTwfE1V0mv3iU2uza1+9q/zP7G+i9xBXzTgHDRrp3oylTTfWMXeNu9k7fIKKKK/LT+hgooooA674JfE+b4VeOre+zmynxBeJjO6IkZIH95cZH0I7mvs7S9Ut9a0+G6tJo7i3uFDxyRsGVx6givgOvpL9i74iNqeg3nhy4dN2m/vrQdGaN2Jce+1iDn/AG/av6e+jvx5PDY18NYuX7urd079JrVx9JJN+q8z8u8RshjUo/2nSXvRspea2T+T09PQ9yooor+zj8YCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigDM8ZeGofGPhTUNLnz5d9A0JI6rkcEe4OD+FfCEkbQSNG6lXQlWBHIIr9Aq+R/wBqzwLL4T+Kl1eLCsdjrP8ApEDL0LhVEg+u45/4EK/l/wCkvw3KvgMNndJa0m4S/wAM9U/lJW/7eP1DwzzJU8TUwU/tq69Vuvmnf5HmdFFFfxmftAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFcz8UdWW10RbXjzLphkeiqQc/niumr0DxN+wZqXxD+Hel+INK1KMazcWiSmxuBtilViWXa/VW2sOCCCe4r6/g/hPMs8xE1l1J1PZLmkl2vZW7t9Fuzlr51gcuqU546fIpOyfn59l57I+V6K6f4kfBnxR8IruOHxFo91ppm/1bsVkik9QJEJUkdwDkVzFevjMHiMLVdHEwcJLdSTT+5n22GxVHEU1Vw81KL6ppr70FFFFcp0BRRRQAUUUUAFbfw/0oap4li3EhbYeecd9pGP1IrErvfhPYrHpNxcbTvll2Z9gB/UmuPMK3s6Da9Djx1Xkot/I6uiiivjz5cKKKKAPnn/gof4FuNc8AaRrlurNHoM7x3Cj+GOfYN5+joi/8D/L49r9LviR4Ybxp8Ptc0mPyxLqdhPaxlxlVZ4yqk/QkH8K/PP4jfCrxB8KNVjs/EGmzafNMnmRksskcg/2XUlT9M5Hev6z8DeJqVbK3lNeaU6cnyptXcZa6LrZ328j/ADa+l1wDicJxDHiXCUpOlXgvaSSbjGcLRV2tFeKja+7TL2nfHDX7L4Xah4PkuFu9DvxHtimBZrQpIJB5RyNuWAyDkdcAE5rjzRRX7bhcBh8M5vDwUed80rK13tf10V31P5MzLOsdj40o42rKp7KPJHmd+WKbaim9bJt2XS+gUDrRXafs+fC1fjD8VtM0SZpo7OQtNdyRfeSJFLHntk4UHsWFGY4+lgsLUxld2hTi5P0SuPI8nxObZjQyzBx5qlacYRXnJpL5d/I+p/2GfhPN4A+GEmqX9qINQ8QSLcJk5cWwUeUD6Zy7Y9GGeRXttFFf588Q51WzfMauY1/iqO9uy6JeSWh/tbwTwpheGsjw2SYP4KMUr9ZPdyfm3dhRRRXin1QUUUUAFdF8JfGo+HvxF0vVmXdFaykSg5/1bqUY8dSFYke4Fc7RXdlmYVsBjKWNw7tOnJST84u6OfFYaGIozoVPhkmn6PQ/QNTkfWlrjvgB4mm8XfCHRL24x53kmFyP4jG7R7j7kKCfc12Nf6m5RmNPH4GjjqXw1IRkvSST/U/lfFYeWHrzoT3i2n8nYKKKK9E5wooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigArz/APaO+FsfxK8AzNGrHUtLR7m0KR73chcmMDr8+AOO4U84r0CivJz3JsNm2X1cuxavCpFp/o/VOzXmjqwOMq4SvDEUXaUXdf15n5+yRtDIyurK6nDKRgg+lNr2D9q/4Nt4O8RNr1jG39m6pIWuOS3k3DEsf+At1HYHI44FeP1/mbxZwzi8gzSrlmMXvQej6Sj0kvJr/I/pvKM0o5hhY4qjs912fVfIKKKK+bPTCiiigAooooAKKKKACiiigAooooAKKKmsbCfVLyO3toZri4mbakUSF3c+gA5J+lVTpynJQgrtuyS3bfQmUlFc0tkdf8AfhzJ8SviPZ27KrWdky3d3vTcrRqwyhH+1wv0JPOK+zYoVghWNFVUjAVVAwAB0xXE/Ar4OQ/B/wu1u0iXOoXjCS6nCbcnHCDvtXnGepJPGcDuK/wBDvBzgKXDWSKOKjbEVnzT8v5Y38lv5tn87cY5+szx3NSf7uGkfPu/n+VinrWhWPiTTZLPUbK1v7OYbZILiFZY3HXBVgQfxrx/4ufsHeCviRE0unW6+GNQ24SWwiCwk843Q8KRk5+XaTgc17ZRX6Jm3D+XZnTdLH0Y1F5rX5PdfJniZdm+NwE/aYOrKD8np81s/mj4c+JH/AATh8WeF7Xz9BvrTxIij5otn2ScnI+6rMVPc8uDx0NeLeIvhR4o8IW7Tar4b13TYUJBlubCWOPj/AGmUCv1MpssKToVdVZWGCCM5r8jzrwFybEPmwFSVF9viX46/ifo+V+L2a0Fy4yEaq7/C/wANPwPyVor9J/F/7Jvw78c3ZuNQ8L2P2hmLNJbM9qzk9S3lMu4/XNcF4w/4JxeBtdJfTJ9W0N8cJFN58f4iTLfkw61+Z5h4C59SbeFqU6i6auL/ABVvxPusH4wZRUSWIpzg+uia/B3/AAPhWivrOf8A4JcSBWMfjZWPO0NpGM+mT51cxr//AATU8Y2Mp/s/VtDvo89ZWkgc+nG1h+tfJ4rwo4qw/wAWEbX92UX+Uj6PD+I3DtXbEpesZL84nznXq/hKw/s3w5aRYw3lhm47nk/zq3qf7B3xM07Pl6Jb3gHeG+hH/oTLUqrsQKOg4r814uyXMctVOnj6MqfNe3Mmr2te3e1/xOytnWCx0UsFVjUtvytO3a/bqLRRRXxJyhRRRQAVm+J/CGl+NNMNnq+nWWpWu7eIrmFZVVsEbgD0YAnBHIzWlRWlGtUpTVSlJxktmnZr5nPisLRxNJ0MRBThJWaaTTXmnoz5i+MX/BPyG4N5qHg+8+ztgNHpVxlkJ4yEmLZXjkBgef4gOnzL4l8I6p4NvvsurabfaZcYyI7qBomI9QGAyPccV+m9Yfj34caJ8T9GGn69p8Oo2iv5io5KsjdMqykMp5IyCOtft3CHjbmOASw+bJ1qe3Npzpeuil89fM/k3xN+idkmc8+N4bksJXd3y6ulJ+mrh/26rf3T806+xv2AfhUfDXgK68TTtG83iEiOBfLG+GGJ3U/N1+ducdMIp57c38RP+CeEh1lbjwzq6rZ3F2oe2uk+ayhY/Myvn95t7KQCQPvE9fpzQtEtfDWjWun2MK29nZRLBBEvSNFGAOeeg6nmvoPFTxMy/M8lp4LKanN7Z3no04xjrytPq3bbSyfc+L+jr4B51kHFVbNeJaCh9WjalqpKc53XPFrpGN97NOS0ui1RRRX82n93BRRRQAUUUUAFFFFAH0r+xJ4ma98JappTuWawuBMgJ6JIOg9tysf+BV7fXzD+xHfPH8RdUth/q5tOMh+qyRgf+hmvp6v9EvA/MJYvg7Cue8OaHyjJpfhY/nPjfDqjnNVR+1aX3pN/iFFFFfrR8mFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAFHxH4es/Fmh3WnX0K3FrdxmORD3B9D2I6gjkGvjz42/B+6+EPif7OxM2n3W5rOcnl1GMq3+0uRnscg+w+0ayvGvg2x8feGrrStQjZ7W6UBtp2shBBDA+oIB/CvyvxS8M8NxXgfctDE017k7b/AN2X91/g9V1T+p4X4mq5TiLvWnL4o/qvNfjt5r4QorvvjR8ANT+EU/2hmW80eaTZDcr95SckK47Hg8jIOO2cVwNf5/Z5kOPyfFywOY03TqR3T/NPZp9GtD+g8DmGHxlFV8NJSi/6s+zCiiivIOwKKKKACiiigAooooAKKKktLWW/uo4IY5JppnCRxou5nYnAAHck9qqEJTkoRV29EiZSUVeWxHX0p+yv8BW8N28fiTWrcLqEw3WMTFle1UhlYsOBlgehzgehJAk+AP7LsfhZodZ8RJHPqQxJb2wbdHb5CkFgRzIpyOCVHUZOCPbK/sTwZ8GKmBqwz7PofvFrTptX5X0nL+8vsrpvva343xpxpHEReAwD937Ul18l5d31223BRRRX9TH5aFFFFABRRRQAUUUUAFBGaKKAI7k/6O/+6a/P8V+gUq742HqK/P2v5F+lFTfNl0+n71f+mz9c8LZf7yv8H/twUUUV/Jp+uBRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAev8A7FB/4uvff9guT/0bDX1LXy/+xJaO/wAStTnH+rj01kJ92liI/wDQTX1BX+gH0fabjwdSb6zqP/ya36H8++IMk85nb+WP5BRRRX7YfEhRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUHmiigCO6tY762khmjSaGZSjo67lZTwQQeoNeC/F39jxZ/Nv/CrHzpJC72ErqsYBycRnAC44+VuOeoxivfqK+T4s4JyjiTDfVs0pc1tpLSUfOL/TVeR62U51i8tq+1wsrd10fqj4M8UeEtS8Faq9jqlnNZ3MfVX6H3BHBHuCazq+9Nf8JaX4rhWPU9OsdQWPJQXECybM+mQcfhXk/jP9i3RdZuPN0e/n0b+9EyG4jPXplgwPTuRx0r+U+KPo35vhZSqZJUVaHSMmoz+92i/vXofq2VeJWEqJRx0XB9WtY/duvxPmOivXvEv7GnibSnZtPuLHVIR93DGGQ8/3W49/vVx978BPGVhJtk8O6kx/6ZR+aPzXIr8fzDw64mwUuXEYKovSLkvvjdH2GG4lyuur0q8fm7P7nY5Giujg+D/iy4favhrXumfmsZF/mK29H/Zk8aavMq/2O1qp/juJVQD8Mlv0rjwvBOf4iXLRwVVv/BJfmjorZ5l1JXnXgv8At5HA0Zr3bRP2Hb6aNW1HXra3fILJb2xmGO+GYr/KvUPAf7NvhXwNAv8AxL4tTuuCZ71FlbI9FI2rz6DPvX6Rw/8AR/4pzCaeLgsPDvNpv5Ri2/vsfM5h4hZVQX7lupLsk0vvdvwufN/w3+APiP4lmCa1szb6bK2DeTkLGBzyB95umPlBGe4619NfCv4D6H8Jg0tjHNcX0q7JLqdg0hGc4GAAo4HQdhkmuyjjWFAqqqqvAAGAKdX9RcB+DuScNWxEV7av/PO2n+FbR/F+Z+W59xhjsz/dyfJT/lXX1fX8vIKKKK/Wj5MKKKKACiiigAooooAKKKKACiiigAr4d+LPhxvCfxK1qwZSqw3TsgP9xjvT/wAdYV9xV8u/tp6C1h8SLG+WHbDfWKqZAvEkiMwOT6hSn4Yr+efpIZO8Tw7TxsVrRmvulo/x5T9C8N8Z7LMnQe04v71qvwueO0UUV/DJ+7BRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAfSH7EHhxrXw/rGqurD7ZMlvHnoRGCSR+L4/CvdK4n9nTw7L4Y+Dei288flzyRNO4K7WHmOzgEeoDAfhXbV/pl4Z5O8r4XwWEkrS9nGT/wAUvef4s/mPiXGfWs0r1ltzNL0Wi/BBRRRX3R4YUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAB3rzD9rPwTJ4s+FUtxbqpn0eUXh+TLNGFYOAe2Ad3/AAD8R6fUOo6fDq2n3FrcRrLb3UbRSoejqwwQfqDXhcTZHTzjKsRllXarFx9H0fydmd2W46WDxdPFQ3i0/wDP70fANFdH8WfA0nw68f6lpbRtHDHKz2xJLboWJKHPfjg+4Nc5X+XuZZfWwOKqYPEK06cnFrzTsf1HhcRDEUY16TvGSTXowoooriNwooooAKKKKACiiigAooooAKKKKACiiigArc+G3gyT4heOdN0eN/L+2SEM+PuooLMR77VNYdfQ37F/w1MNtd+JruCM+d+4sHJO4KCwlbHTk4GevysOB1+78NeFZcQcQ4fL7Xhfmn5QjrL7/hXm0eBxNmyy7LqmIv71rR/xPb7t/RHvkaLGiqoCqowAO1Ooor/S+MUlZH8zBRRRVAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAeW/tN/BVfiP4dbVLKN21vTYsRKp/4+I85KHjqPmK+5x3r5Nr9BK+Y/2qvgY3hjVJPEmlwt/Zt0268RdoW0kJVQQM5w5OeAcHPPIA/lP6QPhrKtH/WbLYXlFWqxS3XSfy2l5WfRn6t4fcTKnL+zMTLR/A30f8vz6eenVHi9FFFfx+fsQUUUUAFFFFABRRRQAUUUUAFFFFABRRVjStMuNb1S3srWPzrq7lWGFMgb3YgAZPAySOtaU6c6k1TppuTdklq230SJlJRi5Sdkje+Enw4uPin43tdLh+WHiW6k3bTHCGAcjg/NzgcdSM8V9o+HfD9r4V0O106yjENrZxiKNfQD19z1J7muS+Anwji+FHg1InVm1K+CzXjNtJR9o/dgj+FTnHJ5JPfFd1X+gXgz4crhrK/b4uP+01knLvFdIfLd+fofz3xlxG8zxfJSf7qGi831l8+nkFFFFfsx8aFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABUOo6bb6vZSW11BDcW8y7ZIpUDo49CDwamoqZwjOLhNXT0afUak07o+WP2gP2bLzwTeXesaRGbrRZGaaSNFAaxBJOMd0HYjoOvTJ8ir9Abi3ju4HiljSSORSroy7lYHggjuDXiHxj/ZEttZM2peGfLsro5drDaFhlOR9w5xHxnjBHQfLX8i+KXgLUU55rwzG6d3KlfVd3C/T+7e/bsfrnC3H0VFYXM35Kf/yX+f39z5toq1rOhX3h28a31CzurG4UZMc8RjYD1wQDVWv5UrUalGo6VaLjJaNNWa9Uz9Zp1Izipwd0+qCiiisigooooAKKKKACiiuy+F3wO1z4o6lCtvbzWent8z300LCELkA7TwHbnhQfxHWvTynJsdmmJjhMvpOpUlskr/f0S83ocuMx1DC0nWxElGK6v+tfQ5nQNAvPFOsW+n6fbyXV5dNtiiTqxxk+wAAJJPAAJr6q+AX7PFv8LbE3mora32tT7W3+UGFngEbY2Izk5OSMZ4GOOdz4U/BHRvhPp0a2sKXGoMgE19Ig8yQ4529dqn+6D6Zyea7Kv7Y8KfBShkLjmmb2qYr7K3jT9O8vPZdO5+I8WcbVMwvhcJeNLr3l/kvL7+wUUUV/QJ+fhRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQBh+NPhxofxDtEh1jT4b1Y87GbKvHnGdrKQwzgdD2rxXx/8AsUTSXzTeG9QgWByT9mvWYeX1OFdQcjoACM+5r6Gor4jijw64f4gTeZYdOf8APH3Z/wDgS1fo7o9rK+Iswy9/7NUaXZ6x+56fcfEvjL4J+JvAkrfbtKuGhX/lvApmiI9dy9PxxXK1+glQ3VhBexlJoYZkbqroGB/Ovw7NPow4SpNyy/GyguilBS/FSj+R91hfFCvGNsRQUn3Tt+DT/M+AaK+7H+Hnh+RyzaHo7MxySbKPJ/SprLwZo+mS77bSdNt3BzujtUQ/mBXgx+i/jub3sfC3+B//ACS/M9CXilRtph3f/Ev8j4T0/TbjVrpYLW3mupn4WOJC7N9AOa9D8J/so+L/ABTaec1va6WrcqL2Uozf8BVWI+hxX10qBegA+gpa+uyX6M+UUJc2ZYmdbyilBfnJ/ijx8b4m4yorYakoebfM/wAkvwPJfh5+yJ4d8MQLJq6trl7kNmQtHChGeAgPI9d2c46DpXq1paRWNtHDDGkMMShERBtVAOAAPQVJRX7xw/wrlOSUfYZXQjTXVpav1lu/m2fBZhmmLxs/aYqo5Pzei9FsvkFFFFfQHAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQB//Z&quot;/&gt;
&lt;image id=&quot;source-14&quot; x=&quot;0&quot; y=&quot;0&quot; width=&quot;474&quot; height=&quot;108&quot; xlink:href=&quot;data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEASABIAAD/4SFuRXhpZgAATU0AKgAAAAgACAALAAIAAAAmAAAIegESAAMAAAABAAEAAAExAAIAAAAmAAAIoAEyAAIAAAAUAAAIxkAAAAMAAAABAEoAAEABAAEAAAABAAAAAIdpAAQAAAABAAAI2uocAAcAAAgMAAAAbgAAEV4c6gAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFdpbmRvd3MgUGhvdG8gRWRpdG9yIDEwLjAuMTAwMTEuMTYzODQAV2luZG93cyBQaG90byBFZGl0b3IgMTAuMC4xMDAxMS4xNjM4NAAyMDIzOjA3OjI5IDEzOjQ5OjAyAAAGkAMAAgAAABQAABE0kAQAAgAAABQAABFIkpEAAgAAAAM2NwAAkpIAAgAAAAM2NwAAoAEAAwAAAAEAAQAA6hwABwAACAwAAAkoAAAAABzqAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMjAyMzowNzoyOSAxMzo0Mjo1NQAyMDIzOjA3OjI5IDEzOjQyOjU1AAAAAAYBAwADAAAAAQAGAAABGgAFAAAAAQAA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ZWF0ZURhdGU+PC9yZGY6RGVzY3JpcHRpb24+PC9yZGY6UkRGPjwveDp4bXBtZXRhPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPD94cGFja2V0IGVuZD0ndyc/Pv/bAEMAAwICAwICAwMDAwQDAwQFCAUFBAQFCgcHBggMCgwMCwoLCw0OEhANDhEOCwsQFhARExQVFRUMDxcYFhQYEhQVFP/bAEMBAwQEBQQFCQUFCRQNCw0UFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFP/AABEIAGwB2gMBIgACEQEDEQH/xAAfAAABBQEBAQEBAQAAAAAAAAAAAQIDBAUGBwgJCgv/xAC1EAACAQMDAgQDBQUEBAAAAX0BAgMABBEFEiExQQYTUWEHInEUMoGRoQgjQrHBFVLR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&quot;/&gt;
&lt;image id=&quot;source-17&quot; x=&quot;0&quot; y=&quot;0&quot; width=&quot;586&quot; height=&quot;354&quot; xlink:href=&quot;data:image/jpeg;base64,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YWJvb2wBAAAAAFBnUHNlbnVtAAAAAFBnUHMAAAAAUGdQQwAAAABMZWZ0VW50RiNSbHQAAAAAAAAAAAAAAABUb3AgVW50RiNSbHQAAAAAAAAAAAAAAABTY2wgVW50RiNQcmNAWQAAAAAAAAAAABBjcm9wV2hlblByaW50aW5nYm9vbAAAAAAOY3JvcFJlY3RCb3R0b21sb25nAAAAAAAAAAxjcm9wUmVjdExlZnRsb25nAAAAAAAAAA1jcm9wUmVjdFJpZ2h0bG9uZwAAAAAAAAALY3JvcFJlY3RUb3Bsb25nAAAAAAA4QklNA+0AAAAAABAASAAAAAEAAgBIAAAAAQACOEJJTQQmAAAAAAAOAAAAAAAAAAAAAD+AAAA4QklNBA0AAAAAAAQAAAB4OEJJTQQZAAAAAAAEAAAAHjhCSU0D8wAAAAAACQAAAAAAAAAAAQA4QklNJxAAAAAAAAoAAQAAAAAAAAACOEJJTQP1AAAAAABIAC9mZgABAGxmZgAGAAAAAAABAC9mZgABAKGZmgAGAAAAAAABADIAAAABAFoAAAAGAAAAAAABADUAAAABAC0AAAAGAAAAAAABOEJJTQP4AAAAAABwAAD/////////////////////////////A+gAAAAA/////////////////////////////wPoAAAAAP////////////////////////////8D6AAAAAD/////////////////////////////A+gAADhCSU0EAAAAAAAAAgABOEJJTQQCAAAAAAAEAAAAADhCSU0EMAAAAAAAAgEBOEJJTQQtAAAAAAAGAAEAAAADOEJJTQQIAAAAAAAQAAAAAQAAAkAAAAJAAAAAADhCSU0EHgAAAAAABAAAAAA4QklNBBoAAAAAA0sAAAAGAAAAAAAAAAAAAAFiAAACSgAAAAsAVQBuAGIAZQBuAGEAbgBuAHQALQAxAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAJKAAABYgAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAABAAAAABAAAAAAAAbnVsbAAAAAIAAAAGYm91bmRzT2JqYwAAAAEAAAAAAABSY3QxAAAABAAAAABUb3AgbG9uZwAAAAAAAAAATGVmdGxvbmcAAAAAAAAAAEJ0b21s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IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4NCgk8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPg0KCQk8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIiB4bWxuczpzdEV2dD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL3NUeXBlL1Jlc291cmNlRXZlbnQjIiB4bWxuczpwaG90b3Nob3A9Imh0dHA6Ly9ucy5hZG9iZS5jb20vcGhvdG9zaG9wLzEuMC8iIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ1M2IChXaW5kb3dzKSIgeG1wOkNyZWF0ZURhdGU9IjIwMTUtMDMtMDRUMTE6MTY6MzUrMDE6MDAiIHhtcDpNZXRhZGF0YURhdGU9IjIwMTUtMDMtMDRUMTE6MTY6MzUrMDE6MDAiIHhtcDpNb2RpZnlEYXRlPSIyMDE1LTAzLTA0VDExOjE2OjM1KzAxOjAwIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjRCNjA3Mzg5NTdDMkU0MTE5MkQxQkY0RTcyQjIwOEE0IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjRBNjA3Mzg5NTdDMkU0MTE5MkQxQkY0RTcyQjIwOEE0IiB4bXBNTTpPcmlnaW5hbERvY3VtZW50SUQ9InhtcC5kaWQ6NEE2MDczODk1N0MyRTQxMTkyRDFCRjRFNzJCMjA4QTQiIHBob3Rvc2hvcDpDb2xvck1vZGU9IjMiIHBob3Rvc2hvcDpJQ0NQcm9maWxlPSJzUkdCIElFQzYxOTY2LTIuMSIgZGM6Zm9ybWF0PSJpbWFnZS9qcGVnIj4NCgkJCTx4bXBNTTpIaXN0b3J5Pg0KCQkJCTxyZGY6U2VxPg0KCQkJCQk8cmRmOmxpIHN0RXZ0OmFjdGlvbj0iY3JlYXRlZCIgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDo0QTYwNzM4OTU3QzJFNDExOTJEMUJGNEU3MkIyMDhBNCIgc3RFdnQ6d2hlbj0iMjAxNS0wMy0wNFQxMToxNjozNSswMTowMCIgc3RFdnQ6c29mdHdhcmVBZ2VudD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoV2luZG93cykiLz4NCgkJCQkJPHJkZjpsaSBzdEV2dDphY3Rpb249InNhdmVkIiBzdEV2dDppbnN0YW5jZUlEPSJ4bXAuaWlkOjRCNjA3Mzg5NTdDMkU0MTE5MkQxQkY0RTcyQjIwOEE0IiBzdEV2dDp3aGVuPSIyMDE1LTAzLTA0VDExOjE2OjM1KzAxOjAwIiBzdEV2dDpzb2Z0d2FyZUFnZW50PSJBZG9iZSBQaG90b3Nob3AgQ1M2IChXaW5kb3dzKSIgc3RFdnQ6Y2hhbmdlZD0iLyIvPg0KCQkJCTwvcmRmOlNlcT4NCgkJCTwveG1wTU06SGlzdG9yeT4NCgkJCTxwaG90b3Nob3A6RG9jdW1lbnRBbmNlc3RvcnM+DQoJCQkJPHJkZjpCYWc+DQoJCQkJCTxyZGY6bGk+RDk0OTZBOEJBMjgyRDQ2RjAzNEMwQTc3NDUzMEQ3OTU8L3JkZjpsaT4NCgkJCQk8L3JkZjpCYWc+DQoJCQk8L3Bob3Rvc2hvcDpEb2N1bWVudEFuY2VzdG9ycz4NCgkJPC9yZGY6RGVzY3JpcHRpb24+DQoJPC9yZGY6UkRGPg0KPC94OnhtcG1ldGE+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPD94cGFja2V0IGVuZD0ndyc/Pv/iDFhJQ0NfUFJPRklMRQABAQAADEhMaW5vAhAAAG1udHJSR0IgWFlaIAfOAAIACQAGADEAAGFj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VFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqCg4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2dri4+Tl5ufo6ery8/T19vf4+fr/2gAMAwEAAhEDEQA/APf6KKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACis/U9YsNIijkv7hYEdtqlgeTjPas7/hN/Df/QUi/wC+W/wqHOKdmzaGGrVFzQg2vJM6Giue/wCE38N/9BSL/vlv8KP+E38N/wDQUi/75b/Cl7WHdF/U8T/z7l9zOhornv8AhN/Df/QUi/75b/Cj/hN/Df8A0FIv++W/wo9rDug+p4n/AJ9y+5nQ0Vz3/Cb+G/8AoKRf98t/hR/wm/hv/oKRf98t/hR7WHdB9TxP/PuX3M6Giue/4Tfw3/0FIv8Avlv8KP8AhN/Df/QUi/75b/Cj2sO6D6nif+fcvuZ0NFc9/wAJv4b/AOgpF/3y3+FH/Cb+G/8AoKRf98t/hR7WHdB9TxP/AD7l9zOhornv+E38N/8AQUi/75b/AAo/4Tfw3/0FIv8Avlv8KPaw7oPqeJ/59y+5nQ0Vz3/Cb+G/+gpF/wB8t/hR/wAJv4b/AOgpF/3y3+FHtYd0H1PE/wDPuX3M6Giue/4Tfw3/ANBSL/vlv8KP+E38N/8AQUi/75b/AAo9rDug+p4n/n3L7mdDRXPf8Jv4b/6CkX/fLf4Uf8Jv4b/6CkX/AHy3+FHtYd0H1PE/8+5fczoaK57/AITfw3/0FIv++W/wo/4Tfw3/ANBSL/vlv8KPaw7oPqeJ/wCfcvuZ0NFc9/wm/hv/AKCkX/fLf4Uf8Jv4b/6CkX/fLf4Ue1h3QfU8T/z7l9zOhornv+E38N/9BSL/AL5b/Cj/AITfw3/0FIv++W/wo9rDug+p4n/n3L7mdDRXPf8ACb+G/wDoKRf98t/hR/wm/hv/AKCkX/fLf4Ue1h3QfU8T/wA+5fczoaK57/hN/Df/AEFIv++W/wAKP+E38N/9BSL/AL5b/Cj2sO6D6nif+fcvuZ0NFc9/wm/hv/oKRf8AfLf4Uf8ACb+G/wDoKRf98t/hR7WHdB9TxP8Az7l9zOhornv+E38N/wDQUi/75b/Cj/hN/Df/AEFIv++W/wAKPaw7oPqeJ/59y+5nQ0VQ03VrLWIGmsJxNGrbSwBxn8abqOr2uliMTszSynEUMa75HPsoq+ZWvfQx9lPn5LO/Y0aKwx4kt45Y0vbS8slkIVZLhBsJPQblJAP1xW5QpJ7BOnOHxIKKKKZAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAHBfFP/AJBNh/18H/0E15bXqPxT/wCQRYf9fB/9BNeXV5OK/is+5yP/AHKPq/zCiiiuc9cKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigArS0LRbjXtUjs4Mqp+aWTH+rXuaowQS3VxHBAhkllYKiDuTXtvhfw9F4e0pYRh7mTDTyDu3oPYVvh6PtJeR5maZgsJS9343t/maen2FvpljFZ2qBIYl2qB/P61yWq4e/wDFEsvE0NlGkOT92MqScfVuv0ruKxdW0KPUZFuIpTb3aoU8wKGDoeqOp4ZfavTqQvGyPjcLXUKjlUe/X5p/ja3zOa06xie9vILu1isbdLAieBZS4nVgCJOeMDBGeua6fwxJNN4Z02S4JMrQKST1PHB/LFUpfDt3qMkf9q3sLwou0xW0Hl+Yv91mJJ2nHIGK6JFWNAqgBQMADtU0oNM1xmIjUiknd6d7Kytu9df8kPooorY88KKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigDgfin/wAgiw/6+D/6Ca8ur1H4p/8AIIsP+vg/+gmvLq8nFfxWfc5H/uUfV/mFFFFc564UUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFISAMnoKWux8C+F/7WuxqN2mbKBvlUjiVx/QVUIOcuVGGJxEMPSdWeyOh8AeFjYW41a9TF1MP3KMP9Wh7/U13tAor2acFCPKj8+xWJniarqz3f4eQUUUVZzhRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQBwPxT/5BFh/18H/0E15dXqPxT/5BFh/18H/0E15dXk4r+Kz7nI/9yj6v8wooornPXCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiipbW1nvrqK1tkMk0rbVUd6NxNpK7NDw7oU/iDVUtI8rCuGmlA+4v+J6CvcrOzgsLSK1t0CQxKFRR2FZnhrQIfD2lrbJhpX+aaTu7f4elbdeth6Ps467s+FzXMHi6to/AtvPzCiiiug8oKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigDgfin/yCLD/AK+D/wCgmvLq9R+Kf/IIsP8Ar4P/AKCa8urycV/FZ9zkf+5R9X+YUUUVznrhRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAATgZr1nwH4X/sq0GpXiYvZ1+VSP8AVIe31Peuc8A+F/7RuV1W9TNrC37lSP8AWMO/0H869ZrvwlH7cvkfLZ5mO+GpP1/y/wAwooorvPmAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACi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e+a3qKKmMVHY0qVZ1Lcz2VvkgoooqjM5STwnNZ6jPfaFqTWDXBzLCYhJGx9ccYqWw8KlNXXVtWvpNQvUH7ssgRI/91RXTUVn7KF9jqeNrtWv0teyvbte1/xCiiitDlOW1XwnLca0NY0vUXsL0qFkOwOrj3FV7jwVNfXVpfX2sTXF3BKJN5iAXaOdqqDhee9djRWTowfQ7I4/ERSSlsrbK9u17XsFFFFanGYOm+Hf7P8AEWo6t9pL/bQB5e3GzHvnmk8QeHf7cn0+X7SYfsc3m4CZ39OOoxW/RUezjbl6HR9aq+0VS+qVum1rfkFFFFWc5zOr+FftuqJqun30lhqCjaZEXcrj0Yd6paj4LvNbtWXVdbknn48orCFjj9TsB5J9Sa7Ois3Rg73W51wx1eCjyy+HZ2V187XsQwReTbxxZzsULn6VNRRWhyN31Oa1fwzLd6zFrGnX5sr9E2FjGHV19CKqXHg65vr+yv7/AFmWa5tpRJjygEwDnaqg8fXmuworN0oM6446vBJJ7K2yvbte1wooorQ5Dmtb8Mzahq1vq1hqDWV7Cmzf5YcMvPBH4mtuxiuILKKO6uPtE6jDy7Au4/TtVqipUEm2uptOvOcFCWy20V/v3CsDU/Dv9o+IdN1X7SY/sWf3ezO/Pvnit+iiUVJWZNOrOk+aDs9V94UUUVRmcrL4TmtNSmv9D1JtPec5lhaISRsfXHapLHwow1ZNW1a/fULyMYiygRI/oorpqKz9lC9zreNrtWv0teyvbtff8QooorQ5DC0LQP7FutSn+0mX7bN5uCuNnXj360an4f8A7R1/TdU+0mP7ESfLC5359+1btFR7ONuXob/WavtHUvq1bpta35BRRRVmAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAH/9k=&quot;/&gt;
&lt;image id=&quot;source-20&quot; x=&quot;0&quot; y=&quot;0&quot; width=&quot;474&quot; height=&quot;115&quot; xlink:href=&quot;data:image/jpeg;base64,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&quot;/&gt;
&lt;image id=&quot;source-23&quot; x=&quot;0&quot; y=&quot;0&quot; width=&quot;474&quot; height=&quot;96&quot; xlink:href=&quot;data:image/jpeg;base64,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&quot;/&gt;
&lt;image id=&quot;source-26&quot; x=&quot;0&quot; y=&quot;0&quot; width=&quot;426&quot; height=&quot;107&quot; xlink:href=&quot;data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEASABIAAD/4SA0RXhpZgAATU0AKgAAAAgACAALAAIAAAAmAAAIegESAAMAAAABAAEAAAExAAIAAAAmAAAIoAEyAAIAAAAUAAAIxkAAAAMAAAABAAAAAEABAAEAAAABAAAAAIdpAAQAAAABAAAI2uocAAcAAAgMAAAAbgAAEV4c6gAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFdpbmRvd3MgUGhvdG8gRWRpdG9yIDEwLjAuMTAwMTEuMTYzODQAV2luZG93cyBQaG90byBFZGl0b3IgMTAuMC4xMDAxMS4xNjM4NAAyMDIzOjA3OjI5IDEzOjUyOjU0AAAGkAMAAgAAABQAABE0kAQAAgAAABQAABFIkpEAAgAAAAMyNgAAkpIAAgAAAAMyNgAAoAEAAwAAAAEAAQAA6hwABwAACAwAAAkoAAAAABzqAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMjAyMzowNzoyOSAxMzo1MjozMgAyMDIzOjA3OjI5IDEzOjUyOjMyAAAAAAYBAwADAAAAAQAGAAABGgAFAAAAAQAA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NpuoBoiTtDEhh+NevQr+zVpK6OKcL6on0b4NTfbFm1i+Dxq2TGhJLfjXrlraQ2VrHbW6COKNdqqB0FFat7XbYqEeVHKeOPAcHi5IZFm+z3cIwr4yCPQ1yOifCPUtM1y0vJNQjaOCQOQo64q6eIShyicLyuewUVymgUUAFFABRQAYoxQAUUAFFABRQAUUAFFABRQAUUAFFABRgUAFFABRQAUUAf/ZAP/hMehodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvADw/eHBhY2tldCBiZWdpbj0n77u/JyBpZD0nVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkJz8+DQo8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIj48cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPjxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSJ1dWlkOmZhZjViZGQ1LWJhM2QtMTFkYS1hZDMxLWQzM2Q3NTE4MmYxYiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIj48eG1wOkNyZWF0b3JUb29sPldpbmRvd3MgUGhvdG8gRWRpdG9yIDEwLjAuMTAwMTEuMTYzODQ8L3htcDpDcmVhdG9yVG9vbD48eG1wOkNyZWF0ZURhdGU+MjAyMy0wNy0yOVQxMzo1MjozMi4yNTk8L3htcDpDcmVhdGVEYXRlPjwvcmRmOkRlc2NyaXB0aW9uPjwvcmRmOlJERj48L3g6eG1wbWV0YT4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw/eHBhY2tldCBlbmQ9J3cnPz7/2wBDAAMCAgMCAgMDAwMEAwMEBQgFBQQEBQoHBwYIDAoMDAsKCwsNDhIQDQ4RDgsLEBYQERMUFRUVDA8XGBYUGBIUFRT/2wBDAQMEBAUEBQkFBQkUDQsNFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBT/wAARCABrAaoDASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPE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&quot;/&gt;
&lt;/defs&gt;
&lt;g clip-path=&quot;url(#clip-0)&quot;&gt;
&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;rgb(100%, 100%, 100%)&quot; fill-opacity=&quot;1&quot; d=&quot;M 0 0 L 596.25 0 L 596.25 420.542969 L 0 420.542969 Z M 0 0 &quot;/&gt;
&lt;/g&gt;
&lt;g clip-path=&quot;url(#clip-1)&quot;&gt;
&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot; d=&quot;M 124.875 83.128906 L 124.210938 83.128906 L 124.210938 79.917969 L 124.835938 79.917969 C 125.925781 79.917969 127.289062 79.996094 127.289062 81.4375 C 127.289062 82.933594 126.023438 83.128906 124.875 83.128906 M 117.808594 78.5 L 115.980469 78.5 C 114.65625 76.863281 112.746094 75.734375 110.546875 75.230469 L 117.808594 75.230469 Z M 117.808594 82.117188 L 117.730469 82.117188 C 117.457031 80.890625 116.933594 79.800781 116.25 78.847656 L 117.808594 78.847656 Z M 117.808594 89.375 L 116.542969 89.375 C 117.148438 88.4375 117.59375 87.371094 117.808594 86.164062 Z M 117.808594 92.992188 L 111.636719 92.992188 C 113.546875 92.367188 115.160156 91.261719 116.289062 89.722656 L 117.808594 89.722656 Z M 111.347656 89.722656 L 110.410156 90.65625 L 109.476562 89.722656 L 109.125 89.375 L 108.210938 88.457031 L 108.972656 87.71875 C 108.621094 87.816406 108.25 87.875 107.863281 87.875 C 106.460938 87.875 105.371094 87.195312 104.824219 86.105469 L 110.898438 86.105469 C 110.820312 86.242188 110.742188 86.378906 110.664062 86.511719 L 112.609375 88.457031 L 111.519531 89.546875 Z M 103.929688 92.332031 L 101.359375 89.761719 L 101.398438 89.722656 L 101.75 89.375 L 103.929688 87.195312 L 106.5 89.761719 Z M 101.164062 87.914062 C 101.164062 87.738281 101.300781 87.582031 101.496094 87.582031 C 101.691406 87.582031 101.847656 87.738281 101.847656 87.914062 C 101.847656 88.109375 101.691406 88.246094 101.496094 88.246094 C 101.300781 88.246094 101.164062 88.089844 101.164062 87.914062 M 101.847656 86.648438 C 101.847656 86.84375 101.691406 86.980469 101.496094 86.980469 C 101.300781 86.980469 101.164062 86.824219 101.164062 86.648438 C 101.164062 86.472656 101.300781 86.320312 101.496094 86.320312 C 101.691406 86.320312 101.847656 86.472656 101.847656 86.648438 M 99.863281 86.105469 L 99.511719 85.753906 L 98.207031 84.472656 L 100.210938 82.488281 L 100.523438 82.175781 L 102.820312 84.472656 L 101.535156 85.753906 L 100.523438 86.765625 Z M 103.347656 85.425781 C 103.539062 85.425781 103.695312 85.578125 103.695312 85.753906 C 103.695312 85.949219 103.539062 86.085938 103.347656 86.085938 C 103.152344 86.085938 103.015625 85.929688 103.015625 85.753906 C 103.015625 85.578125 103.152344 85.425781 103.347656 85.425781 M 103.347656 84.179688 C 103.539062 84.179688 103.695312 84.335938 103.695312 84.511719 C 103.695312 84.703125 103.539062 84.839844 103.347656 84.839844 C 103.152344 84.839844 103.015625 84.683594 103.015625 84.511719 C 103.015625 84.316406 103.152344 84.179688 103.347656 84.179688 M 104.359375 81.609375 C 104.550781 81.609375 104.707031 81.765625 104.707031 81.941406 C 104.707031 82 104.6875 82.058594 104.648438 82.117188 C 104.628906 82.15625 104.589844 82.175781 104.570312 82.214844 C 104.550781 82.214844 104.550781 82.234375 104.53125 82.234375 C 104.511719 82.234375 104.511719 82.253906 104.496094 82.253906 C 104.476562 82.253906 104.476562 82.253906 104.457031 82.273438 C 104.457031 82.273438 104.457031 82.273438 104.4375 82.273438 C 104.417969 82.273438 104.417969 82.273438 104.398438 82.273438 C 104.398438 82.273438 104.398438 82.273438 104.378906 82.273438 C 104.359375 82.273438 104.359375 82.273438 104.339844 82.273438 C 104.320312 82.273438 104.320312 82.273438 104.300781 82.273438 C 104.300781 82.273438 104.300781 82.273438 104.28125 82.273438 C 104.261719 82.273438 104.261719 82.273438 104.242188 82.273438 C 104.242188 82.273438 104.242188 82.273438 104.222656 82.273438 C 104.203125 82.273438 104.203125 82.273438 104.183594 82.253906 C 104.164062 82.253906 104.164062 82.234375 104.144531 82.234375 C 104.125 82.234375 104.125 82.214844 104.105469 82.214844 C 104.066406 82.195312 104.046875 82.15625 104.027344 82.117188 C 103.988281 82.058594 103.96875 82 103.96875 81.941406 C 104.007812 81.765625 104.164062 81.609375 104.359375 81.609375 M 104.359375 80.347656 C 104.550781 80.347656 104.707031 80.503906 104.707031 80.675781 C 104.707031 80.871094 104.550781 81.007812 104.359375 81.007812 C 104.164062 81.007812 104.027344 80.851562 104.027344 80.675781 C 104.007812 80.503906 104.164062 80.347656 104.359375 80.347656 M 109.417969 82.46875 L 109.769531 82.117188 L 105.175781 82.117188 C 105.757812 81.359375 106.695312 80.871094 107.863281 80.871094 C 108.796875 80.871094 109.59375 81.203125 110.160156 81.726562 L 111.851562 80.035156 L 113.953125 82.117188 L 114.304688 82.46875 L 114.421875 82.582031 L 111.851562 85.152344 L 111.269531 84.566406 C 111.25 84.996094 111.171875 85.386719 111.035156 85.753906 L 104.648438 85.753906 C 104.496094 85.347656 104.417969 84.898438 104.417969 84.414062 C 104.417969 83.710938 104.589844 83.050781 104.921875 82.488281 L 109.417969 82.488281 Z M 138.949219 84.140625 C 138.949219 82.15625 140.5625 80.582031 142.566406 80.582031 C 144.066406 80.582031 145.410156 81.4375 146.480469 82.429688 L 146.285156 75.464844 C 144.882812 74.976562 143.328125 74.707031 141.828125 74.707031 C 138.167969 74.707031 135.054688 76.6875 133.4375 79.664062 C 132.640625 76.4375 129.839844 74.878906 126.238281 74.878906 L 74.148438 74.878906 L 74.148438 75.230469 L 105.175781 75.230469 C 102.976562 75.734375 101.085938 76.882812 99.746094 78.5 L 74.128906 78.5 L 74.128906 78.847656 L 99.472656 78.847656 C 98.769531 79.800781 98.265625 80.890625 97.992188 82.117188 L 74.128906 82.117188 L 74.128906 82.46875 L 97.894531 82.46875 C 97.777344 83.050781 97.71875 83.652344 97.71875 84.296875 C 97.71875 84.800781 97.757812 85.269531 97.816406 85.734375 L 74.128906 85.734375 L 74.128906 86.085938 L 97.894531 86.085938 C 98.109375 87.3125 98.558594 88.402344 99.179688 89.355469 L 74.128906 89.355469 L 74.128906 89.703125 L 99.414062 89.703125 C 100.542969 91.242188 102.160156 92.351562 104.066406 92.972656 L 74.128906 92.972656 L 74.128906 93.324219 L 105.777344 93.324219 L 104.804688 92.347656 L 107.375 89.78125 L 109.945312 92.347656 L 108.972656 93.324219 L 124.210938 93.324219 L 124.210938 87.757812 L 127.597656 87.757812 C 129.664062 87.757812 131.296875 87.019531 132.347656 85.734375 C 133.011719 90.230469 136.804688 93.554688 141.535156 93.554688 C 142.722656 93.554688 145.195312 93.339844 146.265625 92.835938 L 146.460938 86.007812 C 145.390625 87.058594 144.183594 87.699219 142.644531 87.699219 C 140.660156 87.71875 138.949219 86.164062 138.949219 84.140625 &quot;/&gt;
&lt;/g&gt;
&lt;g clip-path=&quot;url(#clip-2)&quot;&gt;
&lt;g clip-path=&quot;url(#clip-3)&quot;&gt;
&lt;g clip-path=&quot;url(#clip-4)&quot;&gt;
&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;url(#linear-pattern-0)&quot; d=&quot;M 75.308594 75.046875 L 77.730469 72.625 L 80.152344 75.046875 L 77.730469 77.46875 Z M 75.308594 75.046875 &quot;/&gt;
&lt;/g&gt;
&lt;/g&gt;
&lt;/g&gt;
&lt;g clip-path=&quot;url(#clip-5)&quot;&gt;
&lt;g clip-path=&quot;url(#clip-6)&quot;&gt;
&lt;g clip-path=&quot;url(#clip-7)&quot;&gt;
&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;url(#linear-pattern-1)&quot; d=&quot;M 80.03125 75.609375 L 82.453125 73.1875 L 84.878906 75.609375 L 82.453125 78.03125 Z M 80.03125 75.609375 &quot;/&gt;
&lt;/g&gt;
&lt;/g&gt;
&lt;/g&gt;
&lt;g clip-path=&quot;url(#clip-8)&quot;&gt;
&lt;g clip-path=&quot;url(#clip-9)&quot;&gt;
&lt;g clip-path=&quot;url(#clip-10)&quot;&gt;
&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;url(#linear-pattern-2)&quot; d=&quot;M 78.367188 78.910156 L 80.789062 76.488281 L 83.210938 78.910156 L 80.789062 81.332031 Z M 78.367188 78.910156 &quot;/&gt;
&lt;/g&gt;
&lt;/g&gt;
&lt;/g&gt;
&lt;g clip-path=&quot;url(#clip-11)&quot;&gt;
&lt;g clip-path=&quot;url(#clip-12)&quot;&gt;
&lt;g clip-path=&quot;url(#clip-13)&quot;&gt;
&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;url(#linear-pattern-3)&quot; d=&quot;M 84.964844 86.082031 L 87.386719 83.660156 L 89.808594 86.082031 L 87.386719 88.503906 Z M 84.964844 86.082031 &quot;/&gt;
&lt;/g&gt;
&lt;/g&gt;
&lt;/g&gt;
&lt;g clip-path=&quot;url(#clip-14)&quot;&gt;
&lt;g clip-path=&quot;url(#clip-15)&quot;&gt;
&lt;g clip-path=&quot;url(#clip-16)&quot;&gt;
&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;url(#linear-pattern-4)&quot; d=&quot;M 78.148438 82.132812 L 80.570312 79.710938 L 82.992188 82.132812 L 80.570312 84.554688 Z M 78.148438 82.132812 &quot;/&gt;
&lt;/g&gt;
&lt;/g&gt;
&lt;/g&gt;
&lt;g clip-path=&quot;url(#clip-17)&quot;&gt;
&lt;g clip-path=&quot;url(#clip-18)&quot;&gt;
&lt;g clip-path=&quot;url(#clip-19)&quot;&gt;
&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;url(#linear-pattern-5)&quot; d=&quot;M 81.109375 80.1875 L 83.535156 77.765625 L 85.957031 80.1875 L 83.535156 82.605469 Z M 81.109375 80.1875 &quot;/&gt;
&lt;/g&gt;
&lt;/g&gt;
&lt;/g&gt;
&lt;g clip-path=&quot;url(#clip-20)&quot;&gt;
&lt;g clip-path=&quot;url(#clip-21)&quot;&gt;
&lt;g clip-path=&quot;url(#clip-22)&quot;&gt;
&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;url(#linear-pattern-6)&quot; d=&quot;M 84.453125 77.003906 L 86.875 74.582031 L 89.296875 77.003906 L 86.875 79.421875 Z M 84.453125 77.003906 &quot;/&gt;
&lt;/g&gt;
&lt;/g&gt;
&lt;/g&gt;
&lt;g clip-path=&quot;url(#clip-23)&quot;&gt;
&lt;g clip-path=&quot;url(#clip-24)&quot;&gt;
&lt;g clip-path=&quot;url(#clip-25)&quot;&gt;
&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;url(#linear-pattern-7)&quot; d=&quot;M 85.988281 88.296875 L 90.476562 83.8125 L 94.960938 88.296875 L 90.476562 92.78125 Z M 85.988281 88.296875 &quot;/&gt;
&lt;/g&gt;
&lt;/g&gt;
&lt;/g&gt;
&lt;g clip-path=&quot;url(#clip-26)&quot;&gt;
&lt;g clip-path=&quot;url(#clip-27)&quot;&gt;
&lt;g clip-path=&quot;url(#clip-28)&quot;&gt;
&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;url(#linear-pattern-8)&quot; d=&quot;M 81.167969 83.820312 L 84.441406 80.546875 L 87.71875 83.820312 L 84.441406 87.09375 Z M 81.167969 83.820312 &quot;/&gt;
&lt;/g&gt;
&lt;/g&gt;
&lt;/g&gt;
&lt;g clip-path=&quot;url(#clip-29)&quot;&gt;
&lt;g clip-path=&quot;url(#clip-30)&quot;&gt;
&lt;g clip-path=&quot;url(#clip-31)&quot;&gt;
&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;url(#linear-pattern-9)&quot; d=&quot;M 89.714844 76.40625 L 93.15625 72.964844 L 96.597656 76.40625 L 93.15625 79.84375 Z M 89.714844 76.40625 &quot;/&gt;
&lt;/g&gt;
&lt;/g&gt;
&lt;/g&gt;
&lt;g clip-path=&quot;url(#clip-32)&quot;&gt;
&lt;g clip-path=&quot;url(#clip-33)&quot;&gt;
&lt;g clip-path=&quot;url(#clip-34)&quot;&gt;
&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;url(#linear-pattern-10)&quot; d=&quot;M 87.296875 79.199219 L 90.738281 75.761719 L 94.179688 79.199219 L 90.738281 82.640625 Z M 87.296875 79.199219 &quot;/&gt;
&lt;/g&gt;
&lt;/g&gt;
&lt;/g&gt;
&lt;g clip-path=&quot;url(#clip-35)&quot;&gt;
&lt;g clip-path=&quot;url(#clip-36)&quot;&gt;
&lt;g clip-path=&quot;url(#clip-37)&quot;&gt;
&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;url(#linear-pattern-11)&quot; d=&quot;M 94.285156 77.574219 L 97.730469 74.132812 L 101.175781 77.574219 L 97.730469 81.019531 Z M 94.285156 77.574219 &quot;/&gt;
&lt;/g&gt;
&lt;/g&gt;
&lt;/g&gt;
&lt;g clip-path=&quot;url(#clip-38)&quot;&gt;
&lt;g clip-path=&quot;url(#clip-39)&quot;&gt;
&lt;g clip-path=&quot;url(#clip-40)&quot;&gt;
&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;url(#linear-pattern-12)&quot; d=&quot;M 77.1875 73.027344 L 79.222656 70.992188 L 81.261719 73.027344 L 79.222656 75.066406 Z M 77.1875 73.027344 &quot;/&gt;
&lt;/g&gt;
&lt;/g&gt;
&lt;/g&gt;
&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot; d=&quot;M 78.742188 81.164062 C 78.9375 81.164062 79.09375 81.320312 79.09375 81.496094 C 79.09375 81.6875 78.9375 81.84375 78.742188 81.84375 C 78.546875 81.84375 78.410156 81.6875 78.410156 81.496094 C 78.390625 81.320312 78.546875 81.164062 78.742188 81.164062 M 78.742188 82.449219 C 78.9375 82.449219 79.09375 82.601562 79.09375 82.796875 C 79.09375 82.992188 78.9375 83.128906 78.742188 83.128906 C 78.546875 83.128906 78.410156 82.972656 78.410156 82.796875 C 78.390625 82.601562 78.546875 82.449219 78.742188 82.449219 &quot;/&gt;
&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot; d=&quot;M 82.441406 83.1875 C 82.632812 83.1875 82.789062 83.34375 82.789062 83.519531 C 82.789062 83.710938 82.632812 83.867188 82.441406 83.867188 C 82.246094 83.867188 82.109375 83.710938 82.109375 83.519531 C 82.089844 83.34375 82.246094 83.1875 82.441406 83.1875 M 82.441406 84.453125 C 82.632812 84.453125 82.789062 84.605469 82.789062 84.800781 C 82.789062 84.996094 82.632812 85.132812 82.441406 85.132812 C 82.246094 85.132812 82.109375 84.976562 82.109375 84.800781 C 82.089844 84.605469 82.246094 84.453125 82.441406 84.453125 &quot;/&gt;
&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot; d=&quot;M 88.746094 78.226562 C 88.941406 78.226562 89.097656 78.382812 89.097656 78.558594 C 89.097656 78.75 88.941406 78.90625 88.746094 78.90625 C 88.550781 78.90625 88.414062 78.75 88.414062 78.558594 C 88.414062 78.402344 88.550781 78.226562 88.746094 78.226562 M 88.746094 79.511719 C 88.941406 79.511719 89.097656 79.664062 89.097656 79.859375 C 89.097656 80.054688 88.941406 80.191406 88.746094 80.191406 C 88.550781 80.191406 88.414062 80.035156 88.414062 79.859375 C 88.414062 79.664062 88.550781 79.511719 88.746094 79.511719 &quot;/&gt;
&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot; d=&quot;M 95.949219 76.554688 C 96.144531 76.554688 96.300781 76.707031 96.300781 76.882812 C 96.300781 77.078125 96.144531 77.234375 95.949219 77.234375 C 95.753906 77.234375 95.617188 77.078125 95.617188 76.882812 C 95.617188 76.707031 95.753906 76.554688 95.949219 76.554688 M 95.949219 77.816406 C 96.144531 77.816406 96.300781 77.972656 96.300781 78.167969 C 96.300781 78.363281 96.144531 78.5 95.949219 78.5 C 95.753906 78.5 95.617188 78.34375 95.617188 78.167969 C 95.617188 77.972656 95.753906 77.816406 95.949219 77.816406 &quot;/&gt;
&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot; d=&quot;M 91.839844 79.121094 C 92.035156 79.121094 92.191406 79.277344 92.191406 79.453125 C 92.191406 79.644531 92.035156 79.800781 91.839844 79.800781 C 91.648438 79.800781 91.511719 79.644531 91.511719 79.453125 C 91.511719 79.277344 91.648438 79.121094 91.839844 79.121094 M 91.839844 80.386719 C 92.035156 80.386719 92.191406 80.542969 92.191406 80.734375 C 92.191406 80.929688 92.035156 81.066406 91.839844 81.066406 C 91.648438 81.066406 91.511719 80.910156 91.511719 80.734375 C 91.511719 80.542969 91.648438 80.386719 91.839844 80.386719 &quot;/&gt;
&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot; d=&quot;M 85.164062 81.457031 C 85.359375 81.457031 85.515625 81.609375 85.515625 81.785156 C 85.515625 81.980469 85.359375 82.136719 85.164062 82.136719 C 84.96875 82.136719 84.835938 81.980469 84.835938 81.785156 C 84.835938 81.609375 84.96875 81.457031 85.164062 81.457031 M 85.164062 82.71875 C 85.359375 82.71875 85.515625 82.875 85.515625 83.070312 C 85.515625 83.265625 85.359375 83.402344 85.164062 83.402344 C 84.96875 83.402344 84.835938 83.246094 84.835938 83.070312 C 84.835938 82.875 84.96875 82.71875 85.164062 82.71875 &quot;/&gt;
&lt;g clip-path=&quot;url(#clip-41)&quot;&gt;
&lt;g clip-path=&quot;url(#clip-42)&quot;&gt;
&lt;g clip-path=&quot;url(#clip-43)&quot;&gt;
&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;url(#linear-pattern-13)&quot; d=&quot;M 83.316406 82.546875 L 87.792969 78.070312 L 92.269531 82.546875 L 87.792969 87.019531 Z M 83.316406 82.546875 &quot;/&gt;
&lt;/g&gt;
&lt;/g&gt;
&lt;/g&gt;
&lt;g clip-path=&quot;url(#clip-44)&quot;&gt;
&lt;g clip-path=&quot;url(#clip-45)&quot;&gt;
&lt;g clip-path=&quot;url(#clip-46)&quot;&gt;
&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;url(#linear-pattern-14)&quot; d=&quot;M 87.34375 83.847656 L 91.824219 79.375 L 96.300781 83.847656 L 91.824219 88.324219 Z M 87.34375 83.847656 &quot;/&gt;
&lt;/g&gt;
&lt;/g&gt;
&lt;/g&gt;
&lt;g clip-path=&quot;url(#clip-47)&quot;&gt;
&lt;g clip-path=&quot;url(#clip-48)&quot;&gt;
&lt;g clip-path=&quot;url(#clip-49)&quot;&gt;
&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;url(#linear-pattern-15)&quot; d=&quot;M 90.003906 80.238281 L 94.488281 75.753906 L 98.976562 80.238281 L 94.488281 84.722656 Z M 90.003906 80.238281 &quot;/&gt;
&lt;/g&gt;
&lt;/g&gt;
&lt;/g&gt;
&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot; d=&quot;M 100.09375 83.460938 C 100.289062 83.460938 100.445312 83.613281 100.445312 83.789062 C 100.445312 83.984375 100.289062 84.140625 100.09375 84.140625 C 99.898438 84.140625 99.765625 83.984375 99.765625 83.789062 C 99.746094 83.613281 99.898438 83.460938 100.09375 83.460938 M 100.09375 84.722656 C 100.289062 84.722656 100.445312 84.878906 100.445312 85.074219 C 100.445312 85.269531 100.289062 85.40625 100.09375 85.40625 C 99.898438 85.40625 99.765625 85.25 99.765625 85.074219 C 99.746094 84.898438 99.898438 84.722656 100.09375 84.722656 &quot;/&gt;
&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot; d=&quot;M 103.113281 88.964844 C 103.308594 88.964844 103.460938 89.121094 103.460938 89.296875 C 103.460938 89.488281 103.308594 89.644531 103.113281 89.644531 C 102.917969 89.644531 102.78125 89.488281 102.78125 89.296875 C 102.761719 89.121094 102.917969 88.964844 103.113281 88.964844 M 103.113281 90.230469 C 103.308594 90.230469 103.460938 90.386719 103.460938 90.578125 C 103.460938 90.773438 103.308594 90.910156 103.113281 90.910156 C 102.917969 90.910156 102.78125 90.753906 102.78125 90.578125 C 102.761719 90.402344 102.917969 90.230469 103.113281 90.230469 &quot;/&gt;
&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot; d=&quot;M 109.945312 87.117188 C 110.140625 87.117188 110.292969 87.273438 110.292969 87.449219 C 110.292969 87.640625 110.140625 87.796875 109.945312 87.796875 C 109.75 87.796875 109.613281 87.640625 109.613281 87.449219 C 109.59375 87.273438 109.75 87.117188 109.945312 87.117188 M 109.945312 88.382812 C 110.140625 88.382812 110.292969 88.535156 110.292969 88.730469 C 110.292969 88.925781 110.140625 89.0625 109.945312 89.0625 C 109.75 89.0625 109.613281 88.90625 109.613281 88.730469 C 109.59375 88.554688 109.75 88.382812 109.945312 88.382812 &quot;/&gt;
&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot; d=&quot;M 85.125 76.300781 C 85.320312 76.300781 85.476562 76.457031 85.476562 76.632812 C 85.476562 76.824219 85.320312 76.980469 85.125 76.980469 C 84.929688 76.980469 84.796875 76.824219 84.796875 76.632812 C 84.796875 76.457031 84.929688 76.300781 85.125 76.300781 M 85.125 77.585938 C 85.320312 77.585938 85.476562 77.738281 85.476562 77.933594 C 85.476562 78.128906 85.320312 78.265625 85.125 78.265625 C 84.929688 78.265625 84.796875 78.109375 84.796875 77.933594 C 84.796875 77.738281 84.929688 77.585938 85.125 77.585938 &quot;/&gt;
&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot; d=&quot;M 91.082031 86.746094 C 91.277344 86.746094 91.433594 86.902344 91.433594 87.078125 C 91.433594 87.273438 91.277344 87.429688 91.082031 87.429688 C 90.886719 87.429688 90.75 87.273438 90.75 87.078125 C 90.75 86.921875 90.886719 86.746094 91.082031 86.746094 M 91.082031 88.03125 C 91.277344 88.03125 91.433594 88.1875 91.433594 88.382812 C 91.433594 88.574219 91.277344 88.710938 91.082031 88.710938 C 90.886719 88.710938 90.75 88.554688 90.75 88.382812 C 90.75 88.1875 90.886719 88.03125 91.082031 88.03125 &quot;/&gt;
&lt;g clip-path=&quot;url(#clip-50)&quot;&gt;
&lt;g clip-path=&quot;url(#clip-51)&quot;&gt;
&lt;g clip-path=&quot;url(#clip-52)&quot;&gt;
&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;url(#linear-pattern-16)&quot; d=&quot;M 89.410156 87.777344 L 93.886719 83.304688 L 98.363281 87.777344 L 93.886719 92.253906 Z M 89.410156 87.777344 &quot;/&gt;
&lt;/g&gt;
&lt;/g&gt;
&lt;/g&gt;
&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot; d=&quot;M 89.332031 76.746094 C 89.332031 76.652344 89.410156 76.574219 89.507812 76.574219 C 89.601562 76.574219 89.679688 76.652344 89.679688 76.746094 C 89.679688 76.863281 89.582031 76.902344 89.507812 76.902344 C 89.429688 76.902344 89.332031 76.863281 89.332031 76.746094 M 89.332031 75.660156 C 89.332031 75.5625 89.410156 75.484375 89.507812 75.484375 C 89.601562 75.484375 89.679688 75.5625 89.679688 75.660156 C 89.679688 75.773438 89.582031 75.8125 89.507812 75.8125 C 89.429688 75.832031 89.332031 75.773438 89.332031 75.660156 &quot;/&gt;
&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot; d=&quot;M 91.316406 75.308594 C 91.511719 75.308594 91.667969 75.464844 91.667969 75.640625 C 91.667969 75.832031 91.511719 75.988281 91.316406 75.988281 C 91.121094 75.988281 90.984375 75.832031 90.984375 75.640625 C 90.984375 75.464844 91.121094 75.308594 91.316406 75.308594 M 91.316406 76.574219 C 91.511719 76.574219 91.667969 76.726562 91.667969 76.921875 C 91.667969 77.117188 91.511719 77.253906 91.316406 77.253906 C 91.121094 77.253906 90.984375 77.097656 90.984375 76.921875 C 90.984375 76.726562 91.121094 76.574219 91.316406 76.574219 &quot;/&gt;
&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot; d=&quot;M 85.828125 86.570312 C 85.828125 86.472656 85.90625 86.378906 86.003906 86.378906 C 86.097656 86.378906 86.195312 86.457031 86.195312 86.570312 C 86.195312 86.6875 86.078125 86.746094 86.003906 86.746094 C 85.925781 86.765625 85.828125 86.707031 85.828125 86.570312 M 85.828125 85.386719 C 85.828125 85.289062 85.90625 85.191406 86.003906 85.191406 C 86.097656 85.191406 86.195312 85.269531 86.195312 85.386719 C 86.195312 85.5 86.078125 85.558594 86.003906 85.558594 C 85.925781 85.558594 85.828125 85.5 85.828125 85.386719 &quot;/&gt;
&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot; d=&quot;M 87.910156 87.757812 C 88.105469 87.757812 88.261719 87.914062 88.261719 88.089844 C 88.261719 88.285156 88.105469 88.4375 87.910156 88.4375 C 87.714844 88.4375 87.578125 88.285156 87.578125 88.089844 C 87.558594 87.914062 87.714844 87.757812 87.910156 87.757812 M 87.910156 89.023438 C 88.105469 89.023438 88.261719 89.179688 88.261719 89.375 C 88.261719 89.566406 88.105469 89.703125 87.910156 89.703125 C 87.714844 89.703125 87.578125 89.546875 87.578125 89.375 C 87.558594 89.199219 87.714844 89.023438 87.910156 89.023438 &quot;/&gt;
&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot; d=&quot;M 81 75.640625 C 81 75.542969 81.078125 75.445312 81.175781 75.445312 C 81.273438 75.445312 81.371094 75.523438 81.371094 75.640625 C 81.371094 75.753906 81.253906 75.8125 81.175781 75.8125 C 81.117188 75.832031 81 75.773438 81 75.640625 M 81 74.453125 C 81 74.355469 81.078125 74.257812 81.175781 74.257812 C 81.273438 74.257812 81.371094 74.335938 81.371094 74.453125 C 81.371094 74.570312 81.253906 74.628906 81.175781 74.628906 C 81.117188 74.628906 81 74.570312 81 74.453125 &quot;/&gt;
&lt;g clip-path=&quot;url(#clip-53)&quot;&gt;
&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot; d=&quot;M 77.769531 73.265625 C 77.769531 73.1875 77.828125 73.109375 77.925781 73.109375 C 78.019531 73.109375 78.078125 73.1875 78.078125 73.265625 C 78.078125 73.363281 77.984375 73.402344 77.925781 73.402344 C 77.867188 73.402344 77.769531 73.363281 77.769531 73.265625 M 77.769531 72.3125 C 77.769531 72.234375 77.828125 72.15625 77.925781 72.15625 C 78.019531 72.15625 78.078125 72.234375 78.078125 72.3125 C 78.078125 72.410156 77.984375 72.449219 77.925781 72.449219 C 77.867188 72.449219 77.769531 72.410156 77.769531 72.3125 &quot;/&gt;
&lt;/g&gt;
&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot; d=&quot;M 82.5 79.316406 C 82.5 79.21875 82.578125 79.140625 82.671875 79.140625 C 82.769531 79.140625 82.847656 79.21875 82.847656 79.316406 C 82.847656 79.433594 82.75 79.472656 82.671875 79.472656 C 82.597656 79.492188 82.5 79.433594 82.5 79.316406 M 82.5 78.246094 C 82.5 78.148438 82.578125 78.070312 82.671875 78.070312 C 82.769531 78.070312 82.847656 78.148438 82.847656 78.246094 C 82.847656 78.363281 82.75 78.402344 82.671875 78.402344 C 82.597656 78.402344 82.5 78.34375 82.5 78.246094 &quot;/&gt;
&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot; d=&quot;M 79.035156 79.277344 C 79.035156 79.179688 79.113281 79.101562 79.207031 79.101562 C 79.304688 79.101562 79.382812 79.179688 79.382812 79.277344 C 79.382812 79.394531 79.285156 79.433594 79.207031 79.433594 C 79.132812 79.433594 79.035156 79.394531 79.035156 79.277344 M 79.035156 78.207031 C 79.035156 78.109375 79.113281 78.03125 79.207031 78.03125 C 79.304688 78.03125 79.382812 78.109375 79.382812 78.207031 C 79.382812 78.324219 79.285156 78.363281 79.207031 78.363281 C 79.132812 78.363281 79.035156 78.304688 79.035156 78.207031 &quot;/&gt;
&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot; d=&quot;M 76.347656 75.660156 C 76.347656 75.5625 76.425781 75.484375 76.503906 75.484375 C 76.601562 75.484375 76.679688 75.5625 76.679688 75.660156 C 76.679688 75.773438 76.582031 75.8125 76.503906 75.8125 C 76.445312 75.832031 76.347656 75.773438 76.347656 75.660156 M 76.347656 74.589844 C 76.347656 74.492188 76.425781 74.414062 76.503906 74.414062 C 76.601562 74.414062 76.679688 74.492188 76.679688 74.589844 C 76.679688 74.703125 76.582031 74.742188 76.503906 74.742188 C 76.445312 74.742188 76.347656 74.6875 76.347656 74.589844 &quot;/&gt;
&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot; d=&quot;M 111.113281 81.476562 C 111.308594 81.476562 111.460938 81.628906 111.460938 81.804688 C 111.460938 82 111.308594 82.15625 111.113281 82.15625 C 110.917969 82.15625 110.78125 82 110.78125 81.804688 C 110.78125 81.628906 110.917969 81.476562 111.113281 81.476562 M 111.113281 82.757812 C 111.308594 82.757812 111.460938 82.914062 111.460938 83.109375 C 111.460938 83.304688 111.308594 83.441406 111.113281 83.441406 C 110.917969 83.441406 110.78125 83.285156 110.78125 83.109375 C 110.78125 82.914062 110.917969 82.757812 111.113281 82.757812 &quot;/&gt;
&lt;g clip-path=&quot;url(#clip-54)&quot;&gt;
&lt;g clip-path=&quot;url(#clip-55)&quot;&gt;
&lt;g clip-path=&quot;url(#clip-56)&quot;&gt;
&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;url(#linear-pattern-17)&quot; d=&quot;M 91.910156 84.988281 L 96.398438 80.503906 L 100.882812 84.988281 L 96.398438 89.46875 Z M 91.910156 84.988281 &quot;/&gt;
&lt;/g&gt;
&lt;/g&gt;
&lt;/g&gt;
&lt;g clip-path=&quot;url(#clip-57)&quot;&gt;
&lt;g clip-path=&quot;url(#clip-58)&quot;&gt;
&lt;g clip-path=&quot;url(#clip-59)&quot;&gt;
&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;url(#linear-pattern-18)&quot; d=&quot;M 93.535156 82.546875 L 97 79.082031 L 100.464844 82.546875 L 97 86.007812 Z M 93.535156 82.546875 &quot;/&gt;
&lt;/g&gt;
&lt;/g&gt;
&lt;/g&gt;
&lt;g clip-path=&quot;url(#clip-60)&quot;&gt;
&lt;g clip-path=&quot;url(#clip-61)&quot;&gt;
&lt;g clip-path=&quot;url(#clip-62)&quot;&gt;
&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;url(#linear-pattern-19)&quot; d=&quot;M 93.53125 89.007812 L 98.019531 84.523438 L 102.507812 89.007812 L 98.019531 93.492188 Z M 93.53125 89.007812 &quot;/&gt;
&lt;/g&gt;
&lt;/g&gt;
&lt;/g&gt;
&lt;g clip-path=&quot;url(#clip-63)&quot;&gt;
&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot; d=&quot;M 171.53125 74.878906 L 171.53125 85.792969 C 171.53125 91.183594 168.144531 93.613281 162.988281 93.613281 C 157.828125 93.613281 154.441406 91.164062 154.441406 85.792969 L 154.441406 74.878906 L 161.15625 74.878906 L 161.15625 85.152344 C 161.15625 86.589844 161.214844 87.875 162.988281 87.875 C 164.777344 87.875 164.816406 86.609375 164.816406 85.152344 L 164.816406 74.878906 Z M 171.53125 74.878906 &quot;/&gt;
&lt;/g&gt;
&lt;g clip-path=&quot;url(#clip-64)&quot;&gt;
&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot; d=&quot;M 182.042969 86.648438 C 182.042969 86.648438 180.933594 81.804688 180.816406 81.027344 L 180.5625 81.027344 L 179.339844 86.648438 Z M 177.605469 93.324219 L 170.5 93.324219 L 176.90625 74.878906 L 184.320312 74.878906 L 190.902344 93.324219 L 183.796875 93.324219 L 183.191406 91.027344 L 178.132812 91.027344 Z M 177.605469 93.324219 &quot;/&gt;
&lt;/g&gt;
&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot; d=&quot;M 186.171875 75.660156 L 186.289062 75.660156 C 186.34375 75.660156 186.402344 75.660156 186.421875 75.640625 C 186.480469 75.621094 186.5 75.582031 186.5 75.523438 C 186.5 75.464844 186.480469 75.425781 186.460938 75.40625 C 186.421875 75.386719 186.363281 75.367188 186.289062 75.367188 L 186.171875 75.367188 Z M 186.734375 76.164062 L 186.539062 76.164062 L 186.539062 76.144531 C 186.539062 76.144531 186.539062 76.144531 186.539062 76.125 L 186.539062 76.007812 C 186.539062 75.910156 186.519531 75.851562 186.460938 75.832031 C 186.421875 75.8125 186.382812 75.8125 186.308594 75.8125 L 186.210938 75.8125 L 186.210938 76.164062 L 186.015625 76.164062 L 186.015625 75.230469 L 186.34375 75.230469 C 186.460938 75.230469 186.539062 75.25 186.597656 75.269531 C 186.695312 75.308594 186.753906 75.386719 186.753906 75.523438 C 186.753906 75.621094 186.714844 75.679688 186.65625 75.714844 C 186.636719 75.734375 186.617188 75.734375 186.597656 75.734375 C 186.636719 75.753906 186.65625 75.773438 186.675781 75.8125 C 186.714844 75.871094 186.734375 75.910156 186.734375 75.96875 L 186.734375 76.027344 C 186.734375 76.046875 186.734375 76.066406 186.734375 76.085938 C 186.734375 76.125 186.734375 76.125 186.734375 76.125 Z M 186.324219 75.015625 C 186.132812 75.015625 185.976562 75.074219 185.839844 75.210938 C 185.703125 75.347656 185.644531 75.503906 185.644531 75.695312 C 185.644531 75.890625 185.703125 76.046875 185.839844 76.183594 C 185.976562 76.320312 186.132812 76.378906 186.324219 76.378906 C 186.519531 76.378906 186.675781 76.320312 186.8125 76.183594 C 186.949219 76.046875 187.007812 75.890625 187.007812 75.695312 C 187.007812 75.503906 186.949219 75.347656 186.8125 75.210938 C 186.675781 75.09375 186.5 75.015625 186.324219 75.015625 M 186.324219 76.535156 C 186.09375 76.535156 185.898438 76.457031 185.742188 76.28125 C 185.585938 76.125 185.488281 75.910156 185.488281 75.679688 C 185.488281 75.445312 185.566406 75.25 185.742188 75.09375 C 185.898438 74.9375 186.113281 74.839844 186.324219 74.839844 C 186.558594 74.839844 186.753906 74.917969 186.910156 75.09375 C 187.066406 75.25 187.164062 75.464844 187.164062 75.679688 C 187.164062 75.910156 187.085938 76.105469 186.910156 76.28125 C 186.753906 76.457031 186.558594 76.535156 186.324219 76.535156 &quot;/&gt;
&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot; d=&quot;M 70.03125 29.328125 C 74.328125 24.203125 74.328125 18.085938 70.03125 12.960938 L 66.121094 16.238281 C 68.816406 19.449219 68.816406 22.839844 66.121094 26.050781 Z M 70.03125 29.328125 &quot;/&gt;
&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot; d=&quot;M 72.109375 31.476562 L 75.507812 35.28125 C 79.308594 31.882812 81.492188 26.726562 81.492188 21.144531 C 81.492188 15.5625 79.3125 10.40625 75.507812 7.007812 L 72.109375 10.8125 C 74.828125 13.246094 76.390625 17.011719 76.390625 21.144531 C 76.390625 25.28125 74.832031 29.042969 72.109375 31.476562 Z M 72.109375 31.476562 &quot;/&gt;
&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot; d=&quot;M 73.960938 38.359375 L 61.210938 38.359375 L 61.210938 5.207031 L 56.109375 5.207031 L 56.109375 38.359375 L 40.804688 38.359375 L 38.253906 40.910156 L 38.253906 68.964844 L 40.804688 71.515625 L 45.90625 71.515625 L 45.90625 81.71875 L 48.457031 84.265625 L 51.007812 84.265625 L 51.007812 114.871094 L 53.558594 117.421875 L 63.757812 117.421875 L 66.308594 114.871094 L 66.308594 84.265625 L 68.859375 84.265625 L 71.410156 81.71875 L 71.410156 71.515625 L 76.511719 71.515625 L 79.0625 68.964844 L 79.0625 62.78125 C 83.558594 60.808594 86.714844 56.328125 86.714844 51.113281 C 86.714844 44.082031 80.992188 38.359375 73.960938 38.359375 Z M 61.210938 112.320312 L 56.109375 112.320312 L 56.109375 84.265625 L 61.210938 84.265625 Z M 66.308594 79.167969 L 51.007812 79.167969 L 51.007812 71.515625 L 66.308594 71.515625 Z M 73.960938 66.414062 L 43.355469 66.414062 L 43.355469 43.460938 L 63.824219 43.460938 C 62.207031 45.597656 61.210938 48.230469 61.210938 51.113281 C 61.210938 58.144531 66.929688 63.863281 73.960938 63.863281 Z M 73.960938 58.761719 C 69.742188 58.761719 66.308594 55.332031 66.308594 51.113281 C 66.308594 46.894531 69.742188 43.460938 73.960938 43.460938 C 78.179688 43.460938 81.613281 46.894531 81.613281 51.113281 C 81.613281 55.332031 78.179688 58.761719 73.960938 58.761719 Z M 73.960938 58.761719 &quot;/&gt;
&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot; d=&quot;M 47.394531 29.328125 L 51.304688 26.050781 C 48.609375 22.839844 48.609375 19.449219 51.304688 16.238281 L 47.394531 12.960938 C 43.097656 18.085938 43.097656 24.203125 47.394531 29.328125 Z M 47.394531 29.328125 &quot;/&gt;
&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot; d=&quot;M 45.316406 31.480469 C 42.59375 29.046875 41.03125 25.28125 41.03125 21.144531 C 41.03125 17.011719 42.589844 13.246094 45.316406 10.8125 L 41.914062 7.011719 C 38.113281 10.40625 35.933594 15.5625 35.933594 21.144531 C 35.933594 26.726562 38.109375 31.882812 41.914062 35.28125 Z M 45.316406 31.480469 &quot;/&gt;
&lt;g fill=&quot;rgb(30.198669%, 30.198669%, 30.198669%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-0-0&quot; x=&quot;89.338484&quot; y=&quot;63.369565&quot;/&gt;
&lt;/g&gt;
&lt;g fill=&quot;rgb(30.198669%, 30.198669%, 30.198669%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-0-1&quot; x=&quot;104.290936&quot; y=&quot;63.369565&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-2&quot; x=&quot;122.492316&quot; y=&quot;63.369565&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-3&quot; x=&quot;130.88538&quot; y=&quot;63.369565&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-4&quot; x=&quot;149.08676&quot; y=&quot;63.369565&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-5&quot; x=&quot;156.089184&quot; y=&quot;63.369565&quot;/&gt;
&lt;/g&gt;
&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot; d=&quot;M 264.460938 29.328125 C 268.757812 24.203125 268.757812 18.085938 264.460938 12.960938 L 260.550781 16.238281 C 263.242188 19.449219 263.242188 22.839844 260.550781 26.050781 Z M 264.460938 29.328125 &quot;/&gt;
&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot; d=&quot;M 266.539062 31.476562 L 269.9375 35.28125 C 273.738281 31.882812 275.921875 26.726562 275.921875 21.144531 C 275.921875 15.5625 273.742188 10.40625 269.9375 7.007812 L 266.539062 10.8125 C 269.257812 13.246094 270.820312 17.011719 270.820312 21.144531 C 270.820312 25.28125 269.261719 29.042969 266.539062 31.476562 Z M 266.539062 31.476562 &quot;/&gt;
&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot; d=&quot;M 268.390625 38.359375 L 255.636719 38.359375 L 255.636719 5.207031 L 250.539062 5.207031 L 250.539062 38.359375 L 235.234375 38.359375 L 232.683594 40.910156 L 232.683594 68.964844 L 235.234375 71.515625 L 240.335938 71.515625 L 240.335938 81.71875 L 242.886719 84.265625 L 245.4375 84.265625 L 245.4375 114.871094 L 247.988281 117.421875 L 258.1875 117.421875 L 260.738281 114.871094 L 260.738281 84.265625 L 263.289062 84.265625 L 265.839844 81.71875 L 265.839844 71.515625 L 270.941406 71.515625 L 273.492188 68.964844 L 273.492188 62.78125 C 277.988281 60.808594 281.140625 56.328125 281.140625 51.113281 C 281.140625 44.082031 275.421875 38.359375 268.390625 38.359375 Z M 255.636719 112.320312 L 250.539062 112.320312 L 250.539062 84.265625 L 255.636719 84.265625 Z M 260.738281 79.167969 L 245.4375 79.167969 L 245.4375 71.515625 L 260.738281 71.515625 Z M 268.390625 66.414062 L 237.785156 66.414062 L 237.785156 43.460938 L 258.253906 43.460938 C 256.636719 45.597656 255.636719 48.230469 255.636719 51.113281 C 255.636719 58.144531 261.359375 63.863281 268.390625 63.863281 Z M 268.390625 58.761719 C 264.171875 58.761719 260.738281 55.332031 260.738281 51.113281 C 260.738281 46.894531 264.171875 43.460938 268.390625 43.460938 C 272.609375 43.460938 276.042969 46.894531 276.042969 51.113281 C 276.042969 55.332031 272.609375 58.761719 268.390625 58.761719 Z M 268.390625 58.761719 &quot;/&gt;
&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot; d=&quot;M 241.824219 29.328125 L 245.734375 26.050781 C 243.039062 22.839844 243.039062 19.449219 245.734375 16.238281 L 241.824219 12.960938 C 237.527344 18.085938 237.527344 24.203125 241.824219 29.328125 Z M 241.824219 29.328125 &quot;/&gt;
&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot; d=&quot;M 239.746094 31.480469 C 237.023438 29.046875 235.460938 25.28125 235.460938 21.144531 C 235.460938 17.011719 237.019531 13.246094 239.746094 10.8125 L 236.34375 7.011719 C 232.542969 10.40625 230.363281 15.5625 230.363281 21.144531 C 230.363281 26.726562 232.539062 31.882812 236.34375 35.28125 Z M 239.746094 31.480469 &quot;/&gt;
&lt;g fill=&quot;rgb(30.198669%, 30.198669%, 30.198669%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-0-0&quot; x=&quot;283.767831&quot; y=&quot;56.168478&quot;/&gt;
&lt;/g&gt;
&lt;g fill=&quot;rgb(30.198669%, 30.198669%, 30.198669%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-0-1&quot; x=&quot;298.720283&quot; y=&quot;56.168478&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-2&quot; x=&quot;316.921663&quot; y=&quot;56.168478&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-3&quot; x=&quot;325.314726&quot; y=&quot;56.168478&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-4&quot; x=&quot;343.516106&quot; y=&quot;56.168478&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-5&quot; x=&quot;350.518531&quot; y=&quot;56.168478&quot;/&gt;
&lt;/g&gt;
&lt;use xlink:href=&quot;#source-5&quot; transform=&quot;matrix(0.102138, 0, 0, 0.102143, 280.251903, 61.209235)&quot;/&gt;
&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot; d=&quot;M 70.03125 171.191406 C 74.328125 166.066406 74.328125 159.949219 70.03125 154.824219 L 66.121094 158.101562 C 68.816406 161.3125 68.816406 164.703125 66.121094 167.914062 Z M 70.03125 171.191406 &quot;/&gt;
&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot; d=&quot;M 72.109375 173.339844 L 75.507812 177.144531 C 79.308594 173.742188 81.492188 168.589844 81.492188 163.007812 C 81.492188 157.425781 79.3125 152.269531 75.507812 148.871094 L 72.109375 152.675781 C 74.828125 155.105469 76.390625 158.871094 76.390625 163.007812 C 76.390625 167.140625 74.832031 170.90625 72.109375 173.339844 Z M 72.109375 173.339844 &quot;/&gt;
&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot; d=&quot;M 73.960938 180.222656 L 61.210938 180.222656 L 61.210938 147.066406 L 56.109375 147.066406 L 56.109375 180.222656 L 40.804688 180.222656 L 38.253906 182.773438 L 38.253906 210.828125 L 40.804688 213.375 L 45.90625 213.375 L 45.90625 223.578125 L 48.457031 226.128906 L 51.007812 226.128906 L 51.007812 256.734375 L 53.558594 259.285156 L 63.757812 259.285156 L 66.308594 256.734375 L 66.308594 226.128906 L 68.859375 226.128906 L 71.410156 223.578125 L 71.410156 213.375 L 76.511719 213.375 L 79.0625 210.828125 L 79.0625 204.644531 C 83.558594 202.671875 86.714844 198.1875 86.714844 192.972656 C 86.714844 185.941406 80.992188 180.222656 73.960938 180.222656 Z M 61.210938 254.183594 L 56.109375 254.183594 L 56.109375 226.128906 L 61.210938 226.128906 Z M 66.308594 221.027344 L 51.007812 221.027344 L 51.007812 213.375 L 66.308594 213.375 Z M 73.960938 208.277344 L 43.355469 208.277344 L 43.355469 185.324219 L 63.824219 185.324219 C 62.207031 187.460938 61.210938 190.089844 61.210938 192.972656 C 61.210938 200.003906 66.929688 205.726562 73.960938 205.726562 Z M 73.960938 200.625 C 69.742188 200.625 66.308594 197.191406 66.308594 192.972656 C 66.308594 188.753906 69.742188 185.324219 73.960938 185.324219 C 78.179688 185.324219 81.613281 188.753906 81.613281 192.972656 C 81.613281 197.191406 78.179688 200.625 73.960938 200.625 Z M 73.960938 200.625 &quot;/&gt;
&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot; d=&quot;M 47.394531 171.191406 L 51.304688 167.914062 C 48.609375 164.703125 48.609375 161.3125 51.304688 158.101562 L 47.394531 154.824219 C 43.097656 159.949219 43.097656 166.066406 47.394531 171.191406 Z M 47.394531 171.191406 &quot;/&gt;
&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot; d=&quot;M 45.316406 173.339844 C 42.59375 170.90625 41.03125 167.140625 41.03125 163.007812 C 41.03125 158.871094 42.589844 155.105469 45.316406 152.671875 L 41.914062 148.871094 C 38.113281 152.269531 35.933594 157.425781 35.933594 163.007812 C 35.933594 168.589844 38.109375 173.742188 41.914062 177.140625 Z M 45.316406 173.339844 &quot;/&gt;
&lt;g fill=&quot;rgb(30.198669%, 30.198669%, 30.198669%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-0-0&quot; x=&quot;89.338484&quot; y=&quot;200.190216&quot;/&gt;
&lt;/g&gt;
&lt;g fill=&quot;rgb(30.198669%, 30.198669%, 30.198669%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-0-1&quot; x=&quot;104.290936&quot; y=&quot;200.190216&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-2&quot; x=&quot;122.492316&quot; y=&quot;200.190216&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-3&quot; x=&quot;130.88538&quot; y=&quot;200.190216&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-4&quot; x=&quot;149.08676&quot; y=&quot;200.190216&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-5&quot; x=&quot;156.089184&quot; y=&quot;200.190216&quot;/&gt;
&lt;/g&gt;
&lt;use xlink:href=&quot;#source-8&quot; transform=&quot;matrix(0.204578, 0, 0, 0.204576, 476.15746, 64.80978)&quot;/&gt;
&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot; d=&quot;M 264.460938 171.191406 C 268.757812 166.066406 268.757812 159.949219 264.460938 154.824219 L 260.550781 158.101562 C 263.242188 161.3125 263.242188 164.703125 260.550781 167.914062 Z M 264.460938 171.191406 &quot;/&gt;
&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot; d=&quot;M 266.539062 173.339844 L 269.9375 177.144531 C 273.738281 173.742188 275.921875 168.589844 275.921875 163.007812 C 275.921875 157.425781 273.742188 152.269531 269.9375 148.871094 L 266.539062 152.675781 C 269.257812 155.105469 270.820312 158.871094 270.820312 163.007812 C 270.820312 167.140625 269.261719 170.90625 266.539062 173.339844 Z M 266.539062 173.339844 &quot;/&gt;
&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot; d=&quot;M 268.390625 180.222656 L 255.636719 180.222656 L 255.636719 147.066406 L 250.539062 147.066406 L 250.539062 180.222656 L 235.234375 180.222656 L 232.683594 182.773438 L 232.683594 210.828125 L 235.234375 213.375 L 240.335938 213.375 L 240.335938 223.578125 L 242.886719 226.128906 L 245.4375 226.128906 L 245.4375 256.734375 L 247.988281 259.285156 L 258.1875 259.285156 L 260.738281 256.734375 L 260.738281 226.128906 L 263.289062 226.128906 L 265.839844 223.578125 L 265.839844 213.375 L 270.941406 213.375 L 273.492188 210.828125 L 273.492188 204.644531 C 277.988281 202.671875 281.140625 198.1875 281.140625 192.972656 C 281.140625 185.941406 275.421875 180.222656 268.390625 180.222656 Z M 255.636719 254.183594 L 250.539062 254.183594 L 250.539062 226.128906 L 255.636719 226.128906 Z M 260.738281 221.027344 L 245.4375 221.027344 L 245.4375 213.375 L 260.738281 213.375 Z M 268.390625 208.277344 L 237.785156 208.277344 L 237.785156 185.324219 L 258.253906 185.324219 C 256.636719 187.460938 255.636719 190.089844 255.636719 192.972656 C 255.636719 200.003906 261.359375 205.726562 268.390625 205.726562 Z M 268.390625 200.625 C 264.171875 200.625 260.738281 197.191406 260.738281 192.972656 C 260.738281 188.753906 264.171875 185.324219 268.390625 185.324219 C 272.609375 185.324219 276.042969 188.753906 276.042969 192.972656 C 276.042969 197.191406 272.609375 200.625 268.390625 200.625 Z M 268.390625 200.625 &quot;/&gt;
&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot; d=&quot;M 241.824219 171.191406 L 245.734375 167.914062 C 243.039062 164.703125 243.039062 161.3125 245.734375 158.101562 L 241.824219 154.824219 C 237.527344 159.949219 237.527344 166.066406 241.824219 171.191406 Z M 241.824219 171.191406 &quot;/&gt;
&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot; d=&quot;M 239.746094 173.339844 C 237.023438 170.90625 235.460938 167.140625 235.460938 163.007812 C 235.460938 158.871094 237.019531 155.105469 239.746094 152.671875 L 236.34375 148.871094 C 232.542969 152.269531 230.363281 157.425781 230.363281 163.007812 C 230.363281 168.589844 232.539062 173.742188 236.34375 177.140625 Z M 239.746094 173.339844 &quot;/&gt;
&lt;g fill=&quot;rgb(30.198669%, 30.198669%, 30.198669%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-0-0&quot; x=&quot;283.767831&quot; y=&quot;198.02989&quot;/&gt;
&lt;/g&gt;
&lt;g fill=&quot;rgb(30.198669%, 30.198669%, 30.198669%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-0-1&quot; x=&quot;298.720283&quot; y=&quot;198.02989&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-2&quot; x=&quot;316.921663&quot; y=&quot;198.02989&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-3&quot; x=&quot;325.314726&quot; y=&quot;198.02989&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-4&quot; x=&quot;343.516106&quot; y=&quot;198.02989&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-5&quot; x=&quot;350.518531&quot; y=&quot;198.02989&quot;/&gt;
&lt;/g&gt;
&lt;use xlink:href=&quot;#source-11&quot; transform=&quot;matrix(0.0447404, 0, 0, 0.0447086, 88.47976, 208.831498)&quot;/&gt;
&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot; d=&quot;M 466.089844 29.328125 C 470.386719 24.203125 470.386719 18.085938 466.089844 12.960938 L 462.179688 16.238281 C 464.875 19.449219 464.875 22.839844 462.179688 26.050781 Z M 466.089844 29.328125 &quot;/&gt;
&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot; d=&quot;M 468.167969 31.476562 L 471.566406 35.28125 C 475.367188 31.882812 477.550781 26.726562 477.550781 21.144531 C 477.550781 15.5625 475.371094 10.40625 471.566406 7.007812 L 468.167969 10.8125 C 470.886719 13.246094 472.453125 17.011719 472.453125 21.144531 C 472.453125 25.28125 470.890625 29.042969 468.167969 31.476562 Z M 468.167969 31.476562 &quot;/&gt;
&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot; d=&quot;M 470.019531 38.359375 L 457.269531 38.359375 L 457.269531 5.207031 L 452.167969 5.207031 L 452.167969 38.359375 L 436.867188 38.359375 L 434.316406 40.910156 L 434.316406 68.964844 L 436.867188 71.515625 L 441.964844 71.515625 L 441.964844 81.71875 L 444.515625 84.265625 L 447.066406 84.265625 L 447.066406 114.871094 L 449.617188 117.421875 L 459.820312 117.421875 L 462.371094 114.871094 L 462.371094 84.265625 L 464.921875 84.265625 L 467.46875 81.71875 L 467.46875 71.515625 L 472.570312 71.515625 L 475.121094 68.964844 L 475.121094 62.78125 C 479.617188 60.808594 482.773438 56.328125 482.773438 51.113281 C 482.773438 44.082031 477.050781 38.359375 470.019531 38.359375 Z M 457.269531 112.320312 L 452.167969 112.320312 L 452.167969 84.265625 L 457.269531 84.265625 Z M 462.371094 79.167969 L 447.066406 79.167969 L 447.066406 71.515625 L 462.371094 71.515625 Z M 470.019531 66.414062 L 439.417969 66.414062 L 439.417969 43.460938 L 459.886719 43.460938 C 458.265625 45.597656 457.269531 48.230469 457.269531 51.113281 C 457.269531 58.144531 462.988281 63.863281 470.019531 63.863281 Z M 470.019531 58.761719 C 465.800781 58.761719 462.371094 55.332031 462.371094 51.113281 C 462.371094 46.894531 465.800781 43.460938 470.019531 43.460938 C 474.238281 43.460938 477.671875 46.894531 477.671875 51.113281 C 477.671875 55.332031 474.238281 58.761719 470.019531 58.761719 Z M 470.019531 58.761719 &quot;/&gt;
&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot; d=&quot;M 443.453125 29.328125 L 447.363281 26.050781 C 444.671875 22.839844 444.671875 19.449219 447.363281 16.238281 L 443.453125 12.960938 C 439.15625 18.085938 439.15625 24.203125 443.453125 29.328125 Z M 443.453125 29.328125 &quot;/&gt;
&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot; d=&quot;M 441.375 31.480469 C 438.652344 29.046875 437.09375 25.28125 437.09375 21.144531 C 437.09375 17.011719 438.652344 13.246094 441.375 10.8125 L 437.972656 7.011719 C 434.171875 10.40625 431.992188 15.5625 431.992188 21.144531 C 431.992188 26.726562 434.171875 31.882812 437.972656 35.28125 Z M 441.375 31.480469 &quot;/&gt;
&lt;g fill=&quot;rgb(30.198669%, 30.198669%, 30.198669%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-0-0&quot; x=&quot;485.398264&quot; y=&quot;56.168478&quot;/&gt;
&lt;/g&gt;
&lt;g fill=&quot;rgb(30.198669%, 30.198669%, 30.198669%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-0-1&quot; x=&quot;500.350716&quot; y=&quot;56.168478&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-2&quot; x=&quot;518.552096&quot; y=&quot;56.168478&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-3&quot; x=&quot;526.94516&quot; y=&quot;56.168478&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-4&quot; x=&quot;545.14654&quot; y=&quot;56.168478&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-5&quot; x=&quot;552.148964&quot; y=&quot;56.168478&quot;/&gt;
&lt;/g&gt;
&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot; d=&quot;M 466.089844 171.191406 C 470.386719 166.066406 470.386719 159.949219 466.089844 154.824219 L 462.179688 158.101562 C 464.875 161.3125 464.875 164.703125 462.179688 167.914062 Z M 466.089844 171.191406 &quot;/&gt;
&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot; d=&quot;M 468.167969 173.339844 L 471.566406 177.144531 C 475.367188 173.742188 477.550781 168.589844 477.550781 163.007812 C 477.550781 157.425781 475.371094 152.269531 471.566406 148.871094 L 468.167969 152.675781 C 470.886719 155.105469 472.453125 158.871094 472.453125 163.007812 C 472.453125 167.140625 470.890625 170.90625 468.167969 173.339844 Z M 468.167969 173.339844 &quot;/&gt;
&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot; d=&quot;M 470.019531 180.222656 L 457.269531 180.222656 L 457.269531 147.066406 L 452.167969 147.066406 L 452.167969 180.222656 L 436.867188 180.222656 L 434.316406 182.773438 L 434.316406 210.828125 L 436.867188 213.375 L 441.964844 213.375 L 441.964844 223.578125 L 444.515625 226.128906 L 447.066406 226.128906 L 447.066406 256.734375 L 449.617188 259.285156 L 459.820312 259.285156 L 462.371094 256.734375 L 462.371094 226.128906 L 464.921875 226.128906 L 467.46875 223.578125 L 467.46875 213.375 L 472.570312 213.375 L 475.121094 210.828125 L 475.121094 204.644531 C 479.617188 202.671875 482.773438 198.1875 482.773438 192.972656 C 482.773438 185.941406 477.050781 180.222656 470.019531 180.222656 Z M 457.269531 254.183594 L 452.167969 254.183594 L 452.167969 226.128906 L 457.269531 226.128906 Z M 462.371094 221.027344 L 447.066406 221.027344 L 447.066406 213.375 L 462.371094 213.375 Z M 470.019531 208.277344 L 439.417969 208.277344 L 439.417969 185.324219 L 459.886719 185.324219 C 458.265625 187.460938 457.269531 190.089844 457.269531 192.972656 C 457.269531 200.003906 462.988281 205.726562 470.019531 205.726562 Z M 470.019531 200.625 C 465.800781 200.625 462.371094 197.191406 462.371094 192.972656 C 462.371094 188.753906 465.800781 185.324219 470.019531 185.324219 C 474.238281 185.324219 477.671875 188.753906 477.671875 192.972656 C 477.671875 197.191406 474.238281 200.625 470.019531 200.625 Z M 470.019531 200.625 &quot;/&gt;
&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot; d=&quot;M 443.453125 171.191406 L 447.363281 167.914062 C 444.671875 164.703125 444.671875 161.3125 447.363281 158.101562 L 443.453125 154.824219 C 439.15625 159.949219 439.15625 166.066406 443.453125 171.191406 Z M 443.453125 171.191406 &quot;/&gt;
&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot; d=&quot;M 441.375 173.339844 C 438.652344 170.90625 437.09375 167.140625 437.09375 163.007812 C 437.09375 158.871094 438.652344 155.105469 441.375 152.671875 L 437.972656 148.871094 C 434.171875 152.269531 431.992188 157.425781 431.992188 163.007812 C 431.992188 168.589844 434.171875 173.742188 437.972656 177.140625 Z M 441.375 173.339844 &quot;/&gt;
&lt;g fill=&quot;rgb(30.198669%, 30.198669%, 30.198669%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-0-0&quot; x=&quot;485.398264&quot; y=&quot;198.02989&quot;/&gt;
&lt;/g&gt;
&lt;g fill=&quot;rgb(30.198669%, 30.198669%, 30.198669%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-0-1&quot; x=&quot;500.350716&quot; y=&quot;198.02989&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-2&quot; x=&quot;518.552096&quot; y=&quot;198.02989&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-3&quot; x=&quot;526.94516&quot; y=&quot;198.02989&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-4&quot; x=&quot;545.14654&quot; y=&quot;198.02989&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-5&quot; x=&quot;552.148964&quot; y=&quot;198.02989&quot;/&gt;
&lt;/g&gt;
&lt;use xlink:href=&quot;#source-14&quot; transform=&quot;matrix(0.20002, 0, 0, 0.20003, 280.251903, 212.158427)&quot;/&gt;
&lt;use xlink:href=&quot;#source-17&quot; transform=&quot;matrix(0.123623, 0, 0, 0.123619, 488.420932, 201.075966)&quot;/&gt;
&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot; d=&quot;M 70.03125 310.171875 C 74.328125 305.046875 74.328125 298.929688 70.03125 293.804688 L 66.121094 297.082031 C 68.816406 300.292969 68.816406 303.683594 66.121094 306.894531 Z M 70.03125 310.171875 &quot;/&gt;
&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot; d=&quot;M 72.109375 312.320312 L 75.507812 316.125 C 79.308594 312.726562 81.492188 307.570312 81.492188 301.988281 C 81.492188 296.40625 79.3125 291.25 75.507812 287.851562 L 72.109375 291.65625 C 74.828125 294.085938 76.390625 297.851562 76.390625 301.988281 C 76.390625 306.121094 74.832031 309.886719 72.109375 312.320312 Z M 72.109375 312.320312 &quot;/&gt;
&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot; d=&quot;M 73.960938 319.203125 L 61.210938 319.203125 L 61.210938 286.046875 L 56.109375 286.046875 L 56.109375 319.203125 L 40.804688 319.203125 L 38.253906 321.753906 L 38.253906 349.808594 L 40.804688 352.359375 L 45.90625 352.359375 L 45.90625 362.558594 L 48.457031 365.109375 L 51.007812 365.109375 L 51.007812 395.714844 L 53.558594 398.265625 L 63.757812 398.265625 L 66.308594 395.714844 L 66.308594 365.109375 L 68.859375 365.109375 L 71.410156 362.558594 L 71.410156 352.359375 L 76.511719 352.359375 L 79.0625 349.808594 L 79.0625 343.625 C 83.558594 341.652344 86.714844 337.171875 86.714844 331.953125 C 86.714844 324.921875 80.992188 319.203125 73.960938 319.203125 Z M 61.210938 393.164062 L 56.109375 393.164062 L 56.109375 365.109375 L 61.210938 365.109375 Z M 66.308594 360.007812 L 51.007812 360.007812 L 51.007812 352.359375 L 66.308594 352.359375 Z M 73.960938 347.257812 L 43.355469 347.257812 L 43.355469 324.304688 L 63.824219 324.304688 C 62.207031 326.441406 61.210938 329.074219 61.210938 331.953125 C 61.210938 338.984375 66.929688 344.707031 73.960938 344.707031 Z M 73.960938 339.605469 C 69.742188 339.605469 66.308594 336.171875 66.308594 331.953125 C 66.308594 327.734375 69.742188 324.304688 73.960938 324.304688 C 78.179688 324.304688 81.613281 327.734375 81.613281 331.953125 C 81.613281 336.171875 78.179688 339.605469 73.960938 339.605469 Z M 73.960938 339.605469 &quot;/&gt;
&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot; d=&quot;M 47.394531 310.171875 L 51.304688 306.894531 C 48.609375 303.683594 48.609375 300.292969 51.304688 297.082031 L 47.394531 293.804688 C 43.097656 298.929688 43.097656 305.046875 47.394531 310.171875 Z M 47.394531 310.171875 &quot;/&gt;
&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot; d=&quot;M 45.316406 312.320312 C 42.59375 309.890625 41.03125 306.121094 41.03125 301.988281 C 41.03125 297.851562 42.589844 294.085938 45.316406 291.652344 L 41.914062 287.851562 C 38.113281 291.25 35.933594 296.40625 35.933594 301.988281 C 35.933594 307.570312 38.109375 312.726562 41.914062 316.121094 Z M 45.316406 312.320312 &quot;/&gt;
&lt;g fill=&quot;rgb(30.198669%, 30.198669%, 30.198669%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-0-0&quot; x=&quot;89.338484&quot; y=&quot;339.171193&quot;/&gt;
&lt;/g&gt;
&lt;g fill=&quot;rgb(30.198669%, 30.198669%, 30.198669%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-0-1&quot; x=&quot;104.290936&quot; y=&quot;339.171193&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-2&quot; x=&quot;122.492316&quot; y=&quot;339.171193&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-3&quot; x=&quot;130.88538&quot; y=&quot;339.171193&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-4&quot; x=&quot;149.08676&quot; y=&quot;339.171193&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-5&quot; x=&quot;156.089184&quot; y=&quot;339.171193&quot;/&gt;
&lt;/g&gt;
&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot; d=&quot;M 264.460938 310.171875 C 268.757812 305.046875 268.757812 298.929688 264.460938 293.804688 L 260.550781 297.082031 C 263.242188 300.292969 263.242188 303.683594 260.550781 306.894531 Z M 264.460938 310.171875 &quot;/&gt;
&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot; d=&quot;M 266.539062 312.320312 L 269.9375 316.125 C 273.738281 312.726562 275.921875 307.570312 275.921875 301.988281 C 275.921875 296.40625 273.742188 291.25 269.9375 287.851562 L 266.539062 291.65625 C 269.257812 294.085938 270.820312 297.851562 270.820312 301.988281 C 270.820312 306.121094 269.261719 309.886719 266.539062 312.320312 Z M 266.539062 312.320312 &quot;/&gt;
&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot; d=&quot;M 268.390625 319.203125 L 255.636719 319.203125 L 255.636719 286.046875 L 250.539062 286.046875 L 250.539062 319.203125 L 235.234375 319.203125 L 232.683594 321.753906 L 232.683594 349.808594 L 235.234375 352.359375 L 240.335938 352.359375 L 240.335938 362.558594 L 242.886719 365.109375 L 245.4375 365.109375 L 245.4375 395.714844 L 247.988281 398.265625 L 258.1875 398.265625 L 260.738281 395.714844 L 260.738281 365.109375 L 263.289062 365.109375 L 265.839844 362.558594 L 265.839844 352.359375 L 270.941406 352.359375 L 273.492188 349.808594 L 273.492188 343.625 C 277.988281 341.652344 281.140625 337.171875 281.140625 331.953125 C 281.140625 324.921875 275.421875 319.203125 268.390625 319.203125 Z M 255.636719 393.164062 L 250.539062 393.164062 L 250.539062 365.109375 L 255.636719 365.109375 Z M 260.738281 360.007812 L 245.4375 360.007812 L 245.4375 352.359375 L 260.738281 352.359375 Z M 268.390625 347.257812 L 237.785156 347.257812 L 237.785156 324.304688 L 258.253906 324.304688 C 256.636719 326.441406 255.636719 329.074219 255.636719 331.953125 C 255.636719 338.984375 261.359375 344.707031 268.390625 344.707031 Z M 268.390625 339.605469 C 264.171875 339.605469 260.738281 336.171875 260.738281 331.953125 C 260.738281 327.734375 264.171875 324.304688 268.390625 324.304688 C 272.609375 324.304688 276.042969 327.734375 276.042969 331.953125 C 276.042969 336.171875 272.609375 339.605469 268.390625 339.605469 Z M 268.390625 339.605469 &quot;/&gt;
&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot; d=&quot;M 241.824219 310.171875 L 245.734375 306.894531 C 243.039062 303.683594 243.039062 300.292969 245.734375 297.082031 L 241.824219 293.804688 C 237.527344 298.929688 237.527344 305.046875 241.824219 310.171875 Z M 241.824219 310.171875 &quot;/&gt;
&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot; d=&quot;M 239.746094 312.320312 C 237.023438 309.890625 235.460938 306.121094 235.460938 301.988281 C 235.460938 297.851562 237.019531 294.085938 239.746094 291.652344 L 236.34375 287.851562 C 232.542969 291.25 230.363281 296.40625 230.363281 301.988281 C 230.363281 307.570312 232.539062 312.726562 236.34375 316.121094 Z M 239.746094 312.320312 &quot;/&gt;
&lt;g fill=&quot;rgb(30.198669%, 30.198669%, 30.198669%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-0-0&quot; x=&quot;283.767831&quot; y=&quot;337.010867&quot;/&gt;
&lt;/g&gt;
&lt;g fill=&quot;rgb(30.198669%, 30.198669%, 30.198669%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-0-1&quot; x=&quot;298.720283&quot; y=&quot;337.010867&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-2&quot; x=&quot;316.921663&quot; y=&quot;337.010867&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-3&quot; x=&quot;325.314726&quot; y=&quot;337.010867&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-4&quot; x=&quot;343.516106&quot; y=&quot;337.010867&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-5&quot; x=&quot;350.518531&quot; y=&quot;337.010867&quot;/&gt;
&lt;/g&gt;
&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot; d=&quot;M 466.089844 310.171875 C 470.386719 305.046875 470.386719 298.929688 466.089844 293.804688 L 462.179688 297.082031 C 464.875 300.292969 464.875 303.683594 462.179688 306.894531 Z M 466.089844 310.171875 &quot;/&gt;
&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot; d=&quot;M 468.167969 312.320312 L 471.566406 316.125 C 475.367188 312.726562 477.550781 307.570312 477.550781 301.988281 C 477.550781 296.40625 475.371094 291.25 471.566406 287.851562 L 468.167969 291.65625 C 470.886719 294.085938 472.453125 297.851562 472.453125 301.988281 C 472.453125 306.121094 470.890625 309.886719 468.167969 312.320312 Z M 468.167969 312.320312 &quot;/&gt;
&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot; d=&quot;M 470.019531 319.203125 L 457.269531 319.203125 L 457.269531 286.046875 L 452.167969 286.046875 L 452.167969 319.203125 L 436.867188 319.203125 L 434.316406 321.753906 L 434.316406 349.808594 L 436.867188 352.359375 L 441.964844 352.359375 L 441.964844 362.558594 L 444.515625 365.109375 L 447.066406 365.109375 L 447.066406 395.714844 L 449.617188 398.265625 L 459.820312 398.265625 L 462.371094 395.714844 L 462.371094 365.109375 L 464.921875 365.109375 L 467.46875 362.558594 L 467.46875 352.359375 L 472.570312 352.359375 L 475.121094 349.808594 L 475.121094 343.625 C 479.617188 341.652344 482.773438 337.171875 482.773438 331.953125 C 482.773438 324.921875 477.050781 319.203125 470.019531 319.203125 Z M 457.269531 393.164062 L 452.167969 393.164062 L 452.167969 365.109375 L 457.269531 365.109375 Z M 462.371094 360.007812 L 447.066406 360.007812 L 447.066406 352.359375 L 462.371094 352.359375 Z M 470.019531 347.257812 L 439.417969 347.257812 L 439.417969 324.304688 L 459.886719 324.304688 C 458.265625 326.441406 457.269531 329.074219 457.269531 331.953125 C 457.269531 338.984375 462.988281 344.707031 470.019531 344.707031 Z M 470.019531 339.605469 C 465.800781 339.605469 462.371094 336.171875 462.371094 331.953125 C 462.371094 327.734375 465.800781 324.304688 470.019531 324.304688 C 474.238281 324.304688 477.671875 327.734375 477.671875 331.953125 C 477.671875 336.171875 474.238281 339.605469 470.019531 339.605469 Z M 470.019531 339.605469 &quot;/&gt;
&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot; d=&quot;M 443.453125 310.171875 L 447.363281 306.894531 C 444.671875 303.683594 444.671875 300.292969 447.363281 297.082031 L 443.453125 293.804688 C 439.15625 298.929688 439.15625 305.046875 443.453125 310.171875 Z M 443.453125 310.171875 &quot;/&gt;
&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot; d=&quot;M 441.375 312.320312 C 438.652344 309.890625 437.09375 306.121094 437.09375 301.988281 C 437.09375 297.851562 438.652344 294.085938 441.375 291.652344 L 437.972656 287.851562 C 434.171875 291.25 431.992188 296.40625 431.992188 301.988281 C 431.992188 307.570312 434.171875 312.726562 437.972656 316.121094 Z M 441.375 312.320312 &quot;/&gt;
&lt;g fill=&quot;rgb(30.198669%, 30.198669%, 30.198669%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-0-0&quot; x=&quot;485.398264&quot; y=&quot;337.010867&quot;/&gt;
&lt;/g&gt;
&lt;g fill=&quot;rgb(30.198669%, 30.198669%, 30.198669%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-0-1&quot; x=&quot;500.350716&quot; y=&quot;337.010867&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-2&quot; x=&quot;518.552096&quot; y=&quot;337.010867&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-3&quot; x=&quot;526.94516&quot; y=&quot;337.010867&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-4&quot; x=&quot;545.14654&quot; y=&quot;337.010867&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-5&quot; x=&quot;552.148964&quot; y=&quot;337.010867&quot;/&gt;
&lt;/g&gt;
&lt;use xlink:href=&quot;#source-20&quot; transform=&quot;matrix(0.202755, 0, 0, 0.202758, 84.461548, 351.139407)&quot;/&gt;
&lt;use xlink:href=&quot;#source-23&quot; transform=&quot;matrix(0.300045, 0, 0, 0.300045, 273.641297, 347.538842)&quot;/&gt;
&lt;use xlink:href=&quot;#source-26&quot; transform=&quot;matrix(0.257312, 0, 0, 0.257287, 475.991836, 346.926767)&quot;/&gt;
&lt;/svg&gt;
&lt;/div&gt;
&lt;/p&gt;
&lt;/div&gt;

&lt;p&gt;
如图 &lt;a href=&quot;#org04db1b0&quot;&gt;1&lt;/a&gt; 所示，PA-DIM 给那些支持不同工业总线协议的设备扩展了OPC UA设备信息模型。在这个信息模型中定义了设备的核心参数，建立设备的标准数据集，最后，用易于极其解析合理价的格式把这些数据提供出去。这样，不管哪家供应商，使用哪种协议，访问数据的客户端都能轻松读取数据。
&lt;/p&gt;


&lt;div id=&quot;orge0b1344&quot; class=&quot;figure&quot;&gt;
&lt;p&gt;&lt;div align=&quot;center&quot;&gt;&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;
&lt;svg
   xmlns:dc=&quot;http://purl.org/dc/elements/1.1/&quot;
   xmlns:cc=&quot;http://creativecommons.org/ns#&quot;
   xmlns:rdf=&quot;http://www.w3.org/1999/02/22-rdf-syntax-ns#&quot;
   xmlns:svg=&quot;http://www.w3.org/2000/svg&quot;
   xmlns=&quot;http://www.w3.org/2000/svg&quot;
   xmlns:sodipodi=&quot;http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd&quot;
   xmlns:inkscape=&quot;http://www.inkscape.org/namespaces/inkscape&quot;
   version=&quot;1.1&quot;
   id=&quot;svg2&quot;
   xml:space=&quot;preserve&quot;
   width=&quot;653.85028&quot;
   height=&quot;400.92169&quot;
   viewBox=&quot;0 0 653.85028 400.92169&quot;
   sodipodi:docname=&quot;PA-DIM-Overview.svg&quot;
   inkscape:version=&quot;1.0.2-2 (e86c870879, 2021-01-15)&quot;&gt;&lt;metadata
     id=&quot;metadata8&quot;&gt;&lt;rdf:RDF&gt;&lt;cc:Work
         rdf:about=&quot;&quot;&gt;&lt;dc:format&gt;image/svg+xml&lt;/dc:format&gt;&lt;dc:type
           rdf:resource=&quot;http://purl.org/dc/dcmitype/StillImage&quot; /&gt;&lt;dc:title&gt;&lt;/dc:title&gt;&lt;/cc:Work&gt;&lt;/rdf:RDF&gt;&lt;/metadata&gt;&lt;defs
     id=&quot;defs6&quot;&gt;&lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath18&quot;&gt;&lt;path
         d=&quot;M 9.12e-6,0 H 612.00001 V 792 H 9.12e-6 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path16&quot; /&gt;&lt;/clipPath&gt;&lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath30&quot;&gt;&lt;path
         d=&quot;M 9.12e-6,0 H 612.00001 V 792 H 9.12e-6 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path28&quot; /&gt;&lt;/clipPath&gt;&lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath38&quot;&gt;&lt;path
         d=&quot;M 9.12e-6,0 H 612.00001 V 792 H 9.12e-6 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path36&quot; /&gt;&lt;/clipPath&gt;&lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath50&quot;&gt;&lt;path
         d=&quot;M 9.12e-6,0 H 612.00001 V 792 H 9.12e-6 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path48&quot; /&gt;&lt;/clipPath&gt;&lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath62&quot;&gt;&lt;path
         d=&quot;M 9.12e-6,0 H 612.00001 V 792 H 9.12e-6 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path60&quot; /&gt;&lt;/clipPath&gt;&lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath74&quot;&gt;&lt;path
         d=&quot;M 9.12e-6,0 H 612.00001 V 792 H 9.12e-6 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path72&quot; /&gt;&lt;/clipPath&gt;&lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath82&quot;&gt;&lt;path
         d=&quot;M 9.12e-6,0 H 612.00001 V 792 H 9.12e-6 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path80&quot; /&gt;&lt;/clipPath&gt;&lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath94&quot;&gt;&lt;path
         d=&quot;M 9.12e-6,0 H 612.00001 V 792 H 9.12e-6 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path92&quot; /&gt;&lt;/clipPath&gt;&lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath102&quot;&gt;&lt;path
         d=&quot;M 9.12e-6,0 H 612.00001 V 792 H 9.12e-6 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path100&quot; /&gt;&lt;/clipPath&gt;&lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath114&quot;&gt;&lt;path
         d=&quot;M 9.12e-6,0 H 612.00001 V 792 H 9.12e-6 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path112&quot; /&gt;&lt;/clipPath&gt;&lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath122&quot;&gt;&lt;path
         d=&quot;M 9.12e-6,0 H 612.00001 V 792 H 9.12e-6 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path120&quot; /&gt;&lt;/clipPath&gt;&lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath130&quot;&gt;&lt;path
         d=&quot;M 9.12e-6,0 H 612.00001 V 792 H 9.12e-6 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path128&quot; /&gt;&lt;/clipPath&gt;&lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath138&quot;&gt;&lt;path
         d=&quot;M 9.12e-6,0 H 612.00001 V 792 H 9.12e-6 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path136&quot; /&gt;&lt;/clipPath&gt;&lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath146&quot;&gt;&lt;path
         d=&quot;M 9.12e-6,0 H 612.00001 V 792 H 9.12e-6 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path144&quot; /&gt;&lt;/clipPath&gt;&lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath158&quot;&gt;&lt;path
         d=&quot;M 9.12e-6,0 H 612.00001 V 792 H 9.12e-6 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path156&quot; /&gt;&lt;/clipPath&gt;&lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath170&quot;&gt;&lt;path
         d=&quot;M 9.12e-6,0 H 612.00001 V 792 H 9.12e-6 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path168&quot; /&gt;&lt;/clipPath&gt;&lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath182&quot;&gt;&lt;path
         d=&quot;M 9.12e-6,0 H 612.00001 V 792 H 9.12e-6 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path180&quot; /&gt;&lt;/clipPath&gt;&lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath194&quot;&gt;&lt;path
         d=&quot;M 9.12e-6,0 H 612.00001 V 792 H 9.12e-6 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path192&quot; /&gt;&lt;/clipPath&gt;&lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath206&quot;&gt;&lt;path
         d=&quot;M 9.12e-6,0 H 612.00001 V 792 H 9.12e-6 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path204&quot; /&gt;&lt;/clipPath&gt;&lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath218&quot;&gt;&lt;path
         d=&quot;M 9.12e-6,0 H 612.00001 V 792 H 9.12e-6 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path216&quot; /&gt;&lt;/clipPath&gt;&lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath230&quot;&gt;&lt;path
         d=&quot;M 9.12e-6,0 H 612.00001 V 792 H 9.12e-6 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path228&quot; /&gt;&lt;/clipPath&gt;&lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath242&quot;&gt;&lt;path
         d=&quot;M 9.12e-6,0 H 612.00001 V 792 H 9.12e-6 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path240&quot; /&gt;&lt;/clipPath&gt;&lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath250&quot;&gt;&lt;path
         d=&quot;M 9.12e-6,0 H 612.00001 V 792 H 9.12e-6 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path248&quot; /&gt;&lt;/clipPath&gt;&lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath262&quot;&gt;&lt;path
         d=&quot;M 9.12e-6,0 H 612.00001 V 792 H 9.12e-6 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path260&quot; /&gt;&lt;/clipPath&gt;&lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath270&quot;&gt;&lt;path
         d=&quot;M 9.12e-6,0 H 612.00001 V 792 H 9.12e-6 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path268&quot; /&gt;&lt;/clipPath&gt;&lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath282&quot;&gt;&lt;path
         d=&quot;M 9.12e-6,0 H 612.00001 V 792 H 9.12e-6 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path280&quot; /&gt;&lt;/clipPath&gt;&lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath294&quot;&gt;&lt;path
         d=&quot;M 9.12e-6,0 H 612.00001 V 792 H 9.12e-6 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path292&quot; /&gt;&lt;/clipPath&gt;&lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath306&quot;&gt;&lt;path
         d=&quot;M 9.12e-6,0 H 612.00001 V 792 H 9.12e-6 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path304&quot; /&gt;&lt;/clipPath&gt;&lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath318&quot;&gt;&lt;path
         d=&quot;M 9.12e-6,0 H 612.00001 V 792 H 9.12e-6 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path316&quot; /&gt;&lt;/clipPath&gt;&lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath330&quot;&gt;&lt;path
         d=&quot;M 9.12e-6,0 H 612.00001 V 792 H 9.12e-6 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path328&quot; /&gt;&lt;/clipPath&gt;&lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath342&quot;&gt;&lt;path
         d=&quot;M 9.12e-6,0 H 612.00001 V 792 H 9.12e-6 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path340&quot; /&gt;&lt;/clipPath&gt;&lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath354&quot;&gt;&lt;path
         d=&quot;M 9.12e-6,0 H 612.00001 V 792 H 9.12e-6 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path352&quot; /&gt;&lt;/clipPath&gt;&lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath362&quot;&gt;&lt;path
         d=&quot;M 9.12e-6,0 H 612.00001 V 792 H 9.12e-6 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path360&quot; /&gt;&lt;/clipPath&gt;&lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath374&quot;&gt;&lt;path
         d=&quot;M 9.12e-6,0 H 612.00001 V 792 H 9.12e-6 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path372&quot; /&gt;&lt;/clipPath&gt;&lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath386&quot;&gt;&lt;path
         d=&quot;M 9.12e-6,0 H 612.00001 V 792 H 9.12e-6 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path384&quot; /&gt;&lt;/clipPath&gt;&lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath398&quot;&gt;&lt;path
         d=&quot;M 9.12e-6,0 H 612.00001 V 792 H 9.12e-6 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path396&quot; /&gt;&lt;/clipPath&gt;&lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath410&quot;&gt;&lt;path
         d=&quot;M 9.12e-6,0 H 612.00001 V 792 H 9.12e-6 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path408&quot; /&gt;&lt;/clipPath&gt;&lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath422&quot;&gt;&lt;path
         d=&quot;M 9.12e-6,0 H 612.00001 V 792 H 9.12e-6 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path420&quot; /&gt;&lt;/clipPath&gt;&lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath434&quot;&gt;&lt;path
         d=&quot;M 9.12e-6,0 H 612.00001 V 792 H 9.12e-6 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path432&quot; /&gt;&lt;/clipPath&gt;&lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath442&quot;&gt;&lt;path
         d=&quot;M 9.12e-6,0 H 612.00001 V 792 H 9.12e-6 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path440&quot; /&gt;&lt;/clipPath&gt;&lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath454&quot;&gt;&lt;path
         d=&quot;M 9.12e-6,0 H 612.00001 V 792 H 9.12e-6 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path452&quot; /&gt;&lt;/clipPath&gt;&lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath466&quot;&gt;&lt;path
         d=&quot;M 9.12e-6,0 H 612.00001 V 792 H 9.12e-6 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path464&quot; /&gt;&lt;/clipPath&gt;&lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath478&quot;&gt;&lt;path
         d=&quot;M 9.12e-6,0 H 612.00001 V 792 H 9.12e-6 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path476&quot; /&gt;&lt;/clipPath&gt;&lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath490&quot;&gt;&lt;path
         d=&quot;M 9.12e-6,0 H 612.00001 V 792 H 9.12e-6 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path488&quot; /&gt;&lt;/clipPath&gt;&lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath502&quot;&gt;&lt;path
         d=&quot;M 9.12e-6,0 H 612.00001 V 792 H 9.12e-6 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path500&quot; /&gt;&lt;/clipPath&gt;&lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath514&quot;&gt;&lt;path
         d=&quot;M 9.12e-6,0 H 612.00001 V 792 H 9.12e-6 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path512&quot; /&gt;&lt;/clipPath&gt;&lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath526&quot;&gt;&lt;path
         d=&quot;M 9.12e-6,0 H 612.00001 V 792 H 9.12e-6 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path524&quot; /&gt;&lt;/clipPath&gt;&lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath538&quot;&gt;&lt;path
         d=&quot;M 9.12e-6,0 H 612.00001 V 792 H 9.12e-6 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path536&quot; /&gt;&lt;/clipPath&gt;&lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath546&quot;&gt;&lt;path
         d=&quot;M 0,6.1035e-5 H 612 V 792.00006 H 0 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path544&quot; /&gt;&lt;/clipPath&gt;&lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath556&quot;&gt;&lt;path
         d=&quot;M 0,0 H 997.49 V 622.99 H 0 Z&quot;
         id=&quot;path554&quot; /&gt;&lt;/clipPath&gt;&lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath578&quot;&gt;&lt;path
         d=&quot;M 1.4864e-5,-0.0072021 H 997.50001 V 622.9928 H 1.4864e-5 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path576&quot; /&gt;&lt;/clipPath&gt;&lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath590&quot;&gt;&lt;path
         d=&quot;M 1.4864e-5,-0.0072021 H 997.50001 V 622.9928 H 1.4864e-5 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path588&quot; /&gt;&lt;/clipPath&gt;&lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath602&quot;&gt;&lt;path
         d=&quot;M 1.4864e-5,-0.0072021 H 997.50001 V 622.9928 H 1.4864e-5 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path600&quot; /&gt;&lt;/clipPath&gt;&lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath632&quot;&gt;&lt;path
         d=&quot;M 1.4864e-5,-0.0072021 H 997.50001 V 622.9928 H 1.4864e-5 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path630&quot; /&gt;&lt;/clipPath&gt;&lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath648&quot;&gt;&lt;path
         d=&quot;M 1.4864e-5,-0.0072021 H 997.50001 V 622.9928 H 1.4864e-5 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path646&quot; /&gt;&lt;/clipPath&gt;&lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath668&quot;&gt;&lt;path
         d=&quot;M 1.4864e-5,-0.0072021 H 997.50001 V 622.9928 H 1.4864e-5 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path666&quot; /&gt;&lt;/clipPath&gt;&lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath684&quot;&gt;&lt;path
         d=&quot;M 1.4864e-5,-0.0072021 H 997.50001 V 622.9928 H 1.4864e-5 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path682&quot; /&gt;&lt;/clipPath&gt;&lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath700&quot;&gt;&lt;path
         d=&quot;M 1.4864e-5,-0.0072021 H 997.50001 V 622.9928 H 1.4864e-5 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path698&quot; /&gt;&lt;/clipPath&gt;&lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath716&quot;&gt;&lt;path
         d=&quot;M 1.4864e-5,-0.0072021 H 997.50001 V 622.9928 H 1.4864e-5 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path714&quot; /&gt;&lt;/clipPath&gt;&lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath732&quot;&gt;&lt;path
         d=&quot;M 1.4864e-5,-0.0072021 H 997.50001 V 622.9928 H 1.4864e-5 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path730&quot; /&gt;&lt;/clipPath&gt;&lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath748&quot;&gt;&lt;path
         d=&quot;M 1.4864e-5,-0.0072021 H 997.50001 V 622.9928 H 1.4864e-5 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path746&quot; /&gt;&lt;/clipPath&gt;&lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath764&quot;&gt;&lt;path
         d=&quot;M 1.4864e-5,-0.0072021 H 997.50001 V 622.9928 H 1.4864e-5 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path762&quot; /&gt;&lt;/clipPath&gt;&lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath782&quot;&gt;&lt;path
         d=&quot;M 1.4864e-5,-0.0072021 H 997.50001 V 622.9928 H 1.4864e-5 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path780&quot; /&gt;&lt;/clipPath&gt;&lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath798&quot;&gt;&lt;path
         d=&quot;M 1.4864e-5,-0.0072021 H 997.50001 V 622.9928 H 1.4864e-5 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path796&quot; /&gt;&lt;/clipPath&gt;&lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath810&quot;&gt;&lt;path
         d=&quot;M 1.4864e-5,-0.0072021 H 997.50001 V 622.9928 H 1.4864e-5 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path808&quot; /&gt;&lt;/clipPath&gt;&lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath826&quot;&gt;&lt;path
         d=&quot;M 1.4864e-5,-0.0072021 H 997.50001 V 622.9928 H 1.4864e-5 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path824&quot; /&gt;&lt;/clipPath&gt;&lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath838&quot;&gt;&lt;path
         d=&quot;M 1.4864e-5,-0.0072021 H 997.50001 V 622.9928 H 1.4864e-5 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path836&quot; /&gt;&lt;/clipPath&gt;&lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath854&quot;&gt;&lt;path
         d=&quot;M 1.4864e-5,-0.0072021 H 997.50001 V 622.9928 H 1.4864e-5 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path852&quot; /&gt;&lt;/clipPath&gt;&lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath866&quot;&gt;&lt;path
         d=&quot;M 1.4864e-5,-0.0072021 H 997.50001 V 622.9928 H 1.4864e-5 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path864&quot; /&gt;&lt;/clipPath&gt;&lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath884&quot;&gt;&lt;path
         d=&quot;M 1.4864e-5,-0.0072021 H 997.50001 V 622.9928 H 1.4864e-5 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path882&quot; /&gt;&lt;/clipPath&gt;&lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath902&quot;&gt;&lt;path
         d=&quot;M 1.4864e-5,-0.0072021 H 997.50001 V 622.9928 H 1.4864e-5 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path900&quot; /&gt;&lt;/clipPath&gt;&lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath920&quot;&gt;&lt;path
         d=&quot;M 1.4864e-5,-0.0072021 H 997.50001 V 622.9928 H 1.4864e-5 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path918&quot; /&gt;&lt;/clipPath&gt;&lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath936&quot;&gt;&lt;path
         d=&quot;M 1.4864e-5,-0.0072021 H 997.50001 V 622.9928 H 1.4864e-5 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path934&quot; /&gt;&lt;/clipPath&gt;&lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath948&quot;&gt;&lt;path
         d=&quot;M 1.4864e-5,-0.0072021 H 997.50001 V 622.9928 H 1.4864e-5 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path946&quot; /&gt;&lt;/clipPath&gt;&lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath964&quot;&gt;&lt;path
         d=&quot;M 1.4864e-5,-0.0072021 H 997.50001 V 622.9928 H 1.4864e-5 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path962&quot; /&gt;&lt;/clipPath&gt;&lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath976&quot;&gt;&lt;path
         d=&quot;M 1.4864e-5,-0.0072021 H 997.50001 V 622.9928 H 1.4864e-5 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path974&quot; /&gt;&lt;/clipPath&gt;&lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath994&quot;&gt;&lt;path
         d=&quot;M 1.4864e-5,-0.0072021 H 997.50001 V 622.9928 H 1.4864e-5 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path992&quot; /&gt;&lt;/clipPath&gt;&lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath1012&quot;&gt;&lt;path
         d=&quot;M 1.4864e-5,-0.0072021 H 997.50001 V 622.9928 H 1.4864e-5 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path1010&quot; /&gt;&lt;/clipPath&gt;&lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath1028&quot;&gt;&lt;path
         d=&quot;M 1.4864e-5,-0.0072021 H 997.50001 V 622.9928 H 1.4864e-5 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path1026&quot; /&gt;&lt;/clipPath&gt;&lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath1040&quot;&gt;&lt;path
         d=&quot;M 1.4864e-5,-0.0072021 H 997.50001 V 622.9928 H 1.4864e-5 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path1038&quot; /&gt;&lt;/clipPath&gt;&lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath1078&quot;&gt;&lt;path
         d=&quot;M 1.4864e-5,-0.0072021 H 997.50001 V 622.9928 H 1.4864e-5 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path1076&quot; /&gt;&lt;/clipPath&gt;&lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath1098&quot;&gt;&lt;path
         d=&quot;M 1.4864e-5,-0.0072021 H 997.50001 V 622.9928 H 1.4864e-5 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path1096&quot; /&gt;&lt;/clipPath&gt;&lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath1114&quot;&gt;&lt;path
         d=&quot;M 3.0518e-5,-0.006958 H 997.50003 V 622.99304 H 3.0518e-5 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path1112&quot; /&gt;&lt;/clipPath&gt;&lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath1124&quot;&gt;&lt;path
         d=&quot;M 1.4864e-5,-0.0072021 H 997.50001 V 622.9928 H 1.4864e-5 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path1122&quot; /&gt;&lt;/clipPath&gt;&lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath1136&quot;&gt;&lt;path
         d=&quot;M 1.4864e-5,-0.0072021 H 997.50001 V 622.9928 H 1.4864e-5 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path1134&quot; /&gt;&lt;/clipPath&gt;&lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath1148&quot;&gt;&lt;path
         d=&quot;M 1.4864e-5,-0.0072021 H 997.50001 V 622.9928 H 1.4864e-5 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path1146&quot; /&gt;&lt;/clipPath&gt;&lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath1160&quot;&gt;&lt;path
         d=&quot;M 1.4864e-5,-0.0072021 H 997.50001 V 622.9928 H 1.4864e-5 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path1158&quot; /&gt;&lt;/clipPath&gt;&lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath1168&quot;&gt;&lt;path
         d=&quot;M 1.4864e-5,-0.0072021 H 997.50001 V 622.9928 H 1.4864e-5 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path1166&quot; /&gt;&lt;/clipPath&gt;&lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath1180&quot;&gt;&lt;path
         d=&quot;M 1.4864e-5,-0.0072021 H 997.50001 V 622.9928 H 1.4864e-5 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path1178&quot; /&gt;&lt;/clipPath&gt;&lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath1188&quot;&gt;&lt;path
         d=&quot;M 1.4864e-5,-0.0072021 H 997.50001 V 622.9928 H 1.4864e-5 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path1186&quot; /&gt;&lt;/clipPath&gt;&lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath1200&quot;&gt;&lt;path
         d=&quot;M 1.4864e-5,-0.0072021 H 997.50001 V 622.9928 H 1.4864e-5 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path1198&quot; /&gt;&lt;/clipPath&gt;&lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath1216&quot;&gt;&lt;path
         d=&quot;M 1.4864e-5,-0.0072021 H 997.50001 V 622.9928 H 1.4864e-5 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path1214&quot; /&gt;&lt;/clipPath&gt;&lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath1236&quot;&gt;&lt;path
         d=&quot;M 1.4864e-5,-0.0072021 H 997.50001 V 622.9928 H 1.4864e-5 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path1234&quot; /&gt;&lt;/clipPath&gt;&lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath1248&quot;&gt;&lt;path
         d=&quot;M 1.4864e-5,-0.0072021 H 997.50001 V 622.9928 H 1.4864e-5 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path1246&quot; /&gt;&lt;/clipPath&gt;&lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath1260&quot;&gt;&lt;path
         d=&quot;M 1.4864e-5,-0.0072021 H 997.50001 V 622.9928 H 1.4864e-5 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path1258&quot; /&gt;&lt;/clipPath&gt;&lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath1278&quot;&gt;&lt;path
         d=&quot;M 1.4864e-5,-0.0072021 H 997.50001 V 622.9928 H 1.4864e-5 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path1276&quot; /&gt;&lt;/clipPath&gt;&lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath1294&quot;&gt;&lt;path
         d=&quot;M 1.4864e-5,-0.0072021 H 997.50001 V 622.9928 H 1.4864e-5 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path1292&quot; /&gt;&lt;/clipPath&gt;&lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath1306&quot;&gt;&lt;path
         d=&quot;M 1.4864e-5,-0.0072021 H 997.50001 V 622.9928 H 1.4864e-5 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path1304&quot; /&gt;&lt;/clipPath&gt;&lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath1324&quot;&gt;&lt;path
         d=&quot;M 1.4864e-5,-0.0072021 H 997.50001 V 622.9928 H 1.4864e-5 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path1322&quot; /&gt;&lt;/clipPath&gt;&lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath1346&quot;&gt;&lt;path
         d=&quot;M 1.4864e-5,-0.0072021 H 997.50001 V 622.9928 H 1.4864e-5 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path1344&quot; /&gt;&lt;/clipPath&gt;&lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath1366&quot;&gt;&lt;path
         d=&quot;M 1.4864e-5,-0.0072021 H 997.50001 V 622.9928 H 1.4864e-5 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path1364&quot; /&gt;&lt;/clipPath&gt;&lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath1378&quot;&gt;&lt;path
         d=&quot;M 1.4864e-5,-0.0072021 H 997.50001 V 622.9928 H 1.4864e-5 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path1376&quot; /&gt;&lt;/clipPath&gt;&lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath1396&quot;&gt;&lt;path
         d=&quot;M 1.4864e-5,-0.0072021 H 997.50001 V 622.9928 H 1.4864e-5 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path1394&quot; /&gt;&lt;/clipPath&gt;&lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath1416&quot;&gt;&lt;path
         d=&quot;M 1.4864e-5,-0.0072021 H 997.50001 V 622.9928 H 1.4864e-5 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path1414&quot; /&gt;&lt;/clipPath&gt;&lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath1428&quot;&gt;&lt;path
         d=&quot;M 1.4864e-5,-0.0072021 H 997.50001 V 622.9928 H 1.4864e-5 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path1426&quot; /&gt;&lt;/clipPath&gt;&lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath1444&quot;&gt;&lt;path
         d=&quot;M 1.4864e-5,-0.0072021 H 997.50001 V 622.9928 H 1.4864e-5 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path1442&quot; /&gt;&lt;/clipPath&gt;&lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath1456&quot;&gt;&lt;path
         d=&quot;M 1.4864e-5,-0.0072021 H 997.50001 V 622.9928 H 1.4864e-5 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path1454&quot; /&gt;&lt;/clipPath&gt;&lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath1478&quot;&gt;&lt;path
         d=&quot;M 1.4864e-5,-0.0072021 H 997.50001 V 622.9928 H 1.4864e-5 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path1476&quot; /&gt;&lt;/clipPath&gt;&lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath1494&quot;&gt;&lt;path
         d=&quot;M 1.4864e-5,-0.0072021 H 997.50001 V 622.9928 H 1.4864e-5 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path1492&quot; /&gt;&lt;/clipPath&gt;&lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath1506&quot;&gt;&lt;path
         d=&quot;M 1.4864e-5,-0.0072021 H 997.50001 V 622.9928 H 1.4864e-5 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path1504&quot; /&gt;&lt;/clipPath&gt;&lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath1518&quot;&gt;&lt;path
         d=&quot;M 1.4864e-5,-0.0072021 H 997.50001 V 622.9928 H 1.4864e-5 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path1516&quot; /&gt;&lt;/clipPath&gt;&lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath1536&quot;&gt;&lt;path
         d=&quot;M 1.4864e-5,-0.0072021 H 997.50001 V 622.9928 H 1.4864e-5 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path1534&quot; /&gt;&lt;/clipPath&gt;&lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath1552&quot;&gt;&lt;path
         d=&quot;M 1.4864e-5,-0.0072021 H 997.50001 V 622.9928 H 1.4864e-5 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path1550&quot; /&gt;&lt;/clipPath&gt;&lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath1568&quot;&gt;&lt;path
         d=&quot;M 1.4864e-5,-0.0072021 H 997.50001 V 622.9928 H 1.4864e-5 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path1566&quot; /&gt;&lt;/clipPath&gt;&lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath1580&quot;&gt;&lt;path
         d=&quot;M 1.4864e-5,-0.0072021 H 997.50001 V 622.9928 H 1.4864e-5 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path1578&quot; /&gt;&lt;/clipPath&gt;&lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath1592&quot;&gt;&lt;path
         d=&quot;M 1.4864e-5,-0.0072021 H 997.50001 V 622.9928 H 1.4864e-5 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path1590&quot; /&gt;&lt;/clipPath&gt;&lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath1610&quot;&gt;&lt;path
         d=&quot;M 1.4864e-5,-0.0072021 H 997.50001 V 622.9928 H 1.4864e-5 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path1608&quot; /&gt;&lt;/clipPath&gt;&lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath1634&quot;&gt;&lt;path
         d=&quot;M 1.4864e-5,-0.0072021 H 997.50001 V 622.9928 H 1.4864e-5 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path1632&quot; /&gt;&lt;/clipPath&gt;&lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath1646&quot;&gt;&lt;path
         d=&quot;M 1.4864e-5,-0.0072021 H 997.50001 V 622.9928 H 1.4864e-5 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path1644&quot; /&gt;&lt;/clipPath&gt;&lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath1658&quot;&gt;&lt;path
         d=&quot;M 1.4864e-5,-0.0072021 H 997.50001 V 622.9928 H 1.4864e-5 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path1656&quot; /&gt;&lt;/clipPath&gt;&lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath1674&quot;&gt;&lt;path
         d=&quot;M 1.4864e-5,-0.0072021 H 997.50001 V 622.9928 H 1.4864e-5 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path1672&quot; /&gt;&lt;/clipPath&gt;&lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath1686&quot;&gt;&lt;path
         d=&quot;M 1.4864e-5,-0.0072021 H 997.50001 V 622.9928 H 1.4864e-5 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path1684&quot; /&gt;&lt;/clipPath&gt;&lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath1698&quot;&gt;&lt;path
         d=&quot;M 1.4864e-5,-0.0072021 H 997.50001 V 622.9928 H 1.4864e-5 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path1696&quot; /&gt;&lt;/clipPath&gt;&lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath1714&quot;&gt;&lt;path
         d=&quot;M 1.4864e-5,-0.0072021 H 997.50001 V 622.9928 H 1.4864e-5 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path1712&quot; /&gt;&lt;/clipPath&gt;&lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath1734&quot;&gt;&lt;path
         d=&quot;M 1.4864e-5,-0.0072021 H 997.50001 V 622.9928 H 1.4864e-5 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path1732&quot; /&gt;&lt;/clipPath&gt;&lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath1746&quot;&gt;&lt;path
         d=&quot;M 1.4864e-5,-0.0072021 H 997.50001 V 622.9928 H 1.4864e-5 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path1744&quot; /&gt;&lt;/clipPath&gt;&lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath1758&quot;&gt;&lt;path
         d=&quot;M 1.4864e-5,-0.0072021 H 997.50001 V 622.9928 H 1.4864e-5 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path1756&quot; /&gt;&lt;/clipPath&gt;&lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath1770&quot;&gt;&lt;path
         d=&quot;M 1.4864e-5,-0.0072021 H 997.50001 V 622.9928 H 1.4864e-5 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path1768&quot; /&gt;&lt;/clipPath&gt;&lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath1782&quot;&gt;&lt;path
         d=&quot;M 1.4864e-5,-0.0072021 H 997.50001 V 622.9928 H 1.4864e-5 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path1780&quot; /&gt;&lt;/clipPath&gt;&lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath1800&quot;&gt;&lt;path
         d=&quot;M 1.4864e-5,-0.0072021 H 997.50001 V 622.9928 H 1.4864e-5 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path1798&quot; /&gt;&lt;/clipPath&gt;&lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath1818&quot;&gt;&lt;path
         d=&quot;M 1.4864e-5,-0.0072021 H 997.50001 V 622.9928 H 1.4864e-5 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path1816&quot; /&gt;&lt;/clipPath&gt;&lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath1834&quot;&gt;&lt;path
         d=&quot;M 1.4864e-5,-0.0072021 H 997.50001 V 622.9928 H 1.4864e-5 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path1832&quot; /&gt;&lt;/clipPath&gt;&lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath1846&quot;&gt;&lt;path
         d=&quot;M 1.4864e-5,-0.0072021 H 997.50001 V 622.9928 H 1.4864e-5 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path1844&quot; /&gt;&lt;/clipPath&gt;&lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath1864&quot;&gt;&lt;path
         d=&quot;M 1.4864e-5,-0.0072021 H 997.50001 V 622.9928 H 1.4864e-5 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path1862&quot; /&gt;&lt;/clipPath&gt;&lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath1880&quot;&gt;&lt;path
         d=&quot;M 1.4864e-5,-0.0072021 H 997.50001 V 622.9928 H 1.4864e-5 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path1878&quot; /&gt;&lt;/clipPath&gt;&lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath1896&quot;&gt;&lt;path
         d=&quot;M 1.4864e-5,-0.0072021 H 997.50001 V 622.9928 H 1.4864e-5 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path1894&quot; /&gt;&lt;/clipPath&gt;&lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath1908&quot;&gt;&lt;path
         d=&quot;M 1.4864e-5,-0.0072021 H 997.50001 V 622.9928 H 1.4864e-5 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path1906&quot; /&gt;&lt;/clipPath&gt;&lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath1920&quot;&gt;&lt;path
         d=&quot;M 1.4864e-5,-0.0072021 H 997.50001 V 622.9928 H 1.4864e-5 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path1918&quot; /&gt;&lt;/clipPath&gt;&lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath1944&quot;&gt;&lt;path
         d=&quot;M 1.4864e-5,-0.0072021 H 997.50001 V 622.9928 H 1.4864e-5 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path1942&quot; /&gt;&lt;/clipPath&gt;&lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath1964&quot;&gt;&lt;path
         d=&quot;M 1.4864e-5,-0.0072021 H 997.50001 V 622.9928 H 1.4864e-5 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path1962&quot; /&gt;&lt;/clipPath&gt;&lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath1984&quot;&gt;&lt;path
         d=&quot;M 1.4864e-5,-0.0072021 H 997.50001 V 622.9928 H 1.4864e-5 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path1982&quot; /&gt;&lt;/clipPath&gt;&lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath2004&quot;&gt;&lt;path
         d=&quot;M 1.4864e-5,-0.0072021 H 997.50001 V 622.9928 H 1.4864e-5 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path2002&quot; /&gt;&lt;/clipPath&gt;&lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath2024&quot;&gt;&lt;path
         d=&quot;M 1.4864e-5,-0.0072021 H 997.50001 V 622.9928 H 1.4864e-5 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path2022&quot; /&gt;&lt;/clipPath&gt;&lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath2044&quot;&gt;&lt;path
         d=&quot;M 1.4864e-5,-0.0072021 H 997.50001 V 622.9928 H 1.4864e-5 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path2042&quot; /&gt;&lt;/clipPath&gt;&lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath2056&quot;&gt;&lt;path
         d=&quot;M 1.4864e-5,-0.0072021 H 997.50001 V 622.9928 H 1.4864e-5 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path2054&quot; /&gt;&lt;/clipPath&gt;&lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath2068&quot;&gt;&lt;path
         d=&quot;M 1.4864e-5,-0.0072021 H 997.50001 V 622.9928 H 1.4864e-5 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path2066&quot; /&gt;&lt;/clipPath&gt;&lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath2080&quot;&gt;&lt;path
         d=&quot;M 1.4864e-5,-0.0072021 H 997.50001 V 622.9928 H 1.4864e-5 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path2078&quot; /&gt;&lt;/clipPath&gt;&lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath2102&quot;&gt;&lt;path
         d=&quot;M 1.4864e-5,-0.0072021 H 997.50001 V 622.9928 H 1.4864e-5 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path2100&quot; /&gt;&lt;/clipPath&gt;&lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath2120&quot;&gt;&lt;path
         d=&quot;M 1.4864e-5,-0.0072021 H 997.50001 V 622.9928 H 1.4864e-5 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path2118&quot; /&gt;&lt;/clipPath&gt;&lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath2138&quot;&gt;&lt;path
         d=&quot;M 1.4864e-5,-0.0072021 H 997.50001 V 622.9928 H 1.4864e-5 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path2136&quot; /&gt;&lt;/clipPath&gt;&lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath2154&quot;&gt;&lt;path
         d=&quot;M 1.4864e-5,-0.0072021 H 997.50001 V 622.9928 H 1.4864e-5 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path2152&quot; /&gt;&lt;/clipPath&gt;&lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath2166&quot;&gt;&lt;path
         d=&quot;M 1.4864e-5,-0.0072021 H 997.50001 V 622.9928 H 1.4864e-5 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path2164&quot; /&gt;&lt;/clipPath&gt;&lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath2186&quot;&gt;&lt;path
         d=&quot;M 1.4864e-5,-0.0072021 H 997.50001 V 622.9928 H 1.4864e-5 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path2184&quot; /&gt;&lt;/clipPath&gt;&lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath2198&quot;&gt;&lt;path
         d=&quot;M 1.4864e-5,-0.0072021 H 997.50001 V 622.9928 H 1.4864e-5 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path2196&quot; /&gt;&lt;/clipPath&gt;&lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath2210&quot;&gt;&lt;path
         d=&quot;M 1.4864e-5,-0.0072021 H 997.50001 V 622.9928 H 1.4864e-5 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path2208&quot; /&gt;&lt;/clipPath&gt;&lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath2222&quot;&gt;&lt;path
         d=&quot;M 1.4864e-5,-0.0072021 H 997.50001 V 622.9928 H 1.4864e-5 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path2220&quot; /&gt;&lt;/clipPath&gt;&lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath2234&quot;&gt;&lt;path
         d=&quot;M 9.12e-6,0 H 612.00001 V 792 H 9.12e-6 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path2232&quot; /&gt;&lt;/clipPath&gt;&lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath2242&quot;&gt;&lt;path
         d=&quot;M 9.12e-6,0 H 612.00001 V 792 H 9.12e-6 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path2240&quot; /&gt;&lt;/clipPath&gt;&lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath2250&quot;&gt;&lt;path
         d=&quot;M 9.12e-6,0 H 612.00001 V 792 H 9.12e-6 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path2248&quot; /&gt;&lt;/clipPath&gt;&lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath2262&quot;&gt;&lt;path
         d=&quot;M 9.12e-6,0 H 612.00001 V 792 H 9.12e-6 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path2260&quot; /&gt;&lt;/clipPath&gt;&lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath2274&quot;&gt;&lt;path
         d=&quot;M 9.12e-6,0 H 612.00001 V 792 H 9.12e-6 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path2272&quot; /&gt;&lt;/clipPath&gt;&lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath2282&quot;&gt;&lt;path
         d=&quot;M 9.12e-6,0 H 612.00001 V 792 H 9.12e-6 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path2280&quot; /&gt;&lt;/clipPath&gt;&lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath2294&quot;&gt;&lt;path
         d=&quot;M 9.12e-6,0 H 612.00001 V 792 H 9.12e-6 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path2292&quot; /&gt;&lt;/clipPath&gt;&lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath2302&quot;&gt;&lt;path
         d=&quot;M 9.12e-6,0 H 612.00001 V 792 H 9.12e-6 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path2300&quot; /&gt;&lt;/clipPath&gt;&lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath2314&quot;&gt;&lt;path
         d=&quot;M 9.12e-6,0 H 612.00001 V 792 H 9.12e-6 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path2312&quot; /&gt;&lt;/clipPath&gt;&lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath2326&quot;&gt;&lt;path
         d=&quot;M 9.12e-6,0 H 612.00001 V 792 H 9.12e-6 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path2324&quot; /&gt;&lt;/clipPath&gt;&lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath2338&quot;&gt;&lt;path
         d=&quot;M 9.12e-6,0 H 612.00001 V 792 H 9.12e-6 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path2336&quot; /&gt;&lt;/clipPath&gt;&lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath2346&quot;&gt;&lt;path
         d=&quot;M 9.12e-6,0 H 612.00001 V 792 H 9.12e-6 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path2344&quot; /&gt;&lt;/clipPath&gt;&lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath2354&quot;&gt;&lt;path
         d=&quot;M 9.12e-6,0 H 612.00001 V 792 H 9.12e-6 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path2352&quot; /&gt;&lt;/clipPath&gt;&lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath2366&quot;&gt;&lt;path
         d=&quot;M 9.12e-6,0 H 612.00001 V 792 H 9.12e-6 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path2364&quot; /&gt;&lt;/clipPath&gt;&lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath2378&quot;&gt;&lt;path
         d=&quot;M 9.12e-6,0 H 612.00001 V 792 H 9.12e-6 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path2376&quot; /&gt;&lt;/clipPath&gt;&lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath2386&quot;&gt;&lt;path
         d=&quot;M 9.12e-6,0 H 612.00001 V 792 H 9.12e-6 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path2384&quot; /&gt;&lt;/clipPath&gt;&lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath2398&quot;&gt;&lt;path
         d=&quot;M 9.12e-6,0 H 612.00001 V 792 H 9.12e-6 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path2396&quot; /&gt;&lt;/clipPath&gt;&lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath2410&quot;&gt;&lt;path
         d=&quot;M 9.12e-6,0 H 612.00001 V 792 H 9.12e-6 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path2408&quot; /&gt;&lt;/clipPath&gt;&lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath2418&quot;&gt;&lt;path
         d=&quot;M 9.12e-6,0 H 612.00001 V 792 H 9.12e-6 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path2416&quot; /&gt;&lt;/clipPath&gt;&lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath2430&quot;&gt;&lt;path
         d=&quot;M 9.12e-6,0 H 612.00001 V 792 H 9.12e-6 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path2428&quot; /&gt;&lt;/clipPath&gt;&lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath2442&quot;&gt;&lt;path
         d=&quot;M 9.12e-6,0 H 612.00001 V 792 H 9.12e-6 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path2440&quot; /&gt;&lt;/clipPath&gt;&lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath2454&quot;&gt;&lt;path
         d=&quot;M 9.12e-6,0 H 612.00001 V 792 H 9.12e-6 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path2452&quot; /&gt;&lt;/clipPath&gt;&lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath2462&quot;&gt;&lt;path
         d=&quot;M 9.12e-6,0 H 612.00001 V 792 H 9.12e-6 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path2460&quot; /&gt;&lt;/clipPath&gt;&lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath2474&quot;&gt;&lt;path
         d=&quot;M 9.12e-6,0 H 612.00001 V 792 H 9.12e-6 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path2472&quot; /&gt;&lt;/clipPath&gt;&lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath2486&quot;&gt;&lt;path
         d=&quot;M 9.12e-6,0 H 612.00001 V 792 H 9.12e-6 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path2484&quot; /&gt;&lt;/clipPath&gt;&lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath2494&quot;&gt;&lt;path
         d=&quot;M 9.12e-6,0 H 612.00001 V 792 H 9.12e-6 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path2492&quot; /&gt;&lt;/clipPath&gt;&lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath2506&quot;&gt;&lt;path
         d=&quot;M 9.12e-6,0 H 612.00001 V 792 H 9.12e-6 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path2504&quot; /&gt;&lt;/clipPath&gt;&lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath2514&quot;&gt;&lt;path
         d=&quot;M 9.12e-6,0 H 612.00001 V 792 H 9.12e-6 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path2512&quot; /&gt;&lt;/clipPath&gt;&lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath2526&quot;&gt;&lt;path
         d=&quot;M 9.12e-6,0 H 612.00001 V 792 H 9.12e-6 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path2524&quot; /&gt;&lt;/clipPath&gt;&lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath2538&quot;&gt;&lt;path
         d=&quot;M 9.12e-6,0 H 612.00001 V 792 H 9.12e-6 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path2536&quot; /&gt;&lt;/clipPath&gt;&lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath2550&quot;&gt;&lt;path
         d=&quot;M 9.12e-6,0 H 612.00001 V 792 H 9.12e-6 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path2548&quot; /&gt;&lt;/clipPath&gt;&lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath2562&quot;&gt;&lt;path
         d=&quot;M 9.12e-6,0 H 612.00001 V 792 H 9.12e-6 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path2560&quot; /&gt;&lt;/clipPath&gt;&lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath2574&quot;&gt;&lt;path
         d=&quot;M 9.12e-6,0 H 612.00001 V 792 H 9.12e-6 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path2572&quot; /&gt;&lt;/clipPath&gt;&lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath2586&quot;&gt;&lt;path
         d=&quot;M 9.12e-6,0 H 612.00001 V 792 H 9.12e-6 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path2584&quot; /&gt;&lt;/clipPath&gt;&lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath2594&quot;&gt;&lt;path
         d=&quot;M 9.12e-6,0 H 612.00001 V 792 H 9.12e-6 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path2592&quot; /&gt;&lt;/clipPath&gt;&lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath2606&quot;&gt;&lt;path
         d=&quot;M 9.12e-6,0 H 612.00001 V 792 H 9.12e-6 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path2604&quot; /&gt;&lt;/clipPath&gt;&lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath2618&quot;&gt;&lt;path
         d=&quot;M 9.12e-6,0 H 612.00001 V 792 H 9.12e-6 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path2616&quot; /&gt;&lt;/clipPath&gt;&lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath2626&quot;&gt;&lt;path
         d=&quot;M 9.12e-6,0 H 612.00001 V 792 H 9.12e-6 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path2624&quot; /&gt;&lt;/clipPath&gt;&lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath2638&quot;&gt;&lt;path
         d=&quot;M 9.12e-6,0 H 612.00001 V 792 H 9.12e-6 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path2636&quot; /&gt;&lt;/clipPath&gt;&lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath2650&quot;&gt;&lt;path
         d=&quot;M 9.12e-6,0 H 612.00001 V 792 H 9.12e-6 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path2648&quot; /&gt;&lt;/clipPath&gt;&lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath2658&quot;&gt;&lt;path
         d=&quot;M 9.12e-6,0 H 612.00001 V 792 H 9.12e-6 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path2656&quot; /&gt;&lt;/clipPath&gt;&lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath2670&quot;&gt;&lt;path
         d=&quot;M 9.12e-6,0 H 612.00001 V 792 H 9.12e-6 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path2668&quot; /&gt;&lt;/clipPath&gt;&lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath2682&quot;&gt;&lt;path
         d=&quot;M 9.12e-6,0 H 612.00001 V 792 H 9.12e-6 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path2680&quot; /&gt;&lt;/clipPath&gt;&lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath2690&quot;&gt;&lt;path
         d=&quot;M 9.12e-6,0 H 612.00001 V 792 H 9.12e-6 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path2688&quot; /&gt;&lt;/clipPath&gt;&lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath2702&quot;&gt;&lt;path
         d=&quot;M 9.12e-6,0 H 612.00001 V 792 H 9.12e-6 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path2700&quot; /&gt;&lt;/clipPath&gt;&lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath2710&quot;&gt;&lt;path
         d=&quot;M 9.12e-6,0 H 612.00001 V 792 H 9.12e-6 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path2708&quot; /&gt;&lt;/clipPath&gt;&lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath2722&quot;&gt;&lt;path
         d=&quot;M 9.12e-6,0 H 612.00001 V 792 H 9.12e-6 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path2720&quot; /&gt;&lt;/clipPath&gt;&lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath2734&quot;&gt;&lt;path
         d=&quot;M 9.12e-6,0 H 612.00001 V 792 H 9.12e-6 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path2732&quot; /&gt;&lt;/clipPath&gt;&lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath2746&quot;&gt;&lt;path
         d=&quot;M 9.12e-6,0 H 612.00001 V 792 H 9.12e-6 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path2744&quot; /&gt;&lt;/clipPath&gt;&lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath2758&quot;&gt;&lt;path
         d=&quot;M 9.12e-6,0 H 612.00001 V 792 H 9.12e-6 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path2756&quot; /&gt;&lt;/clipPath&gt;&lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath2766&quot;&gt;&lt;path
         d=&quot;M 9.12e-6,0 H 612.00001 V 792 H 9.12e-6 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path2764&quot; /&gt;&lt;/clipPath&gt;&lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath2778&quot;&gt;&lt;path
         d=&quot;M 9.12e-6,0 H 612.00001 V 792 H 9.12e-6 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path2776&quot; /&gt;&lt;/clipPath&gt;&lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath2790&quot;&gt;&lt;path
         d=&quot;M 9.12e-6,0 H 612.00001 V 792 H 9.12e-6 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path2788&quot; /&gt;&lt;/clipPath&gt;&lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath2802&quot;&gt;&lt;path
         d=&quot;M 9.12e-6,0 H 612.00001 V 792 H 9.12e-6 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path2800&quot; /&gt;&lt;/clipPath&gt;&lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath2814&quot;&gt;&lt;path
         d=&quot;M 9.12e-6,0 H 612.00001 V 792 H 9.12e-6 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path2812&quot; /&gt;&lt;/clipPath&gt;&lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath2822&quot;&gt;&lt;path
         d=&quot;M 9.12e-6,0 H 612.00001 V 792 H 9.12e-6 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path2820&quot; /&gt;&lt;/clipPath&gt;&lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath2834&quot;&gt;&lt;path
         d=&quot;M 9.12e-6,0 H 612.00001 V 792 H 9.12e-6 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path2832&quot; /&gt;&lt;/clipPath&gt;&lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath2846&quot;&gt;&lt;path
         d=&quot;M 9.12e-6,0 H 612.00001 V 792 H 9.12e-6 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path2844&quot; /&gt;&lt;/clipPath&gt;&lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath2854&quot;&gt;&lt;path
         d=&quot;M 9.12e-6,0 H 612.00001 V 792 H 9.12e-6 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path2852&quot; /&gt;&lt;/clipPath&gt;&lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath2866&quot;&gt;&lt;path
         d=&quot;M 9.12e-6,0 H 612.00001 V 792 H 9.12e-6 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path2864&quot; /&gt;&lt;/clipPath&gt;&lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath2874&quot;&gt;&lt;path
         d=&quot;M 9.12e-6,0 H 612.00001 V 792 H 9.12e-6 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path2872&quot; /&gt;&lt;/clipPath&gt;&lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath2886&quot;&gt;&lt;path
         d=&quot;M 9.12e-6,0 H 612.00001 V 792 H 9.12e-6 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path2884&quot; /&gt;&lt;/clipPath&gt;&lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath2898&quot;&gt;&lt;path
         d=&quot;M 9.12e-6,0 H 612.00001 V 792 H 9.12e-6 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path2896&quot; /&gt;&lt;/clipPath&gt;&lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath2910&quot;&gt;&lt;path
         d=&quot;M 9.12e-6,0 H 612.00001 V 792 H 9.12e-6 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path2908&quot; /&gt;&lt;/clipPath&gt;&lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath2922&quot;&gt;&lt;path
         d=&quot;M 9.12e-6,0 H 612.00001 V 792 H 9.12e-6 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path2920&quot; /&gt;&lt;/clipPath&gt;&lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath2930&quot;&gt;&lt;path
         d=&quot;M 9.12e-6,0 H 612.00001 V 792 H 9.12e-6 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path2928&quot; /&gt;&lt;/clipPath&gt;&lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath2942&quot;&gt;&lt;path
         d=&quot;M 9.12e-6,0 H 612.00001 V 792 H 9.12e-6 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path2940&quot; /&gt;&lt;/clipPath&gt;&lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath2950&quot;&gt;&lt;path
         d=&quot;M 9.12e-6,0 H 612.00001 V 792 H 9.12e-6 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path2948&quot; /&gt;&lt;/clipPath&gt;&lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath2962&quot;&gt;&lt;path
         d=&quot;M 9.12e-6,0 H 612.00001 V 792 H 9.12e-6 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path2960&quot; /&gt;&lt;/clipPath&gt;&lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath2974&quot;&gt;&lt;path
         d=&quot;M 9.12e-6,0 H 612.00001 V 792 H 9.12e-6 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path2972&quot; /&gt;&lt;/clipPath&gt;&lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath2986&quot;&gt;&lt;path
         d=&quot;M 9.12e-6,0 H 612.00001 V 792 H 9.12e-6 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path2984&quot; /&gt;&lt;/clipPath&gt;&lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath2998&quot;&gt;&lt;path
         d=&quot;M 9.12e-6,0 H 612.00001 V 792 H 9.12e-6 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path2996&quot; /&gt;&lt;/clipPath&gt;&lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath3010&quot;&gt;&lt;path
         d=&quot;M 9.12e-6,0 H 612.00001 V 792 H 9.12e-6 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path3008&quot; /&gt;&lt;/clipPath&gt;&lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath3022&quot;&gt;&lt;path
         d=&quot;M 9.12e-6,0 H 612.00001 V 792 H 9.12e-6 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path3020&quot; /&gt;&lt;/clipPath&gt;&lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath3030&quot;&gt;&lt;path
         d=&quot;M 9.12e-6,0 H 612.00001 V 792 H 9.12e-6 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path3028&quot; /&gt;&lt;/clipPath&gt;&lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath3042&quot;&gt;&lt;path
         d=&quot;M 9.12e-6,0 H 612.00001 V 792 H 9.12e-6 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path3040&quot; /&gt;&lt;/clipPath&gt;&lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath3054&quot;&gt;&lt;path
         d=&quot;M 9.12e-6,0 H 612.00001 V 792 H 9.12e-6 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path3052&quot; /&gt;&lt;/clipPath&gt;&lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath3066&quot;&gt;&lt;path
         d=&quot;M 9.12e-6,0 H 612.00001 V 792 H 9.12e-6 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path3064&quot; /&gt;&lt;/clipPath&gt;&lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath3078&quot;&gt;&lt;path
         d=&quot;M 9.12e-6,0 H 612.00001 V 792 H 9.12e-6 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path3076&quot; /&gt;&lt;/clipPath&gt;&lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath3090&quot;&gt;&lt;path
         d=&quot;M 9.12e-6,0 H 612.00001 V 792 H 9.12e-6 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path3088&quot; /&gt;&lt;/clipPath&gt;&lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath3102&quot;&gt;&lt;path
         d=&quot;M 9.12e-6,0 H 612.00001 V 792 H 9.12e-6 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path3100&quot; /&gt;&lt;/clipPath&gt;&lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath3114&quot;&gt;&lt;path
         d=&quot;M 9.12e-6,0 H 612.00001 V 792 H 9.12e-6 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path3112&quot; /&gt;&lt;/clipPath&gt;&lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath3126&quot;&gt;&lt;path
         d=&quot;M 9.12e-6,0 H 612.00001 V 792 H 9.12e-6 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path3124&quot; /&gt;&lt;/clipPath&gt;&lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath3138&quot;&gt;&lt;path
         d=&quot;M 9.12e-6,0 H 612.00001 V 792 H 9.12e-6 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path3136&quot; /&gt;&lt;/clipPath&gt;&lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath3150&quot;&gt;&lt;path
         d=&quot;M 9.12e-6,0 H 612.00001 V 792 H 9.12e-6 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path3148&quot; /&gt;&lt;/clipPath&gt;&lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath3162&quot;&gt;&lt;path
         d=&quot;M 9.12e-6,0 H 612.00001 V 792 H 9.12e-6 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path3160&quot; /&gt;&lt;/clipPath&gt;&lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath3174&quot;&gt;&lt;path
         d=&quot;M 9.12e-6,0 H 612.00001 V 792 H 9.12e-6 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path3172&quot; /&gt;&lt;/clipPath&gt;&lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath3182&quot;&gt;&lt;path
         d=&quot;M 9.12e-6,0 H 612.00001 V 792 H 9.12e-6 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path3180&quot; /&gt;&lt;/clipPath&gt;&lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath3194&quot;&gt;&lt;path
         d=&quot;M 9.12e-6,0 H 612.00001 V 792 H 9.12e-6 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path3192&quot; /&gt;&lt;/clipPath&gt;&lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath3206&quot;&gt;&lt;path
         d=&quot;M 9.12e-6,0 H 612.00001 V 792 H 9.12e-6 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path3204&quot; /&gt;&lt;/clipPath&gt;&lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath3214&quot;&gt;&lt;path
         d=&quot;M 9.12e-6,0 H 612.00001 V 792 H 9.12e-6 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path3212&quot; /&gt;&lt;/clipPath&gt;&lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath3226&quot;&gt;&lt;path
         d=&quot;M 9.12e-6,0 H 612.00001 V 792 H 9.12e-6 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path3224&quot; /&gt;&lt;/clipPath&gt;&lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath3234&quot;&gt;&lt;path
         d=&quot;M 9.12e-6,0 H 612.00001 V 792 H 9.12e-6 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path3232&quot; /&gt;&lt;/clipPath&gt;&lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath3246&quot;&gt;&lt;path
         d=&quot;M 9.12e-6,0 H 612.00001 V 792 H 9.12e-6 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path3244&quot; /&gt;&lt;/clipPath&gt;&lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath3254&quot;&gt;&lt;path
         d=&quot;M 9.12e-6,0 H 612.00001 V 792 H 9.12e-6 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path3252&quot; /&gt;&lt;/clipPath&gt;&lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath3266&quot;&gt;&lt;path
         d=&quot;M 9.12e-6,0 H 612.00001 V 792 H 9.12e-6 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path3264&quot; /&gt;&lt;/clipPath&gt;&lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath3278&quot;&gt;&lt;path
         d=&quot;M 9.12e-6,0 H 612.00001 V 792 H 9.12e-6 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path3276&quot; /&gt;&lt;/clipPath&gt;&lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath3286&quot;&gt;&lt;path
         d=&quot;M 9.12e-6,0 H 612.00001 V 792 H 9.12e-6 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path3284&quot; /&gt;&lt;/clipPath&gt;&lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath3298&quot;&gt;&lt;path
         d=&quot;M 9.12e-6,0 H 612.00001 V 792 H 9.12e-6 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path3296&quot; /&gt;&lt;/clipPath&gt;&lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath3310&quot;&gt;&lt;path
         d=&quot;M 9.12e-6,0 H 612.00001 V 792 H 9.12e-6 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path3308&quot; /&gt;&lt;/clipPath&gt;&lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath3322&quot;&gt;&lt;path
         d=&quot;M 9.12e-6,0 H 612.00001 V 792 H 9.12e-6 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path3320&quot; /&gt;&lt;/clipPath&gt;&lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath3334&quot;&gt;&lt;path
         d=&quot;M 9.12e-6,0 H 612.00001 V 792 H 9.12e-6 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path3332&quot; /&gt;&lt;/clipPath&gt;&lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath3342&quot;&gt;&lt;path
         d=&quot;M 9.12e-6,0 H 612.00001 V 792 H 9.12e-6 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path3340&quot; /&gt;&lt;/clipPath&gt;&lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath3354&quot;&gt;&lt;path
         d=&quot;M 9.12e-6,0 H 612.00001 V 792 H 9.12e-6 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path3352&quot; /&gt;&lt;/clipPath&gt;&lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath3362&quot;&gt;&lt;path
         d=&quot;M 9.12e-6,0 H 612.00001 V 792 H 9.12e-6 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path3360&quot; /&gt;&lt;/clipPath&gt;&lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath3374&quot;&gt;&lt;path
         d=&quot;M 9.12e-6,0 H 612.00001 V 792 H 9.12e-6 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path3372&quot; /&gt;&lt;/clipPath&gt;&lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath3386&quot;&gt;&lt;path
         d=&quot;M 9.12e-6,0 H 612.00001 V 792 H 9.12e-6 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path3384&quot; /&gt;&lt;/clipPath&gt;&lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath3394&quot;&gt;&lt;path
         d=&quot;M 9.12e-6,0 H 612.00001 V 792 H 9.12e-6 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path3392&quot; /&gt;&lt;/clipPath&gt;&lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath3406&quot;&gt;&lt;path
         d=&quot;M 9.12e-6,0 H 612.00001 V 792 H 9.12e-6 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path3404&quot; /&gt;&lt;/clipPath&gt;&lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath3418&quot;&gt;&lt;path
         d=&quot;M 9.12e-6,0 H 612.00001 V 792 H 9.12e-6 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path3416&quot; /&gt;&lt;/clipPath&gt;&lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath3426&quot;&gt;&lt;path
         d=&quot;M 9.12e-6,0 H 612.00001 V 792 H 9.12e-6 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path3424&quot; /&gt;&lt;/clipPath&gt;&lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath3438&quot;&gt;&lt;path
         d=&quot;M 9.12e-6,0 H 612.00001 V 792 H 9.12e-6 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path3436&quot; /&gt;&lt;/clipPath&gt;&lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath3450&quot;&gt;&lt;path
         d=&quot;M 9.12e-6,0 H 612.00001 V 792 H 9.12e-6 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path3448&quot; /&gt;&lt;/clipPath&gt;&lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath3462&quot;&gt;&lt;path
         d=&quot;M 9.12e-6,0 H 612.00001 V 792 H 9.12e-6 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path3460&quot; /&gt;&lt;/clipPath&gt;&lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath3474&quot;&gt;&lt;path
         d=&quot;M 9.12e-6,0 H 612.00001 V 792 H 9.12e-6 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path3472&quot; /&gt;&lt;/clipPath&gt;&lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath3486&quot;&gt;&lt;path
         d=&quot;M 9.12e-6,0 H 612.00001 V 792 H 9.12e-6 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path3484&quot; /&gt;&lt;/clipPath&gt;&lt;/defs&gt;&lt;sodipodi:namedview
     pagecolor=&quot;#ffffff&quot;
     bordercolor=&quot;#666666&quot;
     borderopacity=&quot;1&quot;
     objecttolerance=&quot;10&quot;
     gridtolerance=&quot;10&quot;
     guidetolerance=&quot;10&quot;
     inkscape:pageopacity=&quot;0&quot;
     inkscape:pageshadow=&quot;2&quot;
     inkscape:window-width=&quot;3840&quot;
     inkscape:window-height=&quot;2080&quot;
     id=&quot;namedview4&quot;
     showgrid=&quot;false&quot;
     fit-margin-top=&quot;0.5&quot;
     fit-margin-left=&quot;0.5&quot;
     fit-margin-right=&quot;0.5&quot;
     fit-margin-bottom=&quot;0.5&quot;
     inkscape:zoom=&quot;2.7840909&quot;
     inkscape:cx=&quot;451.86443&quot;
     inkscape:cy=&quot;255.172&quot;
     inkscape:window-x=&quot;-11&quot;
     inkscape:window-y=&quot;-11&quot;
     inkscape:window-maximized=&quot;1&quot;
     inkscape:current-layer=&quot;g552&quot; /&gt;&lt;g
     id=&quot;g10&quot;
     inkscape:groupmode=&quot;layer&quot;
     inkscape:label=&quot;OPC30081 - UA CS for Process Automation Devices - PADIM 1.0.2&quot;
     transform=&quot;matrix(1.3333333,0,0,-1.3333333,-108.70707,842.07493)&quot;&gt;&lt;g
       id=&quot;g24&quot;&gt;&lt;g
         id=&quot;g26&quot;
         clip-path=&quot;url(#clipPath30)&quot; /&gt;&lt;/g&gt;&lt;g
       id=&quot;g68&quot;&gt;&lt;g
         id=&quot;g70&quot;
         clip-path=&quot;url(#clipPath74)&quot; /&gt;&lt;/g&gt;&lt;g
       id=&quot;g88&quot;&gt;&lt;g
         id=&quot;g90&quot;
         clip-path=&quot;url(#clipPath94)&quot; /&gt;&lt;/g&gt;&lt;g
       id=&quot;g108&quot;&gt;&lt;g
         id=&quot;g110&quot;
         clip-path=&quot;url(#clipPath114)&quot; /&gt;&lt;/g&gt;&lt;g
       id=&quot;g116&quot;&gt;&lt;g
         id=&quot;g118&quot;
         clip-path=&quot;url(#clipPath122)&quot; /&gt;&lt;/g&gt;&lt;g
       id=&quot;g124&quot;&gt;&lt;g
         id=&quot;g126&quot;
         clip-path=&quot;url(#clipPath130)&quot; /&gt;&lt;/g&gt;&lt;g
       id=&quot;g132&quot;&gt;&lt;g
         id=&quot;g134&quot;
         clip-path=&quot;url(#clipPath138)&quot; /&gt;&lt;/g&gt;&lt;g
       id=&quot;g236&quot;&gt;&lt;g
         id=&quot;g238&quot;
         clip-path=&quot;url(#clipPath242)&quot; /&gt;&lt;/g&gt;&lt;g
       id=&quot;g256&quot;&gt;&lt;g
         id=&quot;g258&quot;
         clip-path=&quot;url(#clipPath262)&quot; /&gt;&lt;/g&gt;&lt;g
       id=&quot;g348&quot;&gt;&lt;g
         id=&quot;g350&quot;
         clip-path=&quot;url(#clipPath354)&quot; /&gt;&lt;/g&gt;&lt;g
       id=&quot;g428&quot;&gt;&lt;g
         id=&quot;g430&quot;
         clip-path=&quot;url(#clipPath434)&quot; /&gt;&lt;/g&gt;&lt;g
       id=&quot;g532&quot;&gt;&lt;g
         id=&quot;g534&quot;
         clip-path=&quot;url(#clipPath538)&quot; /&gt;&lt;/g&gt;&lt;g
       id=&quot;g540&quot;&gt;&lt;g
         id=&quot;g548&quot;
         transform=&quot;matrix(7.1319,-3.77e-7,-9.4e-8,4.4354,72.06,321.64)&quot;&gt;&lt;g
           id=&quot;g550&quot;
           transform=&quot;scale(0.072181,0.11557)&quot;&gt;&lt;g
             id=&quot;g552&quot;
             clip-path=&quot;url(#clipPath556)&quot;&gt;&lt;path
               d=&quot;m 109.01,398.31 h 196.55 c 5.88,0 10.66,4.77 10.66,10.66 v 61.26 c 0,5.89 -4.78,10.67 -10.66,10.67 H 109.01 c -5.89,0 -10.659,-4.78 -10.659,-10.67 v -61.26 c 0,-5.89 4.769,-10.66 10.659,-10.66 z&quot;
               style=&quot;fill:#fbd7bb;fill-opacity:1;fill-rule:evenodd;stroke:none&quot;
               id=&quot;path558&quot; /&gt;&lt;path
               d=&quot;m 109.01,398.31 h 196.55 c 5.88,0 10.66,4.77 10.66,10.66 v 61.26 c 0,5.89 -4.78,10.67 -10.66,10.67 H 109.01 c -5.89,0 -10.659,-4.78 -10.659,-10.67 v -61.26 c 0,-5.89 4.769,-10.66 10.659,-10.66 z&quot;
               style=&quot;fill:none;stroke:#000000;stroke-width:0.24;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
               id=&quot;path560&quot; /&gt;&lt;path
               d=&quot;m 118.19,180.42 h 371.63 c 10.95,0 19.84,8.89 19.84,19.85 v 172.91 c 0,10.96 -8.89,19.84 -19.84,19.84 H 118.19 c -10.96,0 -19.839,-8.88 -19.839,-19.84 V 200.27 c 0,-10.96 8.879,-19.85 19.839,-19.85 z&quot;
               style=&quot;fill:#fbd7bb;fill-opacity:1;fill-rule:evenodd;stroke:none&quot;
               id=&quot;path562&quot; /&gt;&lt;path
               d=&quot;m 118.19,180.42 h 371.63 c 10.95,0 19.84,8.89 19.84,19.85 v 172.91 c 0,10.96 -8.89,19.84 -19.84,19.84 H 118.19 c -10.96,0 -19.839,-8.88 -19.839,-19.84 V 200.27 c 0,-10.96 8.879,-19.85 19.839,-19.85 z&quot;
               style=&quot;fill:none;stroke:#000000;stroke-width:0.24;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
               id=&quot;path564&quot; /&gt;&lt;path
               d=&quot;M 179.21,372.8 H 313 c 0.07,0 0.12,-0.05 0.12,-0.12 v -20.14 c 0,-0.07 -0.05,-0.12 -0.12,-0.12 H 179.21 c -0.07,0 -0.12,0.05 -0.12,0.12 v 20.14 c 0,0.07 0.05,0.12 0.12,0.12 z&quot;
               style=&quot;fill:#4979c0;fill-opacity:0.25098;fill-rule:evenodd;stroke:none&quot;
               id=&quot;path566&quot; /&gt;&lt;path
               d=&quot;m 170.21,361.54 h 133.8 v 20.142 h -133.8 z&quot;
               style=&quot;fill:#e8eef7;fill-opacity:1;fill-rule:evenodd;stroke:none&quot;
               id=&quot;path568&quot; /&gt;&lt;path
               d=&quot;m 170.21,361.54 h 133.8 v 20.142 h -133.8 z&quot;
               style=&quot;fill:none;stroke:#000000;stroke-width:0.24;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
               id=&quot;path570&quot; /&gt;&lt;g
               id=&quot;g572&quot;&gt;&lt;g
                 id=&quot;g574&quot;
                 clip-path=&quot;url(#clipPath578)&quot;&gt;&lt;text
                   transform=&quot;matrix(1,0,0,-1,193.02,368.39)&quot;
                   style=&quot;font-style:italic;font-variant:normal;font-weight:normal;font-size:10px;font-family:Arial;-inkscape-font-specification:Arial-ItalicMT;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
                   id=&quot;text582&quot;&gt;&lt;tspan
                     x=&quot;0&quot;
                     y=&quot;0&quot;
                     id=&quot;tspan580&quot;&gt;I&lt;/tspan&gt;&lt;/text&gt;&lt;/g&gt;&lt;/g&gt;&lt;g
               id=&quot;g584&quot;&gt;&lt;g
                 id=&quot;g586&quot;
                 clip-path=&quot;url(#clipPath590)&quot;&gt;&lt;text
                   transform=&quot;matrix(1,0,0,-1,195.8,368.39)&quot;
                   style=&quot;font-style:italic;font-variant:normal;font-weight:normal;font-size:10px;font-family:Arial;-inkscape-font-specification:Arial-ItalicMT;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
                   id=&quot;text594&quot;&gt;&lt;tspan
                     x=&quot;0 6.5 12 20.49 22.98 28.48 30.48 35.48 38.470001 41.470001 46.970001 49.959999 51.959999 57.950001&quot;
                     y=&quot;0&quot;
                     sodipodi:role=&quot;line&quot;
                     id=&quot;tspan592&quot;&gt;Administration&lt;/tspan&gt;&lt;/text&gt;&lt;/g&gt;&lt;/g&gt;&lt;g
               id=&quot;g596&quot;&gt;&lt;g
                 id=&quot;g598&quot;
                 clip-path=&quot;url(#clipPath602)&quot;&gt;&lt;text
                   transform=&quot;matrix(1,0,0,-1,259.2,368.39)&quot;
                   style=&quot;font-style:italic;font-variant:normal;font-weight:normal;font-size:10px;font-family:Arial;-inkscape-font-specification:Arial-ItalicMT;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
                   id=&quot;text606&quot;&gt;&lt;tspan
                     x=&quot;0 6 11 16.5&quot;
                     y=&quot;0&quot;
                     sodipodi:role=&quot;line&quot;
                     id=&quot;tspan604&quot;&gt;Type&lt;/tspan&gt;&lt;/text&gt;&lt;/g&gt;&lt;/g&gt;&lt;path
               d=&quot;m 116.78,18.848 h 374.45 c 10.18,0 18.43,8.249 18.43,18.425 V 154.71 c 0,10.17 -8.25,18.42 -18.43,18.42 H 116.78 c -10.18,0 -18.429,-8.25 -18.429,-18.42 V 37.273 c 0,-10.176 8.249,-18.425 18.429,-18.425 z&quot;
               style=&quot;fill:#fbd7bb;fill-opacity:1;fill-rule:evenodd;stroke:none&quot;
               id=&quot;path608&quot; /&gt;&lt;path
               d=&quot;m 116.78,18.848 h 374.45 c 10.18,0 18.43,8.249 18.43,18.425 V 154.71 c 0,10.17 -8.25,18.42 -18.43,18.42 H 116.78 c -10.18,0 -18.429,-8.25 -18.429,-18.42 V 37.273 c 0,-10.176 8.249,-18.425 18.429,-18.425 z&quot;
               style=&quot;fill:none;stroke:#000000;stroke-width:0.24;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
               id=&quot;path610&quot; /&gt;&lt;path
               d=&quot;m 566.35,18.848 h 368.5 c 11.82,0 21.41,9.582 21.41,21.401 V 368.77 c 0,11.82 -9.59,21.4 -21.41,21.4 h -368.5 c -11.82,0 -21.4,-9.58 -21.4,-21.4 V 40.249 c 0,-11.819 9.58,-21.401 21.4,-21.401 z&quot;
               style=&quot;fill:#fbd7bb;fill-opacity:1;fill-rule:evenodd;stroke:none&quot;
               id=&quot;path612&quot; /&gt;&lt;path
               d=&quot;m 566.35,18.848 h 368.5 c 11.82,0 21.41,9.582 21.41,21.401 V 368.77 c 0,11.82 -9.59,21.4 -21.41,21.4 h -368.5 c -11.82,0 -21.4,-9.58 -21.4,-21.4 V 40.249 c 0,-11.819 9.58,-21.401 21.4,-21.401 z&quot;
               style=&quot;fill:none;stroke:#000000;stroke-width:0.24;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
               id=&quot;path614&quot; /&gt;&lt;path
               d=&quot;m 565.07,399.74 h 371.06 c 11.12,0 20.13,9.01 20.13,20.12 v 42.34 c 0,11.12 -9.01,20.13 -20.13,20.13 H 565.07 c -11.11,0 -20.12,-9.01 -20.12,-20.13 v -42.34 c 0,-11.11 9.01,-20.12 20.12,-20.12 z&quot;
               style=&quot;fill:#fbd7bb;fill-opacity:1;fill-rule:evenodd;stroke:none&quot;
               id=&quot;path616&quot; /&gt;&lt;path
               d=&quot;m 565.07,399.74 h 371.06 c 11.12,0 20.13,9.01 20.13,20.12 v 42.34 c 0,11.12 -9.01,20.13 -20.13,20.13 H 565.07 c -11.11,0 -20.12,-9.01 -20.12,-20.13 v -42.34 c 0,-11.11 9.01,-20.12 20.12,-20.12 z&quot;
               style=&quot;fill:none;stroke:#000000;stroke-width:0.24;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
               id=&quot;path618&quot; /&gt;&lt;path
               d=&quot;m 28.245,543.91 c 0,0 0,0 0,0 H 141.16 c 0.06,0 0.12,-0.05 0.12,-0.12 v -38.9 c 0,-0.07 -0.06,-0.12 -0.12,-0.12 H 28.245 c -0.066,0 -0.12,0.05 -0.12,0.12 v 38.9 c 0,0.07 0.054,0.12 0.12,0.12 z&quot;
               style=&quot;fill:#4979c0;fill-opacity:0.25098;fill-rule:evenodd;stroke:none&quot;
               id=&quot;path620&quot; /&gt;&lt;path
               d=&quot;m 19.245,513.89 h 112.91 v 38.906 H 19.245 Z&quot;
               style=&quot;fill:#e8eef7;fill-opacity:1;fill-rule:evenodd;stroke:none&quot;
               id=&quot;path622&quot; /&gt;&lt;path
               d=&quot;m 19.245,513.89 h 112.91 v 38.906 H 19.245 Z&quot;
               style=&quot;fill:none;stroke:#000000;stroke-width:0.24;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
               id=&quot;path624&quot; /&gt;&lt;g
               id=&quot;g626&quot;&gt;&lt;g
                 id=&quot;g628&quot;
                 clip-path=&quot;url(#clipPath632)&quot;&gt;&lt;text
                   transform=&quot;matrix(1,0,0,-1,48.775,530.27)&quot;
                   style=&quot;font-style:italic;font-variant:normal;font-weight:normal;font-size:10px;font-family:Arial;-inkscape-font-specification:Arial-ItalicMT;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
                   id=&quot;text636&quot;&gt;&lt;tspan
                     x=&quot;0 6.5 13.49 20.49 23.48 31.48 37.970001 42.970001 48.470001&quot;
                     y=&quot;0&quot;
                     sodipodi:role=&quot;line&quot;
                     id=&quot;tspan634&quot;&gt;PADIMType&lt;/tspan&gt;&lt;/text&gt;&lt;/g&gt;&lt;/g&gt;&lt;path
               d=&quot;m 222.61,273.97 c 3.13,0 5.66,2.53 5.66,5.67 v 17 c 0,3.13 -2.53,5.67 -5.66,5.67 h -86.82 c -3.13,0 -5.67,-2.54 -5.67,-5.67 v -17 c 0,-3.14 2.54,-5.67 5.67,-5.67 z&quot;
               style=&quot;fill:#e8eef7;fill-opacity:1;fill-rule:evenodd;stroke:none&quot;
               id=&quot;path638&quot; /&gt;&lt;path
               d=&quot;m 222.61,273.97 c 3.13,0 5.66,2.53 5.66,5.67 v 17 c 0,3.13 -2.53,5.67 -5.66,5.67 h -86.82 c -3.13,0 -5.67,-2.54 -5.67,-5.67 v -17 c 0,-3.14 2.54,-5.67 5.67,-5.67 z&quot;
               style=&quot;fill:none;stroke:#000000;stroke-width:0.24;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
               id=&quot;path640&quot; /&gt;&lt;g
               id=&quot;g642&quot;&gt;&lt;g
                 id=&quot;g644&quot;
                 clip-path=&quot;url(#clipPath648)&quot;&gt;&lt;text
                   transform=&quot;matrix(1,0,0,-1,136.48,284.87)&quot;
                   style=&quot;font-variant:normal;font-weight:normal;font-size:10px;font-family:Arial;-inkscape-font-specification:ArialMT;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
                   id=&quot;text652&quot;&gt;&lt;tspan
                     x=&quot;0 7 12.99 15.49 20.99 28.98 31.48 36.98 42.970001 47.970001 50.470001 57.959999 63.459999 68.959999 74.459999 79.959999&quot;
                     y=&quot;0&quot;
                     sodipodi:role=&quot;line&quot;
                     id=&quot;tspan650&quot;&gt;DateOfLastChange&lt;/tspan&gt;&lt;/text&gt;&lt;/g&gt;&lt;/g&gt;&lt;path
               d=&quot;M 75.7,513.89 V 288.14 h 54.42&quot;
               style=&quot;fill:none;stroke:#000000;stroke-width:0.24;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
               id=&quot;path654&quot; /&gt;&lt;path
               d=&quot;m 125.98,290.21 v -4.14&quot;
               style=&quot;fill:none;stroke:#000000;stroke-width:0.24;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
               id=&quot;path656&quot; /&gt;&lt;path
               d=&quot;m 219.85,92.818 c 3.13,0 5.67,2.538 5.67,5.669 v 17.003 c 0,3.14 -2.54,5.67 -5.67,5.67 h -86.81 c -3.13,0 -5.67,-2.53 -5.67,-5.67 V 98.487 c 0,-3.131 2.54,-5.669 5.67,-5.669 z&quot;
               style=&quot;fill:#e8eef7;fill-opacity:1;fill-rule:evenodd;stroke:none&quot;
               id=&quot;path658&quot; /&gt;&lt;path
               d=&quot;m 219.85,92.818 c 3.13,0 5.67,2.538 5.67,5.669 v 17.003 c 0,3.14 -2.54,5.67 -5.67,5.67 h -86.81 c -3.13,0 -5.67,-2.53 -5.67,-5.67 V 98.487 c 0,-3.131 2.54,-5.669 5.67,-5.669 z&quot;
               style=&quot;fill:none;stroke:#000000;stroke-width:0.24;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
               id=&quot;path660&quot; /&gt;&lt;g
               id=&quot;g662&quot;&gt;&lt;g
                 id=&quot;g664&quot;
                 clip-path=&quot;url(#clipPath668)&quot;&gt;&lt;text
                   transform=&quot;matrix(1,0,0,-1,146.77,103.57)&quot;
                   style=&quot;font-variant:normal;font-weight:normal;font-size:10px;font-family:Arial;-inkscape-font-specification:ArialMT;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
                   id=&quot;text672&quot;&gt;&lt;tspan
                     x=&quot;0 7 12.99 17.99 19.99 24.99 30.49 37.98 43.48 48.98 50.98 53.970001&quot;
                     y=&quot;0&quot;
                     sodipodi:role=&quot;line&quot;
                     id=&quot;tspan670&quot;&gt;DeviceHealth&lt;/tspan&gt;&lt;/text&gt;&lt;/g&gt;&lt;/g&gt;&lt;path
               d=&quot;m 672.38,318.13 c 3.14,0 5.67,2.54 5.67,5.67 v 17.01 c 0,3.13 -2.53,5.67 -5.67,5.67 h -86.81 c -3.13,0 -5.67,-2.54 -5.67,-5.67 V 323.8 c 0,-3.13 2.54,-5.67 5.67,-5.67 z&quot;
               style=&quot;fill:#e8eef7;fill-opacity:1;fill-rule:evenodd;stroke:none&quot;
               id=&quot;path674&quot; /&gt;&lt;path
               d=&quot;m 672.38,318.13 c 3.14,0 5.67,2.54 5.67,5.67 v 17.01 c 0,3.13 -2.53,5.67 -5.67,5.67 h -86.81 c -3.13,0 -5.67,-2.54 -5.67,-5.67 V 323.8 c 0,-3.13 2.54,-5.67 5.67,-5.67 z&quot;
               style=&quot;fill:none;stroke:#000000;stroke-width:0.24;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
               id=&quot;path676&quot; /&gt;&lt;g
               id=&quot;g678&quot;&gt;&lt;g
                 id=&quot;g680&quot;
                 clip-path=&quot;url(#clipPath684)&quot;&gt;&lt;text
                   transform=&quot;matrix(1,0,0,-1,598.73,329.07)&quot;
                   style=&quot;font-variant:normal;font-weight:normal;font-size:10px;font-family:Arial;-inkscape-font-specification:ArialMT;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
                   id=&quot;text688&quot;&gt;&lt;tspan
                     x=&quot;0 6.5 12 15.49 17.98 23.48 25.48 32.970001 38.470001 46.470001 51.970001 57.959999&quot;
                     y=&quot;0&quot;
                     sodipodi:role=&quot;line&quot;
                     id=&quot;tspan686&quot;&gt;SerialNumber&lt;/tspan&gt;&lt;/text&gt;&lt;/g&gt;&lt;/g&gt;&lt;path
               d=&quot;m 672.38,106.71 c 3.14,0 5.67,2.54 5.67,5.67 v 17.01 c 0,3.13 -2.53,5.66 -5.67,5.66 h -86.81 c -3.13,0 -5.67,-2.53 -5.67,-5.66 v -17.01 c 0,-3.13 2.54,-5.67 5.67,-5.67 z&quot;
               style=&quot;fill:#e8eef7;fill-opacity:1;fill-rule:evenodd;stroke:none&quot;
               id=&quot;path690&quot; /&gt;&lt;path
               d=&quot;m 672.38,106.71 c 3.14,0 5.67,2.54 5.67,5.67 v 17.01 c 0,3.13 -2.53,5.66 -5.67,5.66 h -86.81 c -3.13,0 -5.67,-2.53 -5.67,-5.66 v -17.01 c 0,-3.13 2.54,-5.67 5.67,-5.67 z&quot;
               style=&quot;fill:none;stroke:#000000;stroke-width:0.24;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
               id=&quot;path692&quot; /&gt;&lt;g
               id=&quot;g694&quot;&gt;&lt;g
                 id=&quot;g696&quot;
                 clip-path=&quot;url(#clipPath700)&quot;&gt;&lt;text
                   transform=&quot;matrix(1,0,0,-1,600.1,117.47)&quot;
                   style=&quot;font-variant:normal;font-weight:normal;font-size:10px;font-family:Arial;-inkscape-font-specification:ArialMT;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
                   id=&quot;text704&quot;&gt;&lt;tspan
                     x=&quot;0 6.5 9.9899998 15.49 20.99 26.49 31.49 34.48 41.48 46.98 52.970001&quot;
                     y=&quot;0&quot;
                     sodipodi:role=&quot;line&quot;
                     id=&quot;tspan702&quot;&gt;ProductCode&lt;/tspan&gt;&lt;/text&gt;&lt;/g&gt;&lt;/g&gt;&lt;path
               d=&quot;m 672.38,283.33 c 3.14,0 5.67,2.54 5.67,5.67 v 17.01 c 0,3.13 -2.53,5.66 -5.67,5.66 h -86.81 c -3.13,0 -5.67,-2.53 -5.67,-5.66 V 289 c 0,-3.13 2.54,-5.67 5.67,-5.67 z&quot;
               style=&quot;fill:#e8eef7;fill-opacity:1;fill-rule:evenodd;stroke:none&quot;
               id=&quot;path706&quot; /&gt;&lt;path
               d=&quot;m 672.38,283.33 c 3.14,0 5.67,2.54 5.67,5.67 v 17.01 c 0,3.13 -2.53,5.66 -5.67,5.66 h -86.81 c -3.13,0 -5.67,-2.53 -5.67,-5.66 V 289 c 0,-3.13 2.54,-5.67 5.67,-5.67 z&quot;
               style=&quot;fill:none;stroke:#000000;stroke-width:0.24;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
               id=&quot;path708&quot; /&gt;&lt;g
               id=&quot;g710&quot;&gt;&lt;g
                 id=&quot;g712&quot;
                 clip-path=&quot;url(#clipPath716)&quot;&gt;&lt;text
                   transform=&quot;matrix(1,0,0,-1,599.83,294.24)&quot;
                   style=&quot;font-variant:normal;font-weight:normal;font-size:10.025px;font-family:Arial;-inkscape-font-specification:ArialMT;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
                   id=&quot;text720&quot;&gt;&lt;tspan
                     x=&quot;0 8.4911747 13.9949 19.498625 25.00235 27.989799 33.493526 38.506023 40.992226 46.495949 49.98465 55.488377&quot;
                     y=&quot;0&quot;
                     sodipodi:role=&quot;line&quot;
                     id=&quot;tspan718&quot;&gt;Manufacturer&lt;/tspan&gt;&lt;/text&gt;&lt;/g&gt;&lt;/g&gt;&lt;path
               d=&quot;m 672.38,177.41 c 3.14,0 5.67,2.54 5.67,5.67 v 17.01 c 0,3.13 -2.53,5.67 -5.67,5.67 h -86.81 c -3.13,0 -5.67,-2.54 -5.67,-5.67 v -17.01 c 0,-3.13 2.54,-5.67 5.67,-5.67 z&quot;
               style=&quot;fill:#e8eef7;fill-opacity:1;fill-rule:evenodd;stroke:none&quot;
               id=&quot;path722&quot; /&gt;&lt;path
               d=&quot;m 672.38,177.41 c 3.14,0 5.67,2.54 5.67,5.67 v 17.01 c 0,3.13 -2.53,5.67 -5.67,5.67 h -86.81 c -3.13,0 -5.67,-2.54 -5.67,-5.67 v -17.01 c 0,-3.13 2.54,-5.67 5.67,-5.67 z&quot;
               style=&quot;fill:none;stroke:#000000;stroke-width:0.24;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
               id=&quot;path724&quot; /&gt;&lt;g
               id=&quot;g726&quot;&gt;&lt;g
                 id=&quot;g728&quot;
                 clip-path=&quot;url(#clipPath732)&quot;&gt;&lt;text
                   transform=&quot;matrix(1,0,0,-1,590.38,188.22)&quot;
                   style=&quot;font-variant:normal;font-weight:normal;font-size:10px;font-family:Arial;-inkscape-font-specification:ArialMT;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
                   id=&quot;text736&quot;&gt;&lt;tspan
                     x=&quot;0 6.5 12 14.99 17.98 24.98 30.48 33.970001 39.470001 46.470001 51.970001 56.970001 59.459999 64.459999 66.459999 72.449997&quot;
                     y=&quot;0&quot;
                     sodipodi:role=&quot;line&quot;
                     id=&quot;tspan734&quot;&gt;SoftwareRevision&lt;/tspan&gt;&lt;/text&gt;&lt;/g&gt;&lt;/g&gt;&lt;path
               d=&quot;m 672.38,142.1 c 3.14,0 5.67,2.54 5.67,5.67 v 17.01 c 0,3.13 -2.53,5.67 -5.67,5.67 h -86.81 c -3.13,0 -5.67,-2.54 -5.67,-5.67 v -17.01 c 0,-3.13 2.54,-5.67 5.67,-5.67 z&quot;
               style=&quot;fill:#e8eef7;fill-opacity:1;fill-rule:evenodd;stroke:none&quot;
               id=&quot;path738&quot; /&gt;&lt;path
               d=&quot;m 672.38,142.1 c 3.14,0 5.67,2.54 5.67,5.67 v 17.01 c 0,3.13 -2.53,5.67 -5.67,5.67 h -86.81 c -3.13,0 -5.67,-2.54 -5.67,-5.67 v -17.01 c 0,-3.13 2.54,-5.67 5.67,-5.67 z&quot;
               style=&quot;fill:none;stroke:#000000;stroke-width:0.24;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
               id=&quot;path740&quot; /&gt;&lt;g
               id=&quot;g742&quot;&gt;&lt;g
                 id=&quot;g744&quot;
                 clip-path=&quot;url(#clipPath748)&quot;&gt;&lt;text
                   transform=&quot;matrix(1,0,0,-1,588.42,152.89)&quot;
                   style=&quot;font-variant:normal;font-weight:normal;font-size:10px;font-family:Arial;-inkscape-font-specification:ArialMT;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
                   id=&quot;text752&quot;&gt;&lt;tspan
                     x=&quot;0 7 12.99 15.99 21.49 28.98 34.48 37.970001 43.470001 50.470001 55.970001 60.970001 63.459999 68.459999 70.459999 75.959999&quot;
                     y=&quot;0&quot;
                     sodipodi:role=&quot;line&quot;
                     id=&quot;tspan750&quot;&gt;HardwareRevision&lt;/tspan&gt;&lt;/text&gt;&lt;/g&gt;&lt;/g&gt;&lt;path
               d=&quot;m 672.38,212.88 c 3.14,0 5.67,2.54 5.67,5.67 v 17.01 c 0,3.13 -2.53,5.67 -5.67,5.67 h -86.81 c -3.13,0 -5.67,-2.54 -5.67,-5.67 v -17.01 c 0,-3.13 2.54,-5.67 5.67,-5.67 z&quot;
               style=&quot;fill:#e8eef7;fill-opacity:1;fill-rule:evenodd;stroke:none&quot;
               id=&quot;path754&quot; /&gt;&lt;path
               d=&quot;m 672.38,212.88 c 3.14,0 5.67,2.54 5.67,5.67 v 17.01 c 0,3.13 -2.53,5.67 -5.67,5.67 h -86.81 c -3.13,0 -5.67,-2.54 -5.67,-5.67 v -17.01 c 0,-3.13 2.54,-5.67 5.67,-5.67 z&quot;
               style=&quot;fill:none;stroke:#000000;stroke-width:0.24;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
               id=&quot;path756&quot; /&gt;&lt;g
               id=&quot;g758&quot;&gt;&lt;g
                 id=&quot;g760&quot;
                 clip-path=&quot;url(#clipPath764)&quot;&gt;&lt;text
                   transform=&quot;matrix(1,0,0,-1,615.67,223.74)&quot;
                   style=&quot;font-variant:normal;font-weight:normal;font-size:10.025px;font-family:Arial;-inkscape-font-specification:ArialMT;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
                   id=&quot;text768&quot;&gt;&lt;tspan
                     x=&quot;0 8.4911747 13.9949 19.498625 25.00235&quot;
                     y=&quot;0&quot;
                     sodipodi:role=&quot;line&quot;
                     id=&quot;tspan766&quot;&gt;Model&lt;/tspan&gt;&lt;/text&gt;&lt;/g&gt;&lt;/g&gt;&lt;path
               d=&quot;M 678.05,332.31 H 801.74&quot;
               style=&quot;fill:none;stroke:#000000;stroke-width:0.24;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
               id=&quot;path770&quot; /&gt;&lt;path
               d=&quot;m 798.98,329.55 2.76,2.76 -2.76,2.76&quot;
               style=&quot;fill:none;stroke:#000000;stroke-width:0.24;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
               id=&quot;path772&quot; /&gt;&lt;path
               d=&quot;m 705.66,327.51 h 68.465 v 9.5999 H 705.66 Z&quot;
               style=&quot;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none&quot;
               id=&quot;path774&quot; /&gt;&lt;g
               id=&quot;g776&quot;&gt;&lt;g
                 id=&quot;g778&quot;
                 clip-path=&quot;url(#clipPath782)&quot;&gt;&lt;text
                   transform=&quot;matrix(1,0,0,-1,706.02,329.67)&quot;
                   style=&quot;font-variant:normal;font-weight:normal;font-size:8px;font-family:Arial;-inkscape-font-specification:ArialMT;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
                   id=&quot;text786&quot;&gt;&lt;tspan
                     x=&quot;0 5.9920001 9.9919996 13.992 19.983999 21.976 25.976 27.976 29.968 33.967999 38.464001 42.959999 45.952 49.952 54.952 59.448002 61.944 64.440002&quot;
                     y=&quot;0&quot;
                     sodipodi:role=&quot;line&quot;
                     id=&quot;tspan784&quot;&gt;HasDictionaryEntry&lt;/tspan&gt;&lt;/text&gt;&lt;/g&gt;&lt;/g&gt;&lt;path
               d=&quot;m 801.74,283.33 h 137.45 v 28.346 H 801.74 Z&quot;
               style=&quot;fill:#e8eef7;fill-opacity:1;fill-rule:evenodd;stroke:none&quot;
               id=&quot;path788&quot; /&gt;&lt;path
               d=&quot;m 801.74,283.33 h 137.45 v 28.346 H 801.74 Z&quot;
               style=&quot;fill:none;stroke:#000000;stroke-width:0.24;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
               id=&quot;path790&quot; /&gt;&lt;g
               id=&quot;g792&quot;&gt;&lt;g
                 id=&quot;g794&quot;
                 clip-path=&quot;url(#clipPath798)&quot;&gt;&lt;text
                   transform=&quot;matrix(1,0,0,-1,818.93,300.24)&quot;
                   style=&quot;font-style:italic;font-variant:normal;font-weight:normal;font-size:10.025px;font-family:Arial;-inkscape-font-specification:Arial-ItalicMT;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
                   id=&quot;text802&quot;&gt;&lt;tspan
                     x=&quot;0 2.9874499 5.9849248 11.48865 13.97485 20.9723 23.4585 28.471001 30.957199 33.443401 38.947124 44.450851 49.954575 53.443275 58.455776 64.941948 70.445679 73.433128 76.430603 81.4431 87.91925 92.931747 98.415428&quot;
                     y=&quot;0&quot;
                     sodipodi:role=&quot;line&quot;
                     id=&quot;tspan800&quot;&gt;IrdiDictionaryEntryType&lt;/tspan&gt;&lt;/text&gt;&lt;/g&gt;&lt;/g&gt;&lt;g
               id=&quot;g804&quot;&gt;&lt;g
                 id=&quot;g806&quot;
                 clip-path=&quot;url(#clipPath810)&quot;&gt;&lt;text
                   transform=&quot;matrix(1,0,0,-1,816.38,288.22)&quot;
                   style=&quot;font-variant:normal;font-weight:normal;font-size:10px;font-family:Arial;-inkscape-font-specification:ArialMT;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
                   id=&quot;text814&quot;&gt;&lt;tspan
                     x=&quot;0 5.52 11.04 16.559999 22.08 25.07 30.59 33.580002 36.080002 39.07 44.59 50.110001 55.630001 61.150002 66.669998 72.690002 79.220001 85.75 92.760002 98.279999 103.8&quot;
                     y=&quot;0&quot;
                     sodipodi:role=&quot;line&quot;
                     id=&quot;tspan812&quot;&gt;0112/2///61987#ABA565&lt;/tspan&gt;&lt;/text&gt;&lt;/g&gt;&lt;/g&gt;&lt;path
               d=&quot;m 801.74,177.41 h 137.45 v 28.346 H 801.74 Z&quot;
               style=&quot;fill:#e8eef7;fill-opacity:1;fill-rule:evenodd;stroke:none&quot;
               id=&quot;path816&quot; /&gt;&lt;path
               d=&quot;m 801.74,177.41 h 137.45 v 28.346 H 801.74 Z&quot;
               style=&quot;fill:none;stroke:#000000;stroke-width:0.24;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
               id=&quot;path818&quot; /&gt;&lt;g
               id=&quot;g820&quot;&gt;&lt;g
                 id=&quot;g822&quot;
                 clip-path=&quot;url(#clipPath826)&quot;&gt;&lt;text
                   transform=&quot;matrix(1,0,0,-1,818.93,194.24)&quot;
                   style=&quot;font-style:italic;font-variant:normal;font-weight:normal;font-size:10.025px;font-family:Arial;-inkscape-font-specification:Arial-ItalicMT;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
                   id=&quot;text830&quot;&gt;&lt;tspan
                     x=&quot;0 2.9874499 5.9849248 11.48865 13.97485 20.9723 23.4585 28.471001 30.957199 33.443401 38.947124 44.450851 49.954575 53.443275 58.455776 64.941948 70.445679 73.433128 76.430603 81.4431 87.91925 92.931747 98.415428&quot;
                     y=&quot;0&quot;
                     sodipodi:role=&quot;line&quot;
                     id=&quot;tspan828&quot;&gt;IrdiDictionaryEntryType&lt;/tspan&gt;&lt;/text&gt;&lt;/g&gt;&lt;/g&gt;&lt;g
               id=&quot;g832&quot;&gt;&lt;g
                 id=&quot;g834&quot;
                 clip-path=&quot;url(#clipPath838)&quot;&gt;&lt;text
                   transform=&quot;matrix(1,0,0,-1,816.38,182.22)&quot;
                   style=&quot;font-variant:normal;font-weight:normal;font-size:10px;font-family:Arial;-inkscape-font-specification:ArialMT;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
                   id=&quot;text842&quot;&gt;&lt;tspan
                     x=&quot;0 5.52 11.04 16.559999 22.08 25.07 30.59 33.580002 36.080002 39.07 44.59 50.110001 55.630001 61.150002 66.669998 72.690002 79.220001 85.75 92.760002 98.279999 103.8&quot;
                     y=&quot;0&quot;
                     sodipodi:role=&quot;line&quot;
                     id=&quot;tspan840&quot;&gt;0112/2///61987#ABA601&lt;/tspan&gt;&lt;/text&gt;&lt;/g&gt;&lt;/g&gt;&lt;path
               d=&quot;m 801.74,142.1 h 137.45 v 28.346 H 801.74 Z&quot;
               style=&quot;fill:#e8eef7;fill-opacity:1;fill-rule:evenodd;stroke:none&quot;
               id=&quot;path844&quot; /&gt;&lt;path
               d=&quot;m 801.74,142.1 h 137.45 v 28.346 H 801.74 Z&quot;
               style=&quot;fill:none;stroke:#000000;stroke-width:0.24;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
               id=&quot;path846&quot; /&gt;&lt;g
               id=&quot;g848&quot;&gt;&lt;g
                 id=&quot;g850&quot;
                 clip-path=&quot;url(#clipPath854)&quot;&gt;&lt;text
                   transform=&quot;matrix(1,0,0,-1,818.93,158.89)&quot;
                   style=&quot;font-style:italic;font-variant:normal;font-weight:normal;font-size:10px;font-family:Arial;-inkscape-font-specification:Arial-ItalicMT;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
                   id=&quot;text858&quot;&gt;&lt;tspan
                     x=&quot;0 2.99 5.9899998 11.49 13.98 20.98 23.469999 28.469999 30.969999 33.459999 38.959999 44.459999 49.959999 53.450001 58.450001 64.949997 70.449997 73.440002 76.440002 81.440002 87.93 92.93 98.43&quot;
                     y=&quot;0&quot;
                     sodipodi:role=&quot;line&quot;
                     id=&quot;tspan856&quot;&gt;IrdiDictionaryEntryType&lt;/tspan&gt;&lt;/text&gt;&lt;/g&gt;&lt;/g&gt;&lt;g
               id=&quot;g860&quot;&gt;&lt;g
                 id=&quot;g862&quot;
                 clip-path=&quot;url(#clipPath866)&quot;&gt;&lt;text
                   transform=&quot;matrix(1,0,0,-1,816.38,146.89)&quot;
                   style=&quot;font-variant:normal;font-weight:normal;font-size:10.025px;font-family:Arial;-inkscape-font-specification:ArialMT;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
                   id=&quot;text870&quot;&gt;&lt;tspan
                     x=&quot;0 5.5237751 11.04755 16.571325 22.0951 25.08255 30.606325 33.593777 36.09 39.07745 44.601227 50.125 55.648773 61.17255 66.696327 72.711327 79.237602 85.763878 92.781372 98.305153 103.82893&quot;
                     y=&quot;0&quot;
                     sodipodi:role=&quot;line&quot;
                     id=&quot;tspan868&quot;&gt;0112/2///61987#ABA926&lt;/tspan&gt;&lt;/text&gt;&lt;/g&gt;&lt;/g&gt;&lt;path
               d=&quot;M 678.05,297.5 H 801.74&quot;
               style=&quot;fill:none;stroke:#000000;stroke-width:0.24;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
               id=&quot;path872&quot; /&gt;&lt;path
               d=&quot;m 798.98,294.74 2.76,2.76 -2.76,2.76&quot;
               style=&quot;fill:none;stroke:#000000;stroke-width:0.24;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
               id=&quot;path874&quot; /&gt;&lt;path
               d=&quot;m 705.66,292.7 h 68.465 v 9.5999 H 705.66 Z&quot;
               style=&quot;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none&quot;
               id=&quot;path876&quot; /&gt;&lt;g
               id=&quot;g878&quot;&gt;&lt;g
                 id=&quot;g880&quot;
                 clip-path=&quot;url(#clipPath884)&quot;&gt;&lt;text
                   transform=&quot;matrix(1,0,0,-1,706.02,294.84)&quot;
                   style=&quot;font-variant:normal;font-weight:normal;font-size:8.025px;font-family:Arial;-inkscape-font-specification:ArialMT;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
                   id=&quot;text888&quot;&gt;&lt;tspan
                     x=&quot;0 5.9946752 9.9911251 14.003625 19.98225 21.97245 25.984949 27.975149 29.965349 33.9618 38.455799 42.949799 45.943127 49.955624 54.939152 59.433151 61.928925 64.432724&quot;
                     y=&quot;0&quot;
                     sodipodi:role=&quot;line&quot;
                     id=&quot;tspan886&quot;&gt;HasDictionaryEntry&lt;/tspan&gt;&lt;/text&gt;&lt;/g&gt;&lt;/g&gt;&lt;path
               d=&quot;M 678.05,191.58 H 801.74&quot;
               style=&quot;fill:none;stroke:#000000;stroke-width:0.24;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
               id=&quot;path890&quot; /&gt;&lt;path
               d=&quot;m 798.98,188.82 2.76,2.76 -2.76,2.76&quot;
               style=&quot;fill:none;stroke:#000000;stroke-width:0.24;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
               id=&quot;path892&quot; /&gt;&lt;path
               d=&quot;m 705.66,186.78 h 68.465 v 9.5999 H 705.66 Z&quot;
               style=&quot;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none&quot;
               id=&quot;path894&quot; /&gt;&lt;g
               id=&quot;g896&quot;&gt;&lt;g
                 id=&quot;g898&quot;
                 clip-path=&quot;url(#clipPath902)&quot;&gt;&lt;text
                   transform=&quot;matrix(1,0,0,-1,706.02,188.82)&quot;
                   style=&quot;font-variant:normal;font-weight:normal;font-size:8px;font-family:Arial;-inkscape-font-specification:ArialMT;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
                   id=&quot;text906&quot;&gt;&lt;tspan
                     x=&quot;0 5.9920001 9.9919996 13.992 19.983999 21.976 25.976 27.976 29.968 33.967999 38.464001 42.959999 45.952 49.952 54.952 59.448002 61.944 64.440002&quot;
                     y=&quot;0&quot;
                     sodipodi:role=&quot;line&quot;
                     id=&quot;tspan904&quot;&gt;HasDictionaryEntry&lt;/tspan&gt;&lt;/text&gt;&lt;/g&gt;&lt;/g&gt;&lt;path
               d=&quot;M 678.05,156.27 H 801.74&quot;
               style=&quot;fill:none;stroke:#000000;stroke-width:0.24;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
               id=&quot;path908&quot; /&gt;&lt;path
               d=&quot;m 798.98,153.51 2.76,2.76 -2.76,2.76&quot;
               style=&quot;fill:none;stroke:#000000;stroke-width:0.24;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
               id=&quot;path910&quot; /&gt;&lt;path
               d=&quot;m 705.66,151.47 h 68.465 v 9.5999 H 705.66 Z&quot;
               style=&quot;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none&quot;
               id=&quot;path912&quot; /&gt;&lt;g
               id=&quot;g914&quot;&gt;&lt;g
                 id=&quot;g916&quot;
                 clip-path=&quot;url(#clipPath920)&quot;&gt;&lt;text
                   transform=&quot;matrix(1,0,0,-1,706.02,153.49)&quot;
                   style=&quot;font-variant:normal;font-weight:normal;font-size:8px;font-family:Arial;-inkscape-font-specification:ArialMT;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
                   id=&quot;text924&quot;&gt;&lt;tspan
                     x=&quot;0 5.9920001 9.9919996 13.992 19.983999 21.976 25.976 27.976 29.968 33.967999 38.464001 42.959999 45.952 49.952 54.952 59.448002 61.944 64.440002&quot;
                     y=&quot;0&quot;
                     sodipodi:role=&quot;line&quot;
                     id=&quot;tspan922&quot;&gt;HasDictionaryEntry&lt;/tspan&gt;&lt;/text&gt;&lt;/g&gt;&lt;/g&gt;&lt;path
               d=&quot;m 801.74,106.71 h 137.45 v 28.346 H 801.74 Z&quot;
               style=&quot;fill:#e8eef7;fill-opacity:1;fill-rule:evenodd;stroke:none&quot;
               id=&quot;path926&quot; /&gt;&lt;path
               d=&quot;m 801.74,106.71 h 137.45 v 28.346 H 801.74 Z&quot;
               style=&quot;fill:none;stroke:#000000;stroke-width:0.24;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
               id=&quot;path928&quot; /&gt;&lt;g
               id=&quot;g930&quot;&gt;&lt;g
                 id=&quot;g932&quot;
                 clip-path=&quot;url(#clipPath936)&quot;&gt;&lt;text
                   transform=&quot;matrix(1,0,0,-1,818.93,123.47)&quot;
                   style=&quot;font-style:italic;font-variant:normal;font-weight:normal;font-size:10px;font-family:Arial;-inkscape-font-specification:Arial-ItalicMT;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
                   id=&quot;text940&quot;&gt;&lt;tspan
                     x=&quot;0 2.99 5.9899998 11.49 13.98 20.98 23.469999 28.469999 30.969999 33.459999 38.959999 44.459999 49.959999 53.450001 58.450001 64.949997 70.449997 73.440002 76.440002 81.440002 87.93 92.93 98.43&quot;
                     y=&quot;0&quot;
                     sodipodi:role=&quot;line&quot;
                     id=&quot;tspan938&quot;&gt;IrdiDictionaryEntryType&lt;/tspan&gt;&lt;/text&gt;&lt;/g&gt;&lt;/g&gt;&lt;g
               id=&quot;g942&quot;&gt;&lt;g
                 id=&quot;g944&quot;
                 clip-path=&quot;url(#clipPath948)&quot;&gt;&lt;text
                   transform=&quot;matrix(1,0,0,-1,816.38,111.47)&quot;
                   style=&quot;font-variant:normal;font-weight:normal;font-size:10px;font-family:Arial;-inkscape-font-specification:ArialMT;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
                   id=&quot;text952&quot;&gt;&lt;tspan
                     x=&quot;0 5.52 11.04 16.559999 22.08 25.07 30.59 33.580002 36.080002 39.07 44.59 50.110001 55.630001 61.150002 66.669998 72.690002 79.220001 85.75 92.760002 98.279999 103.8&quot;
                     y=&quot;0&quot;
                     sodipodi:role=&quot;line&quot;
                     id=&quot;tspan950&quot;&gt;0112/2///61987#ABA300&lt;/tspan&gt;&lt;/text&gt;&lt;/g&gt;&lt;/g&gt;&lt;path
               d=&quot;m 800.07,410.03 h 137.45 v 28.346 H 800.07 Z&quot;
               style=&quot;fill:#e8eef7;fill-opacity:1;fill-rule:evenodd;stroke:none&quot;
               id=&quot;path954&quot; /&gt;&lt;path
               d=&quot;m 800.07,410.03 h 137.45 v 28.346 H 800.07 Z&quot;
               style=&quot;fill:none;stroke:#000000;stroke-width:0.24;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
               id=&quot;path956&quot; /&gt;&lt;g
               id=&quot;g958&quot;&gt;&lt;g
                 id=&quot;g960&quot;
                 clip-path=&quot;url(#clipPath964)&quot;&gt;&lt;text
                   transform=&quot;matrix(1,0,0,-1,817.25,427.04)&quot;
                   style=&quot;font-style:italic;font-variant:normal;font-weight:normal;font-size:10px;font-family:Arial;-inkscape-font-specification:Arial-ItalicMT;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
                   id=&quot;text968&quot;&gt;&lt;tspan
                     x=&quot;0 2.99 5.9899998 11.49 13.98 20.98 23.469999 28.469999 30.969999 33.459999 38.959999 44.459999 49.959999 53.450001 58.450001 64.949997 70.449997 73.440002 76.440002 81.440002 87.93 92.93 98.43&quot;
                     y=&quot;0&quot;
                     sodipodi:role=&quot;line&quot;
                     id=&quot;tspan966&quot;&gt;IrdiDictionaryEntryType&lt;/tspan&gt;&lt;/text&gt;&lt;/g&gt;&lt;/g&gt;&lt;g
               id=&quot;g970&quot;&gt;&lt;g
                 id=&quot;g972&quot;
                 clip-path=&quot;url(#clipPath976)&quot;&gt;&lt;text
                   transform=&quot;matrix(1,0,0,-1,814.73,415.04)&quot;
                   style=&quot;font-variant:normal;font-weight:normal;font-size:10.025px;font-family:Arial;-inkscape-font-specification:ArialMT;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
                   id=&quot;text980&quot;&gt;&lt;tspan
                     x=&quot;0 5.5037251 11.00745 16.511175 22.0149 25.00235 30.506075 33.493526 35.98975 38.9772 44.480927 49.98465 55.488377 60.9921 66.495827 72.490776 78.986977 85.483177 92.470596 97.974327 103.47805&quot;
                     y=&quot;0&quot;
                     sodipodi:role=&quot;line&quot;
                     id=&quot;tspan978&quot;&gt;0112/2///61987#ABA038&lt;/tspan&gt;&lt;/text&gt;&lt;/g&gt;&lt;/g&gt;&lt;path
               d=&quot;M 677.11,424.2 H 800.07&quot;
               style=&quot;fill:none;stroke:#000000;stroke-width:0.24;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
               id=&quot;path982&quot; /&gt;&lt;path
               d=&quot;m 797.31,421.44 2.76,2.76 -2.76,2.76&quot;
               style=&quot;fill:none;stroke:#000000;stroke-width:0.24;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
               id=&quot;path984&quot; /&gt;&lt;path
               d=&quot;m 704.36,419.4 h 68.465 v 9.5999 H 704.36 Z&quot;
               style=&quot;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none&quot;
               id=&quot;path986&quot; /&gt;&lt;g
               id=&quot;g988&quot;&gt;&lt;g
                 id=&quot;g990&quot;
                 clip-path=&quot;url(#clipPath994)&quot;&gt;&lt;text
                   transform=&quot;matrix(1,0,0,-1,704.73,421.64)&quot;
                   style=&quot;font-variant:normal;font-weight:normal;font-size:8px;font-family:Arial;-inkscape-font-specification:ArialMT;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
                   id=&quot;text998&quot;&gt;&lt;tspan
                     x=&quot;0 5.9920001 9.9919996 13.992 19.983999 21.976 25.976 27.976 29.968 33.967999 38.464001 42.959999 45.952 49.952 54.952 59.448002 61.944 64.440002&quot;
                     y=&quot;0&quot;
                     sodipodi:role=&quot;line&quot;
                     id=&quot;tspan996&quot;&gt;HasDictionaryEntry&lt;/tspan&gt;&lt;/text&gt;&lt;/g&gt;&lt;/g&gt;&lt;path
               d=&quot;M 678.05,227.06 H 801.74&quot;
               style=&quot;fill:none;stroke:#000000;stroke-width:0.24;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
               id=&quot;path1000&quot; /&gt;&lt;path
               d=&quot;m 798.98,224.3 2.76,2.76 -2.76,2.76&quot;
               style=&quot;fill:none;stroke:#000000;stroke-width:0.24;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
               id=&quot;path1002&quot; /&gt;&lt;path
               d=&quot;m 705.66,222.26 h 68.465 v 9.5999 H 705.66 Z&quot;
               style=&quot;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none&quot;
               id=&quot;path1004&quot; /&gt;&lt;g
               id=&quot;g1006&quot;&gt;&lt;g
                 id=&quot;g1008&quot;
                 clip-path=&quot;url(#clipPath1012)&quot;&gt;&lt;text
                   transform=&quot;matrix(1,0,0,-1,706.02,224.34)&quot;
                   style=&quot;font-variant:normal;font-weight:normal;font-size:8.025px;font-family:Arial;-inkscape-font-specification:ArialMT;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
                   id=&quot;text1016&quot;&gt;&lt;tspan
                     x=&quot;0 5.9946752 9.9911251 14.003625 19.98225 21.97245 25.984949 27.975149 29.965349 33.9618 38.455799 42.949799 45.943127 49.955624 54.939152 59.433151 61.928925 64.432724&quot;
                     y=&quot;0&quot;
                     sodipodi:role=&quot;line&quot;
                     id=&quot;tspan1014&quot;&gt;HasDictionaryEntry&lt;/tspan&gt;&lt;/text&gt;&lt;/g&gt;&lt;/g&gt;&lt;path
               d=&quot;m 801.74,212.88 h 137.45 v 28.346 H 801.74 Z&quot;
               style=&quot;fill:#e8eef7;fill-opacity:1;fill-rule:evenodd;stroke:none&quot;
               id=&quot;path1018&quot; /&gt;&lt;path
               d=&quot;m 801.74,212.88 h 137.45 v 28.346 H 801.74 Z&quot;
               style=&quot;fill:none;stroke:#000000;stroke-width:0.24;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
               id=&quot;path1020&quot; /&gt;&lt;g
               id=&quot;g1022&quot;&gt;&lt;g
                 id=&quot;g1024&quot;
                 clip-path=&quot;url(#clipPath1028)&quot;&gt;&lt;text
                   transform=&quot;matrix(1,0,0,-1,818.93,229.74)&quot;
                   style=&quot;font-style:italic;font-variant:normal;font-weight:normal;font-size:10.025px;font-family:Arial;-inkscape-font-specification:Arial-ItalicMT;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
                   id=&quot;text1032&quot;&gt;&lt;tspan
                     x=&quot;0 2.9874499 5.9849248 11.48865 13.97485 20.9723 23.4585 28.471001 30.957199 33.443401 38.947124 44.450851 49.954575 53.443275 58.455776 64.941948 70.445679 73.433128 76.430603 81.4431 87.91925 92.931747 98.415428&quot;
                     y=&quot;0&quot;
                     sodipodi:role=&quot;line&quot;
                     id=&quot;tspan1030&quot;&gt;IrdiDictionaryEntryType&lt;/tspan&gt;&lt;/text&gt;&lt;/g&gt;&lt;/g&gt;&lt;g
               id=&quot;g1034&quot;&gt;&lt;g
                 id=&quot;g1036&quot;
                 clip-path=&quot;url(#clipPath1040)&quot;&gt;&lt;text
                   transform=&quot;matrix(1,0,0,-1,816.38,217.72)&quot;
                   style=&quot;font-variant:normal;font-weight:normal;font-size:10px;font-family:Arial;-inkscape-font-specification:ArialMT;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
                   id=&quot;text1044&quot;&gt;&lt;tspan
                     x=&quot;0 5.52 11.04 16.559999 22.08 25.07 30.59 33.580002 36.080002 39.07 44.59 50.110001 55.630001 61.150002 66.669998 72.690002 79.220001 85.75 92.760002 98.279999 103.8&quot;
                     y=&quot;0&quot;
                     sodipodi:role=&quot;line&quot;
                     id=&quot;tspan1042&quot;&gt;0112/2///61987#ABA567&lt;/tspan&gt;&lt;/text&gt;&lt;/g&gt;&lt;/g&gt;&lt;path
               d=&quot;M 75.7,513.89 V 496.1 H 528.16 V 332.31 h 51.74&quot;
               style=&quot;fill:none;stroke:#000000;stroke-width:0.24;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
               id=&quot;path1046&quot; /&gt;&lt;path
               d=&quot;m 573.69,334.38 v -4.14 m 2.07,4.14 v -4.14&quot;
               style=&quot;fill:none;stroke:#000000;stroke-width:0.24;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
               id=&quot;path1048&quot; /&gt;&lt;path
               d=&quot;M 75.7,513.89 V 496.1 H 528.16 V 297.5 h 51.74&quot;
               style=&quot;fill:none;stroke:#000000;stroke-width:0.24;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
               id=&quot;path1050&quot; /&gt;&lt;path
               d=&quot;m 573.69,299.57 v -4.14 m 2.07,4.14 v -4.14&quot;
               style=&quot;fill:none;stroke:#000000;stroke-width:0.24;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
               id=&quot;path1052&quot; /&gt;&lt;path
               d=&quot;M 75.7,513.89 V 496.1 H 528.16 V 191.58 h 51.74&quot;
               style=&quot;fill:none;stroke:#000000;stroke-width:0.24;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
               id=&quot;path1054&quot; /&gt;&lt;path
               d=&quot;m 573.69,193.65 v -4.14 m 2.07,4.14 v -4.14&quot;
               style=&quot;fill:none;stroke:#000000;stroke-width:0.24;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
               id=&quot;path1056&quot; /&gt;&lt;path
               d=&quot;M 75.7,513.89 V 496.1 H 528.16 V 156.27 h 51.74&quot;
               style=&quot;fill:none;stroke:#000000;stroke-width:0.24;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
               id=&quot;path1058&quot; /&gt;&lt;path
               d=&quot;m 573.69,158.34 v -4.14 m 2.07,4.14 v -4.14&quot;
               style=&quot;fill:none;stroke:#000000;stroke-width:0.24;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
               id=&quot;path1060&quot; /&gt;&lt;path
               d=&quot;M 75.7,513.89 V 496.1 H 528.16 V 227.06 h 51.74&quot;
               style=&quot;fill:none;stroke:#000000;stroke-width:0.24;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
               id=&quot;path1062&quot; /&gt;&lt;path
               d=&quot;m 573.69,229.13 v -4.14 m 2.07,4.14 v -4.14&quot;
               style=&quot;fill:none;stroke:#000000;stroke-width:0.24;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
               id=&quot;path1064&quot; /&gt;&lt;path
               d=&quot;M 678.05,120.88 H 801.74&quot;
               style=&quot;fill:none;stroke:#000000;stroke-width:0.24;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
               id=&quot;path1066&quot; /&gt;&lt;path
               d=&quot;m 798.98,118.12 2.76,2.76 -2.76,2.76&quot;
               style=&quot;fill:none;stroke:#000000;stroke-width:0.24;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
               id=&quot;path1068&quot; /&gt;&lt;path
               d=&quot;m 705.66,116.08 h 68.465 v 9.5999 H 705.66 Z&quot;
               style=&quot;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none&quot;
               id=&quot;path1070&quot; /&gt;&lt;g
               id=&quot;g1072&quot;&gt;&lt;g
                 id=&quot;g1074&quot;
                 clip-path=&quot;url(#clipPath1078)&quot;&gt;&lt;text
                   transform=&quot;matrix(1,0,0,-1,706.02,118.07)&quot;
                   style=&quot;font-variant:normal;font-weight:normal;font-size:8px;font-family:Arial;-inkscape-font-specification:ArialMT;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
                   id=&quot;text1082&quot;&gt;&lt;tspan
                     x=&quot;0 5.9920001 9.9919996 13.992 19.983999 21.976 25.976 27.976 29.968 33.967999 38.464001 42.959999 45.952 49.952 54.952 59.448002 61.944 64.440002&quot;
                     y=&quot;0&quot;
                     sodipodi:role=&quot;line&quot;
                     id=&quot;tspan1080&quot;&gt;HasDictionaryEntry&lt;/tspan&gt;&lt;/text&gt;&lt;/g&gt;&lt;/g&gt;&lt;path
               d=&quot;m 75.7,513.89 v -406.9 h 51.67&quot;
               style=&quot;fill:none;stroke:#000000;stroke-width:0.24;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
               id=&quot;path1084&quot; /&gt;&lt;path
               d=&quot;m 123.23,109.06 v -4.14&quot;
               style=&quot;fill:none;stroke:#000000;stroke-width:0.24;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
               id=&quot;path1086&quot; /&gt;&lt;path
               d=&quot;m 223.41,316.49 c 3.13,0 5.67,2.53 5.67,5.67 v 17 c 0,3.13 -2.54,5.67 -5.67,5.67 H 136.6 c -3.13,0 -5.67,-2.54 -5.67,-5.67 v -17 c 0,-3.14 2.54,-5.67 5.67,-5.67 z&quot;
               style=&quot;fill:#e8eef7;fill-opacity:1;fill-rule:evenodd;stroke:none&quot;
               id=&quot;path1088&quot; /&gt;&lt;path
               d=&quot;m 223.41,316.49 c 3.13,0 5.67,2.53 5.67,5.67 v 17 c 0,3.13 -2.54,5.67 -5.67,5.67 H 136.6 c -3.13,0 -5.67,-2.54 -5.67,-5.67 v -17 c 0,-3.14 2.54,-5.67 5.67,-5.67 z&quot;
               style=&quot;fill:none;stroke:#000000;stroke-width:0.24;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
               id=&quot;path1090&quot; /&gt;&lt;g
               id=&quot;g1092&quot;&gt;&lt;g
                 id=&quot;g1094&quot;
                 clip-path=&quot;url(#clipPath1098)&quot;&gt;&lt;text
                   transform=&quot;matrix(1,0,0,-1,141.43,327.42)&quot;
                   style=&quot;font-variant:normal;font-weight:normal;font-size:10px;font-family:Arial;-inkscape-font-specification:ArialMT;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
                   id=&quot;text1102&quot;&gt;&lt;tspan
                     x=&quot;0 7.02 9.5299997 14.53 20.09 22.1 28.120001 33.119999 38.68 44.189999 49.709999 55.23 60.75 66.269997 71.790001&quot;
                     y=&quot;0&quot;
                     sodipodi:role=&quot;line&quot;
                     id=&quot;tspan1100&quot;&gt;DisplayLanguage&lt;/tspan&gt;&lt;/text&gt;&lt;/g&gt;&lt;/g&gt;&lt;path
               d=&quot;M 75.7,513.89 V 330.66 h 55.23&quot;
               style=&quot;fill:none;stroke:#000000;stroke-width:0.24;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
               id=&quot;path1104&quot; /&gt;&lt;path
               d=&quot;m 126.79,332.73 v -4.14&quot;
               style=&quot;fill:none;stroke:#000000;stroke-width:0.24;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
               id=&quot;path1106&quot; /&gt;&lt;g
               id=&quot;g1154&quot;&gt;&lt;g
                 id=&quot;g1156&quot;
                 clip-path=&quot;url(#clipPath1160)&quot; /&gt;&lt;/g&gt;&lt;g
               id=&quot;g1174&quot;&gt;&lt;g
                 id=&quot;g1176&quot;
                 clip-path=&quot;url(#clipPath1180)&quot; /&gt;&lt;/g&gt;&lt;path
               d=&quot;m 672.38,247.43 c 3.14,0 5.67,2.54 5.67,5.67 v 17.01 c 0,3.13 -2.53,5.67 -5.67,5.67 h -86.81 c -3.13,0 -5.67,-2.54 -5.67,-5.67 V 253.1 c 0,-3.13 2.54,-5.67 5.67,-5.67 z&quot;
               style=&quot;fill:#e8eef7;fill-opacity:1;fill-rule:evenodd;stroke:none&quot;
               id=&quot;path1206&quot; /&gt;&lt;path
               d=&quot;m 672.38,247.43 c 3.14,0 5.67,2.54 5.67,5.67 v 17.01 c 0,3.13 -2.53,5.67 -5.67,5.67 h -86.81 c -3.13,0 -5.67,-2.54 -5.67,-5.67 V 253.1 c 0,-3.13 2.54,-5.67 5.67,-5.67 z&quot;
               style=&quot;fill:none;stroke:#000000;stroke-width:0.24;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
               id=&quot;path1208&quot; /&gt;&lt;g
               id=&quot;g1210&quot;&gt;&lt;g
                 id=&quot;g1212&quot;
                 clip-path=&quot;url(#clipPath1216)&quot;&gt;&lt;text
                   transform=&quot;matrix(1,0,0,-1,593.42,258.32)&quot;
                   style=&quot;font-variant:normal;font-weight:normal;font-size:10.025px;font-family:Arial;-inkscape-font-specification:ArialMT;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
                   id=&quot;text1220&quot;&gt;&lt;tspan
                     x=&quot;0 8.5112247 14.035 19.558775 25.08255 28.100075 33.623852 38.636349 41.172676 46.696449 50.215225 55.738998 59.257774 66.285301 69.804077&quot;
                     y=&quot;0&quot;
                     sodipodi:role=&quot;line&quot;
                     id=&quot;tspan1218&quot;&gt;ManufacturerUri&lt;/tspan&gt;&lt;/text&gt;&lt;/g&gt;&lt;/g&gt;&lt;path
               d=&quot;M 75.7,513.89 V 496.1 H 528.16 V 261.6 h 51.74&quot;
               style=&quot;fill:none;stroke:#000000;stroke-width:0.24;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
               id=&quot;path1222&quot; /&gt;&lt;path
               d=&quot;m 573.69,263.67 v -4.14 m 2.07,4.14 v -4.14&quot;
               style=&quot;fill:none;stroke:#000000;stroke-width:0.24;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
               id=&quot;path1224&quot; /&gt;&lt;path
               d=&quot;m 801.74,247.43 h 137.45 v 28.346 H 801.74 Z&quot;
               style=&quot;fill:#e8eef7;fill-opacity:1;fill-rule:evenodd;stroke:none&quot;
               id=&quot;path1226&quot; /&gt;&lt;path
               d=&quot;m 801.74,247.43 h 137.45 v 28.346 H 801.74 Z&quot;
               style=&quot;fill:none;stroke:#000000;stroke-width:0.24;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
               id=&quot;path1228&quot; /&gt;&lt;g
               id=&quot;g1230&quot;&gt;&lt;g
                 id=&quot;g1232&quot;
                 clip-path=&quot;url(#clipPath1236)&quot;&gt;&lt;text
                   transform=&quot;matrix(1,0,0,-1,818.93,264.32)&quot;
                   style=&quot;font-style:italic;font-variant:normal;font-weight:normal;font-size:10.025px;font-family:Arial;-inkscape-font-specification:Arial-ItalicMT;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
                   id=&quot;text1240&quot;&gt;&lt;tspan
                     x=&quot;0 2.9874499 5.9849248 11.48865 13.97485 20.9723 23.4585 28.471001 30.957199 33.443401 38.947124 44.450851 49.954575 53.443275 58.455776 64.941948 70.445679 73.433128 76.430603 81.4431 87.91925 92.931747 98.415428&quot;
                     y=&quot;0&quot;
                     sodipodi:role=&quot;line&quot;
                     id=&quot;tspan1238&quot;&gt;IrdiDictionaryEntryType&lt;/tspan&gt;&lt;/text&gt;&lt;/g&gt;&lt;/g&gt;&lt;g
               id=&quot;g1242&quot;&gt;&lt;g
                 id=&quot;g1244&quot;
                 clip-path=&quot;url(#clipPath1248)&quot;&gt;&lt;text
                   transform=&quot;matrix(1,0,0,-1,816.1,252.29)&quot;
                   style=&quot;font-variant:normal;font-weight:normal;font-size:10px;font-family:Arial;-inkscape-font-specification:ArialMT;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
                   id=&quot;text1252&quot;&gt;&lt;tspan
                     x=&quot;0 5.5 11 16.5 22 24.99 30.49 33.48 35.98 38.970001 44.470001 49.970001 55.470001 60.970001 66.470001&quot;
                     y=&quot;0&quot;
                     sodipodi:role=&quot;line&quot;
                     id=&quot;tspan1250&quot;&gt;0112/2///61987#&lt;/tspan&gt;&lt;/text&gt;&lt;/g&gt;&lt;/g&gt;&lt;g
               id=&quot;g1254&quot;&gt;&lt;g
                 id=&quot;g1256&quot;
                 clip-path=&quot;url(#clipPath1260)&quot;&gt;&lt;text
                   transform=&quot;matrix(1,0,0,-1,888.42,252.29)&quot;
                   style=&quot;font-variant:normal;font-weight:normal;font-size:10px;font-family:Arial;-inkscape-font-specification:ArialMT;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
                   id=&quot;text1264&quot;&gt;&lt;tspan
                     x=&quot;0 6.5300002 13.54 20.559999 26.08 31.6&quot;
                     y=&quot;0&quot;
                     sodipodi:role=&quot;line&quot;
                     id=&quot;tspan1262&quot;&gt;ABN591&lt;/tspan&gt;&lt;/text&gt;&lt;/g&gt;&lt;/g&gt;&lt;path
               d=&quot;M 678.05,261.6 H 801.74&quot;
               style=&quot;fill:none;stroke:#000000;stroke-width:0.24;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
               id=&quot;path1266&quot; /&gt;&lt;path
               d=&quot;m 798.98,258.84 2.76,2.76 -2.76,2.76&quot;
               style=&quot;fill:none;stroke:#000000;stroke-width:0.24;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
               id=&quot;path1268&quot; /&gt;&lt;path
               d=&quot;m 705.66,256.8 h 68.465 v 9.5999 H 705.66 Z&quot;
               style=&quot;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none&quot;
               id=&quot;path1270&quot; /&gt;&lt;g
               id=&quot;g1272&quot;&gt;&lt;g
                 id=&quot;g1274&quot;
                 clip-path=&quot;url(#clipPath1278)&quot;&gt;&lt;text
                   transform=&quot;matrix(1,0,0,-1,706.02,258.92)&quot;
                   style=&quot;font-variant:normal;font-weight:normal;font-size:8.025px;font-family:Arial;-inkscape-font-specification:ArialMT;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
                   id=&quot;text1282&quot;&gt;&lt;tspan
                     x=&quot;0 5.9946752 9.9911251 14.003625 19.98225 21.97245 25.984949 27.975149 29.965349 33.9618 38.455799 42.949799 45.943127 49.955624 54.939152 59.433151 61.928925 64.432724&quot;
                     y=&quot;0&quot;
                     sodipodi:role=&quot;line&quot;
                     id=&quot;tspan1280&quot;&gt;HasDictionaryEntry&lt;/tspan&gt;&lt;/text&gt;&lt;/g&gt;&lt;/g&gt;&lt;path
               d=&quot;m 671.44,410.03 c 3.14,0 5.67,2.54 5.67,5.67 v 17.01 c 0,3.13 -2.53,5.67 -5.67,5.67 h -86.81 c -3.13,0 -5.67,-2.54 -5.67,-5.67 V 415.7 c 0,-3.13 2.54,-5.67 5.67,-5.67 z&quot;
               style=&quot;fill:#e8eef7;fill-opacity:1;fill-rule:evenodd;stroke:none&quot;
               id=&quot;path1284&quot; /&gt;&lt;path
               d=&quot;m 671.44,410.03 c 3.14,0 5.67,2.54 5.67,5.67 v 17.01 c 0,3.13 -2.53,5.67 -5.67,5.67 h -86.81 c -3.13,0 -5.67,-2.54 -5.67,-5.67 V 415.7 c 0,-3.13 2.54,-5.67 5.67,-5.67 z&quot;
               style=&quot;fill:none;stroke:#000000;stroke-width:0.24;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
               id=&quot;path1286&quot; /&gt;&lt;g
               id=&quot;g1288&quot;&gt;&lt;g
                 id=&quot;g1290&quot;
                 clip-path=&quot;url(#clipPath1294)&quot;&gt;&lt;text
                   transform=&quot;matrix(1,0,0,-1,611.67,421.04)&quot;
                   style=&quot;font-variant:normal;font-weight:normal;font-size:10.025px;font-family:Arial;-inkscape-font-specification:ArialMT;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
                   id=&quot;text1298&quot;&gt;&lt;tspan
                     x=&quot;0 6.4962001 11.5087 16.5212 21.99485 24.9823&quot;
                     y=&quot;0&quot;
                     sodipodi:role=&quot;line&quot;
                     id=&quot;tspan1296&quot;&gt;AssetI&lt;/tspan&gt;&lt;/text&gt;&lt;/g&gt;&lt;/g&gt;&lt;g
               id=&quot;g1300&quot;&gt;&lt;g
                 id=&quot;g1302&quot;
                 clip-path=&quot;url(#clipPath1306)&quot;&gt;&lt;text
                   transform=&quot;matrix(1,0,0,-1,639.48,421.04)&quot;
                   style=&quot;font-variant:normal;font-weight:normal;font-size:10.025px;font-family:Arial;-inkscape-font-specification:ArialMT;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
                   id=&quot;text1310&quot;&gt;&lt;tspan
                     x=&quot;0&quot;
                     y=&quot;0&quot;
                     id=&quot;tspan1308&quot;&gt;d&lt;/tspan&gt;&lt;/text&gt;&lt;/g&gt;&lt;/g&gt;&lt;path
               d=&quot;m 28.245,594.87 c 0,0 0,0 0,0 H 141.16 c 0.06,0 0.12,-0.06 0.12,-0.12 V 566.4 c 0,-0.06 -0.06,-0.12 -0.12,-0.12 H 28.245 c -0.066,0 -0.12,0.06 -0.12,0.12 v 28.35 c 0,0.06 0.054,0.12 0.12,0.12 z&quot;
               style=&quot;fill:#4979c0;fill-opacity:0.25098;fill-rule:evenodd;stroke:none&quot;
               id=&quot;path1312&quot; /&gt;&lt;path
               d=&quot;m 19.245,575.4 h 112.91 v 28.346 H 19.245 Z&quot;
               style=&quot;fill:#e8eef7;fill-opacity:1;fill-rule:evenodd;stroke:none&quot;
               id=&quot;path1314&quot; /&gt;&lt;path
               d=&quot;m 19.245,575.4 h 112.91 v 28.346 H 19.245 Z&quot;
               style=&quot;fill:none;stroke:#000000;stroke-width:0.24;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
               id=&quot;path1316&quot; /&gt;&lt;g
               id=&quot;g1318&quot;&gt;&lt;g
                 id=&quot;g1320&quot;
                 clip-path=&quot;url(#clipPath1324)&quot;&gt;&lt;text
                   transform=&quot;matrix(1,0,0,-1,38.75,586.54)&quot;
                   style=&quot;font-style:italic;font-variant:normal;font-weight:normal;font-size:10px;font-family:Arial;-inkscape-font-specification:Arial-ItalicMT;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
                   id=&quot;text1328&quot;&gt;&lt;tspan
                     x=&quot;0 7 12.99 20.99 26.49 31.99 37.98 43.48 48.98 51.48 57.970001 62.970001 68.470001&quot;
                     y=&quot;0&quot;
                     sodipodi:role=&quot;line&quot;
                     id=&quot;tspan1326&quot;&gt;ComponentType&lt;/tspan&gt;&lt;/text&gt;&lt;/g&gt;&lt;/g&gt;&lt;path
               d=&quot;m 75.7,561.48 v -8.69&quot;
               style=&quot;fill:none;stroke:#000000;stroke-width:0.24;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
               id=&quot;path1330&quot; /&gt;&lt;path
               d=&quot;m 75.7,568.44 -3.48,-6.96 h 6.96 l -3.48,6.96 m 0,6.96 -3.48,-6.96 h 6.96 z&quot;
               style=&quot;fill:none;stroke:#000000;stroke-width:0.24;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
               id=&quot;path1332&quot; /&gt;&lt;path
               d=&quot;m 626.96,463.81 h 137.45 c 0.06,0 0.12,-0.05 0.12,-0.12 v -20.14 c 0,-0.07 -0.06,-0.12 -0.12,-0.12 H 626.96 c -0.07,0 -0.12,0.05 -0.12,0.12 v 20.14 c 0,0.07 0.05,0.12 0.12,0.12 z&quot;
               style=&quot;fill:#4979c0;fill-opacity:0.25098;fill-rule:evenodd;stroke:none&quot;
               id=&quot;path1334&quot; /&gt;&lt;path
               d=&quot;m 617.96,452.55 h 137.45 v 20.142 H 617.96 Z&quot;
               style=&quot;fill:#e8eef7;fill-opacity:1;fill-rule:evenodd;stroke:none&quot;
               id=&quot;path1336&quot; /&gt;&lt;path
               d=&quot;m 617.96,452.55 h 137.45 v 20.142 H 617.96 Z&quot;
               style=&quot;fill:none;stroke:#000000;stroke-width:0.24;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
               id=&quot;path1338&quot; /&gt;&lt;g
               id=&quot;g1340&quot;&gt;&lt;g
                 id=&quot;g1342&quot;
                 clip-path=&quot;url(#clipPath1346)&quot;&gt;&lt;text
                   transform=&quot;matrix(1,0,0,-1,641.7,459.49)&quot;
                   style=&quot;font-style:italic;font-variant:normal;font-weight:normal;font-size:10.025px;font-family:Arial;-inkscape-font-specification:Arial-ItalicMT;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
                   id=&quot;text1350&quot;&gt;&lt;tspan
                     x=&quot;0 2.9874499 8.992425 14.49615 19.999874 26.997326 32.992275 41.012276 46.515999 52.019726 54.505924 60.009651 62.997101 68.500824 74.505798 79.518303 85.001976&quot;
                     y=&quot;0&quot;
                     sodipodi:role=&quot;line&quot;
                     id=&quot;tspan1348&quot;&gt;ITagNameplateType&lt;/tspan&gt;&lt;/text&gt;&lt;/g&gt;&lt;/g&gt;&lt;path
               d=&quot;M 75.7,513.89 V 496.1 h 452.46 v -71.9 h 50.8&quot;
               style=&quot;fill:none;stroke:#000000;stroke-width:0.24;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
               id=&quot;path1352&quot; /&gt;&lt;path
               d=&quot;m 572.75,426.27 v -4.14 m 2.07,4.14 v -4.14&quot;
               style=&quot;fill:none;stroke:#000000;stroke-width:0.24;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
               id=&quot;path1354&quot; /&gt;&lt;path
               d=&quot;m 801.74,318.13 h 137.45 v 28.346 H 801.74 Z&quot;
               style=&quot;fill:#e8eef7;fill-opacity:1;fill-rule:evenodd;stroke:none&quot;
               id=&quot;path1356&quot; /&gt;&lt;path
               d=&quot;m 801.74,318.13 h 137.45 v 28.346 H 801.74 Z&quot;
               style=&quot;fill:none;stroke:#000000;stroke-width:0.24;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
               id=&quot;path1358&quot; /&gt;&lt;g
               id=&quot;g1360&quot;&gt;&lt;g
                 id=&quot;g1362&quot;
                 clip-path=&quot;url(#clipPath1366)&quot;&gt;&lt;text
                   transform=&quot;matrix(1,0,0,-1,818.93,335.07)&quot;
                   style=&quot;font-style:italic;font-variant:normal;font-weight:normal;font-size:10px;font-family:Arial;-inkscape-font-specification:Arial-ItalicMT;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
                   id=&quot;text1370&quot;&gt;&lt;tspan
                     x=&quot;0 2.99 5.9899998 11.49 13.98 20.98 23.469999 28.469999 30.969999 33.459999 38.959999 44.459999 49.959999 53.450001 58.450001 64.949997 70.449997 73.440002 76.440002 81.440002 87.93 92.93 98.43&quot;
                     y=&quot;0&quot;
                     sodipodi:role=&quot;line&quot;
                     id=&quot;tspan1368&quot;&gt;IrdiDictionaryEntryType&lt;/tspan&gt;&lt;/text&gt;&lt;/g&gt;&lt;/g&gt;&lt;g
               id=&quot;g1372&quot;&gt;&lt;g
                 id=&quot;g1374&quot;
                 clip-path=&quot;url(#clipPath1378)&quot;&gt;&lt;text
                   transform=&quot;matrix(1,0,0,-1,816.38,323.07)&quot;
                   style=&quot;font-variant:normal;font-weight:normal;font-size:10.025px;font-family:Arial;-inkscape-font-specification:ArialMT;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
                   id=&quot;text1382&quot;&gt;&lt;tspan
                     x=&quot;0 5.5237751 11.04755 16.571325 22.0951 25.08255 30.606325 33.593777 36.09 39.07745 44.601227 50.125 55.648773 61.17255 66.696327 72.711327 79.237602 85.763878 92.781372 98.305153 103.82893&quot;
                     y=&quot;0&quot;
                     sodipodi:role=&quot;line&quot;
                     id=&quot;tspan1380&quot;&gt;0112/2///61987#ABA951&lt;/tspan&gt;&lt;/text&gt;&lt;/g&gt;&lt;/g&gt;&lt;path
               d=&quot;m 624.82,372.8 h 137.45 c 0.06,0 0.12,-0.05 0.12,-0.12 v -20.14 c 0,-0.07 -0.06,-0.12 -0.12,-0.12 H 624.82 c -0.07,0 -0.12,0.05 -0.12,0.12 v 20.14 c 0,0.07 0.05,0.12 0.12,0.12 z&quot;
               style=&quot;fill:#4979c0;fill-opacity:0.25098;fill-rule:evenodd;stroke:none&quot;
               id=&quot;path1384&quot; /&gt;&lt;path
               d=&quot;m 615.82,361.54 h 137.45 v 20.142 H 615.82 Z&quot;
               style=&quot;fill:#e8eef7;fill-opacity:1;fill-rule:evenodd;stroke:none&quot;
               id=&quot;path1386&quot; /&gt;&lt;path
               d=&quot;m 615.82,361.54 h 137.45 v 20.142 H 615.82 Z&quot;
               style=&quot;fill:none;stroke:#000000;stroke-width:0.24;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
               id=&quot;path1388&quot; /&gt;&lt;g
               id=&quot;g1390&quot;&gt;&lt;g
                 id=&quot;g1392&quot;
                 clip-path=&quot;url(#clipPath1396)&quot;&gt;&lt;text
                   transform=&quot;matrix(1,0,0,-1,632.05,368.39)&quot;
                   style=&quot;font-style:italic;font-variant:normal;font-weight:normal;font-size:10px;font-family:Arial;-inkscape-font-specification:Arial-ItalicMT;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
                   id=&quot;text1400&quot;&gt;&lt;tspan
                     x=&quot;0 2.99 9.4899998 14.99 20.49 25.99 31.49 34.98 41.98 47.970001 55.970001 61.470001 67.459999 69.459999 74.959999 77.949997 83.449997 89.449997 94.449997 99.949997&quot;
                     y=&quot;0&quot;
                     sodipodi:role=&quot;line&quot;
                     id=&quot;tspan1398&quot;&gt;IVendorNameplateType&lt;/tspan&gt;&lt;/text&gt;&lt;/g&gt;&lt;/g&gt;&lt;path
               d=&quot;m 113.34,552.79 v 13.14 h 34.76&quot;
               style=&quot;fill:none;stroke:#000000;stroke-width:0.24;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
               id=&quot;path1402&quot; /&gt;&lt;path
               d=&quot;m 143.96,568 v -4.14&quot;
               style=&quot;fill:none;stroke:#000000;stroke-width:0.24;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
               id=&quot;path1404&quot; /&gt;&lt;path
               d=&quot;m 148.1,551.76 h 116.29 v 28.346 H 148.1 Z&quot;
               style=&quot;fill:#e8eef7;fill-opacity:1;fill-rule:evenodd;stroke:none&quot;
               id=&quot;path1406&quot; /&gt;&lt;path
               d=&quot;m 148.1,551.76 h 116.29 v 28.346 H 148.1 Z&quot;
               style=&quot;fill:none;stroke:#000000;stroke-width:0.24;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
               id=&quot;path1408&quot; /&gt;&lt;g
               id=&quot;g1410&quot;&gt;&lt;g
                 id=&quot;g1412&quot;
                 clip-path=&quot;url(#clipPath1416)&quot;&gt;&lt;text
                   transform=&quot;matrix(1,0,0,-1,152.4,568.89)&quot;
                   style=&quot;font-style:italic;font-variant:normal;font-weight:normal;font-size:10px;font-family:Arial;-inkscape-font-specification:Arial-ItalicMT;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
                   id=&quot;text1420&quot;&gt;&lt;tspan
                     x=&quot;0 7 12.99 18.49 20.99 23.48 28.98 34.48 37.970001 43.470001 48.970001 50.970001 56.470001 64.459999 69.959999 72.449997 77.949997 82.949997 85.449997 91.449997 96.449997 102.44&quot;
                     y=&quot;0&quot;
                     sodipodi:role=&quot;line&quot;
                     id=&quot;tspan1418&quot;&gt;ConfigurableObjectType&lt;/tspan&gt;&lt;/text&gt;&lt;/g&gt;&lt;/g&gt;&lt;g
               id=&quot;g1422&quot;&gt;&lt;g
                 id=&quot;g1424&quot;
                 clip-path=&quot;url(#clipPath1428)&quot;&gt;&lt;text
                   transform=&quot;matrix(1,0,0,-1,179.65,556.87)&quot;
                   style=&quot;font-variant:normal;font-weight:normal;font-size:10px;font-family:Arial;-inkscape-font-specification:ArialMT;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
                   id=&quot;text1432&quot;&gt;&lt;tspan
                     x=&quot;0 6.5 12 17.99 24.99 30.49 35.490002 37.98 42.98 48.48&quot;
                     y=&quot;0&quot;
                     sodipodi:role=&quot;line&quot;
                     id=&quot;tspan1430&quot;&gt;SubDevices&lt;/tspan&gt;&lt;/text&gt;&lt;/g&gt;&lt;/g&gt;&lt;path
               d=&quot;M 131.31,410.03 H 273.7 v 28.346 H 131.31 Z&quot;
               style=&quot;fill:#d9958f;fill-opacity:1;fill-rule:evenodd;stroke:none&quot;
               id=&quot;path1434&quot; /&gt;&lt;path
               d=&quot;M 131.31,410.03 H 273.7 v 28.346 H 131.31 Z&quot;
               style=&quot;fill:none;stroke:#000000;stroke-width:0.24;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
               id=&quot;path1436&quot; /&gt;&lt;g
               id=&quot;g1438&quot;&gt;&lt;g
                 id=&quot;g1440&quot;
                 clip-path=&quot;url(#clipPath1444)&quot;&gt;&lt;text
                   transform=&quot;matrix(1,0,0,-1,170.08,427.04)&quot;
                   style=&quot;font-style:italic;font-variant:normal;font-weight:normal;font-size:10px;font-family:Arial;-inkscape-font-specification:Arial-ItalicMT;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
                   id=&quot;text1448&quot;&gt;&lt;tspan
                     x=&quot;0 6.5 8.9899998 14.49 19.99 25.49 27.98 34.48 39.98 42.970001 48.970001 53.970001 59.470001&quot;
                     y=&quot;0&quot;
                     sodipodi:role=&quot;line&quot;
                     id=&quot;tspan1446&quot;&gt;SignalSetType&lt;/tspan&gt;&lt;/text&gt;&lt;/g&gt;&lt;/g&gt;&lt;g
               id=&quot;g1450&quot;&gt;&lt;g
                 id=&quot;g1452&quot;
                 clip-path=&quot;url(#clipPath1456)&quot;&gt;&lt;text
                   transform=&quot;matrix(1,0,0,-1,181.2,415.04)&quot;
                   style=&quot;font-variant:normal;font-weight:normal;font-size:10.025px;font-family:Arial;-inkscape-font-specification:ArialMT;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
                   id=&quot;text1460&quot;&gt;&lt;tspan
                     x=&quot;0 6.4962001 8.9823999 14.486125 19.989849 25.493574 27.979774 34.475975 39.979698&quot;
                     y=&quot;0&quot;
                     sodipodi:role=&quot;line&quot;
                     id=&quot;tspan1458&quot;&gt;SignalSet&lt;/tspan&gt;&lt;/text&gt;&lt;/g&gt;&lt;/g&gt;&lt;path
               d=&quot;M 75.7,513.89 V 424.2 h 55.61&quot;
               style=&quot;fill:none;stroke:#000000;stroke-width:0.24;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
               id=&quot;path1462&quot; /&gt;&lt;path
               d=&quot;m 127.17,426.27 v -4.14&quot;
               style=&quot;fill:none;stroke:#000000;stroke-width:0.24;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
               id=&quot;path1464&quot; /&gt;&lt;path
               d=&quot;m 180.02,152 h 137.45 c 0.07,0 0.12,-0.05 0.12,-0.12 v -20.14 c 0,-0.07 -0.05,-0.12 -0.12,-0.12 H 180.02 c -0.07,0 -0.12,0.05 -0.12,0.12 v 20.14 c 0,0.07 0.05,0.12 0.12,0.12 z&quot;
               style=&quot;fill:#4979c0;fill-opacity:0.25098;fill-rule:evenodd;stroke:none&quot;
               id=&quot;path1466&quot; /&gt;&lt;path
               d=&quot;m 171.02,140.74 h 137.45 v 20.142 H 171.02 Z&quot;
               style=&quot;fill:#e8eef7;fill-opacity:1;fill-rule:evenodd;stroke:none&quot;
               id=&quot;path1468&quot; /&gt;&lt;path
               d=&quot;m 171.02,140.74 h 137.45 v 20.142 H 171.02 Z&quot;
               style=&quot;fill:none;stroke:#000000;stroke-width:0.24;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
               id=&quot;path1470&quot; /&gt;&lt;g
               id=&quot;g1472&quot;&gt;&lt;g
                 id=&quot;g1474&quot;
                 clip-path=&quot;url(#clipPath1478)&quot;&gt;&lt;text
                   transform=&quot;matrix(1,0,0,-1,197.6,147.42)&quot;
                   style=&quot;font-style:italic;font-variant:normal;font-weight:normal;font-size:10px;font-family:Arial;-inkscape-font-specification:Arial-ItalicMT;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
                   id=&quot;text1482&quot;&gt;&lt;tspan
                     x=&quot;0 2.99 9.9899998 15.49 20.49 22.98 27.98 33.48 40.48 45.98 51.48 53.970001 56.470001 62.459999 68.459999 73.459999 78.959999&quot;
                     y=&quot;0&quot;
                     sodipodi:role=&quot;line&quot;
                     id=&quot;tspan1480&quot;&gt;IDeviceHealthType&lt;/tspan&gt;&lt;/text&gt;&lt;/g&gt;&lt;/g&gt;&lt;path
               d=&quot;m 343.86,92.549 h 137.45 v 28.346 H 343.86 Z&quot;
               style=&quot;fill:#e8eef7;fill-opacity:1;fill-rule:evenodd;stroke:none&quot;
               id=&quot;path1484&quot; /&gt;&lt;path
               d=&quot;m 343.86,92.549 h 137.45 v 28.346 H 343.86 Z&quot;
               style=&quot;fill:none;stroke:#000000;stroke-width:0.24;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
               id=&quot;path1486&quot; /&gt;&lt;g
               id=&quot;g1488&quot;&gt;&lt;g
                 id=&quot;g1490&quot;
                 clip-path=&quot;url(#clipPath1494)&quot;&gt;&lt;text
                   transform=&quot;matrix(1,0,0,-1,360.8,109.29)&quot;
                   style=&quot;font-style:italic;font-variant:normal;font-weight:normal;font-size:10px;font-family:Arial;-inkscape-font-specification:Arial-ItalicMT;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
                   id=&quot;text1498&quot;&gt;&lt;tspan
                     x=&quot;0 2.99 5.9899998 11.51 14 21.02 23.51 28.51 31.030001 33.52 39.040001 44.560001 50.080002 53.57 58.57 65.120003 70.639999 73.629997 76.629997 81.629997 88.169998 93.169998 98.730003&quot;
                     y=&quot;0&quot;
                     sodipodi:role=&quot;line&quot;
                     id=&quot;tspan1496&quot;&gt;IrdiDictionaryEntryType&lt;/tspan&gt;&lt;/text&gt;&lt;/g&gt;&lt;/g&gt;&lt;g
               id=&quot;g1500&quot;&gt;&lt;g
                 id=&quot;g1502&quot;
                 clip-path=&quot;url(#clipPath1506)&quot;&gt;&lt;text
                   transform=&quot;matrix(1,0,0,-1,358,97.293)&quot;
                   style=&quot;font-variant:normal;font-weight:normal;font-size:10px;font-family:Arial;-inkscape-font-specification:ArialMT;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
                   id=&quot;text1510&quot;&gt;&lt;tspan
                     x=&quot;0 5.5 11 16.5 22 24.99 30.49 33.48 35.98 38.970001 44.470001 49.970001 55.470001 60.970001 66.470001 72.459999 78.959999&quot;
                     y=&quot;0&quot;
                     sodipodi:role=&quot;line&quot;
                     id=&quot;tspan1508&quot;&gt;0112/2///61987#AB&lt;/tspan&gt;&lt;/text&gt;&lt;/g&gt;&lt;/g&gt;&lt;g
               id=&quot;g1512&quot;&gt;&lt;g
                 id=&quot;g1514&quot;
                 clip-path=&quot;url(#clipPath1518)&quot;&gt;&lt;text
                   transform=&quot;matrix(1,0,0,-1,443.67,97.293)&quot;
                   style=&quot;font-variant:normal;font-weight:normal;font-size:10px;font-family:Arial;-inkscape-font-specification:ArialMT;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
                   id=&quot;text1522&quot;&gt;&lt;tspan
                     x=&quot;0 7 12.99 18.49&quot;
                     y=&quot;0&quot;
                     sodipodi:role=&quot;line&quot;
                     id=&quot;tspan1520&quot;&gt;N972&lt;/tspan&gt;&lt;/text&gt;&lt;/g&gt;&lt;/g&gt;&lt;path
               d=&quot;m 225.52,106.99 h 16.7 v -0.27 h 101.64&quot;
               style=&quot;fill:none;stroke:#000000;stroke-width:0.24;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
               id=&quot;path1524&quot; /&gt;&lt;path
               d=&quot;m 341.1,103.96 2.76,2.76 -2.76,2.76&quot;
               style=&quot;fill:none;stroke:#000000;stroke-width:0.24;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
               id=&quot;path1526&quot; /&gt;&lt;path
               d=&quot;m 250.32,101.92 h 68.465 v 9.5999 H 250.32 Z&quot;
               style=&quot;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none&quot;
               id=&quot;path1528&quot; /&gt;&lt;g
               id=&quot;g1530&quot;&gt;&lt;g
                 id=&quot;g1532&quot;
                 clip-path=&quot;url(#clipPath1536)&quot;&gt;&lt;text
                   transform=&quot;matrix(1,0,0,-1,250.45,103.89)&quot;
                   style=&quot;font-variant:normal;font-weight:normal;font-size:8px;font-family:Arial;-inkscape-font-specification:ArialMT;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
                   id=&quot;text1540&quot;&gt;&lt;tspan
                     x=&quot;0 5.9920001 9.9919996 13.992 19.983999 21.976 25.976 27.976 29.968 33.967999 38.464001 42.959999 45.952 49.952 54.952 59.448002 61.944 64.440002&quot;
                     y=&quot;0&quot;
                     sodipodi:role=&quot;line&quot;
                     id=&quot;tspan1538&quot;&gt;HasDictionaryEntry&lt;/tspan&gt;&lt;/text&gt;&lt;/g&gt;&lt;/g&gt;&lt;path
               d=&quot;m 672.26,71.65 c 3.13,0 5.67,2.539 5.67,5.67 v 17.008 c 0,3.131 -2.54,5.669 -5.67,5.669 h -86.81 c -3.13,0 -5.67,-2.538 -5.67,-5.669 V 77.32 c 0,-3.131 2.54,-5.67 5.67,-5.67 z&quot;
               style=&quot;fill:#e8eef7;fill-opacity:1;fill-rule:evenodd;stroke:none&quot;
               id=&quot;path1542&quot; /&gt;&lt;path
               d=&quot;m 672.26,71.65 c 3.13,0 5.67,2.539 5.67,5.67 v 17.008 c 0,3.131 -2.54,5.669 -5.67,5.669 h -86.81 c -3.13,0 -5.67,-2.538 -5.67,-5.669 V 77.32 c 0,-3.131 2.54,-5.67 5.67,-5.67 z&quot;
               style=&quot;fill:none;stroke:#000000;stroke-width:0.24;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
               id=&quot;path1544&quot; /&gt;&lt;g
               id=&quot;g1546&quot;&gt;&lt;g
                 id=&quot;g1548&quot;
                 clip-path=&quot;url(#clipPath1552)&quot;&gt;&lt;text
                   transform=&quot;matrix(1,0,0,-1,592.2,82.393)&quot;
                   style=&quot;font-variant:normal;font-weight:normal;font-size:10.025px;font-family:Arial;-inkscape-font-specification:ArialMT;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
                   id=&quot;text1556&quot;&gt;&lt;tspan
                     x=&quot;0 6.9974499 12.9924 18.0049 19.989849 25.00235 26.987301 32.98225 38.485973 45.483425 50.987148 56.490875 62.485825 64.982048 70.485779&quot;
                     y=&quot;0&quot;
                     sodipodi:role=&quot;line&quot;
                     id=&quot;tspan1554&quot;&gt;RevisionCounter&lt;/tspan&gt;&lt;/text&gt;&lt;/g&gt;&lt;/g&gt;&lt;path
               d=&quot;M 801.61,71.65 H 939.06 V 99.996 H 801.61 Z&quot;
               style=&quot;fill:#e8eef7;fill-opacity:1;fill-rule:evenodd;stroke:none&quot;
               id=&quot;path1558&quot; /&gt;&lt;path
               d=&quot;M 801.61,71.65 H 939.06 V 99.996 H 801.61 Z&quot;
               style=&quot;fill:none;stroke:#000000;stroke-width:0.24;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
               id=&quot;path1560&quot; /&gt;&lt;g
               id=&quot;g1562&quot;&gt;&lt;g
                 id=&quot;g1564&quot;
                 clip-path=&quot;url(#clipPath1568)&quot;&gt;&lt;text
                   transform=&quot;matrix(1,0,0,-1,818.8,88.393)&quot;
                   style=&quot;font-style:italic;font-variant:normal;font-weight:normal;font-size:10.025px;font-family:Arial;-inkscape-font-specification:Arial-ItalicMT;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
                   id=&quot;text1572&quot;&gt;&lt;tspan
                     x=&quot;0 2.9874499 5.9849248 11.48865 13.97485 20.9723 23.4585 28.471001 30.957199 33.443401 38.947124 44.450851 49.954575 53.443275 58.455776 64.941948 70.445679 73.433128 76.430603 81.4431 87.91925 92.931747 98.415428&quot;
                     y=&quot;0&quot;
                     sodipodi:role=&quot;line&quot;
                     id=&quot;tspan1570&quot;&gt;IrdiDictionaryEntryType&lt;/tspan&gt;&lt;/text&gt;&lt;/g&gt;&lt;/g&gt;&lt;g
               id=&quot;g1574&quot;&gt;&lt;g
                 id=&quot;g1576&quot;
                 clip-path=&quot;url(#clipPath1580)&quot;&gt;&lt;text
                   transform=&quot;matrix(1,0,0,-1,815.97,76.368)&quot;
                   style=&quot;font-variant:normal;font-weight:normal;font-size:10px;font-family:Arial;-inkscape-font-specification:ArialMT;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
                   id=&quot;text1584&quot;&gt;&lt;tspan
                     x=&quot;0 5.5 11 16.5 22 24.99 30.49 33.48 35.98 38.970001 44.470001 49.970001 55.470001 60.970001 66.470001&quot;
                     y=&quot;0&quot;
                     sodipodi:role=&quot;line&quot;
                     id=&quot;tspan1582&quot;&gt;0112/2///61987#&lt;/tspan&gt;&lt;/text&gt;&lt;/g&gt;&lt;/g&gt;&lt;g
               id=&quot;g1586&quot;&gt;&lt;g
                 id=&quot;g1588&quot;
                 clip-path=&quot;url(#clipPath1592)&quot;&gt;&lt;text
                   transform=&quot;matrix(1,0,0,-1,888.3,76.368)&quot;
                   style=&quot;font-variant:normal;font-weight:normal;font-size:10px;font-family:Arial;-inkscape-font-specification:ArialMT;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
                   id=&quot;text1596&quot;&gt;&lt;tspan
                     x=&quot;0 6.5300002 13.54 20.559999 26.08 31.6&quot;
                     y=&quot;0&quot;
                     sodipodi:role=&quot;line&quot;
                     id=&quot;tspan1594&quot;&gt;ABN603&lt;/tspan&gt;&lt;/text&gt;&lt;/g&gt;&lt;/g&gt;&lt;path
               d=&quot;M 677.93,85.824 H 801.61&quot;
               style=&quot;fill:none;stroke:#000000;stroke-width:0.24;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
               id=&quot;path1598&quot; /&gt;&lt;path
               d=&quot;m 798.85,83.064 2.76,2.76 -2.76,2.76&quot;
               style=&quot;fill:none;stroke:#000000;stroke-width:0.24;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
               id=&quot;path1600&quot; /&gt;&lt;path
               d=&quot;m 705.54,81.023 h 68.465 v 9.5999 H 705.54 Z&quot;
               style=&quot;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none&quot;
               id=&quot;path1602&quot; /&gt;&lt;g
               id=&quot;g1604&quot;&gt;&lt;g
                 id=&quot;g1606&quot;
                 clip-path=&quot;url(#clipPath1610)&quot;&gt;&lt;text
                   transform=&quot;matrix(1,0,0,-1,705.9,82.993)&quot;
                   style=&quot;font-variant:normal;font-weight:normal;font-size:8.025px;font-family:Arial;-inkscape-font-specification:ArialMT;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
                   id=&quot;text1614&quot;&gt;&lt;tspan
                     x=&quot;0 5.9946752 9.9911251 14.003625 19.98225 21.97245 25.984949 27.975149 29.965349 33.9618 38.455799 42.949799 45.943127 49.955624 54.939152 59.433151 61.928925 64.432724&quot;
                     y=&quot;0&quot;
                     sodipodi:role=&quot;line&quot;
                     id=&quot;tspan1612&quot;&gt;HasDictionaryEntry&lt;/tspan&gt;&lt;/text&gt;&lt;/g&gt;&lt;/g&gt;&lt;path
               d=&quot;M 75.7,513.89 V 496.1 H 528.16 V 85.824 h 51.62&quot;
               style=&quot;fill:none;stroke:#000000;stroke-width:0.24;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
               id=&quot;path1616&quot; /&gt;&lt;path
               d=&quot;m 573.57,87.894 v -4.14 m 2.07,4.14 v -4.14&quot;
               style=&quot;fill:none;stroke:#000000;stroke-width:0.24;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
               id=&quot;path1618&quot; /&gt;&lt;path
               d=&quot;M 75.7,513.89 V 496.1 H 528.16 V 120.88 h 51.74&quot;
               style=&quot;fill:none;stroke:#000000;stroke-width:0.24;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
               id=&quot;path1620&quot; /&gt;&lt;path
               d=&quot;m 573.69,122.95 v -4.14 m 2.07,4.14 v -4.14&quot;
               style=&quot;fill:none;stroke:#000000;stroke-width:0.24;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
               id=&quot;path1622&quot; /&gt;&lt;path
               d=&quot;m 345.14,316.49 h 137.45 v 28.346 H 345.14 Z&quot;
               style=&quot;fill:#e8eef7;fill-opacity:1;fill-rule:evenodd;stroke:none&quot;
               id=&quot;path1624&quot; /&gt;&lt;path
               d=&quot;m 345.14,316.49 h 137.45 v 28.346 H 345.14 Z&quot;
               style=&quot;fill:none;stroke:#000000;stroke-width:0.24;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
               id=&quot;path1626&quot; /&gt;&lt;g
               id=&quot;g1628&quot;&gt;&lt;g
                 id=&quot;g1630&quot;
                 clip-path=&quot;url(#clipPath1634)&quot;&gt;&lt;text
                   transform=&quot;matrix(1,0,0,-1,362.08,333.42)&quot;
                   style=&quot;font-style:italic;font-variant:normal;font-weight:normal;font-size:10px;font-family:Arial;-inkscape-font-specification:Arial-ItalicMT;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
                   id=&quot;text1638&quot;&gt;&lt;tspan
                     x=&quot;0 3.01 6.0300002 11.55 14.06 21.08 23.59 28.59 31.139999 33.650002 39.169998 44.689999 50.209999 53.73 58.73 65.279999 70.800003 73.809998 76.830002 81.830002 88.370003 93.370003 98.93&quot;
                     y=&quot;0&quot;
                     sodipodi:role=&quot;line&quot;
                     id=&quot;tspan1636&quot;&gt;IrdiDictionaryEntryType&lt;/tspan&gt;&lt;/text&gt;&lt;/g&gt;&lt;/g&gt;&lt;g
               id=&quot;g1640&quot;&gt;&lt;g
                 id=&quot;g1642&quot;
                 clip-path=&quot;url(#clipPath1646)&quot;&gt;&lt;text
                   transform=&quot;matrix(1,0,0,-1,359.27,321.42)&quot;
                   style=&quot;font-variant:normal;font-weight:normal;font-size:10.025px;font-family:Arial;-inkscape-font-specification:ArialMT;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
                   id=&quot;text1650&quot;&gt;&lt;tspan
                     x=&quot;0 5.5037251 11.00745 16.511175 22.0149 25.00235 30.506075 33.493526 35.98975 38.9772 44.480927 49.98465 55.488377 60.9921 66.495827&quot;
                     y=&quot;0&quot;
                     sodipodi:role=&quot;line&quot;
                     id=&quot;tspan1648&quot;&gt;0112/2///61987#&lt;/tspan&gt;&lt;/text&gt;&lt;/g&gt;&lt;/g&gt;&lt;g
               id=&quot;g1652&quot;&gt;&lt;g
                 id=&quot;g1654&quot;
                 clip-path=&quot;url(#clipPath1658)&quot;&gt;&lt;text
                   transform=&quot;matrix(1,0,0,-1,431.6,321.42)&quot;
                   style=&quot;font-variant:normal;font-weight:normal;font-size:10.025px;font-family:Arial;-inkscape-font-specification:ArialMT;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
                   id=&quot;text1662&quot;&gt;&lt;tspan
                     x=&quot;0 6.4962001 13.483625 20.481075 25.9848 31.488525&quot;
                     y=&quot;0&quot;
                     sodipodi:role=&quot;line&quot;
                     id=&quot;tspan1660&quot;&gt;ABN597&lt;/tspan&gt;&lt;/text&gt;&lt;/g&gt;&lt;/g&gt;&lt;path
               d=&quot;m 343.98,273.97 h 137.45 v 28.346 H 343.98 Z&quot;
               style=&quot;fill:#e8eef7;fill-opacity:1;fill-rule:evenodd;stroke:none&quot;
               id=&quot;path1664&quot; /&gt;&lt;path
               d=&quot;m 343.98,273.97 h 137.45 v 28.346 H 343.98 Z&quot;
               style=&quot;fill:none;stroke:#000000;stroke-width:0.24;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
               id=&quot;path1666&quot; /&gt;&lt;g
               id=&quot;g1668&quot;&gt;&lt;g
                 id=&quot;g1670&quot;
                 clip-path=&quot;url(#clipPath1674)&quot;&gt;&lt;text
                   transform=&quot;matrix(1,0,0,-1,360.93,290.87)&quot;
                   style=&quot;font-style:italic;font-variant:normal;font-weight:normal;font-size:10px;font-family:Arial;-inkscape-font-specification:Arial-ItalicMT;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
                   id=&quot;text1678&quot;&gt;&lt;tspan
                     x=&quot;0 2.99 5.9899998 11.49 13.98 20.98 23.469999 28.469999 30.969999 33.459999 38.959999 44.459999 49.959999 53.450001 58.450001 64.949997 70.449997 73.440002 76.440002 81.440002 87.93 92.93 98.43&quot;
                     y=&quot;0&quot;
                     sodipodi:role=&quot;line&quot;
                     id=&quot;tspan1676&quot;&gt;IrdiDictionaryEntryType&lt;/tspan&gt;&lt;/text&gt;&lt;/g&gt;&lt;/g&gt;&lt;g
               id=&quot;g1680&quot;&gt;&lt;g
                 id=&quot;g1682&quot;
                 clip-path=&quot;url(#clipPath1686)&quot;&gt;&lt;text
                   transform=&quot;matrix(1,0,0,-1,358.13,278.87)&quot;
                   style=&quot;font-variant:normal;font-weight:normal;font-size:10.025px;font-family:Arial;-inkscape-font-specification:ArialMT;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
                   id=&quot;text1690&quot;&gt;&lt;tspan
                     x=&quot;0 5.5037251 11.00745 16.511175 22.0149 25.00235 30.506075 33.493526 35.98975 38.9772 44.480927 49.98465 55.488377 60.9921 66.495827&quot;
                     y=&quot;0&quot;
                     sodipodi:role=&quot;line&quot;
                     id=&quot;tspan1688&quot;&gt;0112/2///61987#&lt;/tspan&gt;&lt;/text&gt;&lt;/g&gt;&lt;/g&gt;&lt;g
               id=&quot;g1692&quot;&gt;&lt;g
                 id=&quot;g1694&quot;
                 clip-path=&quot;url(#clipPath1698)&quot;&gt;&lt;text
                   transform=&quot;matrix(1,0,0,-1,430.45,278.87)&quot;
                   style=&quot;font-variant:normal;font-weight:normal;font-size:10.025px;font-family:Arial;-inkscape-font-specification:ArialMT;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
                   id=&quot;text1702&quot;&gt;&lt;tspan
                     x=&quot;0 6.4962001 13.483625 20.481075 25.9848 31.488525&quot;
                     y=&quot;0&quot;
                     sodipodi:role=&quot;line&quot;
                     id=&quot;tspan1700&quot;&gt;ABN604&lt;/tspan&gt;&lt;/text&gt;&lt;/g&gt;&lt;/g&gt;&lt;path
               d=&quot;m 671.74,36.698 c 3.13,0 5.67,2.538 5.67,5.669 v 17.008 c 0,3.131 -2.54,5.669 -5.67,5.669 h -86.81 c -3.13,0 -5.67,-2.538 -5.67,-5.669 V 42.367 c 0,-3.131 2.54,-5.669 5.67,-5.669 z&quot;
               style=&quot;fill:#e8eef7;fill-opacity:1;fill-rule:evenodd;stroke:none&quot;
               id=&quot;path1704&quot; /&gt;&lt;path
               d=&quot;m 671.74,36.698 c 3.13,0 5.67,2.538 5.67,5.669 v 17.008 c 0,3.131 -2.54,5.669 -5.67,5.669 h -86.81 c -3.13,0 -5.67,-2.538 -5.67,-5.669 V 42.367 c 0,-3.131 2.54,-5.669 5.67,-5.669 z&quot;
               style=&quot;fill:none;stroke:#000000;stroke-width:0.24;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
               id=&quot;path1706&quot; /&gt;&lt;g
               id=&quot;g1708&quot;&gt;&lt;g
                 id=&quot;g1710&quot;
                 clip-path=&quot;url(#clipPath1714)&quot;&gt;&lt;text
                   transform=&quot;matrix(1,0,0,-1,586.1,47.393)&quot;
                   style=&quot;font-variant:normal;font-weight:normal;font-size:10px;font-family:Arial;-inkscape-font-specification:ArialMT;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
                   id=&quot;text1718&quot;&gt;&lt;tspan
                     x=&quot;0 6.5300002 10.05 15.57 21.09 26.610001 31.610001 34.650002 37.169998 43.189999 48.189999 50.740002 56.259998 61.779999 66.779999 72.82 79.839996 83.360001&quot;
                     y=&quot;0&quot;
                     sodipodi:role=&quot;line&quot;
                     id=&quot;tspan1716&quot;&gt;ProductInstanceUri&lt;/tspan&gt;&lt;/text&gt;&lt;/g&gt;&lt;/g&gt;&lt;path
               d=&quot;M 75.7,513.89 V 496.1 H 528.16 V 50.871 h 51.1&quot;
               style=&quot;fill:none;stroke:#000000;stroke-width:0.24;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
               id=&quot;path1720&quot; /&gt;&lt;path
               d=&quot;m 573.05,52.941 v -4.14 m 2.07,4.14 v -4.14&quot;
               style=&quot;fill:none;stroke:#000000;stroke-width:0.24;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
               id=&quot;path1722&quot; /&gt;&lt;path
               d=&quot;M 801.34,36.698 H 938.79 V 65.044 H 801.34 Z&quot;
               style=&quot;fill:#e8eef7;fill-opacity:1;fill-rule:evenodd;stroke:none&quot;
               id=&quot;path1724&quot; /&gt;&lt;path
               d=&quot;M 801.34,36.698 H 938.79 V 65.044 H 801.34 Z&quot;
               style=&quot;fill:none;stroke:#000000;stroke-width:0.24;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
               id=&quot;path1726&quot; /&gt;&lt;g
               id=&quot;g1728&quot;&gt;&lt;g
                 id=&quot;g1730&quot;
                 clip-path=&quot;url(#clipPath1734)&quot;&gt;&lt;text
                   transform=&quot;matrix(1,0,0,-1,818.52,53.418)&quot;
                   style=&quot;font-style:italic;font-variant:normal;font-weight:normal;font-size:10.025px;font-family:Arial;-inkscape-font-specification:Arial-ItalicMT;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
                   id=&quot;text1738&quot;&gt;&lt;tspan
                     x=&quot;0 2.9874499 5.9849248 11.48865 13.97485&quot;
                     y=&quot;0&quot;
                     sodipodi:role=&quot;line&quot;
                     id=&quot;tspan1736&quot;&gt;IrdiD&lt;/tspan&gt;&lt;/text&gt;&lt;/g&gt;&lt;/g&gt;&lt;g
               id=&quot;g1740&quot;&gt;&lt;g
                 id=&quot;g1742&quot;
                 clip-path=&quot;url(#clipPath1746)&quot;&gt;&lt;text
                   transform=&quot;matrix(1,0,0,-1,839.65,53.418)&quot;
                   style=&quot;font-style:italic;font-variant:normal;font-weight:normal;font-size:10.025px;font-family:Arial;-inkscape-font-specification:Arial-ItalicMT;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
                   id=&quot;text1750&quot;&gt;&lt;tspan
                     x=&quot;0 2.0050001 7.0174999 9.9949245 11.999925 17.994875 23.4986 29.002325 31.9998 37.012299 43.9897 49.493423 51.989651 55.478352&quot;
                     y=&quot;0&quot;
                     sodipodi:role=&quot;line&quot;
                     id=&quot;tspan1748&quot;&gt;ictionaryEntry&lt;/tspan&gt;&lt;/text&gt;&lt;/g&gt;&lt;/g&gt;&lt;g
               id=&quot;g1752&quot;&gt;&lt;g
                 id=&quot;g1754&quot;
                 clip-path=&quot;url(#clipPath1758)&quot;&gt;&lt;text
                   transform=&quot;matrix(1,0,0,-1,900.25,53.418)&quot;
                   style=&quot;font-style:italic;font-variant:normal;font-weight:normal;font-size:10.025px;font-family:Arial;-inkscape-font-specification:Arial-ItalicMT;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
                   id=&quot;text1762&quot;&gt;&lt;tspan
                     x=&quot;0 6.0049748 11.017475 16.50115&quot;
                     y=&quot;0&quot;
                     sodipodi:role=&quot;line&quot;
                     id=&quot;tspan1760&quot;&gt;Type&lt;/tspan&gt;&lt;/text&gt;&lt;/g&gt;&lt;/g&gt;&lt;g
               id=&quot;g1764&quot;&gt;&lt;g
                 id=&quot;g1766&quot;
                 clip-path=&quot;url(#clipPath1770)&quot;&gt;&lt;text
                   transform=&quot;matrix(1,0,0,-1,815.72,41.393)&quot;
                   style=&quot;font-variant:normal;font-weight:normal;font-size:10px;font-family:Arial;-inkscape-font-specification:ArialMT;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
                   id=&quot;text1774&quot;&gt;&lt;tspan
                     x=&quot;0 5.5 11 16.5 22 24.99 30.49 33.48 35.98 38.970001 44.470001 49.970001 55.470001 60.970001 66.470001&quot;
                     y=&quot;0&quot;
                     sodipodi:role=&quot;line&quot;
                     id=&quot;tspan1772&quot;&gt;0112/2///61987#&lt;/tspan&gt;&lt;/text&gt;&lt;/g&gt;&lt;/g&gt;&lt;g
               id=&quot;g1776&quot;&gt;&lt;g
                 id=&quot;g1778&quot;
                 clip-path=&quot;url(#clipPath1782)&quot;&gt;&lt;text
                   transform=&quot;matrix(1,0,0,-1,888.05,41.393)&quot;
                   style=&quot;font-variant:normal;font-weight:normal;font-size:10px;font-family:Arial;-inkscape-font-specification:ArialMT;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
                   id=&quot;text1786&quot;&gt;&lt;tspan
                     x=&quot;0 6.5 13.49 20.49 25.99 31.49&quot;
                     y=&quot;0&quot;
                     sodipodi:role=&quot;line&quot;
                     id=&quot;tspan1784&quot;&gt;ABN590&lt;/tspan&gt;&lt;/text&gt;&lt;/g&gt;&lt;/g&gt;&lt;path
               d=&quot;M 677.41,50.871 H 801.34&quot;
               style=&quot;fill:none;stroke:#000000;stroke-width:0.24;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
               id=&quot;path1788&quot; /&gt;&lt;path
               d=&quot;m 798.58,48.111 2.76,2.76 -2.76,2.76&quot;
               style=&quot;fill:none;stroke:#000000;stroke-width:0.24;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
               id=&quot;path1790&quot; /&gt;&lt;path
               d=&quot;m 705.14,46.071 h 68.465 v 9.5999 H 705.14 Z&quot;
               style=&quot;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none&quot;
               id=&quot;path1792&quot; /&gt;&lt;g
               id=&quot;g1794&quot;&gt;&lt;g
                 id=&quot;g1796&quot;
                 clip-path=&quot;url(#clipPath1800)&quot;&gt;&lt;text
                   transform=&quot;matrix(1,0,0,-1,705.5,47.993)&quot;
                   style=&quot;font-variant:normal;font-weight:normal;font-size:8px;font-family:Arial;-inkscape-font-specification:ArialMT;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
                   id=&quot;text1804&quot;&gt;&lt;tspan
                     x=&quot;0 5.9920001 9.9919996 13.992 19.983999 21.976 25.976 27.976 29.968 33.967999 38.464001 42.959999 45.952 49.952 54.952 59.448002 61.944 64.440002&quot;
                     y=&quot;0&quot;
                     sodipodi:role=&quot;line&quot;
                     id=&quot;tspan1802&quot;&gt;HasDictionaryEntry&lt;/tspan&gt;&lt;/text&gt;&lt;/g&gt;&lt;/g&gt;&lt;path
               d=&quot;M 175.55,463.81 H 313 c 0.07,0 0.12,-0.05 0.12,-0.12 v -20.14 c 0,-0.07 -0.05,-0.12 -0.12,-0.12 H 175.55 c -0.06,0 -0.12,0.05 -0.12,0.12 v 20.14 c 0,0.07 0.06,0.12 0.12,0.12 z&quot;
               style=&quot;fill:#4979c0;fill-opacity:0.25098;fill-rule:evenodd;stroke:none&quot;
               id=&quot;path1806&quot; /&gt;&lt;path
               d=&quot;M 166.55,452.55 H 304 v 20.142 H 166.55 Z&quot;
               style=&quot;fill:#d9958f;fill-opacity:1;fill-rule:evenodd;stroke:none&quot;
               id=&quot;path1808&quot; /&gt;&lt;path
               d=&quot;M 166.55,452.55 H 304 v 20.142 H 166.55 Z&quot;
               style=&quot;fill:none;stroke:#000000;stroke-width:0.24;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
               id=&quot;path1810&quot; /&gt;&lt;g
               id=&quot;g1812&quot;&gt;&lt;g
                 id=&quot;g1814&quot;
                 clip-path=&quot;url(#clipPath1818)&quot;&gt;&lt;text
                   transform=&quot;matrix(1,0,0,-1,201.47,459.49)&quot;
                   style=&quot;font-style:italic;font-variant:normal;font-weight:normal;font-size:10.025px;font-family:Arial;-inkscape-font-specification:Arial-ItalicMT;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
                   id=&quot;text1822&quot;&gt;&lt;tspan
                     x=&quot;0 2.9874499 9.4836502 11.48865 16.992374 22.987326 28.491051 30.49605 36.992249 42.987202 45.483425 51.4884 56.5009 62.4758&quot;
                     y=&quot;0&quot;
                     sodipodi:role=&quot;line&quot;
                     id=&quot;tspan1820&quot;&gt;ISignalSetType&lt;/tspan&gt;&lt;/text&gt;&lt;/g&gt;&lt;/g&gt;&lt;path
               d=&quot;m 340.01,507.59 h 171.35 v 28.346 H 340.01 Z&quot;
               style=&quot;fill:#e8eef7;fill-opacity:1;fill-rule:evenodd;stroke:none&quot;
               id=&quot;path1824&quot; /&gt;&lt;path
               d=&quot;m 340.01,507.59 h 171.35 v 28.346 H 340.01 Z&quot;
               style=&quot;fill:none;stroke:#000000;stroke-width:0.24;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
               id=&quot;path1826&quot; /&gt;&lt;g
               id=&quot;g1828&quot;&gt;&lt;g
                 id=&quot;g1830&quot;
                 clip-path=&quot;url(#clipPath1834)&quot;&gt;&lt;text
                   transform=&quot;matrix(1,0,0,-1,347.6,524.99)&quot;
                   style=&quot;font-variant:normal;font-weight:normal;font-size:11.025px;font-family:Arial;-inkscape-font-specification:ArialMT;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
                   id=&quot;text1838&quot;&gt;&lt;tspan
                     x=&quot;0 2.9988 10.484775 18.4779 21.4767 27.4743 33.471901 39.469501 45.963226 51.960827 54.959625 60.472126 62.952751 68.950348 74.462852 79.975349 82.952103 85.443748 91.441353 97.935074 103.93268 106.93147 109.42313 112.42193 114.91357 120.91118 124.4061 127.89 133.8876 139.88519 142.37685 148.37445 156.36757&quot;
                     y=&quot;0&quot;
                     sodipodi:role=&quot;line&quot;
                     id=&quot;tspan1836&quot;&gt;IEC 61987 class identifier below &lt;/tspan&gt;&lt;/text&gt;&lt;/g&gt;&lt;/g&gt;&lt;g
               id=&quot;g1840&quot;&gt;&lt;g
                 id=&quot;g1842&quot;
                 clip-path=&quot;url(#clipPath1846)&quot;&gt;&lt;text
                   transform=&quot;matrix(1,0,0,-1,365.92,511.77)&quot;
                   style=&quot;font-variant:normal;font-weight:normal;font-size:11px;font-family:Arial;-inkscape-font-specification:ArialMT;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
                   id=&quot;text1850&quot;&gt;&lt;tspan
                     x=&quot;0 5.9949999 11.99 18.48 24.475 27.478001 33.473 36.476002 39.963001 42.966 48.960999 54.956001 60.951 67.441002 73.435997 79.431 86.921997 93.917999 101.409 107.404 113.894&quot;
                     y=&quot;0&quot;
                     sodipodi:role=&quot;line&quot;
                     id=&quot;tspan1848&quot;&gt;0112/2///61987#ABV000&lt;/tspan&gt;&lt;/text&gt;&lt;/g&gt;&lt;/g&gt;&lt;path
               d=&quot;m 132.16,521.67 h 10.63 v 0.1 h 197.22&quot;
               style=&quot;fill:none;stroke:#000000;stroke-width:0.24;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
               id=&quot;path1852&quot; /&gt;&lt;path
               d=&quot;m 337.25,519.01 2.76,2.76 -2.76,2.76&quot;
               style=&quot;fill:none;stroke:#000000;stroke-width:0.24;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
               id=&quot;path1854&quot; /&gt;&lt;path
               d=&quot;m 206.54,516.7 h 68.465 v 9.5999 H 206.54 Z&quot;
               style=&quot;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none&quot;
               id=&quot;path1856&quot; /&gt;&lt;g
               id=&quot;g1858&quot;&gt;&lt;g
                 id=&quot;g1860&quot;
                 clip-path=&quot;url(#clipPath1864)&quot;&gt;&lt;text
                   transform=&quot;matrix(1,0,0,-1,206.65,519.02)&quot;
                   style=&quot;font-variant:normal;font-weight:normal;font-size:8px;font-family:Arial;-inkscape-font-specification:ArialMT;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
                   id=&quot;text1868&quot;&gt;&lt;tspan
                     x=&quot;0 5.9920001 9.9919996 13.992 19.983999 21.976 25.976 27.976 29.968 33.967999 38.464001 42.959999 45.952 49.952 54.952 59.448002 61.944 64.440002&quot;
                     y=&quot;0&quot;
                     sodipodi:role=&quot;line&quot;
                     id=&quot;tspan1866&quot;&gt;HasDictionaryEntry&lt;/tspan&gt;&lt;/text&gt;&lt;/g&gt;&lt;/g&gt;&lt;path
               d=&quot;m 133.04,242.69 c 0,7.82 21.97,14.17 49.07,14.17 27.11,0 49.08,-6.35 49.08,-14.17 0,-7.83 -21.97,-14.18 -49.08,-14.18 -27.1,0 -49.07,6.35 -49.07,14.18 z&quot;
               style=&quot;fill:#e8eef7;fill-opacity:1;fill-rule:evenodd;stroke:none&quot;
               id=&quot;path1870&quot; /&gt;&lt;path
               d=&quot;m 133.04,242.69 c 0,7.82 21.97,14.17 49.07,14.17 27.11,0 49.08,-6.35 49.08,-14.17 0,-7.83 -21.97,-14.18 -49.08,-14.18 -27.1,0 -49.07,6.35 -49.07,14.18 z&quot;
               style=&quot;fill:none;stroke:#000000;stroke-width:0.24;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
               id=&quot;path1872&quot; /&gt;&lt;g
               id=&quot;g1874&quot;&gt;&lt;g
                 id=&quot;g1876&quot;
                 clip-path=&quot;url(#clipPath1880)&quot;&gt;&lt;text
                   transform=&quot;matrix(1,0,0,-1,152.45,239.37)&quot;
                   style=&quot;font-variant:normal;font-weight:normal;font-size:10px;font-family:Arial;-inkscape-font-specification:ArialMT;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
                   id=&quot;text1884&quot;&gt;&lt;tspan
                     x=&quot;0 6.0300002 11.55 16.549999 19.59 25.110001 28.629999 33.630001 40.68 46.200001 51.200001 56.759998 59.759998&quot;
                     y=&quot;0&quot;
                     sodipodi:role=&quot;line&quot;
                     id=&quot;tspan1882&quot;&gt;FactoryReset &lt;/tspan&gt;&lt;/text&gt;&lt;/g&gt;&lt;/g&gt;&lt;path
               d=&quot;m 345.14,228.51 h 137.45 v 28.346 H 345.14 Z&quot;
               style=&quot;fill:#e8eef7;fill-opacity:1;fill-rule:evenodd;stroke:none&quot;
               id=&quot;path1886&quot; /&gt;&lt;path
               d=&quot;m 345.14,228.51 h 137.45 v 28.346 H 345.14 Z&quot;
               style=&quot;fill:none;stroke:#000000;stroke-width:0.24;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
               id=&quot;path1888&quot; /&gt;&lt;g
               id=&quot;g1890&quot;&gt;&lt;g
                 id=&quot;g1892&quot;
                 clip-path=&quot;url(#clipPath1896)&quot;&gt;&lt;text
                   transform=&quot;matrix(1,0,0,-1,362.08,245.37)&quot;
                   style=&quot;font-style:italic;font-variant:normal;font-weight:normal;font-size:10px;font-family:Arial;-inkscape-font-specification:Arial-ItalicMT;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
                   id=&quot;text1900&quot;&gt;&lt;tspan
                     x=&quot;0 2.99 5.9899998 11.51 14 21.02 23.51 28.51 31.030001 33.52 39.040001 44.560001 50.080002 53.57 58.57 65.120003 70.639999 73.629997 76.629997 81.629997 88.169998 93.169998 98.730003&quot;
                     y=&quot;0&quot;
                     sodipodi:role=&quot;line&quot;
                     id=&quot;tspan1898&quot;&gt;IrdiDictionaryEntryType&lt;/tspan&gt;&lt;/text&gt;&lt;/g&gt;&lt;/g&gt;&lt;g
               id=&quot;g1902&quot;&gt;&lt;g
                 id=&quot;g1904&quot;
                 clip-path=&quot;url(#clipPath1908)&quot;&gt;&lt;text
                   transform=&quot;matrix(1,0,0,-1,359.27,233.37)&quot;
                   style=&quot;font-variant:normal;font-weight:normal;font-size:10px;font-family:Arial;-inkscape-font-specification:ArialMT;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
                   id=&quot;text1912&quot;&gt;&lt;tspan
                     x=&quot;0 5.5 11 16.5 22 24.99 30.49 33.48 35.98 38.970001 44.470001 49.970001 55.470001 60.970001 66.470001&quot;
                     y=&quot;0&quot;
                     sodipodi:role=&quot;line&quot;
                     id=&quot;tspan1910&quot;&gt;0112/2///61987#&lt;/tspan&gt;&lt;/text&gt;&lt;/g&gt;&lt;/g&gt;&lt;g
               id=&quot;g1914&quot;&gt;&lt;g
                 id=&quot;g1916&quot;
                 clip-path=&quot;url(#clipPath1920)&quot;&gt;&lt;text
                   transform=&quot;matrix(1,0,0,-1,431.6,233.37)&quot;
                   style=&quot;font-variant:normal;font-weight:normal;font-size:10px;font-family:Arial;-inkscape-font-specification:ArialMT;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
                   id=&quot;text1924&quot;&gt;&lt;tspan
                     x=&quot;0 6.5 13.49 20.49 25.99 31.49&quot;
                     y=&quot;0&quot;
                     sodipodi:role=&quot;line&quot;
                     id=&quot;tspan1922&quot;&gt;ABN609&lt;/tspan&gt;&lt;/text&gt;&lt;/g&gt;&lt;/g&gt;&lt;path
               d=&quot;m 75.7,513.89 v -271.2 h 57.34&quot;
               style=&quot;fill:none;stroke:#000000;stroke-width:0.24;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
               id=&quot;path1926&quot; /&gt;&lt;path
               d=&quot;m 128.9,244.76 v -4.14&quot;
               style=&quot;fill:none;stroke:#000000;stroke-width:0.24;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
               id=&quot;path1928&quot; /&gt;&lt;g
               id=&quot;g1930&quot;&gt;&lt;path
                 d=&quot;M 132.16,589.57 H 970.15 V 462.62 H 763.69&quot;
                 style=&quot;fill:none;stroke:#000000;stroke-width:0.24;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:3.6, 2.16;stroke-dashoffset:0;stroke-opacity:1&quot;
                 id=&quot;path1932&quot; /&gt;&lt;/g&gt;&lt;path
               d=&quot;m 763.69,465.38 -8.28,-2.76 8.28,-2.76 z&quot;
               style=&quot;fill:none;stroke:#000000;stroke-width:0.24;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
               id=&quot;path1934&quot; /&gt;&lt;path
               d=&quot;m 811.4,459.09 h 45.355 v 9.5999 H 811.4 Z&quot;
               style=&quot;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none&quot;
               id=&quot;path1936&quot; /&gt;&lt;g
               id=&quot;g1938&quot;&gt;&lt;g
                 id=&quot;g1940&quot;
                 clip-path=&quot;url(#clipPath1944)&quot;&gt;&lt;text
                   transform=&quot;matrix(1,0,0,-1,811.82,461.34)&quot;
                   style=&quot;font-variant:normal;font-weight:normal;font-size:8px;font-family:Arial;-inkscape-font-specification:ArialMT;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
                   id=&quot;text1948&quot;&gt;&lt;tspan
                     x=&quot;0 5.9920001 9.9919996 13.992 16.488001 20.983999 22.983999 27.48 29.976 32.472 36.967999 40.967999&quot;
                     y=&quot;0&quot;
                     sodipodi:role=&quot;line&quot;
                     id=&quot;tspan1946&quot;&gt;HasInterface&lt;/tspan&gt;&lt;/text&gt;&lt;/g&gt;&lt;/g&gt;&lt;g
               id=&quot;g1950&quot;&gt;&lt;path
                 d=&quot;M 132.16,589.57 H 970.15 V 371.61 h -208.6&quot;
                 style=&quot;fill:none;stroke:#000000;stroke-width:0.24;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:3.6, 2.16;stroke-dashoffset:0;stroke-opacity:1&quot;
                 id=&quot;path1952&quot; /&gt;&lt;/g&gt;&lt;path
               d=&quot;m 761.55,374.37 -8.28,-2.76 8.28,-2.76 z&quot;
               style=&quot;fill:none;stroke:#000000;stroke-width:0.24;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
               id=&quot;path1954&quot; /&gt;&lt;path
               d=&quot;m 814.22,367.81 h 45.355 v 9.5999 H 814.22 Z&quot;
               style=&quot;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none&quot;
               id=&quot;path1956&quot; /&gt;&lt;g
               id=&quot;g1958&quot;&gt;&lt;g
                 id=&quot;g1960&quot;
                 clip-path=&quot;url(#clipPath1964)&quot;&gt;&lt;text
                   transform=&quot;matrix(1,0,0,-1,814.65,369.99)&quot;
                   style=&quot;font-variant:normal;font-weight:normal;font-size:8px;font-family:Arial;-inkscape-font-specification:ArialMT;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
                   id=&quot;text1968&quot;&gt;&lt;tspan
                     x=&quot;0 5.9920001 9.9919996 13.992 16.488001 20.983999 22.983999 27.48 29.976 32.472 36.967999 40.967999&quot;
                     y=&quot;0&quot;
                     sodipodi:role=&quot;line&quot;
                     id=&quot;tspan1966&quot;&gt;HasInterface&lt;/tspan&gt;&lt;/text&gt;&lt;/g&gt;&lt;/g&gt;&lt;g
               id=&quot;g1970&quot;&gt;&lt;path
                 d=&quot;m 38.063,513.89 v -51.27 h 35.275 c 0,1.3 1.058,2.36 2.362,2.36 1.305,0 2.362,-1.06 2.362,-2.36 h 80.208&quot;
                 style=&quot;fill:none;stroke:#000000;stroke-width:0.24;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:3.6, 2.16;stroke-dashoffset:0;stroke-opacity:1&quot;
                 id=&quot;path1972&quot; /&gt;&lt;/g&gt;&lt;path
               d=&quot;m 158.27,459.86 8.28,2.76 -8.28,2.76 z&quot;
               style=&quot;fill:none;stroke:#000000;stroke-width:0.24;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
               id=&quot;path1974&quot; /&gt;&lt;path
               d=&quot;m 103.88,457.67 h 45.355 v 9.5999 H 103.88 Z&quot;
               style=&quot;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none&quot;
               id=&quot;path1976&quot; /&gt;&lt;g
               id=&quot;g1978&quot;&gt;&lt;g
                 id=&quot;g1980&quot;
                 clip-path=&quot;url(#clipPath1984)&quot;&gt;&lt;text
                   transform=&quot;matrix(1,0,0,-1,103.93,459.94)&quot;
                   style=&quot;font-variant:normal;font-weight:normal;font-size:8.025px;font-family:Arial;-inkscape-font-specification:ArialMT;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
                   id=&quot;text1988&quot;&gt;&lt;tspan
                     x=&quot;0 5.9946752 9.9911251 14.003625 16.483351 20.97735 22.975574 27.469576 29.973375 32.469151 36.96315 40.975651&quot;
                     y=&quot;0&quot;
                     sodipodi:role=&quot;line&quot;
                     id=&quot;tspan1986&quot;&gt;HasInterface&lt;/tspan&gt;&lt;/text&gt;&lt;/g&gt;&lt;/g&gt;&lt;g
               id=&quot;g1990&quot;&gt;&lt;path
                 d=&quot;M 38.063,513.89 V 371.61 h 35.275 c 0,1.31 1.058,2.36 2.362,2.36 1.305,0 2.362,-1.05 2.362,-2.36 h 83.868&quot;
                 style=&quot;fill:none;stroke:#000000;stroke-width:0.24;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:3.6, 2.16;stroke-dashoffset:0;stroke-opacity:1&quot;
                 id=&quot;path1992&quot; /&gt;&lt;/g&gt;&lt;path
               d=&quot;m 161.93,368.85 8.28,2.76 -8.28,2.76 z&quot;
               style=&quot;fill:none;stroke:#000000;stroke-width:0.24;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
               id=&quot;path1994&quot; /&gt;&lt;path
               d=&quot;m 104.8,366.81 h 45.355 v 9.5999 H 104.8 Z&quot;
               style=&quot;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none&quot;
               id=&quot;path1996&quot; /&gt;&lt;g
               id=&quot;g1998&quot;&gt;&lt;g
                 id=&quot;g2000&quot;
                 clip-path=&quot;url(#clipPath2004)&quot;&gt;&lt;text
                   transform=&quot;matrix(1,0,0,-1,104.85,368.99)&quot;
                   style=&quot;font-variant:normal;font-weight:normal;font-size:8px;font-family:Arial;-inkscape-font-specification:ArialMT;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
                   id=&quot;text2008&quot;&gt;&lt;tspan
                     x=&quot;0 5.9920001 9.9919996 13.992 16.488001 20.983999 22.983999 27.48 29.976 32.472 36.967999 40.967999&quot;
                     y=&quot;0&quot;
                     sodipodi:role=&quot;line&quot;
                     id=&quot;tspan2006&quot;&gt;HasInterface&lt;/tspan&gt;&lt;/text&gt;&lt;/g&gt;&lt;/g&gt;&lt;g
               id=&quot;g2010&quot;&gt;&lt;path
                 d=&quot;M 38.063,513.89 V 150.81 h 35.275 c 0,1.3 1.058,2.36 2.362,2.36 1.305,0 2.362,-1.06 2.362,-2.36 h 84.678&quot;
                 style=&quot;fill:none;stroke:#000000;stroke-width:0.24;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:3.6, 2.16;stroke-dashoffset:0;stroke-opacity:1&quot;
                 id=&quot;path2012&quot; /&gt;&lt;/g&gt;&lt;path
               d=&quot;m 162.74,148.05 8.28,2.76 -8.28,2.76 z&quot;
               style=&quot;fill:none;stroke:#000000;stroke-width:0.24;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
               id=&quot;path2014&quot; /&gt;&lt;path
               d=&quot;m 111.25,147.28 h 45.355 v 9.5999 H 111.25 Z&quot;
               style=&quot;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none&quot;
               id=&quot;path2016&quot; /&gt;&lt;g
               id=&quot;g2018&quot;&gt;&lt;g
                 id=&quot;g2020&quot;
                 clip-path=&quot;url(#clipPath2024)&quot;&gt;&lt;text
                   transform=&quot;matrix(1,0,0,-1,111.3,149.29)&quot;
                   style=&quot;font-variant:normal;font-weight:normal;font-size:8px;font-family:Arial;-inkscape-font-specification:ArialMT;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
                   id=&quot;text2028&quot;&gt;&lt;tspan
                     x=&quot;0 5.9920001 9.9919996 13.992 16.488001 20.983999 22.983999 27.48 29.976 32.472 36.967999 40.967999&quot;
                     y=&quot;0&quot;
                     sodipodi:role=&quot;line&quot;
                     id=&quot;tspan2026&quot;&gt;HasInterface&lt;/tspan&gt;&lt;/text&gt;&lt;/g&gt;&lt;/g&gt;&lt;path
               d=&quot;m 273.7,424.2 h 10.63 73.53&quot;
               style=&quot;fill:none;stroke:#000000;stroke-width:0.24;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
               id=&quot;path2030&quot; /&gt;&lt;path
               d=&quot;m 353.72,426.27 v -4.14&quot;
               style=&quot;fill:none;stroke:#000000;stroke-width:0.24;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
               id=&quot;path2032&quot; /&gt;&lt;path
               d=&quot;M 125.73,47.096 H 287.87 V 75.442 H 125.73 Z&quot;
               style=&quot;fill:#e8eef7;fill-opacity:1;fill-rule:evenodd;stroke:none&quot;
               id=&quot;path2034&quot; /&gt;&lt;path
               d=&quot;M 125.73,47.096 H 287.87 V 75.442 H 125.73 Z&quot;
               style=&quot;fill:none;stroke:#000000;stroke-width:0.24;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
               id=&quot;path2036&quot; /&gt;&lt;g
               id=&quot;g2038&quot;&gt;&lt;g
                 id=&quot;g2040&quot;
                 clip-path=&quot;url(#clipPath2044)&quot;&gt;&lt;text
                   transform=&quot;matrix(1,0,0,-1,184.67,64.418)&quot;
                   style=&quot;font-style:italic;font-variant:normal;font-weight:normal;font-size:8px;font-family:Arial;-inkscape-font-specification:Arial-ItalicMT;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
                   id=&quot;text2048&quot;&gt;&lt;tspan
                     x=&quot;0 5.4959998 9.9919996 12.488 16.983999 21.976&quot;
                     y=&quot;0&quot;
                     sodipodi:role=&quot;line&quot;
                     id=&quot;tspan2046&quot;&gt;Folder&lt;/tspan&gt;&lt;/text&gt;&lt;/g&gt;&lt;/g&gt;&lt;g
               id=&quot;g2050&quot;&gt;&lt;g
                 id=&quot;g2052&quot;
                 clip-path=&quot;url(#clipPath2056)&quot;&gt;&lt;text
                   transform=&quot;matrix(1,0,0,-1,209.75,64.418)&quot;
                   style=&quot;font-style:italic;font-variant:normal;font-weight:normal;font-size:8px;font-family:Arial;-inkscape-font-specification:Arial-ItalicMT;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
                   id=&quot;text2060&quot;&gt;&lt;tspan
                     x=&quot;0 5.4959998 9.4960003 14.488&quot;
                     y=&quot;0&quot;
                     sodipodi:role=&quot;line&quot;
                     id=&quot;tspan2058&quot;&gt;Type&lt;/tspan&gt;&lt;/text&gt;&lt;/g&gt;&lt;/g&gt;&lt;g
               id=&quot;g2062&quot;&gt;&lt;g
                 id=&quot;g2064&quot;
                 clip-path=&quot;url(#clipPath2068)&quot;&gt;&lt;text
                   transform=&quot;matrix(1,0,0,-1,161.6,52.993)&quot;
                   style=&quot;font-variant:normal;font-weight:normal;font-size:10px;font-family:Arial;-inkscape-font-specification:ArialMT;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
                   id=&quot;text2072&quot;&gt;&lt;tspan
                     x=&quot;0 7 12.99 17.99 19.99 24.99 30.49 37.98 43.48 48.98 50.98 53.970001&quot;
                     y=&quot;0&quot;
                     sodipodi:role=&quot;line&quot;
                     id=&quot;tspan2070&quot;&gt;DeviceHealth&lt;/tspan&gt;&lt;/text&gt;&lt;/g&gt;&lt;/g&gt;&lt;g
               id=&quot;g2074&quot;&gt;&lt;g
                 id=&quot;g2076&quot;
                 clip-path=&quot;url(#clipPath2080)&quot;&gt;&lt;text
                   transform=&quot;matrix(1,0,0,-1,221.1,52.993)&quot;
                   style=&quot;font-variant:normal;font-weight:normal;font-size:10px;font-family:Arial;-inkscape-font-specification:ArialMT;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
                   id=&quot;text2084&quot;&gt;&lt;tspan
                     x=&quot;0 6.5 8.9899998 14.49 17.98 25.98&quot;
                     y=&quot;0&quot;
                     sodipodi:role=&quot;line&quot;
                     id=&quot;tspan2082&quot;&gt;Alarms&lt;/tspan&gt;&lt;/text&gt;&lt;/g&gt;&lt;/g&gt;&lt;path
               d=&quot;M 75.7,513.89 V 61.27 h 50.03&quot;
               style=&quot;fill:none;stroke:#000000;stroke-width:0.24;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
               id=&quot;path2086&quot; /&gt;&lt;path
               d=&quot;M 121.59,63.34 V 59.2&quot;
               style=&quot;fill:none;stroke:#000000;stroke-width:0.24;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
               id=&quot;path2088&quot; /&gt;&lt;path
               d=&quot;M 229.08,330.66 H 345.14&quot;
               style=&quot;fill:none;stroke:#000000;stroke-width:0.24;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
               id=&quot;path2090&quot; /&gt;&lt;path
               d=&quot;m 342.38,327.9 2.76,2.76 -2.76,2.76&quot;
               style=&quot;fill:none;stroke:#000000;stroke-width:0.24;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
               id=&quot;path2092&quot; /&gt;&lt;path
               d=&quot;m 252.88,325.86 h 68.465 v 9.5999 H 252.88 Z&quot;
               style=&quot;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none&quot;
               id=&quot;path2094&quot; /&gt;&lt;g
               id=&quot;g2096&quot;&gt;&lt;g
                 id=&quot;g2098&quot;
                 clip-path=&quot;url(#clipPath2102)&quot;&gt;&lt;text
                   transform=&quot;matrix(1,0,0,-1,253,328.02)&quot;
                   style=&quot;font-variant:normal;font-weight:normal;font-size:8px;font-family:Arial;-inkscape-font-specification:ArialMT;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
                   id=&quot;text2106&quot;&gt;&lt;tspan
                     x=&quot;0 5.9920001 9.9919996 13.992 19.983999 21.976 25.976 27.976 29.968 33.967999 38.464001 42.959999 45.952 49.952 54.952 59.448002 61.944 64.440002&quot;
                     y=&quot;0&quot;
                     sodipodi:role=&quot;line&quot;
                     id=&quot;tspan2104&quot;&gt;HasDictionaryEntry&lt;/tspan&gt;&lt;/text&gt;&lt;/g&gt;&lt;/g&gt;&lt;path
               d=&quot;M 228.27,288.14 H 343.98&quot;
               style=&quot;fill:none;stroke:#000000;stroke-width:0.24;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
               id=&quot;path2108&quot; /&gt;&lt;path
               d=&quot;m 341.22,285.38 2.76,2.76 -2.76,2.76&quot;
               style=&quot;fill:none;stroke:#000000;stroke-width:0.24;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
               id=&quot;path2110&quot; /&gt;&lt;path
               d=&quot;m 251.9,283.34 h 68.465 v 9.5999 H 251.9 Z&quot;
               style=&quot;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none&quot;
               id=&quot;path2112&quot; /&gt;&lt;g
               id=&quot;g2114&quot;&gt;&lt;g
                 id=&quot;g2116&quot;
                 clip-path=&quot;url(#clipPath2120)&quot;&gt;&lt;text
                   transform=&quot;matrix(1,0,0,-1,252.02,285.47)&quot;
                   style=&quot;font-variant:normal;font-weight:normal;font-size:8px;font-family:Arial;-inkscape-font-specification:ArialMT;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
                   id=&quot;text2124&quot;&gt;&lt;tspan
                     x=&quot;0 5.9920001 9.9919996 13.992 19.983999 21.976 25.976 27.976 29.968 33.967999 38.464001 42.959999 45.952 49.952 54.952 59.448002 61.944 64.440002&quot;
                     y=&quot;0&quot;
                     sodipodi:role=&quot;line&quot;
                     id=&quot;tspan2122&quot;&gt;HasDictionaryEntry&lt;/tspan&gt;&lt;/text&gt;&lt;/g&gt;&lt;/g&gt;&lt;path
               d=&quot;M 231.19,242.69 H 345.14&quot;
               style=&quot;fill:none;stroke:#000000;stroke-width:0.24;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
               id=&quot;path2126&quot; /&gt;&lt;path
               d=&quot;m 342.38,239.93 2.76,2.76 -2.76,2.76&quot;
               style=&quot;fill:none;stroke:#000000;stroke-width:0.24;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
               id=&quot;path2128&quot; /&gt;&lt;path
               d=&quot;m 253.93,237.89 h 68.465 v 9.5999 H 253.93 Z&quot;
               style=&quot;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none&quot;
               id=&quot;path2130&quot; /&gt;&lt;g
               id=&quot;g2132&quot;&gt;&lt;g
                 id=&quot;g2134&quot;
                 clip-path=&quot;url(#clipPath2138)&quot;&gt;&lt;text
                   transform=&quot;matrix(1,0,0,-1,254.05,239.97)&quot;
                   style=&quot;font-variant:normal;font-weight:normal;font-size:8px;font-family:Arial;-inkscape-font-specification:ArialMT;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
                   id=&quot;text2142&quot;&gt;&lt;tspan
                     x=&quot;0 6.0159998 10.016 14.016 20.032 22.024 26.024 28.024 30.016001 34.015999 38.512001 43.007999 46 50 55.023998 59.52 62.015999 64.512001&quot;
                     y=&quot;0&quot;
                     sodipodi:role=&quot;line&quot;
                     id=&quot;tspan2140&quot;&gt;HasDictionaryEntry&lt;/tspan&gt;&lt;/text&gt;&lt;/g&gt;&lt;/g&gt;&lt;path
               d=&quot;m 280.46,551.76 h 116.29 v 28.346 H 280.46 Z&quot;
               style=&quot;fill:#e8eef7;fill-opacity:1;fill-rule:evenodd;stroke:none&quot;
               id=&quot;path2144&quot; /&gt;&lt;path
               d=&quot;m 280.46,551.76 h 116.29 v 28.346 H 280.46 Z&quot;
               style=&quot;fill:none;stroke:#000000;stroke-width:0.24;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
               id=&quot;path2146&quot; /&gt;&lt;g
               id=&quot;g2148&quot;&gt;&lt;g
                 id=&quot;g2150&quot;
                 clip-path=&quot;url(#clipPath2154)&quot;&gt;&lt;text
                   transform=&quot;matrix(1,0,0,-1,313.48,568.89)&quot;
                   style=&quot;font-style:italic;font-variant:normal;font-weight:normal;font-size:10px;font-family:Arial;-inkscape-font-specification:Arial-ItalicMT;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
                   id=&quot;text2158&quot;&gt;&lt;tspan
                     x=&quot;0 6 11.5 13.99 19.49 24.99 28.48 34.48 39.48 44.98&quot;
                     y=&quot;0&quot;
                     sodipodi:role=&quot;line&quot;
                     id=&quot;tspan2156&quot;&gt;FolderType&lt;/tspan&gt;&lt;/text&gt;&lt;/g&gt;&lt;/g&gt;&lt;g
               id=&quot;g2160&quot;&gt;&lt;g
                 id=&quot;g2162&quot;
                 clip-path=&quot;url(#clipPath2166)&quot;&gt;&lt;text
                   transform=&quot;matrix(1,0,0,-1,302.08,556.87)&quot;
                   style=&quot;font-variant:normal;font-weight:normal;font-size:10px;font-family:Arial;-inkscape-font-specification:ArialMT;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
                   id=&quot;text2170&quot;&gt;&lt;tspan
                     x=&quot;0 6.5 12 17.99 23.49 28.99 31.99 34.98 40.48 45.98 52.470001 57.470001 62.970001 68.470001&quot;
                     y=&quot;0&quot;
                     sodipodi:role=&quot;line&quot;
                     id=&quot;tspan2168&quot;&gt;SupportedTypes&lt;/tspan&gt;&lt;/text&gt;&lt;/g&gt;&lt;/g&gt;&lt;path
               d=&quot;m 264.39,565.93 h 16.07&quot;
               style=&quot;fill:none;stroke:#000000;stroke-width:0.24;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
               id=&quot;path2172&quot; /&gt;&lt;path
               d=&quot;m 276.32,568 v -4.14&quot;
               style=&quot;fill:none;stroke:#000000;stroke-width:0.24;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
               id=&quot;path2174&quot; /&gt;&lt;path
               d=&quot;m 357.86,410.03 h 98.15 v 28.346 h -98.15 z&quot;
               style=&quot;fill:#d9958f;fill-opacity:1;fill-rule:evenodd;stroke:none&quot;
               id=&quot;path2176&quot; /&gt;&lt;path
               d=&quot;m 357.86,410.03 h 98.15 v 28.346 h -98.15 z&quot;
               style=&quot;fill:none;stroke:#000000;stroke-width:0.24;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
               id=&quot;path2178&quot; /&gt;&lt;g
               id=&quot;g2180&quot;&gt;&lt;g
                 id=&quot;g2182&quot;
                 clip-path=&quot;url(#clipPath2186)&quot;&gt;&lt;text
                   transform=&quot;matrix(1,0,0,-1,382.13,427.04)&quot;
                   style=&quot;font-style:italic;font-variant:normal;font-weight:normal;font-size:10px;font-family:Arial;-inkscape-font-specification:Arial-ItalicMT;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
                   id=&quot;text2190&quot;&gt;&lt;tspan
                     x=&quot;0 6.5 8.9899998 14.49 19.99 25.49 27.98 33.98 38.98 44.48&quot;
                     y=&quot;0&quot;
                     sodipodi:role=&quot;line&quot;
                     id=&quot;tspan2188&quot;&gt;SignalType&lt;/tspan&gt;&lt;/text&gt;&lt;/g&gt;&lt;/g&gt;&lt;g
               id=&quot;g2192&quot;&gt;&lt;g
                 id=&quot;g2194&quot;
                 clip-path=&quot;url(#clipPath2198)&quot;&gt;&lt;text
                   transform=&quot;matrix(1,0,0,-1,368.2,415.04)&quot;
                   style=&quot;font-variant:normal;font-weight:normal;font-size:10.025px;font-family:Arial;-inkscape-font-specification:ArialMT;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
                   id=&quot;text2202&quot;&gt;&lt;tspan
                     x=&quot;0&quot;
                     y=&quot;0&quot;
                     id=&quot;tspan2200&quot;&gt;&amp;lt;&lt;/tspan&gt;&lt;/text&gt;&lt;/g&gt;&lt;/g&gt;&lt;g
               id=&quot;g2204&quot;&gt;&lt;g
                 id=&quot;g2206&quot;
                 clip-path=&quot;url(#clipPath2210)&quot;&gt;&lt;text
                   transform=&quot;matrix(1,0,0,-1,374.05,415.04)&quot;
                   style=&quot;font-variant:normal;font-weight:normal;font-size:10.025px;font-family:Arial;-inkscape-font-specification:ArialMT;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
                   id=&quot;text2214&quot;&gt;&lt;tspan
                     x=&quot;0 6.4962001 8.9823999 14.486125 19.989849 25.493574&quot;
                     y=&quot;0&quot;
                     sodipodi:role=&quot;line&quot;
                     id=&quot;tspan2212&quot;&gt;Signal&lt;/tspan&gt;&lt;/text&gt;&lt;/g&gt;&lt;/g&gt;&lt;g
               id=&quot;g2216&quot;&gt;&lt;g
                 id=&quot;g2218&quot;
                 clip-path=&quot;url(#clipPath2222)&quot;&gt;&lt;text
                   transform=&quot;matrix(1,0,0,-1,401.88,415.04)&quot;
                   style=&quot;font-variant:normal;font-weight:normal;font-size:10.025px;font-family:Arial;-inkscape-font-specification:ArialMT;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
                   id=&quot;text2226&quot;&gt;&lt;tspan
                     x=&quot;0 2.9874499 8.4911747 13.9949 19.498625 21.99485 24.48105 26.977276 29.463474 34.967201 38.455898&quot;
                     y=&quot;0&quot;
                     sodipodi:role=&quot;line&quot;
                     id=&quot;tspan2224&quot;&gt;Identifier&amp;gt;&lt;/tspan&gt;&lt;/text&gt;&lt;/g&gt;&lt;/g&gt;&lt;/g&gt;&lt;/g&gt;&lt;/g&gt;&lt;/g&gt;&lt;g
       id=&quot;g2228&quot;&gt;&lt;g
         id=&quot;g2230&quot;
         clip-path=&quot;url(#clipPath2234)&quot; /&gt;&lt;/g&gt;&lt;g
       id=&quot;g2236&quot;&gt;&lt;g
         id=&quot;g2238&quot;
         clip-path=&quot;url(#clipPath2242)&quot; /&gt;&lt;/g&gt;&lt;g
       id=&quot;g2268&quot;&gt;&lt;g
         id=&quot;g2270&quot;
         clip-path=&quot;url(#clipPath2274)&quot; /&gt;&lt;/g&gt;&lt;g
       id=&quot;g2288&quot;&gt;&lt;g
         id=&quot;g2290&quot;
         clip-path=&quot;url(#clipPath2294)&quot; /&gt;&lt;/g&gt;&lt;g
       id=&quot;g2332&quot;&gt;&lt;g
         id=&quot;g2334&quot;
         clip-path=&quot;url(#clipPath2338)&quot; /&gt;&lt;/g&gt;&lt;g
       id=&quot;g2340&quot;&gt;&lt;g
         id=&quot;g2342&quot;
         clip-path=&quot;url(#clipPath2346)&quot; /&gt;&lt;/g&gt;&lt;g
       id=&quot;g2372&quot;&gt;&lt;g
         id=&quot;g2374&quot;
         clip-path=&quot;url(#clipPath2378)&quot; /&gt;&lt;/g&gt;&lt;g
       id=&quot;g2404&quot;&gt;&lt;g
         id=&quot;g2406&quot;
         clip-path=&quot;url(#clipPath2410)&quot; /&gt;&lt;/g&gt;&lt;g
       id=&quot;g2448&quot;&gt;&lt;g
         id=&quot;g2450&quot;
         clip-path=&quot;url(#clipPath2454)&quot; /&gt;&lt;/g&gt;&lt;g
       id=&quot;g2480&quot;&gt;&lt;g
         id=&quot;g2482&quot;
         clip-path=&quot;url(#clipPath2486)&quot; /&gt;&lt;/g&gt;&lt;g
       id=&quot;g2500&quot;&gt;&lt;g
         id=&quot;g2502&quot;
         clip-path=&quot;url(#clipPath2506)&quot; /&gt;&lt;/g&gt;&lt;g
       id=&quot;g2580&quot;&gt;&lt;g
         id=&quot;g2582&quot;
         clip-path=&quot;url(#clipPath2586)&quot; /&gt;&lt;/g&gt;&lt;g
       id=&quot;g2612&quot;&gt;&lt;g
         id=&quot;g2614&quot;
         clip-path=&quot;url(#clipPath2618)&quot; /&gt;&lt;/g&gt;&lt;g
       id=&quot;g2644&quot;&gt;&lt;g
         id=&quot;g2646&quot;
         clip-path=&quot;url(#clipPath2650)&quot; /&gt;&lt;/g&gt;&lt;g
       id=&quot;g2676&quot;&gt;&lt;g
         id=&quot;g2678&quot;
         clip-path=&quot;url(#clipPath2682)&quot; /&gt;&lt;/g&gt;&lt;g
       id=&quot;g2696&quot;&gt;&lt;g
         id=&quot;g2698&quot;
         clip-path=&quot;url(#clipPath2702)&quot; /&gt;&lt;/g&gt;&lt;g
       id=&quot;g2752&quot;&gt;&lt;g
         id=&quot;g2754&quot;
         clip-path=&quot;url(#clipPath2758)&quot; /&gt;&lt;/g&gt;&lt;g
       id=&quot;g2808&quot;&gt;&lt;g
         id=&quot;g2810&quot;
         clip-path=&quot;url(#clipPath2814)&quot; /&gt;&lt;/g&gt;&lt;g
       id=&quot;g2840&quot;&gt;&lt;g
         id=&quot;g2842&quot;
         clip-path=&quot;url(#clipPath2846)&quot; /&gt;&lt;/g&gt;&lt;g
       id=&quot;g2860&quot;&gt;&lt;g
         id=&quot;g2862&quot;
         clip-path=&quot;url(#clipPath2866)&quot; /&gt;&lt;/g&gt;&lt;g
       id=&quot;g2916&quot;&gt;&lt;g
         id=&quot;g2918&quot;
         clip-path=&quot;url(#clipPath2922)&quot; /&gt;&lt;/g&gt;&lt;g
       id=&quot;g2936&quot;&gt;&lt;g
         id=&quot;g2938&quot;
         clip-path=&quot;url(#clipPath2942)&quot; /&gt;&lt;/g&gt;&lt;g
       id=&quot;g3016&quot;&gt;&lt;g
         id=&quot;g3018&quot;
         clip-path=&quot;url(#clipPath3022)&quot; /&gt;&lt;/g&gt;&lt;g
       id=&quot;g3168&quot;&gt;&lt;g
         id=&quot;g3170&quot;
         clip-path=&quot;url(#clipPath3174)&quot; /&gt;&lt;/g&gt;&lt;g
       id=&quot;g3200&quot;&gt;&lt;g
         id=&quot;g3202&quot;
         clip-path=&quot;url(#clipPath3206)&quot; /&gt;&lt;/g&gt;&lt;g
       id=&quot;g3220&quot;&gt;&lt;g
         id=&quot;g3222&quot;
         clip-path=&quot;url(#clipPath3226)&quot; /&gt;&lt;/g&gt;&lt;g
       id=&quot;g3240&quot;&gt;&lt;g
         id=&quot;g3242&quot;
         clip-path=&quot;url(#clipPath3246)&quot; /&gt;&lt;/g&gt;&lt;g
       id=&quot;g3272&quot;&gt;&lt;g
         id=&quot;g3274&quot;
         clip-path=&quot;url(#clipPath3278)&quot; /&gt;&lt;/g&gt;&lt;g
       id=&quot;g3328&quot;&gt;&lt;g
         id=&quot;g3330&quot;
         clip-path=&quot;url(#clipPath3334)&quot; /&gt;&lt;/g&gt;&lt;g
       id=&quot;g3348&quot;&gt;&lt;g
         id=&quot;g3350&quot;
         clip-path=&quot;url(#clipPath3354)&quot; /&gt;&lt;/g&gt;&lt;g
       id=&quot;g3380&quot;&gt;&lt;g
         id=&quot;g3382&quot;
         clip-path=&quot;url(#clipPath3386)&quot; /&gt;&lt;/g&gt;&lt;g
       id=&quot;g3412&quot;&gt;&lt;g
         id=&quot;g3414&quot;
         clip-path=&quot;url(#clipPath3418)&quot; /&gt;&lt;/g&gt;&lt;/g&gt;&lt;/svg&gt;
&lt;/div&gt;
&lt;/p&gt;
&lt;p&gt;&lt;span class=&quot;figure-number&quot;&gt;Figure 1: &lt;/span&gt;PA-DIM 信息模型基本结构&lt;/p&gt;
&lt;/div&gt;

&lt;p&gt;
如图 &lt;a href=&quot;#orge0b1344&quot;&gt;1&lt;/a&gt; 所示，PA-DIM 通过扩展OPC UA地址空间，简化设备的数据访问：
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;数据更标准。不论设备来自哪个厂家，各个厂家都遵循标准一致的数据层级结构。&lt;/li&gt;
&lt;li&gt;数据更统一。不用关心设备类型，各个设备的数据都一样呈现。&lt;/li&gt;
&lt;li&gt;意义更明确，套用通用数据字典（IEC 61987 CDD - Common Data
Dictionary）， 参数和变量的描述都清晰准确。&lt;/li&gt;
&lt;li&gt;组织更清晰，每个设备对应一个资产号，数据信号关联一个标签，设备、数据信号可以嵌套扩展。&lt;/li&gt;
&lt;li&gt;标识唯一。基于IEC 61406 IL字符串的设备标识。
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;可以通过PA-DIM 信息模型读取。&lt;/li&gt;
&lt;li&gt;可以扫描设备外部的二维码获取。&lt;/li&gt;
&lt;li&gt;可以从基于IEEE 802.1AR IDevID的设备出厂安全数字证书中获取。&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;div id=&quot;org5cf947f&quot; class=&quot;figure&quot;&gt;
&lt;p&gt;&lt;div align=&quot;center&quot;&gt;&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; xmlns:xlink=&quot;http://www.w3.org/1999/xlink&quot; width=&quot;432.95999&quot; height=&quot;289.91998&quot; viewBox=&quot;0 0 432.95999 289.91998&quot;&gt;
&lt;defs&gt;
&lt;g&gt;
&lt;g id=&quot;glyph-0-0&quot;&gt;
&lt;path d=&quot;M 0.734375 -6.203125 L 5.046875 -6.203125 L 5.046875 -5.453125 L 1.578125 -5.453125 L 1.578125 -3.5625 L 4.625 -3.5625 L 4.625 -2.828125 L 1.578125 -2.828125 L 1.578125 0 L 0.734375 0 Z M 0.734375 -6.203125 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-0-1&quot;&gt;
&lt;path d=&quot;M 3.046875 -0.71875 C 3.328125 -0.71875 3.5625 -0.75 3.75 -0.8125 C 4.070312 -0.914062 4.335938 -1.125 4.546875 -1.4375 C 4.710938 -1.6875 4.832031 -2.007812 4.90625 -2.40625 C 4.945312 -2.632812 4.96875 -2.851562 4.96875 -3.0625 C 4.96875 -3.820312 4.8125 -4.414062 4.5 -4.84375 C 4.195312 -5.269531 3.707031 -5.484375 3.03125 -5.484375 L 1.546875 -5.484375 L 1.546875 -0.71875 Z M 0.703125 -6.203125 L 3.21875 -6.203125 C 4.070312 -6.203125 4.734375 -5.898438 5.203125 -5.296875 C 5.617188 -4.753906 5.828125 -4.054688 5.828125 -3.203125 C 5.828125 -2.535156 5.703125 -1.9375 5.453125 -1.40625 C 5.015625 -0.46875 4.265625 0 3.203125 0 L 0.703125 0 Z M 0.703125 -6.203125 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-0-2&quot;&gt;
&lt;path d=&quot;M 5.171875 -6.203125 L 5.171875 -5.46875 L 3.078125 -5.46875 L 3.078125 0 L 2.234375 0 L 2.234375 -5.46875 L 0.140625 -5.46875 L 0.140625 -6.203125 Z M 5.171875 -6.203125 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-0-3&quot;&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-0-4&quot;&gt;
&lt;path d=&quot;M 0.6875 -6.203125 L 1.53125 -6.203125 L 1.53125 -3.640625 L 4.765625 -3.640625 L 4.765625 -6.203125 L 5.609375 -6.203125 L 5.609375 0 L 4.765625 0 L 4.765625 -2.90625 L 1.53125 -2.90625 L 1.53125 0 L 0.6875 0 Z M 0.6875 -6.203125 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-0-5&quot;&gt;
&lt;path d=&quot;M 2.359375 -0.484375 C 2.859375 -0.484375 3.203125 -0.675781 3.390625 -1.0625 C 3.578125 -1.445312 3.671875 -1.875 3.671875 -2.34375 C 3.671875 -2.757812 3.601562 -3.101562 3.46875 -3.375 C 3.257812 -3.789062 2.890625 -4 2.359375 -4 C 1.898438 -4 1.5625 -3.816406 1.34375 -3.453125 C 1.132812 -3.097656 1.03125 -2.671875 1.03125 -2.171875 C 1.03125 -1.691406 1.132812 -1.289062 1.34375 -0.96875 C 1.5625 -0.644531 1.898438 -0.484375 2.359375 -0.484375 Z M 2.390625 -4.65625 C 2.972656 -4.65625 3.460938 -4.457031 3.859375 -4.0625 C 4.265625 -3.675781 4.46875 -3.109375 4.46875 -2.359375 C 4.46875 -1.628906 4.289062 -1.023438 3.9375 -0.546875 C 3.582031 -0.0664062 3.03125 0.171875 2.28125 0.171875 C 1.65625 0.171875 1.160156 -0.0351562 0.796875 -0.453125 C 0.429688 -0.878906 0.25 -1.453125 0.25 -2.171875 C 0.25 -2.929688 0.441406 -3.535156 0.828125 -3.984375 C 1.210938 -4.429688 1.734375 -4.65625 2.390625 -4.65625 Z M 2.359375 -4.640625 Z M 2.359375 -4.640625 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-0-6&quot;&gt;
&lt;path d=&quot;M 1.015625 -1.421875 C 1.035156 -1.171875 1.097656 -0.976562 1.203125 -0.84375 C 1.390625 -0.59375 1.722656 -0.46875 2.203125 -0.46875 C 2.484375 -0.46875 2.726562 -0.53125 2.9375 -0.65625 C 3.15625 -0.78125 3.265625 -0.96875 3.265625 -1.21875 C 3.265625 -1.414062 3.175781 -1.566406 3 -1.671875 C 2.894531 -1.734375 2.679688 -1.800781 2.359375 -1.875 L 1.75 -2.03125 C 1.363281 -2.125 1.078125 -2.234375 0.890625 -2.359375 C 0.566406 -2.554688 0.40625 -2.835938 0.40625 -3.203125 C 0.40625 -3.628906 0.554688 -3.972656 0.859375 -4.234375 C 1.171875 -4.503906 1.585938 -4.640625 2.109375 -4.640625 C 2.796875 -4.640625 3.289062 -4.441406 3.59375 -4.046875 C 3.78125 -3.796875 3.867188 -3.519531 3.859375 -3.21875 L 3.140625 -3.21875 C 3.128906 -3.394531 3.070312 -3.550781 2.96875 -3.6875 C 2.789062 -3.894531 2.484375 -4 2.046875 -4 C 1.765625 -4 1.546875 -3.941406 1.390625 -3.828125 C 1.242188 -3.722656 1.171875 -3.578125 1.171875 -3.390625 C 1.171875 -3.191406 1.269531 -3.035156 1.46875 -2.921875 C 1.582031 -2.847656 1.75 -2.785156 1.96875 -2.734375 L 2.46875 -2.609375 C 3.019531 -2.472656 3.390625 -2.347656 3.578125 -2.234375 C 3.867188 -2.035156 4.015625 -1.726562 4.015625 -1.3125 C 4.015625 -0.90625 3.859375 -0.554688 3.546875 -0.265625 C 3.242188 0.0234375 2.78125 0.171875 2.15625 0.171875 C 1.488281 0.171875 1.015625 0.0195312 0.734375 -0.28125 C 0.453125 -0.59375 0.300781 -0.972656 0.28125 -1.421875 Z M 2.140625 -4.640625 Z M 2.140625 -4.640625 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-0-7&quot;&gt;
&lt;path d=&quot;M 0.703125 -5.796875 L 1.484375 -5.796875 L 1.484375 -4.53125 L 2.203125 -4.53125 L 2.203125 -3.90625 L 1.484375 -3.90625 L 1.484375 -0.953125 C 1.484375 -0.796875 1.535156 -0.691406 1.640625 -0.640625 C 1.703125 -0.609375 1.800781 -0.59375 1.9375 -0.59375 C 1.96875 -0.59375 2.003906 -0.59375 2.046875 -0.59375 C 2.097656 -0.59375 2.148438 -0.59375 2.203125 -0.59375 L 2.203125 0 C 2.117188 0.0195312 2.023438 0.0351562 1.921875 0.046875 C 1.828125 0.0664062 1.726562 0.078125 1.625 0.078125 C 1.269531 0.078125 1.023438 -0.0078125 0.890625 -0.1875 C 0.765625 -0.375 0.703125 -0.613281 0.703125 -0.90625 L 0.703125 -3.90625 L 0.09375 -3.90625 L 0.09375 -4.53125 L 0.703125 -4.53125 Z M 0.703125 -5.796875 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-0-8&quot;&gt;
&lt;path d=&quot;M 1.96875 -6.203125 L 2.609375 -6.203125 L 0.640625 0 L 0 0 Z M 1.96875 -6.203125 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-0-9&quot;&gt;
&lt;path d=&quot;M 0.578125 -4.53125 L 1.296875 -4.53125 L 1.296875 -3.75 C 1.359375 -3.894531 1.503906 -4.078125 1.734375 -4.296875 C 1.960938 -4.515625 2.226562 -4.625 2.53125 -4.625 C 2.550781 -4.625 2.578125 -4.625 2.609375 -4.625 C 2.640625 -4.625 2.695312 -4.617188 2.78125 -4.609375 L 2.78125 -3.796875 C 2.738281 -3.804688 2.695312 -3.8125 2.65625 -3.8125 C 2.613281 -3.820312 2.570312 -3.828125 2.53125 -3.828125 C 2.144531 -3.828125 1.847656 -3.703125 1.640625 -3.453125 C 1.441406 -3.203125 1.34375 -2.921875 1.34375 -2.609375 L 1.34375 0 L 0.578125 0 Z M 0.578125 -4.53125 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-0-10&quot;&gt;
&lt;path d=&quot;M 1.140625 -1.203125 C 1.140625 -0.984375 1.21875 -0.8125 1.375 -0.6875 C 1.539062 -0.5625 1.734375 -0.5 1.953125 -0.5 C 2.222656 -0.5 2.484375 -0.5625 2.734375 -0.6875 C 3.148438 -0.882812 3.359375 -1.21875 3.359375 -1.6875 L 3.359375 -2.296875 C 3.265625 -2.242188 3.144531 -2.195312 3 -2.15625 C 2.851562 -2.113281 2.710938 -2.085938 2.578125 -2.078125 L 2.109375 -2.015625 C 1.835938 -1.972656 1.628906 -1.914062 1.484375 -1.84375 C 1.253906 -1.707031 1.140625 -1.492188 1.140625 -1.203125 Z M 2.984375 -2.75 C 3.160156 -2.769531 3.273438 -2.84375 3.328125 -2.96875 C 3.367188 -3.03125 3.390625 -3.125 3.390625 -3.25 C 3.390625 -3.507812 3.296875 -3.695312 3.109375 -3.8125 C 2.921875 -3.9375 2.65625 -4 2.3125 -4 C 1.914062 -4 1.632812 -3.890625 1.46875 -3.671875 C 1.375 -3.554688 1.316406 -3.378906 1.296875 -3.140625 L 0.578125 -3.140625 C 0.585938 -3.703125 0.765625 -4.09375 1.109375 -4.3125 C 1.460938 -4.53125 1.867188 -4.640625 2.328125 -4.640625 C 2.859375 -4.640625 3.289062 -4.535156 3.625 -4.328125 C 3.957031 -4.128906 4.125 -3.816406 4.125 -3.390625 L 4.125 -0.78125 C 4.125 -0.695312 4.140625 -0.628906 4.171875 -0.578125 C 4.203125 -0.535156 4.269531 -0.515625 4.375 -0.515625 C 4.40625 -0.515625 4.441406 -0.515625 4.484375 -0.515625 C 4.535156 -0.523438 4.582031 -0.535156 4.625 -0.546875 L 4.625 0.015625 C 4.507812 0.0546875 4.421875 0.078125 4.359375 0.078125 C 4.296875 0.0859375 4.210938 0.09375 4.109375 0.09375 C 3.847656 0.09375 3.65625 0 3.53125 -0.1875 C 3.46875 -0.28125 3.425781 -0.414062 3.40625 -0.59375 C 3.25 -0.394531 3.023438 -0.21875 2.734375 -0.0625 C 2.441406 0.0820312 2.125 0.15625 1.78125 0.15625 C 1.351562 0.15625 1.003906 0.0273438 0.734375 -0.21875 C 0.472656 -0.476562 0.34375 -0.800781 0.34375 -1.1875 C 0.34375 -1.601562 0.472656 -1.925781 0.734375 -2.15625 C 0.992188 -2.394531 1.335938 -2.539062 1.765625 -2.59375 Z M 2.359375 -4.640625 Z M 2.359375 -4.640625 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-0-11&quot;&gt;
&lt;path d=&quot;M 0.5625 -4.53125 L 1.3125 -4.53125 L 1.3125 -3.890625 C 1.488281 -4.109375 1.648438 -4.269531 1.796875 -4.375 C 2.046875 -4.539062 2.332031 -4.625 2.65625 -4.625 C 3.019531 -4.625 3.3125 -4.535156 3.53125 -4.359375 C 3.65625 -4.253906 3.765625 -4.101562 3.859375 -3.90625 C 4.023438 -4.15625 4.222656 -4.335938 4.453125 -4.453125 C 4.679688 -4.566406 4.941406 -4.625 5.234375 -4.625 C 5.835938 -4.625 6.25 -4.40625 6.46875 -3.96875 C 6.59375 -3.726562 6.65625 -3.410156 6.65625 -3.015625 L 6.65625 0 L 5.859375 0 L 5.859375 -3.140625 C 5.859375 -3.441406 5.78125 -3.648438 5.625 -3.765625 C 5.476562 -3.878906 5.296875 -3.9375 5.078125 -3.9375 C 4.773438 -3.9375 4.515625 -3.832031 4.296875 -3.625 C 4.085938 -3.425781 3.984375 -3.097656 3.984375 -2.640625 L 3.984375 0 L 3.21875 0 L 3.21875 -2.953125 C 3.21875 -3.265625 3.179688 -3.488281 3.109375 -3.625 C 2.984375 -3.832031 2.765625 -3.9375 2.453125 -3.9375 C 2.171875 -3.9375 1.910156 -3.828125 1.671875 -3.609375 C 1.429688 -3.390625 1.3125 -2.988281 1.3125 -2.40625 L 1.3125 0 L 0.5625 0 Z M 0.5625 -4.53125 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-0-12&quot;&gt;
&lt;path d=&quot;M 2.4375 -4.625 C 2.757812 -4.625 3.070312 -4.546875 3.375 -4.390625 C 3.675781 -4.242188 3.90625 -4.050781 4.0625 -3.8125 C 4.21875 -3.582031 4.320312 -3.316406 4.375 -3.015625 C 4.414062 -2.804688 4.4375 -2.472656 4.4375 -2.015625 L 1.125 -2.015625 C 1.132812 -1.554688 1.238281 -1.1875 1.4375 -0.90625 C 1.644531 -0.632812 1.960938 -0.5 2.390625 -0.5 C 2.785156 -0.5 3.101562 -0.628906 3.34375 -0.890625 C 3.476562 -1.046875 3.570312 -1.222656 3.625 -1.421875 L 4.375 -1.421875 C 4.351562 -1.253906 4.285156 -1.066406 4.171875 -0.859375 C 4.066406 -0.660156 3.941406 -0.492188 3.796875 -0.359375 C 3.566406 -0.140625 3.285156 0.0078125 2.953125 0.09375 C 2.765625 0.132812 2.554688 0.15625 2.328125 0.15625 C 1.765625 0.15625 1.285156 -0.046875 0.890625 -0.453125 C 0.492188 -0.859375 0.296875 -1.429688 0.296875 -2.171875 C 0.296875 -2.898438 0.492188 -3.488281 0.890625 -3.9375 C 1.285156 -4.394531 1.800781 -4.625 2.4375 -4.625 Z M 3.65625 -2.625 C 3.625 -2.957031 3.550781 -3.222656 3.4375 -3.421875 C 3.226562 -3.785156 2.878906 -3.96875 2.390625 -3.96875 C 2.046875 -3.96875 1.753906 -3.835938 1.515625 -3.578125 C 1.273438 -3.328125 1.148438 -3.007812 1.140625 -2.625 Z M 2.375 -4.640625 Z M 2.375 -4.640625 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-0-13&quot;&gt;
&lt;path d=&quot;M 3.34375 -6.375 C 4.4375 -6.375 5.25 -6.023438 5.78125 -5.328125 C 6.1875 -4.773438 6.390625 -4.070312 6.390625 -3.21875 C 6.390625 -2.289062 6.15625 -1.519531 5.6875 -0.90625 C 5.132812 -0.175781 4.347656 0.1875 3.328125 0.1875 C 2.367188 0.1875 1.613281 -0.128906 1.0625 -0.765625 C 0.582031 -1.367188 0.34375 -2.140625 0.34375 -3.078125 C 0.34375 -3.910156 0.550781 -4.628906 0.96875 -5.234375 C 1.5 -5.992188 2.289062 -6.375 3.34375 -6.375 Z M 3.421875 -0.578125 C 4.160156 -0.578125 4.695312 -0.84375 5.03125 -1.375 C 5.363281 -1.90625 5.53125 -2.515625 5.53125 -3.203125 C 5.53125 -3.929688 5.335938 -4.515625 4.953125 -4.953125 C 4.578125 -5.398438 4.054688 -5.625 3.390625 -5.625 C 2.742188 -5.625 2.21875 -5.40625 1.8125 -4.96875 C 1.40625 -4.53125 1.203125 -3.878906 1.203125 -3.015625 C 1.203125 -2.328125 1.375 -1.75 1.71875 -1.28125 C 2.070312 -0.8125 2.640625 -0.578125 3.421875 -0.578125 Z M 3.359375 -6.375 Z M 3.359375 -6.375 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-0-14&quot;&gt;
&lt;path d=&quot;M 0.734375 -6.203125 L 3.53125 -6.203125 C 4.082031 -6.203125 4.523438 -6.046875 4.859375 -5.734375 C 5.203125 -5.429688 5.375 -4.992188 5.375 -4.421875 C 5.375 -3.941406 5.222656 -3.519531 4.921875 -3.15625 C 4.617188 -2.800781 4.15625 -2.625 3.53125 -2.625 L 1.578125 -2.625 L 1.578125 0 L 0.734375 0 Z M 4.53125 -4.421875 C 4.53125 -4.878906 4.359375 -5.191406 4.015625 -5.359375 C 3.828125 -5.441406 3.570312 -5.484375 3.25 -5.484375 L 1.578125 -5.484375 L 1.578125 -3.328125 L 3.25 -3.328125 C 3.632812 -3.328125 3.941406 -3.40625 4.171875 -3.5625 C 4.410156 -3.726562 4.53125 -4.015625 4.53125 -4.421875 Z M 4.53125 -4.421875 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-0-15&quot;&gt;
&lt;path d=&quot;M 3.28125 -6.375 C 4.0625 -6.375 4.664062 -6.164062 5.09375 -5.75 C 5.53125 -5.34375 5.773438 -4.875 5.828125 -4.34375 L 5.015625 -4.34375 C 4.921875 -4.738281 4.734375 -5.050781 4.453125 -5.28125 C 4.171875 -5.519531 3.78125 -5.640625 3.28125 -5.640625 C 2.664062 -5.640625 2.171875 -5.425781 1.796875 -5 C 1.421875 -4.570312 1.234375 -3.914062 1.234375 -3.03125 C 1.234375 -2.300781 1.398438 -1.707031 1.734375 -1.25 C 2.078125 -0.800781 2.585938 -0.578125 3.265625 -0.578125 C 3.890625 -0.578125 4.363281 -0.816406 4.6875 -1.296875 C 4.851562 -1.546875 4.976562 -1.875 5.0625 -2.28125 L 5.890625 -2.28125 C 5.816406 -1.625 5.570312 -1.078125 5.15625 -0.640625 C 4.664062 -0.109375 4.003906 0.15625 3.171875 0.15625 C 2.441406 0.15625 1.832031 -0.0625 1.34375 -0.5 C 0.695312 -1.070312 0.375 -1.960938 0.375 -3.171875 C 0.375 -4.085938 0.617188 -4.835938 1.109375 -5.421875 C 1.628906 -6.054688 2.351562 -6.375 3.28125 -6.375 Z M 3.109375 -6.375 Z M 3.109375 -6.375 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-0-16&quot;&gt;
&lt;path d=&quot;M 1.578125 -6.203125 L 1.578125 -2.375 C 1.578125 -1.914062 1.660156 -1.539062 1.828125 -1.25 C 2.078125 -0.800781 2.5 -0.578125 3.09375 -0.578125 C 3.800781 -0.578125 4.285156 -0.816406 4.546875 -1.296875 C 4.679688 -1.566406 4.75 -1.925781 4.75 -2.375 L 4.75 -6.203125 L 5.609375 -6.203125 L 5.609375 -2.71875 C 5.609375 -1.957031 5.503906 -1.367188 5.296875 -0.953125 C 4.921875 -0.203125 4.207031 0.171875 3.15625 0.171875 C 2.113281 0.171875 1.40625 -0.203125 1.03125 -0.953125 C 0.820312 -1.367188 0.71875 -1.957031 0.71875 -2.71875 L 0.71875 -6.203125 Z M 3.171875 -6.203125 Z M 3.171875 -6.203125 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-0-17&quot;&gt;
&lt;path d=&quot;M 3.84375 -2.546875 L 2.90625 -5.28125 L 1.90625 -2.546875 Z M 2.46875 -6.203125 L 3.421875 -6.203125 L 5.671875 0 L 4.75 0 L 4.109375 -1.859375 L 1.65625 -1.859375 L 0.984375 0 L 0.125 0 Z M 2.46875 -6.203125 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-0-18&quot;&gt;
&lt;path d=&quot;M 3.546875 -3.359375 C 3.941406 -3.359375 4.253906 -3.4375 4.484375 -3.59375 C 4.710938 -3.757812 4.828125 -4.046875 4.828125 -4.453125 C 4.828125 -4.898438 4.664062 -5.203125 4.34375 -5.359375 C 4.175781 -5.441406 3.945312 -5.484375 3.65625 -5.484375 L 1.609375 -5.484375 L 1.609375 -3.359375 Z M 0.765625 -6.203125 L 3.640625 -6.203125 C 4.109375 -6.203125 4.5 -6.132812 4.8125 -6 C 5.394531 -5.738281 5.6875 -5.25 5.6875 -4.53125 C 5.6875 -4.164062 5.609375 -3.863281 5.453125 -3.625 C 5.296875 -3.382812 5.082031 -3.191406 4.8125 -3.046875 C 5.050781 -2.953125 5.226562 -2.820312 5.34375 -2.65625 C 5.46875 -2.5 5.539062 -2.238281 5.5625 -1.875 L 5.59375 -1.046875 C 5.59375 -0.804688 5.609375 -0.628906 5.640625 -0.515625 C 5.691406 -0.316406 5.785156 -0.191406 5.921875 -0.140625 L 5.921875 0 L 4.890625 0 C 4.859375 -0.0507812 4.832031 -0.117188 4.8125 -0.203125 C 4.800781 -0.285156 4.789062 -0.453125 4.78125 -0.703125 L 4.71875 -1.734375 C 4.707031 -2.140625 4.554688 -2.410156 4.265625 -2.546875 C 4.109375 -2.617188 3.859375 -2.65625 3.515625 -2.65625 L 1.609375 -2.65625 L 1.609375 0 L 0.765625 0 Z M 0.765625 -6.203125 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-0-19&quot;&gt;
&lt;path d=&quot;M 0.84375 -6.203125 L 1.703125 -6.203125 L 1.703125 0 L 0.84375 0 Z M 0.84375 -6.203125 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-0-20&quot;&gt;
&lt;path d=&quot;M 3 -3.578125 C 3.351562 -3.578125 3.628906 -3.628906 3.828125 -3.734375 C 4.128906 -3.890625 4.28125 -4.164062 4.28125 -4.5625 C 4.28125 -4.96875 4.117188 -5.242188 3.796875 -5.390625 C 3.609375 -5.460938 3.332031 -5.5 2.96875 -5.5 L 1.46875 -5.5 L 1.46875 -3.578125 Z M 3.28125 -0.71875 C 3.789062 -0.71875 4.15625 -0.867188 4.375 -1.171875 C 4.519531 -1.359375 4.59375 -1.582031 4.59375 -1.84375 C 4.59375 -2.300781 4.390625 -2.609375 3.984375 -2.765625 C 3.765625 -2.859375 3.476562 -2.90625 3.125 -2.90625 L 1.46875 -2.90625 L 1.46875 -0.71875 Z M 0.640625 -6.203125 L 3.3125 -6.203125 C 4.03125 -6.203125 4.546875 -5.988281 4.859375 -5.5625 C 5.035156 -5.300781 5.125 -5.003906 5.125 -4.671875 C 5.125 -4.273438 5.015625 -3.953125 4.796875 -3.703125 C 4.679688 -3.578125 4.515625 -3.457031 4.296875 -3.34375 C 4.609375 -3.21875 4.847656 -3.082031 5.015625 -2.9375 C 5.285156 -2.664062 5.421875 -2.289062 5.421875 -1.8125 C 5.421875 -1.414062 5.296875 -1.054688 5.046875 -0.734375 C 4.671875 -0.242188 4.078125 0 3.265625 0 L 0.640625 0 Z M 0.640625 -6.203125 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-0-21&quot;&gt;
&lt;path d=&quot;M 1.203125 -2 C 1.222656 -1.644531 1.304688 -1.359375 1.453125 -1.140625 C 1.734375 -0.734375 2.226562 -0.53125 2.9375 -0.53125 C 3.25 -0.53125 3.535156 -0.570312 3.796875 -0.65625 C 4.296875 -0.832031 4.546875 -1.148438 4.546875 -1.609375 C 4.546875 -1.941406 4.441406 -2.179688 4.234375 -2.328125 C 4.015625 -2.460938 3.675781 -2.582031 3.21875 -2.6875 L 2.390625 -2.875 C 1.835938 -3 1.445312 -3.140625 1.21875 -3.296875 C 0.820312 -3.554688 0.625 -3.941406 0.625 -4.453125 C 0.625 -5.015625 0.816406 -5.472656 1.203125 -5.828125 C 1.585938 -6.179688 2.132812 -6.359375 2.84375 -6.359375 C 3.5 -6.359375 4.050781 -6.203125 4.5 -5.890625 C 4.957031 -5.578125 5.1875 -5.078125 5.1875 -4.390625 L 4.390625 -4.390625 C 4.347656 -4.722656 4.257812 -4.976562 4.125 -5.15625 C 3.863281 -5.476562 3.425781 -5.640625 2.8125 -5.640625 C 2.320312 -5.640625 1.96875 -5.535156 1.75 -5.328125 C 1.53125 -5.117188 1.421875 -4.875 1.421875 -4.59375 C 1.421875 -4.289062 1.550781 -4.070312 1.8125 -3.9375 C 1.96875 -3.84375 2.34375 -3.726562 2.9375 -3.59375 L 3.796875 -3.390625 C 4.222656 -3.296875 4.550781 -3.164062 4.78125 -3 C 5.175781 -2.707031 5.375 -2.285156 5.375 -1.734375 C 5.375 -1.046875 5.125 -0.550781 4.625 -0.25 C 4.125 0.0390625 3.539062 0.1875 2.875 0.1875 C 2.101562 0.1875 1.5 -0.0078125 1.0625 -0.40625 C 0.625 -0.800781 0.410156 -1.332031 0.421875 -2 Z M 2.90625 -6.375 Z M 2.90625 -6.375 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-0-22&quot;&gt;
&lt;path d=&quot;M 0.9375 -4.53125 L 2.140625 -0.84375 L 3.40625 -4.53125 L 4.234375 -4.53125 L 2.53125 0 L 1.71875 0 L 0.046875 -4.53125 Z M 0.9375 -4.53125 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-0-23&quot;&gt;
&lt;path d=&quot;M 0.5625 -4.5 L 1.328125 -4.5 L 1.328125 0 L 0.5625 0 Z M 0.5625 -6.203125 L 1.328125 -6.203125 L 1.328125 -5.34375 L 0.5625 -5.34375 Z M 0.5625 -6.203125 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-0-24&quot;&gt;
&lt;path d=&quot;M 2.296875 -4.65625 C 2.804688 -4.65625 3.222656 -4.53125 3.546875 -4.28125 C 3.867188 -4.03125 4.0625 -3.601562 4.125 -3 L 3.390625 -3 C 3.335938 -3.28125 3.234375 -3.515625 3.078125 -3.703125 C 2.921875 -3.890625 2.660156 -3.984375 2.296875 -3.984375 C 1.816406 -3.984375 1.472656 -3.742188 1.265625 -3.265625 C 1.128906 -2.960938 1.0625 -2.582031 1.0625 -2.125 C 1.0625 -1.675781 1.15625 -1.296875 1.34375 -0.984375 C 1.539062 -0.671875 1.84375 -0.515625 2.25 -0.515625 C 2.5625 -0.515625 2.8125 -0.609375 3 -0.796875 C 3.1875 -0.992188 3.316406 -1.265625 3.390625 -1.609375 L 4.125 -1.609375 C 4.039062 -1.003906 3.828125 -0.5625 3.484375 -0.28125 C 3.148438 -0.0078125 2.71875 0.125 2.1875 0.125 C 1.601562 0.125 1.132812 -0.0859375 0.78125 -0.515625 C 0.425781 -0.953125 0.25 -1.492188 0.25 -2.140625 C 0.25 -2.929688 0.441406 -3.546875 0.828125 -3.984375 C 1.210938 -4.429688 1.703125 -4.65625 2.296875 -4.65625 Z M 2.1875 -4.640625 Z M 2.1875 -4.640625 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-0-25&quot;&gt;
&lt;path d=&quot;M 0.90625 -4.53125 L 1.78125 -0.953125 L 2.65625 -4.53125 L 3.515625 -4.53125 L 4.40625 -0.984375 L 5.328125 -4.53125 L 6.09375 -4.53125 L 4.78125 0 L 3.984375 0 L 3.0625 -3.5 L 2.171875 0 L 1.375 0 L 0.078125 -4.53125 Z M 0.90625 -4.53125 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-0-26&quot;&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-0-27&quot;&gt;
&lt;path d=&quot;M 0.578125 -6.203125 L 1.34375 -6.203125 L 1.34375 0 L 0.578125 0 Z M 0.578125 -6.203125 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-0-28&quot;&gt;
&lt;path d=&quot;M 0.5625 -4.53125 L 1.28125 -4.53125 L 1.28125 -3.890625 C 1.5 -4.148438 1.726562 -4.335938 1.96875 -4.453125 C 2.207031 -4.566406 2.472656 -4.625 2.765625 -4.625 C 3.398438 -4.625 3.832031 -4.398438 4.0625 -3.953125 C 4.1875 -3.710938 4.25 -3.363281 4.25 -2.90625 L 4.25 0 L 3.46875 0 L 3.46875 -2.859375 C 3.46875 -3.128906 3.429688 -3.347656 3.359375 -3.515625 C 3.222656 -3.796875 2.972656 -3.9375 2.609375 -3.9375 C 2.429688 -3.9375 2.285156 -3.921875 2.171875 -3.890625 C 1.960938 -3.828125 1.78125 -3.703125 1.625 -3.515625 C 1.5 -3.367188 1.414062 -3.210938 1.375 -3.046875 C 1.332031 -2.890625 1.3125 -2.664062 1.3125 -2.375 L 1.3125 0 L 0.5625 0 Z M 2.34375 -4.640625 Z M 2.34375 -4.640625 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-0-29&quot;&gt;
&lt;path d=&quot;M 0.640625 -6.203125 L 1.84375 -6.203125 L 3.625 -0.953125 L 5.390625 -6.203125 L 6.59375 -6.203125 L 6.59375 0 L 5.796875 0 L 5.796875 -3.671875 C 5.796875 -3.796875 5.796875 -4.003906 5.796875 -4.296875 C 5.804688 -4.585938 5.8125 -4.898438 5.8125 -5.234375 L 4.03125 0 L 3.203125 0 L 1.421875 -5.234375 L 1.421875 -5.046875 C 1.421875 -4.890625 1.421875 -4.65625 1.421875 -4.34375 C 1.429688 -4.039062 1.4375 -3.816406 1.4375 -3.671875 L 1.4375 0 L 0.640625 0 Z M 0.640625 -6.203125 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-0-30&quot;&gt;
&lt;path d=&quot;M 3.390625 -4.53125 L 4.234375 -4.53125 C 4.117188 -4.238281 3.878906 -3.578125 3.515625 -2.546875 C 3.234375 -1.765625 3 -1.128906 2.8125 -0.640625 C 2.375 0.511719 2.066406 1.21875 1.890625 1.46875 C 1.710938 1.726562 1.398438 1.859375 0.953125 1.859375 C 0.847656 1.859375 0.765625 1.851562 0.703125 1.84375 C 0.648438 1.832031 0.582031 1.816406 0.5 1.796875 L 0.5 1.109375 C 0.632812 1.140625 0.726562 1.160156 0.78125 1.171875 C 0.84375 1.179688 0.894531 1.1875 0.9375 1.1875 C 1.082031 1.1875 1.1875 1.160156 1.25 1.109375 C 1.320312 1.066406 1.378906 1.007812 1.421875 0.9375 C 1.429688 0.914062 1.476562 0.800781 1.5625 0.59375 C 1.65625 0.382812 1.722656 0.226562 1.765625 0.125 L 0.09375 -4.53125 L 0.953125 -4.53125 L 2.171875 -0.84375 Z M 2.15625 -4.640625 Z M 2.15625 -4.640625 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-0-31&quot;&gt;
&lt;path d=&quot;M 0.359375 -2.796875 L 2.484375 -2.796875 L 2.484375 -2.015625 L 0.359375 -2.015625 Z M 0.359375 -2.796875 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-0-32&quot;&gt;
&lt;path d=&quot;M 0.734375 -6.203125 L 5.265625 -6.203125 L 5.265625 -5.453125 L 1.5625 -5.453125 L 1.5625 -3.5625 L 4.984375 -3.5625 L 4.984375 -2.84375 L 1.5625 -2.84375 L 1.5625 -0.734375 L 5.328125 -0.734375 L 5.328125 0 L 0.734375 0 Z M 3.03125 -6.203125 Z M 3.03125 -6.203125 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-0-33&quot;&gt;
&lt;path d=&quot;M 0.5625 -6.234375 L 1.3125 -6.234375 L 1.3125 -3.90625 C 1.5 -4.132812 1.664062 -4.296875 1.8125 -4.390625 C 2.050781 -4.554688 2.351562 -4.640625 2.71875 -4.640625 C 3.375 -4.640625 3.820312 -4.410156 4.0625 -3.953125 C 4.1875 -3.703125 4.25 -3.351562 4.25 -2.90625 L 4.25 0 L 3.46875 0 L 3.46875 -2.859375 C 3.46875 -3.191406 3.425781 -3.429688 3.34375 -3.578125 C 3.195312 -3.828125 2.9375 -3.953125 2.5625 -3.953125 C 2.25 -3.953125 1.960938 -3.84375 1.703125 -3.625 C 1.441406 -3.414062 1.3125 -3.007812 1.3125 -2.40625 L 1.3125 0 L 0.5625 0 Z M 0.5625 -6.234375 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-1-0&quot;&gt;
&lt;path d=&quot;M 0.515625 -4.125 L 1.21875 -4.125 L 1.21875 0 L 0.515625 0 Z M 0.515625 -5.6875 L 1.21875 -5.6875 L 1.21875 -4.90625 L 0.515625 -4.90625 Z M 0.515625 -5.6875 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-1-1&quot;&gt;
&lt;path d=&quot;M 0.515625 -4.15625 L 1.203125 -4.15625 L 1.203125 -3.5625 C 1.367188 -3.769531 1.519531 -3.914062 1.65625 -4 C 1.882812 -4.164062 2.144531 -4.25 2.4375 -4.25 C 2.769531 -4.25 3.035156 -4.164062 3.234375 -4 C 3.347656 -3.90625 3.453125 -3.769531 3.546875 -3.59375 C 3.703125 -3.8125 3.882812 -3.972656 4.09375 -4.078125 C 4.300781 -4.191406 4.535156 -4.25 4.796875 -4.25 C 5.347656 -4.25 5.726562 -4.046875 5.9375 -3.640625 C 6.039062 -3.421875 6.09375 -3.128906 6.09375 -2.765625 L 6.09375 0 L 5.375 0 L 5.375 -2.890625 C 5.375 -3.160156 5.300781 -3.347656 5.15625 -3.453125 C 5.019531 -3.554688 4.851562 -3.609375 4.65625 -3.609375 C 4.382812 -3.609375 4.148438 -3.515625 3.953125 -3.328125 C 3.753906 -3.148438 3.65625 -2.847656 3.65625 -2.421875 L 3.65625 0 L 2.953125 0 L 2.953125 -2.703125 C 2.953125 -2.984375 2.914062 -3.191406 2.84375 -3.328125 C 2.738281 -3.515625 2.539062 -3.609375 2.25 -3.609375 C 1.988281 -3.609375 1.75 -3.503906 1.53125 -3.296875 C 1.3125 -3.097656 1.203125 -2.734375 1.203125 -2.203125 L 1.203125 0 L 0.515625 0 Z M 0.515625 -4.15625 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-1-2&quot;&gt;
&lt;path d=&quot;M 2.265625 -0.46875 C 2.585938 -0.46875 2.859375 -0.601562 3.078125 -0.875 C 3.296875 -1.144531 3.40625 -1.550781 3.40625 -2.09375 C 3.40625 -2.425781 3.351562 -2.710938 3.25 -2.953125 C 3.070312 -3.410156 2.742188 -3.640625 2.265625 -3.640625 C 1.773438 -3.640625 1.441406 -3.398438 1.265625 -2.921875 C 1.171875 -2.660156 1.125 -2.332031 1.125 -1.9375 C 1.125 -1.613281 1.171875 -1.335938 1.265625 -1.109375 C 1.453125 -0.679688 1.785156 -0.46875 2.265625 -0.46875 Z M 0.453125 -4.125 L 1.140625 -4.125 L 1.140625 -3.578125 C 1.273438 -3.765625 1.425781 -3.910156 1.59375 -4.015625 C 1.832031 -4.171875 2.109375 -4.25 2.421875 -4.25 C 2.890625 -4.25 3.285156 -4.066406 3.609375 -3.703125 C 3.941406 -3.347656 4.109375 -2.835938 4.109375 -2.171875 C 4.109375 -1.265625 3.875 -0.617188 3.40625 -0.234375 C 3.101562 0.0117188 2.753906 0.140625 2.359375 0.140625 C 2.046875 0.140625 1.78125 0.0703125 1.5625 -0.0625 C 1.445312 -0.144531 1.3125 -0.28125 1.15625 -0.46875 L 1.15625 1.65625 L 0.453125 1.65625 Z M 0.453125 -4.125 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-1-3&quot;&gt;
&lt;path d=&quot;M 2.15625 -0.453125 C 2.625 -0.453125 2.941406 -0.625 3.109375 -0.96875 C 3.285156 -1.320312 3.375 -1.710938 3.375 -2.140625 C 3.375 -2.523438 3.3125 -2.84375 3.1875 -3.09375 C 2.988281 -3.46875 2.648438 -3.65625 2.171875 -3.65625 C 1.742188 -3.65625 1.429688 -3.492188 1.234375 -3.171875 C 1.046875 -2.847656 0.953125 -2.457031 0.953125 -2 C 0.953125 -1.550781 1.046875 -1.179688 1.234375 -0.890625 C 1.429688 -0.597656 1.738281 -0.453125 2.15625 -0.453125 Z M 2.1875 -4.265625 C 2.71875 -4.265625 3.164062 -4.085938 3.53125 -3.734375 C 3.90625 -3.378906 4.09375 -2.851562 4.09375 -2.15625 C 4.09375 -1.488281 3.929688 -0.9375 3.609375 -0.5 C 3.285156 -0.0625 2.78125 0.15625 2.09375 0.15625 C 1.519531 0.15625 1.066406 -0.0351562 0.734375 -0.421875 C 0.398438 -0.804688 0.234375 -1.328125 0.234375 -1.984375 C 0.234375 -2.679688 0.410156 -3.234375 0.765625 -3.640625 C 1.117188 -4.054688 1.59375 -4.265625 2.1875 -4.265625 Z M 2.15625 -4.25 Z M 2.15625 -4.25 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-1-4&quot;&gt;
&lt;path d=&quot;M 0.53125 -4.15625 L 1.1875 -4.15625 L 1.1875 -3.4375 C 1.25 -3.570312 1.382812 -3.738281 1.59375 -3.9375 C 1.800781 -4.144531 2.046875 -4.25 2.328125 -4.25 C 2.335938 -4.25 2.359375 -4.242188 2.390625 -4.234375 C 2.421875 -4.234375 2.472656 -4.226562 2.546875 -4.21875 L 2.546875 -3.484375 C 2.503906 -3.492188 2.46875 -3.5 2.4375 -3.5 C 2.40625 -3.5 2.367188 -3.5 2.328125 -3.5 C 1.972656 -3.5 1.703125 -3.382812 1.515625 -3.15625 C 1.328125 -2.9375 1.234375 -2.679688 1.234375 -2.390625 L 1.234375 0 L 0.53125 0 Z M 0.53125 -4.15625 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-1-5&quot;&gt;
&lt;path d=&quot;M 0.65625 -5.3125 L 1.359375 -5.3125 L 1.359375 -4.15625 L 2.015625 -4.15625 L 2.015625 -3.578125 L 1.359375 -3.578125 L 1.359375 -0.875 C 1.359375 -0.726562 1.40625 -0.628906 1.5 -0.578125 C 1.550781 -0.546875 1.644531 -0.53125 1.78125 -0.53125 C 1.8125 -0.53125 1.84375 -0.53125 1.875 -0.53125 C 1.914062 -0.539062 1.960938 -0.546875 2.015625 -0.546875 L 2.015625 0 C 1.941406 0.0195312 1.859375 0.0351562 1.765625 0.046875 C 1.679688 0.0546875 1.585938 0.0625 1.484375 0.0625 C 1.160156 0.0625 0.941406 -0.0195312 0.828125 -0.1875 C 0.710938 -0.351562 0.65625 -0.566406 0.65625 -0.828125 L 0.65625 -3.578125 L 0.09375 -3.578125 L 0.09375 -4.15625 L 0.65625 -4.15625 Z M 0.65625 -5.3125 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-2-0&quot;&gt;
&lt;path d=&quot;M 5.078125 -5.125 L 1.953125 -5.125 L 1.953125 -3.6875 L 4.6875 -3.6875 L 4.6875 -2.609375 L 1.953125 -2.609375 L 1.953125 0 L 0.65625 0 L 0.65625 -6.21875 L 5.078125 -6.21875 Z M 5.078125 -5.125 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-2-1&quot;&gt;
&lt;path d=&quot;M 3.34375 0 L 0.65625 0 L 0.65625 -6.234375 L 3.34375 -6.234375 C 3.726562 -6.222656 4.050781 -6.175781 4.3125 -6.09375 C 4.75 -5.945312 5.101562 -5.679688 5.375 -5.296875 C 5.582031 -4.992188 5.726562 -4.660156 5.8125 -4.296875 C 5.894531 -3.929688 5.9375 -3.585938 5.9375 -3.265625 C 5.9375 -2.441406 5.769531 -1.738281 5.4375 -1.15625 C 4.976562 -0.382812 4.28125 0 3.34375 0 Z M 4.3125 -4.640625 C 4.113281 -4.972656 3.71875 -5.140625 3.125 -5.140625 L 1.921875 -5.140625 L 1.921875 -1.078125 L 3.125 -1.078125 C 3.738281 -1.078125 4.164062 -1.378906 4.40625 -1.984375 C 4.539062 -2.316406 4.609375 -2.710938 4.609375 -3.171875 C 4.609375 -3.804688 4.507812 -4.296875 4.3125 -4.640625 Z M 4.3125 -4.640625 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-2-2&quot;&gt;
&lt;path d=&quot;M 0.5625 -6.234375 L 1.84375 -6.234375 L 1.84375 0 L 0.5625 0 Z M 0.5625 -6.234375 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-2-3&quot;&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-2-4&quot;&gt;
&lt;path d=&quot;M 3.3125 -2.234375 L 1.984375 -2.234375 L 1.984375 0 L 0.6875 0 L 0.6875 -6.234375 L 3.40625 -6.234375 C 4.03125 -6.234375 4.523438 -6.070312 4.890625 -5.75 C 5.265625 -5.425781 5.453125 -4.925781 5.453125 -4.25 C 5.453125 -3.519531 5.265625 -3 4.890625 -2.6875 C 4.523438 -2.382812 4 -2.234375 3.3125 -2.234375 Z M 3.90625 -3.53125 C 4.082031 -3.6875 4.171875 -3.925781 4.171875 -4.25 C 4.171875 -4.570312 4.082031 -4.800781 3.90625 -4.9375 C 3.738281 -5.070312 3.503906 -5.140625 3.203125 -5.140625 L 1.984375 -5.140625 L 1.984375 -3.3125 L 3.203125 -3.3125 C 3.503906 -3.3125 3.738281 -3.382812 3.90625 -3.53125 Z M 3.90625 -3.53125 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-2-5&quot;&gt;
&lt;path d=&quot;M 0.734375 -4.109375 C 1.054688 -4.515625 1.601562 -4.71875 2.375 -4.71875 C 2.875 -4.71875 3.320312 -4.617188 3.71875 -4.421875 C 4.113281 -4.210938 4.3125 -3.832031 4.3125 -3.28125 L 4.3125 -1.171875 C 4.3125 -1.023438 4.3125 -0.847656 4.3125 -0.640625 C 4.320312 -0.484375 4.347656 -0.375 4.390625 -0.3125 C 4.429688 -0.257812 4.488281 -0.210938 4.5625 -0.171875 L 4.5625 0 L 3.25 0 C 3.21875 -0.09375 3.191406 -0.179688 3.171875 -0.265625 C 3.160156 -0.347656 3.148438 -0.441406 3.140625 -0.546875 C 2.972656 -0.359375 2.78125 -0.203125 2.5625 -0.078125 C 2.3125 0.0664062 2.019531 0.140625 1.6875 0.140625 C 1.269531 0.140625 0.925781 0.0195312 0.65625 -0.21875 C 0.382812 -0.457031 0.25 -0.789062 0.25 -1.21875 C 0.25 -1.789062 0.46875 -2.203125 0.90625 -2.453125 C 1.144531 -2.585938 1.5 -2.6875 1.96875 -2.75 L 2.375 -2.796875 C 2.59375 -2.828125 2.75 -2.863281 2.84375 -2.90625 C 3.019531 -2.976562 3.109375 -3.09375 3.109375 -3.25 C 3.109375 -3.4375 3.039062 -3.566406 2.90625 -3.640625 C 2.78125 -3.710938 2.585938 -3.75 2.328125 -3.75 C 2.046875 -3.75 1.847656 -3.675781 1.734375 -3.53125 C 1.648438 -3.425781 1.59375 -3.285156 1.5625 -3.109375 L 0.390625 -3.109375 C 0.421875 -3.515625 0.535156 -3.847656 0.734375 -4.109375 Z M 1.625 -0.875 C 1.738281 -0.78125 1.878906 -0.734375 2.046875 -0.734375 C 2.304688 -0.734375 2.546875 -0.804688 2.765625 -0.953125 C 2.984375 -1.109375 3.097656 -1.390625 3.109375 -1.796875 L 3.109375 -2.234375 C 3.023438 -2.191406 2.941406 -2.15625 2.859375 -2.125 C 2.785156 -2.09375 2.679688 -2.066406 2.546875 -2.046875 L 2.28125 -1.984375 C 2.03125 -1.941406 1.847656 -1.890625 1.734375 -1.828125 C 1.546875 -1.710938 1.453125 -1.539062 1.453125 -1.3125 C 1.453125 -1.101562 1.507812 -0.957031 1.625 -0.875 Z M 1.625 -0.875 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-2-6&quot;&gt;
&lt;path d=&quot;M 4.546875 -2.953125 L 3.3125 -2.953125 C 3.289062 -3.128906 3.234375 -3.285156 3.140625 -3.421875 C 3.003906 -3.609375 2.796875 -3.703125 2.515625 -3.703125 C 2.109375 -3.703125 1.828125 -3.5 1.671875 -3.09375 C 1.597656 -2.875 1.5625 -2.585938 1.5625 -2.234375 C 1.5625 -1.898438 1.597656 -1.628906 1.671875 -1.421875 C 1.816406 -1.035156 2.085938 -0.84375 2.484375 -0.84375 C 2.765625 -0.84375 2.960938 -0.921875 3.078125 -1.078125 C 3.203125 -1.234375 3.28125 -1.429688 3.3125 -1.671875 L 4.53125 -1.671875 C 4.507812 -1.304688 4.378906 -0.957031 4.140625 -0.625 C 3.765625 -0.101562 3.203125 0.15625 2.453125 0.15625 C 1.710938 0.15625 1.164062 -0.0625 0.8125 -0.5 C 0.46875 -0.9375 0.296875 -1.503906 0.296875 -2.203125 C 0.296875 -2.992188 0.488281 -3.609375 0.875 -4.046875 C 1.257812 -4.492188 1.796875 -4.71875 2.484375 -4.71875 C 3.054688 -4.71875 3.523438 -4.585938 3.890625 -4.328125 C 4.265625 -4.066406 4.484375 -3.609375 4.546875 -2.953125 Z M 4.546875 -2.953125 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-2-7&quot;&gt;
&lt;path d=&quot;M 4.78125 0 L 3.328125 0 L 2.234375 -1.96875 L 1.734375 -1.453125 L 1.734375 0 L 0.546875 0 L 0.546875 -6.203125 L 1.734375 -6.203125 L 1.734375 -2.859375 L 3.234375 -4.59375 L 4.71875 -4.59375 L 3.109375 -2.828125 Z M 4.78125 0 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-2-8&quot;&gt;
&lt;path d=&quot;M 1.859375 0.8125 C 1.992188 0.914062 2.210938 0.96875 2.515625 0.96875 C 2.953125 0.96875 3.242188 0.820312 3.390625 0.53125 C 3.484375 0.351562 3.53125 0.0390625 3.53125 -0.40625 L 3.53125 -0.703125 C 3.414062 -0.503906 3.289062 -0.351562 3.15625 -0.25 C 2.914062 -0.0703125 2.609375 0.015625 2.234375 0.015625 C 1.640625 0.015625 1.164062 -0.1875 0.8125 -0.59375 C 0.457031 -1.007812 0.28125 -1.578125 0.28125 -2.296875 C 0.28125 -2.972656 0.445312 -3.546875 0.78125 -4.015625 C 1.125 -4.484375 1.609375 -4.71875 2.234375 -4.71875 C 2.472656 -4.71875 2.675781 -4.679688 2.84375 -4.609375 C 3.132812 -4.484375 3.367188 -4.257812 3.546875 -3.9375 L 3.546875 -4.609375 L 4.71875 -4.609375 L 4.71875 -0.234375 C 4.71875 0.355469 4.617188 0.804688 4.421875 1.109375 C 4.078125 1.628906 3.421875 1.890625 2.453125 1.890625 C 1.859375 1.890625 1.375 1.769531 1 1.53125 C 0.632812 1.300781 0.429688 0.957031 0.390625 0.5 L 1.703125 0.5 C 1.734375 0.644531 1.785156 0.75 1.859375 0.8125 Z M 1.65625 -1.578125 C 1.820312 -1.179688 2.117188 -0.984375 2.546875 -0.984375 C 2.828125 -0.984375 3.0625 -1.085938 3.25 -1.296875 C 3.445312 -1.515625 3.546875 -1.859375 3.546875 -2.328125 C 3.546875 -2.765625 3.453125 -3.097656 3.265625 -3.328125 C 3.085938 -3.554688 2.84375 -3.671875 2.53125 -3.671875 C 2.101562 -3.671875 1.8125 -3.46875 1.65625 -3.0625 C 1.570312 -2.851562 1.53125 -2.59375 1.53125 -2.28125 C 1.53125 -2.019531 1.570312 -1.785156 1.65625 -1.578125 Z M 1.65625 -1.578125 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-2-9&quot;&gt;
&lt;path d=&quot;M 4.5 -1.359375 C 4.46875 -1.078125 4.328125 -0.796875 4.078125 -0.515625 C 3.679688 -0.0664062 3.128906 0.15625 2.421875 0.15625 C 1.835938 0.15625 1.320312 -0.03125 0.875 -0.40625 C 0.425781 -0.789062 0.203125 -1.40625 0.203125 -2.25 C 0.203125 -3.050781 0.398438 -3.664062 0.796875 -4.09375 C 1.203125 -4.519531 1.726562 -4.734375 2.375 -4.734375 C 2.757812 -4.734375 3.101562 -4.660156 3.40625 -4.515625 C 3.71875 -4.367188 3.972656 -4.140625 4.171875 -3.828125 C 4.359375 -3.554688 4.476562 -3.238281 4.53125 -2.875 C 4.5625 -2.664062 4.570312 -2.363281 4.5625 -1.96875 L 1.40625 -1.96875 C 1.425781 -1.507812 1.570312 -1.1875 1.84375 -1 C 2.007812 -0.882812 2.210938 -0.828125 2.453125 -0.828125 C 2.691406 -0.828125 2.890625 -0.894531 3.046875 -1.03125 C 3.128906 -1.113281 3.207031 -1.222656 3.28125 -1.359375 Z M 3.3125 -2.765625 C 3.289062 -3.078125 3.191406 -3.316406 3.015625 -3.484375 C 2.847656 -3.648438 2.632812 -3.734375 2.375 -3.734375 C 2.101562 -3.734375 1.890625 -3.644531 1.734375 -3.46875 C 1.578125 -3.300781 1.476562 -3.066406 1.4375 -2.765625 Z M 3.3125 -2.765625 &quot;/&gt;
&lt;/g&gt;
&lt;/g&gt;
&lt;/defs&gt;
&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;rgb(100%, 100%, 100%)&quot; fill-opacity=&quot;1&quot; d=&quot;M 0 0 L 433.5 0 L 433.5 289.242188 L 0 289.242188 Z M 0 0 &quot;/&gt;
&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;rgb(100%, 100%, 100%)&quot; fill-opacity=&quot;1&quot; stroke-width=&quot;1&quot; stroke-linecap=&quot;butt&quot; stroke-linejoin=&quot;miter&quot; stroke=&quot;rgb(0%, 0%, 0%)&quot; stroke-opacity=&quot;1&quot; stroke-miterlimit=&quot;4&quot; d=&quot;M 39.99775 160.001713 L 160.001713 160.001713 L 160.001713 220.000986 L 39.99775 220.000986 Z M 39.99775 160.001713 &quot; transform=&quot;matrix(0.721298, 0, 0, 0.721298, 0.360649, 0.360649)&quot;/&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-0-0&quot; x=&quot;39.975676&quot; y=&quot;139.931772&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-1&quot; x=&quot;45.262845&quot; y=&quot;139.931772&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-2&quot; x=&quot;51.513623&quot; y=&quot;139.931772&quot;/&gt;
&lt;/g&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-0-3&quot; x=&quot;56.648643&quot; y=&quot;139.931772&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-4&quot; x=&quot;59.053439&quot; y=&quot;139.931772&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-5&quot; x=&quot;65.304217&quot; y=&quot;139.931772&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-6&quot; x=&quot;70.118034&quot; y=&quot;139.931772&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-7&quot; x=&quot;74.445821&quot; y=&quot;139.931772&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-8&quot; x=&quot;76.850617&quot; y=&quot;139.931772&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-0&quot; x=&quot;79.255412&quot; y=&quot;139.931772&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-9&quot; x=&quot;84.542582&quot; y=&quot;139.931772&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-10&quot; x=&quot;87.424955&quot; y=&quot;139.931772&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-11&quot; x=&quot;92.238773&quot; y=&quot;139.931772&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-12&quot; x=&quot;99.448933&quot; y=&quot;139.931772&quot;/&gt;
&lt;/g&gt;
&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;rgb(100%, 100%, 100%)&quot; fill-opacity=&quot;1&quot; stroke-width=&quot;1&quot; stroke-linecap=&quot;butt&quot; stroke-linejoin=&quot;miter&quot; stroke=&quot;rgb(0%, 0%, 0%)&quot; stroke-opacity=&quot;1&quot; stroke-miterlimit=&quot;4&quot; d=&quot;M 80.002681 160.001713 L 160.001713 160.001713 L 160.001713 180.001471 L 80.002681 180.001471 Z M 80.002681 160.001713 &quot; transform=&quot;matrix(0.721298, 0, 0, 0.721298, 0.360649, 0.360649)&quot;/&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-0-13&quot; x=&quot;69.954616&quot; y=&quot;125.505816&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-14&quot; x=&quot;76.687198&quot; y=&quot;125.505816&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-15&quot; x=&quot;82.460398&quot; y=&quot;125.505816&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-3&quot; x=&quot;88.711176&quot; y=&quot;125.505816&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-16&quot; x=&quot;91.115972&quot; y=&quot;125.505816&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-17&quot; x=&quot;97.366749&quot; y=&quot;125.505816&quot;/&gt;
&lt;/g&gt;
&lt;path fill=&quot;none&quot; stroke-width=&quot;1&quot; stroke-linecap=&quot;butt&quot; stroke-linejoin=&quot;miter&quot; stroke=&quot;rgb(0%, 0%, 0%)&quot; stroke-opacity=&quot;1&quot; stroke-miterlimit=&quot;10&quot; d=&quot;M 120.002197 220.000986 L 120.002197 249.997915 L 100.002439 249.997915 L 100.002439 273.631531 &quot; transform=&quot;matrix(0.721298, 0, 0, 0.721298, 0.360649, 0.360649)&quot;/&gt;
&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot; stroke-width=&quot;1&quot; stroke-linecap=&quot;butt&quot; stroke-linejoin=&quot;miter&quot; stroke=&quot;rgb(0%, 0%, 0%)&quot; stroke-opacity=&quot;1&quot; stroke-miterlimit=&quot;10&quot; d=&quot;M 100.002439 278.879234 L 96.498555 271.882297 L 100.002439 273.631531 L 103.500907 271.882297 Z M 100.002439 278.879234 &quot; transform=&quot;matrix(0.721298, 0, 0, 0.721298, 0.360649, 0.360649)&quot;/&gt;
&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;rgb(100%, 100%, 100%)&quot; fill-opacity=&quot;1&quot; stroke-width=&quot;1&quot; stroke-linecap=&quot;butt&quot; stroke-linejoin=&quot;miter&quot; stroke=&quot;rgb(0%, 0%, 0%)&quot; stroke-opacity=&quot;1&quot; stroke-miterlimit=&quot;4&quot; d=&quot;M 80.002681 200.001228 L 160.001713 200.001228 L 160.001713 220.000986 L 80.002681 220.000986 Z M 80.002681 200.001228 &quot; transform=&quot;matrix(0.721298, 0, 0, 0.721298, 0.360649, 0.360649)&quot;/&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-0-14&quot; x=&quot;64.432179&quot; y=&quot;154.357728&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-18&quot; x=&quot;70.205379&quot; y=&quot;154.357728&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-13&quot; x=&quot;76.456157&quot; y=&quot;154.357728&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-0&quot; x=&quot;83.18874&quot; y=&quot;154.357728&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-19&quot; x=&quot;88.475909&quot; y=&quot;154.357728&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-20&quot; x=&quot;90.880704&quot; y=&quot;154.357728&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-16&quot; x=&quot;96.653904&quot; y=&quot;154.357728&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-21&quot; x=&quot;102.904682&quot; y=&quot;154.357728&quot;/&gt;
&lt;/g&gt;
&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;rgb(100%, 100%, 100%)&quot; fill-opacity=&quot;1&quot; stroke-width=&quot;1&quot; stroke-linecap=&quot;butt&quot; stroke-linejoin=&quot;miter&quot; stroke=&quot;rgb(0%, 0%, 0%)&quot; stroke-opacity=&quot;1&quot; stroke-miterlimit=&quot;4&quot; d=&quot;M 39.99775 280.00026 L 160.001713 280.00026 L 160.001713 339.999534 L 39.99775 339.999534 Z M 39.99775 280.00026 &quot; transform=&quot;matrix(0.721298, 0, 0, 0.721298, 0.360649, 0.360649)&quot;/&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-0-14&quot; x=&quot;50.006224&quot; y=&quot;221.438423&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-18&quot; x=&quot;55.779424&quot; y=&quot;221.438423&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-13&quot; x=&quot;62.030202&quot; y=&quot;221.438423&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-0&quot; x=&quot;68.762784&quot; y=&quot;221.438423&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-19&quot; x=&quot;74.049953&quot; y=&quot;221.438423&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-20&quot; x=&quot;76.454749&quot; y=&quot;221.438423&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-16&quot; x=&quot;82.227949&quot; y=&quot;221.438423&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-21&quot; x=&quot;88.478726&quot; y=&quot;221.438423&quot;/&gt;
&lt;/g&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-0-1&quot; x=&quot;58.898473&quot; y=&quot;232.25789&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-12&quot; x=&quot;65.149251&quot; y=&quot;232.25789&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-22&quot; x=&quot;69.963068&quot; y=&quot;232.25789&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-23&quot; x=&quot;74.290855&quot; y=&quot;232.25789&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-24&quot; x=&quot;76.213846&quot; y=&quot;232.25789&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-12&quot; x=&quot;80.541633&quot; y=&quot;232.25789&quot;/&gt;
&lt;/g&gt;
&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;rgb(100%, 100%, 100%)&quot; fill-opacity=&quot;1&quot; stroke-width=&quot;1&quot; stroke-linecap=&quot;butt&quot; stroke-linejoin=&quot;miter&quot; stroke=&quot;rgb(0%, 0%, 0%)&quot; stroke-opacity=&quot;1&quot; stroke-miterlimit=&quot;4&quot; d=&quot;M 39.99775 39.99775 L 160.001713 39.99775 L 160.001713 100.002439 L 39.99775 100.002439 Z M 39.99775 39.99775 &quot; transform=&quot;matrix(0.721298, 0, 0, 0.721298, 0.360649, 0.360649)&quot;/&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-0-0&quot; x=&quot;40.212352&quot; y=&quot;48.326952&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-1&quot; x=&quot;45.499521&quot; y=&quot;48.326952&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-2&quot; x=&quot;51.750299&quot; y=&quot;48.326952&quot;/&gt;
&lt;/g&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-0-3&quot; x=&quot;56.885319&quot; y=&quot;48.326952&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-10&quot; x=&quot;59.290115&quot; y=&quot;48.326952&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-25&quot; x=&quot;64.103932&quot; y=&quot;48.326952&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-10&quot; x=&quot;70.35471&quot; y=&quot;48.326952&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-9&quot; x=&quot;75.168528&quot; y=&quot;48.326952&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-12&quot; x=&quot;78.050901&quot; y=&quot;48.326952&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-26&quot; x=&quot;82.864719&quot; y=&quot;48.326952&quot;/&gt;
&lt;/g&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-0-13&quot; x=&quot;85.270924&quot; y=&quot;48.326952&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-14&quot; x=&quot;92.003506&quot; y=&quot;48.326952&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-15&quot; x=&quot;97.776706&quot; y=&quot;48.326952&quot;/&gt;
&lt;/g&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-0-16&quot; x=&quot;53.838118&quot; y=&quot;59.146419&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-17&quot; x=&quot;60.088896&quot; y=&quot;59.146419&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-26&quot; x=&quot;65.862096&quot; y=&quot;59.146419&quot;/&gt;
&lt;/g&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-0-15&quot; x=&quot;68.275344&quot; y=&quot;59.146419&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-27&quot; x=&quot;74.526122&quot; y=&quot;59.146419&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-23&quot; x=&quot;76.449113&quot; y=&quot;59.146419&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-12&quot; x=&quot;78.372105&quot; y=&quot;59.146419&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-28&quot; x=&quot;83.185922&quot; y=&quot;59.146419&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-7&quot; x=&quot;87.99974&quot; y=&quot;59.146419&quot;/&gt;
&lt;/g&gt;
&lt;path fill=&quot;none&quot; stroke-width=&quot;1&quot; stroke-linecap=&quot;butt&quot; stroke-linejoin=&quot;miter&quot; stroke=&quot;rgb(0%, 0%, 0%)&quot; stroke-opacity=&quot;1&quot; stroke-miterlimit=&quot;10&quot; d=&quot;M 240.000744 240.000744 L 240.000744 189.998642 L 166.370441 189.998642 &quot; transform=&quot;matrix(0.721298, 0, 0, 0.721298, 0.360649, 0.360649)&quot;/&gt;
&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot; stroke-width=&quot;1&quot; stroke-linecap=&quot;butt&quot; stroke-linejoin=&quot;miter&quot; stroke=&quot;rgb(0%, 0%, 0%)&quot; stroke-opacity=&quot;1&quot; stroke-miterlimit=&quot;10&quot; d=&quot;M 161.117323 189.998642 L 168.119676 186.500173 L 166.370441 189.998642 L 168.119676 193.502526 Z M 161.117323 189.998642 &quot; transform=&quot;matrix(0.721298, 0, 0, 0.721298, 0.360649, 0.360649)&quot;/&gt;
&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;rgb(100%, 100%, 100%)&quot; fill-opacity=&quot;1&quot; d=&quot;M 151.472656 132.71875 L 173.832031 132.71875 L 173.832031 142.09375 L 151.472656 142.09375 Z M 151.472656 132.71875 &quot;/&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-1-0&quot; x=&quot;151.630321&quot; y=&quot;139.931772&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-1-1&quot; x=&quot;153.393063&quot; y=&quot;139.931772&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-1-2&quot; x=&quot;160.002376&quot; y=&quot;139.931772&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-1-3&quot; x=&quot;164.415042&quot; y=&quot;139.931772&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-1-4&quot; x=&quot;168.827708&quot; y=&quot;139.931772&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-1-5&quot; x=&quot;171.469884&quot; y=&quot;139.931772&quot;/&gt;
&lt;/g&gt;
&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;rgb(100%, 100%, 100%)&quot; fill-opacity=&quot;1&quot; stroke-width=&quot;1&quot; stroke-linecap=&quot;butt&quot; stroke-linejoin=&quot;miter&quot; stroke=&quot;rgb(0%, 0%, 0%)&quot; stroke-opacity=&quot;1&quot; stroke-miterlimit=&quot;10&quot; d=&quot;M 200.001228 240.000744 L 280.00026 240.000744 L 280.00026 290.999315 C 266.667088 280.200637 253.333916 280.200637 240.000744 290.999315 C 226.667572 301.797992 213.3344 301.797992 200.001228 290.999315 Z M 200.001228 240.000744 &quot; transform=&quot;matrix(0.721298, 0, 0, 0.721298, 0.360649, 0.360649)&quot;/&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-0-14&quot; x=&quot;150.976644&quot; y=&quot;186.094831&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-18&quot; x=&quot;156.749844&quot; y=&quot;186.094831&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-13&quot; x=&quot;163.000622&quot; y=&quot;186.094831&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-0&quot; x=&quot;169.733205&quot; y=&quot;186.094831&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-19&quot; x=&quot;175.020374&quot; y=&quot;186.094831&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-20&quot; x=&quot;177.425169&quot; y=&quot;186.094831&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-16&quot; x=&quot;183.198369&quot; y=&quot;186.094831&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-21&quot; x=&quot;189.449147&quot; y=&quot;186.094831&quot;/&gt;
&lt;/g&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-0-1&quot; x=&quot;149.297377&quot; y=&quot;196.914298&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-12&quot; x=&quot;155.548155&quot; y=&quot;196.914298&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-22&quot; x=&quot;160.361972&quot; y=&quot;196.914298&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-23&quot; x=&quot;164.689759&quot; y=&quot;196.914298&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-24&quot; x=&quot;166.61275&quot; y=&quot;196.914298&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-12&quot; x=&quot;170.940537&quot; y=&quot;196.914298&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-3&quot; x=&quot;175.754354&quot; y=&quot;196.914298&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-1&quot; x=&quot;178.15915&quot; y=&quot;196.914298&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-2&quot; x=&quot;184.409928&quot; y=&quot;196.914298&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-29&quot; x=&quot;189.697097&quot; y=&quot;196.914298&quot;/&gt;
&lt;/g&gt;
&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;rgb(100%, 100%, 100%)&quot; fill-opacity=&quot;1&quot; stroke-width=&quot;1&quot; stroke-linecap=&quot;butt&quot; stroke-linejoin=&quot;miter&quot; stroke=&quot;rgb(0%, 0%, 0%)&quot; stroke-opacity=&quot;1&quot; stroke-miterlimit=&quot;4&quot; d=&quot;M 300.000018 160.001713 L 419.998565 160.001713 L 419.998565 220.000986 L 300.000018 220.000986 Z M 300.000018 160.001713 &quot; transform=&quot;matrix(0.721298, 0, 0, 0.721298, 0.360649, 0.360649)&quot;/&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-0-0&quot; x=&quot;226.960859&quot; y=&quot;139.931772&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-1&quot; x=&quot;232.248028&quot; y=&quot;139.931772&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-19&quot; x=&quot;238.498806&quot; y=&quot;139.931772&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-3&quot; x=&quot;240.903602&quot; y=&quot;139.931772&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-4&quot; x=&quot;243.308397&quot; y=&quot;139.931772&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-5&quot; x=&quot;249.559175&quot; y=&quot;139.931772&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-6&quot; x=&quot;254.372993&quot; y=&quot;139.931772&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-7&quot; x=&quot;258.700779&quot; y=&quot;139.931772&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-3&quot; x=&quot;261.105575&quot; y=&quot;139.931772&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-21&quot; x=&quot;263.510371&quot; y=&quot;139.931772&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-30&quot; x=&quot;269.28357&quot; y=&quot;139.931772&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-6&quot; x=&quot;273.611357&quot; y=&quot;139.931772&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-7&quot; x=&quot;277.939144&quot; y=&quot;139.931772&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-12&quot; x=&quot;280.34394&quot; y=&quot;139.931772&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-11&quot; x=&quot;285.157757&quot; y=&quot;139.931772&quot;/&gt;
&lt;/g&gt;
&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;rgb(100%, 100%, 100%)&quot; fill-opacity=&quot;1&quot; stroke-width=&quot;1&quot; stroke-linecap=&quot;butt&quot; stroke-linejoin=&quot;miter&quot; stroke=&quot;rgb(0%, 0%, 0%)&quot; stroke-opacity=&quot;1&quot; stroke-miterlimit=&quot;4&quot; d=&quot;M 339.999534 160.001713 L 419.998565 160.001713 L 419.998565 180.001471 L 339.999534 180.001471 Z M 339.999534 160.001713 &quot; transform=&quot;matrix(0.721298, 0, 0, 0.721298, 0.360649, 0.360649)&quot;/&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-0-13&quot; x=&quot;257.492046&quot; y=&quot;125.505816&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-14&quot; x=&quot;264.224628&quot; y=&quot;125.505816&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-15&quot; x=&quot;269.997828&quot; y=&quot;125.505816&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-3&quot; x=&quot;276.248606&quot; y=&quot;125.505816&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-16&quot; x=&quot;278.653402&quot; y=&quot;125.505816&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-17&quot; x=&quot;284.90418&quot; y=&quot;125.505816&quot;/&gt;
&lt;/g&gt;
&lt;path fill=&quot;none&quot; stroke-width=&quot;1&quot; stroke-linecap=&quot;butt&quot; stroke-linejoin=&quot;miter&quot; stroke=&quot;rgb(0%, 0%, 0%)&quot; stroke-opacity=&quot;1&quot; stroke-miterlimit=&quot;10&quot; d=&quot;M 379.999049 220.000986 L 379.999049 249.997915 L 359.999292 249.997915 L 359.999292 273.631531 &quot; transform=&quot;matrix(0.721298, 0, 0, 0.721298, 0.360649, 0.360649)&quot;/&gt;
&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot; stroke-width=&quot;1&quot; stroke-linecap=&quot;butt&quot; stroke-linejoin=&quot;miter&quot; stroke=&quot;rgb(0%, 0%, 0%)&quot; stroke-opacity=&quot;1&quot; stroke-miterlimit=&quot;10&quot; d=&quot;M 359.999292 278.879234 L 356.500823 271.882297 L 359.999292 273.631531 L 363.49776 271.882297 Z M 359.999292 278.879234 &quot; transform=&quot;matrix(0.721298, 0, 0, 0.721298, 0.360649, 0.360649)&quot;/&gt;
&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;rgb(100%, 100%, 100%)&quot; fill-opacity=&quot;1&quot; stroke-width=&quot;1&quot; stroke-linecap=&quot;butt&quot; stroke-linejoin=&quot;miter&quot; stroke=&quot;rgb(0%, 0%, 0%)&quot; stroke-opacity=&quot;1&quot; stroke-miterlimit=&quot;4&quot; d=&quot;M 339.999534 200.001228 L 419.998565 200.001228 L 419.998565 220.000986 L 339.999534 220.000986 Z M 339.999534 200.001228 &quot; transform=&quot;matrix(0.721298, 0, 0, 0.721298, 0.360649, 0.360649)&quot;/&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-0-14&quot; x=&quot;251.96961&quot; y=&quot;154.357728&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-18&quot; x=&quot;257.742809&quot; y=&quot;154.357728&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-13&quot; x=&quot;263.993587&quot; y=&quot;154.357728&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-0&quot; x=&quot;270.72617&quot; y=&quot;154.357728&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-19&quot; x=&quot;276.013339&quot; y=&quot;154.357728&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-20&quot; x=&quot;278.418134&quot; y=&quot;154.357728&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-16&quot; x=&quot;284.191334&quot; y=&quot;154.357728&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-21&quot; x=&quot;290.442112&quot; y=&quot;154.357728&quot;/&gt;
&lt;/g&gt;
&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;rgb(85.488892%, 90.979004%, 98.81897%)&quot; fill-opacity=&quot;1&quot; stroke-width=&quot;1&quot; stroke-linecap=&quot;butt&quot; stroke-linejoin=&quot;miter&quot; stroke=&quot;rgb(42.349243%, 55.688477%, 74.899292%)&quot; stroke-opacity=&quot;1&quot; stroke-miterlimit=&quot;4&quot; d=&quot;M 300.000018 280.00026 L 419.998565 280.00026 L 419.998565 339.999534 L 300.000018 339.999534 Z M 300.000018 280.00026 &quot; transform=&quot;matrix(0.721298, 0, 0, 0.721298, 0.360649, 0.360649)&quot;/&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-0-14&quot; x=&quot;237.543654&quot; y=&quot;221.438423&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-18&quot; x=&quot;243.316854&quot; y=&quot;221.438423&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-13&quot; x=&quot;249.567632&quot; y=&quot;221.438423&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-0&quot; x=&quot;256.300214&quot; y=&quot;221.438423&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-19&quot; x=&quot;261.587383&quot; y=&quot;221.438423&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-20&quot; x=&quot;263.992179&quot; y=&quot;221.438423&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-16&quot; x=&quot;269.765379&quot; y=&quot;221.438423&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-21&quot; x=&quot;276.016157&quot; y=&quot;221.438423&quot;/&gt;
&lt;/g&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-0-1&quot; x=&quot;246.435899&quot; y=&quot;232.25789&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-12&quot; x=&quot;252.686677&quot; y=&quot;232.25789&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-22&quot; x=&quot;257.500495&quot; y=&quot;232.25789&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-23&quot; x=&quot;261.828282&quot; y=&quot;232.25789&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-24&quot; x=&quot;263.751273&quot; y=&quot;232.25789&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-12&quot; x=&quot;268.07906&quot; y=&quot;232.25789&quot;/&gt;
&lt;/g&gt;
&lt;path fill=&quot;none&quot; stroke-width=&quot;1&quot; stroke-linecap=&quot;butt&quot; stroke-linejoin=&quot;miter&quot; stroke=&quot;rgb(0%, 0%, 0%)&quot; stroke-opacity=&quot;1&quot; stroke-miterlimit=&quot;10&quot; d=&quot;M 359.999292 100.002439 L 359.999292 120.002197 L 380.502699 120.002197 L 380.161517 133.62781 &quot; transform=&quot;matrix(0.721298, 0, 0, 0.721298, 0.360649, 0.360649)&quot;/&gt;
&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot; stroke-width=&quot;1&quot; stroke-linecap=&quot;butt&quot; stroke-linejoin=&quot;miter&quot; stroke=&quot;rgb(0%, 0%, 0%)&quot; stroke-opacity=&quot;1&quot; stroke-miterlimit=&quot;10&quot; d=&quot;M 380.031543 138.880929 L 376.700958 131.797342 L 380.161517 133.62781 L 383.697895 131.970641 Z M 380.031543 138.880929 &quot; transform=&quot;matrix(0.721298, 0, 0, 0.721298, 0.360649, 0.360649)&quot;/&gt;
&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;rgb(83.529663%, 90.979004%, 83.139038%)&quot; fill-opacity=&quot;1&quot; stroke-width=&quot;1&quot; stroke-linecap=&quot;butt&quot; stroke-linejoin=&quot;miter&quot; stroke=&quot;rgb(50.979614%, 70.199585%, 39.99939%)&quot; stroke-opacity=&quot;1&quot; stroke-miterlimit=&quot;4&quot; d=&quot;M 300.000018 39.99775 L 419.998565 39.99775 L 419.998565 100.002439 L 300.000018 100.002439 Z M 300.000018 39.99775 &quot; transform=&quot;matrix(0.721298, 0, 0, 0.721298, 0.360649, 0.360649)&quot;/&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-0-14&quot; x=&quot;221.258098&quot; y=&quot;48.326952&quot;/&gt;
&lt;/g&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-0-17&quot; x=&quot;226.393119&quot; y=&quot;48.326952&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-31&quot; x=&quot;232.166319&quot; y=&quot;48.326952&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-1&quot; x=&quot;235.048692&quot; y=&quot;48.326952&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-19&quot; x=&quot;241.29947&quot; y=&quot;48.326952&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-29&quot; x=&quot;243.704266&quot; y=&quot;48.326952&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-3&quot; x=&quot;250.914426&quot; y=&quot;48.326952&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-10&quot; x=&quot;253.319222&quot; y=&quot;48.326952&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-25&quot; x=&quot;258.133039&quot; y=&quot;48.326952&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-10&quot; x=&quot;264.383817&quot; y=&quot;48.326952&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-9&quot; x=&quot;269.197635&quot; y=&quot;48.326952&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-12&quot; x=&quot;272.080008&quot; y=&quot;48.326952&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-26&quot; x=&quot;276.893826&quot; y=&quot;48.326952&quot;/&gt;
&lt;/g&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-0-13&quot; x=&quot;279.30003&quot; y=&quot;48.326952&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-14&quot; x=&quot;286.032612&quot; y=&quot;48.326952&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-15&quot; x=&quot;291.805812&quot; y=&quot;48.326952&quot;/&gt;
&lt;/g&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-0-16&quot; x=&quot;241.375548&quot; y=&quot;59.146419&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-17&quot; x=&quot;247.626326&quot; y=&quot;59.146419&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-26&quot; x=&quot;253.399526&quot; y=&quot;59.146419&quot;/&gt;
&lt;/g&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-0-15&quot; x=&quot;255.812771&quot; y=&quot;59.146419&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-27&quot; x=&quot;262.063549&quot; y=&quot;59.146419&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-23&quot; x=&quot;263.98654&quot; y=&quot;59.146419&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-12&quot; x=&quot;265.909531&quot; y=&quot;59.146419&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-28&quot; x=&quot;270.723349&quot; y=&quot;59.146419&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-7&quot; x=&quot;275.537166&quot; y=&quot;59.146419&quot;/&gt;
&lt;/g&gt;
&lt;path fill=&quot;none&quot; stroke-width=&quot;1&quot; stroke-linecap=&quot;butt&quot; stroke-linejoin=&quot;miter&quot; stroke=&quot;rgb(0%, 0%, 0%)&quot; stroke-opacity=&quot;1&quot; stroke-miterlimit=&quot;10&quot; d=&quot;M 534.998527 240.000744 L 534.998527 189.998642 L 426.367294 189.998642 &quot; transform=&quot;matrix(0.721298, 0, 0, 0.721298, 0.360649, 0.360649)&quot;/&gt;
&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot; stroke-width=&quot;1&quot; stroke-linecap=&quot;butt&quot; stroke-linejoin=&quot;miter&quot; stroke=&quot;rgb(0%, 0%, 0%)&quot; stroke-opacity=&quot;1&quot; stroke-miterlimit=&quot;10&quot; d=&quot;M 421.119592 189.998642 L 428.121944 186.500173 L 426.367294 189.998642 L 428.121944 193.502526 Z M 421.119592 189.998642 &quot; transform=&quot;matrix(0.721298, 0, 0, 0.721298, 0.360649, 0.360649)&quot;/&gt;
&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;rgb(100%, 100%, 100%)&quot; fill-opacity=&quot;1&quot; d=&quot;M 351.273438 132.71875 L 373.632812 132.71875 L 373.632812 142.09375 L 351.273438 142.09375 Z M 351.273438 132.71875 &quot;/&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-1-0&quot; x=&quot;351.42981&quot; y=&quot;139.931772&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-1-1&quot; x=&quot;353.192551&quot; y=&quot;139.931772&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-1-2&quot; x=&quot;359.801865&quot; y=&quot;139.931772&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-1-3&quot; x=&quot;364.214531&quot; y=&quot;139.931772&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-1-4&quot; x=&quot;368.627197&quot; y=&quot;139.931772&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-1-5&quot; x=&quot;371.269373&quot; y=&quot;139.931772&quot;/&gt;
&lt;/g&gt;
&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;rgb(88.238525%, 83.529663%, 90.589905%)&quot; fill-opacity=&quot;1&quot; stroke-width=&quot;1&quot; stroke-linecap=&quot;butt&quot; stroke-linejoin=&quot;miter&quot; stroke=&quot;rgb(58.81958%, 45.098877%, 65.098572%)&quot; stroke-opacity=&quot;1&quot; stroke-miterlimit=&quot;10&quot; d=&quot;M 479.997839 269.997673 L 479.997839 240.000744 L 571.997808 240.000744 L 571.997808 269.997673 M 479.997839 269.997673 L 580.002044 269.997673 L 580.002044 319.999776 L 479.997839 319.999776 Z M 479.997839 269.997673 &quot; transform=&quot;matrix(0.721298, 0, 0, 0.721298, 0.360649, 0.360649)&quot;/&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-2-0&quot; x=&quot;356.546516&quot; y=&quot;186.816129&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-2-1&quot; x=&quot;361.833685&quot; y=&quot;186.816129&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-2-2&quot; x=&quot;368.084463&quot; y=&quot;186.816129&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-2-3&quot; x=&quot;370.489258&quot; y=&quot;186.816129&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-2-4&quot; x=&quot;372.894054&quot; y=&quot;186.816129&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-2-5&quot; x=&quot;378.667254&quot; y=&quot;186.816129&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-2-6&quot; x=&quot;383.481071&quot; y=&quot;186.816129&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-2-7&quot; x=&quot;388.294889&quot; y=&quot;186.816129&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-2-5&quot; x=&quot;393.108706&quot; y=&quot;186.816129&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-2-8&quot; x=&quot;397.922524&quot; y=&quot;186.816129&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-2-9&quot; x=&quot;403.209693&quot; y=&quot;186.816129&quot;/&gt;
&lt;/g&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-0-32&quot; x=&quot;373.136365&quot; y=&quot;207.733765&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-1&quot; x=&quot;378.909565&quot; y=&quot;207.733765&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-1&quot; x=&quot;385.160343&quot; y=&quot;207.733765&quot;/&gt;
&lt;/g&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-0-16&quot; x=&quot;375.063586&quot; y=&quot;217.831934&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-19&quot; x=&quot;381.314364&quot; y=&quot;217.831934&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-14&quot; x=&quot;383.71916&quot; y=&quot;217.831934&quot;/&gt;
&lt;/g&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-0-17&quot; x=&quot;358.225791&quot; y=&quot;228.651401&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-7&quot; x=&quot;363.998991&quot; y=&quot;228.651401&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-7&quot; x=&quot;366.403786&quot; y=&quot;228.651401&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-10&quot; x=&quot;368.808582&quot; y=&quot;228.651401&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-24&quot; x=&quot;373.622399&quot; y=&quot;228.651401&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-33&quot; x=&quot;377.950186&quot; y=&quot;228.651401&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-11&quot; x=&quot;382.764004&quot; y=&quot;228.651401&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-12&quot; x=&quot;389.974164&quot; y=&quot;228.651401&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-28&quot; x=&quot;394.787981&quot; y=&quot;228.651401&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-7&quot; x=&quot;399.601799&quot; y=&quot;228.651401&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-6&quot; x=&quot;402.006594&quot; y=&quot;228.651401&quot;/&gt;
&lt;/g&gt;
&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;rgb(100%, 100%, 100%)&quot; fill-opacity=&quot;1&quot; stroke-width=&quot;1&quot; stroke-linecap=&quot;butt&quot; stroke-linejoin=&quot;miter&quot; stroke=&quot;rgb(0%, 0%, 0%)&quot; stroke-opacity=&quot;1&quot; stroke-miterlimit=&quot;4&quot; d=&quot;M 39.99775 160.001713 L 160.001713 160.001713 L 160.001713 220.000986 L 39.99775 220.000986 Z M 39.99775 160.001713 &quot; transform=&quot;matrix(0.721298, 0, 0, 0.721298, 0.360649, 0.360649)&quot;/&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-0-0&quot; x=&quot;39.975676&quot; y=&quot;139.931772&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-1&quot; x=&quot;45.262845&quot; y=&quot;139.931772&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-2&quot; x=&quot;51.513623&quot; y=&quot;139.931772&quot;/&gt;
&lt;/g&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-0-3&quot; x=&quot;56.648643&quot; y=&quot;139.931772&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-4&quot; x=&quot;59.053439&quot; y=&quot;139.931772&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-5&quot; x=&quot;65.304217&quot; y=&quot;139.931772&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-6&quot; x=&quot;70.118034&quot; y=&quot;139.931772&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-7&quot; x=&quot;74.445821&quot; y=&quot;139.931772&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-8&quot; x=&quot;76.850617&quot; y=&quot;139.931772&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-0&quot; x=&quot;79.255412&quot; y=&quot;139.931772&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-9&quot; x=&quot;84.542582&quot; y=&quot;139.931772&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-10&quot; x=&quot;87.424955&quot; y=&quot;139.931772&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-11&quot; x=&quot;92.238773&quot; y=&quot;139.931772&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-12&quot; x=&quot;99.448933&quot; y=&quot;139.931772&quot;/&gt;
&lt;/g&gt;
&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;rgb(100%, 100%, 100%)&quot; fill-opacity=&quot;1&quot; stroke-width=&quot;1&quot; stroke-linecap=&quot;butt&quot; stroke-linejoin=&quot;miter&quot; stroke=&quot;rgb(0%, 0%, 0%)&quot; stroke-opacity=&quot;1&quot; stroke-miterlimit=&quot;4&quot; d=&quot;M 80.002681 160.001713 L 160.001713 160.001713 L 160.001713 180.001471 L 80.002681 180.001471 Z M 80.002681 160.001713 &quot; transform=&quot;matrix(0.721298, 0, 0, 0.721298, 0.360649, 0.360649)&quot;/&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-0-13&quot; x=&quot;69.954616&quot; y=&quot;125.505816&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-14&quot; x=&quot;76.687198&quot; y=&quot;125.505816&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-15&quot; x=&quot;82.460398&quot; y=&quot;125.505816&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-3&quot; x=&quot;88.711176&quot; y=&quot;125.505816&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-16&quot; x=&quot;91.115972&quot; y=&quot;125.505816&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-17&quot; x=&quot;97.366749&quot; y=&quot;125.505816&quot;/&gt;
&lt;/g&gt;
&lt;path fill=&quot;none&quot; stroke-width=&quot;1&quot; stroke-linecap=&quot;butt&quot; stroke-linejoin=&quot;miter&quot; stroke=&quot;rgb(0%, 0%, 0%)&quot; stroke-opacity=&quot;1&quot; stroke-miterlimit=&quot;10&quot; d=&quot;M 120.002197 220.000986 L 120.002197 249.997915 L 100.002439 249.997915 L 100.002439 273.631531 &quot; transform=&quot;matrix(0.721298, 0, 0, 0.721298, 0.360649, 0.360649)&quot;/&gt;
&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot; stroke-width=&quot;1&quot; stroke-linecap=&quot;butt&quot; stroke-linejoin=&quot;miter&quot; stroke=&quot;rgb(0%, 0%, 0%)&quot; stroke-opacity=&quot;1&quot; stroke-miterlimit=&quot;10&quot; d=&quot;M 100.002439 278.879234 L 96.498555 271.882297 L 100.002439 273.631531 L 103.500907 271.882297 Z M 100.002439 278.879234 &quot; transform=&quot;matrix(0.721298, 0, 0, 0.721298, 0.360649, 0.360649)&quot;/&gt;
&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;rgb(100%, 100%, 100%)&quot; fill-opacity=&quot;1&quot; stroke-width=&quot;1&quot; stroke-linecap=&quot;butt&quot; stroke-linejoin=&quot;miter&quot; stroke=&quot;rgb(0%, 0%, 0%)&quot; stroke-opacity=&quot;1&quot; stroke-miterlimit=&quot;4&quot; d=&quot;M 80.002681 200.001228 L 160.001713 200.001228 L 160.001713 220.000986 L 80.002681 220.000986 Z M 80.002681 200.001228 &quot; transform=&quot;matrix(0.721298, 0, 0, 0.721298, 0.360649, 0.360649)&quot;/&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-0-14&quot; x=&quot;64.432179&quot; y=&quot;154.357728&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-18&quot; x=&quot;70.205379&quot; y=&quot;154.357728&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-13&quot; x=&quot;76.456157&quot; y=&quot;154.357728&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-0&quot; x=&quot;83.18874&quot; y=&quot;154.357728&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-19&quot; x=&quot;88.475909&quot; y=&quot;154.357728&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-20&quot; x=&quot;90.880704&quot; y=&quot;154.357728&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-16&quot; x=&quot;96.653904&quot; y=&quot;154.357728&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-21&quot; x=&quot;102.904682&quot; y=&quot;154.357728&quot;/&gt;
&lt;/g&gt;
&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;rgb(85.488892%, 90.979004%, 98.81897%)&quot; fill-opacity=&quot;1&quot; stroke-width=&quot;1&quot; stroke-linecap=&quot;butt&quot; stroke-linejoin=&quot;miter&quot; stroke=&quot;rgb(42.349243%, 55.688477%, 74.899292%)&quot; stroke-opacity=&quot;1&quot; stroke-miterlimit=&quot;4&quot; d=&quot;M 39.99775 280.00026 L 160.001713 280.00026 L 160.001713 339.999534 L 39.99775 339.999534 Z M 39.99775 280.00026 &quot; transform=&quot;matrix(0.721298, 0, 0, 0.721298, 0.360649, 0.360649)&quot;/&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-0-14&quot; x=&quot;50.006224&quot; y=&quot;221.438423&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-18&quot; x=&quot;55.779424&quot; y=&quot;221.438423&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-13&quot; x=&quot;62.030202&quot; y=&quot;221.438423&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-0&quot; x=&quot;68.762784&quot; y=&quot;221.438423&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-19&quot; x=&quot;74.049953&quot; y=&quot;221.438423&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-20&quot; x=&quot;76.454749&quot; y=&quot;221.438423&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-16&quot; x=&quot;82.227949&quot; y=&quot;221.438423&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-21&quot; x=&quot;88.478726&quot; y=&quot;221.438423&quot;/&gt;
&lt;/g&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-0-1&quot; x=&quot;58.898473&quot; y=&quot;232.25789&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-12&quot; x=&quot;65.149251&quot; y=&quot;232.25789&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-22&quot; x=&quot;69.963068&quot; y=&quot;232.25789&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-23&quot; x=&quot;74.290855&quot; y=&quot;232.25789&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-24&quot; x=&quot;76.213846&quot; y=&quot;232.25789&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-12&quot; x=&quot;80.541633&quot; y=&quot;232.25789&quot;/&gt;
&lt;/g&gt;
&lt;path fill=&quot;none&quot; stroke-width=&quot;1&quot; stroke-linecap=&quot;butt&quot; stroke-linejoin=&quot;miter&quot; stroke=&quot;rgb(0%, 0%, 0%)&quot; stroke-opacity=&quot;1&quot; stroke-miterlimit=&quot;10&quot; d=&quot;M 100.002439 100.002439 L 100.002439 120.002197 L 120.002197 120.002197 L 120.002197 133.62781 &quot; transform=&quot;matrix(0.721298, 0, 0, 0.721298, 0.360649, 0.360649)&quot;/&gt;
&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot; stroke-width=&quot;1&quot; stroke-linecap=&quot;butt&quot; stroke-linejoin=&quot;miter&quot; stroke=&quot;rgb(0%, 0%, 0%)&quot; stroke-opacity=&quot;1&quot; stroke-miterlimit=&quot;10&quot; d=&quot;M 120.002197 138.880929 L 116.498313 131.878576 L 120.002197 133.62781 L 123.500665 131.878576 Z M 120.002197 138.880929 &quot; transform=&quot;matrix(0.721298, 0, 0, 0.721298, 0.360649, 0.360649)&quot;/&gt;
&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;rgb(83.529663%, 90.979004%, 83.139038%)&quot; fill-opacity=&quot;1&quot; stroke-width=&quot;1&quot; stroke-linecap=&quot;butt&quot; stroke-linejoin=&quot;miter&quot; stroke=&quot;rgb(50.979614%, 70.199585%, 39.99939%)&quot; stroke-opacity=&quot;1&quot; stroke-miterlimit=&quot;4&quot; d=&quot;M 39.99775 39.99775 L 160.001713 39.99775 L 160.001713 100.002439 L 39.99775 100.002439 Z M 39.99775 39.99775 &quot; transform=&quot;matrix(0.721298, 0, 0, 0.721298, 0.360649, 0.360649)&quot;/&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-0-14&quot; x=&quot;33.720672&quot; y=&quot;48.326952&quot;/&gt;
&lt;/g&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-0-17&quot; x=&quot;38.855692&quot; y=&quot;48.326952&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-31&quot; x=&quot;44.628892&quot; y=&quot;48.326952&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-1&quot; x=&quot;47.511266&quot; y=&quot;48.326952&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-19&quot; x=&quot;53.762044&quot; y=&quot;48.326952&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-29&quot; x=&quot;56.166839&quot; y=&quot;48.326952&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-3&quot; x=&quot;63.377&quot; y=&quot;48.326952&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-10&quot; x=&quot;65.781795&quot; y=&quot;48.326952&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-25&quot; x=&quot;70.595613&quot; y=&quot;48.326952&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-10&quot; x=&quot;76.846391&quot; y=&quot;48.326952&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-9&quot; x=&quot;81.660208&quot; y=&quot;48.326952&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-12&quot; x=&quot;84.542582&quot; y=&quot;48.326952&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-26&quot; x=&quot;89.356399&quot; y=&quot;48.326952&quot;/&gt;
&lt;/g&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-0-13&quot; x=&quot;91.762604&quot; y=&quot;48.326952&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-14&quot; x=&quot;98.495186&quot; y=&quot;48.326952&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-15&quot; x=&quot;104.268386&quot; y=&quot;48.326952&quot;/&gt;
&lt;/g&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-0-16&quot; x=&quot;53.838118&quot; y=&quot;59.146419&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-17&quot; x=&quot;60.088896&quot; y=&quot;59.146419&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-26&quot; x=&quot;65.862096&quot; y=&quot;59.146419&quot;/&gt;
&lt;/g&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-0-15&quot; x=&quot;68.275344&quot; y=&quot;59.146419&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-27&quot; x=&quot;74.526122&quot; y=&quot;59.146419&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-23&quot; x=&quot;76.449113&quot; y=&quot;59.146419&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-12&quot; x=&quot;78.372105&quot; y=&quot;59.146419&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-28&quot; x=&quot;83.185922&quot; y=&quot;59.146419&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-7&quot; x=&quot;87.99974&quot; y=&quot;59.146419&quot;/&gt;
&lt;/g&gt;
&lt;path fill=&quot;none&quot; stroke-width=&quot;1&quot; stroke-linecap=&quot;butt&quot; stroke-linejoin=&quot;miter&quot; stroke=&quot;rgb(0%, 0%, 0%)&quot; stroke-opacity=&quot;1&quot; stroke-miterlimit=&quot;10&quot; d=&quot;M 240.000744 240.000744 L 240.000744 189.998642 L 166.370441 189.998642 &quot; transform=&quot;matrix(0.721298, 0, 0, 0.721298, 0.360649, 0.360649)&quot;/&gt;
&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot; stroke-width=&quot;1&quot; stroke-linecap=&quot;butt&quot; stroke-linejoin=&quot;miter&quot; stroke=&quot;rgb(0%, 0%, 0%)&quot; stroke-opacity=&quot;1&quot; stroke-miterlimit=&quot;10&quot; d=&quot;M 161.117323 189.998642 L 168.119676 186.500173 L 166.370441 189.998642 L 168.119676 193.502526 Z M 161.117323 189.998642 &quot; transform=&quot;matrix(0.721298, 0, 0, 0.721298, 0.360649, 0.360649)&quot;/&gt;
&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;rgb(100%, 100%, 100%)&quot; fill-opacity=&quot;1&quot; d=&quot;M 151.472656 132.71875 L 173.832031 132.71875 L 173.832031 142.09375 L 151.472656 142.09375 Z M 151.472656 132.71875 &quot;/&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-1-0&quot; x=&quot;151.630321&quot; y=&quot;139.931772&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-1-1&quot; x=&quot;153.393063&quot; y=&quot;139.931772&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-1-2&quot; x=&quot;160.002376&quot; y=&quot;139.931772&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-1-3&quot; x=&quot;164.415042&quot; y=&quot;139.931772&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-1-4&quot; x=&quot;168.827708&quot; y=&quot;139.931772&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-1-5&quot; x=&quot;171.469884&quot; y=&quot;139.931772&quot;/&gt;
&lt;/g&gt;
&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;rgb(88.238525%, 83.529663%, 90.589905%)&quot; fill-opacity=&quot;1&quot; stroke-width=&quot;1&quot; stroke-linecap=&quot;butt&quot; stroke-linejoin=&quot;miter&quot; stroke=&quot;rgb(58.81958%, 45.098877%, 65.098572%)&quot; stroke-opacity=&quot;1&quot; stroke-miterlimit=&quot;10&quot; d=&quot;M 200.001228 240.000744 L 280.00026 240.000744 L 280.00026 290.999315 C 266.667088 280.200637 253.333916 280.200637 240.000744 290.999315 C 226.667572 301.797992 213.3344 301.797992 200.001228 290.999315 Z M 200.001228 240.000744 &quot; transform=&quot;matrix(0.721298, 0, 0, 0.721298, 0.360649, 0.360649)&quot;/&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-0-14&quot; x=&quot;150.976644&quot; y=&quot;186.094831&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-18&quot; x=&quot;156.749844&quot; y=&quot;186.094831&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-13&quot; x=&quot;163.000622&quot; y=&quot;186.094831&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-0&quot; x=&quot;169.733205&quot; y=&quot;186.094831&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-19&quot; x=&quot;175.020374&quot; y=&quot;186.094831&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-20&quot; x=&quot;177.425169&quot; y=&quot;186.094831&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-16&quot; x=&quot;183.198369&quot; y=&quot;186.094831&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-21&quot; x=&quot;189.449147&quot; y=&quot;186.094831&quot;/&gt;
&lt;/g&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-0-1&quot; x=&quot;149.297377&quot; y=&quot;196.914298&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-12&quot; x=&quot;155.548155&quot; y=&quot;196.914298&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-22&quot; x=&quot;160.361972&quot; y=&quot;196.914298&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-23&quot; x=&quot;164.689759&quot; y=&quot;196.914298&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-24&quot; x=&quot;166.61275&quot; y=&quot;196.914298&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-12&quot; x=&quot;170.940537&quot; y=&quot;196.914298&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-3&quot; x=&quot;175.754354&quot; y=&quot;196.914298&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-1&quot; x=&quot;178.15915&quot; y=&quot;196.914298&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-2&quot; x=&quot;184.409928&quot; y=&quot;196.914298&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-29&quot; x=&quot;189.697097&quot; y=&quot;196.914298&quot;/&gt;
&lt;/g&gt;
&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;rgb(97.24884%, 80.778503%, 79.998779%)&quot; fill-opacity=&quot;1&quot; d=&quot;M 58.066406 101.34375 L 115.769531 101.34375 L 115.769531 115.769531 L 58.066406 115.769531 Z M 58.066406 101.34375 &quot;/&gt;
&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;rgb(72.158813%, 32.939148%, 31.369019%)&quot; fill-opacity=&quot;1&quot; d=&quot;M 62.390625 100.980469 L 64.554688 100.980469 L 64.554688 101.703125 L 62.390625 101.703125 Z M 66.71875 100.980469 L 68.882812 100.980469 L 68.882812 101.703125 L 66.71875 101.703125 Z M 71.046875 100.980469 L 73.210938 100.980469 L 73.210938 101.703125 L 71.046875 101.703125 Z M 75.375 100.980469 L 77.539062 100.980469 L 77.539062 101.703125 L 75.375 101.703125 Z M 79.703125 100.980469 L 81.867188 100.980469 L 81.867188 101.703125 L 79.703125 101.703125 Z M 84.03125 100.980469 L 86.195312 100.980469 L 86.195312 101.703125 L 84.03125 101.703125 Z M 88.359375 100.980469 L 90.523438 100.980469 L 90.523438 101.703125 L 88.359375 101.703125 Z M 92.6875 100.980469 L 94.851562 100.980469 L 94.851562 101.703125 L 92.6875 101.703125 Z M 97.015625 100.980469 L 99.179688 100.980469 L 99.179688 101.703125 L 97.015625 101.703125 Z M 101.34375 100.980469 L 103.507812 100.980469 L 103.507812 101.703125 L 101.34375 101.703125 Z M 105.671875 100.980469 L 107.835938 100.980469 L 107.835938 101.703125 L 105.671875 101.703125 Z M 109.996094 100.980469 L 112.160156 100.980469 L 112.160156 101.703125 L 109.996094 101.703125 Z M 114.324219 100.980469 L 116.128906 100.980469 L 116.128906 102.0625 L 115.40625 102.0625 L 115.40625 101.34375 L 115.769531 101.34375 L 115.769531 101.703125 L 114.324219 101.703125 Z M 116.128906 104.226562 L 116.128906 106.390625 L 115.40625 106.390625 L 115.40625 104.226562 Z M 116.128906 108.554688 L 116.128906 110.71875 L 115.40625 110.71875 L 115.40625 108.554688 Z M 116.128906 112.882812 L 116.128906 115.046875 L 115.40625 115.046875 L 115.40625 112.882812 Z M 114.324219 116.128906 L 112.160156 116.128906 L 112.160156 115.40625 L 114.324219 115.40625 Z M 109.996094 116.128906 L 107.835938 116.128906 L 107.835938 115.40625 L 109.996094 115.40625 Z M 105.671875 116.128906 L 103.507812 116.128906 L 103.507812 115.40625 L 105.671875 115.40625 Z M 101.34375 116.128906 L 99.179688 116.128906 L 99.179688 115.40625 L 101.34375 115.40625 Z M 97.015625 116.128906 L 94.851562 116.128906 L 94.851562 115.40625 L 97.015625 115.40625 Z M 92.6875 116.128906 L 90.523438 116.128906 L 90.523438 115.40625 L 92.6875 115.40625 Z M 88.359375 116.128906 L 86.195312 116.128906 L 86.195312 115.40625 L 88.359375 115.40625 Z M 84.03125 116.128906 L 81.867188 116.128906 L 81.867188 115.40625 L 84.03125 115.40625 Z M 79.703125 116.128906 L 77.539062 116.128906 L 77.539062 115.40625 L 79.703125 115.40625 Z M 75.375 116.128906 L 73.210938 116.128906 L 73.210938 115.40625 L 75.375 115.40625 Z M 71.046875 116.128906 L 68.882812 116.128906 L 68.882812 115.40625 L 71.046875 115.40625 Z M 66.71875 116.128906 L 64.554688 116.128906 L 64.554688 115.40625 L 66.71875 115.40625 Z M 62.390625 116.128906 L 60.226562 116.128906 L 60.226562 115.40625 L 62.390625 115.40625 Z M 57.703125 115.769531 L 57.703125 113.605469 L 58.425781 113.605469 L 58.425781 115.769531 Z M 57.703125 111.441406 L 57.703125 109.277344 L 58.425781 109.277344 L 58.425781 111.441406 Z M 57.703125 107.113281 L 57.703125 104.949219 L 58.425781 104.949219 L 58.425781 107.113281 Z M 57.703125 102.785156 L 57.703125 100.980469 L 60.226562 100.980469 L 60.226562 101.703125 L 58.066406 101.703125 L 58.066406 101.34375 L 58.425781 101.34375 L 58.425781 102.785156 Z M 57.703125 102.785156 &quot;/&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-0-14&quot; x=&quot;71.724049&quot; y=&quot;111.07986&quot;/&gt;
&lt;/g&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-0-17&quot; x=&quot;76.85907&quot; y=&quot;111.07986&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-31&quot; x=&quot;82.63227&quot; y=&quot;111.07986&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-1&quot; x=&quot;85.514643&quot; y=&quot;111.07986&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-19&quot; x=&quot;91.765421&quot; y=&quot;111.07986&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-29&quot; x=&quot;94.170217&quot; y=&quot;111.07986&quot;/&gt;
&lt;/g&gt;
&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;rgb(97.24884%, 80.778503%, 79.998779%)&quot; fill-opacity=&quot;1&quot; d=&quot;M 245.601562 101.34375 L 303.304688 101.34375 L 303.304688 115.769531 L 245.601562 115.769531 Z M 245.601562 101.34375 &quot;/&gt;
&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;rgb(72.158813%, 32.939148%, 31.369019%)&quot; fill-opacity=&quot;1&quot; d=&quot;M 249.929688 100.980469 L 252.09375 100.980469 L 252.09375 101.703125 L 249.929688 101.703125 Z M 254.257812 100.980469 L 256.421875 100.980469 L 256.421875 101.703125 L 254.257812 101.703125 Z M 258.585938 100.980469 L 260.75 100.980469 L 260.75 101.703125 L 258.585938 101.703125 Z M 262.914062 100.980469 L 265.078125 100.980469 L 265.078125 101.703125 L 262.914062 101.703125 Z M 267.242188 100.980469 L 269.40625 100.980469 L 269.40625 101.703125 L 267.242188 101.703125 Z M 271.570312 100.980469 L 273.734375 100.980469 L 273.734375 101.703125 L 271.570312 101.703125 Z M 275.894531 100.980469 L 278.058594 100.980469 L 278.058594 101.703125 L 275.894531 101.703125 Z M 280.222656 100.980469 L 282.386719 100.980469 L 282.386719 101.703125 L 280.222656 101.703125 Z M 284.550781 100.980469 L 286.714844 100.980469 L 286.714844 101.703125 L 284.550781 101.703125 Z M 288.878906 100.980469 L 291.042969 100.980469 L 291.042969 101.703125 L 288.878906 101.703125 Z M 293.207031 100.980469 L 295.371094 100.980469 L 295.371094 101.703125 L 293.207031 101.703125 Z M 297.535156 100.980469 L 299.699219 100.980469 L 299.699219 101.703125 L 297.535156 101.703125 Z M 301.863281 100.980469 L 303.667969 100.980469 L 303.667969 102.0625 L 302.945312 102.0625 L 302.945312 101.34375 L 303.304688 101.34375 L 303.304688 101.703125 L 301.863281 101.703125 Z M 303.667969 104.226562 L 303.667969 106.390625 L 302.945312 106.390625 L 302.945312 104.226562 Z M 303.667969 108.554688 L 303.667969 110.71875 L 302.945312 110.71875 L 302.945312 108.554688 Z M 303.667969 112.882812 L 303.667969 115.046875 L 302.945312 115.046875 L 302.945312 112.882812 Z M 301.863281 116.128906 L 299.699219 116.128906 L 299.699219 115.40625 L 301.863281 115.40625 Z M 297.535156 116.128906 L 295.371094 116.128906 L 295.371094 115.40625 L 297.535156 115.40625 Z M 293.207031 116.128906 L 291.042969 116.128906 L 291.042969 115.40625 L 293.207031 115.40625 Z M 288.878906 116.128906 L 286.714844 116.128906 L 286.714844 115.40625 L 288.878906 115.40625 Z M 284.550781 116.128906 L 282.386719 116.128906 L 282.386719 115.40625 L 284.550781 115.40625 Z M 280.222656 116.128906 L 278.058594 116.128906 L 278.058594 115.40625 L 280.222656 115.40625 Z M 275.894531 116.128906 L 273.734375 116.128906 L 273.734375 115.40625 L 275.894531 115.40625 Z M 271.570312 116.128906 L 269.40625 116.128906 L 269.40625 115.40625 L 271.570312 115.40625 Z M 267.242188 116.128906 L 265.078125 116.128906 L 265.078125 115.40625 L 267.242188 115.40625 Z M 262.914062 116.128906 L 260.75 116.128906 L 260.75 115.40625 L 262.914062 115.40625 Z M 258.585938 116.128906 L 256.421875 116.128906 L 256.421875 115.40625 L 258.585938 115.40625 Z M 254.257812 116.128906 L 252.09375 116.128906 L 252.09375 115.40625 L 254.257812 115.40625 Z M 249.929688 116.128906 L 247.765625 116.128906 L 247.765625 115.40625 L 249.929688 115.40625 Z M 245.242188 115.769531 L 245.242188 113.605469 L 245.960938 113.605469 L 245.960938 115.769531 Z M 245.242188 111.441406 L 245.242188 109.277344 L 245.960938 109.277344 L 245.960938 111.441406 Z M 245.242188 107.113281 L 245.242188 104.949219 L 245.960938 104.949219 L 245.960938 107.113281 Z M 245.242188 102.785156 L 245.242188 100.980469 L 247.765625 100.980469 L 247.765625 101.703125 L 245.601562 101.703125 L 245.601562 101.34375 L 245.960938 101.34375 L 245.960938 102.785156 Z M 245.242188 102.785156 &quot;/&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-0-14&quot; x=&quot;259.261476&quot; y=&quot;111.07986&quot;/&gt;
&lt;/g&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-0-17&quot; x=&quot;264.396496&quot; y=&quot;111.07986&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-31&quot; x=&quot;270.169696&quot; y=&quot;111.07986&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-1&quot; x=&quot;273.05207&quot; y=&quot;111.07986&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-19&quot; x=&quot;279.302848&quot; y=&quot;111.07986&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-29&quot; x=&quot;281.707643&quot; y=&quot;111.07986&quot;/&gt;
&lt;/g&gt;
&lt;/svg&gt;
&lt;/div&gt;
&lt;/p&gt;
&lt;/div&gt;

&lt;p&gt;
如图 &lt;a href=&quot;#org5cf947f&quot;&gt;2&lt;/a&gt; 所示，有了 PA-DIM 数据模型，就可以在 FDT
和 FDI 的基础上提供一个统一的数据模型给OPC UA客户端访问。这样同一个客户端实现就能访问各种不同的设备数据了。这就更不用关心现场的设备是通过什么总线通信，或者是通过什么设备总线集成技术了。
&lt;/p&gt;

&lt;p&gt;
更进一步，如图 &lt;a href=&quot;#org806dfaa&quot;&gt;2&lt;/a&gt; ，如果设备本身支持OPC UA，并实现了 PA-DIM就可以直接通过OPC UA客户端访问现场设备的数据了。不过，这时候，需要 Ethernet-APL 物理层通信技术的支持。
&lt;/p&gt;


&lt;div id=&quot;org806dfaa&quot; class=&quot;figure&quot;&gt;
&lt;p&gt;&lt;div align=&quot;center&quot;&gt;&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; xmlns:xlink=&quot;http://www.w3.org/1999/xlink&quot; width=&quot;432.95999&quot; height=&quot;289.91998&quot; viewBox=&quot;0 0 432.95999 289.91998&quot;&gt;
&lt;defs&gt;
&lt;g&gt;
&lt;g id=&quot;glyph-0-0&quot;&gt;
&lt;path d=&quot;M 0.734375 -6.203125 L 5.046875 -6.203125 L 5.046875 -5.453125 L 1.578125 -5.453125 L 1.578125 -3.5625 L 4.625 -3.5625 L 4.625 -2.828125 L 1.578125 -2.828125 L 1.578125 0 L 0.734375 0 Z M 0.734375 -6.203125 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-0-1&quot;&gt;
&lt;path d=&quot;M 3.046875 -0.71875 C 3.328125 -0.71875 3.5625 -0.75 3.75 -0.8125 C 4.070312 -0.914062 4.335938 -1.125 4.546875 -1.4375 C 4.710938 -1.6875 4.832031 -2.007812 4.90625 -2.40625 C 4.945312 -2.632812 4.96875 -2.851562 4.96875 -3.0625 C 4.96875 -3.820312 4.8125 -4.414062 4.5 -4.84375 C 4.195312 -5.269531 3.707031 -5.484375 3.03125 -5.484375 L 1.546875 -5.484375 L 1.546875 -0.71875 Z M 0.703125 -6.203125 L 3.21875 -6.203125 C 4.070312 -6.203125 4.734375 -5.898438 5.203125 -5.296875 C 5.617188 -4.753906 5.828125 -4.054688 5.828125 -3.203125 C 5.828125 -2.535156 5.703125 -1.9375 5.453125 -1.40625 C 5.015625 -0.46875 4.265625 0 3.203125 0 L 0.703125 0 Z M 0.703125 -6.203125 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-0-2&quot;&gt;
&lt;path d=&quot;M 0.84375 -6.203125 L 1.703125 -6.203125 L 1.703125 0 L 0.84375 0 Z M 0.84375 -6.203125 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-0-3&quot;&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-0-4&quot;&gt;
&lt;path d=&quot;M 0.6875 -6.203125 L 1.53125 -6.203125 L 1.53125 -3.640625 L 4.765625 -3.640625 L 4.765625 -6.203125 L 5.609375 -6.203125 L 5.609375 0 L 4.765625 0 L 4.765625 -2.90625 L 1.53125 -2.90625 L 1.53125 0 L 0.6875 0 Z M 0.6875 -6.203125 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-0-5&quot;&gt;
&lt;path d=&quot;M 2.359375 -0.484375 C 2.859375 -0.484375 3.203125 -0.675781 3.390625 -1.0625 C 3.578125 -1.445312 3.671875 -1.875 3.671875 -2.34375 C 3.671875 -2.757812 3.601562 -3.101562 3.46875 -3.375 C 3.257812 -3.789062 2.890625 -4 2.359375 -4 C 1.898438 -4 1.5625 -3.816406 1.34375 -3.453125 C 1.132812 -3.097656 1.03125 -2.671875 1.03125 -2.171875 C 1.03125 -1.691406 1.132812 -1.289062 1.34375 -0.96875 C 1.5625 -0.644531 1.898438 -0.484375 2.359375 -0.484375 Z M 2.390625 -4.65625 C 2.972656 -4.65625 3.460938 -4.457031 3.859375 -4.0625 C 4.265625 -3.675781 4.46875 -3.109375 4.46875 -2.359375 C 4.46875 -1.628906 4.289062 -1.023438 3.9375 -0.546875 C 3.582031 -0.0664062 3.03125 0.171875 2.28125 0.171875 C 1.65625 0.171875 1.160156 -0.0351562 0.796875 -0.453125 C 0.429688 -0.878906 0.25 -1.453125 0.25 -2.171875 C 0.25 -2.929688 0.441406 -3.535156 0.828125 -3.984375 C 1.210938 -4.429688 1.734375 -4.65625 2.390625 -4.65625 Z M 2.359375 -4.640625 Z M 2.359375 -4.640625 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-0-6&quot;&gt;
&lt;path d=&quot;M 1.015625 -1.421875 C 1.035156 -1.171875 1.097656 -0.976562 1.203125 -0.84375 C 1.390625 -0.59375 1.722656 -0.46875 2.203125 -0.46875 C 2.484375 -0.46875 2.726562 -0.53125 2.9375 -0.65625 C 3.15625 -0.78125 3.265625 -0.96875 3.265625 -1.21875 C 3.265625 -1.414062 3.175781 -1.566406 3 -1.671875 C 2.894531 -1.734375 2.679688 -1.800781 2.359375 -1.875 L 1.75 -2.03125 C 1.363281 -2.125 1.078125 -2.234375 0.890625 -2.359375 C 0.566406 -2.554688 0.40625 -2.835938 0.40625 -3.203125 C 0.40625 -3.628906 0.554688 -3.972656 0.859375 -4.234375 C 1.171875 -4.503906 1.585938 -4.640625 2.109375 -4.640625 C 2.796875 -4.640625 3.289062 -4.441406 3.59375 -4.046875 C 3.78125 -3.796875 3.867188 -3.519531 3.859375 -3.21875 L 3.140625 -3.21875 C 3.128906 -3.394531 3.070312 -3.550781 2.96875 -3.6875 C 2.789062 -3.894531 2.484375 -4 2.046875 -4 C 1.765625 -4 1.546875 -3.941406 1.390625 -3.828125 C 1.242188 -3.722656 1.171875 -3.578125 1.171875 -3.390625 C 1.171875 -3.191406 1.269531 -3.035156 1.46875 -2.921875 C 1.582031 -2.847656 1.75 -2.785156 1.96875 -2.734375 L 2.46875 -2.609375 C 3.019531 -2.472656 3.390625 -2.347656 3.578125 -2.234375 C 3.867188 -2.035156 4.015625 -1.726562 4.015625 -1.3125 C 4.015625 -0.90625 3.859375 -0.554688 3.546875 -0.265625 C 3.242188 0.0234375 2.78125 0.171875 2.15625 0.171875 C 1.488281 0.171875 1.015625 0.0195312 0.734375 -0.28125 C 0.453125 -0.59375 0.300781 -0.972656 0.28125 -1.421875 Z M 2.140625 -4.640625 Z M 2.140625 -4.640625 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-0-7&quot;&gt;
&lt;path d=&quot;M 0.703125 -5.796875 L 1.484375 -5.796875 L 1.484375 -4.53125 L 2.203125 -4.53125 L 2.203125 -3.90625 L 1.484375 -3.90625 L 1.484375 -0.953125 C 1.484375 -0.796875 1.535156 -0.691406 1.640625 -0.640625 C 1.703125 -0.609375 1.800781 -0.59375 1.9375 -0.59375 C 1.96875 -0.59375 2.003906 -0.59375 2.046875 -0.59375 C 2.097656 -0.59375 2.148438 -0.59375 2.203125 -0.59375 L 2.203125 0 C 2.117188 0.0195312 2.023438 0.0351562 1.921875 0.046875 C 1.828125 0.0664062 1.726562 0.078125 1.625 0.078125 C 1.269531 0.078125 1.023438 -0.0078125 0.890625 -0.1875 C 0.765625 -0.375 0.703125 -0.613281 0.703125 -0.90625 L 0.703125 -3.90625 L 0.09375 -3.90625 L 0.09375 -4.53125 L 0.703125 -4.53125 Z M 0.703125 -5.796875 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-0-8&quot;&gt;
&lt;path d=&quot;M 1.203125 -2 C 1.222656 -1.644531 1.304688 -1.359375 1.453125 -1.140625 C 1.734375 -0.734375 2.226562 -0.53125 2.9375 -0.53125 C 3.25 -0.53125 3.535156 -0.570312 3.796875 -0.65625 C 4.296875 -0.832031 4.546875 -1.148438 4.546875 -1.609375 C 4.546875 -1.941406 4.441406 -2.179688 4.234375 -2.328125 C 4.015625 -2.460938 3.675781 -2.582031 3.21875 -2.6875 L 2.390625 -2.875 C 1.835938 -3 1.445312 -3.140625 1.21875 -3.296875 C 0.820312 -3.554688 0.625 -3.941406 0.625 -4.453125 C 0.625 -5.015625 0.816406 -5.472656 1.203125 -5.828125 C 1.585938 -6.179688 2.132812 -6.359375 2.84375 -6.359375 C 3.5 -6.359375 4.050781 -6.203125 4.5 -5.890625 C 4.957031 -5.578125 5.1875 -5.078125 5.1875 -4.390625 L 4.390625 -4.390625 C 4.347656 -4.722656 4.257812 -4.976562 4.125 -5.15625 C 3.863281 -5.476562 3.425781 -5.640625 2.8125 -5.640625 C 2.320312 -5.640625 1.96875 -5.535156 1.75 -5.328125 C 1.53125 -5.117188 1.421875 -4.875 1.421875 -4.59375 C 1.421875 -4.289062 1.550781 -4.070312 1.8125 -3.9375 C 1.96875 -3.84375 2.34375 -3.726562 2.9375 -3.59375 L 3.796875 -3.390625 C 4.222656 -3.296875 4.550781 -3.164062 4.78125 -3 C 5.175781 -2.707031 5.375 -2.285156 5.375 -1.734375 C 5.375 -1.046875 5.125 -0.550781 4.625 -0.25 C 4.125 0.0390625 3.539062 0.1875 2.875 0.1875 C 2.101562 0.1875 1.5 -0.0078125 1.0625 -0.40625 C 0.625 -0.800781 0.410156 -1.332031 0.421875 -2 Z M 2.90625 -6.375 Z M 2.90625 -6.375 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-0-9&quot;&gt;
&lt;path d=&quot;M 3.390625 -4.53125 L 4.234375 -4.53125 C 4.117188 -4.238281 3.878906 -3.578125 3.515625 -2.546875 C 3.234375 -1.765625 3 -1.128906 2.8125 -0.640625 C 2.375 0.511719 2.066406 1.21875 1.890625 1.46875 C 1.710938 1.726562 1.398438 1.859375 0.953125 1.859375 C 0.847656 1.859375 0.765625 1.851562 0.703125 1.84375 C 0.648438 1.832031 0.582031 1.816406 0.5 1.796875 L 0.5 1.109375 C 0.632812 1.140625 0.726562 1.160156 0.78125 1.171875 C 0.84375 1.179688 0.894531 1.1875 0.9375 1.1875 C 1.082031 1.1875 1.1875 1.160156 1.25 1.109375 C 1.320312 1.066406 1.378906 1.007812 1.421875 0.9375 C 1.429688 0.914062 1.476562 0.800781 1.5625 0.59375 C 1.65625 0.382812 1.722656 0.226562 1.765625 0.125 L 0.09375 -4.53125 L 0.953125 -4.53125 L 2.171875 -0.84375 Z M 2.15625 -4.640625 Z M 2.15625 -4.640625 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-0-10&quot;&gt;
&lt;path d=&quot;M 2.4375 -4.625 C 2.757812 -4.625 3.070312 -4.546875 3.375 -4.390625 C 3.675781 -4.242188 3.90625 -4.050781 4.0625 -3.8125 C 4.21875 -3.582031 4.320312 -3.316406 4.375 -3.015625 C 4.414062 -2.804688 4.4375 -2.472656 4.4375 -2.015625 L 1.125 -2.015625 C 1.132812 -1.554688 1.238281 -1.1875 1.4375 -0.90625 C 1.644531 -0.632812 1.960938 -0.5 2.390625 -0.5 C 2.785156 -0.5 3.101562 -0.628906 3.34375 -0.890625 C 3.476562 -1.046875 3.570312 -1.222656 3.625 -1.421875 L 4.375 -1.421875 C 4.351562 -1.253906 4.285156 -1.066406 4.171875 -0.859375 C 4.066406 -0.660156 3.941406 -0.492188 3.796875 -0.359375 C 3.566406 -0.140625 3.285156 0.0078125 2.953125 0.09375 C 2.765625 0.132812 2.554688 0.15625 2.328125 0.15625 C 1.765625 0.15625 1.285156 -0.046875 0.890625 -0.453125 C 0.492188 -0.859375 0.296875 -1.429688 0.296875 -2.171875 C 0.296875 -2.898438 0.492188 -3.488281 0.890625 -3.9375 C 1.285156 -4.394531 1.800781 -4.625 2.4375 -4.625 Z M 3.65625 -2.625 C 3.625 -2.957031 3.550781 -3.222656 3.4375 -3.421875 C 3.226562 -3.785156 2.878906 -3.96875 2.390625 -3.96875 C 2.046875 -3.96875 1.753906 -3.835938 1.515625 -3.578125 C 1.273438 -3.328125 1.148438 -3.007812 1.140625 -2.625 Z M 2.375 -4.640625 Z M 2.375 -4.640625 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-0-11&quot;&gt;
&lt;path d=&quot;M 0.5625 -4.53125 L 1.3125 -4.53125 L 1.3125 -3.890625 C 1.488281 -4.109375 1.648438 -4.269531 1.796875 -4.375 C 2.046875 -4.539062 2.332031 -4.625 2.65625 -4.625 C 3.019531 -4.625 3.3125 -4.535156 3.53125 -4.359375 C 3.65625 -4.253906 3.765625 -4.101562 3.859375 -3.90625 C 4.023438 -4.15625 4.222656 -4.335938 4.453125 -4.453125 C 4.679688 -4.566406 4.941406 -4.625 5.234375 -4.625 C 5.835938 -4.625 6.25 -4.40625 6.46875 -3.96875 C 6.59375 -3.726562 6.65625 -3.410156 6.65625 -3.015625 L 6.65625 0 L 5.859375 0 L 5.859375 -3.140625 C 5.859375 -3.441406 5.78125 -3.648438 5.625 -3.765625 C 5.476562 -3.878906 5.296875 -3.9375 5.078125 -3.9375 C 4.773438 -3.9375 4.515625 -3.832031 4.296875 -3.625 C 4.085938 -3.425781 3.984375 -3.097656 3.984375 -2.640625 L 3.984375 0 L 3.21875 0 L 3.21875 -2.953125 C 3.21875 -3.265625 3.179688 -3.488281 3.109375 -3.625 C 2.984375 -3.832031 2.765625 -3.9375 2.453125 -3.9375 C 2.171875 -3.9375 1.910156 -3.828125 1.671875 -3.609375 C 1.429688 -3.390625 1.3125 -2.988281 1.3125 -2.40625 L 1.3125 0 L 0.5625 0 Z M 0.5625 -4.53125 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-0-12&quot;&gt;
&lt;path d=&quot;M 3.34375 -6.375 C 4.4375 -6.375 5.25 -6.023438 5.78125 -5.328125 C 6.1875 -4.773438 6.390625 -4.070312 6.390625 -3.21875 C 6.390625 -2.289062 6.15625 -1.519531 5.6875 -0.90625 C 5.132812 -0.175781 4.347656 0.1875 3.328125 0.1875 C 2.367188 0.1875 1.613281 -0.128906 1.0625 -0.765625 C 0.582031 -1.367188 0.34375 -2.140625 0.34375 -3.078125 C 0.34375 -3.910156 0.550781 -4.628906 0.96875 -5.234375 C 1.5 -5.992188 2.289062 -6.375 3.34375 -6.375 Z M 3.421875 -0.578125 C 4.160156 -0.578125 4.695312 -0.84375 5.03125 -1.375 C 5.363281 -1.90625 5.53125 -2.515625 5.53125 -3.203125 C 5.53125 -3.929688 5.335938 -4.515625 4.953125 -4.953125 C 4.578125 -5.398438 4.054688 -5.625 3.390625 -5.625 C 2.742188 -5.625 2.21875 -5.40625 1.8125 -4.96875 C 1.40625 -4.53125 1.203125 -3.878906 1.203125 -3.015625 C 1.203125 -2.328125 1.375 -1.75 1.71875 -1.28125 C 2.070312 -0.8125 2.640625 -0.578125 3.421875 -0.578125 Z M 3.359375 -6.375 Z M 3.359375 -6.375 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-0-13&quot;&gt;
&lt;path d=&quot;M 0.734375 -6.203125 L 3.53125 -6.203125 C 4.082031 -6.203125 4.523438 -6.046875 4.859375 -5.734375 C 5.203125 -5.429688 5.375 -4.992188 5.375 -4.421875 C 5.375 -3.941406 5.222656 -3.519531 4.921875 -3.15625 C 4.617188 -2.800781 4.15625 -2.625 3.53125 -2.625 L 1.578125 -2.625 L 1.578125 0 L 0.734375 0 Z M 4.53125 -4.421875 C 4.53125 -4.878906 4.359375 -5.191406 4.015625 -5.359375 C 3.828125 -5.441406 3.570312 -5.484375 3.25 -5.484375 L 1.578125 -5.484375 L 1.578125 -3.328125 L 3.25 -3.328125 C 3.632812 -3.328125 3.941406 -3.40625 4.171875 -3.5625 C 4.410156 -3.726562 4.53125 -4.015625 4.53125 -4.421875 Z M 4.53125 -4.421875 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-0-14&quot;&gt;
&lt;path d=&quot;M 3.28125 -6.375 C 4.0625 -6.375 4.664062 -6.164062 5.09375 -5.75 C 5.53125 -5.34375 5.773438 -4.875 5.828125 -4.34375 L 5.015625 -4.34375 C 4.921875 -4.738281 4.734375 -5.050781 4.453125 -5.28125 C 4.171875 -5.519531 3.78125 -5.640625 3.28125 -5.640625 C 2.664062 -5.640625 2.171875 -5.425781 1.796875 -5 C 1.421875 -4.570312 1.234375 -3.914062 1.234375 -3.03125 C 1.234375 -2.300781 1.398438 -1.707031 1.734375 -1.25 C 2.078125 -0.800781 2.585938 -0.578125 3.265625 -0.578125 C 3.890625 -0.578125 4.363281 -0.816406 4.6875 -1.296875 C 4.851562 -1.546875 4.976562 -1.875 5.0625 -2.28125 L 5.890625 -2.28125 C 5.816406 -1.625 5.570312 -1.078125 5.15625 -0.640625 C 4.664062 -0.109375 4.003906 0.15625 3.171875 0.15625 C 2.441406 0.15625 1.832031 -0.0625 1.34375 -0.5 C 0.695312 -1.070312 0.375 -1.960938 0.375 -3.171875 C 0.375 -4.085938 0.617188 -4.835938 1.109375 -5.421875 C 1.628906 -6.054688 2.351562 -6.375 3.28125 -6.375 Z M 3.109375 -6.375 Z M 3.109375 -6.375 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-0-15&quot;&gt;
&lt;path d=&quot;M 1.578125 -6.203125 L 1.578125 -2.375 C 1.578125 -1.914062 1.660156 -1.539062 1.828125 -1.25 C 2.078125 -0.800781 2.5 -0.578125 3.09375 -0.578125 C 3.800781 -0.578125 4.285156 -0.816406 4.546875 -1.296875 C 4.679688 -1.566406 4.75 -1.925781 4.75 -2.375 L 4.75 -6.203125 L 5.609375 -6.203125 L 5.609375 -2.71875 C 5.609375 -1.957031 5.503906 -1.367188 5.296875 -0.953125 C 4.921875 -0.203125 4.207031 0.171875 3.15625 0.171875 C 2.113281 0.171875 1.40625 -0.203125 1.03125 -0.953125 C 0.820312 -1.367188 0.71875 -1.957031 0.71875 -2.71875 L 0.71875 -6.203125 Z M 3.171875 -6.203125 Z M 3.171875 -6.203125 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-0-16&quot;&gt;
&lt;path d=&quot;M 3.84375 -2.546875 L 2.90625 -5.28125 L 1.90625 -2.546875 Z M 2.46875 -6.203125 L 3.421875 -6.203125 L 5.671875 0 L 4.75 0 L 4.109375 -1.859375 L 1.65625 -1.859375 L 0.984375 0 L 0.125 0 Z M 2.46875 -6.203125 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-0-17&quot;&gt;
&lt;path d=&quot;M 3.546875 -3.359375 C 3.941406 -3.359375 4.253906 -3.4375 4.484375 -3.59375 C 4.710938 -3.757812 4.828125 -4.046875 4.828125 -4.453125 C 4.828125 -4.898438 4.664062 -5.203125 4.34375 -5.359375 C 4.175781 -5.441406 3.945312 -5.484375 3.65625 -5.484375 L 1.609375 -5.484375 L 1.609375 -3.359375 Z M 0.765625 -6.203125 L 3.640625 -6.203125 C 4.109375 -6.203125 4.5 -6.132812 4.8125 -6 C 5.394531 -5.738281 5.6875 -5.25 5.6875 -4.53125 C 5.6875 -4.164062 5.609375 -3.863281 5.453125 -3.625 C 5.296875 -3.382812 5.082031 -3.191406 4.8125 -3.046875 C 5.050781 -2.953125 5.226562 -2.820312 5.34375 -2.65625 C 5.46875 -2.5 5.539062 -2.238281 5.5625 -1.875 L 5.59375 -1.046875 C 5.59375 -0.804688 5.609375 -0.628906 5.640625 -0.515625 C 5.691406 -0.316406 5.785156 -0.191406 5.921875 -0.140625 L 5.921875 0 L 4.890625 0 C 4.859375 -0.0507812 4.832031 -0.117188 4.8125 -0.203125 C 4.800781 -0.285156 4.789062 -0.453125 4.78125 -0.703125 L 4.71875 -1.734375 C 4.707031 -2.140625 4.554688 -2.410156 4.265625 -2.546875 C 4.109375 -2.617188 3.859375 -2.65625 3.515625 -2.65625 L 1.609375 -2.65625 L 1.609375 0 L 0.765625 0 Z M 0.765625 -6.203125 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-0-18&quot;&gt;
&lt;path d=&quot;M 3 -3.578125 C 3.351562 -3.578125 3.628906 -3.628906 3.828125 -3.734375 C 4.128906 -3.890625 4.28125 -4.164062 4.28125 -4.5625 C 4.28125 -4.96875 4.117188 -5.242188 3.796875 -5.390625 C 3.609375 -5.460938 3.332031 -5.5 2.96875 -5.5 L 1.46875 -5.5 L 1.46875 -3.578125 Z M 3.28125 -0.71875 C 3.789062 -0.71875 4.15625 -0.867188 4.375 -1.171875 C 4.519531 -1.359375 4.59375 -1.582031 4.59375 -1.84375 C 4.59375 -2.300781 4.390625 -2.609375 3.984375 -2.765625 C 3.765625 -2.859375 3.476562 -2.90625 3.125 -2.90625 L 1.46875 -2.90625 L 1.46875 -0.71875 Z M 0.640625 -6.203125 L 3.3125 -6.203125 C 4.03125 -6.203125 4.546875 -5.988281 4.859375 -5.5625 C 5.035156 -5.300781 5.125 -5.003906 5.125 -4.671875 C 5.125 -4.273438 5.015625 -3.953125 4.796875 -3.703125 C 4.679688 -3.578125 4.515625 -3.457031 4.296875 -3.34375 C 4.609375 -3.21875 4.847656 -3.082031 5.015625 -2.9375 C 5.285156 -2.664062 5.421875 -2.289062 5.421875 -1.8125 C 5.421875 -1.414062 5.296875 -1.054688 5.046875 -0.734375 C 4.671875 -0.242188 4.078125 0 3.265625 0 L 0.640625 0 Z M 0.640625 -6.203125 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-0-19&quot;&gt;
&lt;path d=&quot;M 0.9375 -4.53125 L 2.140625 -0.84375 L 3.40625 -4.53125 L 4.234375 -4.53125 L 2.53125 0 L 1.71875 0 L 0.046875 -4.53125 Z M 0.9375 -4.53125 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-0-20&quot;&gt;
&lt;path d=&quot;M 0.5625 -4.5 L 1.328125 -4.5 L 1.328125 0 L 0.5625 0 Z M 0.5625 -6.203125 L 1.328125 -6.203125 L 1.328125 -5.34375 L 0.5625 -5.34375 Z M 0.5625 -6.203125 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-0-21&quot;&gt;
&lt;path d=&quot;M 2.296875 -4.65625 C 2.804688 -4.65625 3.222656 -4.53125 3.546875 -4.28125 C 3.867188 -4.03125 4.0625 -3.601562 4.125 -3 L 3.390625 -3 C 3.335938 -3.28125 3.234375 -3.515625 3.078125 -3.703125 C 2.921875 -3.890625 2.660156 -3.984375 2.296875 -3.984375 C 1.816406 -3.984375 1.472656 -3.742188 1.265625 -3.265625 C 1.128906 -2.960938 1.0625 -2.582031 1.0625 -2.125 C 1.0625 -1.675781 1.15625 -1.296875 1.34375 -0.984375 C 1.539062 -0.671875 1.84375 -0.515625 2.25 -0.515625 C 2.5625 -0.515625 2.8125 -0.609375 3 -0.796875 C 3.1875 -0.992188 3.316406 -1.265625 3.390625 -1.609375 L 4.125 -1.609375 C 4.039062 -1.003906 3.828125 -0.5625 3.484375 -0.28125 C 3.148438 -0.0078125 2.71875 0.125 2.1875 0.125 C 1.601562 0.125 1.132812 -0.0859375 0.78125 -0.515625 C 0.425781 -0.953125 0.25 -1.492188 0.25 -2.140625 C 0.25 -2.929688 0.441406 -3.546875 0.828125 -3.984375 C 1.210938 -4.429688 1.703125 -4.65625 2.296875 -4.65625 Z M 2.1875 -4.640625 Z M 2.1875 -4.640625 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-0-22&quot;&gt;
&lt;path d=&quot;M 0.359375 -2.796875 L 2.484375 -2.796875 L 2.484375 -2.015625 L 0.359375 -2.015625 Z M 0.359375 -2.796875 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-0-23&quot;&gt;
&lt;path d=&quot;M 0.640625 -6.203125 L 1.84375 -6.203125 L 3.625 -0.953125 L 5.390625 -6.203125 L 6.59375 -6.203125 L 6.59375 0 L 5.796875 0 L 5.796875 -3.671875 C 5.796875 -3.796875 5.796875 -4.003906 5.796875 -4.296875 C 5.804688 -4.585938 5.8125 -4.898438 5.8125 -5.234375 L 4.03125 0 L 3.203125 0 L 1.421875 -5.234375 L 1.421875 -5.046875 C 1.421875 -4.890625 1.421875 -4.65625 1.421875 -4.34375 C 1.429688 -4.039062 1.4375 -3.816406 1.4375 -3.671875 L 1.4375 0 L 0.640625 0 Z M 0.640625 -6.203125 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-0-24&quot;&gt;
&lt;path d=&quot;M 1.140625 -1.203125 C 1.140625 -0.984375 1.21875 -0.8125 1.375 -0.6875 C 1.539062 -0.5625 1.734375 -0.5 1.953125 -0.5 C 2.222656 -0.5 2.484375 -0.5625 2.734375 -0.6875 C 3.148438 -0.882812 3.359375 -1.21875 3.359375 -1.6875 L 3.359375 -2.296875 C 3.265625 -2.242188 3.144531 -2.195312 3 -2.15625 C 2.851562 -2.113281 2.710938 -2.085938 2.578125 -2.078125 L 2.109375 -2.015625 C 1.835938 -1.972656 1.628906 -1.914062 1.484375 -1.84375 C 1.253906 -1.707031 1.140625 -1.492188 1.140625 -1.203125 Z M 2.984375 -2.75 C 3.160156 -2.769531 3.273438 -2.84375 3.328125 -2.96875 C 3.367188 -3.03125 3.390625 -3.125 3.390625 -3.25 C 3.390625 -3.507812 3.296875 -3.695312 3.109375 -3.8125 C 2.921875 -3.9375 2.65625 -4 2.3125 -4 C 1.914062 -4 1.632812 -3.890625 1.46875 -3.671875 C 1.375 -3.554688 1.316406 -3.378906 1.296875 -3.140625 L 0.578125 -3.140625 C 0.585938 -3.703125 0.765625 -4.09375 1.109375 -4.3125 C 1.460938 -4.53125 1.867188 -4.640625 2.328125 -4.640625 C 2.859375 -4.640625 3.289062 -4.535156 3.625 -4.328125 C 3.957031 -4.128906 4.125 -3.816406 4.125 -3.390625 L 4.125 -0.78125 C 4.125 -0.695312 4.140625 -0.628906 4.171875 -0.578125 C 4.203125 -0.535156 4.269531 -0.515625 4.375 -0.515625 C 4.40625 -0.515625 4.441406 -0.515625 4.484375 -0.515625 C 4.535156 -0.523438 4.582031 -0.535156 4.625 -0.546875 L 4.625 0.015625 C 4.507812 0.0546875 4.421875 0.078125 4.359375 0.078125 C 4.296875 0.0859375 4.210938 0.09375 4.109375 0.09375 C 3.847656 0.09375 3.65625 0 3.53125 -0.1875 C 3.46875 -0.28125 3.425781 -0.414062 3.40625 -0.59375 C 3.25 -0.394531 3.023438 -0.21875 2.734375 -0.0625 C 2.441406 0.0820312 2.125 0.15625 1.78125 0.15625 C 1.351562 0.15625 1.003906 0.0273438 0.734375 -0.21875 C 0.472656 -0.476562 0.34375 -0.800781 0.34375 -1.1875 C 0.34375 -1.601562 0.472656 -1.925781 0.734375 -2.15625 C 0.992188 -2.394531 1.335938 -2.539062 1.765625 -2.59375 Z M 2.359375 -4.640625 Z M 2.359375 -4.640625 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-0-25&quot;&gt;
&lt;path d=&quot;M 0.90625 -4.53125 L 1.78125 -0.953125 L 2.65625 -4.53125 L 3.515625 -4.53125 L 4.40625 -0.984375 L 5.328125 -4.53125 L 6.09375 -4.53125 L 4.78125 0 L 3.984375 0 L 3.0625 -3.5 L 2.171875 0 L 1.375 0 L 0.078125 -4.53125 Z M 0.90625 -4.53125 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-0-26&quot;&gt;
&lt;path d=&quot;M 0.578125 -4.53125 L 1.296875 -4.53125 L 1.296875 -3.75 C 1.359375 -3.894531 1.503906 -4.078125 1.734375 -4.296875 C 1.960938 -4.515625 2.226562 -4.625 2.53125 -4.625 C 2.550781 -4.625 2.578125 -4.625 2.609375 -4.625 C 2.640625 -4.625 2.695312 -4.617188 2.78125 -4.609375 L 2.78125 -3.796875 C 2.738281 -3.804688 2.695312 -3.8125 2.65625 -3.8125 C 2.613281 -3.820312 2.570312 -3.828125 2.53125 -3.828125 C 2.144531 -3.828125 1.847656 -3.703125 1.640625 -3.453125 C 1.441406 -3.203125 1.34375 -2.921875 1.34375 -2.609375 L 1.34375 0 L 0.578125 0 Z M 0.578125 -4.53125 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-0-27&quot;&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-0-28&quot;&gt;
&lt;path d=&quot;M 0.578125 -6.203125 L 1.34375 -6.203125 L 1.34375 0 L 0.578125 0 Z M 0.578125 -6.203125 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-0-29&quot;&gt;
&lt;path d=&quot;M 0.5625 -4.53125 L 1.28125 -4.53125 L 1.28125 -3.890625 C 1.5 -4.148438 1.726562 -4.335938 1.96875 -4.453125 C 2.207031 -4.566406 2.472656 -4.625 2.765625 -4.625 C 3.398438 -4.625 3.832031 -4.398438 4.0625 -3.953125 C 4.1875 -3.710938 4.25 -3.363281 4.25 -2.90625 L 4.25 0 L 3.46875 0 L 3.46875 -2.859375 C 3.46875 -3.128906 3.429688 -3.347656 3.359375 -3.515625 C 3.222656 -3.796875 2.972656 -3.9375 2.609375 -3.9375 C 2.429688 -3.9375 2.285156 -3.921875 2.171875 -3.890625 C 1.960938 -3.828125 1.78125 -3.703125 1.625 -3.515625 C 1.5 -3.367188 1.414062 -3.210938 1.375 -3.046875 C 1.332031 -2.890625 1.3125 -2.664062 1.3125 -2.375 L 1.3125 0 L 0.5625 0 Z M 2.34375 -4.640625 Z M 2.34375 -4.640625 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-0-30&quot;&gt;
&lt;path d=&quot;M 0.5 -6.234375 L 1.234375 -6.234375 L 1.234375 -3.984375 C 1.398438 -4.191406 1.597656 -4.351562 1.828125 -4.46875 C 2.066406 -4.582031 2.320312 -4.640625 2.59375 -4.640625 C 3.15625 -4.640625 3.609375 -4.445312 3.953125 -4.0625 C 4.304688 -3.675781 4.484375 -3.101562 4.484375 -2.34375 C 4.484375 -1.632812 4.304688 -1.039062 3.953125 -0.5625 C 3.609375 -0.09375 3.128906 0.140625 2.515625 0.140625 C 2.171875 0.140625 1.882812 0.0546875 1.65625 -0.109375 C 1.507812 -0.203125 1.359375 -0.359375 1.203125 -0.578125 L 1.203125 0 L 0.5 0 Z M 2.484375 -0.53125 C 2.890625 -0.53125 3.191406 -0.691406 3.390625 -1.015625 C 3.597656 -1.347656 3.703125 -1.78125 3.703125 -2.3125 C 3.703125 -2.789062 3.597656 -3.1875 3.390625 -3.5 C 3.191406 -3.8125 2.894531 -3.96875 2.5 -3.96875 C 2.15625 -3.96875 1.851562 -3.835938 1.59375 -3.578125 C 1.332031 -3.328125 1.203125 -2.90625 1.203125 -2.3125 C 1.203125 -1.882812 1.253906 -1.539062 1.359375 -1.28125 C 1.554688 -0.78125 1.929688 -0.53125 2.484375 -0.53125 Z M 2.484375 -0.53125 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-0-31&quot;&gt;
&lt;path d=&quot;M 1.046875 -2.203125 C 1.046875 -1.722656 1.144531 -1.316406 1.34375 -0.984375 C 1.550781 -0.660156 1.882812 -0.5 2.34375 -0.5 C 2.6875 -0.5 2.972656 -0.648438 3.203125 -0.953125 C 3.429688 -1.253906 3.546875 -1.691406 3.546875 -2.265625 C 3.546875 -2.835938 3.425781 -3.257812 3.1875 -3.53125 C 2.957031 -3.800781 2.671875 -3.9375 2.328125 -3.9375 C 1.941406 -3.9375 1.628906 -3.789062 1.390625 -3.5 C 1.160156 -3.207031 1.046875 -2.773438 1.046875 -2.203125 Z M 2.1875 -4.609375 C 2.53125 -4.609375 2.820312 -4.535156 3.0625 -4.390625 C 3.195312 -4.304688 3.347656 -4.15625 3.515625 -3.9375 L 3.515625 -6.234375 L 4.25 -6.234375 L 4.25 0 L 3.5625 0 L 3.5625 -0.625 C 3.382812 -0.351562 3.171875 -0.15625 2.921875 -0.03125 C 2.679688 0.09375 2.40625 0.15625 2.09375 0.15625 C 1.59375 0.15625 1.15625 -0.0507812 0.78125 -0.46875 C 0.414062 -0.894531 0.234375 -1.460938 0.234375 -2.171875 C 0.234375 -2.828125 0.398438 -3.394531 0.734375 -3.875 C 1.078125 -4.363281 1.5625 -4.609375 2.1875 -4.609375 Z M 2.1875 -4.609375 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-0-32&quot;&gt;
&lt;path d=&quot;M 5.171875 -6.203125 L 5.171875 -5.46875 L 3.078125 -5.46875 L 3.078125 0 L 2.234375 0 L 2.234375 -5.46875 L 0.140625 -5.46875 L 0.140625 -6.203125 Z M 5.171875 -6.203125 &quot;/&gt;
&lt;/g&gt;
&lt;g id=&quot;glyph-0-33&quot;&gt;
&lt;path d=&quot;M 1.96875 -6.203125 L 2.609375 -6.203125 L 0.640625 0 L 0 0 Z M 1.96875 -6.203125 &quot;/&gt;
&lt;/g&gt;
&lt;/g&gt;
&lt;/defs&gt;
&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;rgb(100%, 100%, 100%)&quot; fill-opacity=&quot;1&quot; d=&quot;M 0 0 L 433.5 0 L 433.5 289.242188 L 0 289.242188 Z M 0 0 &quot;/&gt;
&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;rgb(100%, 100%, 100%)&quot; fill-opacity=&quot;1&quot; stroke-width=&quot;1&quot; stroke-linecap=&quot;butt&quot; stroke-linejoin=&quot;miter&quot; stroke=&quot;rgb(0%, 0%, 0%)&quot; stroke-opacity=&quot;1&quot; stroke-miterlimit=&quot;4&quot; d=&quot;M 180.001471 160.001713 L 300.000018 160.001713 L 300.000018 220.000986 L 180.001471 220.000986 Z M 180.001471 160.001713 &quot; transform=&quot;matrix(0.721298, 0, 0, 0.721298, 0.360649, 0.360649)&quot;/&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-0-0&quot; x=&quot;140.405124&quot; y=&quot;139.931772&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-1&quot; x=&quot;145.692293&quot; y=&quot;139.931772&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-2&quot; x=&quot;151.943071&quot; y=&quot;139.931772&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-3&quot; x=&quot;154.347866&quot; y=&quot;139.931772&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-4&quot; x=&quot;156.752662&quot; y=&quot;139.931772&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-5&quot; x=&quot;163.00344&quot; y=&quot;139.931772&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-6&quot; x=&quot;167.817257&quot; y=&quot;139.931772&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-7&quot; x=&quot;172.145044&quot; y=&quot;139.931772&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-3&quot; x=&quot;174.54984&quot; y=&quot;139.931772&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-8&quot; x=&quot;176.954635&quot; y=&quot;139.931772&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-9&quot; x=&quot;182.727835&quot; y=&quot;139.931772&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-6&quot; x=&quot;187.055622&quot; y=&quot;139.931772&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-7&quot; x=&quot;191.383409&quot; y=&quot;139.931772&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-10&quot; x=&quot;193.788204&quot; y=&quot;139.931772&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-11&quot; x=&quot;198.602022&quot; y=&quot;139.931772&quot;/&gt;
&lt;/g&gt;
&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;rgb(100%, 100%, 100%)&quot; fill-opacity=&quot;1&quot; stroke-width=&quot;1&quot; stroke-linecap=&quot;butt&quot; stroke-linejoin=&quot;miter&quot; stroke=&quot;rgb(0%, 0%, 0%)&quot; stroke-opacity=&quot;1&quot; stroke-miterlimit=&quot;4&quot; d=&quot;M 220.000986 160.001713 L 300.000018 160.001713 L 300.000018 180.001471 L 220.000986 180.001471 Z M 220.000986 160.001713 &quot; transform=&quot;matrix(0.721298, 0, 0, 0.721298, 0.360649, 0.360649)&quot;/&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-0-12&quot; x=&quot;170.93631&quot; y=&quot;125.505816&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-13&quot; x=&quot;177.668893&quot; y=&quot;125.505816&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-14&quot; x=&quot;183.442093&quot; y=&quot;125.505816&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-3&quot; x=&quot;189.692871&quot; y=&quot;125.505816&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-15&quot; x=&quot;192.097666&quot; y=&quot;125.505816&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-16&quot; x=&quot;198.348444&quot; y=&quot;125.505816&quot;/&gt;
&lt;/g&gt;
&lt;path fill=&quot;none&quot; stroke-width=&quot;1&quot; stroke-linecap=&quot;butt&quot; stroke-linejoin=&quot;miter&quot; stroke=&quot;rgb(0%, 0%, 0%)&quot; stroke-opacity=&quot;1&quot; stroke-miterlimit=&quot;10&quot; d=&quot;M 260.000502 220.000986 L 260.000502 249.997915 L 240.000744 249.997915 L 240.000744 273.631531 &quot; transform=&quot;matrix(0.721298, 0, 0, 0.721298, 0.360649, 0.360649)&quot;/&gt;
&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot; stroke-width=&quot;1&quot; stroke-linecap=&quot;butt&quot; stroke-linejoin=&quot;miter&quot; stroke=&quot;rgb(0%, 0%, 0%)&quot; stroke-opacity=&quot;1&quot; stroke-miterlimit=&quot;10&quot; d=&quot;M 240.000744 278.879234 L 236.502276 271.882297 L 240.000744 273.631531 L 243.499213 271.882297 Z M 240.000744 278.879234 &quot; transform=&quot;matrix(0.721298, 0, 0, 0.721298, 0.360649, 0.360649)&quot;/&gt;
&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;rgb(100%, 100%, 100%)&quot; fill-opacity=&quot;1&quot; stroke-width=&quot;1&quot; stroke-linecap=&quot;butt&quot; stroke-linejoin=&quot;miter&quot; stroke=&quot;rgb(0%, 0%, 0%)&quot; stroke-opacity=&quot;1&quot; stroke-miterlimit=&quot;4&quot; d=&quot;M 220.000986 200.001228 L 300.000018 200.001228 L 300.000018 220.000986 L 220.000986 220.000986 Z M 220.000986 200.001228 &quot; transform=&quot;matrix(0.721298, 0, 0, 0.721298, 0.360649, 0.360649)&quot;/&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-0-13&quot; x=&quot;165.413874&quot; y=&quot;154.357728&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-17&quot; x=&quot;171.187074&quot; y=&quot;154.357728&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-12&quot; x=&quot;177.437852&quot; y=&quot;154.357728&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-0&quot; x=&quot;184.170434&quot; y=&quot;154.357728&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-2&quot; x=&quot;189.457604&quot; y=&quot;154.357728&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-18&quot; x=&quot;191.862399&quot; y=&quot;154.357728&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-15&quot; x=&quot;197.635599&quot; y=&quot;154.357728&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-8&quot; x=&quot;203.886377&quot; y=&quot;154.357728&quot;/&gt;
&lt;/g&gt;
&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;rgb(85.488892%, 90.979004%, 98.81897%)&quot; fill-opacity=&quot;1&quot; stroke-width=&quot;1&quot; stroke-linecap=&quot;butt&quot; stroke-linejoin=&quot;miter&quot; stroke=&quot;rgb(42.349243%, 55.688477%, 74.899292%)&quot; stroke-opacity=&quot;1&quot; stroke-miterlimit=&quot;4&quot; d=&quot;M 180.001471 280.00026 L 300.000018 280.00026 L 300.000018 339.999534 L 180.001471 339.999534 Z M 180.001471 280.00026 &quot; transform=&quot;matrix(0.721298, 0, 0, 0.721298, 0.360649, 0.360649)&quot;/&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-0-13&quot; x=&quot;150.987918&quot; y=&quot;221.438423&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-17&quot; x=&quot;156.761118&quot; y=&quot;221.438423&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-12&quot; x=&quot;163.011896&quot; y=&quot;221.438423&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-0&quot; x=&quot;169.744479&quot; y=&quot;221.438423&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-2&quot; x=&quot;175.031648&quot; y=&quot;221.438423&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-18&quot; x=&quot;177.436443&quot; y=&quot;221.438423&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-15&quot; x=&quot;183.209643&quot; y=&quot;221.438423&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-8&quot; x=&quot;189.460421&quot; y=&quot;221.438423&quot;/&gt;
&lt;/g&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-0-1&quot; x=&quot;159.880164&quot; y=&quot;232.25789&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-10&quot; x=&quot;166.130942&quot; y=&quot;232.25789&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-19&quot; x=&quot;170.94476&quot; y=&quot;232.25789&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-20&quot; x=&quot;175.272546&quot; y=&quot;232.25789&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-21&quot; x=&quot;177.195538&quot; y=&quot;232.25789&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-10&quot; x=&quot;181.523324&quot; y=&quot;232.25789&quot;/&gt;
&lt;/g&gt;
&lt;path fill=&quot;none&quot; stroke-width=&quot;1&quot; stroke-linecap=&quot;butt&quot; stroke-linejoin=&quot;miter&quot; stroke=&quot;rgb(0%, 0%, 0%)&quot; stroke-opacity=&quot;1&quot; stroke-miterlimit=&quot;10&quot; d=&quot;M 240.000744 100.002439 L 240.000744 120.002197 L 260.000502 120.002197 L 260.000502 133.62781 &quot; transform=&quot;matrix(0.721298, 0, 0, 0.721298, 0.360649, 0.360649)&quot;/&gt;
&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot; stroke-width=&quot;1&quot; stroke-linecap=&quot;butt&quot; stroke-linejoin=&quot;miter&quot; stroke=&quot;rgb(0%, 0%, 0%)&quot; stroke-opacity=&quot;1&quot; stroke-miterlimit=&quot;10&quot; d=&quot;M 260.000502 138.880929 L 256.502034 131.878576 L 260.000502 133.62781 L 263.49897 131.878576 Z M 260.000502 138.880929 &quot; transform=&quot;matrix(0.721298, 0, 0, 0.721298, 0.360649, 0.360649)&quot;/&gt;
&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;rgb(83.529663%, 90.979004%, 83.139038%)&quot; fill-opacity=&quot;1&quot; stroke-width=&quot;1&quot; stroke-linecap=&quot;butt&quot; stroke-linejoin=&quot;miter&quot; stroke=&quot;rgb(50.979614%, 70.199585%, 39.99939%)&quot; stroke-opacity=&quot;1&quot; stroke-miterlimit=&quot;4&quot; d=&quot;M 180.001471 39.99775 L 300.000018 39.99775 L 300.000018 100.002439 L 180.001471 100.002439 Z M 180.001471 39.99775 &quot; transform=&quot;matrix(0.721298, 0, 0, 0.721298, 0.360649, 0.360649)&quot;/&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-0-13&quot; x=&quot;134.702363&quot; y=&quot;48.326952&quot;/&gt;
&lt;/g&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-0-16&quot; x=&quot;139.837383&quot; y=&quot;48.326952&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-22&quot; x=&quot;145.610583&quot; y=&quot;48.326952&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-1&quot; x=&quot;148.492957&quot; y=&quot;48.326952&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-2&quot; x=&quot;154.743735&quot; y=&quot;48.326952&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-23&quot; x=&quot;157.14853&quot; y=&quot;48.326952&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-3&quot; x=&quot;164.358691&quot; y=&quot;48.326952&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-24&quot; x=&quot;166.763486&quot; y=&quot;48.326952&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-25&quot; x=&quot;171.577304&quot; y=&quot;48.326952&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-24&quot; x=&quot;177.828082&quot; y=&quot;48.326952&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-26&quot; x=&quot;182.641899&quot; y=&quot;48.326952&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-10&quot; x=&quot;185.524273&quot; y=&quot;48.326952&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-27&quot; x=&quot;190.33809&quot; y=&quot;48.326952&quot;/&gt;
&lt;/g&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-0-12&quot; x=&quot;192.744295&quot; y=&quot;48.326952&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-13&quot; x=&quot;199.476877&quot; y=&quot;48.326952&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-14&quot; x=&quot;205.250077&quot; y=&quot;48.326952&quot;/&gt;
&lt;/g&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-0-15&quot; x=&quot;154.819813&quot; y=&quot;59.146419&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-16&quot; x=&quot;161.070591&quot; y=&quot;59.146419&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-27&quot; x=&quot;166.843791&quot; y=&quot;59.146419&quot;/&gt;
&lt;/g&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-0-14&quot; x=&quot;169.257035&quot; y=&quot;59.146419&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-28&quot; x=&quot;175.507813&quot; y=&quot;59.146419&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-20&quot; x=&quot;177.430805&quot; y=&quot;59.146419&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-10&quot; x=&quot;179.353796&quot; y=&quot;59.146419&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-29&quot; x=&quot;184.167613&quot; y=&quot;59.146419&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-7&quot; x=&quot;188.981431&quot; y=&quot;59.146419&quot;/&gt;
&lt;/g&gt;
&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;rgb(97.24884%, 80.778503%, 79.998779%)&quot; fill-opacity=&quot;1&quot; d=&quot;M 159.046875 101.34375 L 216.75 101.34375 L 216.75 115.769531 L 159.046875 115.769531 Z M 159.046875 101.34375 &quot;/&gt;
&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;rgb(72.158813%, 32.939148%, 31.369019%)&quot; fill-opacity=&quot;1&quot; d=&quot;M 163.375 100.980469 L 165.539062 100.980469 L 165.539062 101.703125 L 163.375 101.703125 Z M 167.703125 100.980469 L 169.867188 100.980469 L 169.867188 101.703125 L 167.703125 101.703125 Z M 172.03125 100.980469 L 174.195312 100.980469 L 174.195312 101.703125 L 172.03125 101.703125 Z M 176.355469 100.980469 L 178.519531 100.980469 L 178.519531 101.703125 L 176.355469 101.703125 Z M 180.683594 100.980469 L 182.847656 100.980469 L 182.847656 101.703125 L 180.683594 101.703125 Z M 185.011719 100.980469 L 187.175781 100.980469 L 187.175781 101.703125 L 185.011719 101.703125 Z M 189.339844 100.980469 L 191.503906 100.980469 L 191.503906 101.703125 L 189.339844 101.703125 Z M 193.667969 100.980469 L 195.832031 100.980469 L 195.832031 101.703125 L 193.667969 101.703125 Z M 197.996094 100.980469 L 200.160156 100.980469 L 200.160156 101.703125 L 197.996094 101.703125 Z M 202.324219 100.980469 L 204.488281 100.980469 L 204.488281 101.703125 L 202.324219 101.703125 Z M 206.652344 100.980469 L 208.816406 100.980469 L 208.816406 101.703125 L 206.652344 101.703125 Z M 210.980469 100.980469 L 213.144531 100.980469 L 213.144531 101.703125 L 210.980469 101.703125 Z M 215.308594 100.980469 L 217.109375 100.980469 L 217.109375 102.0625 L 216.390625 102.0625 L 216.390625 101.34375 L 216.75 101.34375 L 216.75 101.703125 L 215.308594 101.703125 Z M 217.109375 104.226562 L 217.109375 106.390625 L 216.390625 106.390625 L 216.390625 104.226562 Z M 217.109375 108.554688 L 217.109375 110.71875 L 216.390625 110.71875 L 216.390625 108.554688 Z M 217.109375 112.882812 L 217.109375 115.046875 L 216.390625 115.046875 L 216.390625 112.882812 Z M 215.308594 116.128906 L 213.144531 116.128906 L 213.144531 115.40625 L 215.308594 115.40625 Z M 210.980469 116.128906 L 208.816406 116.128906 L 208.816406 115.40625 L 210.980469 115.40625 Z M 206.652344 116.128906 L 204.488281 116.128906 L 204.488281 115.40625 L 206.652344 115.40625 Z M 202.324219 116.128906 L 200.160156 116.128906 L 200.160156 115.40625 L 202.324219 115.40625 Z M 197.996094 116.128906 L 195.832031 116.128906 L 195.832031 115.40625 L 197.996094 115.40625 Z M 193.667969 116.128906 L 191.503906 116.128906 L 191.503906 115.40625 L 193.667969 115.40625 Z M 189.339844 116.128906 L 187.175781 116.128906 L 187.175781 115.40625 L 189.339844 115.40625 Z M 185.011719 116.128906 L 182.847656 116.128906 L 182.847656 115.40625 L 185.011719 115.40625 Z M 180.683594 116.128906 L 178.519531 116.128906 L 178.519531 115.40625 L 180.683594 115.40625 Z M 176.355469 116.128906 L 174.195312 116.128906 L 174.195312 115.40625 L 176.355469 115.40625 Z M 172.03125 116.128906 L 169.867188 116.128906 L 169.867188 115.40625 L 172.03125 115.40625 Z M 167.703125 116.128906 L 165.539062 116.128906 L 165.539062 115.40625 L 167.703125 115.40625 Z M 163.375 116.128906 L 161.210938 116.128906 L 161.210938 115.40625 L 163.375 115.40625 Z M 158.683594 115.769531 L 158.683594 113.605469 L 159.40625 113.605469 L 159.40625 115.769531 Z M 158.683594 111.441406 L 158.683594 109.277344 L 159.40625 109.277344 L 159.40625 111.441406 Z M 158.683594 107.113281 L 158.683594 104.949219 L 159.40625 104.949219 L 159.40625 107.113281 Z M 158.683594 102.785156 L 158.683594 100.980469 L 161.210938 100.980469 L 161.210938 101.703125 L 159.046875 101.703125 L 159.046875 101.34375 L 159.40625 101.34375 L 159.40625 102.785156 Z M 158.683594 102.785156 &quot;/&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-0-13&quot; x=&quot;172.705741&quot; y=&quot;111.07986&quot;/&gt;
&lt;/g&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-0-16&quot; x=&quot;177.840761&quot; y=&quot;111.07986&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-22&quot; x=&quot;183.613961&quot; y=&quot;111.07986&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-1&quot; x=&quot;186.496334&quot; y=&quot;111.07986&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-2&quot; x=&quot;192.747112&quot; y=&quot;111.07986&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-23&quot; x=&quot;195.151908&quot; y=&quot;111.07986&quot;/&gt;
&lt;/g&gt;
&lt;path fill=&quot;none&quot; stroke-width=&quot;1&quot; stroke-linecap=&quot;butt&quot; stroke-linejoin=&quot;miter&quot; stroke=&quot;rgb(0%, 0%, 0%)&quot; stroke-opacity=&quot;1&quot; stroke-miterlimit=&quot;10&quot; d=&quot;M 459.998081 220.000986 L 460.501731 241.002628 L 439.998323 241.002628 L 439.998323 253.631773 &quot; transform=&quot;matrix(0.721298, 0, 0, 0.721298, 0.360649, 0.360649)&quot;/&gt;
&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot; stroke-width=&quot;1&quot; stroke-linecap=&quot;butt&quot; stroke-linejoin=&quot;miter&quot; stroke=&quot;rgb(0%, 0%, 0%)&quot; stroke-opacity=&quot;1&quot; stroke-miterlimit=&quot;10&quot; d=&quot;M 439.998323 258.879476 L 436.499855 251.882539 L 439.998323 253.631773 L 443.502207 251.882539 Z M 439.998323 258.879476 &quot; transform=&quot;matrix(0.721298, 0, 0, 0.721298, 0.360649, 0.360649)&quot;/&gt;
&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;rgb(85.488892%, 90.979004%, 98.81897%)&quot; fill-opacity=&quot;1&quot; stroke-width=&quot;1&quot; stroke-linecap=&quot;butt&quot; stroke-linejoin=&quot;miter&quot; stroke=&quot;rgb(42.349243%, 55.688477%, 74.899292%)&quot; stroke-opacity=&quot;1&quot; stroke-miterlimit=&quot;4&quot; d=&quot;M 379.999049 260.000502 L 499.997597 260.000502 L 499.997597 339.999534 L 379.999049 339.999534 Z M 379.999049 260.000502 &quot; transform=&quot;matrix(0.721298, 0, 0, 0.721298, 0.360649, 0.360649)&quot;/&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-0-12&quot; x=&quot;300.769913&quot; y=&quot;214.225445&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-13&quot; x=&quot;307.502496&quot; y=&quot;214.225445&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-14&quot; x=&quot;313.275696&quot; y=&quot;214.225445&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-3&quot; x=&quot;319.526474&quot; y=&quot;214.225445&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-15&quot; x=&quot;321.931269&quot; y=&quot;214.225445&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-16&quot; x=&quot;328.182047&quot; y=&quot;214.225445&quot;/&gt;
&lt;/g&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-0-10&quot; x=&quot;287.527333&quot; y=&quot;225.044912&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-29&quot; x=&quot;292.341151&quot; y=&quot;225.044912&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-24&quot; x=&quot;297.154968&quot; y=&quot;225.044912&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-30&quot; x=&quot;301.968786&quot; y=&quot;225.044912&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-28&quot; x=&quot;306.782603&quot; y=&quot;225.044912&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-10&quot; x=&quot;308.705594&quot; y=&quot;225.044912&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-31&quot; x=&quot;313.519412&quot; y=&quot;225.044912&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-27&quot; x=&quot;318.333229&quot; y=&quot;225.044912&quot;/&gt;
&lt;/g&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-0-1&quot; x=&quot;320.740846&quot; y=&quot;225.044912&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-10&quot; x=&quot;326.991624&quot; y=&quot;225.044912&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-19&quot; x=&quot;331.805442&quot; y=&quot;225.044912&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-20&quot; x=&quot;336.133228&quot; y=&quot;225.044912&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-21&quot; x=&quot;338.056219&quot; y=&quot;225.044912&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-10&quot; x=&quot;342.384006&quot; y=&quot;225.044912&quot;/&gt;
&lt;/g&gt;
&lt;path fill=&quot;none&quot; stroke-width=&quot;1&quot; stroke-linecap=&quot;butt&quot; stroke-linejoin=&quot;miter&quot; stroke=&quot;rgb(0%, 0%, 0%)&quot; stroke-opacity=&quot;1&quot; stroke-miterlimit=&quot;10&quot; d=&quot;M 439.998323 100.002439 L 439.998323 169.998884 L 459.998081 169.998884 L 459.998081 233.632015 &quot; transform=&quot;matrix(0.721298, 0, 0, 0.721298, 0.360649, 0.360649)&quot;/&gt;
&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot; stroke-width=&quot;1&quot; stroke-linecap=&quot;butt&quot; stroke-linejoin=&quot;miter&quot; stroke=&quot;rgb(0%, 0%, 0%)&quot; stroke-opacity=&quot;1&quot; stroke-miterlimit=&quot;10&quot; d=&quot;M 459.998081 238.879718 L 456.499613 231.877366 L 459.998081 233.632015 L 463.501965 231.877366 Z M 459.998081 238.879718 &quot; transform=&quot;matrix(0.721298, 0, 0, 0.721298, 0.360649, 0.360649)&quot;/&gt;
&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;rgb(83.529663%, 90.979004%, 83.139038%)&quot; fill-opacity=&quot;1&quot; stroke-width=&quot;1&quot; stroke-linecap=&quot;butt&quot; stroke-linejoin=&quot;miter&quot; stroke=&quot;rgb(50.979614%, 70.199585%, 39.99939%)&quot; stroke-opacity=&quot;1&quot; stroke-miterlimit=&quot;4&quot; d=&quot;M 379.999049 39.99775 L 499.997597 39.99775 L 499.997597 100.002439 L 379.999049 100.002439 Z M 379.999049 39.99775 &quot; transform=&quot;matrix(0.721298, 0, 0, 0.721298, 0.360649, 0.360649)&quot;/&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-0-13&quot; x=&quot;278.961922&quot; y=&quot;48.326952&quot;/&gt;
&lt;/g&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-0-16&quot; x=&quot;284.096942&quot; y=&quot;48.326952&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-22&quot; x=&quot;289.870142&quot; y=&quot;48.326952&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-1&quot; x=&quot;292.752516&quot; y=&quot;48.326952&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-2&quot; x=&quot;299.003294&quot; y=&quot;48.326952&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-23&quot; x=&quot;301.408089&quot; y=&quot;48.326952&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-3&quot; x=&quot;308.61825&quot; y=&quot;48.326952&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-24&quot; x=&quot;311.023045&quot; y=&quot;48.326952&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-25&quot; x=&quot;315.836863&quot; y=&quot;48.326952&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-24&quot; x=&quot;322.087641&quot; y=&quot;48.326952&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-26&quot; x=&quot;326.901458&quot; y=&quot;48.326952&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-10&quot; x=&quot;329.783832&quot; y=&quot;48.326952&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-27&quot; x=&quot;334.597649&quot; y=&quot;48.326952&quot;/&gt;
&lt;/g&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-0-12&quot; x=&quot;337.003854&quot; y=&quot;48.326952&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-13&quot; x=&quot;343.736436&quot; y=&quot;48.326952&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-14&quot; x=&quot;349.509636&quot; y=&quot;48.326952&quot;/&gt;
&lt;/g&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-0-15&quot; x=&quot;299.079372&quot; y=&quot;59.146419&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-16&quot; x=&quot;305.33015&quot; y=&quot;59.146419&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-27&quot; x=&quot;311.10335&quot; y=&quot;59.146419&quot;/&gt;
&lt;/g&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-0-14&quot; x=&quot;313.516594&quot; y=&quot;59.146419&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-28&quot; x=&quot;319.767372&quot; y=&quot;59.146419&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-20&quot; x=&quot;321.690363&quot; y=&quot;59.146419&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-10&quot; x=&quot;323.613355&quot; y=&quot;59.146419&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-29&quot; x=&quot;328.427172&quot; y=&quot;59.146419&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-7&quot; x=&quot;333.24099&quot; y=&quot;59.146419&quot;/&gt;
&lt;/g&gt;
&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;rgb(100%, 100%, 100%)&quot; fill-opacity=&quot;1&quot; stroke-width=&quot;1&quot; stroke-linecap=&quot;butt&quot; stroke-linejoin=&quot;miter&quot; stroke=&quot;rgb(0%, 0%, 0%)&quot; stroke-opacity=&quot;1&quot; stroke-miterlimit=&quot;4&quot; d=&quot;M 419.998565 260.000502 L 499.997597 260.000502 L 499.997597 280.00026 L 419.998565 280.00026 Z M 419.998565 260.000502 &quot; transform=&quot;matrix(0.721298, 0, 0, 0.721298, 0.360649, 0.360649)&quot;/&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-0-12&quot; x=&quot;315.195869&quot; y=&quot;197.635596&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-13&quot; x=&quot;321.928452&quot; y=&quot;197.635596&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-14&quot; x=&quot;327.701652&quot; y=&quot;197.635596&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-3&quot; x=&quot;333.95243&quot; y=&quot;197.635596&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-15&quot; x=&quot;336.357225&quot; y=&quot;197.635596&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-16&quot; x=&quot;342.608003&quot; y=&quot;197.635596&quot;/&gt;
&lt;/g&gt;
&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;rgb(97.24884%, 80.778503%, 79.998779%)&quot; fill-opacity=&quot;1&quot; d=&quot;M 303.304688 173.472656 L 361.007812 173.472656 L 361.007812 187.898438 L 303.304688 187.898438 Z M 303.304688 173.472656 &quot;/&gt;
&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;rgb(72.158813%, 32.939148%, 31.369019%)&quot; fill-opacity=&quot;1&quot; d=&quot;M 307.632812 173.113281 L 309.796875 173.113281 L 309.796875 173.832031 L 307.632812 173.832031 Z M 311.960938 173.113281 L 314.125 173.113281 L 314.125 173.832031 L 311.960938 173.832031 Z M 316.289062 173.113281 L 318.453125 173.113281 L 318.453125 173.832031 L 316.289062 173.832031 Z M 320.617188 173.113281 L 322.78125 173.113281 L 322.78125 173.832031 L 320.617188 173.832031 Z M 324.945312 173.113281 L 327.109375 173.113281 L 327.109375 173.832031 L 324.945312 173.832031 Z M 329.273438 173.113281 L 331.4375 173.113281 L 331.4375 173.832031 L 329.273438 173.832031 Z M 333.601562 173.113281 L 335.765625 173.113281 L 335.765625 173.832031 L 333.601562 173.832031 Z M 337.929688 173.113281 L 340.09375 173.113281 L 340.09375 173.832031 L 337.929688 173.832031 Z M 342.253906 173.113281 L 344.417969 173.113281 L 344.417969 173.832031 L 342.253906 173.832031 Z M 346.582031 173.113281 L 348.746094 173.113281 L 348.746094 173.832031 L 346.582031 173.832031 Z M 350.910156 173.113281 L 353.074219 173.113281 L 353.074219 173.832031 L 350.910156 173.832031 Z M 355.238281 173.113281 L 357.402344 173.113281 L 357.402344 173.832031 L 355.238281 173.832031 Z M 359.566406 173.113281 L 361.371094 173.113281 L 361.371094 174.195312 L 360.648438 174.195312 L 360.648438 173.472656 L 361.007812 173.472656 L 361.007812 173.832031 L 359.566406 173.832031 Z M 361.371094 176.355469 L 361.371094 178.519531 L 360.648438 178.519531 L 360.648438 176.355469 Z M 361.371094 180.683594 L 361.371094 182.847656 L 360.648438 182.847656 L 360.648438 180.683594 Z M 361.371094 185.011719 L 361.371094 187.175781 L 360.648438 187.175781 L 360.648438 185.011719 Z M 359.566406 188.257812 L 357.402344 188.257812 L 357.402344 187.539062 L 359.566406 187.539062 Z M 355.238281 188.257812 L 353.074219 188.257812 L 353.074219 187.539062 L 355.238281 187.539062 Z M 350.910156 188.257812 L 348.746094 188.257812 L 348.746094 187.539062 L 350.910156 187.539062 Z M 346.582031 188.257812 L 344.417969 188.257812 L 344.417969 187.539062 L 346.582031 187.539062 Z M 342.253906 188.257812 L 340.09375 188.257812 L 340.09375 187.539062 L 342.253906 187.539062 Z M 337.929688 188.257812 L 335.765625 188.257812 L 335.765625 187.539062 L 337.929688 187.539062 Z M 333.601562 188.257812 L 331.4375 188.257812 L 331.4375 187.539062 L 333.601562 187.539062 Z M 329.273438 188.257812 L 327.109375 188.257812 L 327.109375 187.539062 L 329.273438 187.539062 Z M 324.945312 188.257812 L 322.78125 188.257812 L 322.78125 187.539062 L 324.945312 187.539062 Z M 320.617188 188.257812 L 318.453125 188.257812 L 318.453125 187.539062 L 320.617188 187.539062 Z M 316.289062 188.257812 L 314.125 188.257812 L 314.125 187.539062 L 316.289062 187.539062 Z M 311.960938 188.257812 L 309.796875 188.257812 L 309.796875 187.539062 L 311.960938 187.539062 Z M 307.632812 188.257812 L 305.46875 188.257812 L 305.46875 187.539062 L 307.632812 187.539062 Z M 302.945312 187.898438 L 302.945312 185.734375 L 303.667969 185.734375 L 303.667969 187.898438 Z M 302.945312 183.570312 L 302.945312 181.40625 L 303.667969 181.40625 L 303.667969 183.570312 Z M 302.945312 179.242188 L 302.945312 177.078125 L 303.667969 177.078125 L 303.667969 179.242188 Z M 302.945312 174.914062 L 302.945312 173.113281 L 305.46875 173.113281 L 305.46875 173.832031 L 303.304688 173.832031 L 303.304688 173.472656 L 303.667969 173.472656 L 303.667969 174.914062 Z M 302.945312 174.914062 &quot;/&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-0-13&quot; x=&quot;316.965299&quot; y=&quot;183.20964&quot;/&gt;
&lt;/g&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-0-16&quot; x=&quot;322.10032&quot; y=&quot;183.20964&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-22&quot; x=&quot;327.87352&quot; y=&quot;183.20964&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-1&quot; x=&quot;330.755893&quot; y=&quot;183.20964&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-2&quot; x=&quot;337.006671&quot; y=&quot;183.20964&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-23&quot; x=&quot;339.411467&quot; y=&quot;183.20964&quot;/&gt;
&lt;/g&gt;
&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;rgb(100%, 100%, 100%)&quot; fill-opacity=&quot;1&quot; stroke-width=&quot;1&quot; stroke-linecap=&quot;butt&quot; stroke-linejoin=&quot;miter&quot; stroke=&quot;rgb(0%, 0%, 0%)&quot; stroke-opacity=&quot;1&quot; stroke-miterlimit=&quot;4&quot; d=&quot;M 39.99775 160.001713 L 160.001713 160.001713 L 160.001713 220.000986 L 39.99775 220.000986 Z M 39.99775 160.001713 &quot; transform=&quot;matrix(0.721298, 0, 0, 0.721298, 0.360649, 0.360649)&quot;/&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-0-0&quot; x=&quot;39.975676&quot; y=&quot;139.931772&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-1&quot; x=&quot;45.262845&quot; y=&quot;139.931772&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-32&quot; x=&quot;51.513623&quot; y=&quot;139.931772&quot;/&gt;
&lt;/g&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-0-3&quot; x=&quot;56.648643&quot; y=&quot;139.931772&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-4&quot; x=&quot;59.053439&quot; y=&quot;139.931772&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-5&quot; x=&quot;65.304217&quot; y=&quot;139.931772&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-6&quot; x=&quot;70.118034&quot; y=&quot;139.931772&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-7&quot; x=&quot;74.445821&quot; y=&quot;139.931772&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-33&quot; x=&quot;76.850617&quot; y=&quot;139.931772&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-0&quot; x=&quot;79.255412&quot; y=&quot;139.931772&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-26&quot; x=&quot;84.542582&quot; y=&quot;139.931772&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-24&quot; x=&quot;87.424955&quot; y=&quot;139.931772&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-11&quot; x=&quot;92.238773&quot; y=&quot;139.931772&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-10&quot; x=&quot;99.448933&quot; y=&quot;139.931772&quot;/&gt;
&lt;/g&gt;
&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;rgb(100%, 100%, 100%)&quot; fill-opacity=&quot;1&quot; stroke-width=&quot;1&quot; stroke-linecap=&quot;butt&quot; stroke-linejoin=&quot;miter&quot; stroke=&quot;rgb(0%, 0%, 0%)&quot; stroke-opacity=&quot;1&quot; stroke-miterlimit=&quot;4&quot; d=&quot;M 80.002681 160.001713 L 160.001713 160.001713 L 160.001713 180.001471 L 80.002681 180.001471 Z M 80.002681 160.001713 &quot; transform=&quot;matrix(0.721298, 0, 0, 0.721298, 0.360649, 0.360649)&quot;/&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-0-12&quot; x=&quot;69.954616&quot; y=&quot;125.505816&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-13&quot; x=&quot;76.687198&quot; y=&quot;125.505816&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-14&quot; x=&quot;82.460398&quot; y=&quot;125.505816&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-3&quot; x=&quot;88.711176&quot; y=&quot;125.505816&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-15&quot; x=&quot;91.115972&quot; y=&quot;125.505816&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-16&quot; x=&quot;97.366749&quot; y=&quot;125.505816&quot;/&gt;
&lt;/g&gt;
&lt;path fill=&quot;none&quot; stroke-width=&quot;1&quot; stroke-linecap=&quot;butt&quot; stroke-linejoin=&quot;miter&quot; stroke=&quot;rgb(0%, 0%, 0%)&quot; stroke-opacity=&quot;1&quot; stroke-miterlimit=&quot;10&quot; d=&quot;M 120.002197 220.000986 L 120.002197 249.997915 L 100.002439 249.997915 L 100.002439 273.631531 &quot; transform=&quot;matrix(0.721298, 0, 0, 0.721298, 0.360649, 0.360649)&quot;/&gt;
&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot; stroke-width=&quot;1&quot; stroke-linecap=&quot;butt&quot; stroke-linejoin=&quot;miter&quot; stroke=&quot;rgb(0%, 0%, 0%)&quot; stroke-opacity=&quot;1&quot; stroke-miterlimit=&quot;10&quot; d=&quot;M 100.002439 278.879234 L 96.498555 271.882297 L 100.002439 273.631531 L 103.500907 271.882297 Z M 100.002439 278.879234 &quot; transform=&quot;matrix(0.721298, 0, 0, 0.721298, 0.360649, 0.360649)&quot;/&gt;
&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;rgb(100%, 100%, 100%)&quot; fill-opacity=&quot;1&quot; stroke-width=&quot;1&quot; stroke-linecap=&quot;butt&quot; stroke-linejoin=&quot;miter&quot; stroke=&quot;rgb(0%, 0%, 0%)&quot; stroke-opacity=&quot;1&quot; stroke-miterlimit=&quot;4&quot; d=&quot;M 80.002681 200.001228 L 160.001713 200.001228 L 160.001713 220.000986 L 80.002681 220.000986 Z M 80.002681 200.001228 &quot; transform=&quot;matrix(0.721298, 0, 0, 0.721298, 0.360649, 0.360649)&quot;/&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-0-13&quot; x=&quot;64.432179&quot; y=&quot;154.357728&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-17&quot; x=&quot;70.205379&quot; y=&quot;154.357728&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-12&quot; x=&quot;76.456157&quot; y=&quot;154.357728&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-0&quot; x=&quot;83.18874&quot; y=&quot;154.357728&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-2&quot; x=&quot;88.475909&quot; y=&quot;154.357728&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-18&quot; x=&quot;90.880704&quot; y=&quot;154.357728&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-15&quot; x=&quot;96.653904&quot; y=&quot;154.357728&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-8&quot; x=&quot;102.904682&quot; y=&quot;154.357728&quot;/&gt;
&lt;/g&gt;
&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;rgb(100%, 100%, 100%)&quot; fill-opacity=&quot;1&quot; stroke-width=&quot;1&quot; stroke-linecap=&quot;butt&quot; stroke-linejoin=&quot;miter&quot; stroke=&quot;rgb(0%, 0%, 0%)&quot; stroke-opacity=&quot;1&quot; stroke-miterlimit=&quot;4&quot; d=&quot;M 39.99775 280.00026 L 160.001713 280.00026 L 160.001713 339.999534 L 39.99775 339.999534 Z M 39.99775 280.00026 &quot; transform=&quot;matrix(0.721298, 0, 0, 0.721298, 0.360649, 0.360649)&quot;/&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-0-13&quot; x=&quot;50.006224&quot; y=&quot;221.438423&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-17&quot; x=&quot;55.779424&quot; y=&quot;221.438423&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-12&quot; x=&quot;62.030202&quot; y=&quot;221.438423&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-0&quot; x=&quot;68.762784&quot; y=&quot;221.438423&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-2&quot; x=&quot;74.049953&quot; y=&quot;221.438423&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-18&quot; x=&quot;76.454749&quot; y=&quot;221.438423&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-15&quot; x=&quot;82.227949&quot; y=&quot;221.438423&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-8&quot; x=&quot;88.478726&quot; y=&quot;221.438423&quot;/&gt;
&lt;/g&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-0-1&quot; x=&quot;58.898473&quot; y=&quot;232.25789&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-10&quot; x=&quot;65.149251&quot; y=&quot;232.25789&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-19&quot; x=&quot;69.963068&quot; y=&quot;232.25789&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-20&quot; x=&quot;74.290855&quot; y=&quot;232.25789&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-21&quot; x=&quot;76.213846&quot; y=&quot;232.25789&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-10&quot; x=&quot;80.541633&quot; y=&quot;232.25789&quot;/&gt;
&lt;/g&gt;
&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;rgb(100%, 100%, 100%)&quot; fill-opacity=&quot;1&quot; stroke-width=&quot;1&quot; stroke-linecap=&quot;butt&quot; stroke-linejoin=&quot;miter&quot; stroke=&quot;rgb(0%, 0%, 0%)&quot; stroke-opacity=&quot;1&quot; stroke-miterlimit=&quot;4&quot; d=&quot;M 39.99775 39.99775 L 160.001713 39.99775 L 160.001713 100.002439 L 39.99775 100.002439 Z M 39.99775 39.99775 &quot; transform=&quot;matrix(0.721298, 0, 0, 0.721298, 0.360649, 0.360649)&quot;/&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-0-0&quot; x=&quot;40.212352&quot; y=&quot;48.326952&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-1&quot; x=&quot;45.499521&quot; y=&quot;48.326952&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-32&quot; x=&quot;51.750299&quot; y=&quot;48.326952&quot;/&gt;
&lt;/g&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-0-3&quot; x=&quot;56.885319&quot; y=&quot;48.326952&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-24&quot; x=&quot;59.290115&quot; y=&quot;48.326952&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-25&quot; x=&quot;64.103932&quot; y=&quot;48.326952&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-24&quot; x=&quot;70.35471&quot; y=&quot;48.326952&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-26&quot; x=&quot;75.168528&quot; y=&quot;48.326952&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-10&quot; x=&quot;78.050901&quot; y=&quot;48.326952&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-27&quot; x=&quot;82.864719&quot; y=&quot;48.326952&quot;/&gt;
&lt;/g&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-0-12&quot; x=&quot;85.270924&quot; y=&quot;48.326952&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-13&quot; x=&quot;92.003506&quot; y=&quot;48.326952&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-14&quot; x=&quot;97.776706&quot; y=&quot;48.326952&quot;/&gt;
&lt;/g&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-0-15&quot; x=&quot;53.838118&quot; y=&quot;59.146419&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-16&quot; x=&quot;60.088896&quot; y=&quot;59.146419&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-27&quot; x=&quot;65.862096&quot; y=&quot;59.146419&quot;/&gt;
&lt;/g&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-0-14&quot; x=&quot;68.275344&quot; y=&quot;59.146419&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-28&quot; x=&quot;74.526122&quot; y=&quot;59.146419&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-20&quot; x=&quot;76.449113&quot; y=&quot;59.146419&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-10&quot; x=&quot;78.372105&quot; y=&quot;59.146419&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-29&quot; x=&quot;83.185922&quot; y=&quot;59.146419&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-7&quot; x=&quot;87.99974&quot; y=&quot;59.146419&quot;/&gt;
&lt;/g&gt;
&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;rgb(100%, 100%, 100%)&quot; fill-opacity=&quot;1&quot; stroke-width=&quot;1&quot; stroke-linecap=&quot;butt&quot; stroke-linejoin=&quot;miter&quot; stroke=&quot;rgb(0%, 0%, 0%)&quot; stroke-opacity=&quot;1&quot; stroke-miterlimit=&quot;4&quot; d=&quot;M 39.99775 160.001713 L 160.001713 160.001713 L 160.001713 220.000986 L 39.99775 220.000986 Z M 39.99775 160.001713 &quot; transform=&quot;matrix(0.721298, 0, 0, 0.721298, 0.360649, 0.360649)&quot;/&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-0-0&quot; x=&quot;39.975676&quot; y=&quot;139.931772&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-1&quot; x=&quot;45.262845&quot; y=&quot;139.931772&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-32&quot; x=&quot;51.513623&quot; y=&quot;139.931772&quot;/&gt;
&lt;/g&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-0-3&quot; x=&quot;56.648643&quot; y=&quot;139.931772&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-4&quot; x=&quot;59.053439&quot; y=&quot;139.931772&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-5&quot; x=&quot;65.304217&quot; y=&quot;139.931772&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-6&quot; x=&quot;70.118034&quot; y=&quot;139.931772&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-7&quot; x=&quot;74.445821&quot; y=&quot;139.931772&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-33&quot; x=&quot;76.850617&quot; y=&quot;139.931772&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-0&quot; x=&quot;79.255412&quot; y=&quot;139.931772&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-26&quot; x=&quot;84.542582&quot; y=&quot;139.931772&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-24&quot; x=&quot;87.424955&quot; y=&quot;139.931772&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-11&quot; x=&quot;92.238773&quot; y=&quot;139.931772&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-10&quot; x=&quot;99.448933&quot; y=&quot;139.931772&quot;/&gt;
&lt;/g&gt;
&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;rgb(100%, 100%, 100%)&quot; fill-opacity=&quot;1&quot; stroke-width=&quot;1&quot; stroke-linecap=&quot;butt&quot; stroke-linejoin=&quot;miter&quot; stroke=&quot;rgb(0%, 0%, 0%)&quot; stroke-opacity=&quot;1&quot; stroke-miterlimit=&quot;4&quot; d=&quot;M 80.002681 160.001713 L 160.001713 160.001713 L 160.001713 180.001471 L 80.002681 180.001471 Z M 80.002681 160.001713 &quot; transform=&quot;matrix(0.721298, 0, 0, 0.721298, 0.360649, 0.360649)&quot;/&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-0-12&quot; x=&quot;69.954616&quot; y=&quot;125.505816&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-13&quot; x=&quot;76.687198&quot; y=&quot;125.505816&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-14&quot; x=&quot;82.460398&quot; y=&quot;125.505816&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-3&quot; x=&quot;88.711176&quot; y=&quot;125.505816&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-15&quot; x=&quot;91.115972&quot; y=&quot;125.505816&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-16&quot; x=&quot;97.366749&quot; y=&quot;125.505816&quot;/&gt;
&lt;/g&gt;
&lt;path fill=&quot;none&quot; stroke-width=&quot;1&quot; stroke-linecap=&quot;butt&quot; stroke-linejoin=&quot;miter&quot; stroke=&quot;rgb(0%, 0%, 0%)&quot; stroke-opacity=&quot;1&quot; stroke-miterlimit=&quot;10&quot; d=&quot;M 120.002197 220.000986 L 120.002197 249.997915 L 100.002439 249.997915 L 100.002439 273.631531 &quot; transform=&quot;matrix(0.721298, 0, 0, 0.721298, 0.360649, 0.360649)&quot;/&gt;
&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot; stroke-width=&quot;1&quot; stroke-linecap=&quot;butt&quot; stroke-linejoin=&quot;miter&quot; stroke=&quot;rgb(0%, 0%, 0%)&quot; stroke-opacity=&quot;1&quot; stroke-miterlimit=&quot;10&quot; d=&quot;M 100.002439 278.879234 L 96.498555 271.882297 L 100.002439 273.631531 L 103.500907 271.882297 Z M 100.002439 278.879234 &quot; transform=&quot;matrix(0.721298, 0, 0, 0.721298, 0.360649, 0.360649)&quot;/&gt;
&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;rgb(100%, 100%, 100%)&quot; fill-opacity=&quot;1&quot; stroke-width=&quot;1&quot; stroke-linecap=&quot;butt&quot; stroke-linejoin=&quot;miter&quot; stroke=&quot;rgb(0%, 0%, 0%)&quot; stroke-opacity=&quot;1&quot; stroke-miterlimit=&quot;4&quot; d=&quot;M 80.002681 200.001228 L 160.001713 200.001228 L 160.001713 220.000986 L 80.002681 220.000986 Z M 80.002681 200.001228 &quot; transform=&quot;matrix(0.721298, 0, 0, 0.721298, 0.360649, 0.360649)&quot;/&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-0-13&quot; x=&quot;64.432179&quot; y=&quot;154.357728&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-17&quot; x=&quot;70.205379&quot; y=&quot;154.357728&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-12&quot; x=&quot;76.456157&quot; y=&quot;154.357728&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-0&quot; x=&quot;83.18874&quot; y=&quot;154.357728&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-2&quot; x=&quot;88.475909&quot; y=&quot;154.357728&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-18&quot; x=&quot;90.880704&quot; y=&quot;154.357728&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-15&quot; x=&quot;96.653904&quot; y=&quot;154.357728&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-8&quot; x=&quot;102.904682&quot; y=&quot;154.357728&quot;/&gt;
&lt;/g&gt;
&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;rgb(85.488892%, 90.979004%, 98.81897%)&quot; fill-opacity=&quot;1&quot; stroke-width=&quot;1&quot; stroke-linecap=&quot;butt&quot; stroke-linejoin=&quot;miter&quot; stroke=&quot;rgb(42.349243%, 55.688477%, 74.899292%)&quot; stroke-opacity=&quot;1&quot; stroke-miterlimit=&quot;4&quot; d=&quot;M 39.99775 280.00026 L 160.001713 280.00026 L 160.001713 339.999534 L 39.99775 339.999534 Z M 39.99775 280.00026 &quot; transform=&quot;matrix(0.721298, 0, 0, 0.721298, 0.360649, 0.360649)&quot;/&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-0-13&quot; x=&quot;50.006224&quot; y=&quot;221.438423&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-17&quot; x=&quot;55.779424&quot; y=&quot;221.438423&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-12&quot; x=&quot;62.030202&quot; y=&quot;221.438423&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-0&quot; x=&quot;68.762784&quot; y=&quot;221.438423&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-2&quot; x=&quot;74.049953&quot; y=&quot;221.438423&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-18&quot; x=&quot;76.454749&quot; y=&quot;221.438423&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-15&quot; x=&quot;82.227949&quot; y=&quot;221.438423&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-8&quot; x=&quot;88.478726&quot; y=&quot;221.438423&quot;/&gt;
&lt;/g&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-0-1&quot; x=&quot;58.898473&quot; y=&quot;232.25789&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-10&quot; x=&quot;65.149251&quot; y=&quot;232.25789&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-19&quot; x=&quot;69.963068&quot; y=&quot;232.25789&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-20&quot; x=&quot;74.290855&quot; y=&quot;232.25789&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-21&quot; x=&quot;76.213846&quot; y=&quot;232.25789&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-10&quot; x=&quot;80.541633&quot; y=&quot;232.25789&quot;/&gt;
&lt;/g&gt;
&lt;path fill=&quot;none&quot; stroke-width=&quot;1&quot; stroke-linecap=&quot;butt&quot; stroke-linejoin=&quot;miter&quot; stroke=&quot;rgb(0%, 0%, 0%)&quot; stroke-opacity=&quot;1&quot; stroke-miterlimit=&quot;10&quot; d=&quot;M 100.002439 100.002439 L 100.002439 120.002197 L 120.002197 120.002197 L 120.002197 133.62781 &quot; transform=&quot;matrix(0.721298, 0, 0, 0.721298, 0.360649, 0.360649)&quot;/&gt;
&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot; stroke-width=&quot;1&quot; stroke-linecap=&quot;butt&quot; stroke-linejoin=&quot;miter&quot; stroke=&quot;rgb(0%, 0%, 0%)&quot; stroke-opacity=&quot;1&quot; stroke-miterlimit=&quot;10&quot; d=&quot;M 120.002197 138.880929 L 116.498313 131.878576 L 120.002197 133.62781 L 123.500665 131.878576 Z M 120.002197 138.880929 &quot; transform=&quot;matrix(0.721298, 0, 0, 0.721298, 0.360649, 0.360649)&quot;/&gt;
&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;rgb(83.529663%, 90.979004%, 83.139038%)&quot; fill-opacity=&quot;1&quot; stroke-width=&quot;1&quot; stroke-linecap=&quot;butt&quot; stroke-linejoin=&quot;miter&quot; stroke=&quot;rgb(50.979614%, 70.199585%, 39.99939%)&quot; stroke-opacity=&quot;1&quot; stroke-miterlimit=&quot;4&quot; d=&quot;M 39.99775 39.99775 L 160.001713 39.99775 L 160.001713 100.002439 L 39.99775 100.002439 Z M 39.99775 39.99775 &quot; transform=&quot;matrix(0.721298, 0, 0, 0.721298, 0.360649, 0.360649)&quot;/&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-0-13&quot; x=&quot;33.720672&quot; y=&quot;48.326952&quot;/&gt;
&lt;/g&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-0-16&quot; x=&quot;38.855692&quot; y=&quot;48.326952&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-22&quot; x=&quot;44.628892&quot; y=&quot;48.326952&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-1&quot; x=&quot;47.511266&quot; y=&quot;48.326952&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-2&quot; x=&quot;53.762044&quot; y=&quot;48.326952&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-23&quot; x=&quot;56.166839&quot; y=&quot;48.326952&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-3&quot; x=&quot;63.377&quot; y=&quot;48.326952&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-24&quot; x=&quot;65.781795&quot; y=&quot;48.326952&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-25&quot; x=&quot;70.595613&quot; y=&quot;48.326952&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-24&quot; x=&quot;76.846391&quot; y=&quot;48.326952&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-26&quot; x=&quot;81.660208&quot; y=&quot;48.326952&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-10&quot; x=&quot;84.542582&quot; y=&quot;48.326952&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-27&quot; x=&quot;89.356399&quot; y=&quot;48.326952&quot;/&gt;
&lt;/g&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-0-12&quot; x=&quot;91.762604&quot; y=&quot;48.326952&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-13&quot; x=&quot;98.495186&quot; y=&quot;48.326952&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-14&quot; x=&quot;104.268386&quot; y=&quot;48.326952&quot;/&gt;
&lt;/g&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-0-15&quot; x=&quot;53.838118&quot; y=&quot;59.146419&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-16&quot; x=&quot;60.088896&quot; y=&quot;59.146419&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-27&quot; x=&quot;65.862096&quot; y=&quot;59.146419&quot;/&gt;
&lt;/g&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-0-14&quot; x=&quot;68.275344&quot; y=&quot;59.146419&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-28&quot; x=&quot;74.526122&quot; y=&quot;59.146419&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-20&quot; x=&quot;76.449113&quot; y=&quot;59.146419&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-10&quot; x=&quot;78.372105&quot; y=&quot;59.146419&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-29&quot; x=&quot;83.185922&quot; y=&quot;59.146419&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-7&quot; x=&quot;87.99974&quot; y=&quot;59.146419&quot;/&gt;
&lt;/g&gt;
&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;rgb(97.24884%, 80.778503%, 79.998779%)&quot; fill-opacity=&quot;1&quot; d=&quot;M 58.066406 101.34375 L 115.769531 101.34375 L 115.769531 115.769531 L 58.066406 115.769531 Z M 58.066406 101.34375 &quot;/&gt;
&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;rgb(72.158813%, 32.939148%, 31.369019%)&quot; fill-opacity=&quot;1&quot; d=&quot;M 62.390625 100.980469 L 64.554688 100.980469 L 64.554688 101.703125 L 62.390625 101.703125 Z M 66.71875 100.980469 L 68.882812 100.980469 L 68.882812 101.703125 L 66.71875 101.703125 Z M 71.046875 100.980469 L 73.210938 100.980469 L 73.210938 101.703125 L 71.046875 101.703125 Z M 75.375 100.980469 L 77.539062 100.980469 L 77.539062 101.703125 L 75.375 101.703125 Z M 79.703125 100.980469 L 81.867188 100.980469 L 81.867188 101.703125 L 79.703125 101.703125 Z M 84.03125 100.980469 L 86.195312 100.980469 L 86.195312 101.703125 L 84.03125 101.703125 Z M 88.359375 100.980469 L 90.523438 100.980469 L 90.523438 101.703125 L 88.359375 101.703125 Z M 92.6875 100.980469 L 94.851562 100.980469 L 94.851562 101.703125 L 92.6875 101.703125 Z M 97.015625 100.980469 L 99.179688 100.980469 L 99.179688 101.703125 L 97.015625 101.703125 Z M 101.34375 100.980469 L 103.507812 100.980469 L 103.507812 101.703125 L 101.34375 101.703125 Z M 105.671875 100.980469 L 107.835938 100.980469 L 107.835938 101.703125 L 105.671875 101.703125 Z M 109.996094 100.980469 L 112.160156 100.980469 L 112.160156 101.703125 L 109.996094 101.703125 Z M 114.324219 100.980469 L 116.128906 100.980469 L 116.128906 102.0625 L 115.40625 102.0625 L 115.40625 101.34375 L 115.769531 101.34375 L 115.769531 101.703125 L 114.324219 101.703125 Z M 116.128906 104.226562 L 116.128906 106.390625 L 115.40625 106.390625 L 115.40625 104.226562 Z M 116.128906 108.554688 L 116.128906 110.71875 L 115.40625 110.71875 L 115.40625 108.554688 Z M 116.128906 112.882812 L 116.128906 115.046875 L 115.40625 115.046875 L 115.40625 112.882812 Z M 114.324219 116.128906 L 112.160156 116.128906 L 112.160156 115.40625 L 114.324219 115.40625 Z M 109.996094 116.128906 L 107.835938 116.128906 L 107.835938 115.40625 L 109.996094 115.40625 Z M 105.671875 116.128906 L 103.507812 116.128906 L 103.507812 115.40625 L 105.671875 115.40625 Z M 101.34375 116.128906 L 99.179688 116.128906 L 99.179688 115.40625 L 101.34375 115.40625 Z M 97.015625 116.128906 L 94.851562 116.128906 L 94.851562 115.40625 L 97.015625 115.40625 Z M 92.6875 116.128906 L 90.523438 116.128906 L 90.523438 115.40625 L 92.6875 115.40625 Z M 88.359375 116.128906 L 86.195312 116.128906 L 86.195312 115.40625 L 88.359375 115.40625 Z M 84.03125 116.128906 L 81.867188 116.128906 L 81.867188 115.40625 L 84.03125 115.40625 Z M 79.703125 116.128906 L 77.539062 116.128906 L 77.539062 115.40625 L 79.703125 115.40625 Z M 75.375 116.128906 L 73.210938 116.128906 L 73.210938 115.40625 L 75.375 115.40625 Z M 71.046875 116.128906 L 68.882812 116.128906 L 68.882812 115.40625 L 71.046875 115.40625 Z M 66.71875 116.128906 L 64.554688 116.128906 L 64.554688 115.40625 L 66.71875 115.40625 Z M 62.390625 116.128906 L 60.226562 116.128906 L 60.226562 115.40625 L 62.390625 115.40625 Z M 57.703125 115.769531 L 57.703125 113.605469 L 58.425781 113.605469 L 58.425781 115.769531 Z M 57.703125 111.441406 L 57.703125 109.277344 L 58.425781 109.277344 L 58.425781 111.441406 Z M 57.703125 107.113281 L 57.703125 104.949219 L 58.425781 104.949219 L 58.425781 107.113281 Z M 57.703125 102.785156 L 57.703125 100.980469 L 60.226562 100.980469 L 60.226562 101.703125 L 58.066406 101.703125 L 58.066406 101.34375 L 58.425781 101.34375 L 58.425781 102.785156 Z M 57.703125 102.785156 &quot;/&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-0-13&quot; x=&quot;71.724049&quot; y=&quot;111.07986&quot;/&gt;
&lt;/g&gt;
&lt;g fill=&quot;rgb(0%, 0%, 0%)&quot; fill-opacity=&quot;1&quot;&gt;
&lt;use xlink:href=&quot;#glyph-0-16&quot; x=&quot;76.85907&quot; y=&quot;111.07986&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-22&quot; x=&quot;82.63227&quot; y=&quot;111.07986&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-1&quot; x=&quot;85.514643&quot; y=&quot;111.07986&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-2&quot; x=&quot;91.765421&quot; y=&quot;111.07986&quot;/&gt;
&lt;use xlink:href=&quot;#glyph-0-23&quot; x=&quot;94.170217&quot; y=&quot;111.07986&quot;/&gt;
&lt;/g&gt;
&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;rgb(37.649536%, 66.268921%, 9.01947%)&quot; fill-opacity=&quot;1&quot; stroke-width=&quot;1&quot; stroke-linecap=&quot;butt&quot; stroke-linejoin=&quot;miter&quot; stroke=&quot;rgb(17.649841%, 46.269226%, 0%)&quot; stroke-opacity=&quot;1&quot; stroke-miterlimit=&quot;10&quot; d=&quot;M 319.999776 179.849834 L 361.309863 179.849834 L 361.309863 172.500884 L 379.999049 189.998642 L 361.309863 207.501815 L 361.309863 200.147449 L 319.999776 200.147449 L 328.518492 189.998642 Z M 319.999776 179.849834 &quot; transform=&quot;matrix(0.721298, 0, 0, 0.721298, 0.360649, 0.360649)&quot;/&gt;
&lt;/svg&gt;
&lt;/div&gt;
&lt;/p&gt;
&lt;/div&gt;

&lt;p&gt;
理顺了工业总线以及工业总线集成技术的发展之后，我们再来看看 PA-DIM 和各个标准及组织之间的关系。
&lt;/p&gt;


&lt;div id=&quot;orga20f7d4&quot; class=&quot;figure&quot;&gt;
&lt;p&gt;&lt;div align=&quot;center&quot;&gt;&lt;?xml version=&quot;1.0&quot; encoding=&quot;us-ascii&quot; standalone=&quot;no&quot;?&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; xmlns:xlink=&quot;http://www.w3.org/1999/xlink&quot; contentStyleType=&quot;text/css&quot; height=&quot;306px&quot; preserveAspectRatio=&quot;none&quot; style=&quot;width:450px;height:306px;background:#FFFFFF;&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 450 306&quot; width=&quot;450px&quot; zoomAndPan=&quot;magnify&quot;&gt;&lt;defs/&gt;&lt;g&gt;&lt;!--entity NOA--&gt;&lt;g id=&quot;elem_NOA&quot;&gt;&lt;rect fill=&quot;#F1F1F1&quot; height=&quot;46.4883&quot; rx=&quot;2.5&quot; ry=&quot;2.5&quot; style=&quot;stroke:#181818;stroke-width:0.5;&quot; width=&quot;71&quot; x=&quot;7&quot; y=&quot;130.48&quot;/&gt;&lt;rect fill=&quot;#F1F1F1&quot; height=&quot;10&quot; style=&quot;stroke:#181818;stroke-width:0.5;&quot; width=&quot;15&quot; x=&quot;58&quot; y=&quot;135.48&quot;/&gt;&lt;rect fill=&quot;#F1F1F1&quot; height=&quot;2&quot; style=&quot;stroke:#181818;stroke-width:0.5;&quot; width=&quot;4&quot; x=&quot;56&quot; y=&quot;137.48&quot;/&gt;&lt;rect fill=&quot;#F1F1F1&quot; height=&quot;2&quot; style=&quot;stroke:#181818;stroke-width:0.5;&quot; width=&quot;4&quot; x=&quot;56&quot; y=&quot;141.48&quot;/&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;14&quot; lengthAdjust=&quot;spacing&quot; textLength=&quot;31&quot; x=&quot;22&quot; y=&quot;164.0152&quot;&gt;NOA&lt;/text&gt;&lt;/g&gt;&lt;!--entity PA-DIM--&gt;&lt;g id=&quot;elem_PA-DIM&quot;&gt;&lt;rect fill=&quot;#F1F1F1&quot; height=&quot;46.4883&quot; rx=&quot;2.5&quot; ry=&quot;2.5&quot; style=&quot;stroke:#181818;stroke-width:0.5;&quot; width=&quot;92&quot; x=&quot;140.5&quot; y=&quot;130.48&quot;/&gt;&lt;rect fill=&quot;#F1F1F1&quot; height=&quot;10&quot; style=&quot;stroke:#181818;stroke-width:0.5;&quot; width=&quot;15&quot; x=&quot;212.5&quot; y=&quot;135.48&quot;/&gt;&lt;rect fill=&quot;#F1F1F1&quot; height=&quot;2&quot; style=&quot;stroke:#181818;stroke-width:0.5;&quot; width=&quot;4&quot; x=&quot;210.5&quot; y=&quot;137.48&quot;/&gt;&lt;rect fill=&quot;#F1F1F1&quot; height=&quot;2&quot; style=&quot;stroke:#181818;stroke-width:0.5;&quot; width=&quot;4&quot; x=&quot;210.5&quot; y=&quot;141.48&quot;/&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;14&quot; lengthAdjust=&quot;spacing&quot; textLength=&quot;52&quot; x=&quot;155.5&quot; y=&quot;164.0152&quot;&gt;PA-DIM&lt;/text&gt;&lt;/g&gt;&lt;!--entity O-PAS--&gt;&lt;g id=&quot;elem_O-PAS&quot;&gt;&lt;rect fill=&quot;#F1F1F1&quot; height=&quot;46.4883&quot; rx=&quot;2.5&quot; ry=&quot;2.5&quot; style=&quot;stroke:#181818;stroke-width:0.5;&quot; width=&quot;85&quot; x=&quot;81&quot; y=&quot;7&quot;/&gt;&lt;rect fill=&quot;#F1F1F1&quot; height=&quot;10&quot; style=&quot;stroke:#181818;stroke-width:0.5;&quot; width=&quot;15&quot; x=&quot;146&quot; y=&quot;12&quot;/&gt;&lt;rect fill=&quot;#F1F1F1&quot; height=&quot;2&quot; style=&quot;stroke:#181818;stroke-width:0.5;&quot; width=&quot;4&quot; x=&quot;144&quot; y=&quot;14&quot;/&gt;&lt;rect fill=&quot;#F1F1F1&quot; height=&quot;2&quot; style=&quot;stroke:#181818;stroke-width:0.5;&quot; width=&quot;4&quot; x=&quot;144&quot; y=&quot;18&quot;/&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;14&quot; lengthAdjust=&quot;spacing&quot; textLength=&quot;45&quot; x=&quot;96&quot; y=&quot;40.5352&quot;&gt;O-PAS&lt;/text&gt;&lt;/g&gt;&lt;!--entity FDT/FDI--&gt;&lt;g id=&quot;elem_FDT/FDI&quot;&gt;&lt;rect fill=&quot;#F1F1F1&quot; height=&quot;46.4883&quot; rx=&quot;2.5&quot; ry=&quot;2.5&quot; style=&quot;stroke:#181818;stroke-width:0.5;&quot; width=&quot;96&quot; x=&quot;201.5&quot; y=&quot;7&quot;/&gt;&lt;rect fill=&quot;#F1F1F1&quot; height=&quot;10&quot; style=&quot;stroke:#181818;stroke-width:0.5;&quot; width=&quot;15&quot; x=&quot;277.5&quot; y=&quot;12&quot;/&gt;&lt;rect fill=&quot;#F1F1F1&quot; height=&quot;2&quot; style=&quot;stroke:#181818;stroke-width:0.5;&quot; width=&quot;4&quot; x=&quot;275.5&quot; y=&quot;14&quot;/&gt;&lt;rect fill=&quot;#F1F1F1&quot; height=&quot;2&quot; style=&quot;stroke:#181818;stroke-width:0.5;&quot; width=&quot;4&quot; x=&quot;275.5&quot; y=&quot;18&quot;/&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;14&quot; lengthAdjust=&quot;spacing&quot; textLength=&quot;56&quot; x=&quot;216.5&quot; y=&quot;40.5352&quot;&gt;FDT/FDI&lt;/text&gt;&lt;/g&gt;&lt;!--entity APL--&gt;&lt;g id=&quot;elem_APL&quot;&gt;&lt;rect fill=&quot;#F1F1F1&quot; height=&quot;46.4883&quot; rx=&quot;2.5&quot; ry=&quot;2.5&quot; style=&quot;stroke:#181818;stroke-width:0.5;&quot; width=&quot;65&quot; x=&quot;379&quot; y=&quot;130.48&quot;/&gt;&lt;rect fill=&quot;#F1F1F1&quot; height=&quot;10&quot; style=&quot;stroke:#181818;stroke-width:0.5;&quot; width=&quot;15&quot; x=&quot;424&quot; y=&quot;135.48&quot;/&gt;&lt;rect fill=&quot;#F1F1F1&quot; height=&quot;2&quot; style=&quot;stroke:#181818;stroke-width:0.5;&quot; width=&quot;4&quot; x=&quot;422&quot; y=&quot;137.48&quot;/&gt;&lt;rect fill=&quot;#F1F1F1&quot; height=&quot;2&quot; style=&quot;stroke:#181818;stroke-width:0.5;&quot; width=&quot;4&quot; x=&quot;422&quot; y=&quot;141.48&quot;/&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;14&quot; lengthAdjust=&quot;spacing&quot; textLength=&quot;25&quot; x=&quot;394&quot; y=&quot;164.0152&quot;&gt;APL&lt;/text&gt;&lt;/g&gt;&lt;!--entity OPC UA--&gt;&lt;g id=&quot;elem_OPC UA&quot;&gt;&lt;rect fill=&quot;#F1F1F1&quot; height=&quot;46.4883&quot; rx=&quot;2.5&quot; ry=&quot;2.5&quot; style=&quot;stroke:#181818;stroke-width:0.5;&quot; width=&quot;93&quot; x=&quot;81&quot; y=&quot;253.97&quot;/&gt;&lt;rect fill=&quot;#F1F1F1&quot; height=&quot;10&quot; style=&quot;stroke:#181818;stroke-width:0.5;&quot; width=&quot;15&quot; x=&quot;154&quot; y=&quot;258.97&quot;/&gt;&lt;rect fill=&quot;#F1F1F1&quot; height=&quot;2&quot; style=&quot;stroke:#181818;stroke-width:0.5;&quot; width=&quot;4&quot; x=&quot;152&quot; y=&quot;260.97&quot;/&gt;&lt;rect fill=&quot;#F1F1F1&quot; height=&quot;2&quot; style=&quot;stroke:#181818;stroke-width:0.5;&quot; width=&quot;4&quot; x=&quot;152&quot; y=&quot;264.97&quot;/&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;14&quot; lengthAdjust=&quot;spacing&quot; textLength=&quot;53&quot; x=&quot;96&quot; y=&quot;287.5052&quot;&gt;OPC UA&lt;/text&gt;&lt;/g&gt;&lt;!--entity CDD--&gt;&lt;g id=&quot;elem_CDD&quot;&gt;&lt;rect fill=&quot;#F1F1F1&quot; height=&quot;46.4883&quot; rx=&quot;2.5&quot; ry=&quot;2.5&quot; style=&quot;stroke:#181818;stroke-width:0.5;&quot; width=&quot;70&quot; x=&quot;209.5&quot; y=&quot;253.97&quot;/&gt;&lt;rect fill=&quot;#F1F1F1&quot; height=&quot;10&quot; style=&quot;stroke:#181818;stroke-width:0.5;&quot; width=&quot;15&quot; x=&quot;259.5&quot; y=&quot;258.97&quot;/&gt;&lt;rect fill=&quot;#F1F1F1&quot; height=&quot;2&quot; style=&quot;stroke:#181818;stroke-width:0.5;&quot; width=&quot;4&quot; x=&quot;257.5&quot; y=&quot;260.97&quot;/&gt;&lt;rect fill=&quot;#F1F1F1&quot; height=&quot;2&quot; style=&quot;stroke:#181818;stroke-width:0.5;&quot; width=&quot;4&quot; x=&quot;257.5&quot; y=&quot;264.97&quot;/&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;14&quot; lengthAdjust=&quot;spacing&quot; textLength=&quot;30&quot; x=&quot;224.5&quot; y=&quot;287.5052&quot;&gt;CDD&lt;/text&gt;&lt;/g&gt;&lt;!--link NOA to PA-DIM--&gt;&lt;g id=&quot;link_NOA_PA-DIM&quot;&gt;&lt;path d=&quot;M78.47,153.73 C97.13,153.73 114.14,153.73 134.12,153.73 &quot; fill=&quot;none&quot; id=&quot;NOA-to-PA-DIM&quot; style=&quot;stroke:#181818;stroke-width:1.0;&quot;/&gt;&lt;polygon fill=&quot;#181818&quot; points=&quot;140.12,153.73,131.12,149.73,135.12,153.73,131.12,157.73,140.12,153.73&quot; style=&quot;stroke:#181818;stroke-width:1.0;&quot;/&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;13&quot; lengthAdjust=&quot;spacing&quot; textLength=&quot;26&quot; x=&quot;96.25&quot; y=&quot;147.2984&quot;&gt;&amp;#20351;&amp;#29992;&lt;/text&gt;&lt;/g&gt;&lt;!--link O-PAS to PA-DIM--&gt;&lt;g id=&quot;link_O-PAS_PA-DIM&quot;&gt;&lt;path d=&quot;M135.2,53.81 C146.52,75.63 160.8087,103.1731 172.0987,124.9531 &quot; fill=&quot;none&quot; id=&quot;O-PAS-to-PA-DIM&quot; style=&quot;stroke:#181818;stroke-width:1.0;&quot;/&gt;&lt;polygon fill=&quot;#181818&quot; points=&quot;174.86,130.28,174.2693,120.4489,172.5589,125.8409,167.1669,124.1305,174.86,130.28&quot; style=&quot;stroke:#181818;stroke-width:1.0;&quot;/&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;13&quot; lengthAdjust=&quot;spacing&quot; textLength=&quot;26&quot; x=&quot;160.5&quot; y=&quot;97.0484&quot;&gt;&amp;#20351;&amp;#29992;&lt;/text&gt;&lt;/g&gt;&lt;!--link FDT/FDI to PA-DIM--&gt;&lt;g id=&quot;link_FDT/FDI_PA-DIM&quot;&gt;&lt;path d=&quot;M237.8,53.81 C226.48,75.63 212.1913,103.1731 200.9013,124.9531 &quot; fill=&quot;none&quot; id=&quot;FDT/FDI-to-PA-DIM&quot; style=&quot;stroke:#181818;stroke-width:1.0;&quot;/&gt;&lt;polygon fill=&quot;#181818&quot; points=&quot;198.14,130.28,205.8331,124.1305,200.4411,125.8409,198.7307,120.4489,198.14,130.28&quot; style=&quot;stroke:#181818;stroke-width:1.0;&quot;/&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;13&quot; lengthAdjust=&quot;spacing&quot; textLength=&quot;26&quot; x=&quot;222.5&quot; y=&quot;97.0484&quot;&gt;&amp;#20351;&amp;#29992;&lt;/text&gt;&lt;/g&gt;&lt;!--link PA-DIM to APL--&gt;&lt;g id=&quot;link_PA-DIM_APL&quot;&gt;&lt;path d=&quot;M232.85,153.73 C276.33,153.73 334.26,153.73 372.69,153.73 &quot; fill=&quot;none&quot; id=&quot;PA-DIM-to-APL&quot; style=&quot;stroke:#181818;stroke-width:1.0;&quot;/&gt;&lt;polygon fill=&quot;#181818&quot; points=&quot;378.69,153.73,369.69,149.73,373.69,153.73,369.69,157.73,378.69,153.73&quot; style=&quot;stroke:#181818;stroke-width:1.0;&quot;/&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;13&quot; lengthAdjust=&quot;spacing&quot; textLength=&quot;110&quot; x=&quot;250.75&quot; y=&quot;147.2984&quot;&gt;&amp;#22522;&amp;#20110; IP &amp;#30340;&amp;#35774;&amp;#22791;&amp;#20351;&amp;#29992;&lt;/text&gt;&lt;/g&gt;&lt;!--link PA-DIM to OPC UA--&gt;&lt;g id=&quot;link_PA-DIM_OPC UA&quot;&gt;&lt;path d=&quot;M175.54,177.29 C164.94,199.12 151.6017,226.5931 141.0217,248.3731 &quot; fill=&quot;none&quot; id=&quot;PA-DIM-to-OPC UA&quot; style=&quot;stroke:#181818;stroke-width:1.0;&quot;/&gt;&lt;polygon fill=&quot;#181818&quot; points=&quot;138.4,253.77,145.9304,247.4224,140.5847,249.2726,138.7345,243.9268,138.4,253.77&quot; style=&quot;stroke:#181818;stroke-width:1.0;&quot;/&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;13&quot; lengthAdjust=&quot;spacing&quot; textLength=&quot;26&quot; x=&quot;162.5&quot; y=&quot;220.5384&quot;&gt;&amp;#20351;&amp;#29992;&lt;/text&gt;&lt;/g&gt;&lt;!--link PA-DIM to CDD--&gt;&lt;g id=&quot;link_PA-DIM_CDD&quot;&gt;&lt;path d=&quot;M197.27,177.29 C207.69,199.12 220.8066,226.5746 231.1966,248.3546 &quot; fill=&quot;none&quot; id=&quot;PA-DIM-to-CDD&quot; style=&quot;stroke:#181818;stroke-width:1.0;&quot;/&gt;&lt;polygon fill=&quot;#181818&quot; points=&quot;233.78,253.77,233.5152,243.9247,231.6272,249.2572,226.2947,247.3692,233.78,253.77&quot; style=&quot;stroke:#181818;stroke-width:1.0;&quot;/&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;13&quot; lengthAdjust=&quot;spacing&quot; textLength=&quot;26&quot; x=&quot;219.5&quot; y=&quot;220.5384&quot;&gt;&amp;#20351;&amp;#29992;&lt;/text&gt;&lt;/g&gt;&lt;!--SRC=[Y_RpTunLqBLJY0vmr7Nnz8rLi59uidV_yoahkABzTGCSWu6Is6NTN4BqtLmySSh3H42oZW4-8AcdytSzsTMdu1cWy7nMoujr-vukQSTG3LBk7-2i4Eg8rJ2GjBEB2q8E0000]--&gt;&lt;/g&gt;&lt;/svg&gt;&lt;/div&gt;
&lt;/p&gt;
&lt;/div&gt;

&lt;p&gt;
前面提到， PA-DIM 定义了过程设备数据的访问的标准方式，那么 PA-DIM 与其他工业标准有什么关系呢？如图 &lt;a href=&quot;#orga20f7d4&quot;&gt;2&lt;/a&gt; 所示：
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;NAMUR 开放架构（NAMUR Open Architecture, NOA, NE175）以 PA-DIM 为参考信息模型&lt;/li&gt;
&lt;li&gt;&amp;ldquo;开放流程自动化论坛”（Open Process Automation Forum， OPAF ）开放过程自动化系统正在和 FCG 合作，计划将PA-DIM 纳入 O-PAS 标准（Open
Process Automation Standard）。&lt;/li&gt;
&lt;li&gt;FDT/FDI 利用 PA-DIM 扩展 FDT 应用框架和FDI Host系统&lt;/li&gt;
&lt;li&gt;PA-DIM 基于OPC UA通信协议和一些现成信息模型
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;OPC UA part 100 设备信息模型(&lt;a href=&quot;#citeproc_bib_item_2&quot;&gt;OPC Foundation 2022&lt;/a&gt;)是 PA-DIM 设备模型的基础&lt;/li&gt;
&lt;li&gt;OPC UA part 8 数据访问模型(&lt;a href=&quot;#citeproc_bib_item_1&quot;&gt;OPC Foundation 2021&lt;/a&gt;)是 PA-DIM 设备信号数据的基础&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;通过FLC/OPC UA FX现场层通信倡议，设备的 PA-DIM 数据可以直接通过
Ethernet-APL 网络访问&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
PA-DIM 的开发计划：
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;第一步，主要目的是要保持现有的DCS/PLC和现有的现场通信技术。通过边缘网关把现场设备的数据映射到基于OPC UA的 PA-DIM 信息模型。提供 IT
层应用的访问通路，同时又保持 OT 层的独立运行。&lt;/li&gt;
&lt;li&gt;第二，通过 APL 和 IP 协议把 PA-DIM 引入到现场侧的部分设备中。此时，系统有两个通道，一个是，基于传统模拟信号或现场总线的通信信道。另一个是，基于 OPC-UA 和 PA-DIM 的现场设备将可以直接与边缘网关甚至上层系统建立通信。&lt;/li&gt;
&lt;li&gt;第三阶段，实现全面的 APL 以及实现单一的通信协议。即不管是用于生产控制、亦或是用于诊断/运维，都是用统一的OPC UA和统一的 APL 物理层，实现无缝的信息流。只通过特定的网关兼容传统的现场设备。&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;
最后，总接一下。
&lt;/p&gt;

&lt;p&gt;
PA-DIM 描述过程自动化设备
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;统一的信息模型&lt;/li&gt;
&lt;li&gt;标准的语义定义&lt;/li&gt;
&lt;li&gt;协议和供应商中立的数据交换机制&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
PA-DIM 有广泛的支持：
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;标准组织和制造商的认可且支持：FCG, PI, FDT, ISA100, VDMA &amp;#x2026;&lt;/li&gt;
&lt;li&gt;用户协会也推荐：NAMUR NOA, OPCF O-PAS&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
总之，基于 APL 物理层，基于OPC UA标准通信架构，基于 PA-DIM 的行业信息模型，就可以填补一部分过程自动化领域IT/OT的鸿沟，实现自底向上、和自上而下的数据连通：
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;不管来自哪家设备厂商的设备，都可以通过统一的方式访问设备数据&lt;/li&gt;
&lt;li&gt;设备的数据以结构化的、层次化的方式展现&lt;/li&gt;
&lt;li&gt;统一的数据访问机制和数据结构，各种工具、各种设备可以互相访问&lt;/li&gt;
&lt;/ul&gt;

&lt;style&gt;.csl-entry{text-indent: -1.5em; margin-left: 1.5em;}&lt;/style&gt;&lt;div class=&quot;csl-bib-body&quot;&gt;
  &lt;div class=&quot;csl-entry&quot;&gt;&lt;a id=&quot;citeproc_bib_item_1&quot;&gt;&lt;/a&gt;OPC Foundation. 2021. &lt;i&gt;OPC Unified Architecture Specification Part 8: Data Access&lt;/i&gt;.&lt;/div&gt;
  &lt;div class=&quot;csl-entry&quot;&gt;&lt;a id=&quot;citeproc_bib_item_2&quot;&gt;&lt;/a&gt;———. 2022. &lt;i&gt;OPC Unified Architecture Field eXchange (UAFX) Part 100: Devices&lt;/i&gt;.&lt;/div&gt;
&lt;/div&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines E.13 对象的直接保管者不可抛出异常</title>
   <link href="http://kimi.im/2023-08-02-cppcoreguidelines-e13"/>
   <updated>2023-08-02T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-e13</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;Never throw while being the direct owner of an object&amp;rdquo;
&lt;/p&gt;

&lt;p&gt;
理由
&lt;/p&gt;

&lt;p&gt;
会导致内存泄漏。
&lt;/p&gt;

&lt;p&gt;
例子
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;leak&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;x&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;don&apos;t: might leak&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;auto&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;p&lt;/span&gt; = &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;7&lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;x &amp;lt; 0&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;throw&lt;/span&gt; Get_me_out_of_here&lt;span style=&quot;color: #7388d6;&quot;&gt;{}&lt;/span&gt;;  &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;might leak *p&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;...&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;delete&lt;/span&gt; p;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;we might never get here&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
这里避免内存泄漏的一个方法是利用资源句柄一致性地处理资源：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;no_leak&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;x&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;auto&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;p&lt;/span&gt; = make_unique&lt;span style=&quot;color: #7388d6;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;&amp;gt;(&lt;/span&gt;7&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;x &amp;lt; 0&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;throw&lt;/span&gt; Get_me_out_of_here&lt;span style=&quot;color: #7388d6;&quot;&gt;{}&lt;/span&gt;;  &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;will delete *p if necessary&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;...&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;no need for delete p&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
其他更好的解决方案是使用局部变量，从而避免指针的使用：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;no_leak_simplified&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;x&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;vector&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;v&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;7&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;...&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
注意
&lt;/p&gt;

&lt;p&gt;
如果你有一个局部的“东西”需要进行清理，但是又没有对应的析构函数处理。那就必须在抛出异常之前进行清理。有时候， &lt;code&gt;finally()&lt;/code&gt; 可以使得不太系统的清理过程稍稍可控。
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Fix LaTeX Beamer errors</title>
   <link href="http://kimi.im/2023-08-01-fix-latex-error"/>
   <updated>2023-08-01T00:00:00+00:00</updated>
   <id>http://kimi.im/fix-latex-error</id>
   <content type="html">&lt;p&gt;
My PC was re-imaged several days ago. I upgraded texlive from 2021 to
2023, as it is not allowed to update packages in lower system
version. In order to save disk space, this time I only install the
packages I need to use.
&lt;/p&gt;

&lt;p&gt;
But when I try to export one of my org-mode file to Beamer slides, the compilation reported errors:
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-log&quot;&gt;! Extra \or.
\ifthenelse #1-&amp;gt;\toks@ {#1}\TE@repl \or
                                        \TE@or \TE@repl \and \TE@and \TE@rep...
l.60 \end{frame}

?
! Emergency stop.
\ifthenelse #1-&amp;gt;\toks@ {#1}\TE@repl \or
                                        \TE@or \TE@repl \and \TE@and \TE@rep...
l.60 \end{frame}

End of file on the terminal!
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
When I look into the &lt;code&gt;tex&lt;/code&gt; file, &lt;code&gt;l.60&lt;/code&gt; is just the end of a &lt;code&gt;frame&lt;/code&gt;:
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-latex&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;\begin&lt;/span&gt;{&lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;frame&lt;/span&gt;}[label={sec:orgf852438}]{&amp;#20160;&amp;#20040;&amp;#26159; PA-DIM}
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;\begin&lt;/span&gt;{&lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;columns&lt;/span&gt;}
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;\begin&lt;/span&gt;{&lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;column&lt;/span&gt;}{0.5&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;\columnwidth&lt;/span&gt;}
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;\begin&lt;/span&gt;{&lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;center&lt;/span&gt;}
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;\includesvg&lt;/span&gt;[height=0.82&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;\textheight&lt;/span&gt;,width=&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;\textwidth&lt;/span&gt;,keepaspectratio]{images/PA-DIM-Context}
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;\end&lt;/span&gt;{&lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;center&lt;/span&gt;}
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;\end&lt;/span&gt;{&lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;column&lt;/span&gt;}

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;\begin&lt;/span&gt;{&lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;column&lt;/span&gt;}{0.5&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;\columnwidth&lt;/span&gt;}
PA-DIM = Process Automation - Device Information Model &lt;span style=&quot;color: #FF0000;&quot;&gt;\\&lt;/span&gt;[0pt]
&amp;#36807;&amp;#31243;&amp;#33258;&amp;#21160;&amp;#21270; - &amp;#35774;&amp;#22791;&amp;#20449;&amp;#24687;&amp;#27169;&amp;#22411;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;\begin&lt;/span&gt;{&lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;itemize&lt;/span&gt;}
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;\item&lt;/span&gt; &amp;#36807;&amp;#31243;&amp;#33258;&amp;#21160;&amp;#21270;&amp;#29616;&amp;#22330;&amp;#35774;&amp;#22791;&amp;#30340;&amp;#24120;&amp;#29992;&amp;#21442;&amp;#25968;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;\item&lt;/span&gt; &amp;#32479;&amp;#19968;&amp;#30340;&amp;#25968;&amp;#25454;&amp;#32467;&amp;#26500;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;\item&lt;/span&gt; &amp;#26631;&amp;#20934;&amp;#30340;&amp;#25968;&amp;#25454;&amp;#35821;&amp;#20041;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;\end&lt;/span&gt;{&lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;itemize&lt;/span&gt;}
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;\end&lt;/span&gt;{&lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;column&lt;/span&gt;}
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;\end&lt;/span&gt;{&lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;columns&lt;/span&gt;}
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;\end&lt;/span&gt;{&lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;frame&lt;/span&gt;} &lt;span style=&quot;color: #3F7F5F;&quot;&gt;% this line&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
It looks fine. Later, I found a thread in stackexchange &amp;ldquo;&lt;a href=&quot;https://tex.stackexchange.com/questions/13866/why-is-the-ifthen-package-obsolete&quot;&gt;why is the
ifthen package obsolete?&lt;/a&gt;
&lt;/p&gt;

&lt;div class=&quot;quotation&quot; id=&quot;orge9c8a5c&quot;&gt;
&lt;p&gt;
The main reason why people may consider ifthen obsolete (last version
is of 2001/05/26 with about one page of user manual plus four pages of
code documentation) is that it is superseded by e.g. etoolbox, which
uses the advanced possibilities of eTeX. Using these allows faster
processing. You still can use ifthen for your existing and new
documents if you like and I don&amp;rsquo;t think there is a risk in doing
so. However for new code, especially new packages which use a lot of
boolean expression using the more modern alternatives is recommended.
&lt;/p&gt;

&lt;/div&gt;

&lt;p&gt;
So I change my beamer template to use &lt;code&gt;etoolbox&lt;/code&gt;, for example, I change
from:
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-latex&quot;&gt;    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;\ifthenelse&lt;/span&gt;{&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;\boolean&lt;/span&gt;{customlogo}}{&lt;span style=&quot;color: #3F7F5F;&quot;&gt;%&lt;/span&gt;
      &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;\insertlogoimage&lt;/span&gt;{2}
    }{
      &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;\drawlogo&lt;/span&gt;{0.1}&lt;span style=&quot;color: #3F7F5F;&quot;&gt;%&lt;/span&gt;
    }
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
to:
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-latex&quot;&gt;    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;\ifcustomlogo&lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;%&lt;/span&gt;
      &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;\insertlogoimage&lt;/span&gt;{2}
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;\else&lt;/span&gt;
      &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;\drawlogo&lt;/span&gt;{0.1}&lt;span style=&quot;color: #3F7F5F;&quot;&gt;%&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;\fi&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
Then, texlive 2023 works fine.
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines E.12  如果通过抛出异常结束一个函数是不可能或不可接受的话，使用 noexcept 标签</title>
   <link href="http://kimi.im/2023-08-01-cppcoreguidelines-e12"/>
   <updated>2023-08-01T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-e12</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;Use noexcept when exiting a function because of a throw is impossible or unacceptable&amp;rdquo;
&lt;/p&gt;

&lt;p&gt;
理由
&lt;/p&gt;

&lt;p&gt;
出错处理更系统化、更健壮、更有效率。
&lt;/p&gt;

&lt;p&gt;
例子
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;double&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;compute&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;double&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;d&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;noexcept&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; log&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;sqrt&lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;d &amp;lt;= 0 ? 1 : d&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
此处我们知道， &lt;code&gt;compute&lt;/code&gt; 不会抛出异常，函数内的操作不会抛出异常。这时候，如果我们把 &lt;code&gt;compute&lt;/code&gt; 标记为 &lt;code&gt;noexcept&lt;/code&gt; 就可以让编译器更好的进行优化，让其他程序员更好的理解这个函数，从而更好的使用这个函数。
&lt;/p&gt;

&lt;p&gt;
注意
&lt;/p&gt;

&lt;p&gt;
很多标准库函数是 &lt;code&gt;noexcept&lt;/code&gt; 的，包括很多从 C 标准库继承来的 C++  标准库函数。
&lt;/p&gt;

&lt;p&gt;
例子
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;vector&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;double&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;munge&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;vector&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;double&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;&amp;gt;&lt;/span&gt;&amp;amp; &lt;span style=&quot;color: #000000;&quot;&gt;v&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;noexcept&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;vector&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;double&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;v2&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;v.size&lt;span style=&quot;color: #909183;&quot;&gt;()&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;... do something ...&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;



&lt;p&gt;
注意
&lt;/p&gt;

&lt;p&gt;
不要传统的异常规范：E.30: Don’t use exception specifications
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines E.8 申明你的后置条件</title>
   <link href="http://kimi.im/2023-07-31-cppcoreguidelines-e8"/>
   <updated>2023-07-31T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-e8</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;State your postconditions&amp;rdquo;
&lt;/p&gt;

&lt;p&gt;
理由
&lt;/p&gt;

&lt;p&gt;
避免接口出错。
&lt;/p&gt;

&lt;p&gt;
请查看：&lt;a href=&quot;./2022-03-19-cppcoreguidelines-i7&quot;&gt;后置条件规则&lt;/a&gt;
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines E.7 申明的前提条件</title>
   <link href="http://kimi.im/2023-07-30-cppcoreguidelines-e7"/>
   <updated>2023-07-30T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-e7</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;State your preconditions&amp;rdquo;
&lt;/p&gt;

&lt;p&gt;
理由
&lt;/p&gt;

&lt;p&gt;
避免接口出错。
&lt;/p&gt;

&lt;p&gt;
请查看：&lt;a href=&quot;./2022-03-17-cppcoreguidelines-i5&quot;&gt;前提条件规则&lt;/a&gt;
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines E.6 用 RAII 避免内存泄漏</title>
   <link href="http://kimi.im/2023-07-28-cppcoreguidelines-e6"/>
   <updated>2023-07-28T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-e6</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;Use RAII to prevent leaks&amp;rdquo;
&lt;/p&gt;

&lt;p&gt;
理由
&lt;/p&gt;

&lt;p&gt;
内存泄漏肯定不行。手工管理释放内存资源很容易出错。RAII（Resource
Acquisition Is Initialization） 是避免内存泄漏的最简单、最系统化的方式。
&lt;/p&gt;

&lt;p&gt;
例子
&lt;/p&gt;


&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;f1&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;i&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;Bad: possible leak&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt;* &lt;span style=&quot;color: #000000;&quot;&gt;p&lt;/span&gt; = &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;[&lt;/span&gt;12&lt;span style=&quot;color: #7388d6;&quot;&gt;]&lt;/span&gt;;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;...&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;i &amp;lt; 17&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;throw&lt;/span&gt; Bad&lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;in f()&quot;&lt;/span&gt;, i&lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;...&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
我们可以在抛出异常之前小心地释放内存资源。
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;f2&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;i&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;Clumsy and error-prone: explicit release&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt;* &lt;span style=&quot;color: #000000;&quot;&gt;p&lt;/span&gt; = &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;[&lt;/span&gt;12&lt;span style=&quot;color: #7388d6;&quot;&gt;]&lt;/span&gt;;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;...&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;i &amp;lt; 17&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;
        &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;delete&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;[]&lt;/span&gt; p;
        &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;throw&lt;/span&gt; Bad&lt;span style=&quot;color: #909183;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;in f()&quot;&lt;/span&gt;, i&lt;span style=&quot;color: #909183;&quot;&gt;}&lt;/span&gt;;
    &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;...&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
但是，这样操作很繁琐。代码量大的时候，在多处可能跑出异常的地方显式地释放资源，既重复是劳动，又容易出错。
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;f3&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;i&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;OK: resource management done by a handle (but see below)&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;auto&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;p&lt;/span&gt; = make_unique&lt;span style=&quot;color: #7388d6;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;[]&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;&amp;gt;(&lt;/span&gt;12&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;...&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;i &amp;lt; 17&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;throw&lt;/span&gt; Bad&lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;in f()&quot;&lt;/span&gt;, i&lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;...&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
注意
&lt;/p&gt;

&lt;p&gt;
这个方法在隐式地抛出异常的情况下也能正常工作，因为清理工作在被调用函数中处理掉了。
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;f4&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;i&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;OK: resource management done by a handle (but see below)&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;auto&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;p&lt;/span&gt; = make_unique&lt;span style=&quot;color: #7388d6;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;[]&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;&amp;gt;(&lt;/span&gt;12&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;...&lt;/span&gt;
    helper&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;i&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;might throw&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;...&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
除非你需要指针语义，不然的话，就用局部的资源对象：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;f5&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;i&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;OK: resource management done by local object&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;vector&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;v&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;12&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;...&lt;/span&gt;
    helper&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;i&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;might throw&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;...&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
这样更简单、更安全、更高效率。
&lt;/p&gt;

&lt;p&gt;
注意
&lt;/p&gt;

&lt;p&gt;
如果没有明显的资源句柄，或者很难定义合适的 RAII 对象/句柄，最后的办法是通过某个 &lt;code&gt;final_action&lt;/code&gt; 对象清理内存资源。
&lt;/p&gt;

&lt;p&gt;
注意
&lt;/p&gt;

&lt;p&gt;
如果我们写的程序不能执行异常怎么办？首先，我们要去质疑一下，为什么？是不是有一些反异常操作的迷信？我们只知道很少一些情况不能用异常：
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;我们的系统很小，支持异常操作会吃掉 2K 内存的大部分。&lt;/li&gt;
&lt;li&gt;我们使用硬实时系统，没有工具可以确保在规定的时间内处理异常。&lt;/li&gt;
&lt;li&gt;我们的系统里有大量旧代码，用了大量难以理解的指针，所以异常会导致内存泄漏。&lt;/li&gt;
&lt;li&gt;我们用的 C++ 版本中的异常处理机制性能很糟糕（慢、耗内存、没法和动态链接库兼容）。请像提供商提议，如果没有用户提议，不会有改进发生。&lt;/li&gt;
&lt;li&gt;如果我们质疑经理的古老智慧，我们会被炒鱿鱼。&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
这些理由中，只有第一条是很根本的，所以，只要有可能，尽量通过 RAII 使用异常机制，或者设计你的 RAII 对象，确保永远不会出错。如果没法使用异常机制，就模拟出 RAII 操作。就是在对象创建之后，先检查对象是否有效，然后在析构函数中释放所有资源。其中一个策略是给每一个资源句柄添加一个 &lt;code&gt;valid()&lt;/code&gt;
操作。
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;vector&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;string&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;vs&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;100&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;not std::vector: valid() added&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;!vs.valid&lt;span style=&quot;color: #909183;&quot;&gt;()&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;
        &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;handle error or exit&lt;/span&gt;
    &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;

    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;ifstream&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;fs&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;foo&quot;&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;not std::ifstream: valid() added&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;!fs.valid&lt;span style=&quot;color: #909183;&quot;&gt;()&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;
        &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;handle error or exit&lt;/span&gt;
    &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;

    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;...&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;destructors clean up as usual&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
很明显，这样会增加代码长度，不支持隐式的异常传导，并且也很容易忘记添加
&lt;code&gt;valid()&lt;/code&gt; 检查。所以，还是首选使用异常机制。
&lt;/p&gt;

&lt;p&gt;
请查看：使用 noexcept 规则
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines E.5 让构造函数构建不变式，如果不能构建，抛出异常</title>
   <link href="http://kimi.im/2023-07-26-cppcoreguidelines-e5"/>
   <updated>2023-07-26T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-e5</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;Let a constructor establish an invariant, and throw if it cannot&amp;rdquo;
&lt;/p&gt;

&lt;p&gt;
理由
&lt;/p&gt;

&lt;p&gt;
允许未建立不变式的对象会导致很多麻烦。某些成员函数可能无法正确调用。
&lt;/p&gt;

&lt;p&gt;
例子
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Vector&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;  &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;very simplified vector of doubles&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;if elem != nullptr then elem points to sz doubles&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;public&lt;/span&gt;:
    &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;Vector&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt; : elem&lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;nullptr&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;, sz&lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;0&lt;span style=&quot;color: #7388d6;&quot;&gt;}{}&lt;/span&gt;
    &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;Vector&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;s&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; : elem&lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;double&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;[&lt;/span&gt;s&lt;span style=&quot;color: #909183;&quot;&gt;]&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;, sz&lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;s&lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;/* &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;initialize elements&lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt; */&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;
    ~&lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;Vector&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;delete&lt;/span&gt; &lt;span style=&quot;color: #909183;&quot;&gt;[]&lt;/span&gt; elem; &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;double&lt;/span&gt;&amp;amp; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;operator&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;[]&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;s&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; elem&lt;span style=&quot;color: #909183;&quot;&gt;[&lt;/span&gt;s&lt;span style=&quot;color: #909183;&quot;&gt;]&lt;/span&gt;; &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;...&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;private&lt;/span&gt;:
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;owner&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;double&lt;/span&gt;*&lt;span style=&quot;color: #7388d6;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;elem&lt;/span&gt;;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;sz&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
在这这个类的构建过程中， &lt;code&gt;new&lt;/code&gt; 可能会抛出异常，导致 &lt;code&gt;Vector&lt;/code&gt; 的元素没有正确构建。这时候，依赖于这个不变式的下标操作就会调用出错。
&lt;/p&gt;

&lt;p&gt;
请查看：&lt;a href=&quot;./2022-09-19-cppcoreguidelines-c42&quot;&gt;C.42 如果构造函数不能构造一个有效对象，抛出一个例外&lt;/a&gt;。
&lt;/p&gt;

&lt;p&gt;
强化
&lt;/p&gt;

&lt;p&gt;
标记内部有私有状态，且没有构造函数（公开、保护、私有构造函数）的类。
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines E.4 不要围绕不变式设计出错处理策略</title>
   <link href="http://kimi.im/2023-07-25-cppcoreguidelines-e4"/>
   <updated>2023-07-25T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-e4</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;Design your error-handling strategy around invariants&amp;rdquo;
&lt;/p&gt;

&lt;p&gt;
理由
&lt;/p&gt;

&lt;p&gt;
我们使用一个对象的话，这个对象一定要是状态正常（所谓的状态正常，指的是这个状态正式或非正式的由不变式所定义）。如果从错误中恢复的时候，这个对象没有被销毁，那么它必须处在有效的正常状态。
&lt;/p&gt;

&lt;p&gt;
注意
&lt;/p&gt;

&lt;p&gt;
一个不变式指的是某个逻辑条件，在这个条件下，对象的成员的构造函数必须构造数据的状态，从而确保公开成员函数能够以正常的方式访问数据。
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines E.3 只用异常处理出错情况</title>
   <link href="http://kimi.im/2023-07-24-cppcoreguidelines-e3"/>
   <updated>2023-07-24T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-e3</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;Use exceptions for error handling only&amp;rdquo;
&lt;/p&gt;

&lt;p&gt;
理由
&lt;/p&gt;

&lt;p&gt;
要把出错处理的代码和普通代码分开。C++ 的优化实现，倾向于假定异常情况很少出现。也就是说，默认不太会有很多异常情况要处理。
&lt;/p&gt;

&lt;p&gt;
错误例子
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;don&apos;t: exception not used for error handling&lt;/span&gt;
&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;find_index&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;vector&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;string&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;&amp;gt;&lt;/span&gt;&amp;amp; &lt;span style=&quot;color: #000000;&quot;&gt;vec&lt;/span&gt;, &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;string&lt;/span&gt;&amp;amp; &lt;span style=&quot;color: #000000;&quot;&gt;x&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;try&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;
        &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;for&lt;/span&gt; &lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;gsl&lt;/span&gt;::&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;index&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;i&lt;/span&gt; = 0; i &amp;lt; vec.size&lt;span style=&quot;color: #709870;&quot;&gt;()&lt;/span&gt;; ++i&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt;
            &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;vec&lt;span style=&quot;color: #709870;&quot;&gt;[&lt;/span&gt;i&lt;span style=&quot;color: #709870;&quot;&gt;]&lt;/span&gt; == x&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;throw&lt;/span&gt; i;  &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;found x&lt;/span&gt;
    &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;catch&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;i&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;
        &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; i;
    &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; -1;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;not found&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
这段代码把事情弄复杂了，而且可能运行速度会更慢些。在一个 &lt;code&gt;vector&lt;/code&gt; 中查找一个值一点也不“异常”。
&lt;/p&gt;

&lt;p&gt;
强化
&lt;/p&gt;

&lt;p&gt;
可能需要一些启发式的探索。检查异常值从 &lt;code&gt;catch&lt;/code&gt; 语句中“泄漏”出去的情况。
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines E.2 用抛出异常作为信号说明函数无法处理分配给它的任务</title>
   <link href="http://kimi.im/2023-07-23-cppcoreguidelines-e2"/>
   <updated>2023-07-23T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-e2</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;Throw an exception to signal that a function can’t perform its assigned task&amp;rdquo;
&lt;/p&gt;

&lt;p&gt;
理由
&lt;/p&gt;

&lt;p&gt;
这种方法可以把出错处理过程变得更系统、稳固，且避免代码重复。
&lt;/p&gt;

&lt;p&gt;
例子
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;struct&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Foo&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;vector&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;&amp;lt;&lt;/span&gt;Thing&lt;span style=&quot;color: #7388d6;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;v&lt;/span&gt;;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;File_handle&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;f&lt;/span&gt;;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;string&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;s&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;

&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;use&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Foo&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;bar&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;{&lt;/span&gt;Thing&lt;span style=&quot;color: #709870;&quot;&gt;{&lt;/span&gt;1&lt;span style=&quot;color: #709870;&quot;&gt;}&lt;/span&gt;, Thing&lt;span style=&quot;color: #709870;&quot;&gt;{&lt;/span&gt;2&lt;span style=&quot;color: #709870;&quot;&gt;}&lt;/span&gt;, Thing&lt;span style=&quot;color: #709870;&quot;&gt;{&lt;/span&gt;monkey&lt;span style=&quot;color: #709870;&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;}&lt;/span&gt;,
             &lt;span style=&quot;color: #909183;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;my_file&quot;&lt;/span&gt;, &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;r&quot;&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;}&lt;/span&gt;, &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;Here we go!&quot;&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;...&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
这里， &lt;code&gt;vector&lt;/code&gt; 和 &lt;code&gt;string&lt;/code&gt; 的构造函数可能无法分配到足够的内存给其内部元素。
&lt;code&gt;vector&lt;/code&gt; 构造函数可能无法把初始化列表中的东西复制过来， &lt;code&gt;File_handle&lt;/code&gt; 可能不能打开文件。在各种可能出错的情况下，都会抛出异常给调用函数 &lt;code&gt;use()&lt;/code&gt; 来处理。 &lt;code&gt;use()&lt;/code&gt; 函数可以通过 &lt;code&gt;try/catch&lt;/code&gt; 来处理构造 &lt;code&gt;bar&lt;/code&gt; 的过程中出现的错误。出现错误的时候， &lt;code&gt;Foo&lt;/code&gt; 的构造函数会在转交控制权之前，正确销毁已经构造的成员。
&lt;/p&gt;

&lt;p&gt;
注意，这里没有包含错误码的返回值。
&lt;/p&gt;

&lt;p&gt;
&lt;code&gt;File_handle&lt;/code&gt; 构造函数可能可以这样定义：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #110099;&quot;&gt;File_handle&lt;/span&gt;::&lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;File_handle&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;string&lt;/span&gt;&amp;amp; &lt;span style=&quot;color: #000000;&quot;&gt;name&lt;/span&gt;, &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;string&lt;/span&gt;&amp;amp; &lt;span style=&quot;color: #000000;&quot;&gt;mode&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
    : f&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;fopen&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;name.c_str&lt;span style=&quot;color: #909183;&quot;&gt;()&lt;/span&gt;, mode.c_str&lt;span style=&quot;color: #909183;&quot;&gt;()&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;!f&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;
        &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;throw&lt;/span&gt; runtime_error&lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;File_handle: could not open &quot;&lt;/span&gt;
                            + name + &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot; as &quot;&lt;/span&gt; + mode&lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
注意
&lt;/p&gt;

&lt;p&gt;
人们经常说异常意味着异常的事件或者异常的错误的信号。但是，这里有些同义反复，到底什么是异常的？
&lt;/p&gt;

&lt;p&gt;
例子
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;一个前提条件没法满足&lt;/li&gt;
&lt;li&gt;一个构造函数无法构造一个对象（构造一个类的不变式的过程失败了）&lt;/li&gt;
&lt;li&gt;超出范围错误（比如， &lt;code&gt;v[v.size()] = 7&lt;/code&gt; ）&lt;/li&gt;
&lt;li&gt;无法获取一个资源（比如，网络连接断开）&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
相反的，一个普通循环的结束，不算是异常的。除非这个循环是无限循环。这时候，提前结束意味着异常情况。
&lt;/p&gt;

&lt;p&gt;
注意
&lt;/p&gt;

&lt;p&gt;
不要通过 &lt;code&gt;throw&lt;/code&gt; 作为从函数返回值的一种简单替代。
&lt;/p&gt;

&lt;p&gt;
例外情况
&lt;/p&gt;

&lt;p&gt;
像硬实时系统之类的系统，会要求固定的最大时间内响应事件。这时候，我们必须有工具确保在指定时间内能从 &lt;code&gt;throw&lt;/code&gt; 恢复的情况。
&lt;/p&gt;

&lt;p&gt;
注意
&lt;/p&gt;

&lt;p&gt;
如果你无法承受异常，或者不喜欢基于异常的出错处理，请在做出决定之前，考虑其他选项。当然这些选项有其自身的复杂性和问题。一定要记住，在申明性能效率之前，要做出一定的度量。
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines E.1 在设计之初就先确定错误处理策略</title>
   <link href="http://kimi.im/2023-07-22-cppcoreguidelines-e1"/>
   <updated>2023-07-22T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-e1</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;Develop an error-handling strategy early in a design&amp;rdquo;
&lt;/p&gt;

&lt;p&gt;
理由
&lt;/p&gt;

&lt;p&gt;
稳固的、完整的错误处理策略和资源泄漏处理策略很难在开发后期加入到系统中。所以，最好在设计之初就先确定这些策略。
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines CP.201 关于信号</title>
   <link href="http://kimi.im/2023-07-21-cppcoreguidelines-201"/>
   <updated>2023-07-21T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-201</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;Signals&amp;rdquo;关于 UNIX 的信号处理。需要注意的是，信号的异步安全很困难，最好避免与信号处理句柄的通信。
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines CP.200 只用 volatile 访问非 C++ 的内存</title>
   <link href="http://kimi.im/2023-07-20-cppcoreguidelines-cp200"/>
   <updated>2023-07-20T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-cp200</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;Use volatile only to talk to non-C++ memory&amp;rdquo;
&lt;/p&gt;

&lt;p&gt;
理由
&lt;/p&gt;

&lt;p&gt;
&lt;code&gt;volatile&lt;/code&gt; 是用来访问非 C++ 的对象，或者用来访问不遵循 C++ 内存模型的硬件数据的。
&lt;/p&gt;

&lt;p&gt;
例子
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;volatile&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;long&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;clock&lt;/span&gt;;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
这里描述的是一个一直被时钟电路更新的寄存器。时钟是转瞬即逝的数据，因为它的改变不需要 C++ 程序的任何操作。比如，读取时钟两次会得到两个不同的值。所有优化器最好不要把两次读取优化成一次：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;long&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;t1&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;clock&lt;/span&gt;;
&lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ... no use of clock here ...&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;long&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;t2&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;clock&lt;/span&gt;;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
时钟是常量，程序不该改写时钟数据。
&lt;/p&gt;

&lt;p&gt;
注意
&lt;/p&gt;

&lt;p&gt;
除非你编写代码直接操作底层硬件。最好避免 &lt;code&gt;volatile&lt;/code&gt; 这种深奥的功能。
&lt;/p&gt;

&lt;p&gt;
例子
&lt;/p&gt;

&lt;p&gt;
一般 C++ 代码从别的语言或硬件接收到 &lt;code&gt;volatile&lt;/code&gt; 内存：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;volatile&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;*&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;vi&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;get_hardware_memory_location&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// note: we get a pointer to someone else&apos;s memory here&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// volatile says &quot;treat this with extra respect&quot;&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
有时候，C++ 代码分配 &lt;code&gt;volatile&lt;/code&gt; 内存，通过指针共享给其他语言或硬件。
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;static&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;volatile&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;long&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;vl&lt;/span&gt;;
&lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;please_use_this&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt;vl&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// escape a reference to this to &quot;elsewhere&quot; (not C++)&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
坏例子
&lt;/p&gt;

&lt;p&gt;
&lt;code&gt;volatile&lt;/code&gt; 的局部变量肯定有问题。如果它是短暂的转瞬即逝的，怎么共享给其他语言和硬件？这个道理同样适用于成员变量：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;volatile&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;i&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;0&lt;/span&gt;; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// bad, volatile local variable&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// etc.&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;My_type&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;volatile&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;i&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;0&lt;/span&gt;; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// suspicious, volatile member variable&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// etc.&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
注意不像其他语言，在 C++ 中 &lt;code&gt;volatile&lt;/code&gt; 没有同步的作用。
&lt;/p&gt;

&lt;p&gt;
强化
&lt;/p&gt;

&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;标记 &lt;code&gt;volatile T&lt;/code&gt; 局部的或成员变量，大多数情况，你是想要用到 &lt;code&gt;atomic&amp;lt;T&amp;gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines CP.111  如果需要双次检查锁，请使用常用的设计模式</title>
   <link href="http://kimi.im/2023-07-19-cppcoreguidelines-cp111"/>
   <updated>2023-07-19T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-cp111</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;Use a conventional pattern if you really need double-checked locking&amp;rdquo;
&lt;/p&gt;

&lt;p&gt;
理由
&lt;/p&gt;

&lt;p&gt;
双次检查锁的实现很容易出错。如果你需要自己编写双次检查锁的代码，考虑规则 &lt;a href=&quot;./cppcoreguidelines-cp110&quot;&gt;CP.110 不要自己写双次检查锁的初始化代码&lt;/a&gt; 和 &lt;a href=&quot;./cppcoreguidelines-cp100&quot;&gt;CP.100 除非你确定需要，尽量不要用无锁编程&lt;/a&gt;。如果你的确需要，考虑常用的设计模式。
&lt;/p&gt;

&lt;p&gt;
如果非线程安全的行为很难或很少出现，并且有更快的线程安全测试进行保障的时候，使用双次检查锁模式并不违反规则&lt;a href=&quot;./cppcoreguidelines-cp110&quot;&gt;CP.110 不要自己写双次检查锁的初始化代码&lt;/a&gt;。
&lt;/p&gt;

&lt;p&gt;
坏例子
&lt;/p&gt;

&lt;p&gt;
使用 &lt;code&gt;volatile&lt;/code&gt; 并不能确保先进性检查后执行的代码能够线程安全。请查看
&lt;a href=&quot;./cppcoreguidelines-cp200&quot;&gt;CP.200: 只使用 &lt;code&gt;volatile&lt;/code&gt; 访问非 C++ 内存&lt;/a&gt;。
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;mutex&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;action_mutex&lt;/span&gt;;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;volatile&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;bool&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;action_needed&lt;/span&gt;;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;action_needed&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;std&lt;/span&gt;::&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;lock_guard&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;std&lt;/span&gt;::&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;mutex&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;lock&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;action_mutex&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;action_needed&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;
        &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;take_action&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;()&lt;/span&gt;;
        &lt;span style=&quot;color: #000000;&quot;&gt;action_needed&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;false&lt;/span&gt;;
    &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
好例子
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;mutex&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;action_mutex&lt;/span&gt;;
&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;atomic&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;bool&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;action_needed&lt;/span&gt;;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;action_needed&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;std&lt;/span&gt;::&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;lock_guard&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;std&lt;/span&gt;::&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;mutex&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;lock&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;action_mutex&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;action_needed&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;
        &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;take_action&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;()&lt;/span&gt;;
        &lt;span style=&quot;color: #000000;&quot;&gt;action_needed&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;false&lt;/span&gt;;
    &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
如果获取加载的方式比顺序一致加载效率更好的话，优化的内存顺序可能有些好处。
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;mutex&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;action_mutex&lt;/span&gt;;
&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;atomic&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;bool&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;action_needed&lt;/span&gt;;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;action_needed.&lt;span style=&quot;color: #3a5fcd; font-weight: bold; font-style: italic;&quot;&gt;load&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;memory_order_acquire&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;lock_guard&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;std&lt;/span&gt;::&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;mutex&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;lock&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;action_mutex&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;action_needed.&lt;span style=&quot;color: #3a5fcd; font-weight: bold; font-style: italic;&quot;&gt;load&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;memory_order_relaxed&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;
        &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;take_action&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;()&lt;/span&gt;;
        action_needed.&lt;span style=&quot;color: #3a5fcd; font-weight: bold; font-style: italic;&quot;&gt;store&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;false&lt;/span&gt;, memory_order_release&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt;;
    &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines CP.110 不要自己写双次检查锁的初始化代码</title>
   <link href="http://kimi.im/2023-07-18-cppcoreguidelines-cp110"/>
   <updated>2023-07-18T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-cp110</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;Do not write your own double-checked locking for initialization&amp;rdquo;
&lt;/p&gt;

&lt;p&gt;
理由
&lt;/p&gt;

&lt;p&gt;
从 C++11 开始，静态局部变量是以线程安全的初始化的。结合 RAII 模式，静态局部变量可以替代你自己编写的双次检查锁的初始化代码。 &lt;code&gt;std::call_once&lt;/code&gt;
可以实现同样的目的。使用 C++11 静态局部变量或 &lt;code&gt;std::call_once&lt;/code&gt; 编写双次检查锁的初始化代码。
&lt;/p&gt;


&lt;p&gt;
例子，使用 &lt;code&gt;std::call_once&lt;/code&gt;
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;static&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;std&lt;/span&gt;::&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;once_flag&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;my_once_flag&lt;/span&gt;;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;std&lt;/span&gt;::&lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;call_once&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;my_once_flag, &lt;span style=&quot;color: #909183;&quot;&gt;[]()&lt;/span&gt;
    &lt;span style=&quot;color: #909183;&quot;&gt;{&lt;/span&gt;
        &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// do this only once&lt;/span&gt;
    &lt;span style=&quot;color: #909183;&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ...&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;
利用 C++  的线程安全的静态局部变量
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// Assuming the compiler is compliant with C++11&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;static&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;My_class&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;my_object&lt;/span&gt;; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// Constructor called only once&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ...&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;My_class&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;public&lt;/span&gt;:
    &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;My_class&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt;
    &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;
        &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// do this only once&lt;/span&gt;
    &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;
&lt;/pre&gt;
&lt;/div&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines CP.102 仔细研读以下文献</title>
   <link href="http://kimi.im/2023-07-17-cppcoreguidelines-cp102"/>
   <updated>2023-07-17T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-cp102</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;Carefully study the literature&amp;rdquo;
&lt;/p&gt;

&lt;p&gt;
理由
&lt;/p&gt;

&lt;p&gt;
除了原子操作和其他少数标准模式。无锁编程需要很深的专家知识。在提交无锁代码给别人前，先要称为专家。
&lt;/p&gt;

&lt;p&gt;
相关参考文献：
&lt;/p&gt;

&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;Anthony Williams: C++ concurrency in action. Manning Publications.&lt;/li&gt;
&lt;li&gt;Boehm, Adve, You Don’t Know Jack About Shared Variables or Memory
Models , Communications of the ACM, Feb 2012.&lt;/li&gt;
&lt;li&gt;Boehm, “Threads Basics”, HPL TR 2009-259.&lt;/li&gt;
&lt;li&gt;Adve, Boehm, “Memory Models: A Case for Rethinking Parallel
Languages and Hardware”, Communications of the ACM, August 2010.&lt;/li&gt;
&lt;li&gt;Boehm, Adve, “Foundations of the C++ Concurrency Memory Model”,
PLDI 08.&lt;/li&gt;
&lt;li&gt;Mark Batty, Scott Owens, Susmit Sarkar, Peter Sewell, and Tjark
Weber, “Mathematizing C++ Concurrency”, POPL 2011.&lt;/li&gt;
&lt;li&gt;Damian Dechev, Peter Pirkelbauer, and Bjarne Stroustrup:
Understanding and Effectively Preventing the ABA Problem in
Descriptor-based Lock-free Designs. 13th IEEE Computer Society ISORC
2010 Symposium. May 2010.&lt;/li&gt;
&lt;li&gt;Damian Dechev and Bjarne Stroustrup: Scalable Non-blocking
Concurrent Objects for Mission Critical Code. ACM OOPSLA’09. October
2009&lt;/li&gt;
&lt;li&gt;Damian Dechev, Peter Pirkelbauer, Nicolas Rouquette, and Bjarne
Stroustrup: Semantically Enhanced Containers for Concurrent
Real-Time Systems. Proc. 16th Annual IEEE International Conference
and Workshop on the Engineering of Computer Based Systems (IEEE
ECBS). April 2009.&lt;/li&gt;
&lt;li&gt;Maurice Herlihy, Nir Shavit, Victor Luchangco, Michael Spear, “The
Art of Multiprocessor Programming”, 2nd ed. September 2020&lt;/li&gt;
&lt;/ul&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines CP.101 不要相信你的硬件/编译器组合</title>
   <link href="http://kimi.im/2023-07-16-cppcoreguidelines-cp101"/>
   <updated>2023-07-16T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-cp101</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;Distrust your hardware/compiler combination&amp;rdquo;
&lt;/p&gt;

&lt;p&gt;
理由
&lt;/p&gt;

&lt;p&gt;
无锁编程用到的底层的硬件接口是最难实现，最容易出现麻烦的可移植性问题的地方。如果你利用无锁编程改善程序性能，你需要持续不断的进行检查。
&lt;/p&gt;

&lt;p&gt;
我们很难基于指令的乱序执行（静态或动态的），有效的考虑优化问题。这时候就很需要经验、半形式化模型、模型审查等。非常需要进行极限测试。但是“不要太靠近太阳飞行。”不然你会很受伤。
&lt;/p&gt;

&lt;p&gt;
强化
&lt;/p&gt;

&lt;p&gt;
硬件、操作系统、编译器、程序库修改了之后，一定要重新进行测试。
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines CP.100 除非你确定需要，尽量不要用无锁编程</title>
   <link href="http://kimi.im/2023-07-15-cppcoreguidelines-cp100"/>
   <updated>2023-07-15T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-cp100</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;Don&amp;rsquo;t use lock-free programming unless you absolutely have to&amp;rdquo;
&lt;/p&gt;

&lt;p&gt;
理由
&lt;/p&gt;

&lt;p&gt;
容易出错，且对语言、机器架构、数据结构等知识的要求很高。
&lt;/p&gt;

&lt;p&gt;
坏例子
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;extern&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;atomic&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Link&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;head&lt;/span&gt;;        &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// the shared head of a linked list&lt;/span&gt;

&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Link&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;*&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;nh&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Link&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;data, &lt;span style=&quot;color: #110099;&quot;&gt;nullptr&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// make a link ready for insertion&lt;/span&gt;
&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Link&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;*&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;h&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; head.&lt;span style=&quot;color: #3a5fcd; font-weight: bold; font-style: italic;&quot;&gt;load&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;;                 &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// read the shared head of the list&lt;/span&gt;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;do&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;h&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #110099; font-style: italic;&quot;&gt;data&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;=&lt;/span&gt; data&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;break&lt;/span&gt;;        &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// if so, insert elsewhere&lt;/span&gt;
    nh&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;next&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; h;                      &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// next element is the previous head&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;while&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;!&lt;/span&gt;head.&lt;span style=&quot;color: #3a5fcd; font-weight: bold; font-style: italic;&quot;&gt;compare_exchange_weak&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;h, nh&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// write nh to head or to h&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;
很难通过测试发现其中的 bug 。这里有所谓的 ABA 问题。比如，在 &lt;code&gt;nh-&amp;gt;next
= h&lt;/code&gt; 之后，线程被切换走，其他线程可能做了类似的操作， &lt;code&gt;nnh-&amp;gt;next = h&lt;/code&gt; 然后， &lt;code&gt;h&lt;/code&gt; 和 &lt;code&gt;nnh&lt;/code&gt; 进行交换。新的 &lt;code&gt;h&lt;/code&gt; 成了 &lt;code&gt;nnh&lt;/code&gt; 。这时候，线程又切换回来， &lt;code&gt;nh&lt;/code&gt;
和老的 &lt;code&gt;h&lt;/code&gt; 进行交换，这时候， &lt;code&gt;h&lt;/code&gt; 指向的链表就丢失了。
&lt;/p&gt;


&lt;p&gt;
例外
&lt;/p&gt;

&lt;p&gt;
只要你使用顺序的内存模型（ &lt;code&gt;memory_order_seq_cst&lt;/code&gt; ），你就可以简单安全地使用原子变量。
&lt;/p&gt;

&lt;p&gt;
注意
&lt;/p&gt;

&lt;p&gt;
高层的并行机制，如线程和互斥锁是用无锁编程实现的。
&lt;/p&gt;

&lt;p&gt;
其他选项
&lt;/p&gt;

&lt;p&gt;
使用别人实现的无锁数据结构。
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines CP.61  通过 async() 生成同步任务</title>
   <link href="http://kimi.im/2023-07-14-cppcoreguidelines-cp61"/>
   <updated>2023-07-14T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-cp61</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;Use &lt;code&gt;async()&lt;/code&gt; to spawn concurrent tasks&amp;rdquo;
&lt;/p&gt;

&lt;p&gt;
理由 
&lt;/p&gt;

&lt;p&gt;
与 R.12 类似。R.12 提出避免使用原始指针。这里我们提出要尽量避免原始线程和原始原语。应该用工厂函数，比如 &lt;code&gt;std::async&lt;/code&gt; 来生成线程和重用线程，从而避免在你的代码中暴露原始线程。
&lt;/p&gt;

&lt;p&gt;
例子
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;read_value&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;std&lt;/span&gt;::&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;string&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;filename&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;std&lt;/span&gt;::&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;ifstream&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;in&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;filename&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
    in.&lt;span style=&quot;color: #3a5fcd; font-weight: bold; font-style: italic;&quot;&gt;exceptions&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;std&lt;/span&gt;::&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;ifstream&lt;/span&gt;::failbit&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;value&lt;/span&gt;;
    in &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;gt;&amp;gt;&lt;/span&gt; value;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; value;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;async_example&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;try&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;
        &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;std&lt;/span&gt;::&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;future&lt;/span&gt;&lt;span style=&quot;color: #909183; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #909183; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;f1&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;std&lt;/span&gt;::&lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;async&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;read_value, &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;v1.txt&quot;&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt;;
        &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;std&lt;/span&gt;::&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;future&lt;/span&gt;&lt;span style=&quot;color: #909183; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #909183; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;f2&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;std&lt;/span&gt;::&lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;async&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;read_value, &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;v2.txt&quot;&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt;;
        &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;std&lt;/span&gt;::cout &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; f1.&lt;span style=&quot;color: #3a5fcd; font-weight: bold; font-style: italic;&quot;&gt;get&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;+&lt;/span&gt; f2.&lt;span style=&quot;color: #3a5fcd; font-weight: bold; font-style: italic;&quot;&gt;get&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;&apos;\n&apos;&lt;/span&gt;;
    &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;catch&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;std&lt;/span&gt;::&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;ios_base&lt;/span&gt;::&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;failure&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;fail&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;
        &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// handle exception here&lt;/span&gt;
    &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
注意
&lt;/p&gt;

&lt;p&gt;
很遗憾， &lt;code&gt;std::async&lt;/code&gt; 也不是很完美。比如说，它不能利用线程池。这意味着它不会把任务丢进队列等待执行，可能会因为资源耗尽而运行失败。但是，就算你不能利用 &lt;code&gt;std::async&lt;/code&gt; 你也应该选择编写自己的函数，可以等待未来返回值。而尽量避免使用原始原语。
&lt;/p&gt;

&lt;p&gt;
坏例子
&lt;/p&gt;

&lt;p&gt;
这个例子显示了两种利用 &lt;code&gt;std::future&lt;/code&gt; 的方式。但是无法避免的，需要管理原始 &lt;code&gt;std::thread&lt;/code&gt; 。
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;async_example&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;std&lt;/span&gt;::&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;promise&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;p1&lt;/span&gt;;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;std&lt;/span&gt;::&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;future&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;f1&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; p1.&lt;span style=&quot;color: #3a5fcd; font-weight: bold; font-style: italic;&quot;&gt;get_future&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt;;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;std&lt;/span&gt;::&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;thread&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;t1&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;p1&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;std&lt;/span&gt;::&lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;move&lt;/span&gt;&lt;span style=&quot;color: #709870;&quot;&gt;(&lt;/span&gt;p1&lt;span style=&quot;color: #709870;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;]()&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;mutable&lt;/span&gt; &lt;span style=&quot;color: #909183;&quot;&gt;{&lt;/span&gt;
        p1.&lt;span style=&quot;color: #3a5fcd; font-weight: bold; font-style: italic;&quot;&gt;set_value&lt;/span&gt;&lt;span style=&quot;color: #709870;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;read_value&lt;/span&gt;&lt;span style=&quot;color: #907373;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;v1.txt&quot;&lt;/span&gt;&lt;span style=&quot;color: #907373;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #709870;&quot;&gt;)&lt;/span&gt;;
    &lt;span style=&quot;color: #909183;&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
    t1.&lt;span style=&quot;color: #3a5fcd; font-weight: bold; font-style: italic;&quot;&gt;detach&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt;; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// evil&lt;/span&gt;

    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;std&lt;/span&gt;::&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;packaged_task&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;()&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;pt2&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;read_value, &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;v2.txt&quot;&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;std&lt;/span&gt;::&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;future&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;f2&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; pt2.&lt;span style=&quot;color: #3a5fcd; font-weight: bold; font-style: italic;&quot;&gt;get_future&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt;;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;std&lt;/span&gt;::&lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;thread&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;std&lt;/span&gt;::&lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;move&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;pt2&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;.&lt;span style=&quot;color: #3a5fcd; font-weight: bold; font-style: italic;&quot;&gt;detach&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt;;

    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;std&lt;/span&gt;::cout &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; f1.&lt;span style=&quot;color: #3a5fcd; font-weight: bold; font-style: italic;&quot;&gt;get&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;+&lt;/span&gt; f2.&lt;span style=&quot;color: #3a5fcd; font-weight: bold; font-style: italic;&quot;&gt;get&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;&apos;\n&apos;&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
好例子
&lt;/p&gt;

&lt;p&gt;
这个例子展示了使用 &lt;code&gt;std::async&lt;/code&gt; 的通用模式。如果程序环境不允许使用
&lt;code&gt;std::async&lt;/code&gt; 本身的话，可以这么写：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;async_example&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;WorkQueue&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;wq&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;std&lt;/span&gt;::&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;future&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;f1&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; wq.&lt;span style=&quot;color: #3a5fcd; font-weight: bold; font-style: italic;&quot;&gt;enqueue&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;[]()&lt;/span&gt; &lt;span style=&quot;color: #909183;&quot;&gt;{&lt;/span&gt;
        &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;read_value&lt;/span&gt;&lt;span style=&quot;color: #709870;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;v1.txt&quot;&lt;/span&gt;&lt;span style=&quot;color: #709870;&quot;&gt;)&lt;/span&gt;;
    &lt;span style=&quot;color: #909183;&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;std&lt;/span&gt;::&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;future&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;f2&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; wq.&lt;span style=&quot;color: #3a5fcd; font-weight: bold; font-style: italic;&quot;&gt;enqueue&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;[]()&lt;/span&gt; &lt;span style=&quot;color: #909183;&quot;&gt;{&lt;/span&gt;
        &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;read_value&lt;/span&gt;&lt;span style=&quot;color: #709870;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;v2.txt&quot;&lt;/span&gt;&lt;span style=&quot;color: #709870;&quot;&gt;)&lt;/span&gt;;
    &lt;span style=&quot;color: #909183;&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;std&lt;/span&gt;::cout &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; f1.&lt;span style=&quot;color: #3a5fcd; font-weight: bold; font-style: italic;&quot;&gt;get&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;+&lt;/span&gt; f2.&lt;span style=&quot;color: #3a5fcd; font-weight: bold; font-style: italic;&quot;&gt;get&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;&apos;\n&apos;&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
任何需要处理 &lt;code&gt;read_value&lt;/code&gt; 的线程都隐藏在 &lt;code&gt;WorkQueue::enqueue&lt;/code&gt; 之后。用户代码只要处理 &lt;code&gt;future&lt;/code&gt; 对象，而不用处理原始线程、原始原语以及 &lt;code&gt;packaged_task&lt;/code&gt;
对象。
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>单词本：schedule</title>
   <link href="http://kimi.im/2023-07-13-schedule"/>
   <updated>2023-07-13T00:00:00+00:00</updated>
   <id>http://kimi.im/schedule</id>
   <content type="html">&lt;p&gt;
早上看软件架构师主题的书，其中说到项目关系人/涉众的时候，提到管理层对于架构的要求有预算、业务目标、产品质量以及项目进度：
&lt;/p&gt;

&lt;p&gt;
keeping the development costs low, achieving business goals, being on
track with the development &lt;b&gt;schedule&lt;/b&gt;, and maintaining product quality.
&lt;/p&gt;

&lt;p&gt;
这里 schedule 虽然是一个很常用的单词，但是也有必要简单了解下。
&lt;/p&gt;

&lt;p&gt;
众所周知，英语受法语影响很大，所以英语中的 schedule 其实是从法语里来的，其法语来源是 cédule 其意思是欠条。
&lt;/p&gt;

&lt;p&gt;
法语又是从拉丁语的 sedule 变来的。本意是写字的纸条。
&lt;/p&gt;

&lt;p&gt;
稍微留意一下，我们可以发现其实德语的 Zettel 也是从 sedule 演变来的。
Zettel 就是德语纸条、卡片的意思。德国社会学家 Niklas Luhmann 就是通过
Zettelkasten 纸片盒笔记管理法，创作了著作等身的作品。Zettelkasten 也是启发了很多有 backlink 反向链接的笔记管理软件的开发。比如我目前在用的基于 Emacs 和 Org-mode 的 org-roam 插件。可以帮助我很好的管理我的学习笔记。
&lt;/p&gt;

&lt;p&gt;
至于，现代的作为进度表、日程表、安排时间等的意思，则是在 1863 年开始出现，那时候的 schedule 是用于火车的时间表。
&lt;/p&gt;

&lt;p&gt;
至于读音，英语沿用法语的读音，读作 [&amp;rsquo;ʃedju:l] ，而美国英语因为 Noah
Webster 的影响，沿用 schedule 的希腊语读音起源，读作 [&amp;rsquo;skedʒjul] 。
&lt;/p&gt;

&lt;p&gt;
韦伯斯特字典可以认为是美国的新华字典，（英语：Webster&amp;rsquo;s Dictionary），为在美国被誉为“美国学术和教育之父”的辞典编纂者、拼写改革倡导者诺亚·韦伯斯特（Noah Webster）编写的一系列字典。在美国，韦伯斯特的名字等同于“字典”（通用商标），而他首版于 1828 年的现代《韦氏词典》尤为著名。现在韦伯斯特字典多指美国梅里亚姆-韦伯斯特公司编写的字典。
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines CP.60  用 future 从并行任务返回值</title>
   <link href="http://kimi.im/2023-07-12-cppcoreguidelines-cp60"/>
   <updated>2023-07-12T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-cp60</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;Use a &lt;code&gt;future&lt;/code&gt; to return a value from a concurrent task&amp;rdquo;
&lt;/p&gt;

&lt;p&gt;
理由
&lt;/p&gt;

&lt;p&gt;
&lt;code&gt;future&lt;/code&gt; 关键字能确保从异步任务返回值的语义正确执行。没有显式的锁，可以简单的处理正确结果的值返回，错误结果的异常抛出。
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>单词本：philharmonic</title>
   <link href="http://kimi.im/2023-07-12-philharmonic"/>
   <updated>2023-07-12T00:00:00+00:00</updated>
   <id>http://kimi.im/philharmonic</id>
   <content type="html">&lt;p&gt;
上周五去听了一场杭州爱乐乐团的交响乐，主题是纪念拉赫玛尼诺夫诞辰 150
周年。现场效果确实不同凡响，每一个乐器都在恰到好处的响起。组成了一阵壮观的画面。
&lt;/p&gt;

&lt;p&gt;
杭州爱乐乐团的英文是 Hangzhou Philharmonic Orchestra
&lt;/p&gt;

&lt;p&gt;
这个 Philharmonic 有两个意思，其一是爱好音乐的，其二是交响乐团。
&lt;/p&gt;

&lt;p&gt;
交响乐团的鼻祖是 1813 年成立于英国伦敦的音乐爱好社团“Loving harmony or
music”。而 philharmonic 则是从希腊语的 philo harmonika 组合而来。前者的意思是喜爱，后者的意思是协调和声。这个跟 philosophy, philology 都是相似组合。philosophy 来自希腊语 philo + sophia 喜爱智慧。philology 是源自希腊语 philo + logos 喜爱语言。
&lt;/p&gt;

&lt;p&gt;
但是，philharmonic 的读音需要注意下，它不是 [fil hɑ:&amp;rsquo;mɔnik] 而是
[filɑ:&amp;rsquo;mɔnik] h 的发音被和谐掉了。
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines CP.53  协程的参数不能通过引用传递</title>
   <link href="http://kimi.im/2023-07-11-cppcoreguidelines-cp53"/>
   <updated>2023-07-11T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-cp53</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;Parameters to coroutines should not be passed by reference&amp;rdquo;
&lt;/p&gt;

&lt;p&gt;
理由
&lt;/p&gt;

&lt;p&gt;
一旦协程执行到悬挂点，比如 &lt;code&gt;co_wait&lt;/code&gt; ，就会从同步代码段返回。在这个点之后，任何通过引用传递的参数都是空悬变量。任何其他地方访问这些引用变量都会产生未定义的行为结果，包括可能会写入自由区内存。
&lt;/p&gt;

&lt;p&gt;
坏例子
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;std&lt;/span&gt;::&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;future&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Class&lt;/span&gt;::&lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;do_something&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;std&lt;/span&gt;::&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;shared_ptr&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;input&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;co_await&lt;/span&gt; &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;something&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt;;

    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// DANGER: the reference to input may no longer be valid and may&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// be freed memory&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;co_return&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;*&lt;/span&gt;input &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;+&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;1&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
好例子
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;std&lt;/span&gt;::&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;future&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Class&lt;/span&gt;::&lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;do_something&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;std&lt;/span&gt;::&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;shared_ptr&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;input&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;co_await&lt;/span&gt; &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;something&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt;;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;co_return&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;*&lt;/span&gt;input &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;+&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;1&lt;/span&gt;; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// input is a copy that is still valid here&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;
注意
&lt;/p&gt;

&lt;p&gt;
在悬挂点之前访问引用传递的参数不会出问题。后续对该协程函数的修改，添加或移动悬挂点，就可能又引入这类问题。某些类型的协程会要求悬挂点在第一行代码之前，这时候，访问引用传递的参数都会是不安全的。通过值传递会更安全，因为值传递的参数会在协程框架内一直存在，所以在整个协程内访问值传递的参数都是安全的。
&lt;/p&gt;

&lt;p&gt;
注意
&lt;/p&gt;

&lt;p&gt;
对于传出结果的 output 参数，也存在同样的问题。协程中应该避免 output 参数。
&lt;/p&gt;

&lt;p&gt;
强化
&lt;/p&gt;

&lt;p&gt;
标记所有有引用传递的参数的协程。
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines CP.52  不要在线程挂起的地方保留锁或者其他同步原语</title>
   <link href="http://kimi.im/2023-07-10-cppcoreguidelines-cp52"/>
   <updated>2023-07-10T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-cp52</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;Do not hold locks or other synchronization primitives across
suspension points&amp;rdquo;
&lt;/p&gt;

&lt;p&gt;
注意，此处 primitive 在编程语言中是指：某个函数、操作符、或其他类型，内置在编程语言或操作系统中，为了满足程序的快速执行。并且，这些东西是无法通过开发语言单独实现的。primitive 一般有逻辑和算术运算符，加减乘除，或通过一组机器语言指令实现的功能，比如互斥锁、信号量之类。
&lt;/p&gt;

&lt;p&gt;
A function, operator, or type which is built into a programming
language (or operating system), either for speed of execution or
because it would be impossible to write it in the language.
Primitives typically include the arithmetic and logical operations
(plus, minus, and, or, etc.)  and are implemented by a small number of
machine language instructions.
&lt;/p&gt;

&lt;p&gt;
所以，本文按照惯例，将 primitive 翻译为原语.
&lt;/p&gt;

&lt;p&gt;
理由
&lt;/p&gt;

&lt;p&gt;
不然会导致很危险的死锁。某些类型的等待操作会允许当前线程执行一些额外的工作，直到异步操作完成。如果这个线程保持某个锁，然后又执行一些操作，需要获取这个相同的锁，这就会导致死锁。因为该线程早已锁住这个锁。
&lt;/p&gt;

&lt;p&gt;
如果协程在别的线程中获取这个锁的话，就会导致未定义的执行结果。就算我们设定显式的返回到当前线程，也会因为抛出异常，而导致协程无法继续执行，这时候，这个获取的锁就没有销毁释放。
&lt;/p&gt;

&lt;p&gt;
坏例子
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;std&lt;/span&gt;::&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;mutex&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;g_lock&lt;/span&gt;;

&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;std&lt;/span&gt;::&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;future&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Class&lt;/span&gt;::&lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;do_something&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;std&lt;/span&gt;::&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;lock_guard&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;std&lt;/span&gt;::&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;mutex&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;guard&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;g_lock&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;co_await&lt;/span&gt; &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;something&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt;; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// DANGER: coroutine has suspended execution&lt;/span&gt;
                          &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// while holding a lock&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;co_await&lt;/span&gt; &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;somethingElse&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
好例子
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;std&lt;/span&gt;::&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;mutex&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;g_lock&lt;/span&gt;;

&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;std&lt;/span&gt;::&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;future&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Class&lt;/span&gt;::&lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;do_something&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;
        &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;std&lt;/span&gt;::&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;lock_guard&lt;/span&gt;&lt;span style=&quot;color: #909183; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;std&lt;/span&gt;::&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;mutex&lt;/span&gt;&lt;span style=&quot;color: #909183; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;guard&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;g_lock&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt;;
        &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// modify data protected by lock&lt;/span&gt;
    &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;co_await&lt;/span&gt; &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;something&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt;; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// OK: lock has been released before&lt;/span&gt;
                          &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// coroutine suspends&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;co_await&lt;/span&gt; &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;somethingElse&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
注意
&lt;/p&gt;

&lt;p&gt;
这个模式的性能也不好。当程序执行到悬挂点 &lt;code&gt;co_await&lt;/code&gt; 时，当前函数就停止执行，其他代码开始运行。可能这个协程会悬挂很长时间。这样，整个悬挂时间中，锁都是被锁着的，其他线程如果需要这个锁的话，就无法执行。
&lt;/p&gt;

&lt;p&gt;
强化
&lt;/p&gt;

&lt;p&gt;
标记所有在协程悬挂点未释放的锁。
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines CP.51  协程的 lambda 中不要进行捕获</title>
   <link href="http://kimi.im/2023-07-09-cppcoreguidelines-cp51"/>
   <updated>2023-07-09T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-cp51</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;Do not use capturing lambdas that are coroutines&amp;rdquo;
&lt;/p&gt;

&lt;p&gt;
理由
&lt;/p&gt;

&lt;p&gt;
捕获模式，对于普通 lambda 来说正确的情况，对于协程 lambda 来说问题很严重。应用协程的时候，在 lambda 捕获变量的话，会导致，在第一个悬挂点后，访问释放的变量。对于引用计数的智能指针、可复制的类型来说，都可能存在这个问题。
&lt;/p&gt;

&lt;p&gt;
捕获对象的 lambda 会给闭包对象分配存储。通常是在栈上。这些存储会因为被捕获的对象离开了作用域范围，而失效。当这些被捕获的对象离开作用域范围之后，闭包对象也会离开作用域范围。
&lt;/p&gt;

&lt;p&gt;
普通 lambda 这个时候会结束运行，所以并无太多问题。而协程 lambda 可能会从悬挂点回复继续执行，这时候如果闭包对象已经被析构了，访问这些对象就会导致访问已释放的内存错误。
&lt;/p&gt;

&lt;p&gt;
坏例子
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;value&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;get_value&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;;
&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;std&lt;/span&gt;::&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;shared_ptr&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Foo&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;sharedFoo&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;get_foo&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
  &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;auto&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;lambda&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;[&lt;/span&gt;value, sharedFoo&lt;span style=&quot;color: #7388d6;&quot;&gt;]()&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;-&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;std&lt;/span&gt;::&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;future&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;
  &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;co_await&lt;/span&gt; &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;something&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;()&lt;/span&gt;;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &quot;sharedFoo&quot; and &quot;value&quot; have already been destroyed&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// the &quot;shared&quot; pointer didn&apos;t accomplish anything&lt;/span&gt;
  &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;;
  &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;lambda&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// the lambda closure object has now gone out of scope&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
好些的例子
&lt;/p&gt;

&lt;p&gt;
通过值传递给 lambda。
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;value&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;get_value&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;;
&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;std&lt;/span&gt;::&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;shared_ptr&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Foo&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;sharedFoo&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;get_foo&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
  &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// take as by-value parameter instead of as a capture&lt;/span&gt;
  &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;auto&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;lambda&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;[](&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;auto&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;sharedFoo&lt;/span&gt;, &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;auto&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;value&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;-&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;std&lt;/span&gt;::&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;future&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;
  &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;co_await&lt;/span&gt; &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;something&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;()&lt;/span&gt;;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// sharedFoo and value are still valid at this point&lt;/span&gt;
  &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;;
  &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;lambda&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;sharedFoo, value&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// the lambda closure object has now gone out of scope&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
最好的例子
&lt;/p&gt;

&lt;p&gt;
用函数做协程。
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;std&lt;/span&gt;::&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;future&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Class&lt;/span&gt;::&lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;do_something&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;value&lt;/span&gt;, &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;std&lt;/span&gt;::&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;shared_ptr&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Foo&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;sharedFoo&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
  &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;co_await&lt;/span&gt; &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;something&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt;;
  &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// sharedFoo and value are still valid at this point&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;SomeOtherFunction&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
  &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;value&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;get_value&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt;;
  &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;std&lt;/span&gt;::&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;shared_ptr&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Foo&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;sharedFoo&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;get_foo&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt;;
  &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;do_something&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;value, sharedFoo&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
强化
&lt;/p&gt;

&lt;p&gt;
标记作为协程的 lambda, 且捕获列表不是空的情况。
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines CP.50  互斥锁与其保护的数据同时定义，尽可能用 synchronized_value<T></title>
   <link href="http://kimi.im/2023-07-08-cppcoreguidelines-cp50"/>
   <updated>2023-07-08T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-cp50</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;Define a &lt;code&gt;mutex&lt;/code&gt; together with the data it guards. Use &lt;code&gt;synchronized_value&amp;lt;T&amp;gt;&lt;/code&gt; where possible&amp;rdquo;
&lt;/p&gt;

&lt;p&gt;
理由
&lt;/p&gt;

&lt;p&gt;
这样别人就很容易知道互斥锁要保护的数据是哪些。避免锁住错误的互斥锁，或没锁要锁的互斥锁。
&lt;/p&gt;

&lt;p&gt;
&lt;code&gt;synchronized_value&amp;lt;T&amp;gt;&lt;/code&gt; 可以保证数据带有一个互斥锁，并且在数据访问的时候，互斥锁正确的被锁住。
&lt;/p&gt;

&lt;p&gt;
例子
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;struct&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Record&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;std&lt;/span&gt;::&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;mutex&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;m&lt;/span&gt;;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// take this mutex before accessing other members&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ...&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;MyClass&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;struct&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;DataRecord&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;
       &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ...&lt;/span&gt;
    &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;synchronized_value&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;DataRecord&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;data&lt;/span&gt;; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// Protect the data with a mutex&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;
&lt;/pre&gt;
&lt;/div&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines CP.44  给 lock_guard, unique_lock 声明变量</title>
   <link href="http://kimi.im/2023-07-07-cppcoreguidelines-cp44"/>
   <updated>2023-07-07T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-cp44</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;Remember to name your &lt;code&gt;lock_guard&lt;/code&gt; s and &lt;code&gt;unique_lock&lt;/code&gt; s&amp;rdquo;
&lt;/p&gt;

&lt;p&gt;
理由
&lt;/p&gt;

&lt;p&gt;
例子
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;// global mutexes&lt;/span&gt;
&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;mutex&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;m1&lt;/span&gt;;
&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;mutex&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;m2&lt;/span&gt;;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;unique_lock&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;mutex&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;m1&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// (A)&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;lock_guard&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;mutex&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;m2&lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// (B)&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// do work in critical section ...&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
看起来很正常。但是是不对的。在 (A) 处， &lt;code&gt;m1&lt;/code&gt; 是默认构造的局部
&lt;code&gt;unique_lock&lt;/code&gt; ，它会遮盖掉全局的 &lt;code&gt;::m1&lt;/code&gt; 这样也就不会锁住 &lt;code&gt;::m1&lt;/code&gt; 。在 (B) 处，构造了一个匿名的临时 &lt;code&gt;lock_guard&lt;/code&gt; 并且锁住 &lt;code&gt;::m2&lt;/code&gt; ，但是立即走出了作用域范围，马上释放了 &lt;code&gt;::m2&lt;/code&gt; 。对于 &lt;code&gt;f()&lt;/code&gt; 函数的其他部分来说，并没有锁住任何互斥锁。
&lt;/p&gt;

&lt;p&gt;
强化
&lt;/p&gt;

&lt;p&gt;
标记所有匿名的 &lt;code&gt;lock_guard&lt;/code&gt; 和 &lt;code&gt;unique_lock&lt;/code&gt;
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines CP.43 减少关键代码执行路径中时间的消耗</title>
   <link href="http://kimi.im/2023-07-06-cppcoreguidelines-cp43"/>
   <updated>2023-07-06T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-cp43</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;Minimize time spent in a critical section&amp;rdquo;
&lt;/p&gt;

&lt;p&gt;
理由
&lt;/p&gt;

&lt;p&gt;
线程锁住互斥锁的时间越短，其他线程等待的时间也就越少。线程挂起和恢复的成本很高。
&lt;/p&gt;

&lt;p&gt;
例子
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;do_something&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// bad&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;unique_lock&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;mutex&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;lck&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;my_lock&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
    &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;do0&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt;;  &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// preparation: does not need lock&lt;/span&gt;
    &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;do1&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt;;  &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// transaction: needs locking&lt;/span&gt;
    &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;do2&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt;;  &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// cleanup: does not need locking&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
这里，我们锁住互斥锁的时间有点太多了：我们不该在需要互斥锁之前锁住它。我们应该在不需要互斥锁的时候马上释放。我们可以这么改进：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;do_something&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// bad&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;do0&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt;;  &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// preparation: does not need lock&lt;/span&gt;
    my_lock.&lt;span style=&quot;color: #3a5fcd; font-weight: bold; font-style: italic;&quot;&gt;lock&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt;;
    &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;do1&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt;;  &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// transaction: needs locking&lt;/span&gt;
    my_lock.&lt;span style=&quot;color: #3a5fcd; font-weight: bold; font-style: italic;&quot;&gt;unlock&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt;;
    &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;do2&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt;;  &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// cleanup: does not need locking&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
但是，这里违反了 RAII 规则，不太安全。我们可以添加一个代码块：
&lt;/p&gt;


&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;do_something&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// OK&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;do0&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt;;  &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// preparation: does not need lock&lt;/span&gt;
    &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;
        &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;unique_lock&lt;/span&gt;&lt;span style=&quot;color: #909183; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;mutex&lt;/span&gt;&lt;span style=&quot;color: #909183; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;lck&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;my_lock&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt;;
        &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;do1&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;()&lt;/span&gt;;  &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// transaction: needs locking&lt;/span&gt;
    &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;
    &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;do2&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt;;  &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// cleanup: does not need locking&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
强化
&lt;/p&gt;

&lt;p&gt;
一般来说比较难。可以标记“裸露”的 &lt;code&gt;lock()&lt;/code&gt; 和 &lt;code&gt;unlock()&lt;/code&gt; 。
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines CP.42  在 wait 中设置判断条件</title>
   <link href="http://kimi.im/2023-07-05-cppcoreguidelines-cp42"/>
   <updated>2023-07-05T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-cp42</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;Don’t wait without a condition&amp;rdquo;
&lt;/p&gt;

&lt;p&gt;
理由
&lt;/p&gt;

&lt;p&gt;
在 wait 中不设置判断条件的话，会发现线程醒来之后并没有任务要处理。
&lt;/p&gt;

&lt;p&gt;
坏例子
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;std&lt;/span&gt;::&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;condition_variable&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;cv&lt;/span&gt;;
&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;std&lt;/span&gt;::&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;mutex&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;mx&lt;/span&gt;;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;thread1&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;while&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;true&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;
        &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// do some work ...&lt;/span&gt;
        &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;std&lt;/span&gt;::&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;unique_lock&lt;/span&gt;&lt;span style=&quot;color: #909183; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;std&lt;/span&gt;::&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;mutex&lt;/span&gt;&lt;span style=&quot;color: #909183; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;lock&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;mx&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt;;
        cv.&lt;span style=&quot;color: #3a5fcd; font-weight: bold; font-style: italic;&quot;&gt;notify_one&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;()&lt;/span&gt;;    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// wake other thread&lt;/span&gt;
    &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;thread2&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;while&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;true&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;
        &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;std&lt;/span&gt;::&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;unique_lock&lt;/span&gt;&lt;span style=&quot;color: #909183; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;std&lt;/span&gt;::&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;mutex&lt;/span&gt;&lt;span style=&quot;color: #909183; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;lock&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;mx&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt;;
        cv.&lt;span style=&quot;color: #3a5fcd; font-weight: bold; font-style: italic;&quot;&gt;wait&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;lock&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt;;    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// might block forever&lt;/span&gt;
        &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// do work ...&lt;/span&gt;
    &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
这里，如果某个其他线程用掉了 &lt;code&gt;thread1&lt;/code&gt; 的通知， &lt;code&gt;thread2&lt;/code&gt; 会一直等待。
&lt;/p&gt;

&lt;p&gt;
例子
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;template&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;typename&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Sync_queue&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;public&lt;/span&gt;:
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold; font-style: italic;&quot;&gt;put&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;val&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold; font-style: italic;&quot;&gt;put&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;val&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold; font-style: italic;&quot;&gt;get&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;val&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;private&lt;/span&gt;:
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;mutex&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;mtx&lt;/span&gt;;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;condition_variable&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;cond&lt;/span&gt;;    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// this controls access&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;list&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;q&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;template&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;typename&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Sync_queue&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;::&lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;put&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;val&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;lock_guard&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;mutex&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;lck&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;mtx&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
    q.&lt;span style=&quot;color: #3a5fcd; font-weight: bold; font-style: italic;&quot;&gt;push_back&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;val&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
    cond.&lt;span style=&quot;color: #3a5fcd; font-weight: bold; font-style: italic;&quot;&gt;notify_one&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;template&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;typename&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Sync_queue&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;::&lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;get&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;val&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;unique_lock&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;mutex&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;lck&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;mtx&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
    cond.&lt;span style=&quot;color: #3a5fcd; font-weight: bold; font-style: italic;&quot;&gt;wait&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;lck, &lt;span style=&quot;color: #909183;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;this&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;]&lt;/span&gt; &lt;span style=&quot;color: #909183;&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;!&lt;/span&gt;q.&lt;span style=&quot;color: #3a5fcd; font-weight: bold; font-style: italic;&quot;&gt;empty&lt;/span&gt;&lt;span style=&quot;color: #709870;&quot;&gt;()&lt;/span&gt;; &lt;span style=&quot;color: #909183;&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// prevent spurious wakeup&lt;/span&gt;
    &lt;span style=&quot;color: #000000;&quot;&gt;val&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; q.&lt;span style=&quot;color: #3a5fcd; font-weight: bold; font-style: italic;&quot;&gt;front&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt;;
    q.&lt;span style=&quot;color: #3a5fcd; font-weight: bold; font-style: italic;&quot;&gt;pop_front&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
现在，如果消息是空的，调用 &lt;code&gt;get()&lt;/code&gt; 的线程会醒来，发现其他线程在它之前已经调用了 &lt;code&gt;geet()&lt;/code&gt; ，那么这个线程会马上睡眠，继续等待。
&lt;/p&gt;

&lt;p&gt;
强化
&lt;/p&gt;

&lt;p&gt;
标记 wait 中没设置判断条件的情况。
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>单词本：sine qua non</title>
   <link href="http://kimi.im/2023-07-05-sine-qua-non"/>
   <updated>2023-07-05T00:00:00+00:00</updated>
   <id>http://kimi.im/sine-qua-non</id>
   <content type="html">&lt;p&gt;
英国精神科专家 Anthony Storr 的研究认为，人类的亲密接触并不是幸福的唯一来源，也不能促进人类的成长。他总结：Conversation enriches the
understanding, but solitude is the school of genius.  对话促进理解，但是孤独是天才的学校。也就是说适当的与世隔绝可以促进人的思想进步。
Solitude can be just as important for both happiness and productivity.
&lt;/p&gt;

&lt;p&gt;
所以 Storr&amp;rsquo;s conclusion is that we&amp;rsquo;re wrong to consider intimate
interaction as the &lt;b&gt;sine qua non&lt;/b&gt; of human thriving.
&lt;/p&gt;

&lt;p&gt;
这里，用到了英语拉丁文言文 sine qua non, 它的意思是“必要条件”。sine 是英语 without, 法语 sans, 没有。 qua 是 qui 的 ablative 离格，夺格。就是英语中的 which, 法语中的 qui.  non 就是 not.  合起来就是没有它则不行，也就是必要条件，essential condition.
&lt;/p&gt;

&lt;p&gt;
比如 Patience is a &lt;b&gt;sine qua non&lt;/b&gt; for a good teacher. 做个优秀教师必不可少的条件是要有耐心.
&lt;/p&gt;

&lt;p&gt;
再比如 Tara Isabella Burton 写的一本书《SELF-MADE: Creating Our
Identities from Da Vinci to the Kardashians(创造自己：从达芬奇到卡戴珊)》提到了巴黎时装客：
&lt;/p&gt;

&lt;p&gt;
The Parisian dandies, who prized artistic creation as the “key to
human superiority,” sought to separate themselves from the foule, or
the masses. The &lt;b&gt;sine qua non&lt;/b&gt; of the dandy was his ability to “cut
[himself] off from other people — their rules, their customs — and
show exactly how unlike other people one can be.”
&lt;/p&gt;

&lt;p&gt;
巴黎时装达人追求与众不同，成为他们的必不可少的条件是把自己和他人区分开。
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines CP.41 减少线程的创建和销毁</title>
   <link href="http://kimi.im/2023-07-04-cppcoreguidelines-cp41"/>
   <updated>2023-07-04T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-cp41</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;Minimize thread creation and destruction&amp;rdquo;
&lt;/p&gt;

&lt;p&gt;
理由
&lt;/p&gt;

&lt;p&gt;
线程创建成本高。
&lt;/p&gt;

&lt;p&gt;
例子
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;worker&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Message&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;m&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// process&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;dispatcher&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;istream&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;is&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;for&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Message&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;m&lt;/span&gt;; is &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;gt;&amp;gt;&lt;/span&gt; m; &lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;
        run_list.&lt;span style=&quot;color: #3a5fcd; font-weight: bold; font-style: italic;&quot;&gt;push_back&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;thread&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;worker, m&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
这段代码给每一个消息生成一个线程。任务完成后， &lt;code&gt;run_list&lt;/code&gt; 会销毁线程。
&lt;/p&gt;

&lt;p&gt;
其实我们可以用让一组创建好的工作线程来处理消息。
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Sync_queue&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Message&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;work&lt;/span&gt;;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;dispatcher&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;istream&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;is&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;for&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Message&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;m&lt;/span&gt;; is &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;gt;&amp;gt;&lt;/span&gt; m; &lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;
        work.&lt;span style=&quot;color: #3a5fcd; font-weight: bold; font-style: italic;&quot;&gt;put&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;m&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;worker&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;for&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Message&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;m&lt;/span&gt;; &lt;span style=&quot;color: #000000;&quot;&gt;m&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; work.&lt;span style=&quot;color: #3a5fcd; font-weight: bold; font-style: italic;&quot;&gt;get&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;()&lt;/span&gt;; &lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;
        &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// process&lt;/span&gt;
    &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;workers&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;  &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// set up worker threads (specifically 4 worker threads)&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;joining_thread&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;w1&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;worker&lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;joining_thread&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;w2&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;worker&lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;joining_thread&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;w3&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;worker&lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;joining_thread&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;w4&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;worker&lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
注意
&lt;/p&gt;

&lt;p&gt;
如果你的系统有很好的线程池，尽量用起来。如果你的系统有很好的消息队列，尽量用起来。
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines CP.40 减小上下文切换</title>
   <link href="http://kimi.im/2023-07-03-cppcoreguidelines-cp40"/>
   <updated>2023-07-03T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-cp40</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;Minimize context switching&amp;rdquo;
&lt;/p&gt;

&lt;p&gt;
理由
&lt;/p&gt;

&lt;p&gt;
上下文切换成本高昂。
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>单词本：auspice</title>
   <link href="http://kimi.im/2023-07-03-auspice"/>
   <updated>2023-07-03T00:00:00+00:00</updated>
   <id>http://kimi.im/auspice</id>
   <content type="html">&lt;p&gt;
上次，我游玩了云栖竹径之后，学到了一个新单词：&lt;a href=&quot;./2023-04-05-auspicious&quot;&gt;auspicious&lt;/a&gt;, 这个是在云栖竹径公园入口的英文介绍中提到的：It is said that some &lt;b&gt;auspicious&lt;/b&gt;
colorful clouds came and lingered on here.
&lt;/p&gt;

&lt;p&gt;
昨天读大规模敏捷开发框架的时候，遇到了 auspice 这个词：
&lt;/p&gt;

&lt;p&gt;
Operating under the &lt;b&gt;auspices&lt;/b&gt; of LPM, the LACE also plays a significant
role in fostering operational excellence.
&lt;/p&gt;

&lt;p&gt;
这句话是说，Lean-Agile Center of Excellence 在 Lean Portfolio
Management 的支持下，促进卓越运营。
&lt;/p&gt;

&lt;p&gt;
所以，在这句话里 auspice 的意思是“赞助、支持”。这和 auspice 的本意倒是有些关系。这个词源自 auspex 。在拉丁语中，auspex 是观察鸟的人、占卜者。大概因为，古代的人都是要一些大自然的吉兆，才会开展行动。所以 auspice
就引申为支持、赞助了吧。
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines CP.32 在不关联的线程间共享所有权用 shared_ptr</title>
   <link href="http://kimi.im/2023-07-02-cppcoreguidelines-cp32"/>
   <updated>2023-07-02T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-cp32</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;To share ownership between unrelated threads use &lt;code&gt;shared_ptr&lt;/code&gt;&amp;rdquo;
&lt;/p&gt;

&lt;p&gt;
理由
&lt;/p&gt;

&lt;p&gt;
如果线程不相关联（比如不在一个作用域范围，或一个在另一个的生命周期内），而且它们需要共享某些自由存储区的内存，这些内存空间后续需要删除。那么
&lt;code&gt;shared_ptr&lt;/code&gt; 是唯一能确保安全删除的方式。
&lt;/p&gt;


&lt;p&gt;
注意
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;可以共享静态对象（比如全局的），因为它不属于任何线程，即无需某个线程负责删除它。&lt;/li&gt;
&lt;li&gt;一个自由存储区的对象，不需要删除的话，可以共享。&lt;/li&gt;
&lt;li&gt;一个对象术语某个线程，只要第二个线程存活时间不超过第一个个线程，也可以个安全的共享。&lt;/li&gt;
&lt;/ul&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines CP.31 在线程间传递少量数据的时候，用值传递，不要用引用或指针</title>
   <link href="http://kimi.im/2023-07-01-cppcoreguidelines-cp31"/>
   <updated>2023-07-01T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-cp31</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;Pass small amounts of data between threads by value, rather than by
reference or pointer&amp;rdquo;
&lt;/p&gt;

&lt;p&gt;
理由
&lt;/p&gt;

&lt;p&gt;
少量数据值传递比共享成本低。因为共享需要某些锁机制。数据副本自然有各自的所有权，避免了可能存在的数据竞争。
&lt;/p&gt;

&lt;p&gt;
注意
&lt;/p&gt;

&lt;p&gt;
很难精确定义“少量数据”。
&lt;/p&gt;

&lt;p&gt;
例子
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;string&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;modify1&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;string&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;modify2&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;string&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;fct&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;string&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;s&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;auto&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;res&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;async&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;modify1, s&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
    &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;async&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;modify2, s&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
&lt;code&gt;modify1&lt;/code&gt; 会复制 2 个字符串值。 &lt;code&gt;modify2&lt;/code&gt; 不会。从另一个角度看， &lt;code&gt;modify1&lt;/code&gt;
的实现和单线程代码的实现没什么差别。但是 &lt;code&gt;modify2&lt;/code&gt; 的实现就需要某些锁机制来防止数据竞争。如果字符串很短，少于 10 个字符，调用 &lt;code&gt;modify1&lt;/code&gt; 速度很快。其实大部分的成本在于线程切换。如果字符串很长，超出 100 万个字符，复制两次就不太好了。
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines CP.26 不要分离线程</title>
   <link href="http://kimi.im/2023-06-30-cppcoreguidelines-cp26"/>
   <updated>2023-06-30T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-cp26</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;Don’t detach() a thread&amp;rdquo;
&lt;/p&gt;

&lt;p&gt;
理由
&lt;/p&gt;

&lt;p&gt;
要让线程任务存活在其创建的作用域范围外的情况很常见，但是通过分离的方式实现，会很难监控线程、很难与分离的线程通信。尤其是，很难确保线程是否按照预期的方式结束，线程可能会存活超出预期的时间。
&lt;/p&gt;

&lt;p&gt;
例子
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;heartbeat&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;use&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;std&lt;/span&gt;::&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;thread&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;t&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;heartbeat&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;             &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// don&apos;t join; heartbeat is&lt;/span&gt;
                                          &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// meant to run forever&lt;/span&gt;
    t.&lt;span style=&quot;color: #3a5fcd; font-weight: bold; font-style: italic;&quot;&gt;detach&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt;;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ...&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
这个例子展示了使用线程的很合理的方式。这种情况 &lt;code&gt;detach()&lt;/code&gt; 用得很多。但是，有一个问题。我们如何监控这个分离的线程，看看它是存活的还是结束了。
&lt;code&gt;heartbeat&lt;/code&gt; 线程可能出错，对于某些系统来说，丢失 &lt;code&gt;heartbeat&lt;/code&gt; 可能是很严重的问题。所以，我们需要跟 &lt;code&gt;heartbeat&lt;/code&gt; 线程通信，比如通过消息流，或者条件变量。
&lt;/p&gt;

&lt;p&gt;
也可以把线程的放在创建的作用域范围外，这样就一直存活。
&lt;/p&gt;

&lt;p&gt;
对于以下例子
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;heartbeat&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;;

&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;gsl&lt;/span&gt;::&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;joining_thread&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;t&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;heartbeat&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;             &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// heartbeat is meant to&lt;/span&gt;
                                              &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// run &quot;forever&quot;&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
&lt;code&gt;heartbeat&lt;/code&gt; 可能会出错，然后一直运行，比如出现硬件问题。
&lt;/p&gt;

&lt;p&gt;
有时候，我们需要分离创建和保管线程的时间点：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;heartbeat&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;;

&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;unique_ptr&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;gsl&lt;/span&gt;::&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;joining_thread&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;tick_tock&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;nullptr&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;use&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// heartbeat is meant to run as long as tick_tock lives&lt;/span&gt;
    &lt;span style=&quot;color: #000000;&quot;&gt;tick_tock&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;make_unique&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;gsl&lt;/span&gt;::&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;joining_thread&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;heartbeat&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ...&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;
强化
&lt;/p&gt;

&lt;p&gt;
标记 &lt;code&gt;detach()&lt;/code&gt;
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines CP.25 gsl::joining_thread 比 std::thread 好</title>
   <link href="http://kimi.im/2023-06-29-cppcoreguidelines-cp25"/>
   <updated>2023-06-29T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-cp25</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;Prefer &lt;code&gt;gsl::joining_thread&lt;/code&gt; over &lt;code&gt;std::thread&lt;/code&gt;&amp;rdquo;
&lt;/p&gt;

&lt;p&gt;
理由
&lt;/p&gt;

&lt;p&gt;
&lt;code&gt;joining_thread&lt;/code&gt; 会在线程作用域范围结束的时候联合（join）。分离的线程很难监控。很保证在分离的线程正确无误。
&lt;/p&gt;

&lt;p&gt;
坏例子
&lt;/p&gt;


&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;std&lt;/span&gt;::cout &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;Hello &quot;&lt;/span&gt;; &lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;struct&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;F&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; operator&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;std&lt;/span&gt;::cout &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;parallel world &quot;&lt;/span&gt;; &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;main&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;std&lt;/span&gt;::&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;thread&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;t1&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;f&lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;;      &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// f() executes in separate thread&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;std&lt;/span&gt;::&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;thread&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;t2&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;F&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;()&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;;    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// F()() executes in separate thread&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;  &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// spot the bugs&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
例子
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;std&lt;/span&gt;::cout &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;Hello &quot;&lt;/span&gt;; &lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;struct&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;F&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; operator&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;std&lt;/span&gt;::cout &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;parallel world &quot;&lt;/span&gt;; &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;main&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;std&lt;/span&gt;::&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;thread&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;t1&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;f&lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;;      &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// f() executes in separate thread&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;std&lt;/span&gt;::&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;thread&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;t2&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;F&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;()&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;;    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// F()() executes in separate thread&lt;/span&gt;

    t1.&lt;span style=&quot;color: #3a5fcd; font-weight: bold; font-style: italic;&quot;&gt;join&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt;;
    t2.&lt;span style=&quot;color: #3a5fcd; font-weight: bold; font-style: italic;&quot;&gt;join&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;  &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// one bad bug left&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
注意
&lt;/p&gt;

&lt;p&gt;
把一直常存的线程设为全局，外层作用域，或放在自由存储区。不要 &lt;code&gt;detach()&lt;/code&gt;
&lt;/p&gt;

&lt;p&gt;
注意
&lt;/p&gt;

&lt;p&gt;
因为老的代码和第三方库都在用 &lt;code&gt;std::thread&lt;/code&gt; ，此条规则很难遵循。
&lt;/p&gt;

&lt;p&gt;
强化
&lt;/p&gt;

&lt;p&gt;
标记使用了 &lt;code&gt;std::thread&lt;/code&gt;  的地方：
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;建议使用 &lt;code&gt;gsl::joining_thread&lt;/code&gt;  或 C++20  的 &lt;code&gt;std::jthread&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;如果线程要分离，建议所有权转移到外部作用域&lt;/li&gt;
&lt;li&gt;警告不确定线程是要联合还是分离&lt;/li&gt;
&lt;/ul&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines CP.24 把一个线程当作是全局的容器</title>
   <link href="http://kimi.im/2023-06-28-cppcoreguidelines-cp24"/>
   <updated>2023-06-28T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-cp24</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;Think of a thread as a global container&amp;rdquo;
&lt;/p&gt;

&lt;p&gt;
理由
&lt;/p&gt;

&lt;p&gt;
为了确保指针安全，避免泄露，我们要考虑线程中用到了什么指针。如果线程被分离（detach），我们就能安全的把指针传递给静态自由存储区对象。
&lt;/p&gt;

&lt;p&gt;
例子
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;*&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;p&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ...&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;p&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;99&lt;/span&gt;;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ...&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;glob&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;33&lt;/span&gt;;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;some_fct&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;*&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;p&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;x&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;77&lt;/span&gt;;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;std&lt;/span&gt;::&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;thread&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;t0&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;f, &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt;x&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;           &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// bad&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;std&lt;/span&gt;::&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;thread&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;t1&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;f&lt;/span&gt;, &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;p&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;            &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// bad&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;std&lt;/span&gt;::&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;thread&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;t2&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;f, &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt;glob&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;        &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// OK&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;auto&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;q&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;make_unique&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;99&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;std&lt;/span&gt;::&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;thread&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;t3&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;f, q.&lt;span style=&quot;color: #3a5fcd; font-weight: bold; font-style: italic;&quot;&gt;get&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;()&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;      &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// bad&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ...&lt;/span&gt;
    t0.&lt;span style=&quot;color: #3a5fcd; font-weight: bold; font-style: italic;&quot;&gt;detach&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt;;
    t1.&lt;span style=&quot;color: #3a5fcd; font-weight: bold; font-style: italic;&quot;&gt;detach&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt;;
    t2.&lt;span style=&quot;color: #3a5fcd; font-weight: bold; font-style: italic;&quot;&gt;detach&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt;;
    t3.&lt;span style=&quot;color: #3a5fcd; font-weight: bold; font-style: italic;&quot;&gt;detach&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt;;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ...&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
这里的 OK 指的是只要线程用到指向这些对象的指针，这些对象都在作用域范围内。这里 bad 指的是一个线程可能会用到一个指针，而这个指针所指向的对象已经被销毁。线程并行运行并不影响这些指针的生存周期或者所有权。我们可以把这些线程当作是在 &lt;code&gt;some_fct&lt;/code&gt; 中调用的函数对象。
&lt;/p&gt;

&lt;p&gt;
注意
&lt;/p&gt;

&lt;p&gt;
在分离的线程中使用静态存储的对象也可能存在问题：如果线程在程序结束之后，还在运行，可能会在对象销毁的时候同时在运行，这就出现访问该对象的竞争条件。
&lt;/p&gt;

&lt;p&gt;
注意
&lt;/p&gt;

&lt;p&gt;
如果你不用 &lt;code&gt;detach()&lt;/code&gt; 而且用 &lt;code&gt;gsl::joining_thread&lt;/code&gt; 这条规则就显得有些多余了。不过把这里的代码转换成遵循那些指南规则的代码可能比较麻烦，或者甚至在某些第三方库中不太可能。在这种情况下，为了满足生存周期安全和类型安全来说，这条规则就很有必要。
&lt;/p&gt;

&lt;p&gt;
一般来说，无法判断是否执行了一个线程的 &lt;code&gt;detach()&lt;/code&gt; ，不过一些简单案例还是很容易判断的。如果我们无法证明一个线程没 &lt;code&gt;detach()&lt;/code&gt; ，我们必须假定它会被分离，继续在它被构建的范围之外存活。这样，就要针对线程使用到的对象的生存周期和所有权进行强化。
&lt;/p&gt;

&lt;p&gt;
强化
&lt;/p&gt;

&lt;p&gt;
标记可能会被 &lt;code&gt;detach()&lt;/code&gt;  的线程使用了局部变量的情况。
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>单词本：inundate</title>
   <link href="http://kimi.im/2023-06-28-inundate"/>
   <updated>2023-06-28T00:00:00+00:00</updated>
   <id>http://kimi.im/inundate</id>
   <content type="html">&lt;p&gt;
最近看数据建模的文章，读到这句：
&lt;/p&gt;

&lt;p&gt;
Therefore, any given new task could be &lt;b&gt;inundated&lt;/b&gt; with massive amounts
of irrelevant or redundant data.
&lt;/p&gt;

&lt;p&gt;
往往，很多数据分析的任务不是没有数据，这些任务反而是被大量不相关的、冗余重复的数据淹没。
&lt;/p&gt;

&lt;p&gt;
这里出现了 inundate 这个词，意思是淹没。
&lt;/p&gt;

&lt;p&gt;
比如 When the river burst its banks, the fields were &lt;b&gt;inundated&lt;/b&gt;.  河岸决堤后，田地遭洪水淹没。前面的例句用了淹没的引申意思，即难以应付、不胜负荷。
&lt;/p&gt;

&lt;p&gt;
这个词来自拉丁语 inundare 的过去分词 inundatus.  unda 是波浪的意思，合起来大概可以理解为在波浪中。也就是淹没在大浪中。
&lt;/p&gt;

&lt;p&gt;
细心的读者一定发现了，在前面的例句中，unda 也出现在 redundant 这个词里。确实，redundant （多余）这个词中，re- 表示再次，unda 也就是波浪。再一次的波浪，是不是就是多余的、冗余的。正如歌词一波还未平息，一波又来袭击。这又来袭击的一波是多余的 redundant 的一波。
&lt;/p&gt;

&lt;p&gt;
再联想一下，abundant 丰富、充足的。ab- 是超出，unda 是波浪、水流。拉丁语本意是过流、超出流量的意思。
&lt;/p&gt;

&lt;p&gt;
overabundant 就已经 over 太多了，即太充足的、过多的。重阳就是
overabundant yang.
&lt;/p&gt;

&lt;p&gt;
superabundant 是极多的。 a superabundant harvest 特大丰收。
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines CP.23 把 joining_thread 当作一个带作用域范围的容器</title>
   <link href="http://kimi.im/2023-06-27-cppcoreguidelines-cp23"/>
   <updated>2023-06-27T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-cp23</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;Think of a joining thread as a scoped container&amp;rdquo;
&lt;/p&gt;

&lt;p&gt;
理由
&lt;/p&gt;

&lt;p&gt;
为了确保指针安全，避免泄露，我们要考虑下，在线程中用到了哪些指针。如果一个线程会自动 join，我们就可以安全传递这些线程作用域范围内的指针。
&lt;/p&gt;

&lt;p&gt;
例子
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;*&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;p&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ...&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;p&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;99&lt;/span&gt;;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ...&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;glob&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;33&lt;/span&gt;;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;some_fct&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;*&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;p&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;x&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;77&lt;/span&gt;;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;joining_thread&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;t0&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;f, &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt;x&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;           &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// OK&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;joining_thread&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;t1&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;f&lt;/span&gt;, &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;p&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;            &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// OK&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;joining_thread&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;t2&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;f, &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt;glob&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;        &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// OK&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;auto&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;q&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;make_unique&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;99&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;joining_thread&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;t3&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;f, q.&lt;span style=&quot;color: #3a5fcd; font-weight: bold; font-style: italic;&quot;&gt;get&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;()&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;      &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// OK&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ...&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;
&lt;code&gt;gsl::joining_thread&lt;/code&gt; 是一个带有析构器，能 join 且不能 &lt;code&gt;detached()&lt;/code&gt; 的线程。这里说的“OK”是指指针所指向的对象能在线程存活时间内一直有效。线程是否并行运行不会影响存活周期、指针所有权。可以把这些线程当作是在 &lt;code&gt;some_fct&lt;/code&gt; 中调用的函数对象。
&lt;/p&gt;

&lt;p&gt;
强化
&lt;/p&gt;

&lt;p&gt;
保障 &lt;code&gt;joining_thread&lt;/code&gt; 不被 &lt;code&gt;detach()&lt;/code&gt; 。这样之后，就可以检查强化一般的生命周期和所有权规则。
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines CP.22 保有一个锁的时候不要调用未知代码</title>
   <link href="http://kimi.im/2023-06-26-cppcoreguidelines-cp22"/>
   <updated>2023-06-26T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-cp22</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;Never call unknown code while holding a lock (e.g., a callback)&amp;rdquo;
&lt;/p&gt;

&lt;p&gt;
理由
&lt;/p&gt;

&lt;p&gt;
如果你不知道某段代码做什么，你就可能遇到死锁。
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;do_this&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Foo&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;*&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;p&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;lock_guard&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;mutex&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;lck&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;my_mutex&lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ... do something ...&lt;/span&gt;
    p&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #3a5fcd; font-weight: bold; font-style: italic;&quot;&gt;act&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;my_data&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ...&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
如果你不知道 &lt;code&gt;Foo::act&lt;/code&gt; 是做什么的，可能是一个虚函数，调用派生类的成员，而该派生类可能目前还没开发出来。也可能使递归调用 &lt;code&gt;do_this&lt;/code&gt; 函数，导致
&lt;code&gt;my_mutex&lt;/code&gt; 死锁。可能会因为某个其他互斥锁而锁住了，不能在某个合理的时间内返回。也就会导致任何调用这个函数的其他地方产生延时。
&lt;/p&gt;

&lt;p&gt;
例子
&lt;/p&gt;

&lt;p&gt;
常见的有“调用未知代码”问题的例子是，调用一个函数，而这个函数尝试对同一个对象进行锁定使用。这类问题通常可以使用 &lt;code&gt;recursive_mutex&lt;/code&gt; 解决。
&lt;/p&gt;

&lt;p&gt;
例子
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;recursive_mutex&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;my_mutex&lt;/span&gt;;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;template&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;typename&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Action&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;do_something&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Action&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;unique_lock&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;recursive_mutex&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;lck&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;my_mutex&lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ... do something ...&lt;/span&gt;
    &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;this&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// f will do something to *this&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ...&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
如果 &lt;code&gt;f()&lt;/code&gt; 在 &lt;code&gt;*this&lt;/code&gt; 进行操作，我们必须在调用前，保证对象的不变式。
&lt;/p&gt;

&lt;p&gt;
强化
&lt;/p&gt;

&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;标记保有非递归互斥锁的时候，调用虚函数的情况。&lt;/li&gt;
&lt;li&gt;标记保有非递归互斥锁的时候，调用回调函数的情况。&lt;/li&gt;
&lt;/ul&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines CP.21 用 std::lock() 或 std::scoped_lock 获取多个互斥锁</title>
   <link href="http://kimi.im/2023-06-25-cppcoreguidelines-cp21"/>
   <updated>2023-06-25T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-cp21</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;Use std::lock() or std::scoped_lock to acquire multiple mutexes&amp;rdquo;
&lt;/p&gt;

&lt;p&gt;
理由
&lt;/p&gt;

&lt;p&gt;
例子
&lt;/p&gt;

&lt;p&gt;
以下例子会导致死锁：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;// thread 1&lt;/span&gt;
&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;lock_guard&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;mutex&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;lck1&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;m1&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;
&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;lock_guard&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;mutex&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;lck2&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;m2&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;

&lt;span style=&quot;color: #3F7F5F;&quot;&gt;// thread 2&lt;/span&gt;
&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;lock_guard&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;mutex&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;lck2&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;m2&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;
&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;lock_guard&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;mutex&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;lck1&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;m1&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
应该使用 &lt;code&gt;lock()&lt;/code&gt;:
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;// thread 1&lt;/span&gt;
&lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;lock&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;m1, m2&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;
&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;lock_guard&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;mutex&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;lck1&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;m1&lt;/span&gt;, &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;adopt_lock&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;
&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;lock_guard&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;mutex&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;lck2&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;m2&lt;/span&gt;, &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;adopt_lock&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;

&lt;span style=&quot;color: #3F7F5F;&quot;&gt;// thread 2&lt;/span&gt;
&lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;lock&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;m2, m1&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;
&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;lock_guard&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;mutex&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;lck2&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;m2&lt;/span&gt;, &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;adopt_lock&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;
&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;lock_guard&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;mutex&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;lck1&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;m1&lt;/span&gt;, &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;adopt_lock&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
或者用 C++17 的机制：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;// thread 1&lt;/span&gt;
&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;scoped_lock&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;mutex&lt;/span&gt;, &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;mutex&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;lck1&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;m1&lt;/span&gt;, &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;m2&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;

&lt;span style=&quot;color: #3F7F5F;&quot;&gt;// thread 2&lt;/span&gt;
&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;scoped_lock&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;mutex&lt;/span&gt;, &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;mutex&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;lck2&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;m2&lt;/span&gt;, &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;m1&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
这里，开发 &lt;code&gt;thread1&lt;/code&gt; 和 &lt;code&gt;thread2&lt;/code&gt; 的人仍然没有协调互斥锁的顺序，但是顺序已经不重要。
&lt;/p&gt;

&lt;p&gt;
注意
&lt;/p&gt;

&lt;p&gt;
在实际代码中，互斥锁的名字不一定能告诉程序员它的使用目的，以及获取顺序。在实际代码中，互斥锁并不总是在连续的几行代码中获取。
&lt;/p&gt;

&lt;p&gt;
在 C++17 中，可以简单的这样写：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;lock_guard&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;lck1&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;m1&lt;/span&gt;, &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;adopt_lock&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
然后，就能推导出互斥锁的类型。
&lt;/p&gt;

&lt;p&gt;
强化
&lt;/p&gt;

&lt;p&gt;
检测出捕获多个互斥锁的地方。尽管不太好判断，但是捕捉前面介绍的简单例子相对还方便。
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>单词本：faux pas</title>
   <link href="http://kimi.im/2023-06-25-faux-pas"/>
   <updated>2023-06-25T00:00:00+00:00</updated>
   <id>http://kimi.im/faux-pas</id>
   <content type="html">&lt;p&gt;
不久前看了 Digital Minimalism, 作者在分析为什么我们总是强制自己看手机消息通知的时候，说到：
&lt;/p&gt;

&lt;p&gt;
Our Paleolithic brain categorizes ignoring a newly arrived text the
same as snubbing the tribe member trying to attract your attention by
the communal fire: a potentially dangerous social &lt;b&gt;faux pas&lt;/b&gt;.
&lt;/p&gt;

&lt;p&gt;
在旧石器时代，如果某个人怠慢了部落成员的社群篝火信号的话，会使一个危险的社会失礼行为。所以，人类的大脑会很紧张，不敢忽视手机上收到的社交媒体消息。
&lt;/p&gt;

&lt;p&gt;
也就是说，我们不敢疏忽他人发来的消息，是一种根深蒂固的自我保护意识。因为，在严重依赖于社群才能存活的旧石器时代，我们就已经习得了这样一种条件反射：万万不可怠慢社群成员，一旦脱离群体，所要面临的就是饥饿、黑暗、寒冷、野兽。所以，现代人一收到新的消息，大脑就会立即紧张，是不是有谁在找我，我不赶紧回复，找我的会不会觉得我无礼，以后不再接纳我。于是，就会立即拿起手机查看消息，回复消息。很快，时间就慢慢流逝了。
&lt;/p&gt;

&lt;p&gt;
这里 faux pas 是个法语词组。faux 是错误的，false 的意思，而 pas 则是脚步、step 的意思。比如 Faites deux pas en avant 往前走两步。faux pas 组合起来，就是走错的步伐，引申为失礼、失言、失态。
&lt;/p&gt;

&lt;p&gt;
比如：Every year numerous tourists fall foul of local customers
failing to brush up on the cultural &lt;b&gt;faux pas&lt;/b&gt; of the destinations they
visit.  每年，好多游客违背当地风俗，造成文化上的失态。
&lt;/p&gt;

&lt;p&gt;
顺便整理几个 cultural faux pas:
&lt;/p&gt;
&lt;ol class=&quot;org-ol&quot;&gt;
&lt;li&gt;在阿拉伯是不允许传紧身服的，尤其是去宗教场合。&lt;/li&gt;
&lt;li&gt;梵蒂冈天主教教堂不要允许穿露肩、露肚脐、露大腿的衣服进去。&lt;/li&gt;
&lt;li&gt;在英国，手心向内的 V 手势，有很强的挑衅意思，而在巴西，竖起大拇指表示“你被戴绿帽了”。&lt;/li&gt;
&lt;li&gt;泰国，头是神圣的，脚是肮脏的。不能用脚指人，不能碰人脑袋。&lt;/li&gt;
&lt;li&gt;巴基斯坦，尊重老人极其重要，见面打招呼要站直、鞠躬。坐着跟老人打招呼极其不礼貌。&lt;/li&gt;
&lt;li&gt;称呼苏格兰人、爱尔兰人以及威尔士人为英国人 English 也很不礼貌。&lt;/li&gt;
&lt;li&gt;尼泊尔不握手，要用合十礼（namaste）。&lt;/li&gt;
&lt;li&gt;德国不可以提前祝别人生日快乐，可能会认为折寿，或者会导致活不到生日那天。可见德国人很有忧患意识。他们有句谚语：Man soll den Tag nicht
vor dem Abend loben. 夜晚没到、莫赞整日。&lt;/li&gt;
&lt;/ol&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines CP.20 用 RAII, 不要用基础的 lock()/unlock()</title>
   <link href="http://kimi.im/2023-06-24-cppcoreguidelines-cp20"/>
   <updated>2023-06-24T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-cp20</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;Use RAII, never plain lock()/unlock()&amp;rdquo;
&lt;/p&gt;

&lt;p&gt;
理由
&lt;/p&gt;

&lt;p&gt;
避免因为锁没释放导致的诡异问题。
&lt;/p&gt;

&lt;p&gt;
坏例子
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;mutex&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;mtx&lt;/span&gt;;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;do_stuff&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    mtx.&lt;span style=&quot;color: #3a5fcd; font-weight: bold; font-style: italic;&quot;&gt;lock&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt;;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ... do stuff ...&lt;/span&gt;
    mtx.&lt;span style=&quot;color: #3a5fcd; font-weight: bold; font-style: italic;&quot;&gt;unlock&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;

&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
迟早的，会有人忘记那里有一个 &lt;code&gt;mtx.unlock()&lt;/code&gt;, 然后在之前加一个 &lt;code&gt;return&lt;/code&gt; 或在执行代码中抛出个异常，或者其他什么东西。
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;mutex&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;mtx&lt;/span&gt;;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;do_stuff&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;unique_lock&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;mutex&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;lck&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;mtx&lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ... do stuff ...&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
强化
&lt;/p&gt;

&lt;p&gt;
标记调用 &lt;code&gt;lock()&lt;/code&gt; 和 &lt;code&gt;unlock()&lt;/code&gt; 的代码。
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines CP.9 尽量用工具验证并行计算代码</title>
   <link href="http://kimi.im/2023-06-23-cppcoreguidelines-cp9"/>
   <updated>2023-06-23T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-cp9</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;Whenever feasible use tools to validate your concurrent code&amp;rdquo;
&lt;/p&gt;

&lt;p&gt;
经验表明，把并行计算代码设计正确非常困难。而且编译时检查、运行时检查以及测试都很难有效的发现并行计算中的错误。一些细微的并行错误会导致很严重的后果，包括内存错乱、死锁以及安全漏洞。
&lt;/p&gt;

&lt;p&gt;
注意
&lt;/p&gt;

&lt;p&gt;
做到线程安全是非常有难度的。经常需要非常有经验的程序员：一个重要的策略是利用工具规避这些风险。有很多商业的与开源的、研究性的与生产性的工具可以利用。但是人们的需求和限制条件千差万别，所以我们也无法提供放之四海而皆准的建议。不过可以提一些：
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;静态强化工具： clang 和老版本的 GCC 提供一些静态标注关键字去标注线程安全属性。准确的使用这些技术可以把很多类线程安全问题转换成编译时错误。这些标注一般都是局部的，比如用特定互斥锁保护某个特定成员变量。这种方法也很容易习得。然而，与其他很多静态工具一样，也经常会出现误报的情况，也有应该要报警却没有发现的情况。&lt;/li&gt;
&lt;li&gt;动态强化工具：clang thread sanitizer （即 TSAN ）是一个强大的动态工具：它能修改编译过程，添加内从访问检查语句，执行你的程序，识别出可能存在的数据竞争情况。其代价有两方面，一方面内存会增加 5-10 倍，另一方面， CPU 运行速度会慢 2-20 倍。这类动态工具最好应用于集成测试、
canary push 或有多个线程的单元测试。如果 TSAN 发现问题，就是实际存在的数据竞争情况，但是也仅仅是在当前执行过程中出现的情况。&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;
强化
&lt;/p&gt;

&lt;p&gt;
根据实际应用开发者的需求，选择最有价值的支持工具。
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>单词本：wissen und kennen</title>
   <link href="http://kimi.im/2023-06-23-wissen-kennen"/>
   <updated>2023-06-23T00:00:00+00:00</updated>
   <id>http://kimi.im/wissen-kennen</id>
   <content type="html">&lt;p&gt;
德语中有两个动词，都是“知道”的意思。一个是 wissen, 另一个是 kennen.
那么，都是怎么用的呢？
&lt;/p&gt;

&lt;p&gt;
首先，了解下它们的动词变位：
&lt;/p&gt;

&lt;p&gt;
wissen:
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;Ich weiß&lt;/li&gt;
&lt;li&gt;Du weißt&lt;/li&gt;
&lt;li&gt;Er/sie/es weiß&lt;/li&gt;
&lt;li&gt;Wir wissen&lt;/li&gt;
&lt;li&gt;Ihr wisst&lt;/li&gt;
&lt;li&gt;Sie wissen&lt;/li&gt;
&lt;li&gt;sie wissen&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
kennen
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;Ich kenne&lt;/li&gt;
&lt;li&gt;Du kennst&lt;/li&gt;
&lt;li&gt;Er/sie/es kennt&lt;/li&gt;
&lt;li&gt;Wir kennen&lt;/li&gt;
&lt;li&gt;Ihr kennt&lt;/li&gt;
&lt;li&gt;Sie kennen&lt;/li&gt;
&lt;li&gt;sie kennen&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
这里要注意，wissen 是个强变化动词，单数人称变位的时候，会有一点小小的变音，-iss 变成了 -eiß。
&lt;/p&gt;

&lt;p&gt;
wissen  用于对知识和事实的知道。比如：
&lt;/p&gt;

&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;Weißst du, wo mein Vater ist?&lt;/li&gt;
&lt;li&gt;Ich weißst nicht, was ich sagen soll.&lt;/li&gt;
&lt;li&gt;Was ich nicht weiß, macht mich nicht heiß.  我不知道的事情，不会令我发热。这是个德语谚语，即无知无畏。&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
kennen 则表示熟悉、认识。比如：
&lt;/p&gt;

&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;Kennt ihr dieses Lied?  你熟悉这首歌吗？&lt;/li&gt;
&lt;li&gt;Sie kennt Kimi schon seit Jahren.  她认识 Kimi 好多年了。&lt;/li&gt;
&lt;li&gt;Kennst du meinen Bruder?  你认识我哥哥吗？&lt;/li&gt;
&lt;li&gt;Er kennt Hangzhou sehr gut.  他很熟悉杭州。&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
再比如，这些句子中，两个词有些微妙的差异：
&lt;/p&gt;

&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;Kennst du den Weg? Weißt du, wohin der Weg läuft?  你熟悉这条路吗？你知道这条路通往哪里？这里前面的问句问的是你对这条路是不是熟悉，后面则是问这条路通向哪里的事实你知不知道。&lt;/li&gt;
&lt;li&gt;Ich weiß den Weg dahin, aber ich kenne ihn nicht.  这个回答是说，我知道这路会通往哪里的事实，但是我不熟悉这条路，我没走过或者我走得不多。&lt;/li&gt;
&lt;li&gt;Kennst du den Autor des Buches? Weißst du den Autor des Buches?  第一句是问你跟这些书的作者熟不熟悉。第二句则是问你知不知道这些书的作者这个事实。&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;
但是，在德语里，会说一门语言则用 können, Ich kann gut Deutsch.  我很会德语。Ich kann kein Englisch.  我不会英语。
&lt;/p&gt;

&lt;p&gt;
说一个人熟悉某个领域则用 sich auskennen, 比如 Er kennt sich in der
Chemie aus.  他知道熟知化学。
&lt;/p&gt;

&lt;p&gt;
Bis bald!
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines CP.8 不要通过 volatile 进行同步处理</title>
   <link href="http://kimi.im/2023-06-22-cppcoreguidelines-cp8"/>
   <updated>2023-06-22T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-cp8</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;Don’t try to use &lt;code&gt;volatile&lt;/code&gt; for synchronization&amp;rdquo;
&lt;/p&gt;

&lt;p&gt;
理由
&lt;/p&gt;

&lt;p&gt;
与其他语言不同，在 C++ 中， &lt;code&gt;volatile&lt;/code&gt; 不提供原子性操作能力。不能在线程之间同步，不能防止编译器或硬件对指令重排序引起的问题。简单说，就是
&lt;code&gt;volatile&lt;/code&gt; 不提供任何并行运算支持。
&lt;/p&gt;

&lt;p&gt;
坏例子
&lt;/p&gt;


&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;free_slots&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;max_slots&lt;/span&gt;; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// current source of memory for objects&lt;/span&gt;

&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Pool&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;*&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;use&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;n&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;free_slots&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;--&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt;pool&lt;span style=&quot;color: #7388d6;&quot;&gt;[&lt;/span&gt;n&lt;span style=&quot;color: #7388d6;&quot;&gt;]&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
这里，我们遇到一个问题：在单线程环境下，这段代码没有任何问题。但是如果多个线程执行这段代码，就会在 &lt;code&gt;free_slots&lt;/code&gt; 这个变量上出现数据竞争情况。两个线程可能从 &lt;code&gt;free_slots&lt;/code&gt; 得到一样的数值。所以，熟悉其他编程语言的人，可能会通过以下方法解决这个问题：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;volatile&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;free_slots&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;max_slots&lt;/span&gt;; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// current source of memory for objects&lt;/span&gt;

&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Pool&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;*&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;use&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;n&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;free_slots&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;--&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt;pool&lt;span style=&quot;color: #7388d6;&quot;&gt;[&lt;/span&gt;n&lt;span style=&quot;color: #7388d6;&quot;&gt;]&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
然而，这样做并不能达到同步的效果：数据竞争仍然存在！
&lt;/p&gt;

&lt;p&gt;
C++ 提供的机制是 &lt;code&gt;atomic&lt;/code&gt;  类型：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;atomic&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;free_slots&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;max_slots&lt;/span&gt;; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// current source of memory for objects&lt;/span&gt;

&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Pool&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;*&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;use&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;n&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;free_slots&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;--&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt;pool&lt;span style=&quot;color: #7388d6;&quot;&gt;[&lt;/span&gt;n&lt;span style=&quot;color: #7388d6;&quot;&gt;]&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
现在，这个操作是原子操作，而非分步骤的：读取-自减-写入，不然在操作过程中，其他线程可能在其中插入进行操作。
&lt;/p&gt;

&lt;p&gt;
其他情况
&lt;/p&gt;

&lt;p&gt;
在复杂的例子中可以使用 &lt;code&gt;mutex&lt;/code&gt;
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines  CP.4 以任务为视角考虑问题，而不是线程</title>
   <link href="http://kimi.im/2023-06-21-cppcoreguidelines-cp4"/>
   <updated>2023-06-21T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-cp4</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;Think in terms of tasks, rather than threads&amp;rdquo;
&lt;/p&gt;

&lt;p&gt;
理由
&lt;/p&gt;

&lt;p&gt;
线程是技术实现上的概念，是以机器时间考虑问题。而任务则是应用术语，某些你想要做的事情，也有可能和其他任务并行执行。应用概念更容易进行分析。
&lt;/p&gt;

&lt;p&gt;
例子
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;some_fun&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;std&lt;/span&gt;::&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;string&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;msg&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// bad: less expressive and more error-prone&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;std&lt;/span&gt;::&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;thread&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;publisher&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;]&lt;/span&gt; &lt;span style=&quot;color: #909183;&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;std&lt;/span&gt;::cout &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; msg; &lt;span style=&quot;color: #909183;&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;

    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;auto&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;pubtask&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;std&lt;/span&gt;::&lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;async&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;]&lt;/span&gt; &lt;span style=&quot;color: #909183;&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;std&lt;/span&gt;::cout &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; msg; &lt;span style=&quot;color: #909183;&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;  &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// OK&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ...&lt;/span&gt;
    publisher.&lt;span style=&quot;color: #3a5fcd; font-weight: bold; font-style: italic;&quot;&gt;join&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;

&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
注意
&lt;/p&gt;

&lt;p&gt;
&lt;code&gt;async()&lt;/code&gt; 是个例外。这个标准库函数是底层、面向机器、线程+锁层级的。它是一个必要的基础功能。但是，我们必须提升其抽象层级：为了提高工作效率、提高可靠性、提高性能。这里是关于是否使用高层抽象/面向应用的库的一个争论点。如果可能，可以基于标准库函数构建。
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>单词本：carte blanche</title>
   <link href="http://kimi.im/2023-06-21-carte-blanche"/>
   <updated>2023-06-21T00:00:00+00:00</updated>
   <id>http://kimi.im/carte-blanche</id>
   <content type="html">&lt;p&gt;
大概同事看我太闲，所以又让我负责中国研发中心的信息安全工作。所以，继续读一些信息安全相关资料。
&lt;/p&gt;

&lt;p&gt;
Just because a device is trusted and onboarded to a Fabric does not
mean that it should have &lt;b&gt;carte blanche&lt;/b&gt; access to all the features and
functionality of all other devices on the Fabric.
&lt;/p&gt;

&lt;p&gt;
这句话是说，不要因为组织机构信任设备，安全部署了设备，这个设备就可以全权访问网络中的任何其他设备的功能。这里是说除了授权联网，还要进行权限管理。
&lt;/p&gt;

&lt;p&gt;
carte blanche 是从法语里传来的。字面意思是空白文件。法律意义上是全权委托、署名空白纸的意思。就是一个授权文件上面是空白的，只有授权人的署名。那么委托人就可以随便在上面写被授权的内容，就可以做任何事情了。
&lt;/p&gt;

&lt;p&gt;
再举几个例子：
&lt;/p&gt;

&lt;p&gt;
Le chorégraphe a &lt;b&gt;carte blanche&lt;/b&gt; pour réinterpréter ce classique.  编舞有解释自己经典的自由权。
&lt;/p&gt;

&lt;p&gt;
Le directeur nous a donné &lt;b&gt;carte blanche&lt;/b&gt; sur ce projet.  总监让我们全权负责本项目。
&lt;/p&gt;

&lt;p&gt;
德语 Blankovollmacht 也很形象，Eine Blankovollmacht ist eine
umfassende, eventuell sogar allumfassende Vollmacht.  首先， die
Vollmacht 的意思是授权代理，字面意思就是全部能做。Blank 就是法语的
blanche ，空白的。合起来就是空白的全权委托。
&lt;/p&gt;

&lt;p&gt;
再比如印度的 TAG 展示的&lt;a href=&quot;https://indiaeducationdiary.in/tech-avant-garde-to-showcase-project-carte-blanche-at-janbhagidari-event-g20-4th-education-summit-held-at-pune-2&quot;&gt;一个项目&lt;/a&gt;，就用了 Carte Blanche 命名。
&lt;/p&gt;

&lt;p&gt;
TAG 公司的全称是 Tech Avant-Garde, &lt;a href=&quot;./2023-05-11-avant-garde&quot;&gt;avant-garde&lt;/a&gt; 正是我们不久前遇到过的单词，意思是先锋、前卫。
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines CP.3 尽量减少可写数据的显式共享</title>
   <link href="http://kimi.im/2023-06-20-cppcoreguidelines-cp3"/>
   <updated>2023-06-20T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-cp3</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;Minimize explicit sharing of writable data&amp;rdquo;
&lt;/p&gt;

&lt;p&gt;
理由
&lt;/p&gt;

&lt;p&gt;
如果你不共享可写数据，你就不会有数据竞争。你越少共享数据，越不容易忘记在数据访问进行同步。你越少共享数据，越不需要等待数据解锁。从而可以提升性能。
&lt;/p&gt;

&lt;p&gt;
例子
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;bool&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;validate&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;vector&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Reading&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;
&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Graph&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Temp_node&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;temperature_gradients&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;vector&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Reading&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;
&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Image&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;altitude_map&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;vector&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Reading&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;
&lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ...&lt;/span&gt;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;process_readings&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;vector&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Reading&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;surface_readings&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;auto&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;h1&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;async&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;]&lt;/span&gt; &lt;span style=&quot;color: #909183;&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #709870;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;!&lt;/span&gt;&lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;validate&lt;/span&gt;&lt;span style=&quot;color: #907373;&quot;&gt;(&lt;/span&gt;surface_readings&lt;span style=&quot;color: #907373;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #709870;&quot;&gt;)&lt;/span&gt;
                &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;throw&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Invalid_data&lt;/span&gt;&lt;span style=&quot;color: #709870;&quot;&gt;{}&lt;/span&gt;; &lt;span style=&quot;color: #909183;&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;auto&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;h2&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;async&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;]&lt;/span&gt; &lt;span style=&quot;color: #909183;&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;temperature_gradients&lt;/span&gt;&lt;span style=&quot;color: #709870;&quot;&gt;(&lt;/span&gt;surface_readings&lt;span style=&quot;color: #709870;&quot;&gt;)&lt;/span&gt;; &lt;span style=&quot;color: #909183;&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;auto&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;h3&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;async&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;]&lt;/span&gt; &lt;span style=&quot;color: #909183;&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;altitude_map&lt;/span&gt;&lt;span style=&quot;color: #709870;&quot;&gt;(&lt;/span&gt;surface_readings&lt;span style=&quot;color: #709870;&quot;&gt;)&lt;/span&gt;; &lt;span style=&quot;color: #909183;&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ...&lt;/span&gt;
    h1.&lt;span style=&quot;color: #3a5fcd; font-weight: bold; font-style: italic;&quot;&gt;get&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt;;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;auto&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;v2&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; h2.&lt;span style=&quot;color: #3a5fcd; font-weight: bold; font-style: italic;&quot;&gt;get&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt;;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;auto&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;v3&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; h3.&lt;span style=&quot;color: #3a5fcd; font-weight: bold; font-style: italic;&quot;&gt;get&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt;;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ...&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
如果没有这些 &lt;code&gt;const&lt;/code&gt;, 我们就需要检查每一个异步调用的函数，是不是在使用
&lt;code&gt;surface_readings&lt;/code&gt; 这个变量的时候存在数据竞争。一旦把 &lt;code&gt;surface_readings&lt;/code&gt;
设置成 &lt;code&gt;const&lt;/code&gt;, 我们就只要关心函数本身的逻辑是否正确，不用担心数据竞争了。
&lt;/p&gt;

&lt;p&gt;
注意
&lt;/p&gt;

&lt;p&gt;
我们可以安全高效地共享不可变数据。不需要锁机制。用常量的地方不存在数据竞争。
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines CP.2 避免数据竞争</title>
   <link href="http://kimi.im/2023-06-19-cppcoreguidelines-cp2"/>
   <updated>2023-06-19T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-cp2</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;Avoid data races&amp;rdquo;
&lt;/p&gt;

&lt;p&gt;
理由
&lt;/p&gt;

&lt;p&gt;
除非你确实做到了，不然的话，无法保证代码是否正确工作，一些莫名其妙的错误会一直在那。
&lt;/p&gt;

&lt;p&gt;
注意
&lt;/p&gt;

&lt;p&gt;
总归一句话，如果两个线程要同时访问同一个对象，在没有同步机制的情况下，至少一个线程是写线程（进行一些非 &lt;code&gt;const&lt;/code&gt; 的操作），你就会遇到数据竞争的情况。
&lt;/p&gt;

&lt;p&gt;
坏例子
&lt;/p&gt;

&lt;p&gt;
有很多数据竞争的例子，不少目前还运行在产品软件中。一个简单的例子：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;get_id&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
  &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;static&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;id&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;1&lt;/span&gt;;
  &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;std&lt;/span&gt;::&lt;span style=&quot;color: #3a5fcd; font-weight: bold; font-style: italic; text-decoration: underline;&quot;&gt;this_thread&lt;/span&gt;&lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;::sleep_for&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;std&lt;/span&gt;::&lt;span style=&quot;color: #3a5fcd; font-weight: bold; font-style: italic; text-decoration: underline;&quot;&gt;chrono&lt;/span&gt;&lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;::milliseconds&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;30&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
  &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;id&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;++&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;main&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;std&lt;/span&gt;::&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;thread&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;t1&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;get_id&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;std&lt;/span&gt;::&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;thread&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;t2&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;get_id&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;std&lt;/span&gt;::&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;thread&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;t3&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;get_id&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
    t1.&lt;span style=&quot;color: #3a5fcd; font-weight: bold; font-style: italic;&quot;&gt;join&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt;;
    t2.&lt;span style=&quot;color: #3a5fcd; font-weight: bold; font-style: italic;&quot;&gt;join&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt;;
    t3.&lt;span style=&quot;color: #3a5fcd; font-weight: bold; font-style: italic;&quot;&gt;join&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt;;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;std&lt;/span&gt;::cout &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;get_id&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;pre class=&quot;example&quot;&gt;
3
&lt;/pre&gt;


&lt;p&gt;
此处的自增是数据竞争的一个例子。可能会出现以下这些错误：
&lt;/p&gt;

&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;线程 A 加载 id 的值，然后操作系统从 A 切换到其他线程，在此过程，其他线程把 id 的值增加了 100 次，然后操作系统切换到 A，A 继续把增加的 id
值 2 写入 id。&lt;/li&gt;
&lt;li&gt;也可能，线程 A 和 B 加载 id，同时增加 id 的值，这时候，A 和 B 得到的
id 值是一样的。&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
局部的静态变量是数据竞争的常见根源。
&lt;/p&gt;

&lt;p&gt;
坏例子：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;fstream&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;fs&lt;/span&gt;, &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;regex&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;pattern&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;array&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;double&lt;/span&gt;, &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;max&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;buf&lt;/span&gt;;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;sz&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;read_vec&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;fs, buf, max&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// read from fs into buf&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;gsl&lt;/span&gt;::&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;span&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;double&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;s&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;buf&lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ...&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;auto&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;h1&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;async&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;]&lt;/span&gt; &lt;span style=&quot;color: #909183;&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;sort&lt;/span&gt;&lt;span style=&quot;color: #709870;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;std&lt;/span&gt;::&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;execution&lt;/span&gt;::par, s&lt;span style=&quot;color: #709870;&quot;&gt;)&lt;/span&gt;; &lt;span style=&quot;color: #909183;&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// spawn a task to sort&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ...&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;auto&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;h2&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;async&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;]&lt;/span&gt; &lt;span style=&quot;color: #909183;&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;find_all&lt;/span&gt;&lt;span style=&quot;color: #709870;&quot;&gt;(&lt;/span&gt;buf, sz, pattern&lt;span style=&quot;color: #709870;&quot;&gt;)&lt;/span&gt;; &lt;span style=&quot;color: #909183;&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// spawn a task to find matches&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ...&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
这里，我们发现 buf 的元素之间存在数据竞争（sort 会读取和写入数据）。所有的数据竞争都很讨厌。这里，我们发现程序栈中存在数据竞争。并非所有的数据竞争都是这么容易发觉的。
&lt;/p&gt;

&lt;p&gt;
坏例子：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;// code not controlled by a lock&lt;/span&gt;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;unsigned&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;val&lt;/span&gt;;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;val &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;5&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ... other thread can change val here ...&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;switch&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;val&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;case&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;0&lt;/span&gt;: &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ...&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;case&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;1&lt;/span&gt;: &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ...&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;case&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;2&lt;/span&gt;: &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ...&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;case&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;3&lt;/span&gt;: &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ...&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;case&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;4&lt;/span&gt;: &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ...&lt;/span&gt;
    &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
因为编译器不知道 &lt;code&gt;val&lt;/code&gt; 的值会被改变，所以，在编译实现的过程中，可能使用
5 个地址的跳转表的方式实现。然后，如果 &lt;code&gt;val&lt;/code&gt; 的值超出了 0 到 4 的范围的话，程序可能就跳转到某个错误的地方继续执行。实际上，更恐怖的是，通过检查生成的代码，你可能能设计出某个条件，让程序跳转到你想要执行的地方。这样就产生了一个安全漏洞。
&lt;/p&gt;

&lt;p&gt;
强化
&lt;/p&gt;

&lt;p&gt;
有些商业或开源的软件能尝试解决这个问题，但是，请注意，这会产生额外成本，也会有一些盲点。静态工具通常会产生很多误报，而运行时进行检测的工具又非常昂贵。我们希望有更好的工具。用多个工具，通常能比单个工具捕捉更多的问题。
&lt;/p&gt;

&lt;p&gt;
其他一些方式可以避免数据竞争：
&lt;/p&gt;

&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;避免全局数据&lt;/li&gt;
&lt;li&gt;避免静态变量&lt;/li&gt;
&lt;li&gt;在程序栈中用更多具体类型，而不要指针传来传去&lt;/li&gt;
&lt;li&gt;用不可变数据，比如字面量（literal）、 &lt;code&gt;constexpr&lt;/code&gt; 以及 &lt;code&gt;const&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
</content>
 </entry>
 
 <entry>
   <title>单词本：toe the line</title>
   <link href="http://kimi.im/2023-06-19-toe-the-line"/>
   <updated>2023-06-19T00:00:00+00:00</updated>
   <id>http://kimi.im/toe-the-line</id>
   <content type="html">&lt;p&gt;
今天介绍 Carla A. Harris 在 Lead to Win 中用到的一个词 toe the line:
&lt;/p&gt;

&lt;p&gt;
In decades past, many CEOs controlled employees through fear. They
threatened any employees who didn’t &lt;b&gt;toe the line&lt;/b&gt; and follow orders
with demotions and job loss.
&lt;/p&gt;

&lt;p&gt;
这段话的意思是：多年以来很多 CEO 都是通过恐吓来控制员工，他们吓唬那些不听话的员工，给他们降级、炒他们鱿鱼。
&lt;/p&gt;

&lt;p&gt;
这句话中，toe the line 的意思是听从命令，遵守规则，to do what is
expected.
&lt;/p&gt;

&lt;p&gt;
这个词最早来自军事活动，军人们站立的时候要整整齐齐，一排人的脚指头要对齐成一条线，引申过来，就是遵从权威者的要求了。
&lt;/p&gt;

&lt;p&gt;
再比如：
&lt;/p&gt;

&lt;p&gt;
Sarah didn&amp;rsquo;t agree with the policy, but she decided to &lt;b&gt;toe the company
line&lt;/b&gt;.  Sarah 不赞成公司政策，但是还是决定服从公司要求。
&lt;/p&gt;

&lt;p&gt;
Venture capitalist Dovi Frances refuses to &lt;b&gt;toe the tech industry&amp;rsquo;s
political line&lt;/b&gt;, and warns that Israel is unprepared for the AI future.
&lt;/p&gt;

&lt;p&gt;
这些例子里 toe the line 扩展成 toe the company line, toe the tech
industry&amp;rsquo;s political line.  可以理解服从（toe） 为所对应的主体的规则（line）。
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines CP.1 预先假定代码会是多线程程序的一部分</title>
   <link href="http://kimi.im/2023-06-18-cppcoreguidelines-cp1"/>
   <updated>2023-06-18T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-cp1</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;Assume that your code will run as part of a multi-threaded program&amp;rdquo;
&lt;/p&gt;

&lt;p&gt;
理由
&lt;/p&gt;

&lt;p&gt;
目前没用到并发，很难确定未来某个时候会不会用到。比如：代码重用了。没用到线程的库在程序其他部分的使用了，而这些程序用到了线程。
&lt;/p&gt;

&lt;p&gt;
注意，此规则对于代码库来说比较重要，对于单独的应用相对还好。不过，随着时间推移，很多代码片段也会运行在某些多线程环境。
&lt;/p&gt;

&lt;p&gt;
坏例子
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;double&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;cached_computation&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;x&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// bad: these statics cause data races in multi-threaded usage&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;static&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;cached_x&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;0.0&lt;/span&gt;;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;static&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;double&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;cached_result&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;COMPUTATION_OF_ZERO&lt;/span&gt;;

    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;cached_x &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;!=&lt;/span&gt; x&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;
        &lt;span style=&quot;color: #000000;&quot;&gt;cached_x&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; x;
        &lt;span style=&quot;color: #000000;&quot;&gt;cached_result&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;computation&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;x&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt;;
    &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; cached_result;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
尽管 &lt;code&gt;cached_computation&lt;/code&gt; 的计算在单线程环境下能很完美地工作。但是如果放到多线程环境，两个静态便利的结果就会产生数据竞争。于是，会有难以预料的行为结果了。
&lt;/p&gt;

&lt;p&gt;
好例子
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;struct&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;ComputationCache&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;cached_x&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;0&lt;/span&gt;;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;double&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;cached_result&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;COMPUTATION_OF_ZERO&lt;/span&gt;;

    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;double&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold; font-style: italic;&quot;&gt;compute&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;x&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;
        &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;cached_x &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;!=&lt;/span&gt; x&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #909183;&quot;&gt;{&lt;/span&gt;
            &lt;span style=&quot;color: #000000;&quot;&gt;cached_x&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; x;
            &lt;span style=&quot;color: #000000;&quot;&gt;cached_result&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;computation&lt;/span&gt;&lt;span style=&quot;color: #709870;&quot;&gt;(&lt;/span&gt;x&lt;span style=&quot;color: #709870;&quot;&gt;)&lt;/span&gt;;
        &lt;span style=&quot;color: #909183;&quot;&gt;}&lt;/span&gt;
        &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; cached_result;
    &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
这段代码中， &lt;code&gt;chached_x&lt;/code&gt; 是 &lt;code&gt;ComputationCache&lt;/code&gt; 对象的成员数据，而不是静态的共享数据。这个代码重构把多线程的处理上升到调用代码的地方。如果调用此接口的程序是单线程程序，那么依然可以使用全局的 &lt;code&gt;ComputationCache&lt;/code&gt; ，如果是多线程程序，那么你可能需要给每一个线程分配一个 &lt;code&gt;ComputationCache&lt;/code&gt; 实例。这个重构后的函数，不在尝试管理 &lt;code&gt;cached_x&lt;/code&gt; 的资源分配。这里应用到了单一责任原则（&lt;a href=&quot;./2023-02-10-srp&quot;&gt;Single Responsibility Principle, SRP&lt;/a&gt;）。
&lt;/p&gt;

&lt;p&gt;
在这个典型的例子中，针对线程安全的代码重构，也同时提升了代码的可重用性。不难想象，一个单线程程序可能需要在程序的多个不同的部分用到多个
&lt;code&gt;ComputationCache&lt;/code&gt; 实例，而不互相重置缓存的数据。
&lt;/p&gt;

&lt;p&gt;
还有其他一些支持线程安全的方式：
&lt;/p&gt;

&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;不要把状态变量设置为 &lt;code&gt;static&lt;/code&gt; 而是设置为 &lt;code&gt;thread_local&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;添加并发控制，比如，通过一个静态的 &lt;code&gt;std::mutex&lt;/code&gt; 保护对静态变量的访问&lt;/li&gt;
&lt;li&gt;添加编译开关，让非线程安全的代码在多线程环境无法编译或运行&lt;/li&gt;
&lt;li&gt;提供两个实现方案：一个用于单线程环境，一个用于多线程环境&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
例外
&lt;/p&gt;

&lt;p&gt;
如果确定代码永远不会在多线程环境下执行的话，就可以不用考虑此条规则。
&lt;/p&gt;

&lt;p&gt;
注意：很多例子表明，一开始觉得不会在多线程环境中执行，而多年以后却需要支持多线程。这种程序通常会痛苦的发现需要很多精力避免数据竞争。所以，对于永远不会在多线程环境执行的代码，请明确进行标记，最好是添加编译或运行时保障机制，确保尽早发现可能出现的 bug。
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>单词本：nonchalant</title>
   <link href="http://kimi.im/2023-06-18-nonchalant"/>
   <updated>2023-06-18T00:00:00+00:00</updated>
   <id>http://kimi.im/nonchalant</id>
   <content type="html">&lt;p&gt;
读到这句话：
&lt;/p&gt;

&lt;p&gt;
My manager, though, seemed remarkably &lt;b&gt;nonchalant&lt;/b&gt;. 我的经理似乎相当的漠不关心。
&lt;/p&gt;

&lt;p&gt;
这里 nonchalant  是冷淡的、漠不关心的、不感兴趣的意思。
&lt;/p&gt;

&lt;p&gt;
这个词是从法语里来的。比如 La vivacité de son esprit démentait son
allure nonchalante.  他活泼的灵活和冷淡的外表互相冲突。
&lt;/p&gt;

&lt;p&gt;
所以，在英语里，这个 nonchalant 要读成法语发音，大概类似去掉四声的“侬想浪”。
&lt;/p&gt;

&lt;p&gt;
另外，我们也知道，法语 non 是用来否定的，所以 chalant 就和冷漠相反，就是不冷漠、关心的。
&lt;/p&gt;

&lt;p&gt;
追根溯源，chalant 来自拉丁语 calere 取暖。所以，很多爱美人士每天控制的卡路里 calorie 跟 calere 也是同源的，即 caloris。另外，这也是所谓的小卡，而大卡，large calorie 则是 kilokalorie, 也就是千卡，小卡的 1000 倍。大卡小卡容易搞错，所以科学家又定义了 joule 焦耳，用来表示大卡。其他相关的词，还有，比如 calorifics 热学，calorific 发热的。
&lt;/p&gt;

&lt;p&gt;
nonchalance 是 nonchalant 的名词形式。其实很多时候，能保持 nonchalant
是一种好的心理素质。千字文中说“容止若思、言辞安定”就是这种淡然自若、气定神闲的 nonchalant ease 状态。这样，才能冷静决策，发挥良好。比如 She
defeated all her rivals for the job with &lt;b&gt;nonchalant&lt;/b&gt; ease. 她从容不迫地击败求职的所有竞争者。
&lt;/p&gt;

&lt;p&gt;
在英语里还有两个词也表示冷静沉着，分别是 collected, 也是挺有趣的。我们人的精神好像是一团气，如果你急躁、仓促，这团气就扩散，就像热力学第二定律描述的，人的内心一旦燥热，就会蔓延出去，他的行动就会不理性了。所以，要保持 cool 一点，nonchalant 一些。这样，才能凝聚精气神，也就是达到
collected 的状态。内心清凉了，自然就容易把自己的精神收集起来，不让它们到处乱窜啦。《庄子》中讲的心斋大概也是这个道理：「若一志，无聽之以耳而聽之以心，无聽之以心而聽之以氣。聽止於耳，心止於符。氣也者，虛而待物者也。唯道集虛。虛者，心齋也。」这里说，唯道集虚。这个虚，大概就是到处乱窜的发热的精神，而庄子所谓的道，就能把这个虚“集”、collect 起来。精神集中了，就冷静沉着了，也就是 collected 了。比如 She always stays cool,
calm and &lt;b&gt;collected&lt;/b&gt; in a crisis. 她在危难时总是很冷静、镇定如常、泰然自若。
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines Per.30 避免在时间关键路径上切换程序上下文</title>
   <link href="http://kimi.im/2023-06-16-cppcoreguidelines-per30"/>
   <updated>2023-06-16T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-per30</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;Avoid context switches on the critical path&amp;rdquo;
&lt;/p&gt;

&lt;p&gt;
此条未完待续。
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines Per.19 以可推断的方式访问内存</title>
   <link href="http://kimi.im/2023-06-15-cppcoreguidelines-per19"/>
   <updated>2023-06-15T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-per19</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;Access memory predictably&amp;rdquo;
&lt;/p&gt;

&lt;p&gt;
理由
&lt;/p&gt;

&lt;p&gt;
缓存效率对性能至关重要。缓存算法能较好优化简单的线性内存访问。
&lt;/p&gt;

&lt;p&gt;
例子
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; matrix&lt;span style=&quot;color: #707183;&quot;&gt;[&lt;/span&gt;rows&lt;span style=&quot;color: #707183;&quot;&gt;][&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;cols&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;]&lt;/span&gt;;

&lt;span style=&quot;color: #3F7F5F;&quot;&gt;// bad&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;for&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;c&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;0&lt;/span&gt;; c &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt; cols; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;++&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;c&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;for&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;r&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;0&lt;/span&gt;; r &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt; rows; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;++&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;r&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
        &lt;span style=&quot;color: #000000;&quot;&gt;sum&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;+=&lt;/span&gt; matrix&lt;span style=&quot;color: #707183;&quot;&gt;[&lt;/span&gt;r&lt;span style=&quot;color: #707183;&quot;&gt;][&lt;/span&gt;c&lt;span style=&quot;color: #707183;&quot;&gt;]&lt;/span&gt;;

&lt;span style=&quot;color: #3F7F5F;&quot;&gt;// good&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;for&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;r&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;0&lt;/span&gt;; r &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt; rows; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;++&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;r&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;for&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;c&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;0&lt;/span&gt;; c &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt; cols; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;++&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;c&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
        &lt;span style=&quot;color: #000000;&quot;&gt;sum&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;+=&lt;/span&gt; matrix&lt;span style=&quot;color: #707183;&quot;&gt;[&lt;/span&gt;r&lt;span style=&quot;color: #707183;&quot;&gt;][&lt;/span&gt;c&lt;span style=&quot;color: #707183;&quot;&gt;]&lt;/span&gt;;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
二维数组在内存中以行为单位，平铺展开。所以以行为单位进行访问，可以利用缓存算法，优化性能。
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines Per.18 空间即是时间</title>
   <link href="http://kimi.im/2023-06-14-cppcoreguidelines-per18"/>
   <updated>2023-06-14T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-per18</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;Space is time&amp;rdquo;
&lt;/p&gt;

&lt;p&gt;
理由
&lt;/p&gt;

&lt;p&gt;
主要影响性能的是内存访问时间。
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines Per.17 在性能关键的数据结构中，先声明最常用的成员</title>
   <link href="http://kimi.im/2023-06-13-cppcoreguidelines-per17"/>
   <updated>2023-06-13T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-per17</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;Declare the most used member of a time-critical struct first&amp;rdquo;
&lt;/p&gt;

&lt;p&gt;
此条未完待续。
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines Per.16 使用紧凑的数据结构</title>
   <link href="http://kimi.im/2023-06-12-cppcoreguidelines-per16"/>
   <updated>2023-06-12T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-per16</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;Use compact data structures&amp;rdquo;
&lt;/p&gt;

&lt;p&gt;
理由
&lt;/p&gt;

&lt;p&gt;
主要影响性能的是内存访问时间。
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines Per.15 不要在性能关键分支上申请分配内存</title>
   <link href="http://kimi.im/2023-06-11-cppcoreguidelines-per15"/>
   <updated>2023-06-11T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-per15</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;Do not allocate on a critical branch&amp;rdquo;
&lt;/p&gt;

&lt;p&gt;
此条未完待续。
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>单词本：eindrucksvoll</title>
   <link href="http://kimi.im/2023-06-11-eindrucksvoll"/>
   <updated>2023-06-11T00:00:00+00:00</updated>
   <id>http://kimi.im/eindrucksvoll</id>
   <content type="html">&lt;p&gt;
早上看新闻，说，最近的牛磺酸动物实验表明，每天一定量的牛磺酸摄入，可以延长 10%-20% 老鼠、猩猩的寿命。换算成人的话，可以延长 7-8 年的寿命。基于这个结论，TUM 的运动生物学教授 Henning Wackerhage 说：
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;Die Ergebnisse aus den Tierversuchen sind &lt;b&gt;eindrucksvoll&lt;/b&gt;&amp;rdquo;, sagt
Co-Autor Henning Wackerhage, Professor für Sportbiologie an der
Technischen Universität München.
&lt;/p&gt;

&lt;p&gt;
动物实验的结果真是令人印象深刻。
&lt;/p&gt;

&lt;p&gt;
这里 eindrucksvoll 印象深刻，对应的英语就是 impressive 了。虽然，他们看起来很不一样，但是我们把它拆开的话，其实就是同一个表述，不同的形式罢了。
&lt;/p&gt;

&lt;p&gt;
德语 drücken 是压、印的动词。英语的 press 也正是压、印的意思。
&lt;/p&gt;

&lt;p&gt;
ein- 是进入，eindrücken 则是压入、印入。英语 impress 也正是压入、印入。
&lt;/p&gt;

&lt;p&gt;
Eindruck 则是印迹、印象的名词，比如：Ich habe den &lt;b&gt;Eindruck&lt;/b&gt;, dass es ihm
nicht gut geht. 我有印象他不太舒服。I have the &lt;b&gt;impression&lt;/b&gt; that he
isn&amp;rsquo;t well.
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines Per.14 尽量减少内存分配释放的数量</title>
   <link href="http://kimi.im/2023-06-10-cppcoreguidelines-per14"/>
   <updated>2023-06-10T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-per14</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;Minimize the number of allocations and deallocations&amp;rdquo;
&lt;/p&gt;

&lt;p&gt;
此条未完待续。
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines Per.13 避免重复的间接访问</title>
   <link href="http://kimi.im/2023-06-09-cppcoreguidelines-per13"/>
   <updated>2023-06-09T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-per13</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;Eliminate redundant indirections&amp;rdquo;
&lt;/p&gt;

&lt;p&gt;
此条未完待续。
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines Per.12 避免重复的别名</title>
   <link href="http://kimi.im/2023-06-08-cppcoreguidelines-per12"/>
   <updated>2023-06-08T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-per12</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;Eliminate redundant aliases&amp;rdquo;
&lt;/p&gt;

&lt;p&gt;
此条未完待续。
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines Per.11 把计算从运行时转移到编译时</title>
   <link href="http://kimi.im/2023-06-07-cppcoreguidelines-per11"/>
   <updated>2023-06-07T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-per11</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;Move computation from run time to compile time&amp;rdquo;
&lt;/p&gt;

&lt;p&gt;
理由
&lt;/p&gt;

&lt;p&gt;
降低代码长度，减少运行时间。用常量避免数据竞争。捕获编译时错误，从而避免运行时的出错处理。
&lt;/p&gt;

&lt;p&gt;
例子
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;double&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;square&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;double&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;d&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; d*d; &lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;static&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;double&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;s2&lt;/span&gt; = square&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;2&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;old-style: dynamic initialization&lt;/span&gt;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;constexpr&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;double&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;ntimes&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;double&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;d&lt;/span&gt;, &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;n&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;assume 0 &amp;lt;= n&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
        &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;double&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;m&lt;/span&gt; = 1;
        &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;while&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;n--&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; m *= d;
        &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; m;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;constexpr&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;double&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;s3&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;ntimes&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;2, 3&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;  &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;modern-style: compile-time initialization&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
像这样给 s2 赋初值的情况很常见，有时候还会有比 &lt;code&gt;square()&lt;/code&gt; 更复杂的情况。相比 s3 的初始化过程，存在这些问题：
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;在运行时有一次额外的函数调用开销&lt;/li&gt;
&lt;li&gt;s2 可能在初始化之前被其他现场访问过&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
注意，对于常量，你不会遇到数据竞争情况。
&lt;/p&gt;


&lt;p&gt;
例子
&lt;/p&gt;

&lt;p&gt;
考虑以下一个常用技巧：在一个句柄中保存小对象，在堆中保存大对象。
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;constexpr&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;on_stack_max&lt;/span&gt; = 20;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;template&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;typename&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;struct&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Scoped&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;     &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;store a T in Scoped&lt;/span&gt;
        &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;...&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;obj&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;template&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;typename&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;struct&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;On_heap&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;store a T on the free store&lt;/span&gt;
        &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;...&lt;/span&gt;
        &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt;* &lt;span style=&quot;color: #000000;&quot;&gt;objp&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;template&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;typename&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;using&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Handle&lt;/span&gt; = &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;typename&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;std&lt;/span&gt;::&lt;span style=&quot;color: #110099;&quot;&gt;conditional&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;sizeof&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;T&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt; &amp;lt;= on_stack_max&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;,
                    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Scoped&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;&amp;gt;&lt;/span&gt;,      &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;first alternative&lt;/span&gt;
                    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;On_heap&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;&amp;gt;&lt;/span&gt;      &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;second alternative&lt;/span&gt;
               &lt;span style=&quot;color: #707183;&quot;&gt;&amp;gt;&lt;/span&gt;::type;

&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Handle&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;double&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;v1&lt;/span&gt;;                   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;the double goes on the stack&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Handle&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;std&lt;/span&gt;::&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;array&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;double&lt;/span&gt;, 200&lt;span style=&quot;color: #909183;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;v2&lt;/span&gt;;  &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;the array goes on the free store&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;...&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
假设 &lt;code&gt;Scoped&lt;/code&gt; 和 &lt;code&gt;On_heap&lt;/code&gt; 提供互相兼容的用户接口。此处，我们就可以在编译时计算出最合适的类型。另外，我们也有相似的技术，选择需要调用哪个函数。
&lt;/p&gt;


&lt;p&gt;
注意
&lt;/p&gt;

&lt;p&gt;
不要在编译时计算所有东西。显然，大部分的计算都依赖于输入值，所以不能全部转移到编译时。但是，另一点也值得注意，编译时的计算太复杂的话，会严重导致编译速度变慢，也影响调试效率。有时候，也会因为编译时的计算，影响代码性能。有一点，很少人知道，把一个计算过程分拆到子模块中，可能会导致指令缓存的效率变低。
&lt;/p&gt;


&lt;p&gt;
强化
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;检查简单函数，是否可以做成 &lt;code&gt;constexpr&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;检查调用某函数时，其参数都是常量的情况&lt;/li&gt;
&lt;li&gt;检查宏，是否可以写成 &lt;code&gt;constexpr&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
</content>
 </entry>
 
 <entry>
   <title>单词本：excruciatingly</title>
   <link href="http://kimi.im/2023-06-07-excruciatingly"/>
   <updated>2023-06-07T00:00:00+00:00</updated>
   <id>http://kimi.im/excruciatingly</id>
   <content type="html">&lt;p&gt;
昨天读到这句话：
&lt;/p&gt;

&lt;p&gt;
If you have spent most of your life being an overachiever, it is
&lt;b&gt;excruciatingly&lt;/b&gt; likely that you are operating in a fixed mindset.
&lt;/p&gt;

&lt;p&gt;
这里有两个词需要一些解释。
&lt;/p&gt;

&lt;p&gt;
首先是 overachiever，意思是成绩超过预料的学生。也就是得到的成绩，超出自己努力的付出的学生。一般，我们称这类学生为天才儿童。
&lt;/p&gt;

&lt;p&gt;
另一个词是 excruciatingly 意思是极其痛苦、难以忍受的。
&lt;/p&gt;

&lt;p&gt;
这段话的意思是说，一个大部分人生都是成绩超出自己努力，轻松获得好学生称号的人，在他/她往后的人生中，会极其痛苦的发现自己是一个固定型思维模式的人。固定性思维模式是心理学家 Carol Dweck 的经典作品《终身成长》这本书中提出的。固定型思维模式的人认为聪明才智是天生的，后天努力无法改变，于是认为人需要不断证明自己是天生聪明，害怕被批评，害怕冒险挑战自己不擅长的，担心自己出丑，把自己限制在能力范围内行事，思想故步自封。
&lt;/p&gt;

&lt;p&gt;
与固定型思维模式（Fixed Mindset），相对的是成长型思维模式（Growth
Mindset）。成长型思维模式的人相信人的能力是可以通过努力来发展的，头脑和天赋只是自己才能发展的起点，而非终点，所以会一直保持学习，不断挑战自己的能力范围，拓展自己的才能。
&lt;/p&gt;

&lt;p&gt;
简单举个例子，比如说有个人经历了很糟糕的一天，德语考试分数出来了，100
分的卷子，发挥失常只得了 60 分。回家路上又遇到雷阵雨。不小心闯红灯，被警察罚款。打电话给好朋友诉苦，又没人接听。
&lt;/p&gt;

&lt;p&gt;
固定性思维模式的人会觉得自己德语不是自己擅长的方向，今后避免接触德语。老天和社会都讨厌自己，连最好的朋友也看不起自己。考虑要不要跟这个朋友断绝关系。
&lt;/p&gt;

&lt;p&gt;
相反，成长型思维模式的人会分析考试出错的原因，出错的题目，指定改进计划，加强学习巩固，下次争取个好成绩。以后留心观察气象预报，避免路上被淋雨，骑车更加小心。顺路去朋友家看看，是不是遇到什么紧急情况，也许自己可以帮上忙。
&lt;/p&gt;

&lt;p&gt;
我们再回到本文主题：excruciatingly。这个词的动词形式是 excruciate 施加酷刑、折磨。它是由 ex- 和 cruciate 组成的。cruciate 是十字叉形状的意思。
ex- 则是超出，穿过的意思。
&lt;/p&gt;

&lt;p&gt;
那么合起来是指用十字叉形状穿过？拉丁语中 crux interpretum 指的是文中难以解释费解的某个点。crux 可能指令人难以理解、折磨人的文字。再添加个
ex- 就是极其难以理解，极其折磨人的文字吧。
&lt;/p&gt;

&lt;p&gt;
通常英语中折磨人是 torment 痛苦折磨，torture 拷问虐待逼供。我感觉，
excruciate 更偏向于内心灵魂的痛苦折磨。
&lt;/p&gt;

&lt;p&gt;
所以，为了避免固定型思维导致的精神上的痛苦折磨，我们应该培养成长型思维。按照 Carol Dweck 的书，有这么些方法：
&lt;/p&gt;

&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;认识自己的神经系统，大脑是具有可塑性的，人人都能学习成长。&lt;/li&gt;
&lt;li&gt;欣赏学习的过程，而不仅仅是结果。&lt;/li&gt;
&lt;li&gt;承认自己的弱点，努力改进自己的弱点。&lt;/li&gt;
&lt;li&gt;培养自己的目标感，不断问为什么，思考自己学习工作的目的和意义。&lt;/li&gt;
&lt;li&gt;把失败当作一次学习的机会，从失败和错误中学习。&lt;/li&gt;
&lt;li&gt;重视努力而不是天赋。不追求“天才儿童”的称号。&lt;/li&gt;
&lt;li&gt;不追求别人的认可，而应该追求学习提升自己本身。&lt;/li&gt;
&lt;li&gt;把批评看作是他人的礼物，分析批评，改进自己。&lt;/li&gt;
&lt;/ul&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines Per.10 依托于类型系统进行自动优化</title>
   <link href="http://kimi.im/2023-06-06-cppcoreguidelines-per10"/>
   <updated>2023-06-06T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-per10</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;Rely on the static type system&amp;rdquo;
&lt;/p&gt;

&lt;p&gt;
理由
&lt;/p&gt;

&lt;p&gt;
类型违规、弱类型（如 &lt;code&gt;void*&lt;/code&gt; ）、底层代码（如操作序列中单独的字节）等行为会导致自动优化很难进行。简单代码通常比复杂代码更容易优化。
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines Per.7 设计之初就要考虑优化</title>
   <link href="http://kimi.im/2023-06-05-cppcoreguidelines-per7"/>
   <updated>2023-06-05T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-per7</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;Design to enable optimization&amp;rdquo;
&lt;/p&gt;

&lt;p&gt;
理由
&lt;/p&gt;

&lt;p&gt;
因为我们经常需要优化最初的设计。因为设计之初没有考虑后期优化的代码，很难进行修改。
&lt;/p&gt;


&lt;p&gt;
来自 C (以及 C++) 标准的例子
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;qsort&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;void&lt;/span&gt;* &lt;span style=&quot;color: #000000;&quot;&gt;base&lt;/span&gt;, &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;size_t&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;num&lt;/span&gt;, &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;size_t&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;size&lt;/span&gt;,
            &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;*&lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;compar&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;void&lt;/span&gt;*, &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;void&lt;/span&gt;*&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
你什么时候对内存排序过？实际上，我们会给一个序列排序，这个序列一般保存在一个容器中。然而， &lt;code&gt;qsort&lt;/code&gt; 丢掉很多信息（比如元素类型），强制用户额外提供已经知道的信息（如元素大小），强制用户写额外的代码（如比较 &lt;code&gt;double&lt;/code&gt;
的函数）。这意味着程序员额外的工作量，容易出错，减少了编译器进行优化所需要的信息。
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;double&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;data&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;[&lt;/span&gt;100&lt;span style=&quot;color: #707183;&quot;&gt;]&lt;/span&gt;;
&lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;... fill a ...&lt;/span&gt;

&lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;100 chunks of memory of sizeof(double) starting at&lt;/span&gt;
&lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;address data using the order defined by compare_doubles&lt;/span&gt;
qsort&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;data, 100, &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;sizeof&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;double&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;, compare_doubles&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;
&lt;/pre&gt;
&lt;/div&gt;


&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;#include&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #2A00FF;&quot;&gt;stdio.h&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;#include&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #2A00FF;&quot;&gt;stdlib.h&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;#include&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #2A00FF;&quot;&gt;limits.h&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;gt;&lt;/span&gt;
 
&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;compare_ints&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;void&lt;/span&gt;* &lt;span style=&quot;color: #000000;&quot;&gt;a&lt;/span&gt;, &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;void&lt;/span&gt;* &lt;span style=&quot;color: #000000;&quot;&gt;b&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;arg1&lt;/span&gt; = *&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt;*&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;a;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;arg2&lt;/span&gt; = *&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt;*&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;b;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;arg1 &amp;gt; arg2&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; - &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;arg1 &amp;lt; arg2&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
 
&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;main&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;void&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;ints&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;[]&lt;/span&gt; = &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt; 3, 1, 4, -15, 9, 26, 5, -3, -5 &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;size&lt;/span&gt; = &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;sizeof&lt;/span&gt; ints / &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;sizeof&lt;/span&gt; *ints;
 
    qsort&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;ints, size, &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;sizeof&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt;, compare_ints&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
 
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;for&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;i&lt;/span&gt; = 0; i &amp;lt; size; i++&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;
        printf&lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;%d &quot;&lt;/span&gt;, ints&lt;span style=&quot;color: #709870;&quot;&gt;[&lt;/span&gt;i&lt;span style=&quot;color: #709870;&quot;&gt;]&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt;;
    &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;
 
    printf&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;\n&quot;&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;pre class=&quot;example&quot;&gt;
-15 -5 -3 1 3 4 5 9 26 
&lt;/pre&gt;


&lt;p&gt;
从接口设计角度看， &lt;code&gt;qsort&lt;/code&gt; 丢掉了很多有用的信息。
&lt;/p&gt;

&lt;p&gt;
也可以用 C++ lambda 函数：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;#include&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #2A00FF;&quot;&gt;array&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;#include&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #2A00FF;&quot;&gt;iostream&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;gt;&lt;/span&gt; 

&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;main&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;void&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #110099;&quot;&gt;std&lt;/span&gt;::&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;array&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;ints&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt; 3, 1, 4, -15, 9, 26, 5, -3, -5 &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;;
 
    qsort&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;ints.data&lt;span style=&quot;color: #909183;&quot;&gt;()&lt;/span&gt;,
          ints.size&lt;span style=&quot;color: #909183;&quot;&gt;()&lt;/span&gt;,
          &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;sizeof&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;decltype&lt;/span&gt;&lt;span style=&quot;color: #709870;&quot;&gt;(&lt;/span&gt;ints&lt;span style=&quot;color: #709870;&quot;&gt;)&lt;/span&gt;::value_type&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt;,
          &lt;span style=&quot;color: #909183;&quot;&gt;[](&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;void&lt;/span&gt;* &lt;span style=&quot;color: #000000;&quot;&gt;a&lt;/span&gt;, &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;void&lt;/span&gt; *&lt;span style=&quot;color: #000000;&quot;&gt;b&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #909183;&quot;&gt;{&lt;/span&gt;
          &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;arg1&lt;/span&gt; = *&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;static_cast&lt;/span&gt;&lt;span style=&quot;color: #709870;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt;*&lt;span style=&quot;color: #709870;&quot;&gt;&amp;gt;(&lt;/span&gt;a&lt;span style=&quot;color: #709870;&quot;&gt;)&lt;/span&gt;;
          &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;arg2&lt;/span&gt; = *&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;static_cast&lt;/span&gt;&lt;span style=&quot;color: #709870;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt;*&lt;span style=&quot;color: #709870;&quot;&gt;&amp;gt;(&lt;/span&gt;b&lt;span style=&quot;color: #709870;&quot;&gt;)&lt;/span&gt;;
          &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #709870;&quot;&gt;(&lt;/span&gt;arg1 &amp;gt; arg2&lt;span style=&quot;color: #709870;&quot;&gt;)&lt;/span&gt; - &lt;span style=&quot;color: #709870;&quot;&gt;(&lt;/span&gt;arg1 &amp;lt; arg2&lt;span style=&quot;color: #709870;&quot;&gt;)&lt;/span&gt;;
          &lt;span style=&quot;color: #909183;&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
 
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;for&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;auto&lt;/span&gt;&amp;amp; &lt;span style=&quot;color: #000000;&quot;&gt;i&lt;/span&gt; : ints&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;
        &lt;span style=&quot;color: #110099;&quot;&gt;std&lt;/span&gt;::cout &amp;lt;&amp;lt; i &amp;lt;&amp;lt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot; &quot;&lt;/span&gt;;
    &lt;span style=&quot;color: #110099;&quot;&gt;std&lt;/span&gt;::cout &amp;lt;&amp;lt; &lt;span style=&quot;color: #110099;&quot;&gt;std&lt;/span&gt;::endl;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;pre class=&quot;example&quot;&gt;
-15 -5 -3 1 3 4 5 9 26 
&lt;/pre&gt;



&lt;p&gt;
我们可以在 C++98 中做的更好：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;template&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;typename&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Iter&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;gt;&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;sort&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Iter&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;b&lt;/span&gt;, &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Iter&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;e&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;  &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;sort [b:e)&lt;/span&gt;

sort&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;data, data + 100&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;
&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;
这里，我们用到编译器知道的数组大小，元素类型以及 &lt;code&gt;double&lt;/code&gt; 的对比方法。
&lt;/p&gt;


&lt;p&gt;
在 C++20 中，我们可以做的更好：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;sortable specifies that c must be a&lt;/span&gt;
&lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;random-access sequence of elements comparable with &amp;lt;&lt;/span&gt;
&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;sort&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;sortable&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;auto&lt;/span&gt;&amp;amp; &lt;span style=&quot;color: #000000;&quot;&gt;c&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;

sort&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;c&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
关键是要给好的设计实现提供足够的信息。从这个角度看，这个排序接口仍然存在缺陷：它依赖于元素自身所定义的小于比较操作符。
&lt;/p&gt;

&lt;p&gt;
为了接口完整，我们需要比较函数版本 2，接受比较条件：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;compare elements of c using r&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;template&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;random_access_range&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;R&lt;/span&gt;, &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;C&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;requires&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;sortable&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;lt;&lt;/span&gt;R, &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;C&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;sort&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;R&lt;/span&gt;&amp;amp;&amp;amp; &lt;span style=&quot;color: #000000;&quot;&gt;r&lt;/span&gt;, &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;C&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;c&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
标准库函数提供多种 sort 函数。
&lt;/p&gt;


&lt;p&gt;
注意
&lt;/p&gt;

&lt;p&gt;
不成熟的优化，是万恶之源。但这并不是轻视性能的理由。在设计之初还是要考虑如何在未来能改进性能。建立以下这些习惯，可以获得效率更高、可维护、可优化的代码。s，可以考虑：
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;信息传递：选择清晰的接口，传递足够的信息，用于未来改进实现方案。注意，我们通过提供的接口传递信息。&lt;/li&gt;
&lt;li&gt;紧凑的数据：默认使用紧凑的数据，比如 &lt;code&gt;std::vector&lt;/code&gt; 。通过系统化的方式访问数据。如果你需要一个链接结构，尝试设计接口，让用户无法看到结构内部的细节。&lt;/li&gt;
&lt;li&gt;函数参数传递/返回：区分可变数据与不可变数据。不要让用户承担管理数据资源的重担。使用约定俗成的方式传递信息。不寻常的、“优化”的方式传递数据会导致重新实现的时候问题复杂化。&lt;/li&gt;
&lt;li&gt;抽象：但不要过度通用化设计。一个设计如果像考虑面面俱到，各种可能（不正确的使用情况），延迟设计决策（使用编译时或运行时分支判断），通常会导致复杂的、臃肿的、费解的设计。从一个具体例子进行抽象通用化设计，通用化设计的过程中保证运行效率。不要基于不切实际的未来需求进行抽象。理想情况是零负担的抽象。&lt;/li&gt;
&lt;li&gt;程序库：使用接口设计良好的程序库。如果没有程序库可以使用，开发自己的库。从好的库模仿设计接口。标准库函数就是好的榜样。&lt;/li&gt;
&lt;li&gt;隔离：把你的代码从杂乱的、老式的代码中隔离开，提供一个好的接口进行访问。有时候称作给有用且必须的杂乱代码提供“提供一个包装”。不要让坏的设计蔓延到你的代码中。&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;
例子
&lt;/p&gt;

&lt;p&gt;
考虑：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;template&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;ForwardIterator&lt;/span&gt;, &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;bool&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;binary_search&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;ForwardIterator&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;first&lt;/span&gt;, &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;ForwardIterator&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;last&lt;/span&gt;, &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt;&amp;amp; &lt;span style=&quot;color: #000000;&quot;&gt;val&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
&lt;code&gt;binary_search(begin(c), end(c), 7)&lt;/code&gt; 会告诉你 7 是否在 &lt;code&gt;c&lt;/code&gt; 中。但是不能告诉你 7 在哪里，有几个 7。
&lt;/p&gt;

&lt;p&gt;
有时候，只要返回最少的信息就够了（比如 &lt;code&gt;true&lt;/code&gt; 与 &lt;code&gt;false&lt;/code&gt; ）。但是好的接口能返回需要的信息。所以，标准库函数也能做到这些。
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;template&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;ForwardIterator&lt;/span&gt;, &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;ForwardIterator&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;lower_bound&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;ForwardIterator&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;first&lt;/span&gt;, &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;ForwardIterator&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;last&lt;/span&gt;, &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt;&amp;amp; &lt;span style=&quot;color: #000000;&quot;&gt;val&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
&lt;code&gt;lower_bound&lt;/code&gt; 返回首个符合条件的迭代器。如果没有的话，则返回首个大于 &lt;code&gt;val&lt;/code&gt;
的位置。或者如果找不到的话，就返回最后一个位置。
&lt;/p&gt;

&lt;p&gt;
然而， &lt;code&gt;lower_bound&lt;/code&gt; 返回的信息对大多数使用场景来说，还是不太够。所以，标准库中还有其他函数：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;template&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;ForwardIterator&lt;/span&gt;, &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;pair&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;ForwardIterator&lt;/span&gt;, &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;ForwardIterator&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;equal_range&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;ForwardIterator&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;first&lt;/span&gt;, &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;ForwardIterator&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;last&lt;/span&gt;, &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt;&amp;amp; &lt;span style=&quot;color: #000000;&quot;&gt;val&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
&lt;code&gt;equal_range&lt;/code&gt; 返回一对迭代器，分别表示第一个符合条件的位置，以及最后一个符合条件的位置的后一个位置。
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;vector&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;c&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;0, 2, 3, 4, 7, 7, 7, 8, 9&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;auto&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;r&lt;/span&gt; = equal_range&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;begin&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;c&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;, end&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;c&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;, 7&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;for&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;auto&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;p&lt;/span&gt; = r.first; p != r.second; ++p&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
    cout &amp;lt;&amp;lt; *p &amp;lt;&amp;lt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&apos;\n&apos;&lt;/span&gt;;
&lt;/pre&gt;
&lt;/div&gt;

&lt;pre class=&quot;example&quot;&gt;
7
7
7
&lt;/pre&gt;


&lt;p&gt;
很显然，这三个接口都是基于相似的代码实现的。他们知识三种方式展示了基础的二分搜索算法的结构。从返回执行结果（“make simple things simple!”）到返回额外信息（“don&amp;rsquo;t hide useful information”）。很显然，要设计出这样的接口，需要经验和领域知识。
&lt;/p&gt;


&lt;p&gt;
注意
&lt;/p&gt;

&lt;p&gt;
不要只是简单地从你第一次了解的实现和使用场景构建接口。当你初次实现完成后，回顾一下，是否需要改进。一旦部署使用，其中的错误就很难调整了。（1-10-100 规则：设计中的错误，花费 1 小时修改，集成后，可能需要 10 小时，发布部署后，可能需要 100 小时才能修改好）。
&lt;/p&gt;

&lt;p&gt;
注意
&lt;/p&gt;

&lt;p&gt;
效率并不意味着底层代码。高层代码不一定运行慢、代码臃肿。
&lt;/p&gt;

&lt;p&gt;
任何事情都有成本。不要太纠结于成本（现代计算机已经很快了），但是还是需要对成本的数量级有个大致概念。比如，你大致知道内存访问、函数调用、字符串比较、系统调用、硬盘访问、消息网络传输的性能开销。
&lt;/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=&quot;./2023-05-30-cppcoreguidelines-per2.html&quot;&gt;不要过早的进行优化&lt;/a&gt;”并不相冲，而是互补。此规则鼓励开发人员以某种恰当的、成熟的方式，在需要的时候可以进行优化。
&lt;/p&gt;


&lt;p&gt;
强化
&lt;/p&gt;

&lt;p&gt;
可能可以关注有 &lt;code&gt;void*&lt;/code&gt; 之类参数的函数，是否存在无法后期进行优化的情况。
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines Per.6 没有测量不要声明性能</title>
   <link href="http://kimi.im/2023-06-04-cppcoreguidelines-per6"/>
   <updated>2023-06-04T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-per6</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;Don’t make claims about performance without measurements&amp;rdquo;
&lt;/p&gt;

&lt;p&gt;
理由
&lt;/p&gt;

&lt;p&gt;
性能领域充满了神话传说和民间科学。现代硬件和优化器违背纯粹的假设。甚至专家也会大吃一惊。
&lt;/p&gt;


&lt;p&gt;
注意
&lt;/p&gt;

&lt;p&gt;
很难获得好的性能测评，有时候需要专业工具。
&lt;/p&gt;


&lt;p&gt;
注意
&lt;/p&gt;

&lt;p&gt;
使用 Unix time 或标准库 &lt;code&gt;&amp;lt;chrono&amp;gt;&lt;/code&gt; 做一些简单的小测评，能够消除一些明显的神话传说。如果无法精确测量整个系统，至少可以尝试测量一些关键操作和算法。Profiler 工具能够找到系统中的性能关键路径。你经常会大吃一惊。
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines Per.5 底层代码不一定比高层代码快</title>
   <link href="http://kimi.im/2023-06-03-cppcoreguidelines-per5"/>
   <updated>2023-06-03T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-per5</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;Don’t assume that low-level code is necessarily faster than high-level code&amp;rdquo;
&lt;/p&gt;

&lt;p&gt;
理由
&lt;/p&gt;

&lt;p&gt;
底层代码有时候限制了优化。优化器有时候能优化上层代码，且极其显著。
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines Per.4 复杂代码并不一定比简单代码快</title>
   <link href="http://kimi.im/2023-06-02-cppcoreguidelines-per4"/>
   <updated>2023-06-02T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-per4</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;Don’t assume that complicated code is necessarily faster than simple code&amp;rdquo;
&lt;/p&gt;

&lt;p&gt;
理由
&lt;/p&gt;

&lt;p&gt;
简单代码也能很快。优化器有时能优化简单代码，且极其显著。
&lt;/p&gt;

&lt;p&gt;
好例子
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;clear expression of intent, fast execution&lt;/span&gt;
&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;vector&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;uint8_t&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;v&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;100000&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;for&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;auto&lt;/span&gt;&amp;amp; &lt;span style=&quot;color: #000000;&quot;&gt;c&lt;/span&gt; : v&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
    c = ~c;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
目的明确，速度极快。
&lt;/p&gt;


&lt;p&gt;
坏例子
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;intended to be faster, but is often slower&lt;/span&gt;
&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;vector&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;uint8_t&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;v&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;100000&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;for&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;size_t&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;i&lt;/span&gt; = 0; i &amp;lt; v.size&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt;; i += &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;sizeof&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;uint64_t&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;uint64_t&lt;/span&gt;&amp;amp; &lt;span style=&quot;color: #000000;&quot;&gt;quad_word&lt;/span&gt; = *&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;reinterpret_cast&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;uint64_t&lt;/span&gt;*&lt;span style=&quot;color: #7388d6;&quot;&gt;&amp;gt;(&lt;/span&gt;&amp;amp;v&lt;span style=&quot;color: #909183;&quot;&gt;[&lt;/span&gt;i&lt;span style=&quot;color: #909183;&quot;&gt;]&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
    quad_word = ~quad_word;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
想要更快，经常很慢。
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines Per.3 非性能关键之处，无需优化</title>
   <link href="http://kimi.im/2023-06-01-cppcoreguidelines-per3"/>
   <updated>2023-06-01T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-per3</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;Don’t optimize something that’s not performance critical&amp;rdquo;
&lt;/p&gt;

&lt;p&gt;
理由
&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% 处理时间计算 A，40% 的时间计算 B，则提升 A 的 50%
性能，只相当于提升 B 的 5% 性能。（你若不知在 A 和 B 分配了多少时间，请查阅 &lt;a href=&quot;./2023-05-29-cppcoreguidelines-per1&quot;&gt;Per.1&lt;/a&gt;，&lt;a href=&quot;./2023-05-30-cppcoreguidelines-per2&quot;&gt;Per.2&lt;/a&gt;）
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines Per.2 不要过早的进行优化</title>
   <link href="http://kimi.im/2023-05-30-cppcoreguidelines-per2"/>
   <updated>2023-05-30T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-per2</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;Don’t optimize prematurely&amp;rdquo;
&lt;/p&gt;

&lt;p&gt;
理由
&lt;/p&gt;

&lt;p&gt;
深度优化的代码通常比未优化的代码更庞大、更难进行修改。
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines Per.1 没有理由不要优化</title>
   <link href="http://kimi.im/2023-05-29-cppcoreguidelines-per1"/>
   <updated>2023-05-29T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-per1</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;Don’t optimize without reason&amp;rdquo;
&lt;/p&gt;

&lt;p&gt;
理由 
&lt;/p&gt;

&lt;p&gt;
如果没有合理理由，不要进行优化。无意义的优化会导致更多的错误，更高的维护成本。
&lt;/p&gt;

&lt;p&gt;
注意，有些人有优化代码习惯，有些人觉得优化代码有趣。
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines ES.107 不要用无符号类型做下标，使用 gsl::index</title>
   <link href="http://kimi.im/2023-05-28-cppcoreguidelines-es107"/>
   <updated>2023-05-28T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-es107</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;Don’t use &lt;code&gt;unsigned&lt;/code&gt; for subscripts, prefer &lt;code&gt;gsl::index&lt;/code&gt;&amp;rdquo;
&lt;/p&gt;

&lt;p&gt;
理由
&lt;/p&gt;

&lt;p&gt;
避免有混淆符号、无符号类型。允许编译器进行更好的优化、更好的错误检测。避免使用 auto 和 int 的出错陷阱。
&lt;/p&gt;


&lt;p&gt;
坏例子
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;vector&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;vec&lt;/span&gt; = &lt;span style=&quot;color: #3F7F5F;&quot;&gt;/*&lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;...&lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;*/&lt;/span&gt;;

&lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;might not be big enough&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;for&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;i&lt;/span&gt; = 0; i &amp;lt; vec.size&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt;; i += 2&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
    cout &amp;lt;&amp;lt; vec&lt;span style=&quot;color: #707183;&quot;&gt;[&lt;/span&gt;i&lt;span style=&quot;color: #707183;&quot;&gt;]&lt;/span&gt; &amp;lt;&amp;lt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&apos;\n&apos;&lt;/span&gt;;
&lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;risk wraparound&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;for&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;unsigned&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;i&lt;/span&gt; = 0; i &amp;lt; vec.size&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt;; i += 2&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;               
    cout &amp;lt;&amp;lt; vec&lt;span style=&quot;color: #707183;&quot;&gt;[&lt;/span&gt;i&lt;span style=&quot;color: #707183;&quot;&gt;]&lt;/span&gt; &amp;lt;&amp;lt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&apos;\n&apos;&lt;/span&gt;;
&lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;might not be big enough&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;for&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;auto&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;i&lt;/span&gt; = 0; i &amp;lt; vec.size&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt;; i += 2&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;                   
    cout &amp;lt;&amp;lt; vec&lt;span style=&quot;color: #707183;&quot;&gt;[&lt;/span&gt;i&lt;span style=&quot;color: #707183;&quot;&gt;]&lt;/span&gt; &amp;lt;&amp;lt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&apos;\n&apos;&lt;/span&gt;;
&lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;verbose&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;for&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;vector&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;&amp;gt;&lt;/span&gt;::&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;size_type&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;i&lt;/span&gt; = 0; i &amp;lt; vec.size&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt;; i += 2&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt; 
    cout &amp;lt;&amp;lt; vec&lt;span style=&quot;color: #707183;&quot;&gt;[&lt;/span&gt;i&lt;span style=&quot;color: #707183;&quot;&gt;]&lt;/span&gt; &amp;lt;&amp;lt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&apos;\n&apos;&lt;/span&gt;;
&lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;bug&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;for&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;auto&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;i&lt;/span&gt; = vec.size&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt;-1; i &amp;gt;= 0; i -= 2&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;                
    cout &amp;lt;&amp;lt; vec&lt;span style=&quot;color: #707183;&quot;&gt;[&lt;/span&gt;i&lt;span style=&quot;color: #707183;&quot;&gt;]&lt;/span&gt; &amp;lt;&amp;lt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&apos;\n&apos;&lt;/span&gt;;
&lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;might not be big enough&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;for&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;i&lt;/span&gt; = vec.size&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt;-1; i &amp;gt;= 0; i -= 2&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;                 
    cout &amp;lt;&amp;lt; vec&lt;span style=&quot;color: #707183;&quot;&gt;[&lt;/span&gt;i&lt;span style=&quot;color: #707183;&quot;&gt;]&lt;/span&gt; &amp;lt;&amp;lt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&apos;\n&apos;&lt;/span&gt;;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
好例子
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;vector&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;vec&lt;/span&gt; = &lt;span style=&quot;color: #3F7F5F;&quot;&gt;/*&lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;...&lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;*/&lt;/span&gt;;
&lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;OK&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;for&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;gsl&lt;/span&gt;::&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;index&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;i&lt;/span&gt; = 0; i &amp;lt; vec.size&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt;; i += 2&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
    cout &amp;lt;&amp;lt; vec&lt;span style=&quot;color: #707183;&quot;&gt;[&lt;/span&gt;i&lt;span style=&quot;color: #707183;&quot;&gt;]&lt;/span&gt; &amp;lt;&amp;lt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&apos;\n&apos;&lt;/span&gt;;
&lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;OK&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;for&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;gsl&lt;/span&gt;::&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;index&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;i&lt;/span&gt; = vec.size&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt;-1; i &amp;gt;= 0; i -= 2&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
    cout &amp;lt;&amp;lt; vec&lt;span style=&quot;color: #707183;&quot;&gt;[&lt;/span&gt;i&lt;span style=&quot;color: #707183;&quot;&gt;]&lt;/span&gt; &amp;lt;&amp;lt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&apos;\n&apos;&lt;/span&gt;;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
注意
&lt;/p&gt;

&lt;p&gt;
内置数组类型允许使用有符号整型下标。标准库容器使用无符号整型下标。所以目前并没有完美的兼容方案。除非未来某一天标准库容器改用有符号整型下标。由于有符号、无符号混合计算存在某些问题，最好固定使用 &lt;code&gt;gsl::index&lt;/code&gt; 。
&lt;/p&gt;


&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;template&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;typename&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;struct&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;My_container&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;public&lt;/span&gt;:
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;...&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt;&amp;amp; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;operator&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;[]&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;gsl&lt;/span&gt;::&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;index&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;i&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;not unsigned&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;...&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;
&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;
其他方案：
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;使用算法函数&lt;/li&gt;
&lt;li&gt;使用带范围的 for&lt;/li&gt;
&lt;li&gt;使用迭代器/指针&lt;/li&gt;
&lt;/ul&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines ES.106 避免赋值负数给无符号类型</title>
   <link href="http://kimi.im/2023-05-27-cppcoreguidelines-es106"/>
   <updated>2023-05-27T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-es106</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;Don’t try to avoid negative values by using &lt;code&gt;unsigned&lt;/code&gt;&amp;rdquo;
&lt;/p&gt;

&lt;p&gt;
理由 
&lt;/p&gt;

&lt;p&gt;
选择无符号类型意味着很多整型的行为将被改变，包括求模运算、抑制针对溢出的相关警告、产生有符号无符号类型混用的错误等。使用无符号类型并不能避免产生负数值的可能。
&lt;/p&gt;

&lt;p&gt;
例子
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;unsigned&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;u1&lt;/span&gt; = -2;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;Valid: the value of u1 is 4294967294&lt;/span&gt;
cout &amp;lt;&amp;lt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;u1 = &quot;&lt;/span&gt; &amp;lt;&amp;lt; u1 &amp;lt;&amp;lt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;\n&quot;&lt;/span&gt;;
&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;i1&lt;/span&gt; = -2;
cout &amp;lt;&amp;lt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;i1 = &quot;&lt;/span&gt; &amp;lt;&amp;lt; i1 &amp;lt;&amp;lt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;\n&quot;&lt;/span&gt;;
&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;unsigned&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;u2&lt;/span&gt; = i1;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;Valid: the value of u2 is 4294967294&lt;/span&gt;
cout &amp;lt;&amp;lt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;u2 = &quot;&lt;/span&gt; &amp;lt;&amp;lt; u2 &amp;lt;&amp;lt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;\n&quot;&lt;/span&gt;;
&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;i2&lt;/span&gt; = u2;            &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;Valid: the value of i2 is -2&lt;/span&gt;
cout &amp;lt;&amp;lt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;i2 = &quot;&lt;/span&gt; &amp;lt;&amp;lt; i2 &amp;lt;&amp;lt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;\n&quot;&lt;/span&gt;;
&lt;/pre&gt;
&lt;/div&gt;

&lt;pre class=&quot;example&quot;&gt;
u1 = 4294967294
i1 = -2
u2 = 4294967294
i2 = -2
&lt;/pre&gt;


&lt;p&gt;
此类数值构造过程很合法，却很难发现实际代码中的问题。是现实世界大部分问题的来源。
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;unsigned&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;area&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;unsigned&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;height&lt;/span&gt;, &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;unsigned&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;width&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; height*width; &lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;...&lt;/span&gt;
&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;main&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;height&lt;/span&gt;;
    height = 2;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;auto&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;a&lt;/span&gt; = area&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;height, 2&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;if the input is -2 a becomes 4294967292&lt;/span&gt;
    cout &amp;lt;&amp;lt; a &amp;lt;&amp;lt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&apos;\n&apos;&lt;/span&gt;;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;auto&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;b&lt;/span&gt; = area&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;height, -2&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
    cout &amp;lt;&amp;lt; b &amp;lt;&amp;lt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&apos;\n&apos;&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;pre class=&quot;example&quot;&gt;
4
4294967292
&lt;/pre&gt;


&lt;p&gt;
记住，-1 赋值给无符号整型时，变成了一个最大的无符号整型。并且，因为无符号计算是求模计算，乘法不会导致向上溢出，只会截去高位，变回小一些的数。
&lt;/p&gt;


&lt;p&gt;
例子
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;unsigned&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;max&lt;/span&gt; = 100000;    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;&quot;accidental typo&quot;, I mean to say 10&apos;000&lt;/span&gt;
&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;unsigned&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;short&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;x&lt;/span&gt; = 100;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;while&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;x &amp;lt; max&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt; x += 100; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;infinite loop&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
如果 x 是一个有符号的 short 类型，编译器会产生关于未定义的溢出警告。
&lt;/p&gt;


&lt;p&gt;
其他方案
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;使用有符号整型，并检查 &lt;code&gt;x &amp;gt;= 0&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;使用一个正整数&lt;/li&gt;
&lt;li&gt;使用整数类型的某个局部范围&lt;/li&gt;
&lt;li&gt;&lt;code&gt;assert(-1 &amp;lt; x)&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;
例子
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;struct&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Positive&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;val&lt;/span&gt;;
    &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;Positive&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;x&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; :val&lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;x&lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt; Assert&lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;0 &amp;lt; x&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt;; &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;operator&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; val; &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;

&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Positive&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;arg&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; arg; &lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;

&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;r1&lt;/span&gt; = f&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;2&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;
&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;r2&lt;/span&gt; = f&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;-2&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;  &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;throws&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;
</content>
 </entry>
 
 <entry>
   <title>单词本：grok</title>
   <link href="http://kimi.im/2023-05-27-grok"/>
   <updated>2023-05-27T00:00:00+00:00</updated>
   <id>http://kimi.im/grok</id>
   <content type="html">&lt;p&gt;
在 Robert Heinlein 的一本科幻小说《Stranger in a Strange Land》中有一个叫 Valentine Michael Smith 的人，他出生在去往火星的飞船上。但是任务失败了。等到很久以后，人们发现了唯一的幸存者 Smith，并把他带回地球。
Smith 认为自己是个火星人，还讲火星话，其中 Heinlein 发明了一个词 grok，意思是“彻底的理解”，“凭直觉深刻了解”，“心意相通”。
&lt;/p&gt;

&lt;p&gt;
我们来看看例句：
&lt;/p&gt;

&lt;p&gt;
Markov&amp;rsquo;s idea is actually pretty simple — but its simplicity is often
obstructed by thick layers of mathematical formulas and formal
definitions. Few people actually &lt;b&gt;grok&lt;/b&gt; it.
（&lt;a href=&quot;http://filiph.github.io/markov/&quot;&gt;http://filiph.github.io/markov/&lt;/a&gt;）
&lt;/p&gt;


&lt;p&gt;
这里说马尔可夫模型的思想其实很简单，但是因为隐藏在层层数学公式之中，导致很多人无法彻底理解。
&lt;/p&gt;

&lt;p&gt;
It is a kind of strict flowchart language that only allows you to do
it in one way, which may be bad for some, but it helps how fast you
can &lt;b&gt;grok&lt;/b&gt; it when you understand the simple rules.
（&lt;a href=&quot;https://news.ycombinator.com/item?id=36021495&quot;&gt;https://news.ycombinator.com/item?id=36021495&lt;/a&gt;）
&lt;/p&gt;

&lt;p&gt;
这里说的是一种严格的流程图语言 Dragon 语言，如果你懂得其简单的规则，就能快速理解。
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines ES.105 不要除以整数 0</title>
   <link href="http://kimi.im/2023-05-25-cppcoreguidelines-es105"/>
   <updated>2023-05-25T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-es105</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;Don’t divide by integer zero&amp;rdquo;
&lt;/p&gt;

&lt;p&gt;
理由 
&lt;/p&gt;

&lt;p&gt;
结果未定义，或者可能导致程序崩溃。
&lt;/p&gt;

&lt;p&gt;
注意
&lt;/p&gt;

&lt;p&gt;
也包括 &lt;code&gt;%&lt;/code&gt; 运算。
&lt;/p&gt;

&lt;p&gt;
坏例子
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;divide&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;a&lt;/span&gt;, &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;b&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;BAD, should be checked (e.g., in a precondition)&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; a / b;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;
好例子
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;divide&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;a&lt;/span&gt;, &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;b&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;good, address via precondition (and replace with contracts once&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;C++ gets them)&lt;/span&gt;
    Expects&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;b != 0&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; a / b;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;main&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    cout &amp;lt;&amp;lt; divide&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;8, 2&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; EXIT_SUCCESS;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
如果 divide 函数的第二个参数是 0，编译会出错：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;double&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;divide&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;double&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;a&lt;/span&gt;, &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;double&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;b&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;good, address via using double instead&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; a / b;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;main&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    cout &amp;lt;&amp;lt; divide&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;1.0, 0&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; EXIT_SUCCESS;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;pre class=&quot;example&quot;&gt;
inf
&lt;/pre&gt;


&lt;p&gt;
double 类型除法的结果会产生一个无穷大结果。
&lt;/p&gt;

&lt;p&gt;
其他情况：对于可以接受额外开销的关键应用，可以使用检查范围的整型，或浮点类型。
&lt;/p&gt;


&lt;p&gt;
强化
&lt;/p&gt;

&lt;p&gt;
标记整数除以 0 的情况
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines ES.104 避免向下溢出</title>
   <link href="http://kimi.im/2023-05-24-cppcoreguidelines-es104"/>
   <updated>2023-05-24T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-es104</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;Don’t underflow&amp;rdquo;
&lt;/p&gt;

&lt;p&gt;
理由 
&lt;/p&gt;

&lt;p&gt;
减到最小值以下，会导致内存错误以及未定义的行为。
&lt;/p&gt;

&lt;p&gt;
坏例子
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;a&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;[&lt;/span&gt;10&lt;span style=&quot;color: #707183;&quot;&gt;]&lt;/span&gt;;
a&lt;span style=&quot;color: #707183;&quot;&gt;[&lt;/span&gt;-2&lt;span style=&quot;color: #707183;&quot;&gt;]&lt;/span&gt; = 7;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;bad&lt;/span&gt;

&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;n&lt;/span&gt; = 101;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;while&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;n--&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
    a&lt;span style=&quot;color: #707183;&quot;&gt;[&lt;/span&gt;n - 1&lt;span style=&quot;color: #707183;&quot;&gt;]&lt;/span&gt; = 9;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;bad (twice)&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;
例外
&lt;/p&gt;

&lt;p&gt;
如果需要求模运算，可以用无符号类型。
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines ES.103 不要产生溢出</title>
   <link href="http://kimi.im/2023-05-23-cppcoreguidelines-es103"/>
   <updated>2023-05-23T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-es103</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;Don’t overflow&amp;rdquo;
&lt;/p&gt;

&lt;p&gt;
理由
&lt;/p&gt;

&lt;p&gt;
溢出会使得你的数值算法毫无意义。把数值增加到上限之外会导致内存损坏以及未定义的行为。
&lt;/p&gt;

&lt;p&gt;
坏例子
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;a&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;[&lt;/span&gt;10&lt;span style=&quot;color: #707183;&quot;&gt;]&lt;/span&gt;;
a&lt;span style=&quot;color: #707183;&quot;&gt;[&lt;/span&gt;10&lt;span style=&quot;color: #707183;&quot;&gt;]&lt;/span&gt; = 7;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;bad, array bounds overflow&lt;/span&gt;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;for&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;n&lt;/span&gt; = 0; n &amp;lt;= 10; ++n&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
    a&lt;span style=&quot;color: #707183;&quot;&gt;[&lt;/span&gt;n&lt;span style=&quot;color: #707183;&quot;&gt;]&lt;/span&gt; = 9;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;bad, array bounds overflow&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;
坏例子
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;n&lt;/span&gt; = numeric_limits&lt;span style=&quot;color: #707183;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;gt;()&lt;/span&gt;;
&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;m&lt;/span&gt; = n + 1;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;bad, numeric overflow&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;
坏例子
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;area&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;h&lt;/span&gt;, &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;w&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; h * w; &lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;

&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;main&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;auto&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;a&lt;/span&gt; = area&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;10&apos;000&apos;000, 100&apos;000&apos;000&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;bad, numeric overflow&lt;/span&gt;
    cout &amp;lt;&amp;lt; a;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; EXIT_SUCCESS;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;pre class=&quot;example&quot;&gt;
-1530494976
&lt;/pre&gt;


&lt;p&gt;
例外
&lt;/p&gt;

&lt;p&gt;
如果需要求模运算，可以使用无符号类型。
&lt;/p&gt;


&lt;p&gt;
其他情况：对于允许某些额外开销的关键应用，可以使用检查范围的整型，以及浮点类型。
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines ES.102 数值计算用有符号类型</title>
   <link href="http://kimi.im/2023-05-22-cppcoreguidelines-es102"/>
   <updated>2023-05-22T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-es102</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;Use signed types for arithmetic&amp;rdquo;
&lt;/p&gt;

&lt;p&gt;
理由
&lt;/p&gt;

&lt;p&gt;
因为大部分算术运算默认是有符号类型的。 当 &lt;code&gt;y &amp;gt; x&lt;/code&gt; 时 &lt;code&gt;x - y&lt;/code&gt; 会产生负数。除了某些特殊情况，比如求模运算，可能需要无符号类型。
&lt;/p&gt;


&lt;p&gt;
例子
&lt;/p&gt;

&lt;p&gt;
无符号类型的算术运算可能会导致你不期望的结果。尤其是混用了有符号与无符号类型的运算：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;template&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;typename&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt;, &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;typename&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T2&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;subtract&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;x&lt;/span&gt;, &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T2&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;y&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; x - y;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;

&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;test&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;s&lt;/span&gt; = 5;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;unsigned&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;us&lt;/span&gt; = 5;
    cout &amp;lt;&amp;lt; subtract&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;s, 7&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &amp;lt;&amp;lt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&apos;\n&apos;&lt;/span&gt;;       &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;-2&lt;/span&gt;
    cout &amp;lt;&amp;lt; subtract&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;us, 7u&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &amp;lt;&amp;lt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&apos;\n&apos;&lt;/span&gt;;     &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;4294967294&lt;/span&gt;
    cout &amp;lt;&amp;lt; subtract&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;s, 7u&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &amp;lt;&amp;lt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&apos;\n&apos;&lt;/span&gt;;      &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;-2&lt;/span&gt;
    cout &amp;lt;&amp;lt; subtract&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;us, 7&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &amp;lt;&amp;lt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&apos;\n&apos;&lt;/span&gt;;      &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;4294967294&lt;/span&gt;
    cout &amp;lt;&amp;lt; subtract&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;s, us + 2&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &amp;lt;&amp;lt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&apos;\n&apos;&lt;/span&gt;;  &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;-2&lt;/span&gt;
    cout &amp;lt;&amp;lt; subtract&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;us, s + 2&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &amp;lt;&amp;lt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&apos;\n&apos;&lt;/span&gt;;  &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;4294967294&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;main&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    test&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt;;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; EXIT_SUCCESS;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;pre class=&quot;example&quot;&gt;
-2
4294967294
-2
4294967294
-2
4294967294
&lt;/pre&gt;


&lt;p&gt;
这里，我们很清楚发生了什么。但是如果写成 &lt;code&gt;us - (s + 2)&lt;/code&gt; 或者 &lt;code&gt;s += 2;
...; us - s&lt;/code&gt; ，你很可能就不知道为什么结果会是 4294967294。
&lt;/p&gt;


&lt;p&gt;
例外
&lt;/p&gt;

&lt;p&gt;
如果确实需要求模运算，可以用无符号类型。但是注意写明注释，尤其当可能产生一些数值溢出行为的时候。这种代码会让程序员感到意外。
&lt;/p&gt;


&lt;p&gt;
例子
&lt;/p&gt;

&lt;p&gt;
标准库使用无符号类型作为下标。而内置数组类型则用有符号类型作为下标。这方面产生惊讶和 bug 在所难免：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;a&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;[&lt;/span&gt;10&lt;span style=&quot;color: #707183;&quot;&gt;]&lt;/span&gt;;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;for&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;i&lt;/span&gt; = 0; i &amp;lt; 10; ++i&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt; a&lt;span style=&quot;color: #707183;&quot;&gt;[&lt;/span&gt;i&lt;span style=&quot;color: #707183;&quot;&gt;]&lt;/span&gt; = i;
&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;vector&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;v&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;10&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;
&lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;compares signed to unsigned; some compilers warn, but we should not&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;for&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;gsl&lt;/span&gt;::&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;index&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;i&lt;/span&gt; = 0; i &amp;lt; v.size&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt;; ++i&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt; v&lt;span style=&quot;color: #707183;&quot;&gt;[&lt;/span&gt;i&lt;span style=&quot;color: #707183;&quot;&gt;]&lt;/span&gt; = i;

&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;a2&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;[&lt;/span&gt;-2&lt;span style=&quot;color: #707183;&quot;&gt;]&lt;/span&gt;;         &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;error: negative size&lt;/span&gt;

&lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;OK, but the number of ints (4294967294) is so large that we should&lt;/span&gt;
&lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;get an exception&lt;/span&gt;
&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;vector&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;v2&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;-2&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
用 &lt;code&gt;gsl::index&lt;/code&gt; 做下标。
&lt;/p&gt;


&lt;p&gt;
强化
&lt;/p&gt;

&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;标记混用有符号和无符号类型的算术计算&lt;/li&gt;
&lt;li&gt;标记无符号类型的计算结果复制给有符号类型或打印成有符号类型&lt;/li&gt;
&lt;li&gt;标记用负数作为容器下标的地方&lt;/li&gt;
&lt;li&gt;不要标记有符号类型与无符号类型混合比值的地方，不然会有太多噪音。比如：其中一个参数是 &lt;code&gt;sizeof&lt;/code&gt; 或容器的 &lt;code&gt;.size()&lt;/code&gt; ，而另一个参数是 &lt;code&gt;ptrdiff_t&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
</content>
 </entry>
 
 <entry>
   <title>单词本：ammunition</title>
   <link href="http://kimi.im/2023-05-22-ammunition"/>
   <updated>2023-05-22T00:00:00+00:00</updated>
   <id>http://kimi.im/ammunition</id>
   <content type="html">&lt;p&gt;
工业控制系统紧急响应小组 ICS-CERT 发布了一份恶意软件趋势白皮书
(&lt;a href=&quot;#citeproc_bib_item_1&quot;&gt;(ICS-CERT) 2016&lt;/a&gt;)，讨论到注入测试软件的时候，提到，如果这些测试软件被坏人利用，实际上可能会成为攻击武器：
&lt;/p&gt;

&lt;p&gt;
While these tools have real-world application for testing the
resiliency of the network against malicious actors, these resources
pose a real danger due to their exposure of live &lt;b&gt;ammunition&lt;/b&gt; when in
the hands of an attacker.
&lt;/p&gt;

&lt;p&gt;
这里有个单词 ammunition，意思是军火, 弹药。事实上，这个词是从法语学过来的时候，拼写错误产生的。法语里的 la munition 被英国人听到后，拼写成了 ammunition。而 munition 其实是军需品的意思。
&lt;/p&gt;

&lt;p&gt;
至于 munition，则来自拉丁语 moénia, moénium，意思是城墙。大概是用来防御敌人的。现在法语里的墙就是 mur，不知道是不是也从这个拉丁语单词传过来的。
&lt;/p&gt;

&lt;p&gt;
再比如最近 G7 的新闻：
&lt;/p&gt;

&lt;p&gt;
US President Joe Biden will announce a $375 million military aid
package for Ukraine while in Hiroshima, Japan, where he is attending
the 2023 G7 Summit of world leaders, a US official said on Friday.
&lt;/p&gt;

&lt;p&gt;
The official, speaking on condition of anonymity, said the package
will include artillery, &lt;b&gt;ammunition&lt;/b&gt; and HIMARS rocket launchers.
&lt;/p&gt;

&lt;p&gt;
美国 JB 总统在日本宣称要给乌克兰 3.75 亿美元军费，用于炮弹、军火等。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;References&lt;/b&gt;
&lt;/p&gt;
&lt;style&gt;.csl-entry{text-indent: -1.5em; margin-left: 1.5em;}&lt;/style&gt;&lt;div class=&quot;csl-bib-body&quot;&gt;
  &lt;div class=&quot;csl-entry&quot;&gt;&lt;a id=&quot;citeproc_bib_item_1&quot;&gt;&lt;/a&gt;(ICS-CERT), Industrial Control Systems Emergency Response Team. 2016. “Malware Trends.” Advanced Analytical Laboratory (AAL).&lt;/div&gt;
&lt;/div&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines ES.101 在进行比特位操作的时候用无符号类型</title>
   <link href="http://kimi.im/2023-05-18-cppcoreguidelines-es101"/>
   <updated>2023-05-18T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-es101</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;Use unsigned types for bit manipulation&amp;rdquo;
&lt;/p&gt;

&lt;p&gt;
理由
&lt;/p&gt;

&lt;p&gt;
无符号类型支持比特位操作，不会因为符号位导致出乎意料的情况。
&lt;/p&gt;

&lt;p&gt;
比如
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;unsigned&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;char&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;x&lt;/span&gt; = 0b1010&apos;1010;
&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;unsigned&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;char&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;y&lt;/span&gt; = ~x;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;y == 0b0101&apos;0101;&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
注意
&lt;/p&gt;

&lt;p&gt;
无符号类型在求模运算的时候也很有用。当你要进行求模运算，如果你需要依赖于 wraparound 行为请添加必要的注释说明。大部分程序员都会对此类代码很吃惊。
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines ES.100 有符号、无符号类型不要混合在一起计算</title>
   <link href="http://kimi.im/2023-05-17-cppcoreguidelines-es100"/>
   <updated>2023-05-17T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-es100</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;Don’t mix signed and unsigned arithmetic&amp;rdquo;
&lt;/p&gt;

&lt;p&gt;
理由
&lt;/p&gt;

&lt;p&gt;
避免错误的结果。
&lt;/p&gt;

&lt;p&gt;
例子
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;x&lt;/span&gt; = -3;
&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;unsigned&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;y&lt;/span&gt; = 7;

cout &amp;lt;&amp;lt; x - y &amp;lt;&amp;lt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&apos;\n&apos;&lt;/span&gt;;  &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;unsigned result, possibly 4294967286&lt;/span&gt;
cout &amp;lt;&amp;lt; x + y &amp;lt;&amp;lt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&apos;\n&apos;&lt;/span&gt;;  &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;unsigned result: 4&lt;/span&gt;
cout &amp;lt;&amp;lt; x * y &amp;lt;&amp;lt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&apos;\n&apos;&lt;/span&gt;;  &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;unsigned result, possibly 4294967275&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;pre class=&quot;example&quot;&gt;
4294967286
4
4294967275
&lt;/pre&gt;



&lt;p&gt;
比较难设计出一个实际例子。
&lt;/p&gt;

&lt;p&gt;
注意
&lt;/p&gt;

&lt;p&gt;
很不幸，C++ 用有符号整型做数组下标，而标准库则在容器类中用无符号整型做数组下标。这就违背了一致性原则。请使用 &lt;code&gt;gsl::index&lt;/code&gt; 做下标。
&lt;/p&gt;


&lt;p&gt;
强化
&lt;/p&gt;

&lt;p&gt;
编译器能鉴别某些警告。
&lt;/p&gt;

&lt;p&gt;
（为避免过多干扰）不要警告标记以下混用符号/无符号比较的情况：
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;其中一个参数是 &lt;code&gt;sizeoff&lt;/code&gt; 或调用容器的 &lt;code&gt;.size()&lt;/code&gt; 函数，而另一个做比较的参数是 &lt;code&gt;ptrdiff_t&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines ES.87 不要在判断条件中添加多余的 == 或 !=</title>
   <link href="http://kimi.im/2023-05-16-cppcoreguidelines-es87"/>
   <updated>2023-05-16T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-es87</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;Don’t add redundant &lt;code&gt;==&lt;/code&gt; or &lt;code&gt;!=&lt;/code&gt; to conditions&amp;rdquo;
&lt;/p&gt;

&lt;p&gt;
理由
&lt;/p&gt;

&lt;p&gt;
这样可以避免累赘，规避某些导致出错的时机。提升统一和惯例的风格
&lt;/p&gt;

&lt;p&gt;
例子
&lt;/p&gt;

&lt;p&gt;
根据定义，条件是指在 &lt;code&gt;if&lt;/code&gt; 语句、 &lt;code&gt;while&lt;/code&gt; 语句、 &lt;code&gt;for&lt;/code&gt; 语句判断 &lt;code&gt;true&lt;/code&gt; 或 &lt;code&gt;false&lt;/code&gt;
的地方。数值与 0 比较，指针值与 &lt;code&gt;nullptr&lt;/code&gt; 比较。
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;These all mean &quot;if p is not nullptr&quot;&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;p&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt; ... &lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;            &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;good&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;p != 0&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt; ... &lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;       &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;redundant !=0, bad: don&apos;t use 0 for pointers&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;p != &lt;span style=&quot;color: #110099;&quot;&gt;nullptr&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt; ... &lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;redundant !=nullptr, not recommended&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
通常， &lt;code&gt;if (p)&lt;/code&gt; 的意思是 p 是否合法有效，能直接表明程序员的意图，而 &lt;code&gt;if
(p != nullptr)&lt;/code&gt; 则显得有些多余。
&lt;/p&gt;


&lt;p&gt;
例子
&lt;/p&gt;

&lt;p&gt;
此规则尤其适用于某种表达一个逻辑条件的声明。
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;execute if ps points to a kind of Circle, good&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;auto&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;pc&lt;/span&gt; = &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;dynamic_cast&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;&amp;lt;&lt;/span&gt;Circle&lt;span style=&quot;color: #7388d6;&quot;&gt;&amp;gt;(&lt;/span&gt;ps&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt; ... &lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;not recommended&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;auto&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;pc&lt;/span&gt; = &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;dynamic_cast&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;&amp;lt;&lt;/span&gt;Circle&lt;span style=&quot;color: #7388d6;&quot;&gt;&amp;gt;(&lt;/span&gt;ps&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;; pc != &lt;span style=&quot;color: #110099;&quot;&gt;nullptr&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt; ... &lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;
例子
&lt;/p&gt;

&lt;p&gt;
注意，逻辑条件会隐式地转成 &lt;code&gt;bool&lt;/code&gt; 值。比如：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;for&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;string&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;s&lt;/span&gt;; cin &amp;gt;&amp;gt; s; &lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt; v.push_back&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;s&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
这里调用了 &lt;code&gt;istream&lt;/code&gt; 的 &lt;code&gt;operator bool()&lt;/code&gt;
&lt;/p&gt;


&lt;p&gt;
注意
&lt;/p&gt;

&lt;p&gt;
整型数值与 0 比较并不多余。理由是，整型通常有多个合理的值，0 只是其中一个可能的值。而指针和 &lt;code&gt;bool&lt;/code&gt; 值则不一样。对于整型来说，0 通常意味着成功执行。所以，还是清晰表明这种判断为好。
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;i&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;i&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;            &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;suspect&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;...&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;i == success&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;possibly better&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;...&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
请记住，整型可以有大于两个的有效值。
&lt;/p&gt;


&lt;p&gt;
坏例子
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;if&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;strcmp&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;p1, p2&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt; ... &lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;are the two C-style strings equal? (mistake!)&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
这是常见的初级错误。如果你是用 C 风格的字符串，你必须熟悉 &lt;code&gt;&amp;lt;cstring&amp;gt;&lt;/code&gt; 中的函数。以上例子等价于：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;if&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;strcmp&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;p1, p2&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; != 0&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt; ... &lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;are the two C-style strings equal? (mistake!)&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
依然是错误的判断。
&lt;/p&gt;

&lt;p&gt;
注意
&lt;/p&gt;

&lt;p&gt;
相反情况用否定表达式更直白：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;These all mean &quot;if p is nullptr&quot;&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;!p&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt; ... &lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;           &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;good&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;p == 0&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt; ... &lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;       &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;redundant == 0, bad: don&apos;t use 0 for pointers&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;p == &lt;span style=&quot;color: #110099;&quot;&gt;nullptr&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt; ... &lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;redundant == nullptr, not recommended&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
强化
&lt;/p&gt;

&lt;p&gt;
容易，只要检查在逻辑条件中是否有多余的 &lt;code&gt;!=&lt;/code&gt; 和 &lt;code&gt;==&lt;/code&gt;
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines ES.86 不要在 for 循环内修改循环控制变量</title>
   <link href="http://kimi.im/2023-05-15-cppcoreguidelines-es86"/>
   <updated>2023-05-15T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-es86</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;Avoid modifying loop control variables inside the body of raw for-loops&amp;rdquo;
&lt;/p&gt;

&lt;p&gt;
理由
&lt;/p&gt;

&lt;p&gt;
必须事先理顺如何正确执行循环。在循环迭代表达式或循环体内修改循环计数器，会导致时不时出现惊讶和 bug。
&lt;/p&gt;

&lt;p&gt;
例子
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;for&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;i&lt;/span&gt; = 0; i &amp;lt; 10; ++i&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;no updates to i -- ok&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;for&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;i&lt;/span&gt; = 0; i &amp;lt; 10; ++i&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;//&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;/* &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;something&lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt; */&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; ++i; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;BAD&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;//&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;

&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;bool&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;skip&lt;/span&gt; = &lt;span style=&quot;color: #110099;&quot;&gt;false&lt;/span&gt;;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;for&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;i&lt;/span&gt; = 0; i &amp;lt; 10; ++i&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;skip&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt; skip = &lt;span style=&quot;color: #110099;&quot;&gt;false&lt;/span&gt;; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;continue&lt;/span&gt;; &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;//&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;/* &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;something&lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt; */&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; skip = &lt;span style=&quot;color: #110099;&quot;&gt;true&lt;/span&gt;;  &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;Better: using two variables&lt;/span&gt;
                                       &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;for two concepts.&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;//&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
强化
&lt;/p&gt;

&lt;p&gt;
标记在循环控制迭代表达式或循环体内出现的更新变量（非 &lt;code&gt;const&lt;/code&gt; 使用）的情况。
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines ES.85 要很容易识别出空语句</title>
   <link href="http://kimi.im/2023-05-14-cppcoreguidelines-es85"/>
   <updated>2023-05-14T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-es85</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;Make empty statements visible&amp;rdquo;
&lt;/p&gt;

&lt;p&gt;
理由
&lt;/p&gt;

&lt;p&gt;
可读性。
&lt;/p&gt;

&lt;p&gt;
例子
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;for&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;i = 0; i &amp;lt; max; ++i&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;BAD: the empty statement is easily overlooked&lt;/span&gt;
v&lt;span style=&quot;color: #707183;&quot;&gt;[&lt;/span&gt;i&lt;span style=&quot;color: #707183;&quot;&gt;]&lt;/span&gt; = f&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;v&lt;span style=&quot;color: #7388d6;&quot;&gt;[&lt;/span&gt;i&lt;span style=&quot;color: #7388d6;&quot;&gt;]&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;for&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;auto&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;x&lt;/span&gt; : v&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;           &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;better&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;nothing&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
v&lt;span style=&quot;color: #707183;&quot;&gt;[&lt;/span&gt;i&lt;span style=&quot;color: #707183;&quot;&gt;]&lt;/span&gt; = f&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;v&lt;span style=&quot;color: #7388d6;&quot;&gt;[&lt;/span&gt;i&lt;span style=&quot;color: #7388d6;&quot;&gt;]&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
强化
&lt;/p&gt;

&lt;p&gt;
标记不是代码块的空语句。注释不算在内。
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines ES.84 不要声明匿名局部变量</title>
   <link href="http://kimi.im/2023-05-13-cppcoreguidelines-es84"/>
   <updated>2023-05-13T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-es84</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;Don’t try to declare a local variable with no name&amp;rdquo;
&lt;/p&gt;

&lt;p&gt;
理由
&lt;/p&gt;

&lt;p&gt;
不存在这种东西。对人类来说是一个没有名字的变量，对编译器来说是一个语句，构造了临时变量，马上有离开作用域范围，销毁了变量。
&lt;/p&gt;

&lt;p&gt;
坏例子
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;lock_guard&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;&amp;lt;&lt;/span&gt;mutex&lt;span style=&quot;color: #7388d6;&quot;&gt;&amp;gt;{&lt;/span&gt;mx&lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;Bad&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;...&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
这里声明了一个没名字的 &lt;code&gt;lock_guard&lt;/code&gt; 对象，然后在分号处马上离开了其作用域范围。这是个很常见的错误。这个例子会导致很难发现的竞争条件（race
condition）。
&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;
</content>
 </entry>
 
 <entry>
   <title>单词本：algorithm</title>
   <link href="http://kimi.im/2023-05-13-algorithm"/>
   <updated>2023-05-13T00:00:00+00:00</updated>
   <id>http://kimi.im/algorithm</id>
   <content type="html">&lt;p&gt;
学计算机的同学都知道，算法是解决领域问题的一个关键工具。算法 Algorithm
is a step-wise representation of a solution to a given problem. In
Algorithm the problem is broken down into smaller pieces or steps
hence, it is easier for the programmer to convert it into an actual
program.
&lt;/p&gt;

&lt;p&gt;
那么，算法这个词是怎么来的呢？故事要从公元 780 年说起，这一年，波斯帝国大呼罗珊地区的花剌子模诞生了一位数学家，名叫阿尔·花拉子模（Abu
Abdulloh Muhammad ibn Muso al-Xorazmiy）。花剌子模位于当时波斯帝国的东部，现为乌兹别克花拉子模州。
&lt;/p&gt;

&lt;p&gt;
阿尔·花剌子模写了本书叫《代数学》（Kitab al-Jabr wa-l-Muqabala）是第一本解决一次方程及一元二次方程的系统著作，他因而被称为代数的创造者。所以，英语中的 algebra 就是从 al-Jabr 转来的。al-jabr 是解决一元二次方程的两个办法之一。
&lt;/p&gt;

&lt;p&gt;
而 algorithm 则是从 algoritmi 演化而来。Algoritmi 是花剌子模的阿拉伯文
Al-khwarizmi 转变而来。意思是来自（al）花剌子模（Xorazmiy）的人。
&lt;/p&gt;

&lt;p&gt;
所以说，英语中算法 algorithm 其实是一个数学家名字的错误拼写形式。
&lt;/p&gt;

&lt;p&gt;
德语保留了一些拉丁语后缀：Algorithmus，法语意大利语则为了读音习惯改为
algorithme 和 algoritmo。瑞典语比较接近拉丁语，写作 algoritm。
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>依赖倒置原则，Dependence Inversion Principle，DIP</title>
   <link href="http://kimi.im/2023-05-12-dip"/>
   <updated>2023-05-12T00:00:00+00:00</updated>
   <id>http://kimi.im/dip</id>
   <content type="html">&lt;blockquote&gt;
&lt;p&gt;
罔兩問景曰：「曩子行，今子止，曩子坐，今子起，何其無特操與？」景曰：「吾有待而然者邪！吾所待又有待而然者邪！吾待蛇蚹、蜩翼邪！惡識所以然？惡識所以不然？」
&lt;/p&gt;

&lt;p&gt;
《庄子·齐物论》
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;
软件工程领域，有一个概念叫 SOLID。SOLID 是五个面向对象设计原则的首字母缩写。最早由 Robert C. Martin 在其 2000 年的论文《Design Principles
and Design Patterns》中提出的。
&lt;/p&gt;

&lt;p&gt;
其中，D 原则指的是 Dependence Inversion Principle，依赖倒置原则，简称
DIP。
&lt;/p&gt;

&lt;p&gt;
DIP 是这么表述的：
&lt;/p&gt;

&lt;ol class=&quot;org-ol&quot;&gt;
&lt;li&gt;High level modules should not depend upon low level modules. Both
should depend upon abstractions. &lt;br /&gt;
上层模块不应该依赖于底层模块。都应该依赖于抽象。&lt;/li&gt;
&lt;li&gt;Abstractions should not depend upon details. Details should depend upon abstractions. &lt;br /&gt;
抽象不应该依赖于细节。细节应该依赖于抽象。&lt;/li&gt;
&lt;/ol&gt;


&lt;p&gt;
那么，为什么叫依赖倒置呢？
&lt;/p&gt;

&lt;p&gt;
因为传统的架构设计，顶层设计拆分到下层模块实现，下层模块又基于底层模块。像这样：
&lt;/p&gt;


&lt;div id=&quot;org65cb725&quot; class=&quot;figure&quot;&gt;
&lt;p&gt;&lt;div align=&quot;center&quot;&gt;&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; xmlns:xlink=&quot;http://www.w3.org/1999/xlink&quot; contentStyleType=&quot;text/css&quot; height=&quot;168px&quot; preserveAspectRatio=&quot;none&quot; style=&quot;width:298px;height:168px;background:#FFFFFF;&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 298 168&quot; width=&quot;298px&quot; zoomAndPan=&quot;magnify&quot;&gt;&lt;defs/&gt;&lt;g&gt;&lt;!--MD5=[f7065673e5e3aadd0e2d3c4432e92fdc]
entity Copy--&gt;&lt;g id=&quot;elem_Copy&quot;&gt;&lt;rect fill=&quot;#F1F1F1&quot; height=&quot;47.6094&quot; rx=&quot;2.5&quot; ry=&quot;2.5&quot; style=&quot;stroke:#181818;stroke-width:0.5;&quot; width=&quot;73&quot; x=&quot;118&quot; y=&quot;7&quot;/&gt;&lt;rect fill=&quot;#F1F1F1&quot; height=&quot;10&quot; style=&quot;stroke:#181818;stroke-width:0.5;&quot; width=&quot;15&quot; x=&quot;171&quot; y=&quot;12&quot;/&gt;&lt;rect fill=&quot;#F1F1F1&quot; height=&quot;2&quot; style=&quot;stroke:#181818;stroke-width:0.5;&quot; width=&quot;4&quot; x=&quot;169&quot; y=&quot;14&quot;/&gt;&lt;rect fill=&quot;#F1F1F1&quot; height=&quot;2&quot; style=&quot;stroke:#181818;stroke-width:0.5;&quot; width=&quot;4&quot; x=&quot;169&quot; y=&quot;18&quot;/&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;14&quot; lengthAdjust=&quot;spacing&quot; textLength=&quot;33&quot; x=&quot;133&quot; y=&quot;41.5332&quot;&gt;Copy&lt;/text&gt;&lt;/g&gt;&lt;!--MD5=[d012659cd792d5f1905aab6fef5bc07c]
entity ReadKeyboard--&gt;&lt;g id=&quot;elem_ReadKeyboard&quot;&gt;&lt;rect fill=&quot;#F1F1F1&quot; height=&quot;47.6094&quot; rx=&quot;2.5&quot; ry=&quot;2.5&quot; style=&quot;stroke:#181818;stroke-width:0.5;&quot; width=&quot;135&quot; x=&quot;7&quot; y=&quot;115&quot;/&gt;&lt;rect fill=&quot;#F1F1F1&quot; height=&quot;10&quot; style=&quot;stroke:#181818;stroke-width:0.5;&quot; width=&quot;15&quot; x=&quot;122&quot; y=&quot;120&quot;/&gt;&lt;rect fill=&quot;#F1F1F1&quot; height=&quot;2&quot; style=&quot;stroke:#181818;stroke-width:0.5;&quot; width=&quot;4&quot; x=&quot;120&quot; y=&quot;122&quot;/&gt;&lt;rect fill=&quot;#F1F1F1&quot; height=&quot;2&quot; style=&quot;stroke:#181818;stroke-width:0.5;&quot; width=&quot;4&quot; x=&quot;120&quot; y=&quot;126&quot;/&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;14&quot; lengthAdjust=&quot;spacing&quot; textLength=&quot;95&quot; x=&quot;22&quot; y=&quot;149.5332&quot;&gt;ReadKeyboard&lt;/text&gt;&lt;/g&gt;&lt;!--MD5=[a5c73c821fd996ec4dded17d8be1735e]
entity WritePrinter--&gt;&lt;g id=&quot;elem_WritePrinter&quot;&gt;&lt;rect fill=&quot;#F1F1F1&quot; height=&quot;47.6094&quot; rx=&quot;2.5&quot; ry=&quot;2.5&quot; style=&quot;stroke:#181818;stroke-width:0.5;&quot; width=&quot;115&quot; x=&quot;177&quot; y=&quot;115&quot;/&gt;&lt;rect fill=&quot;#F1F1F1&quot; height=&quot;10&quot; style=&quot;stroke:#181818;stroke-width:0.5;&quot; width=&quot;15&quot; x=&quot;272&quot; y=&quot;120&quot;/&gt;&lt;rect fill=&quot;#F1F1F1&quot; height=&quot;2&quot; style=&quot;stroke:#181818;stroke-width:0.5;&quot; width=&quot;4&quot; x=&quot;270&quot; y=&quot;122&quot;/&gt;&lt;rect fill=&quot;#F1F1F1&quot; height=&quot;2&quot; style=&quot;stroke:#181818;stroke-width:0.5;&quot; width=&quot;4&quot; x=&quot;270&quot; y=&quot;126&quot;/&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;14&quot; lengthAdjust=&quot;spacing&quot; textLength=&quot;75&quot; x=&quot;192&quot; y=&quot;149.5332&quot;&gt;WritePrinter&lt;/text&gt;&lt;/g&gt;&lt;!--MD5=[b9f6fdcc5ffcf0aaa847362a19131062]
link Copy to ReadKeyboard--&gt;&lt;g id=&quot;link_Copy_ReadKeyboard&quot;&gt;&lt;path d=&quot;M137.14,55 C123.81,72.66 105.49,96.94 92.1,114.68 &quot; fill=&quot;none&quot; id=&quot;Copy-ReadKeyboard&quot; style=&quot;stroke:#181818;stroke-width:1.0;&quot;/&gt;&lt;/g&gt;&lt;!--MD5=[3f9d472f710945c80c6082d6418b4027]
link Copy to WritePrinter--&gt;&lt;g id=&quot;link_Copy_WritePrinter&quot;&gt;&lt;path d=&quot;M171.86,55 C185.19,72.66 203.51,96.94 216.9,114.68 &quot; fill=&quot;none&quot; id=&quot;Copy-WritePrinter&quot; style=&quot;stroke:#181818;stroke-width:1.0;&quot;/&gt;&lt;/g&gt;&lt;!--MD5=[6059be171d0757e1485bd95034312e5b]
@startuml
[Copy] - - [ReadKeyboard]
[Copy] - - [WritePrinter]
@enduml

PlantUML version 1.2022.3beta3(Unknown compile time)
(GPL source distribution)
Java Runtime: OpenJDK Runtime Environment
JVM: OpenJDK 64-Bit Server VM
Default Encoding: Cp1252
Language: en
Country: US
--&gt;&lt;/g&gt;&lt;/svg&gt;&lt;/div&gt;
&lt;/p&gt;
&lt;/div&gt;

&lt;p&gt;
这个例子中，有个 Copy 任务，它做的事情是把键盘敲入的字符传输到打印机打印出来。那么 C++ 代码实现可能是这个样子：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;Copy&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;c&lt;/span&gt;;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;while&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;c = ReadKeyboard&lt;span style=&quot;color: #709870;&quot;&gt;()&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt; != EOF&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;
        WritePrinter&lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;c&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt;;
    &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
如果后面，我们又要把键盘敲进的字符写到磁盘里：
&lt;/p&gt;


&lt;div id=&quot;org4da13cf&quot; class=&quot;figure&quot;&gt;
&lt;p&gt;&lt;div align=&quot;center&quot;&gt;&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; xmlns:xlink=&quot;http://www.w3.org/1999/xlink&quot; contentStyleType=&quot;text/css&quot; height=&quot;168px&quot; preserveAspectRatio=&quot;none&quot; style=&quot;width:433px;height:168px;background:#FFFFFF;&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 433 168&quot; width=&quot;433px&quot; zoomAndPan=&quot;magnify&quot;&gt;&lt;defs/&gt;&lt;g&gt;&lt;!--MD5=[f7065673e5e3aadd0e2d3c4432e92fdc]
entity Copy--&gt;&lt;g id=&quot;elem_Copy&quot;&gt;&lt;rect fill=&quot;#F1F1F1&quot; height=&quot;47.6094&quot; rx=&quot;2.5&quot; ry=&quot;2.5&quot; style=&quot;stroke:#181818;stroke-width:0.5;&quot; width=&quot;73&quot; x=&quot;198&quot; y=&quot;7&quot;/&gt;&lt;rect fill=&quot;#F1F1F1&quot; height=&quot;10&quot; style=&quot;stroke:#181818;stroke-width:0.5;&quot; width=&quot;15&quot; x=&quot;251&quot; y=&quot;12&quot;/&gt;&lt;rect fill=&quot;#F1F1F1&quot; height=&quot;2&quot; style=&quot;stroke:#181818;stroke-width:0.5;&quot; width=&quot;4&quot; x=&quot;249&quot; y=&quot;14&quot;/&gt;&lt;rect fill=&quot;#F1F1F1&quot; height=&quot;2&quot; style=&quot;stroke:#181818;stroke-width:0.5;&quot; width=&quot;4&quot; x=&quot;249&quot; y=&quot;18&quot;/&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;14&quot; lengthAdjust=&quot;spacing&quot; textLength=&quot;33&quot; x=&quot;213&quot; y=&quot;41.5332&quot;&gt;Copy&lt;/text&gt;&lt;/g&gt;&lt;!--MD5=[d012659cd792d5f1905aab6fef5bc07c]
entity ReadKeyboard--&gt;&lt;g id=&quot;elem_ReadKeyboard&quot;&gt;&lt;rect fill=&quot;#F1F1F1&quot; height=&quot;47.6094&quot; rx=&quot;2.5&quot; ry=&quot;2.5&quot; style=&quot;stroke:#181818;stroke-width:0.5;&quot; width=&quot;135&quot; x=&quot;7&quot; y=&quot;115&quot;/&gt;&lt;rect fill=&quot;#F1F1F1&quot; height=&quot;10&quot; style=&quot;stroke:#181818;stroke-width:0.5;&quot; width=&quot;15&quot; x=&quot;122&quot; y=&quot;120&quot;/&gt;&lt;rect fill=&quot;#F1F1F1&quot; height=&quot;2&quot; style=&quot;stroke:#181818;stroke-width:0.5;&quot; width=&quot;4&quot; x=&quot;120&quot; y=&quot;122&quot;/&gt;&lt;rect fill=&quot;#F1F1F1&quot; height=&quot;2&quot; style=&quot;stroke:#181818;stroke-width:0.5;&quot; width=&quot;4&quot; x=&quot;120&quot; y=&quot;126&quot;/&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;14&quot; lengthAdjust=&quot;spacing&quot; textLength=&quot;95&quot; x=&quot;22&quot; y=&quot;149.5332&quot;&gt;ReadKeyboard&lt;/text&gt;&lt;/g&gt;&lt;!--MD5=[a5c73c821fd996ec4dded17d8be1735e]
entity WritePrinter--&gt;&lt;g id=&quot;elem_WritePrinter&quot;&gt;&lt;rect fill=&quot;#F1F1F1&quot; height=&quot;47.6094&quot; rx=&quot;2.5&quot; ry=&quot;2.5&quot; style=&quot;stroke:#181818;stroke-width:0.5;&quot; width=&quot;115&quot; x=&quot;177&quot; y=&quot;115&quot;/&gt;&lt;rect fill=&quot;#F1F1F1&quot; height=&quot;10&quot; style=&quot;stroke:#181818;stroke-width:0.5;&quot; width=&quot;15&quot; x=&quot;272&quot; y=&quot;120&quot;/&gt;&lt;rect fill=&quot;#F1F1F1&quot; height=&quot;2&quot; style=&quot;stroke:#181818;stroke-width:0.5;&quot; width=&quot;4&quot; x=&quot;270&quot; y=&quot;122&quot;/&gt;&lt;rect fill=&quot;#F1F1F1&quot; height=&quot;2&quot; style=&quot;stroke:#181818;stroke-width:0.5;&quot; width=&quot;4&quot; x=&quot;270&quot; y=&quot;126&quot;/&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;14&quot; lengthAdjust=&quot;spacing&quot; textLength=&quot;75&quot; x=&quot;192&quot; y=&quot;149.5332&quot;&gt;WritePrinter&lt;/text&gt;&lt;/g&gt;&lt;!--MD5=[5ade9657024523831a5bc3db15157f26]
entity WriteDisk--&gt;&lt;g id=&quot;elem_WriteDisk&quot;&gt;&lt;rect fill=&quot;#F1F1F1&quot; height=&quot;47.6094&quot; rx=&quot;2.5&quot; ry=&quot;2.5&quot; style=&quot;stroke:#181818;stroke-width:0.5;&quot; width=&quot;100&quot; x=&quot;327.5&quot; y=&quot;115&quot;/&gt;&lt;rect fill=&quot;#F1F1F1&quot; height=&quot;10&quot; style=&quot;stroke:#181818;stroke-width:0.5;&quot; width=&quot;15&quot; x=&quot;407.5&quot; y=&quot;120&quot;/&gt;&lt;rect fill=&quot;#F1F1F1&quot; height=&quot;2&quot; style=&quot;stroke:#181818;stroke-width:0.5;&quot; width=&quot;4&quot; x=&quot;405.5&quot; y=&quot;122&quot;/&gt;&lt;rect fill=&quot;#F1F1F1&quot; height=&quot;2&quot; style=&quot;stroke:#181818;stroke-width:0.5;&quot; width=&quot;4&quot; x=&quot;405.5&quot; y=&quot;126&quot;/&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;14&quot; lengthAdjust=&quot;spacing&quot; textLength=&quot;60&quot; x=&quot;342.5&quot; y=&quot;149.5332&quot;&gt;WriteDisk&lt;/text&gt;&lt;/g&gt;&lt;!--MD5=[b9f6fdcc5ffcf0aaa847362a19131062]
link Copy to ReadKeyboard--&gt;&lt;g id=&quot;link_Copy_ReadKeyboard&quot;&gt;&lt;path d=&quot;M199.78,55 C173.04,72.72 136.22,97.11 109.43,114.86 &quot; fill=&quot;none&quot; id=&quot;Copy-ReadKeyboard&quot; style=&quot;stroke:#181818;stroke-width:1.0;&quot;/&gt;&lt;/g&gt;&lt;!--MD5=[3f9d472f710945c80c6082d6418b4027]
link Copy to WritePrinter--&gt;&lt;g id=&quot;link_Copy_WritePrinter&quot;&gt;&lt;path d=&quot;M234.5,55 C234.5,72.66 234.5,96.94 234.5,114.68 &quot; fill=&quot;none&quot; id=&quot;Copy-WritePrinter&quot; style=&quot;stroke:#181818;stroke-width:1.0;&quot;/&gt;&lt;/g&gt;&lt;!--MD5=[faa9166566ff25fb78c93a4e76cd2a92]
link Copy to WriteDisk--&gt;&lt;g id=&quot;link_Copy_WriteDisk&quot;&gt;&lt;path d=&quot;M265.53,55 C289.35,72.66 322.11,96.94 346.04,114.68 &quot; fill=&quot;none&quot; id=&quot;Copy-WriteDisk&quot; style=&quot;stroke:#181818;stroke-width:1.0;&quot;/&gt;&lt;/g&gt;&lt;!--MD5=[a6789ce44686dfe2a0de11928782ebce]
@startuml
[Copy] - - [ReadKeyboard]
[Copy] - - [WritePrinter]
[Copy] - - [WriteDisk]
@enduml

PlantUML version 1.2022.3beta3(Unknown compile time)
(GPL source distribution)
Java Runtime: OpenJDK Runtime Environment
JVM: OpenJDK 64-Bit Server VM
Default Encoding: Cp1252
Language: en
Country: US
--&gt;&lt;/g&gt;&lt;/svg&gt;&lt;/div&gt;
&lt;/p&gt;
&lt;/div&gt;

&lt;p&gt;
这时候，代码可以这么写：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;enum&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;OutputDevice&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;printer&lt;/span&gt;, &lt;span style=&quot;color: #000000;&quot;&gt;disk&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;
&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;Copy&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;OutputDevice&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;dev&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;c&lt;/span&gt;;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;while&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;c = ReadKeyboard&lt;span style=&quot;color: #709870;&quot;&gt;()&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt; != EOF&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;
        &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;dev == printer&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt;
            WritePrinter&lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;c&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt;;
        &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;else&lt;/span&gt;
            WriteDisk&lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;c&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt;;
    &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
如果输入、输出设备种类更多，这样实现的代码就越来越难维护。所以我们需要抽象机制，让依赖关系建立在抽象实体上：
&lt;/p&gt;


&lt;div id=&quot;orgee89931&quot; class=&quot;figure&quot;&gt;
&lt;p&gt;&lt;div align=&quot;center&quot;&gt;&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; xmlns:xlink=&quot;http://www.w3.org/1999/xlink&quot; contentStyleType=&quot;text/css&quot; height=&quot;230px&quot; preserveAspectRatio=&quot;none&quot; style=&quot;width:582px;height:230px;background:#FFFFFF;&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 582 230&quot; width=&quot;582px&quot; zoomAndPan=&quot;magnify&quot;&gt;&lt;defs/&gt;&lt;g&gt;&lt;!--MD5=[e86a4777f2c0372cf9fb3cd047e1466e]
class Reader--&gt;&lt;g id=&quot;elem_Reader&quot;&gt;&lt;rect codeLine=&quot;2&quot; fill=&quot;#F1F1F1&quot; height=&quot;32&quot; id=&quot;Reader&quot; rx=&quot;2.5&quot; ry=&quot;2.5&quot; style=&quot;stroke:#181818;stroke-width:0.5;&quot; width=&quot;79&quot; x=&quot;199.5&quot; y=&quot;99&quot;/&gt;&lt;ellipse cx=&quot;214.5&quot; cy=&quot;115&quot; fill=&quot;#A9DCDF&quot; rx=&quot;11&quot; ry=&quot;11&quot; style=&quot;stroke:#181818;stroke-width:1.0;&quot;/&gt;&lt;path d=&quot;M216.6875,116.7656 L212.5469,116.7656 L212.125,117.7969 L212.5469,117.7969 Q213.1563,117.7969 213.4219,118.0313 Q213.6875,118.2656 213.6875,118.6563 Q213.6875,119.0313 213.4219,119.2656 Q213.1563,119.5 212.5469,119.5 L210.25,119.5 Q209.6406,119.5 209.3906,119.2656 Q209.125,119.0313 209.125,118.6406 Q209.125,118.2656 209.4063,118.0313 Q209.6719,117.7813 210.2969,117.7969 L212.9688,111.1406 L211.8594,111.1406 Q211.25,111.1406 210.9844,110.9063 Q210.7188,110.6719 210.7188,110.2813 Q210.7188,109.9063 210.9844,109.6719 Q211.25,109.4375 211.8594,109.4375 L215.5313,109.4375 L218.9219,117.7969 Q219.5156,117.7969 219.7031,117.9375 Q220.0938,118.2031 220.0938,118.6563 Q220.0938,119.0313 219.8281,119.2656 Q219.5781,119.5 218.9688,119.5 L216.6719,119.5 Q216.0625,119.5 215.7969,119.2656 Q215.5313,119.0313 215.5313,118.6406 Q215.5313,118.2656 215.7969,118.0313 Q216.0625,117.7969 216.6719,117.7969 L217.0938,117.7969 L216.6875,116.7656 Z M215.9688,115.0625 L214.6094,111.6875 L213.2344,115.0625 L215.9688,115.0625 Z &quot; fill=&quot;#000000&quot;/&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;14&quot; font-style=&quot;italic&quot; lengthAdjust=&quot;spacing&quot; textLength=&quot;47&quot; x=&quot;228.5&quot; y=&quot;120.7285&quot;&gt;Reader&lt;/text&gt;&lt;/g&gt;&lt;!--MD5=[86cfdc25119a3a20e0664f11a0f5b002]
class Writer--&gt;&lt;g id=&quot;elem_Writer&quot;&gt;&lt;rect codeLine=&quot;3&quot; fill=&quot;#F1F1F1&quot; height=&quot;32&quot; id=&quot;Writer&quot; rx=&quot;2.5&quot; ry=&quot;2.5&quot; style=&quot;stroke:#181818;stroke-width:0.5;&quot; width=&quot;71&quot; x=&quot;351.5&quot; y=&quot;99&quot;/&gt;&lt;ellipse cx=&quot;366.5&quot; cy=&quot;115&quot; fill=&quot;#A9DCDF&quot; rx=&quot;11&quot; ry=&quot;11&quot; style=&quot;stroke:#181818;stroke-width:1.0;&quot;/&gt;&lt;path d=&quot;M368.6875,116.7656 L364.5469,116.7656 L364.125,117.7969 L364.5469,117.7969 Q365.1563,117.7969 365.4219,118.0313 Q365.6875,118.2656 365.6875,118.6563 Q365.6875,119.0313 365.4219,119.2656 Q365.1563,119.5 364.5469,119.5 L362.25,119.5 Q361.6406,119.5 361.3906,119.2656 Q361.125,119.0313 361.125,118.6406 Q361.125,118.2656 361.4063,118.0313 Q361.6719,117.7813 362.2969,117.7969 L364.9688,111.1406 L363.8594,111.1406 Q363.25,111.1406 362.9844,110.9063 Q362.7188,110.6719 362.7188,110.2813 Q362.7188,109.9063 362.9844,109.6719 Q363.25,109.4375 363.8594,109.4375 L367.5313,109.4375 L370.9219,117.7969 Q371.5156,117.7969 371.7031,117.9375 Q372.0938,118.2031 372.0938,118.6563 Q372.0938,119.0313 371.8281,119.2656 Q371.5781,119.5 370.9688,119.5 L368.6719,119.5 Q368.0625,119.5 367.7969,119.2656 Q367.5313,119.0313 367.5313,118.6406 Q367.5313,118.2656 367.7969,118.0313 Q368.0625,117.7969 368.6719,117.7969 L369.0938,117.7969 L368.6875,116.7656 Z M367.9688,115.0625 L366.6094,111.6875 L365.2344,115.0625 L367.9688,115.0625 Z &quot; fill=&quot;#000000&quot;/&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;14&quot; font-style=&quot;italic&quot; lengthAdjust=&quot;spacing&quot; textLength=&quot;39&quot; x=&quot;380.5&quot; y=&quot;120.7285&quot;&gt;Writer&lt;/text&gt;&lt;/g&gt;&lt;!--MD5=[610e044baa5809942c5058657fa8e1e8]
class Copy--&gt;&lt;g id=&quot;elem_Copy&quot;&gt;&lt;rect fill=&quot;#F1F1F1&quot; height=&quot;32&quot; id=&quot;Copy&quot; rx=&quot;2.5&quot; ry=&quot;2.5&quot; style=&quot;stroke:#181818;stroke-width:0.5;&quot; width=&quot;65&quot; x=&quot;280.5&quot; y=&quot;7&quot;/&gt;&lt;ellipse cx=&quot;295.5&quot; cy=&quot;23&quot; fill=&quot;#ADD1B2&quot; rx=&quot;11&quot; ry=&quot;11&quot; style=&quot;stroke:#181818;stroke-width:1.0;&quot;/&gt;&lt;path d=&quot;M298.2656,18.875 Q298.4219,18.6563 298.6094,18.5469 Q298.7969,18.4375 299.0156,18.4375 Q299.3906,18.4375 299.625,18.7031 Q299.8594,18.9531 299.8594,19.5625 L299.8594,21.0156 Q299.8594,21.625 299.625,21.8906 Q299.3906,22.1563 299.0156,22.1563 Q298.6719,22.1563 298.4688,21.9531 Q298.2656,21.7656 298.1563,21.25 Q298.1094,20.8906 297.9219,20.7031 Q297.5938,20.3281 296.9844,20.1094 Q296.375,19.8906 295.75,19.8906 Q294.9844,19.8906 294.3438,20.2188 Q293.7188,20.5469 293.2188,21.2969 Q292.7344,22.0469 292.7344,23.0781 L292.7344,24.1719 Q292.7344,25.4063 293.625,26.2344 Q294.5156,27.0469 296.1094,27.0469 Q297.0469,27.0469 297.7031,26.7969 Q298.0938,26.6406 298.5156,26.2031 Q298.7813,25.9375 298.9219,25.8594 Q299.0781,25.7813 299.2813,25.7813 Q299.6094,25.7813 299.8594,26.0469 Q300.125,26.2969 300.125,26.6406 Q300.125,26.9844 299.7813,27.3906 Q299.2813,27.9688 298.4844,28.2969 Q297.4063,28.75 296.1094,28.75 Q294.5938,28.75 293.3906,28.125 Q292.4063,27.625 291.7188,26.5625 Q291.0313,25.4844 291.0313,24.2031 L291.0313,23.0469 Q291.0313,21.7188 291.6406,20.5781 Q292.2656,19.4219 293.3594,18.8125 Q294.4531,18.1875 295.6875,18.1875 Q296.4219,18.1875 297.0625,18.3594 Q297.7188,18.5156 298.2656,18.875 Z &quot; fill=&quot;#000000&quot;/&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;14&quot; lengthAdjust=&quot;spacing&quot; textLength=&quot;33&quot; x=&quot;309.5&quot; y=&quot;28.7285&quot;&gt;Copy&lt;/text&gt;&lt;/g&gt;&lt;!--MD5=[c68246172ee93dba2402bd022e16b90e]
class KeyboardReader--&gt;&lt;g id=&quot;elem_KeyboardReader&quot;&gt;&lt;rect fill=&quot;#F1F1F1&quot; height=&quot;32&quot; id=&quot;KeyboardReader&quot; rx=&quot;2.5&quot; ry=&quot;2.5&quot; style=&quot;stroke:#181818;stroke-width:0.5;&quot; width=&quot;140&quot; x=&quot;7&quot; y=&quot;191&quot;/&gt;&lt;ellipse cx=&quot;22&quot; cy=&quot;207&quot; fill=&quot;#ADD1B2&quot; rx=&quot;11&quot; ry=&quot;11&quot; style=&quot;stroke:#181818;stroke-width:1.0;&quot;/&gt;&lt;path d=&quot;M24.7656,202.875 Q24.9219,202.6563 25.1094,202.5469 Q25.2969,202.4375 25.5156,202.4375 Q25.8906,202.4375 26.125,202.7031 Q26.3594,202.9531 26.3594,203.5625 L26.3594,205.0156 Q26.3594,205.625 26.125,205.8906 Q25.8906,206.1563 25.5156,206.1563 Q25.1719,206.1563 24.9688,205.9531 Q24.7656,205.7656 24.6563,205.25 Q24.6094,204.8906 24.4219,204.7031 Q24.0938,204.3281 23.4844,204.1094 Q22.875,203.8906 22.25,203.8906 Q21.4844,203.8906 20.8438,204.2188 Q20.2188,204.5469 19.7188,205.2969 Q19.2344,206.0469 19.2344,207.0781 L19.2344,208.1719 Q19.2344,209.4063 20.125,210.2344 Q21.0156,211.0469 22.6094,211.0469 Q23.5469,211.0469 24.2031,210.7969 Q24.5938,210.6406 25.0156,210.2031 Q25.2813,209.9375 25.4219,209.8594 Q25.5781,209.7813 25.7813,209.7813 Q26.1094,209.7813 26.3594,210.0469 Q26.625,210.2969 26.625,210.6406 Q26.625,210.9844 26.2813,211.3906 Q25.7813,211.9688 24.9844,212.2969 Q23.9063,212.75 22.6094,212.75 Q21.0938,212.75 19.8906,212.125 Q18.9063,211.625 18.2188,210.5625 Q17.5313,209.4844 17.5313,208.2031 L17.5313,207.0469 Q17.5313,205.7188 18.1406,204.5781 Q18.7656,203.4219 19.8594,202.8125 Q20.9531,202.1875 22.1875,202.1875 Q22.9219,202.1875 23.5625,202.3594 Q24.2188,202.5156 24.7656,202.875 Z &quot; fill=&quot;#000000&quot;/&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;14&quot; lengthAdjust=&quot;spacing&quot; textLength=&quot;108&quot; x=&quot;36&quot; y=&quot;212.7285&quot;&gt;KeyboardReader&lt;/text&gt;&lt;/g&gt;&lt;!--MD5=[d9700bdc20a4e8d9dca2d6993be9ea80]
class VoiceReader--&gt;&lt;g id=&quot;elem_VoiceReader&quot;&gt;&lt;rect fill=&quot;#F1F1F1&quot; height=&quot;32&quot; id=&quot;VoiceReader&quot; rx=&quot;2.5&quot; ry=&quot;2.5&quot; style=&quot;stroke:#181818;stroke-width:0.5;&quot; width=&quot;114&quot; x=&quot;182&quot; y=&quot;191&quot;/&gt;&lt;ellipse cx=&quot;197&quot; cy=&quot;207&quot; fill=&quot;#ADD1B2&quot; rx=&quot;11&quot; ry=&quot;11&quot; style=&quot;stroke:#181818;stroke-width:1.0;&quot;/&gt;&lt;path d=&quot;M199.7656,202.875 Q199.9219,202.6563 200.1094,202.5469 Q200.2969,202.4375 200.5156,202.4375 Q200.8906,202.4375 201.125,202.7031 Q201.3594,202.9531 201.3594,203.5625 L201.3594,205.0156 Q201.3594,205.625 201.125,205.8906 Q200.8906,206.1563 200.5156,206.1563 Q200.1719,206.1563 199.9688,205.9531 Q199.7656,205.7656 199.6563,205.25 Q199.6094,204.8906 199.4219,204.7031 Q199.0938,204.3281 198.4844,204.1094 Q197.875,203.8906 197.25,203.8906 Q196.4844,203.8906 195.8438,204.2188 Q195.2188,204.5469 194.7188,205.2969 Q194.2344,206.0469 194.2344,207.0781 L194.2344,208.1719 Q194.2344,209.4063 195.125,210.2344 Q196.0156,211.0469 197.6094,211.0469 Q198.5469,211.0469 199.2031,210.7969 Q199.5938,210.6406 200.0156,210.2031 Q200.2813,209.9375 200.4219,209.8594 Q200.5781,209.7813 200.7813,209.7813 Q201.1094,209.7813 201.3594,210.0469 Q201.625,210.2969 201.625,210.6406 Q201.625,210.9844 201.2813,211.3906 Q200.7813,211.9688 199.9844,212.2969 Q198.9063,212.75 197.6094,212.75 Q196.0938,212.75 194.8906,212.125 Q193.9063,211.625 193.2188,210.5625 Q192.5313,209.4844 192.5313,208.2031 L192.5313,207.0469 Q192.5313,205.7188 193.1406,204.5781 Q193.7656,203.4219 194.8594,202.8125 Q195.9531,202.1875 197.1875,202.1875 Q197.9219,202.1875 198.5625,202.3594 Q199.2188,202.5156 199.7656,202.875 Z &quot; fill=&quot;#000000&quot;/&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;14&quot; lengthAdjust=&quot;spacing&quot; textLength=&quot;82&quot; x=&quot;211&quot; y=&quot;212.7285&quot;&gt;VoiceReader&lt;/text&gt;&lt;/g&gt;&lt;!--MD5=[e5c43a7b379a1466681f869fd576f699]
class PrinterWriter--&gt;&lt;g id=&quot;elem_PrinterWriter&quot;&gt;&lt;rect fill=&quot;#F1F1F1&quot; height=&quot;32&quot; id=&quot;PrinterWriter&quot; rx=&quot;2.5&quot; ry=&quot;2.5&quot; style=&quot;stroke:#181818;stroke-width:0.5;&quot; width=&quot;112&quot; x=&quot;331&quot; y=&quot;191&quot;/&gt;&lt;ellipse cx=&quot;346&quot; cy=&quot;207&quot; fill=&quot;#ADD1B2&quot; rx=&quot;11&quot; ry=&quot;11&quot; style=&quot;stroke:#181818;stroke-width:1.0;&quot;/&gt;&lt;path d=&quot;M348.7656,202.875 Q348.9219,202.6563 349.1094,202.5469 Q349.2969,202.4375 349.5156,202.4375 Q349.8906,202.4375 350.125,202.7031 Q350.3594,202.9531 350.3594,203.5625 L350.3594,205.0156 Q350.3594,205.625 350.125,205.8906 Q349.8906,206.1563 349.5156,206.1563 Q349.1719,206.1563 348.9688,205.9531 Q348.7656,205.7656 348.6563,205.25 Q348.6094,204.8906 348.4219,204.7031 Q348.0938,204.3281 347.4844,204.1094 Q346.875,203.8906 346.25,203.8906 Q345.4844,203.8906 344.8438,204.2188 Q344.2188,204.5469 343.7188,205.2969 Q343.2344,206.0469 343.2344,207.0781 L343.2344,208.1719 Q343.2344,209.4063 344.125,210.2344 Q345.0156,211.0469 346.6094,211.0469 Q347.5469,211.0469 348.2031,210.7969 Q348.5938,210.6406 349.0156,210.2031 Q349.2813,209.9375 349.4219,209.8594 Q349.5781,209.7813 349.7813,209.7813 Q350.1094,209.7813 350.3594,210.0469 Q350.625,210.2969 350.625,210.6406 Q350.625,210.9844 350.2813,211.3906 Q349.7813,211.9688 348.9844,212.2969 Q347.9063,212.75 346.6094,212.75 Q345.0938,212.75 343.8906,212.125 Q342.9063,211.625 342.2188,210.5625 Q341.5313,209.4844 341.5313,208.2031 L341.5313,207.0469 Q341.5313,205.7188 342.1406,204.5781 Q342.7656,203.4219 343.8594,202.8125 Q344.9531,202.1875 346.1875,202.1875 Q346.9219,202.1875 347.5625,202.3594 Q348.2188,202.5156 348.7656,202.875 Z &quot; fill=&quot;#000000&quot;/&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;14&quot; lengthAdjust=&quot;spacing&quot; textLength=&quot;80&quot; x=&quot;360&quot; y=&quot;212.7285&quot;&gt;PrinterWriter&lt;/text&gt;&lt;/g&gt;&lt;!--MD5=[16b31d7c187becadea07d13bfcecb8c4]
class DiskWriter--&gt;&lt;g id=&quot;elem_DiskWriter&quot;&gt;&lt;rect fill=&quot;#F1F1F1&quot; height=&quot;32&quot; id=&quot;DiskWriter&quot; rx=&quot;2.5&quot; ry=&quot;2.5&quot; style=&quot;stroke:#181818;stroke-width:0.5;&quot; width=&quot;97&quot; x=&quot;478.5&quot; y=&quot;191&quot;/&gt;&lt;ellipse cx=&quot;493.5&quot; cy=&quot;207&quot; fill=&quot;#ADD1B2&quot; rx=&quot;11&quot; ry=&quot;11&quot; style=&quot;stroke:#181818;stroke-width:1.0;&quot;/&gt;&lt;path d=&quot;M496.2656,202.875 Q496.4219,202.6563 496.6094,202.5469 Q496.7969,202.4375 497.0156,202.4375 Q497.3906,202.4375 497.625,202.7031 Q497.8594,202.9531 497.8594,203.5625 L497.8594,205.0156 Q497.8594,205.625 497.625,205.8906 Q497.3906,206.1563 497.0156,206.1563 Q496.6719,206.1563 496.4688,205.9531 Q496.2656,205.7656 496.1563,205.25 Q496.1094,204.8906 495.9219,204.7031 Q495.5938,204.3281 494.9844,204.1094 Q494.375,203.8906 493.75,203.8906 Q492.9844,203.8906 492.3438,204.2188 Q491.7188,204.5469 491.2188,205.2969 Q490.7344,206.0469 490.7344,207.0781 L490.7344,208.1719 Q490.7344,209.4063 491.625,210.2344 Q492.5156,211.0469 494.1094,211.0469 Q495.0469,211.0469 495.7031,210.7969 Q496.0938,210.6406 496.5156,210.2031 Q496.7813,209.9375 496.9219,209.8594 Q497.0781,209.7813 497.2813,209.7813 Q497.6094,209.7813 497.8594,210.0469 Q498.125,210.2969 498.125,210.6406 Q498.125,210.9844 497.7813,211.3906 Q497.2813,211.9688 496.4844,212.2969 Q495.4063,212.75 494.1094,212.75 Q492.5938,212.75 491.3906,212.125 Q490.4063,211.625 489.7188,210.5625 Q489.0313,209.4844 489.0313,208.2031 L489.0313,207.0469 Q489.0313,205.7188 489.6406,204.5781 Q490.2656,203.4219 491.3594,202.8125 Q492.4531,202.1875 493.6875,202.1875 Q494.4219,202.1875 495.0625,202.3594 Q495.7188,202.5156 496.2656,202.875 Z &quot; fill=&quot;#000000&quot;/&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;14&quot; lengthAdjust=&quot;spacing&quot; textLength=&quot;65&quot; x=&quot;507.5&quot; y=&quot;212.7285&quot;&gt;DiskWriter&lt;/text&gt;&lt;/g&gt;&lt;!--MD5=[bc51155a0bfc765cb07074edec72a9d7]
reverse link Copy to Reader--&gt;&lt;g id=&quot;link_Copy_Reader&quot;&gt;&lt;path codeLine=&quot;5&quot; d=&quot;M292,49.54 C278.88,65.5 262.43,85.5 251.37,98.96 &quot; fill=&quot;none&quot; id=&quot;Copy-backto-Reader&quot; style=&quot;stroke:#181818;stroke-width:1.0;&quot;/&gt;&lt;polygon fill=&quot;none&quot; points=&quot;300.45,39.27,293.5497,41.3643,292.8289,48.5392,299.7292,46.445,300.45,39.27&quot; style=&quot;stroke:#181818;stroke-width:1.0;&quot;/&gt;&lt;/g&gt;&lt;!--MD5=[369b5eb0453c6ffc5e421eaa44b4f5b8]
reverse link Copy to Writer--&gt;&lt;g id=&quot;link_Copy_Writer&quot;&gt;&lt;path codeLine=&quot;6&quot; d=&quot;M334,49.54 C347.12,65.5 363.57,85.5 374.63,98.96 &quot; fill=&quot;none&quot; id=&quot;Copy-backto-Writer&quot; style=&quot;stroke:#181818;stroke-width:1.0;&quot;/&gt;&lt;polygon fill=&quot;none&quot; points=&quot;325.55,39.27,326.2708,46.445,333.1711,48.5392,332.4503,41.3643,325.55,39.27&quot; style=&quot;stroke:#181818;stroke-width:1.0;&quot;/&gt;&lt;/g&gt;&lt;!--MD5=[a593589358843ac7f3acf584c8650ea7]
reverse link Reader to KeyboardReader--&gt;&lt;g id=&quot;link_Reader_KeyboardReader&quot;&gt;&lt;path codeLine=&quot;7&quot; d=&quot;M194.24,140.87 C165.37,156.91 128.76,177.24 104.2,190.89 &quot; fill=&quot;none&quot; id=&quot;Reader-backto-KeyboardReader&quot; style=&quot;stroke:#181818;stroke-width:1.0;&quot;/&gt;&lt;polygon fill=&quot;none&quot; points=&quot;191,134.66,211.88,131.06,197.8,146.9,191,134.66&quot; style=&quot;stroke:#181818;stroke-width:1.0;&quot;/&gt;&lt;/g&gt;&lt;!--MD5=[5c2b6e51819601c0f8fb50b8c92d3fc2]
reverse link Reader to VoiceReader--&gt;&lt;g id=&quot;link_Reader_VoiceReader&quot;&gt;&lt;path codeLine=&quot;8&quot; d=&quot;M239,151.61 C239,165.31 239,180.22 239,190.96 &quot; fill=&quot;none&quot; id=&quot;Reader-backto-VoiceReader&quot; style=&quot;stroke:#181818;stroke-width:1.0;&quot;/&gt;&lt;polygon fill=&quot;none&quot; points=&quot;232,151.27,239,131.27,246,151.27,232,151.27&quot; style=&quot;stroke:#181818;stroke-width:1.0;&quot;/&gt;&lt;/g&gt;&lt;!--MD5=[6fcda4408732c7ea6dbaa519d9413fc9]
reverse link Writer to PrinterWriter--&gt;&lt;g id=&quot;link_Writer_PrinterWriter&quot;&gt;&lt;path codeLine=&quot;9&quot; d=&quot;M387,151.61 C387,165.31 387,180.22 387,190.96 &quot; fill=&quot;none&quot; id=&quot;Writer-backto-PrinterWriter&quot; style=&quot;stroke:#181818;stroke-width:1.0;&quot;/&gt;&lt;polygon fill=&quot;none&quot; points=&quot;380,151.27,387,131.27,394,151.27,380,151.27&quot; style=&quot;stroke:#181818;stroke-width:1.0;&quot;/&gt;&lt;/g&gt;&lt;!--MD5=[589d8a21fd0bbee131c03ad1e6f759d8]
reverse link Writer to DiskWriter--&gt;&lt;g id=&quot;link_Writer_DiskWriter&quot;&gt;&lt;path codeLine=&quot;10&quot; d=&quot;M427.48,142.02 C452.13,157.87 482.77,177.57 503.49,190.89 &quot; fill=&quot;none&quot; id=&quot;Writer-backto-DiskWriter&quot; style=&quot;stroke:#181818;stroke-width:1.0;&quot;/&gt;&lt;polygon fill=&quot;none&quot; points=&quot;423.47,147.77,410.43,131.06,431.04,135.99,423.47,147.77&quot; style=&quot;stroke:#181818;stroke-width:1.0;&quot;/&gt;&lt;/g&gt;&lt;!--MD5=[eeb83188ba709ede5a5269386b024635]
@startuml
hide members
abstract class Reader
abstract class Writer

Copy o- - Reader
Copy o- - Writer
Reader &lt;|- - KeyboardReader
Reader &lt;|- - VoiceReader
Writer &lt;|- - PrinterWriter
Writer &lt;|- - DiskWriter
@enduml

PlantUML version 1.2022.3beta3(Unknown compile time)
(GPL source distribution)
Java Runtime: OpenJDK Runtime Environment
JVM: OpenJDK 64-Bit Server VM
Default Encoding: Cp1252
Language: en
Country: US
--&gt;&lt;/g&gt;&lt;/svg&gt;&lt;/div&gt;
&lt;/p&gt;
&lt;/div&gt;

&lt;p&gt;
代码实现如下。这时候，Copy 函数就不用关心 Reader 和 Writer 的具体实现，只依赖于抽象类的虚函数接口。
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Reader&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
  &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;public&lt;/span&gt;:
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;virtual&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;Read&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt; = 0;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Writer&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
  &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;public&lt;/span&gt;:
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;virtual&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;Write&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;char&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; = 0;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;

&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;Copy&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Reader&lt;/span&gt;&amp;amp; &lt;span style=&quot;color: #000000;&quot;&gt;r&lt;/span&gt;, &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Writer&lt;/span&gt;&amp;amp; &lt;span style=&quot;color: #000000;&quot;&gt;w&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;c&lt;/span&gt;;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;while&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;c=r.Read&lt;span style=&quot;color: #709870;&quot;&gt;()&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt; != EOF&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;
        w.Write&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;c&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
在函数式编程语言中，DIP 原则也很普遍。比如 Clojure 的 &lt;code&gt;map&lt;/code&gt; 函数，它不依赖于具体的数据类型，只关心抽象接口。 &lt;code&gt;map&lt;/code&gt; 接受实现 &lt;code&gt;clojure.lang.IFn&lt;/code&gt; 抽象的函数，处理实现可顺序访问，可 &lt;code&gt;seq&lt;/code&gt; 的数据，也就是 &lt;code&gt;seqable?&lt;/code&gt; 的数据对象。
&lt;/p&gt;

&lt;p&gt;
例如：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-clojure&quot;&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;map&lt;/span&gt; - &lt;span style=&quot;color: #7388d6;&quot;&gt;[&lt;/span&gt;1 2 3&lt;span style=&quot;color: #7388d6;&quot;&gt;]&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;pre class=&quot;example&quot;&gt;
(-1 -2 -3)

&lt;/pre&gt;


&lt;p&gt;
这里， &lt;code&gt;-&lt;/code&gt; 函数实现了 &lt;code&gt;clojure.lang.IFn&lt;/code&gt; ：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-clojure&quot;&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;instance?&lt;/span&gt; clojure.lang.IFn -&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;pre class=&quot;example&quot;&gt;
true

&lt;/pre&gt;


&lt;p&gt;
而 &lt;code&gt;vec&lt;/code&gt; &lt;code&gt;[1 2 3]&lt;/code&gt; 则是 &lt;code&gt;seqable&lt;/code&gt; 的：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-clojure&quot;&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;seqable?&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;[&lt;/span&gt;1 2 3&lt;span style=&quot;color: #7388d6;&quot;&gt;]&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;pre class=&quot;example&quot;&gt;
true

&lt;/pre&gt;


&lt;p&gt;
在 Clojure 中，DIP 原则用的很广泛，从而确保很多核心函数可以充分地在抽象层面重用。
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines ES.79 只用 default 处理共用的逻辑</title>
   <link href="http://kimi.im/2023-05-12-cppcoreguidelines-es79"/>
   <updated>2023-05-12T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-es79</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;Use &lt;code&gt;default&lt;/code&gt; to handle common cases (only)&amp;rdquo;
&lt;/p&gt;

&lt;p&gt;
理由
&lt;/p&gt;

&lt;p&gt;
代码清晰度。增加发现潜在错误的机会。
&lt;/p&gt;

&lt;p&gt;
例子
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;enum&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;E&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;a&lt;/span&gt;, &lt;span style=&quot;color: #000000;&quot;&gt;b&lt;/span&gt;, &lt;span style=&quot;color: #000000;&quot;&gt;c&lt;/span&gt;, &lt;span style=&quot;color: #000000;&quot;&gt;d&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;

&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;f1&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;E&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;x&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;switch&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;x&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;case&lt;/span&gt; a:
        do_something&lt;span style=&quot;color: #909183;&quot;&gt;()&lt;/span&gt;;
        &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;break&lt;/span&gt;;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;case&lt;/span&gt; b:
        do_something_else&lt;span style=&quot;color: #909183;&quot;&gt;()&lt;/span&gt;;
        &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;break&lt;/span&gt;;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;default&lt;/span&gt;:
        take_the_default_action&lt;span style=&quot;color: #909183;&quot;&gt;()&lt;/span&gt;;
        &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;break&lt;/span&gt;;
    &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
这段代码很清晰的说明，x 为 a、b 的时候，需要特殊操作，其他默认情况则在
&lt;code&gt;default&lt;/code&gt; 标签下。
&lt;/p&gt;


&lt;p&gt;
例子
&lt;/p&gt;

&lt;p&gt;
如果你只处理特殊的条件，没有默认的逻辑，怎么办？这时候，最好添加一个空的 &lt;code&gt;default&lt;/code&gt; 段，不然别人不知道你是不是处理完全了所有的情况。
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;f2&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;E&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;x&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;switch&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;x&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;case&lt;/span&gt; a:
        do_something&lt;span style=&quot;color: #909183;&quot;&gt;()&lt;/span&gt;;
        &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;break&lt;/span&gt;;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;case&lt;/span&gt; b:
        do_something_else&lt;span style=&quot;color: #909183;&quot;&gt;()&lt;/span&gt;;
        &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;break&lt;/span&gt;;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;default&lt;/span&gt;:
        &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;do nothing for the rest of the cases&lt;/span&gt;
        &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;break&lt;/span&gt;;
    &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;
如果你去掉 &lt;code&gt;default&lt;/code&gt; ，其他维护人员或编译器就会认为你已经把各种情况都考虑进去了：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;f2&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;E&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;x&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;switch&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;x&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;case&lt;/span&gt; a:
        do_something&lt;span style=&quot;color: #909183;&quot;&gt;()&lt;/span&gt;;
        &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;break&lt;/span&gt;;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;case&lt;/span&gt; b:
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;case&lt;/span&gt; c:
        do_something_else&lt;span style=&quot;color: #909183;&quot;&gt;()&lt;/span&gt;;
        &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;break&lt;/span&gt;;
    &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
你有没有漏掉 &lt;code&gt;x == d&lt;/code&gt; 的情况？有时候，当你增加了枚举值的时候，很容易忘记添加响应的处理逻辑。这时候，就可能出麻烦了。
&lt;/p&gt;


&lt;p&gt;
强化
&lt;/p&gt;

&lt;p&gt;
标记在 &lt;code&gt;switch&lt;/code&gt; 语句处理枚举的地方，没有处理所有枚举值，且没有 &lt;code&gt;default&lt;/code&gt; 的情况。
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines ES.78 不要在 switch 语句中使用默认向下执行机制</title>
   <link href="http://kimi.im/2023-05-11-cppcoreguidelines-es78"/>
   <updated>2023-05-11T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-es78</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;Don’t rely on implicit fallthrough in &lt;code&gt;switch&lt;/code&gt; statements&amp;rdquo;
&lt;/p&gt;

&lt;p&gt;
理由
&lt;/p&gt;

&lt;p&gt;
总是以 &lt;code&gt;break&lt;/code&gt; 结束有语句的 &lt;code&gt;case&lt;/code&gt; 。不小心漏掉 &lt;code&gt;break&lt;/code&gt; 是很常见的 bug。故意设置的 fallthrough 会导致维护灾难。必须清晰说明且尽量少用。
&lt;/p&gt;

&lt;p&gt;
例子
&lt;/p&gt;
&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;switch&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;eventType&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;case&lt;/span&gt; Information:
    update_status_bar&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt;;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;break&lt;/span&gt;;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;case&lt;/span&gt; Warning:
    write_event_log&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt;;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;Bad - implicit fallthrough&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;case&lt;/span&gt; Error:
    display_error_window&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt;;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;break&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
多个 &lt;code&gt;case&lt;/code&gt; 共用一个执行语句段是可以的。
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;switch&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;x&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;case&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&apos;a&apos;&lt;/span&gt;:
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;case&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&apos;b&apos;&lt;/span&gt;:
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;case&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&apos;f&apos;&lt;/span&gt;:
    do_something&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;x&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;break&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
从 &lt;code&gt;case&lt;/code&gt; 中返回的话，也可以不用加 &lt;code&gt;break&lt;/code&gt; 
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;switch&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;x&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;case&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&apos;a&apos;&lt;/span&gt;:
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; 1;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;case&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&apos;b&apos;&lt;/span&gt;:
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; 2;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;case&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&apos;c&apos;&lt;/span&gt;:
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; 3;

&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;
例外
&lt;/p&gt;

&lt;p&gt;
如果实际需要 fallthrough 机制，可以显式的用 &lt;code&gt;[[fallthrough]]&lt;/code&gt; 标记说明：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;switch&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;eventType&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;case&lt;/span&gt; Information:
    update_status_bar&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt;;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;break&lt;/span&gt;;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;case&lt;/span&gt; Warning:
    write_event_log&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt;;
    &lt;span style=&quot;color: #7388d6;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;[&lt;/span&gt;fallthrough&lt;span style=&quot;color: #909183;&quot;&gt;]&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;]&lt;/span&gt;;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;case&lt;/span&gt; Error:
    display_error_window&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt;;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;break&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
强化
&lt;/p&gt;

&lt;p&gt;
标记所有隐式 fallthrough 的非空 &lt;code&gt;case&lt;/code&gt;
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>单词本：avant-garde</title>
   <link href="http://kimi.im/2023-05-11-avant-garde"/>
   <updated>2023-05-11T00:00:00+00:00</updated>
   <id>http://kimi.im/avant-garde</id>
   <content type="html">&lt;p&gt;
今天介绍一个从法语里传来的单词，avant-garde。意思是先锋、前卫。比如：
&lt;/p&gt;

&lt;p&gt;
works by artists of the Russian &lt;b&gt;avant-garde&lt;/b&gt; 俄罗斯前卫艺术家的作品。
&lt;/p&gt;

&lt;p&gt;
这个词的本意是部队的先锋队（avant-garde générale, avant-garde
stratégique, avant-garde d&amp;rsquo;armée），他们在大部队前面行动，确保主力军有足够的时间行动。
&lt;/p&gt;

&lt;p&gt;
再举个例子：
&lt;/p&gt;

&lt;p&gt;
Due to jazz&amp;rsquo;s emphasis on progressive harmonic ideas, improvisation,
and non-traditional structure, the musical &lt;b&gt;avant-garde&lt;/b&gt; has often
intersected with jazz music. 因为爵士乐注重即兴创作、创新结构，前卫音乐总是与爵士乐重叠。
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines ES.77 在循环中尽量少用 break 和 continue</title>
   <link href="http://kimi.im/2023-05-10-cppcoreguidelines-es77"/>
   <updated>2023-05-10T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-es77</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;Minimize the use of &lt;code&gt;break&lt;/code&gt; and &lt;code&gt;continue&lt;/code&gt; in loops&amp;rdquo;
&lt;/p&gt;

&lt;p&gt;
理由 
&lt;/p&gt;

&lt;p&gt;
我们很容易在复杂一些的循环体中，忽视掉  &lt;code&gt;break&lt;/code&gt; 和 &lt;code&gt;continue&lt;/code&gt; 语句。尤其是在 &lt;code&gt;switch&lt;/code&gt; 和循环一起用的时候，这时候，很容易丢掉 &lt;code&gt;switch&lt;/code&gt; &lt;code&gt;case&lt;/code&gt; 的 &lt;code&gt;break&lt;/code&gt; 。
&lt;/p&gt;

&lt;p&gt;
比如：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;switch&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;x&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;case&lt;/span&gt; 1 :
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;while&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;/* &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;some condition&lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt; */&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;
        &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;...&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;break&lt;/span&gt;;
    &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;Oops! break switch or break while intended?&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;case&lt;/span&gt; 2 :
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;...&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;break&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
通常，如果循环中需要 &lt;code&gt;break&lt;/code&gt; ，可以考虑是否增加一个算法函数。这样，
&lt;code&gt;break&lt;/code&gt; 处可以用 &lt;code&gt;return&lt;/code&gt; 替代。
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;//&lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;Original code: break inside loop&lt;/span&gt;
&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;use1&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #110099;&quot;&gt;std&lt;/span&gt;::&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;vector&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;&amp;lt;&lt;/span&gt;T&lt;span style=&quot;color: #7388d6;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;vec&lt;/span&gt; = &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;/* &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;initialized with some values&lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt; */&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;value&lt;/span&gt;;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;for&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;item&lt;/span&gt; : vec&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;
        &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;/* &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;some condition&lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;*/&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #909183;&quot;&gt;{&lt;/span&gt;
            value = item;
            &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;break&lt;/span&gt;;
        &lt;span style=&quot;color: #909183;&quot;&gt;}&lt;/span&gt;
    &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;/* &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;then do something with value&lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt; */&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;

&lt;span style=&quot;color: #3F7F5F;&quot;&gt;//&lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;BETTER: create a function and return inside loop&lt;/span&gt;
&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;search&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;std&lt;/span&gt;::&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;vector&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;&amp;gt;&lt;/span&gt; &amp;amp;&lt;span style=&quot;color: #000000;&quot;&gt;vec&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;for&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt; &amp;amp;&lt;span style=&quot;color: #000000;&quot;&gt;item&lt;/span&gt; : vec&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;
        &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;/* &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;some condition&lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;*/&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; item;
    &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; T&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt;; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;//&lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;default value&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;

&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;use2&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #110099;&quot;&gt;std&lt;/span&gt;::&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;vector&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;vec&lt;/span&gt; = &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;/* &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;initialized with some values&lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt; */&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;value&lt;/span&gt; = search&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;vec&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;/* &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;then do something with value&lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt; */&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
通常在循环中，用到 &lt;code&gt;continue&lt;/code&gt; 的地方可以通过 &lt;code&gt;if&lt;/code&gt; 语句清晰的表达：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;for&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;item&lt;/span&gt; : vec&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;  &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;BAD&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;item%2 == 0&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;continue&lt;/span&gt;;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;item == 5&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;continue&lt;/span&gt;;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;item &amp;gt; 10&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;continue&lt;/span&gt;;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;/* &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;do something with item&lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt; */&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;for&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;item&lt;/span&gt; : vec&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;  &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;GOOD&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;item%2 != 0 &amp;amp;&amp;amp; item != 5 &amp;amp;&amp;amp; item &amp;lt;= 10&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;
        &lt;span style=&quot;color: #3F7F5F;&quot;&gt;/* &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;do something with item&lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt; */&lt;/span&gt;
    &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;
注意
&lt;/p&gt;

&lt;p&gt;
如果你确实需要从循环跳出，那么一般来说，用 &lt;code&gt;break&lt;/code&gt; 比修改循环变量，或者使用 &lt;code&gt;goto&lt;/code&gt; 要更佳。
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines ES.76 避免 goto</title>
   <link href="http://kimi.im/2023-05-10-cppcoreguidelines-es76"/>
   <updated>2023-05-10T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-es76</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;Avoid &lt;code&gt;goto&lt;/code&gt;&amp;rdquo;
&lt;/p&gt;

&lt;p&gt;
理由 
&lt;/p&gt;

&lt;p&gt;
可读性好，避免错误。 &lt;code&gt;goto&lt;/code&gt; 是机器产生的代码，除了 &lt;code&gt;goto&lt;/code&gt; 还有其他更好的适合人类的控制结构。
&lt;/p&gt;


&lt;p&gt;
例外
&lt;/p&gt;

&lt;p&gt;
从内层循环跳出的时候，还是会用得到 &lt;code&gt;goto&lt;/code&gt; 。但是一般总是向前跳转。
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;for&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;i&lt;/span&gt; = 0; i &amp;lt; imax; ++i&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;for&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;j&lt;/span&gt; = 0; j &amp;lt; jmax; ++j&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
        &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;a&lt;span style=&quot;color: #909183;&quot;&gt;[&lt;/span&gt;i&lt;span style=&quot;color: #909183;&quot;&gt;][&lt;/span&gt;j&lt;span style=&quot;color: #909183;&quot;&gt;]&lt;/span&gt; &amp;gt; elem_max&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;goto&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;finished&lt;/span&gt;;
        &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;...&lt;/span&gt;
    &lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: #110099;&quot;&gt;finished&lt;/span&gt;:
&lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;...&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
坏例子
&lt;/p&gt;

&lt;p&gt;
有很多这样的例子，大量的代码用了 C 的 goto-exit 习语：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;...&lt;/span&gt;
        &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;goto&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;exit&lt;/span&gt;;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;...&lt;/span&gt;
        &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;goto&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;exit&lt;/span&gt;;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;...&lt;/span&gt;
&lt;span style=&quot;color: #110099;&quot;&gt;exit&lt;/span&gt;:
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;... common cleanup code ...&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
其实这是一种析构函数的临时模拟。最好还是把你用到的资源封装到对象中，通过析构函数做清理工作。如果因为某些原因，无法通过析构函数完成所有的清理工作，可以考虑用 &lt;code&gt;gsl::finally()&lt;/code&gt; 。这个方法比 goto-exit 更可靠。
&lt;/p&gt;


&lt;p&gt;
强化 
&lt;/p&gt;

&lt;p&gt;
标记用到 &lt;code&gt;goto&lt;/code&gt; 的地方。或者，能够标记除了从嵌套循环跳出语句之外的所有 &lt;code&gt;goto&lt;/code&gt;
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>单词本：to throw in the towel</title>
   <link href="http://kimi.im/2023-05-10-to-throw-in-the-towel"/>
   <updated>2023-05-10T00:00:00+00:00</updated>
   <id>http://kimi.im/to-throw-in-the-towel</id>
   <content type="html">&lt;p&gt;
在一本叫 Master Mentors 的书中读到：There is differentiating value in
continuing to work on a worthy problem and persistently ‘figure things
out’ even when others are ready &lt;b&gt;to throw in the towel&lt;/b&gt;, give up or walk
away.
&lt;/p&gt;

&lt;p&gt;
意思是说，差异化的价值体现在是否能够坚持不懈地在一个有价值的难题上坚持不懈的持续做下去，哪怕别人投降认输、放弃、走开。
&lt;/p&gt;

&lt;p&gt;
这里用到了 to throw in the towel 表示弃甲曳兵认输投降。这个说法源自拳击运动，原本指拳击运动员的教练向擂台里扔毛巾以示认输的做法。现在的用法泛指经过尝试经过努力，意识到自己还是办不到，只好放弃咯。to stop trying
to do something because you have realized that you cannot succeed.
&lt;/p&gt;

&lt;p&gt;
再举几个例子：
&lt;/p&gt;

&lt;p&gt;
Manchester City midfielder Kalvin Phillips &amp;rsquo;won&amp;rsquo;t be ready &lt;b&gt;to throw in
the towel&lt;/b&gt;&amp;rsquo; at the Etihad Stadium, journalist Pete O&amp;rsquo;Rourke has told
GIVEMESPORT on 7 May 2023.
&lt;/p&gt;

&lt;p&gt;
Airbnb Q1 Earnings: I Am Not Throwing The Towel.
&lt;/p&gt;

&lt;p&gt;
人生很难啊，遇到久攻不破的难题，到底是继续死磕到底呢，还是丢巾投降？这是个问题。
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>基于 OPC UA 统一能源信息模型</title>
   <link href="http://kimi.im/2023-05-09-opc-ua-universal-energy-information-model"/>
   <updated>2023-05-09T00:00:00+00:00</updated>
   <id>http://kimi.im/opc-ua-universal-energy-information-model</id>
   <content type="html">&lt;p&gt;
最近看到德国汉堡 Helmut Schmidt 大学亚历山大·费教授团队的一篇论文，讨论怎么通过 OPC UA 构建统一的能源信息管理系统。
&lt;/p&gt;

&lt;p&gt;
整体架构是这样子的：
&lt;/p&gt;


&lt;div id=&quot;org415bd19&quot; class=&quot;figure&quot;&gt;
&lt;p&gt;&lt;div align=&quot;center&quot;&gt;&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;
&lt;!-- Created with Inkscape (http://www.inkscape.org/) --&gt;

&lt;svg
   version=&quot;1.1&quot;
   id=&quot;svg2&quot;
   xml:space=&quot;preserve&quot;
   width=&quot;500.16&quot;
   height=&quot;368&quot;
   viewBox=&quot;0 0 500.16 368&quot;
   sodipodi:docname=&quot;Universal-Energy-Information-Model.drawio.pdf&quot;
   xmlns:inkscape=&quot;http://www.inkscape.org/namespaces/inkscape&quot;
   xmlns:sodipodi=&quot;http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd&quot;
   xmlns=&quot;http://www.w3.org/2000/svg&quot;
   xmlns:svg=&quot;http://www.w3.org/2000/svg&quot;&gt;&lt;defs
     id=&quot;defs6&quot;&gt;&lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath16&quot;&gt;&lt;path
         d=&quot;M 0,0 H 1562.5 V 1147.2275 H 0 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path14&quot; /&gt;&lt;/clipPath&gt;&lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath28&quot;&gt;&lt;path
         d=&quot;M 0,0 H 1562.5 V 1144.24 H 0 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path26&quot; /&gt;&lt;/clipPath&gt;&lt;/defs&gt;&lt;sodipodi:namedview
     id=&quot;namedview4&quot;
     pagecolor=&quot;#ffffff&quot;
     bordercolor=&quot;#666666&quot;
     borderopacity=&quot;1.0&quot;
     inkscape:pageshadow=&quot;2&quot;
     inkscape:pageopacity=&quot;0.0&quot;
     inkscape:pagecheckerboard=&quot;0&quot; /&gt;&lt;g
     id=&quot;g8&quot;
     inkscape:groupmode=&quot;layer&quot;
     inkscape:label=&quot;Universal-Energy-Information-Model.drawio&quot;
     transform=&quot;matrix(0.31999998,0,0,0.31999998,0,9.2e-6)&quot;&gt;&lt;g
       id=&quot;g10&quot;&gt;&lt;g
         id=&quot;g12&quot;
         clip-path=&quot;url(#clipPath16)&quot;&gt;&lt;g
           id=&quot;g18&quot;
           transform=&quot;scale(2.9875717)&quot;&gt;&lt;path
             d=&quot;M 0,0 H 523 V 384 H 0 Z&quot;
             style=&quot;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
             id=&quot;path20&quot; /&gt;&lt;/g&gt;&lt;/g&gt;&lt;/g&gt;&lt;g
       id=&quot;g22&quot;&gt;&lt;g
         id=&quot;g24&quot;
         clip-path=&quot;url(#clipPath28)&quot;&gt;&lt;g
           id=&quot;g30&quot;
           transform=&quot;matrix(2.9875717,0,0,2.9875717,1.4937859,1.4937859)&quot;&gt;&lt;path
             d=&quot;M 41,321 V 241&quot;
             style=&quot;fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
             id=&quot;path32&quot; /&gt;&lt;path
             d=&quot;m 1,321 h 80 v 60 H 1 Z&quot;
             style=&quot;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
             id=&quot;path34&quot; /&gt;&lt;path
             d=&quot;m 1,321 h 80 v 60 H 1 Z&quot;
             style=&quot;fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
             id=&quot;path36&quot; /&gt;&lt;/g&gt;&lt;g
           id=&quot;g38&quot;
           transform=&quot;scale(2.9875717)&quot;&gt;&lt;text
             transform=&quot;translate(18.4375,356)&quot;
             style=&quot;font-variant:normal;font-weight:normal;font-size:14px;font-family:Arial;-inkscape-font-specification:ArialMT;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
             id=&quot;text42&quot;&gt;&lt;tspan
               x=&quot;0 3.8896484 14.779297 19.441406 27.227539 30.337891 38.124023&quot;
               y=&quot;0&quot;
               sodipodi:role=&quot;line&quot;
               id=&quot;tspan40&quot;&gt;IO-Link&lt;/tspan&gt;&lt;/text&gt;&lt;/g&gt;&lt;g
           id=&quot;g44&quot;
           transform=&quot;matrix(2.9875717,0,0,2.9875717,1.4937859,1.4937859)&quot;&gt;&lt;path
             d=&quot;M 121,321 V 241&quot;
             style=&quot;fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
             id=&quot;path46&quot; /&gt;&lt;path
             d=&quot;m 81,321 h 80 v 60 H 81 Z&quot;
             style=&quot;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
             id=&quot;path48&quot; /&gt;&lt;path
             d=&quot;m 81,321 h 80 v 60 H 81 Z&quot;
             style=&quot;fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
             id=&quot;path50&quot; /&gt;&lt;/g&gt;&lt;g
           id=&quot;g52&quot;
           transform=&quot;scale(2.9875717)&quot;&gt;&lt;text
             transform=&quot;translate(96.09375,348)&quot;
             style=&quot;font-variant:normal;font-weight:normal;font-size:14px;font-family:Arial;-inkscape-font-specification:ArialMT;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
             id=&quot;text56&quot;&gt;&lt;tspan
               x=&quot;0 11.662109 19.448242 27.234375 35.020508 42.806641&quot;
               y=&quot;0&quot;
               sodipodi:role=&quot;line&quot;
               id=&quot;tspan54&quot;&gt;Modbus&lt;/tspan&gt;&lt;/text&gt;&lt;text
             transform=&quot;translate(107,365)&quot;
             style=&quot;font-variant:normal;font-weight:normal;font-size:14px;font-family:Arial;-inkscape-font-specification:ArialMT;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
             id=&quot;text60&quot;&gt;&lt;tspan
               x=&quot;0 8.5517578 18.662109&quot;
               y=&quot;0&quot;
               sodipodi:role=&quot;line&quot;
               id=&quot;tspan58&quot;&gt;TCP&lt;/tspan&gt;&lt;/text&gt;&lt;/g&gt;&lt;g
           id=&quot;g62&quot;
           transform=&quot;matrix(2.9875717,0,0,2.9875717,1.4937859,1.4937859)&quot;&gt;&lt;path
             d=&quot;M 201,321 V 241&quot;
             style=&quot;fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
             id=&quot;path64&quot; /&gt;&lt;path
             d=&quot;m 161,321 h 80 v 60 h -80 z&quot;
             style=&quot;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
             id=&quot;path66&quot; /&gt;&lt;path
             d=&quot;m 161,321 h 80 v 60 h -80 z&quot;
             style=&quot;fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
             id=&quot;path68&quot; /&gt;&lt;/g&gt;&lt;g
           id=&quot;g70&quot;
           transform=&quot;scale(2.9875717)&quot;&gt;&lt;text
             transform=&quot;translate(165.20312,348)&quot;
             style=&quot;font-variant:normal;font-weight:normal;font-size:14px;font-family:Arial;-inkscape-font-specification:ArialMT;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
             id=&quot;text74&quot;&gt;&lt;tspan
               x=&quot;0 9.3378906 19.448242 30.337891 38.889648 42.779297 52.117188 62.227539&quot;
               y=&quot;0&quot;
               sodipodi:role=&quot;line&quot;
               id=&quot;tspan72&quot;&gt;PROFIBUS&lt;/tspan&gt;&lt;/text&gt;&lt;text
             transform=&quot;translate(191.26563,365)&quot;
             style=&quot;font-variant:normal;font-weight:normal;font-size:14px;font-family:Arial;-inkscape-font-specification:ArialMT;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
             id=&quot;text78&quot;&gt;&lt;tspan
               x=&quot;0 10.110352&quot;
               y=&quot;0&quot;
               sodipodi:role=&quot;line&quot;
               id=&quot;tspan76&quot;&gt;DP&lt;/tspan&gt;&lt;/text&gt;&lt;/g&gt;&lt;g
           id=&quot;g80&quot;
           transform=&quot;matrix(2.9875717,0,0,2.9875717,1.4937859,1.4937859)&quot;&gt;&lt;path
             d=&quot;M 281,321 V 241&quot;
             style=&quot;fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
             id=&quot;path82&quot; /&gt;&lt;path
             d=&quot;m 241,321 h 80 v 60 h -80 z&quot;
             style=&quot;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
             id=&quot;path84&quot; /&gt;&lt;path
             d=&quot;m 241,321 h 80 v 60 h -80 z&quot;
             style=&quot;fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
             id=&quot;path86&quot; /&gt;&lt;/g&gt;&lt;g
           id=&quot;g88&quot;
           transform=&quot;scale(2.9875717)&quot;&gt;&lt;text
             transform=&quot;translate(245.60938,356)&quot;
             style=&quot;font-variant:normal;font-weight:normal;font-size:14px;font-family:Arial;-inkscape-font-specification:ArialMT;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
             id=&quot;text92&quot;&gt;&lt;tspan
               x=&quot;0 9.3378906 19.448242 30.337891 38.889648 42.779297 52.889648 62.227539&quot;
               y=&quot;0&quot;
               sodipodi:role=&quot;line&quot;
               id=&quot;tspan90&quot;&gt;PROFINET&lt;/tspan&gt;&lt;/text&gt;&lt;/g&gt;&lt;g
           id=&quot;g94&quot;
           transform=&quot;matrix(2.9875717,0,0,2.9875717,1.4937859,1.4937859)&quot;&gt;&lt;path
             d=&quot;m 361,321 v -40 l -0.79999,-40.64&quot;
             style=&quot;fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
             id=&quot;path96&quot; /&gt;&lt;path
             d=&quot;m 321,321 h 80 v 60 h -80 z&quot;
             style=&quot;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
             id=&quot;path98&quot; /&gt;&lt;path
             d=&quot;m 321,321 h 80 v 60 h -80 z&quot;
             style=&quot;fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
             id=&quot;path100&quot; /&gt;&lt;/g&gt;&lt;g
           id=&quot;g102&quot;
           transform=&quot;scale(2.9875717)&quot;&gt;&lt;text
             transform=&quot;translate(355.15625,356)&quot;
             style=&quot;font-variant:normal;font-weight:normal;font-size:14px;font-family:Arial;-inkscape-font-specification:ArialMT;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
             id=&quot;text106&quot;&gt;&lt;tspan
               x=&quot;0 3.8896484 7.7792969&quot;
               y=&quot;0&quot;
               sodipodi:role=&quot;line&quot;
               id=&quot;tspan104&quot;&gt;...&lt;/tspan&gt;&lt;/text&gt;&lt;/g&gt;&lt;g
           id=&quot;g108&quot;
           transform=&quot;matrix(2.9875717,0,0,2.9875717,1.4937859,1.4937859)&quot;&gt;&lt;path
             d=&quot;M 480.95999,321 V 61&quot;
             style=&quot;fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
             id=&quot;path110&quot; /&gt;&lt;path
             d=&quot;m 441,321 h 80 v 60 h -80 z&quot;
             style=&quot;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
             id=&quot;path112&quot; /&gt;&lt;path
             d=&quot;m 441,321 h 80 v 60 h -80 z&quot;
             style=&quot;fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
             id=&quot;path114&quot; /&gt;&lt;/g&gt;&lt;g
           id=&quot;g116&quot;
           transform=&quot;scale(2.9875717)&quot;&gt;&lt;text
             transform=&quot;translate(468.92188,348)&quot;
             style=&quot;font-variant:normal;font-weight:normal;font-size:14px;font-family:Arial;-inkscape-font-specification:ArialMT;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
             id=&quot;text120&quot;&gt;&lt;tspan
               x=&quot;0 3.8896484 7.7792969 15.56543&quot;
               y=&quot;0&quot;
               sodipodi:role=&quot;line&quot;
               id=&quot;tspan118&quot;&gt;IIoT&lt;/tspan&gt;&lt;/text&gt;&lt;text
             transform=&quot;translate(459.59375,365)&quot;
             style=&quot;font-variant:normal;font-weight:normal;font-size:14px;font-family:Arial;-inkscape-font-specification:ArialMT;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
             id=&quot;text124&quot;&gt;&lt;tspan
               x=&quot;0 10.110352 17.896484 24.896484 28.006836 35.006836&quot;
               y=&quot;0&quot;
               sodipodi:role=&quot;line&quot;
               id=&quot;tspan122&quot;&gt;Device&lt;/tspan&gt;&lt;/text&gt;&lt;/g&gt;&lt;g
           id=&quot;g126&quot;
           transform=&quot;matrix(2.9875717,0,0,2.9875717,1.4937859,1.4937859)&quot;&gt;&lt;path
             d=&quot;m 201,161 v -50 l 0.2,-50.66&quot;
             style=&quot;fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
             id=&quot;path128&quot; /&gt;&lt;path
             d=&quot;m 1,161 h 400 v 80 H 1 Z&quot;
             style=&quot;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
             id=&quot;path130&quot; /&gt;&lt;path
             d=&quot;m 1,161 h 400 v 80 H 1 Z&quot;
             style=&quot;fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
             id=&quot;path132&quot; /&gt;&lt;path
             d=&quot;m 41,171 h 120 v 60 H 41 Z&quot;
             style=&quot;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
             id=&quot;path134&quot; /&gt;&lt;path
             d=&quot;m 41,171 h 120 v 60 H 41 Z&quot;
             style=&quot;fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
             id=&quot;path136&quot; /&gt;&lt;/g&gt;&lt;g
           id=&quot;g138&quot;
           transform=&quot;scale(2.9875717)&quot;&gt;&lt;text
             transform=&quot;translate(87.375,206)&quot;
             style=&quot;font-variant:normal;font-weight:normal;font-size:14px;font-family:Arial;-inkscape-font-specification:ArialMT;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
             id=&quot;text142&quot;&gt;&lt;tspan
               x=&quot;0 9.3378906 17.124023&quot;
               y=&quot;0&quot;
               sodipodi:role=&quot;line&quot;
               id=&quot;tspan140&quot;&gt;PLC&lt;/tspan&gt;&lt;/text&gt;&lt;/g&gt;&lt;g
           id=&quot;g144&quot;
           transform=&quot;matrix(2.9875717,0,0,2.9875717,1.4937859,1.4937859)&quot;&gt;&lt;path
             d=&quot;m 241,171 h 120 v 60 H 241 Z&quot;
             style=&quot;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
             id=&quot;path146&quot; /&gt;&lt;path
             d=&quot;m 241,171 h 120 v 60 H 241 Z&quot;
             style=&quot;fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
             id=&quot;path148&quot; /&gt;&lt;/g&gt;&lt;g
           id=&quot;g150&quot;
           transform=&quot;scale(2.9875717)&quot;&gt;&lt;text
             transform=&quot;translate(284.64063,206)&quot;
             style=&quot;font-variant:normal;font-weight:normal;font-size:14px;font-family:Arial;-inkscape-font-specification:ArialMT;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
             id=&quot;text154&quot;&gt;&lt;tspan
               x=&quot;0 9.3378906 17.124023 24.910156&quot;
               y=&quot;0&quot;
               sodipodi:role=&quot;line&quot;
               id=&quot;tspan152&quot;&gt;Edge&lt;/tspan&gt;&lt;/text&gt;&lt;/g&gt;&lt;g
           id=&quot;g156&quot;
           transform=&quot;matrix(2.9875717,0,0,2.9875717,1.4937859,1.4937859)&quot;&gt;&lt;path
             d=&quot;M 1,1 H 521 V 61 H 1 Z&quot;
             style=&quot;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
             id=&quot;path158&quot; /&gt;&lt;path
             d=&quot;M 1,1 H 521 V 61 H 1 Z&quot;
             style=&quot;fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
             id=&quot;path160&quot; /&gt;&lt;/g&gt;&lt;g
           id=&quot;g162&quot;
           transform=&quot;scale(2.9875717)&quot;&gt;&lt;text
             transform=&quot;translate(160.20312,36)&quot;
             style=&quot;font-variant:normal;font-weight:normal;font-size:14px;font-family:Arial;-inkscape-font-specification:ArialMT;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
             id=&quot;text166&quot;&gt;&lt;tspan
               x=&quot;0 9.3378906 17.124023 24.910156 29.572266 37.358398 44.358398 48.248047 59.910156 67.696289 75.482422 83.268555 91.054688 98.84082 110.50293 118.28906 126.0752 129.96484 133.08203 142.41992 150.20605 157.99219 161.10254 164.21289 171.21289 178.99902 182.88867 185.99902 193.78516&quot;
               y=&quot;0&quot;
               sodipodi:role=&quot;line&quot;
               id=&quot;tspan164&quot;&gt;Energy Management Application&lt;/tspan&gt;&lt;/text&gt;&lt;/g&gt;&lt;/g&gt;&lt;/g&gt;&lt;/g&gt;&lt;/svg&gt;
&lt;/div&gt;
&lt;/p&gt;
&lt;/div&gt;

&lt;p&gt;
能源管理应用通过 OPC UA 或 MQTT 遥测多种现场设备，支持 IO-Link、Modbus
TCP、PROFIBUS DP、PROFINET 等协议。 为了能够在上层应用层获取统一结构的数据，边缘层将多种协议的能源设备数据转换为 O PC UA 信息模型。然后上层应用就能够在边缘层查询需要订阅的信息，一旦建立订阅关系，就通过 MQTT 这种
Pub/Sub 协议传输变量。
&lt;/p&gt;

&lt;p&gt;
本文的要点有这几个：
&lt;/p&gt;
&lt;ol class=&quot;org-ol&quot;&gt;
&lt;li&gt;如何妥善处理现场多种类型设备多源异构的总线协议&lt;/li&gt;
&lt;li&gt;如何在边缘侧进行语义映射&lt;/li&gt;
&lt;li&gt;如何结合 OPC UA 和 MQTT&lt;/li&gt;
&lt;/ol&gt;


&lt;p&gt;
现场设备有两种情况，一种是原始数据，需要手工建立这些测量数据到 OPC UA
信息模型的映射，还有一种是基于 OPC UA 伙伴协议。对于后者，目前
PROFIenergy，sercos Energy，CIP Energy 等现场总线的能源规范集是有对应的 OPC UA CS，这样就可以根据 Nodeset 文件建立数据映射。
&lt;/p&gt;

&lt;p&gt;
数据映射的过程是通过边缘所谓的 UEIM 统一能源信息模型进行关联。主要用到了 OPC UA 信息模型中的测量数据类型（MeasuremetnValueType），包含了工程单元、精度类型、精度范围、测量标识、设备资源标识等。
&lt;/p&gt;

&lt;p&gt;
因为 MQTT 并不提供数据的语义模型，只有订阅主题 Topic，所以首先在能源应用与边缘之间建立客户端/服务端通道，读取 OPC UA 地址空间信息模型，然后以 MQTT 订阅主题传输测量数据。
&lt;/p&gt;

&lt;p&gt;
工业物联网设备，则是通过 MQTT 传输到能源管理平台，通过 MQTT-OPC UA 网关转为 OPC UA 地址空间信息提供给应用程序读取。
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines ES.75 避免 do 语句</title>
   <link href="http://kimi.im/2023-05-09-cppcoreguidelines-es75"/>
   <updated>2023-05-09T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-es75</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;Avoid &lt;code&gt;do&lt;/code&gt;-statements&amp;rdquo;
&lt;/p&gt;

&lt;p&gt;
理由
&lt;/p&gt;

&lt;p&gt;
可读性，避免出错。循环的结束条件在最后（很容易疏忽），并且循环条件在一开始没有进行检测。
&lt;/p&gt;


&lt;p&gt;
例子
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;x&lt;/span&gt;;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;do&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    cin &amp;gt;&amp;gt; x;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;...&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;while&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;x &amp;lt; 0&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
注意
&lt;/p&gt;

&lt;p&gt;
确实也有很多例子证明 &lt;code&gt;do&lt;/code&gt; 语句能清晰表达程序意图，但是 bug 也很多。
&lt;/p&gt;

&lt;p&gt;
强化
&lt;/p&gt;

&lt;p&gt;
标记使用 &lt;code&gt;do&lt;/code&gt; 语句的地方。
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>单词本：be a fly on the wall</title>
   <link href="http://kimi.im/2023-05-09-be-a-fly-on-the-wall"/>
   <updated>2023-05-09T00:00:00+00:00</updated>
   <id>http://kimi.im/be-a-fly-on-the-wall</id>
   <content type="html">&lt;p&gt;
在Allen Kelly关于产品负责人描述中，写到： &lt;b&gt;Being a fly on the wall&lt;/b&gt;
can provide useful insights to the Product Manager. 上下文大致意思是说产品经理跟销售去见客户，在旁边看看，也可以了解洞察客户需求。
(&lt;a href=&quot;#citeproc_bib_item_1&quot;&gt;Kelly 2019&lt;/a&gt;)
&lt;/p&gt;

&lt;p&gt;
&lt;b&gt;be a fly on the wall&lt;/b&gt; 确实很形象，一只苍蝇静静地趴在墙上偷偷看着听着，肯定能获得不少机密消息。所以，这个词组的意思在一旁静静观察。
&lt;/p&gt;

&lt;p&gt;
比如：I would love to &lt;b&gt;be a fly on the wall&lt;/b&gt; in Kimi&amp;rsquo;s house when he
finds out his wife bought a new car without telling him.
&lt;/p&gt;

&lt;p&gt;
另外，fly-on-the-wall “墙上的苍蝇”多用于指代“观察型纪录片”，此类纪录片一般如实反应片中人物的真实生活，不会因为拍摄而影响人物的行为。
&lt;/p&gt;

&lt;p&gt;
比如：It was a &lt;b&gt;fly-on-the-wall&lt;/b&gt; documentary series, seen by man y as
the precursor to reality television. 这是一部观察型纪录片，被很多人认为是真人秀电视节目的先驱。
&lt;/p&gt;

&lt;p&gt;
还比如最近英国新国王 William 登基。他的儿子 William 王子则推出了直播节目：“Prince William: Fly on the Wall”：
&lt;/p&gt;

&lt;p&gt;
​Exciting news for fans of the British Royal Family: Prince William,
the Duke of Cambridge, is set to feature in a new ITV documentary
series called &amp;ldquo;Prince William: &lt;b&gt;Fly on the Wall&lt;/b&gt;&amp;rdquo; releasing on 7th May.
&lt;/p&gt;

&lt;p&gt;
&lt;b&gt;References&lt;/b&gt;
&lt;/p&gt;
&lt;style&gt;.csl-entry{text-indent: -1.5em; margin-left: 1.5em;}&lt;/style&gt;&lt;div class=&quot;csl-bib-body&quot;&gt;
  &lt;div class=&quot;csl-entry&quot;&gt;&lt;a id=&quot;citeproc_bib_item_1&quot;&gt;&lt;/a&gt;Kelly, Allan. 2019. &lt;i&gt;The Art of Agile Product Ownership, a Guide for Product Managers, Business Analysts, and Entrepreneurs&lt;/i&gt;. Springer.&lt;/div&gt;
&lt;/div&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines ES.74 最好在 for 循环的初始语句中定义循环变量</title>
   <link href="http://kimi.im/2023-05-08-cppcoreguidelines-es74"/>
   <updated>2023-05-08T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-es74</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;Prefer to declare a loop variable in the initializer part of a &lt;code&gt;for&lt;/code&gt;-statement&amp;rdquo;
&lt;/p&gt;

&lt;p&gt;
参见 &lt;a href=&quot;http://kimi.im/2023-03-13-cppcoreguidelines-es6&quot;&gt;ES.6&lt;/a&gt;
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>单词本：have skin in the game</title>
   <link href="http://kimi.im/2023-05-08-have-skin-in-the-game"/>
   <updated>2023-05-08T00:00:00+00:00</updated>
   <id>http://kimi.im/have-skin-in-the-game</id>
   <content type="html">&lt;p&gt;
我在读敏捷开发中产品负责人的介绍时，读到这段：
&lt;/p&gt;

&lt;p&gt;
Provided a Product Owner is making the promise that they intend to
keep themselves (i.e., they &lt;b&gt;have skin in the game&lt;/b&gt;), then they might
issue some kind of forward plan.
&lt;/p&gt;

&lt;p&gt;
这里， have skin in the game 的意思是“有切身利益”的意思。通常用于财务投资领域。这个说法最早是股神巴菲特提出的。有一次，股神建议企业的高级管理人员应该买一些自己公司的股票，从而使自己的个人利益与公司成败挂钩（have skin in the game）。
&lt;/p&gt;

&lt;p&gt;
再举个例子：If you want someone to make efficient choices, they have
to &lt;b&gt;have a little skin in the game&lt;/b&gt;. 如果你希望某个人能高效决策，那么最好让 他参与其中，有切身利益。
&lt;/p&gt;

&lt;p&gt;
再比如最近的苏丹武装冲突，俄罗斯的瓦格纳集团参与其中。金融情报机构的国际合作组织“埃格蒙特集团”的一则新闻中就用到:
&lt;/p&gt;

&lt;p&gt;
Russia, and Wagner, unlike Europe, &lt;b&gt;have skin in the Sudan game&lt;/b&gt;.
&lt;/p&gt;

&lt;p&gt;
格纳集团致力于确保俄罗斯在苏丹的两个切身利益：第一个是金矿开采，第二个是获得红海的海军基地。
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines ES.73 如果循环变量不明显，则 while 比 for 更恰当</title>
   <link href="http://kimi.im/2023-05-07-cppcoreguidelines-es73"/>
   <updated>2023-05-07T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-es73</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;Prefer a &lt;code&gt;while&lt;/code&gt;-statement to a &lt;code&gt;for&lt;/code&gt;-statement when there is no obvious loop variable&amp;rdquo;
&lt;/p&gt;

&lt;p&gt;
理由
&lt;/p&gt;

&lt;p&gt;
更好的可读性。
&lt;/p&gt;

&lt;p&gt;
例子
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;events&lt;/span&gt; = 0;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;for&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;; wait_for_event&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt;; ++events&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;  &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;bad, confusing&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;...&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
这个事件循环看起来很误导群众，因为事件的计数跟循环条件
&lt;code&gt;wait_for_event()&lt;/code&gt; 没什么关系。
&lt;/p&gt;

&lt;p&gt;
最好写成：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;events&lt;/span&gt; = 0;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;while&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;wait_for_event&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;      &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;better&lt;/span&gt;
    ++events;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;...&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
强化
&lt;/p&gt;

&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;对于 &lt;code&gt;for&lt;/code&gt; 初始值和 &lt;code&gt;for&lt;/code&gt; 增量中，与 &lt;code&gt;for&lt;/code&gt; 条件无关的情况进行标记。&lt;/li&gt;
&lt;/ul&gt;
</content>
 </entry>
 
 <entry>
   <title>单词本：canary in the coal mine</title>
   <link href="http://kimi.im/2023-05-07-canary-in-the-coal-mine"/>
   <updated>2023-05-07T00:00:00+00:00</updated>
   <id>http://kimi.im/canary-in-the-coal-mine</id>
   <content type="html">&lt;p&gt;
《大萧条》 (&lt;a href=&quot;#citeproc_bib_item_1&quot;&gt;Cowen 2011&lt;/a&gt;) 一书中写道房贷和次级贷款是经济好坏的晴雨表：Housing and subprime loans were the proverbial &lt;b&gt;canary in
the coal mine&lt;/b&gt;, but the real problem was that investors took on too
much risk across the board.
&lt;/p&gt;

&lt;p&gt;
这里，作者用 canary in the coal mine 来表示危险的征兆、晴雨表。那么为什么 canary 金丝雀这种可爱的小鸟可以放到煤矿里做危险的征兆呢？
&lt;/p&gt;

&lt;p&gt;
携带金丝雀到煤矿这种做法最早可以追溯到 1911 年，因为煤矿中经常会产生有毒的一氧化碳毒气，而金丝雀对一氧化碳敏感，会最先产生中毒症状。
&lt;/p&gt;

&lt;p&gt;
有个叫约翰·斯科特·霍尔丹（John Scott Haldane）的人，经过一番研究之后，推荐在煤矿中使用金丝雀检测一氧化碳和其他有毒气体。
&lt;/p&gt;

&lt;p&gt;
所以那时候，矿工会带着金丝雀进入煤矿采矿，如果一氧化碳浓度太高，金丝雀可以及时警告危险，工人们就能及时避免危险。另外，那时候，矿工们也把这种可爱金丝雀当作宠物，闲暇时候逗着玩。
&lt;/p&gt;

&lt;p&gt;
再举个例子：
&lt;/p&gt;

&lt;p&gt;
5 月 5 日的金融新闻说 Nvidia 营收下降是公司业绩下滑的警告。记者用了“煤矿中的金丝雀唱响了一阵警告”这种一语双关的用法：
&lt;/p&gt;

&lt;p&gt;
Nvidia Stock: This &lt;b&gt;Canary in the Coal Mine&lt;/b&gt; Is Singing a Warning
&lt;/p&gt;

&lt;p&gt;
Maybe Nvidia knocks it out of the park, and the stock continues
roaring higher &amp;#x2013; it wouldn&amp;rsquo;t be the first time I was wrong. But the
&lt;b&gt;canary in the coal mine&lt;/b&gt; is singing a tune, and investors should at
least listen.
&lt;/p&gt;

&lt;p&gt;
当然，后来有了一氧化碳检测传感器之后，就不太用得到金丝雀了。
&lt;/p&gt;

&lt;p&gt;
&lt;b&gt;References&lt;/b&gt;
&lt;/p&gt;
&lt;style&gt;.csl-entry{text-indent: -1.5em; margin-left: 1.5em;}&lt;/style&gt;&lt;div class=&quot;csl-bib-body&quot;&gt;
  &lt;div class=&quot;csl-entry&quot;&gt;&lt;a id=&quot;citeproc_bib_item_1&quot;&gt;&lt;/a&gt;Cowen, Tyler. 2011. &lt;i&gt;The Great Stagnation: How America Ate All the Low-Hanging Fruit of Modern History, Got Sick, and Will (Eventually) Feel Better&lt;/i&gt;. Dutton.&lt;/div&gt;
&lt;/div&gt;
</content>
 </entry>
 
 <entry>
   <title>单词本：abut</title>
   <link href="http://kimi.im/2023-05-07-abut"/>
   <updated>2023-05-07T00:00:00+00:00</updated>
   <id>http://kimi.im/abut</id>
   <content type="html">&lt;p&gt;
今年 4 月 23 日世界读书日的时候，用 5 本闲置的书去八角杯咖啡能换任意一杯咖啡。于是我找了 5 本书去换了一杯，味道还不错。
&lt;/p&gt;

&lt;p&gt;
但是，八角杯咖啡的英文名字 Abutlamb 我就不太看得懂。于是专门查了下。这个 abut 是副词附近、临近的意思。而 lamb 则是小羊羔。那么合起来或许是靠近小羊羔？
&lt;/p&gt;

&lt;p&gt;
我查阅了八角杯的介绍，或许可以每个月去试试限定款咖啡：
&lt;/p&gt;

&lt;p&gt;
Abutlamb 八角杯咖啡以复古文艺美式工业风营造文艺聚集地。Abutlamb 八角杯咖啡店中提供了多种精选咖啡豆，而咖啡单大致以意式咖啡和滤泡式咖啡为主。除经典产品线外，八角杯，还结合季节风物和杭州本土文化，以月为单位推出一款限定咖啡。如曾推出的杭·绿豆糕拿铁、迟桂花拿铁、麻麻黑拿铁等多款限定产品。
&lt;/p&gt;

&lt;p&gt;
在 ISO 的自动标识体系标准 (&lt;a href=&quot;#citeproc_bib_item_1&quot;&gt;ISO/IEC 2006&lt;/a&gt;) 中也用到了这个单词 For
larger symbols with more than one data region, the mapping matrix
equates to an area the size of the &lt;b&gt;abutted&lt;/b&gt; data regions.
&lt;/p&gt;

&lt;p&gt;
For example, the 36 x 36 format symbol has four 16 x 16 data regions
which &lt;b&gt;abut&lt;/b&gt; to create a mapping matrix 32 x 32.
&lt;/p&gt;

&lt;p&gt;
在国际标准中， abut 是用作动词，指相邻的数据区域。
&lt;/p&gt;

&lt;p&gt;
对了，4 月 23 日是世界读书日，也是西班牙作家塞万提斯的纪念日。
&lt;/p&gt;

&lt;p&gt;
塞万提斯的生活有够惨的：
&lt;/p&gt;

&lt;p&gt;
1569 年发表最初的几首诗，开始军旅生涯，1571 年参加了勒班陀战役。左手在战斗中被打残，由此落得了“勒班陀残臂人”的绰号。
&lt;/p&gt;

&lt;p&gt;
1574—1575 年辗转于意大利的撒丁、热那亚、那不勒斯和西西里，在乘“太阳号”船赴西班牙途中被非洲柏柏尔族人的三只海盗船俘虏，送到阿尔及尔。后被家人用五百金盾赎回。
&lt;/p&gt;

&lt;p&gt;
1583 年由于手头拮据，及其左手残废而无晋升机会，被迫离开军队。
&lt;/p&gt;

&lt;p&gt;
1591—1592 年辗转于村落之间采购军需品，后被诬告为帐目不清，身陷囹圄。
&lt;/p&gt;

&lt;p&gt;
1597 年被人指控为私吞钱财，再次入狱，三个月左右蒙恩获释。期间，官差丢失，为了糊口度日，他为别人跑腿，拉纤，沿街叫卖布匹。
&lt;/p&gt;

&lt;p&gt;
1605 年《唐·吉诃德》上卷出版，一年之内再版六次。不料又卷入一场官司中，同姐妹、女儿和外甥女一起在牢房中度过了几天。事实澄清后获释。
&lt;/p&gt;

&lt;p&gt;
1616 年身患严重水肿，患病期间仍然对生活充满了乐观精神。此间，他为他的小说《佩西莱斯和塞西斯蒙达》写了《向莱穆斯伯爵致辞》，五天后， 即 4 月
23 日逝世于马德里。
&lt;/p&gt;

&lt;p&gt;
&lt;b&gt;References&lt;/b&gt;
&lt;/p&gt;
&lt;style&gt;.csl-entry{text-indent: -1.5em; margin-left: 1.5em;}&lt;/style&gt;&lt;div class=&quot;csl-bib-body&quot;&gt;
  &lt;div class=&quot;csl-entry&quot;&gt;&lt;a id=&quot;citeproc_bib_item_1&quot;&gt;&lt;/a&gt;ISO/IEC. 2006. “ISO/IEC 16022 Information Technology — Automatic Identification and Data Capture Techniques — Data Matrix Bar Code Symbology Specification.”&lt;/div&gt;
&lt;/div&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines ES.72 如果明显有一个循环变量，for 比 while 语句更好</title>
   <link href="http://kimi.im/2023-05-05-cppcoreguidelines-es72"/>
   <updated>2023-05-05T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-es72</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;Prefer a for-statement to a while-statement when there is an obvious loop variable&amp;rdquo;
&lt;/p&gt;

&lt;p&gt;
理由
&lt;/p&gt;

&lt;p&gt;
可读性：循环的完整逻辑在最前面就明了。可以限制循环变量的范围。
&lt;/p&gt;

&lt;p&gt;
例子
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #110099;&quot;&gt;std&lt;/span&gt;::&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;vector&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;vec&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;1, 2, 3, 4, 5&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;for&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;gsl&lt;/span&gt;::&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;index&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;i&lt;/span&gt; = 0; i &amp;lt; vec.size&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt;; i++&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #110099;&quot;&gt;std&lt;/span&gt;::cout &amp;lt;&amp;lt; vec&lt;span style=&quot;color: #7388d6;&quot;&gt;[&lt;/span&gt;i&lt;span style=&quot;color: #7388d6;&quot;&gt;]&lt;/span&gt; &amp;lt;&amp;lt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;\n&quot;&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;pre class=&quot;example&quot;&gt;
1
2
3
4
5
&lt;/pre&gt;



&lt;p&gt;
坏例子
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #110099;&quot;&gt;std&lt;/span&gt;::&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;vector&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;vec&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;1, 2, 3, 4, 5&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;
&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;i&lt;/span&gt; = 0;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;while&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;i &amp;lt; vec.size&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #110099;&quot;&gt;std&lt;/span&gt;::cout &amp;lt;&amp;lt; vec&lt;span style=&quot;color: #7388d6;&quot;&gt;[&lt;/span&gt;i&lt;span style=&quot;color: #7388d6;&quot;&gt;]&lt;/span&gt; &amp;lt;&amp;lt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;\n&quot;&lt;/span&gt;;
    i++;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;pre class=&quot;example&quot;&gt;
1
2
3
4
5
&lt;/pre&gt;
</content>
 </entry>
 
 <entry>
   <title>单词本：pie in the sky</title>
   <link href="http://kimi.im/2023-05-05-pie-in-the-sky"/>
   <updated>2023-05-05T00:00:00+00:00</updated>
   <id>http://kimi.im/pie-in-the-sky</id>
   <content type="html">&lt;p&gt;
最近韩国总统访问美国，跟美国总统合唱了一首《American Pie》，人民网记者写了篇评论文章《Seoul&amp;rsquo;s blind pro-U.S. diplomacy escalates regional
tensions》， 指出与美国套近乎，并不能帮助韩国提升 国际竞争力，文章结尾写道：
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;American Pie&amp;rdquo; only belongs to America; for others, it is nothing but
&lt;b&gt;pie in the sky&lt;/b&gt;. 美国馅饼只属于美国，对于其他人来说只不过是天上掉馅饼。
&lt;/p&gt;

&lt;p&gt;
这句话写的挺妙的。American Pie 是一首歌，同时也是一种食物。而天上的馅饼则是一个英语俗语，意思是：something that you hope will happen but is
very unlikely to happen. 也就是天上的馅饼、天上掉馅饼、空头支票。
&lt;/p&gt;

&lt;p&gt;
比如：Their plans to set up their own business are just &lt;b&gt;pie in the sky&lt;/b&gt;.
&lt;/p&gt;

&lt;p&gt;
&lt;b&gt;A pie in the sky&lt;/b&gt; is like a castle in the air. 而 A castle in the air
is not built on firm ground. It&amp;rsquo;s just a dream. 也就是空中阁楼。
&lt;/p&gt;

&lt;p&gt;
那么 pie in the sky 的来源是什么呢？其实个词也来源于一首歌，作者叫 Joe
Hill，他出生在瑞典，1902 年的时候移民去美国工作。在那里，成了激进工人组织（Industrial Workers of the World）的头头，写了很多激进的歌。其中有一首叫《The Preacher and the Slave》，写于 1911 年，歌词内容如下：
&lt;/p&gt;

&lt;p&gt;
From the day of your birth it&amp;rsquo;s bread and water here on earth.
&lt;/p&gt;

&lt;p&gt;
To a child of life to a child of life.
&lt;/p&gt;

&lt;p&gt;
But there&amp;rsquo;ll be &lt;b&gt;pie in the sky&lt;/b&gt; by and by when I die and it&amp;rsquo;ll be
alright it&amp;rsquo;ll be alright.
&lt;/p&gt;

&lt;p&gt;
There&amp;rsquo;ll be &lt;b&gt;pie in the sky&lt;/b&gt; by and by when I die and it&amp;rsquo;ll be alright
it&amp;rsquo;ll be alright.
&lt;/p&gt;

&lt;p&gt;
主要意思是：我们现在就要面包过日子，不想死了在天堂吃到馅饼。
&lt;/p&gt;

&lt;p&gt;
后来，拳王 Muhammad Ali 也引用过：You don&amp;rsquo;t want no &lt;b&gt;pie in the sky&lt;/b&gt;
when you die, you want something here on the ground while you&amp;rsquo;re still
around. 你不会想要死后吃到派，你想活着的时候得到些东西。
&lt;/p&gt;

&lt;p&gt;
后来，Joe Hill 被美国警察杀死了。
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines ES.71 首选带范围的 for</title>
   <link href="http://kimi.im/2023-05-04-cppcoreguidelines-es71"/>
   <updated>2023-05-04T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-es71</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;Prefer a range-for-statement to a for-statement when there is a choice&amp;rdquo;
&lt;/p&gt;

&lt;p&gt;
理由
&lt;/p&gt;

&lt;p&gt;
可读性更好。避免错误。效率高。
&lt;/p&gt;

&lt;p&gt;
比如
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;for&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;gsl&lt;/span&gt;::&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;index&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;i&lt;/span&gt; = 0; i &amp;lt; v.size&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt;; ++i&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;bad&lt;/span&gt;
    cout &amp;lt;&amp;lt; v&lt;span style=&quot;color: #707183;&quot;&gt;[&lt;/span&gt;i&lt;span style=&quot;color: #707183;&quot;&gt;]&lt;/span&gt; &amp;lt;&amp;lt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&apos;\n&apos;&lt;/span&gt;;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;for&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;auto&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;p&lt;/span&gt; = v.begin&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt;; p != v.end&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt;; ++p&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;bad&lt;/span&gt;
    cout &amp;lt;&amp;lt; *p &amp;lt;&amp;lt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&apos;\n&apos;&lt;/span&gt;;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;for&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;auto&lt;/span&gt;&amp;amp; &lt;span style=&quot;color: #000000;&quot;&gt;x&lt;/span&gt; : v&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;OK&lt;/span&gt;
    cout &amp;lt;&amp;lt; x &amp;lt;&amp;lt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&apos;\n&apos;&lt;/span&gt;;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;for&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;gsl&lt;/span&gt;::&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;index&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;i&lt;/span&gt; = 1; i &amp;lt; v.size&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt;; ++i&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;touches two elements:&lt;/span&gt;
                                          &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;can&apos;t be a range-for&lt;/span&gt;
    cout &amp;lt;&amp;lt; v&lt;span style=&quot;color: #707183;&quot;&gt;[&lt;/span&gt;i&lt;span style=&quot;color: #707183;&quot;&gt;]&lt;/span&gt; + v&lt;span style=&quot;color: #707183;&quot;&gt;[&lt;/span&gt;i - 1&lt;span style=&quot;color: #707183;&quot;&gt;]&lt;/span&gt; &amp;lt;&amp;lt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&apos;\n&apos;&lt;/span&gt;;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;for&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;gsl&lt;/span&gt;::&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;index&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;i&lt;/span&gt; = 0; i &amp;lt; v.size&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt;; ++i&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;possible side effect:&lt;/span&gt;
                                          &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;can&apos;t be a range-for&lt;/span&gt;
    cout &amp;lt;&amp;lt; f&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;v, &amp;amp;v&lt;span style=&quot;color: #7388d6;&quot;&gt;[&lt;/span&gt;i&lt;span style=&quot;color: #7388d6;&quot;&gt;]&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt; &amp;lt;&amp;lt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&apos;\n&apos;&lt;/span&gt;;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;for&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;gsl&lt;/span&gt;::&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;index&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;i&lt;/span&gt; = 0; i &amp;lt; v.size&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt;; ++i&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;body messes with loop&lt;/span&gt;
                                            &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;variable: can&apos;t be a&lt;/span&gt;
                                            &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;range-for&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;i % 2 != 0&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;
        cout &amp;lt;&amp;lt; v&lt;span style=&quot;color: #7388d6;&quot;&gt;[&lt;/span&gt;i&lt;span style=&quot;color: #7388d6;&quot;&gt;]&lt;/span&gt; &amp;lt;&amp;lt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&apos;\n&apos;&lt;/span&gt;; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;output odd elements&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
好的程序员或静态代码分析工具能发现&lt;code&gt;f(v, &amp;amp;v[i])&lt;/code&gt;是否导致副作用， 从而确定循环是否可以重写。
&lt;/p&gt;

&lt;p&gt;
在循环体重对循环变量进行判断特殊处理， 这种情况最好能避免。
&lt;/p&gt;

&lt;p&gt;
注意
&lt;/p&gt;

&lt;p&gt;
不要在带范围的 for 循环中使用代价高的循环变量复制操作。
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;for&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;string &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;s&lt;/span&gt; : vs&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;...&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
这样会导致每次循环都复制一份 vs 的元素到 s。
&lt;/p&gt;

&lt;p&gt;
最好写成
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;for&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;string&lt;/span&gt;&amp;amp; &lt;span style=&quot;color: #000000;&quot;&gt;s&lt;/span&gt; : vs&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;...&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
更好的办法是，如果循环中不修改循环变量的值的话，就再添加一个 &lt;code&gt;const&lt;/code&gt;
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;for&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;string&lt;/span&gt;&amp;amp; &lt;span style=&quot;color: #000000;&quot;&gt;s&lt;/span&gt; : vs&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;...&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
强化
&lt;/p&gt;

&lt;p&gt;
检查循环，如果循环只是处理一遍循环序列的每一个元素，且没有对循环变量的副作用操作，可以将循环重写为带范围的 for 循环。
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines ES.70 如果有的选，选择 switch 语句，而不要选择 if 语句</title>
   <link href="http://kimi.im/2023-05-03-cppcoreguidelines-es70"/>
   <updated>2023-05-03T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-es70</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;Prefer a switch-statement to an if-statement when there is a choice&amp;rdquo;
&lt;/p&gt;

&lt;p&gt;
理由
&lt;/p&gt;

&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;可读性更好。&lt;/li&gt;
&lt;li&gt;效率更高。 &lt;code&gt;switch&lt;/code&gt; 是跟常数进行比较，通常比一组if then else效率更好&lt;/li&gt;
&lt;li&gt;&lt;code&gt;switch&lt;/code&gt; 可以支持更好的代码审查。比如，是不是所有 &lt;code&gt;enum&lt;/code&gt; 的值都覆盖了。如果不是，那么，是不是有一个 &lt;code&gt;default&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
例子
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;use&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;n&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;switch&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;n&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;good&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;case&lt;/span&gt; 0:
        &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;...&lt;/span&gt;
        &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;break&lt;/span&gt;;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;case&lt;/span&gt; 7:
        &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;...&lt;/span&gt;
        &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;break&lt;/span&gt;;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;default&lt;/span&gt;:
        &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;...&lt;/span&gt;
        &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;break&lt;/span&gt;;
    &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
相比较：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;use2&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;n&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;n == 0&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;bad: if-then-else chain comparing against a set&lt;/span&gt;
                  &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;of constants&lt;/span&gt;
        &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;...&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;else&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;n == 7&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;
        &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;...&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;
强化
&lt;/p&gt;

&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;标记处理多个常数值的if then else链&lt;/li&gt;
&lt;/ul&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines ES.64 用 T{e} 方式进行构造</title>
   <link href="http://kimi.im/2023-05-02-cppcoreguidelines-es64"/>
   <updated>2023-05-02T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-es64</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;Use the &lt;code&gt;T{e}&lt;/code&gt; notation for construction&amp;rdquo;
&lt;/p&gt;

&lt;p&gt;
理由
&lt;/p&gt;

&lt;p&gt;
&lt;code&gt;T{e}&lt;/code&gt; 构造语法显式地表明这里需要进行构造。&lt;code&gt;T{e}&lt;/code&gt;构造语法不允许变窄构造。
&lt;code&gt;T{e}&lt;/code&gt; 是用于从 &lt;code&gt;e&lt;/code&gt; 构造类型 &lt;code&gt;T&lt;/code&gt; 唯一安全且通用的表达式。类型转换语法 &lt;code&gt;T(e)&lt;/code&gt;
和&lt;code&gt;(T)e&lt;/code&gt;要么不安全，要么不常用。
&lt;/p&gt;

&lt;p&gt;
例子
&lt;/p&gt;

&lt;p&gt;
对于内置类型，这个构造语句能避免变窄转换和重解释（ reinterpretation ）。
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;use&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;char&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;ch&lt;/span&gt;, &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;i&lt;/span&gt;, &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;double&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;d&lt;/span&gt;, &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;char&lt;/span&gt;* &lt;span style=&quot;color: #000000;&quot;&gt;p&lt;/span&gt;, &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;long&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;long&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;lng&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;x1&lt;/span&gt; = &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;ch&lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;;     &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;OK, but redundant&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;x2&lt;/span&gt; = &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;d&lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;;      &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;error: double-&amp;gt;int narrowing; use a cast&lt;/span&gt;
                          &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;if you need to&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;x3&lt;/span&gt; = &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;p&lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;;      &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;error: pointer to-&amp;gt;int; use a&lt;/span&gt;
                          &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;reinterpret_cast if you really need to&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;x4&lt;/span&gt; = &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;lng&lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;;    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;error: long long-&amp;gt;int narrowing; use a&lt;/span&gt;
                          &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;cast if you need to&lt;/span&gt;

    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;y1&lt;/span&gt; = &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;ch&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;     &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;OK, but redundant&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;y2&lt;/span&gt; = &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;d&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;      &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;bad: double-&amp;gt;int narrowing; use a cast if&lt;/span&gt;
                          &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;you need to&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;y3&lt;/span&gt; = &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;p&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;      &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;bad: pointer to-&amp;gt;int; use a&lt;/span&gt;
                          &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;reinterpret_cast if you really need to&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;y4&lt;/span&gt; = &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;lng&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;bad: long long-&amp;gt;int narrowing; use a cast&lt;/span&gt;
                          &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;if you need to&lt;/span&gt;

    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;z1&lt;/span&gt; = &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;ch;     &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;OK, but redundant&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;z2&lt;/span&gt; = &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;d;      &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;bad: double-&amp;gt;int narrowing; use a cast if&lt;/span&gt;
                          &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;you need to&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;z3&lt;/span&gt; = &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;p;      &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;bad: pointer to-&amp;gt;int; use a&lt;/span&gt;
                          &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;reinterpret_cast if you really need to&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;z4&lt;/span&gt; = &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;lng;    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;bad: long long-&amp;gt;int narrowing; use a cast&lt;/span&gt;
                          &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;if you need to&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
在整型和指针之间用&lt;code&gt;T(e)&lt;/code&gt;或 &lt;code&gt;(T)e&lt;/code&gt; 操作的结果不同实现会不一样，是实现定义的行为。而且在不同系统平台，整型和指针位数不一样，代码也不可移植。
&lt;/p&gt;


&lt;p&gt;
注意
&lt;/p&gt;

&lt;p&gt;
避免类型转换（显式的类型转换），如果你实在需要，请使用带类型名的转换。
&lt;/p&gt;


&lt;p&gt;
注意
&lt;/p&gt;

&lt;p&gt;
如果意图很明确，&lt;code&gt;T{e}&lt;/code&gt;中的 &lt;code&gt;T&lt;/code&gt; 可以去掉。
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;complex&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;double&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;complex&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;double&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;auto&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;z&lt;/span&gt; = f&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;2*pi, 1&lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
注意
&lt;/p&gt;

&lt;p&gt;
构造符号是最通用的初始化符号。
&lt;/p&gt;

&lt;p&gt;
例外
&lt;/p&gt;

&lt;p&gt;
&lt;code&gt;std::vector&lt;/code&gt; 和其他容器是在我们有&lt;code&gt;{}&lt;/code&gt;作为构造符号之前定义的。
&lt;/p&gt;

&lt;p&gt;
考虑
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;vector&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;string&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;vs&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;10&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;                           &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;ten empty strings&lt;/span&gt;
&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;vector&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;vi1&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;1, 2, 3, 4, 5, 6, 7, 8, 9, 10&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;  &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;ten elements 1..10&lt;/span&gt;
&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;vector&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;vi2&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;10&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;                             &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;one element with&lt;/span&gt;
                                                  &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;the value 10&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
我们怎么得到一个初始化了 10 个整型的 &lt;code&gt;vector&lt;/code&gt; ？
&lt;/p&gt;


&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;vector&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;v3&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;10&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;ten elements with value 0&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
这里使用&lt;code&gt;()&lt;/code&gt;表示元素的个数，是从上世纪 80 年代就有的约定俗成，很难改变。但是这里还是有一个设计错误：对于容器来说，元素类型和元素个数很容易混淆。我们必须解决这个含糊不清的设计。通常的解决办法是把&lt;code&gt;{10}&lt;/code&gt;作为一个只有一个元素的列表，而&lt;code&gt;(10)&lt;/code&gt;作为容器大小。
&lt;/p&gt;

&lt;p&gt;
这个错误不可在新的代码中出现。我们可以定义一个类型来表示元素个数：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;struct&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Count&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;n&lt;/span&gt;; &lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;template&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;typename&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Vector&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;public&lt;/span&gt;:
    &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;Vector&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Count&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;n&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;                     &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;n default-initialized elements&lt;/span&gt;
    &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;Vector&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;initializer_list&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;init&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;init.size() elements&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;...&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;

&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Vector&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;v1&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;10&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;
&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Vector&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;v2&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;Count&lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;10&lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;
&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Vector&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Count&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;v3&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;Count&lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;10&lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;yes, there is still a very minor problem&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
这样，主要问题是找到一个合适的名字来命名 &lt;code&gt;Count&lt;/code&gt; 。
&lt;/p&gt;

&lt;p&gt;
强化
&lt;/p&gt;

&lt;p&gt;
标记 C 风格的&lt;code&gt;(T)e&lt;/code&gt;和函数式风格的&lt;code&gt;T(e)&lt;/code&gt;类型转换。
&lt;/p&gt;


&lt;p&gt;
理由
&lt;/p&gt;

&lt;p&gt;
对无效指针取值操作是未定义的行为。比如 &lt;code&gt;nullptr&lt;/code&gt; 。通常会导致程序立即出错，得到错误结果，或者内存出错。
&lt;/p&gt;

&lt;p&gt;
注意
&lt;/p&gt;

&lt;p&gt;
这条规则是很明显的，很重要的语言规则。但是很难遵循。需要好的编码风格，语言库支持，还有静态代码检测来规避。这是C++类型模型和资源安全方面主要的讨论点。
&lt;/p&gt;

&lt;p&gt;
例子
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;x&lt;/span&gt; = 0;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt;* &lt;span style=&quot;color: #000000;&quot;&gt;p&lt;/span&gt; = &amp;amp;x;

    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;condition&lt;span style=&quot;color: #909183;&quot;&gt;()&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;
        &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;y&lt;/span&gt; = 0;
        p = &amp;amp;y;
    &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;invalidates p&lt;/span&gt;

    *p = 42;            &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;BAD, p might be invalid if the branch was&lt;/span&gt;
                        &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;taken&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
这里，如果运行了条件判断分支，指针 p 的值可能变得无效。解决这个问题的方法是扩展指针指向的对象的生命周期。或者缩短指针的生命周期（将取值操作移动到指针指向的对象的生命周期结束之前）。
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;f1&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;x&lt;/span&gt; = 0;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt;* &lt;span style=&quot;color: #000000;&quot;&gt;p&lt;/span&gt; = &amp;amp;x;

    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;y&lt;/span&gt; = 0;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;condition&lt;span style=&quot;color: #909183;&quot;&gt;()&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;
        p = &amp;amp;y;
    &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;

    *p = 42;            &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;OK, p points to x or y and both are still in scope&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
很遗憾，大多数指针无效问题都很难找到，很难解决。
&lt;/p&gt;

&lt;p&gt;
例子
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt;* &lt;span style=&quot;color: #000000;&quot;&gt;p&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;x&lt;/span&gt; = *p; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;BAD: how do we know that p is valid?&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
市面上有大量此类代码，经过大量测试，大部分还能工作，但是孤立来看，很难判断 p 是不是一个 &lt;code&gt;nullptr&lt;/code&gt; 。结果就是，这种情况是大量错误的来源。有很多方法可以解决这个潜在问题。
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;f1&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt;* &lt;span style=&quot;color: #000000;&quot;&gt;p&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;deal with nullptr&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;!p&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;
        &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;deal with nullptr (allocate, return, throw, make p point to&lt;/span&gt;
        &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;something, whatever&lt;/span&gt;
    &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;x&lt;/span&gt; = *p;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;

&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
测试 &lt;code&gt;nullptr&lt;/code&gt; 时，有 2 个潜在问题：
&lt;/p&gt;
&lt;ol class=&quot;org-ol&quot;&gt;
&lt;li&gt;当我们找到 &lt;code&gt;nullptr&lt;/code&gt; 的时候，我们不是很确定应该怎么处理，这种测试有时候是多余的，或者代价很高。&lt;/li&gt;
&lt;li&gt;也不确定这里的测试是避免错误，还是本来就是代码逻辑的一部分。&lt;/li&gt;
&lt;/ol&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;f2&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt;* &lt;span style=&quot;color: #000000;&quot;&gt;p&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;state that p is not supposed to be nullptr&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    assert&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;p&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;x&lt;/span&gt; = *p;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
这样做只是在编译分析过程中引入一些计算代价。而且当C++支持合约（ contract ）的时候，处理的会更好。
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;f3&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt;* &lt;span style=&quot;color: #000000;&quot;&gt;p&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;state that p is not supposed to be nullptr&lt;/span&gt;
    &lt;span style=&quot;color: #707183;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;[&lt;/span&gt;expects: p&lt;span style=&quot;color: #7388d6;&quot;&gt;]&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;]&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;x&lt;/span&gt; = *p;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
我们也可以用&lt;code&gt;gsl::not_null&lt;/code&gt;来确保参数 &lt;code&gt;p&lt;/code&gt; 不能是 &lt;code&gt;nullptr&lt;/code&gt; ：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;not_null&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt;*&lt;span style=&quot;color: #7388d6;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;p&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;x&lt;/span&gt; = *p;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
这些方法只是处理了 &lt;code&gt;nullptr&lt;/code&gt; ，但是记住，还有很多情况会得到一个无效的指针：
&lt;/p&gt;


&lt;p&gt;
例子
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt;* &lt;span style=&quot;color: #000000;&quot;&gt;p&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;  &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;old code, doesn&apos;t use owner&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;delete&lt;/span&gt; p;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;

&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;g&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;        &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;old code: uses naked new&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;auto&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;q&lt;/span&gt; = &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;7&lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;;
    f&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;q&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;x&lt;/span&gt; = *q; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;BAD: dereferences invalid pointer&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
例子
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;vector&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;v&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;10&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt;* &lt;span style=&quot;color: #000000;&quot;&gt;p&lt;/span&gt; = &amp;amp;v&lt;span style=&quot;color: #7388d6;&quot;&gt;[&lt;/span&gt;5&lt;span style=&quot;color: #7388d6;&quot;&gt;]&lt;/span&gt;;
    v.push_back&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;99&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;could reallocate v&apos;s elements&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;x&lt;/span&gt; = *p; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;BAD: dereferences potentially invalid pointer&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
强化
&lt;/p&gt;

&lt;p&gt;
此规则是安全生命周期规则集的一部分。
&lt;/p&gt;

&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;标记指针取值操作，且离开指针指向的对象作用域范围&lt;/li&gt;
&lt;li&gt;标记指针取值操作，且指针可能指向了 &lt;code&gt;nullptr&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;标记指针取值操作，且指针可能通过 &lt;code&gt;delete&lt;/code&gt; 被设置无效了&lt;/li&gt;
&lt;li&gt;标记指针取值操作，且指针指向的容器元素可能已经无效了&lt;/li&gt;
&lt;/ul&gt;
</content>
 </entry>
 
 <entry>
   <title>单词本：triumvirate</title>
   <link href="http://kimi.im/2023-05-02-triumvirate"/>
   <updated>2023-05-02T00:00:00+00:00</updated>
   <id>http://kimi.im/triumvirate</id>
   <content type="html">&lt;p&gt;
Rich Hickey 写的 Clojure 历史一文(&lt;a href=&quot;#citeproc_bib_item_1&quot;&gt;Hickey 2020&lt;/a&gt;)中画了一个统计图， Figure 7 shows the &lt;b&gt;triumvirate&lt;/b&gt; of functional programming, the
Lisp REPL-driven development experience, and host platform access are
most valued. 图 7 中显式了函数式编程的三巨头，其中 Lisp REPL驱动开发体验和宿主平台访问是最受关注的。
&lt;/p&gt;

&lt;p&gt;
这里 Rich 用了 triumvirate 来指代 Clojure 函数式编程语言中的三个主要特色。
&lt;/p&gt;

&lt;p&gt;
triumvirate 源自拉丁语， trium 是三个的意思，而 virate则来自 vir 男人或者英雄。所以 triumvirate 是 三个伟大的男人的意思。历史上，古罗马有三头执政制度，第二个三头政权是Antony, Octavian,和 Lepidus。
&lt;/p&gt;

&lt;p&gt;
在信息安全知识体系(&lt;a href=&quot;#citeproc_bib_item_2&quot;&gt;Rashid et al. 2021&lt;/a&gt;)中，也用 triumvirate指代数据信息安全的三个重要方面，即传输中的数据，存储的数据以及计算中的数据：
Keeping in mind this &lt;b&gt;triumvirate&lt;/b&gt; - data in transit, data at rest, data
under computation — can be useful when understanding what to expect in
terms of the security, performance and maturity of systems using
cryptography.
&lt;/p&gt;

&lt;p&gt;
源自拉丁语 vir 的单词还有 virtue 美德，好像后来也指妇女的贞德。其实这个词本来应该指男人的品德吧。 virile的意思是男性的、男子气概的、刚健的。
virilization 则表示女性的男性化。
&lt;/p&gt;

&lt;p&gt;
&lt;b&gt;References&lt;/b&gt;
&lt;/p&gt;
&lt;style&gt;.csl-entry{text-indent: -1.5em; margin-left: 1.5em;}&lt;/style&gt;&lt;div class=&quot;csl-bib-body&quot;&gt;
  &lt;div class=&quot;csl-entry&quot;&gt;&lt;a id=&quot;citeproc_bib_item_1&quot;&gt;&lt;/a&gt;Hickey, Rich. 2020. “A History of Clojure.” &lt;i&gt;Proceedings of the ACM on Programming Languages&lt;/i&gt; 4 (HOPL). ACM New York, NY, USA: 1–46.&lt;/div&gt;
  &lt;div class=&quot;csl-entry&quot;&gt;&lt;a id=&quot;citeproc_bib_item_2&quot;&gt;&lt;/a&gt;Rashid, Awais, Howard Chivers, Emil Lupu, Andrew Martin, and Steve Schneider. 2021. &lt;i&gt;The Cyber Security Body of Knowledge&lt;/i&gt;.&lt;/div&gt;
&lt;/div&gt;
</content>
 </entry>
 
 <entry>
   <title>单词本：esoteric</title>
   <link href="http://kimi.im/2023-05-02-esoteric"/>
   <updated>2023-05-02T00:00:00+00:00</updated>
   <id>http://kimi.im/esoteric</id>
   <content type="html">&lt;p&gt;
工业软件国产化这个事情最近很热门。在芯片电路设计领域，EDA 软件就是很重要的一款工业行业软件。
&lt;/p&gt;

&lt;p&gt;
有人这么写到： If you think the lack of engineers is a problem in
other areas, consider the electronic design automation (EDA)
space. It’s an &lt;b&gt;esoteric&lt;/b&gt; field with just a few key suppliers and an
extremely high barrier to entry for both individuals and startups. 如果你觉得在别的领域缺少工程师是个大问题。那么考虑一下 EDA 软件领域，这是一个极其深奥的领域，只有少数个别供应商，进入的门槛也很高。
&lt;/p&gt;

&lt;p&gt;
这段话里，用到了 esoteric，意思是只有内行才懂的，难领略的；限于少数人的，限于小圈子的，秘传的，机密的，深奥的。
&lt;/p&gt;

&lt;p&gt;
其实，这个词是来自希腊语，εσωτερικός。εσωτερικός 在希腊语里是 internal
内部的意思。前缀 eso 跟 en，in 都是同源的。
&lt;/p&gt;

&lt;p&gt;
Clojure 作者Rich Hickey的文章&amp;ldquo;A history of Clojure&amp;rdquo;中写道 Nubank
公司大量使用 Clojure 时，写道：Nubank uses Datomic as its
database. “ We ’re a functional programming shop not in terms of really
&lt;b&gt;esoteric&lt;/b&gt; concepts, but just in terms of the basic immutability,
idempotence, declarative format, small functions, pure
functions. Clojure is an interesting choice because it’s very
simple. We’re able to write actually quite a large system at this
point without having any single piece of it that is difficult to
understand.” Nubank 是一个函数式编程工作室，他们没有用到很深奥的概念，而只是用了函数式编程的一些基础概念，比如不可变性、等幂性、声明式格式、小函数、纯函数等。
&lt;/p&gt;

&lt;p&gt;
RISC-V 规格书(&lt;a href=&quot;#citeproc_bib_item_1&quot;&gt;Waterman and Manual 2019&lt;/a&gt;)也用到了这个词：The standard
extension prefixes avoid spurious incompatibilities in the encoding of
core functionality, while allowing custom packing of more &lt;b&gt;esoteric&lt;/b&gt;
extensions. 标准的扩展前缀避免了核心功能的不合理的不兼容性，同时又允许更多定制的深奥的扩展。
&lt;/p&gt;

&lt;p&gt;
esoteric 对应的名词是 esoterica，意思是秘传的事物，或者是上不了台面的低俗刊物。
&lt;/p&gt;

&lt;p&gt;
与 esoteric 相反的是 exoteric ，意思是外界的、开放的、通俗的、外行、局外人。这里我们看到 eso是 in 的希腊语词根，而 exo 则是 out 的词根。所以分别表示内行和外行。
&lt;/p&gt;

&lt;p&gt;
exoteric 对应的名词则为 exoterica，意思是大众化的通俗的观念、大众化的通俗的作品、大众化的通俗的理论。
&lt;/p&gt;

&lt;p&gt;
大概为了区分这两个词，esoteric 读作[ˌiːsəˈterɪk]而 exoteric 读作
[ˌeksəʊˈterɪk]。区分度还是有些大的。
&lt;/p&gt;

&lt;p&gt;
&lt;b&gt;References&lt;/b&gt;
&lt;/p&gt;
&lt;style&gt;.csl-entry{text-indent: -1.5em; margin-left: 1.5em;}&lt;/style&gt;&lt;div class=&quot;csl-bib-body&quot;&gt;
  &lt;div class=&quot;csl-entry&quot;&gt;&lt;a id=&quot;citeproc_bib_item_1&quot;&gt;&lt;/a&gt;Waterman, Andrew, and Manual Krste AsanovićtitleThe RISC-V Instruction Set. 2019.&lt;/div&gt;
&lt;/div&gt;
</content>
 </entry>
 
 <entry>
   <title>SECS/SEM 半导体行业的工厂通信标准</title>
   <link href="http://kimi.im/2023-05-01-secs-sem-standard"/>
   <updated>2023-05-01T00:00:00+00:00</updated>
   <id>http://kimi.im/secs-sem-standard</id>
   <content type="html">&lt;p&gt;
不同的工业行业，都有数字化通信的需求。但是在发展之初，跨行业的沟通很少，于是各行各业各自自行制定了各种不同的网络通信标准。比如之前介绍的注塑机和 MES 通信的标准 &lt;a href=&quot;http://kimi.im/2022-07-09-euromap77&quot;&gt;EUROMAP 77&lt;/a&gt;。
&lt;/p&gt;

&lt;p&gt;
同样的，在半导体行业，也有行业通行的通信标准，名叫 SECS/GEM。这个标准是用于工厂主机系统（Factory Host System）和工业设备（ Equipment ）之间的通信。
&lt;/p&gt;

&lt;p&gt;
半导体设备发送数据、状态、事件、警报等信息给工厂主机系统，工厂就可以通过工厂主机系统全方位监视和控制设备，实现生产的全自动化。
&lt;/p&gt;

&lt;p&gt;
那么为什么这个标准叫这个奇奇怪怪的名字：SECS/GEM？
&lt;/p&gt;

&lt;p&gt;
SECS 的全称是Semiconductor Equipment Communication Standard。就是半导体设备通信标准。而 GEM的全称则是Generic Equipment Model通用设备模型。工厂用来指导生产过程的 MES 系统，就可以通过这个通信和模型标准，来跟设备进行顺畅通信了。
&lt;/p&gt;

&lt;p&gt;
SECS/GEM 是一伙从事半导体行业的公司一起维护的标准。这样，大家开发的设备和软件互相通信就不会出现鸡同鸭讲的问题了。
&lt;/p&gt;

&lt;p&gt;
需要用到SECS/GEM的公司都有哪些呢？他们分别是：
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;做半导体生产设备的设备厂商&lt;/li&gt;
&lt;li&gt;从事半导体生产的，半导体制造厂，晶圆制造厂&lt;/li&gt;
&lt;li&gt;做表面贴装技术（Surface Mount Technology， SMT ）设备的厂商&lt;/li&gt;
&lt;li&gt;平板显示屏厂商&lt;/li&gt;
&lt;li&gt;半导体产品测试设备厂商&lt;/li&gt;
&lt;li&gt;半导体 MES 软件开发商&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
在SECS/GEM标准里，通信的双方又分为设备（ Equipment ）和主机（ Host ）。设备呢，包含制程生产设备、厂务设备、终端等。主机（ Host ）呢，一般就是工厂 IT 系统侧的 EAP 、MES、 CIM 等。
&lt;/p&gt;

&lt;p&gt;
主机和设备之间都做哪些通讯呢？
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;远程设备通信和配置管理。GEM Semi-Bantu E30 部分用来处理这部分通信。包括数据采集，警报管理，设备配置，工艺上传下载，设备终端服务，本地远程控制等。&lt;/li&gt;
&lt;li&gt;SEMI E84 和 E87 部分管理上下料系统，比如说什么时间要给哪个设备提供哪些物料。&lt;/li&gt;
&lt;li&gt;SEMI E40 和 E94 处理任务管理。描述哪个设备在什么时间要处理哪些工艺。还要定义各个人物的物料清单和处理过程工艺。&lt;/li&gt;
&lt;li&gt;SEMI E10 用于监控分析设备工作性能，提供预测性维护、预测性停机、故障警告的根因分析等。&lt;/li&gt;
&lt;/ul&gt;
</content>
 </entry>
 
 <entry>
   <title>接口隔离原则，Interface Segregation Principle，ISP</title>
   <link href="http://kimi.im/2023-05-01-isp"/>
   <updated>2023-05-01T00:00:00+00:00</updated>
   <id>http://kimi.im/isp</id>
   <content type="html">&lt;blockquote&gt;
&lt;p&gt;
夫道未始有封，言未始有常，為是而有畛也。請言其畛：有左，有右，有倫，有義，有分，有辯，有競，有爭，此之謂八德。
&lt;/p&gt;

&lt;p&gt;
《庄子·齐物论》
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;
软件工程领域，有一个概念叫 SOLID。SOLID 是五个面向对象设计原则的首字母缩写。最早由 Robert C. Martin 在其 2000 年的论文《Design Principles
and Design Patterns》中提出的。
&lt;/p&gt;

&lt;p&gt;
其中，I 原则指的是 Interface Segregation Principle，接口隔离原则，简称
ISP。
&lt;/p&gt;

&lt;p&gt;
ISP 是这么表述的：“Clients should not be forced to depend upon
interfaces that they do not use.” 不应该强迫对象的用户依赖于它不需要的接口。也就是说，为了使用某个功能，客户/用户不应该被强制使用超出该功能的接口。那么，要避免这种情况，就需要把过大的接口拆分成粒度更小的接口。
&lt;/p&gt;

&lt;p&gt;
比如我们要设计一个闹钟，闹钟其实有多种功能：可以读取当前时间，可以设置闹铃时间。
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;AlarmClock&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
  &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;public&lt;/span&gt;:
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;time_t&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;readTime&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt;;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;setAlarm&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;time_t&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
然后，我们又定义了一个 TimeReporter，它其实只关心时间，它并不需要知道怎么设置闹铃时间。
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;TimeReporter&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
  &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;public&lt;/span&gt;:
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;reportTime&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;AlarmClock&lt;/span&gt;&amp;amp; &lt;span style=&quot;color: #000000;&quot;&gt;c&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;
        announceTime&lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;c.readTime&lt;span style=&quot;color: #709870;&quot;&gt;()&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt;;
    &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
另一个，AlarmSetter 用来设置闹钟闹铃：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;AlarmSetter&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
  &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;public&lt;/span&gt;:
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;setClockAlarm&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;AlarmClock&lt;/span&gt;&amp;amp; &lt;span style=&quot;color: #000000;&quot;&gt;c&lt;/span&gt;, &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;time_t&lt;/span&gt;&amp;amp; &lt;span style=&quot;color: #000000;&quot;&gt;t&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;
        c.setAlarm&lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;t&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt;;
    &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
这就导致了 AlarmSetter 和 TimeReporter 依赖所有 AlarmClock 的接口。
AlarmClock 的任意一个接口改动，都会影响前两者的实现。
&lt;/p&gt;

&lt;p&gt;
ISP 原则就要求 AlarmClock 应该实现两个接口，分别是 Clock 和 Alarm，这样两个不同功能的接口就分离开互相不影响。
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Clock&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
  &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;public&lt;/span&gt;:
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;virtual&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;time_t&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;readTime&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Alarm&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
  &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;public&lt;/span&gt;:
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;virtual&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;setAlarm&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;time_t&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;AlarmClock&lt;/span&gt; : &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Clock&lt;/span&gt;, &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Alarm&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
  &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;public&lt;/span&gt;:
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;time_t&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;readTime&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt;;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;setAlarm&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;time_t&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;TimeReporter&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
  &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;public&lt;/span&gt;:
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;reportTime&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Clock&lt;/span&gt;&amp;amp; &lt;span style=&quot;color: #000000;&quot;&gt;c&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;
        announceTime&lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;c.readTime&lt;span style=&quot;color: #709870;&quot;&gt;()&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt;;
    &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;AlarmSetter&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
  &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;public&lt;/span&gt;:
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;setClockAlarm&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Alarm&lt;/span&gt;&amp;amp; &lt;span style=&quot;color: #000000;&quot;&gt;a&lt;/span&gt;, &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;time_t&lt;/span&gt;&amp;amp; &lt;span style=&quot;color: #000000;&quot;&gt;t&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;
        a.setAlarm&lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;t&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt;;
    &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;
&lt;/pre&gt;
&lt;/div&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines ES.63 不要进行对象切片</title>
   <link href="http://kimi.im/2023-05-01-cppcoreguidelines-es63"/>
   <updated>2023-05-01T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-es63</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;Don’t slice&amp;rdquo;
&lt;/p&gt;

&lt;p&gt;
理由
&lt;/p&gt;

&lt;p&gt;
所谓的切片，就是在赋值或初始化的时候，只 copy 对象的一部分数据。因为对象要整体考虑，这种情况经常导致错误。在某些情况，会导致奇怪的结果。
&lt;/p&gt;

&lt;p&gt;
例子
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Shape&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;/* &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;...&lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt; */&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Circle&lt;/span&gt; : &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Shape&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;/* &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;...&lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt; */&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Point&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;c&lt;/span&gt;; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;r&lt;/span&gt;; &lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;

&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Circle&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;c&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;0, 0&lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;, 42&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;
&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Shape&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;s&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;c&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;copy construct only the Shape part of Circle&lt;/span&gt;
s = c;          &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;or copy assign only the Shape part of Circle&lt;/span&gt;

&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;assign&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Shape&lt;/span&gt;&amp;amp; &lt;span style=&quot;color: #000000;&quot;&gt;src&lt;/span&gt;, &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Shape&lt;/span&gt;&amp;amp; &lt;span style=&quot;color: #000000;&quot;&gt;dest&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    dest = src;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Circle&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;c2&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;1, 1&lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;, 43&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;
assign&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;c, c2&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;oops, not the whole state is transferred&lt;/span&gt;
assert&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;c == c2&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;if we supply copying, we should also provide comparison,&lt;/span&gt;
                 &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;but this will likely return false&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
以上代码的结果是无意义的，因为圆心和半径部分没用从 c 复制到 s 。为了避免这种情况方式，第一步在基类 Shape的定义中禁止这种操作。
&lt;/p&gt;


&lt;p&gt;
其他选项
&lt;/p&gt;

&lt;p&gt;
如果你确实需要切片 slice，你可以显式地定义这个操作。从而避免代码读者产生疑惑。比如：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Smiley&lt;/span&gt; : &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Circle&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
  &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;public&lt;/span&gt;:
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Circle&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;copy_circle&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt;;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;...&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;

&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Smiley&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;sm&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;/* &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;...&lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt; */&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;
&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Circle&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;c1&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;sm&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;  &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;ideally prevented by the definition of Circle&lt;/span&gt;
&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Circle&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;c2&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;sm.copy_circle&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
强化
&lt;/p&gt;

&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;对于产生切片的地方发出警告&lt;/li&gt;
&lt;/ul&gt;
</content>
 </entry>
 
 <entry>
   <title>单词本：formidable</title>
   <link href="http://kimi.im/2023-05-01-formidable"/>
   <updated>2023-05-01T00:00:00+00:00</updated>
   <id>http://kimi.im/formidable</id>
   <content type="html">&lt;p&gt;
虽然还不是 CEO，但也是要时刻准备。说不定，哪一天就有机会了。
&lt;/p&gt;

&lt;p&gt;
在《CEO Excellence》(&lt;a href=&quot;#citeproc_bib_item_1&quot;&gt;Dewar, Keller, and Malhotra 2022&lt;/a&gt;) 有一句话：
&lt;/p&gt;

&lt;p&gt;
A CEO’s most &lt;b&gt;formidable&lt;/b&gt; challenges include interacting with the board
of directors. 让 CEO 最难对付的挑战，包括跟董事会交涉。
&lt;/p&gt;

&lt;p&gt;
尽管与董事会交涉很难，但是，对于 CEO 来说与董事会交涉很重要的事情，正如Doug Baker说的 “The board is a great tool to help the business
succeed, if you know how to invite them in.”
&lt;/p&gt;

&lt;p&gt;
这里 &lt;b&gt;formidable&lt;/b&gt; 看起来好像是 form + able，难道是“可形成的”之类的意思。其实呢，它是来自法语 formidable，再往上追溯，是拉丁语 formidabilis，而
formidare，意思是害怕。所以 &lt;b&gt;formidable&lt;/b&gt; 的意思和形状什么没关系，而是：可怕的，令人敬畏的；（形状、数量）巨大的；难对付的。
&lt;/p&gt;

&lt;p&gt;
在 IEEE 软件密集型系统架构设计(&lt;a href=&quot;#citeproc_bib_item_2&quot;&gt;IEEE 2000&lt;/a&gt;)中，描述软件密集型系统的设计、构建、部署和演进过程中依然存在着巨大的风险和苦难时，也用到了这个单词：Despite significant efforts to improve engineering practices and
technologies, software-intensive systems continue to present
&lt;b&gt;formidable&lt;/b&gt; risks and difficulties in their design, construction,
deployment, and evolution. 尽管在工程实践上投入了大量的精力，软件密集型系统的设计、构造、部署和演化过程依然持续的经历巨大的风险和困难。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;References&lt;/b&gt;
&lt;/p&gt;
&lt;style&gt;.csl-entry{text-indent: -1.5em; margin-left: 1.5em;}&lt;/style&gt;&lt;div class=&quot;csl-bib-body&quot;&gt;
  &lt;div class=&quot;csl-entry&quot;&gt;&lt;a id=&quot;citeproc_bib_item_1&quot;&gt;&lt;/a&gt;Dewar, Carolyn, Scott Keller, and Vikram Malhotra. 2022. &lt;i&gt;CEO Excellence: The Six Mindsets That Distinguish the Best Leaders from the Rest&lt;/i&gt;. McKinsey &amp;#38; Company, Inc.&lt;/div&gt;
  &lt;div class=&quot;csl-entry&quot;&gt;&lt;a id=&quot;citeproc_bib_item_2&quot;&gt;&lt;/a&gt;IEEE. 2000. “IEEE Recommended Practice for Architectural Description of Software-Intensive Systems.” IEEE.&lt;/div&gt;
&lt;/div&gt;
</content>
 </entry>
 
 <entry>
   <title>单词本：culprit</title>
   <link href="http://kimi.im/2023-05-01-culprit"/>
   <updated>2023-05-01T00:00:00+00:00</updated>
   <id>http://kimi.im/culprit</id>
   <content type="html">&lt;p&gt;
Rich Hickey 关于 Clojure 编程语言的历史一文(&lt;a href=&quot;#citeproc_bib_item_1&quot;&gt;Hickey 2020&lt;/a&gt;)在讨论到 Clojure 内置的 map 数据结构能解决大部分信息系统数据处理的问题时，写道：I should note that the same problems often arise with
traditional SQL database systems, where tables are the
fully-enumerated &lt;b&gt;culprits&lt;/b&gt;, and column and table names are not first
class, nullability is a fixed decision, sparseness and openness are
problematic, etc.
&lt;/p&gt;

&lt;p&gt;
这里 &lt;b&gt;cultprit&lt;/b&gt; 是罪魁祸首的意思。
&lt;/p&gt;

&lt;p&gt;
再比如 Because code logic was the first suspected &lt;b&gt;culprit&lt;/b&gt;, we spent a
significant amount of labor and time investigating and resolving the
issue. 因为人们总是认为代码逻辑错误是首先值得怀疑的罪魁祸首，所以我们花费了大量时间调研分析逻辑问题。
&lt;/p&gt;

&lt;p&gt;
其实，这个 culprit 是由cul prit，两个词合起来的。说起这个词组的源头，要从诺曼人入侵英格兰说起。 1066 年10月哈斯丁斯一役，英军败绩，英国国王哈罗德战死。诺曼底公爵威廉加冕为王，称威廉一世（1066-1087年）。自此以后，英国的贵族语言通行法语。直到 14 世纪英语转为官方语言之后，法律用于还是沿用法语。（果然是名副其实的“法”语）。那时候，一个罪犯如果要辩护自己无罪的时候，公诉人会回复说： Culpable, prest d&amp;rsquo;averrer nostre bille.翻译过来大概是“我们坚信他有罪，我已经准备提供证据”。然后，在法律文案中，经常缩写为 cul prit。时间久了，就联在一起，意思也转变成了罪魁祸首了。
&lt;/p&gt;

&lt;p&gt;
我们看到古法语的 prest 是“准备好”的意思，现在在法语中，也变成了 pr êt。比如 prê t à manger，准备好吃饭了。
&lt;/p&gt;

&lt;p&gt;
culpable 的意思是有罪的、应受责备的。来自拉丁语 culpa 责罚，谴责。同源的还有 exculpate 免受责罚。inculpate 使获罪。
&lt;/p&gt;

&lt;p&gt;
&lt;b&gt;References&lt;/b&gt;
&lt;/p&gt;
&lt;style&gt;.csl-entry{text-indent: -1.5em; margin-left: 1.5em;}&lt;/style&gt;&lt;div class=&quot;csl-bib-body&quot;&gt;
  &lt;div class=&quot;csl-entry&quot;&gt;&lt;a id=&quot;citeproc_bib_item_1&quot;&gt;&lt;/a&gt;Hickey, Rich. 2020. “A History of Clojure.” &lt;i&gt;Proceedings of the ACM on Programming Languages&lt;/i&gt; 4 (HOPL). ACM New York, NY, USA: 1–46.&lt;/div&gt;
&lt;/div&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines ES.62 不要在不同数组间比较指针</title>
   <link href="http://kimi.im/2023-04-30-cppcoreguidelines-es62"/>
   <updated>2023-04-30T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-es62</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;Don’t compare pointers into different arrays&amp;rdquo;
&lt;/p&gt;

&lt;p&gt;
理由
&lt;/p&gt;

&lt;p&gt;
此类操作的结果是未定义的。
&lt;/p&gt;

&lt;p&gt;
坏例子
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;a1&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;[&lt;/span&gt;7&lt;span style=&quot;color: #7388d6;&quot;&gt;]&lt;/span&gt;;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;a2&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;[&lt;/span&gt;9&lt;span style=&quot;color: #7388d6;&quot;&gt;]&lt;/span&gt;;
    cout &amp;lt;&amp;lt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;&amp;amp;a1[5] = &quot;&lt;/span&gt; &amp;lt;&amp;lt; &amp;amp;a1&lt;span style=&quot;color: #7388d6;&quot;&gt;[&lt;/span&gt;5&lt;span style=&quot;color: #7388d6;&quot;&gt;]&lt;/span&gt; &amp;lt;&amp;lt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;\n&amp;amp;a2[7] = &quot;&lt;/span&gt; &amp;lt;&amp;lt; &amp;amp;a2&lt;span style=&quot;color: #7388d6;&quot;&gt;[&lt;/span&gt;7&lt;span style=&quot;color: #7388d6;&quot;&gt;]&lt;/span&gt;;

    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&amp;amp;a1&lt;span style=&quot;color: #909183;&quot;&gt;[&lt;/span&gt;5&lt;span style=&quot;color: #909183;&quot;&gt;]&lt;/span&gt; &amp;lt; &amp;amp;a2&lt;span style=&quot;color: #909183;&quot;&gt;[&lt;/span&gt;7&lt;span style=&quot;color: #909183;&quot;&gt;]&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;       &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;bad: undefined&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;0 &amp;lt; &amp;amp;a1&lt;span style=&quot;color: #909183;&quot;&gt;[&lt;/span&gt;5&lt;span style=&quot;color: #909183;&quot;&gt;]&lt;/span&gt; - &amp;amp;a2&lt;span style=&quot;color: #909183;&quot;&gt;[&lt;/span&gt;7&lt;span style=&quot;color: #909183;&quot;&gt;]&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;bad: undefined&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;main&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    f&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt;;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; EXIT_SUCCESS;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;pre class=&quot;example&quot;&gt;
&amp;amp;a1[5] = 0x9ee79ffa94
&amp;amp;a2[7] = 0x9ee79ffa6c
&lt;/pre&gt;



&lt;p&gt;
注意
&lt;/p&gt;

&lt;p&gt;
此例子有很多问题！
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>单词本：de facto</title>
   <link href="http://kimi.im/2023-04-30-latin-de-facto"/>
   <updated>2023-04-30T00:00:00+00:00</updated>
   <id>http://kimi.im/latin-de-facto</id>
   <content type="html">&lt;p&gt;
最近杭州博物馆开始了一个西方银器特展“盛宴： 18 至20世纪西方银器展”。展示了这一时期华丽的欧美金银器具。
&lt;/p&gt;

&lt;p&gt;
在展厅的介绍中有这么一段介绍，其中写道：The royal households and noble
lineages became the &lt;b&gt;de facto&lt;/b&gt; ruling class and spawned a complete
political and economic ancient régime. 王室和贵族血统成了实际上的统治阶层。
&lt;/p&gt;

&lt;p&gt;
这个&lt;b&gt;de facto&lt;/b&gt;源自拉丁语，意思就是in fact，in reality，就是一种道义上正确，但是法律上并没有完全规定的事实。 de在法语和拉丁语中都是 of，
from 的意思。所以字面意思de facto就是根据事实。
&lt;/p&gt;

&lt;p&gt;
之前，我们也学习了另一个法语词组 &lt;a href=&quot;http://kimi.im/2022-04-05-english-de-rigueur&quot;&gt;de rigueur&lt;/a&gt;，意思是礼节上需要。跟这个
&lt;b&gt;de facto&lt;/b&gt; 的构造比较相似。
&lt;/p&gt;

&lt;p&gt;
在 Armis 安全研究团队发现Schneider Electric PLC的安全漏洞
(&lt;a href=&quot;#citeproc_bib_item_1&quot;&gt;Kauffman and Seri 2021&lt;/a&gt;) 的一篇文章中，介绍 Modbus 的时候也用到了&lt;b&gt;de facto&lt;/b&gt;：
Modbus is the &lt;b&gt;de facto&lt;/b&gt; standard for controlling PLCs in SCADA systems.
It was first published by Modicon (now Schneider Electric) in 1979. 即，
Modbus 现场总线是 PLC 和 SCADA 系统的事实标准。
&lt;/p&gt;

&lt;p&gt;
再来看看相关的用法：
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;de facto standard 约定俗成的标准&lt;/li&gt;
&lt;li&gt;de facto recognition 事实上的承认&lt;/li&gt;
&lt;li&gt;de facto marriage 事实婚姻&lt;/li&gt;
&lt;li&gt;de facto control 实际上的控制&lt;/li&gt;
&lt;li&gt;de facto relationship 事实婚姻伴侣关系&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
&lt;b&gt;References&lt;/b&gt;
&lt;/p&gt;
&lt;style&gt;.csl-entry{text-indent: -1.5em; margin-left: 1.5em;}&lt;/style&gt;&lt;div class=&quot;csl-bib-body&quot;&gt;
  &lt;div class=&quot;csl-entry&quot;&gt;&lt;a id=&quot;citeproc_bib_item_1&quot;&gt;&lt;/a&gt;Kauffman, Gal, and Ben Seri. 2021. “ModiPwn.” Armis. &lt;a href=&quot;https://www.armis.com/research/modipwn/&quot;&gt;https://www.armis.com/research/modipwn/&lt;/a&gt;.&lt;/div&gt;
&lt;/div&gt;
</content>
 </entry>
 
 <entry>
   <title>单词本：conversant</title>
   <link href="http://kimi.im/2023-04-30-conversant"/>
   <updated>2023-04-30T00:00:00+00:00</updated>
   <id>http://kimi.im/conversant</id>
   <content type="html">&lt;p&gt;
在看PMI Agile (&lt;a href=&quot;#citeproc_bib_item_2&quot;&gt;PMI 2017&lt;/a&gt;)的时候，读到：In order to support
project-specific needs, the PMO needs to be &lt;b&gt;conversant&lt;/b&gt; in several
competencies beyond project management itself, because different
projects require distinct capabilities. 为了支持项目的需求，除了项目管理之外，PMO 还需要熟悉着不同的技能。因为不同的项目需要不同的能力。
&lt;/p&gt;

&lt;p&gt;
这里 conversant 是熟悉、亲近、精通的意思。这个词来自拉丁语，本意应该是围绕着某个事情转的意思。com/con 是 together ，一起的意思。 versant 则源自 vertere，就是旋转的意思。围着某个事情转的人，那一定是对某样东西特别熟悉，特别亲近，特别精通了。
&lt;/p&gt;

&lt;p&gt;
美国工业互联网联盟的一篇关于边缘计算的白皮书(&lt;a href=&quot;#citeproc_bib_item_1&quot;&gt;IIC 2019&lt;/a&gt;)中，也用到了 conversant 这个词：An engineer &lt;b&gt;conversant&lt;/b&gt; with oil and gas, for
example, may know nothing about energy generated from diesel and solar
to supply the edge nodes at the oil wells. 这里是说，一个熟悉石油天然气的工程师，可能根本不知道油田里边缘计算节点的能源是来自柴油机和太阳能。
&lt;/p&gt;

&lt;p&gt;
&lt;b&gt;References&lt;/b&gt;
&lt;/p&gt;
&lt;style&gt;.csl-entry{text-indent: -1.5em; margin-left: 1.5em;}&lt;/style&gt;&lt;div class=&quot;csl-bib-body&quot;&gt;
  &lt;div class=&quot;csl-entry&quot;&gt;&lt;a id=&quot;citeproc_bib_item_1&quot;&gt;&lt;/a&gt;IIC. 2019. “The Edge Computing Advantage: An Industrial Internet Consortium White Paper.” Industrial IoT Consortium.&lt;/div&gt;
  &lt;div class=&quot;csl-entry&quot;&gt;&lt;a id=&quot;citeproc_bib_item_2&quot;&gt;&lt;/a&gt;PMI. 2017. &lt;i&gt;Agile Practice Guide&lt;/i&gt;.&lt;/div&gt;
&lt;/div&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines ES.61 用 delete[] 删除数组，用 delete 删除非数组</title>
   <link href="http://kimi.im/2023-04-28-cppcoreguidelines-es61"/>
   <updated>2023-04-28T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-es61</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;Delete arrays using &lt;code&gt;delete[]&lt;/code&gt; and non-arrays using &lt;code&gt;delete&lt;/code&gt;&amp;rdquo;
&lt;/p&gt;

&lt;p&gt;
理由
&lt;/p&gt;

&lt;p&gt;
这条是开发语言要求的。搞错了的话会导致资源释放错误，内存错乱。
&lt;/p&gt;


&lt;p&gt;
坏例子
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;n&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;auto&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;p&lt;/span&gt; = &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;X&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;[&lt;/span&gt;n&lt;span style=&quot;color: #7388d6;&quot;&gt;]&lt;/span&gt;;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;n default constructed Xs&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;...&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;delete&lt;/span&gt; p;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;error: just delete the object p, rather than delete&lt;/span&gt;
                &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;the array p[]&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;

&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
注意
&lt;/p&gt;

&lt;p&gt;
这个例子还违背了“no naked new”规则。
&lt;/p&gt;


&lt;p&gt;
强化
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;如果 &lt;code&gt;new&lt;/code&gt; 和 &lt;code&gt;delete&lt;/code&gt; 在同一个作用域范围，可以标记错误。&lt;/li&gt;
&lt;li&gt;如果 &lt;code&gt;new&lt;/code&gt; 和 &lt;code&gt;delete&lt;/code&gt; 在构造/析构函数对中，可以标记错误。&lt;/li&gt;
&lt;/ul&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines ES.60 避免在资源管理函数外调用 new 和 delete</title>
   <link href="http://kimi.im/2023-04-28-cppcoreguidelines-es60"/>
   <updated>2023-04-28T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-es60</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;Avoid &lt;code&gt;new&lt;/code&gt; and &lt;code&gt;delete&lt;/code&gt; outside resource management functions&amp;rdquo;
&lt;/p&gt;

&lt;p&gt;
理由
&lt;/p&gt;

&lt;p&gt;
在应用代码中直接调用资源管理函数繁琐且容易出错。
&lt;/p&gt;

&lt;p&gt;
注意
&lt;/p&gt;

&lt;p&gt;
此规则也叫“No naked new”（没有裸露的 new）。
&lt;/p&gt;

&lt;p&gt;
坏例子
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;n&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;auto&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;p&lt;/span&gt; = &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;X&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;[&lt;/span&gt;n&lt;span style=&quot;color: #7388d6;&quot;&gt;]&lt;/span&gt;;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;n default constructed Xs&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;...&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;delete&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;[]&lt;/span&gt; p;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;
在省略出的代码可能导致后面的 &lt;code&gt;delete&lt;/code&gt; 再也执行不到。
&lt;/p&gt;


&lt;p&gt;
强化
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;标记裸露的 &lt;code&gt;new&lt;/code&gt; 和 &lt;code&gt;delete&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
</content>
 </entry>
 
 <entry>
   <title>OPC UA 服务器的动态扩展方法</title>
   <link href="http://kimi.im/2023-04-27-dynamically-scaling-opc-ua-server-capacity"/>
   <updated>2023-04-27T00:00:00+00:00</updated>
   <id>http://kimi.im/dynamically-scaling-opc-ua-server-capacity</id>
   <content type="html">&lt;p&gt;
最近看到一个 PCT 国际标准，主要理念是根据OPC UA客户端的用户身份和证书信息确定能在服务器中访问的数据，通过负载均衡和服务编排动态创建 OPC
UA 服务和地址空间数据，提供数据给客户端，从而可以提升OPC UA服务器扩展性。
&lt;/p&gt;

&lt;p&gt;
这个专利的整体方案如下：
&lt;/p&gt;


&lt;div id=&quot;orgfe15eee&quot; class=&quot;figure&quot;&gt;
&lt;p&gt;&lt;div align=&quot;center&quot;&gt;&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;
&lt;!-- Created with Inkscape (http://www.inkscape.org/) --&gt;

&lt;svg
   version=&quot;1.1&quot;
   id=&quot;svg2&quot;
   xml:space=&quot;preserve&quot;
   width=&quot;582.71997&quot;
   height=&quot;508.16&quot;
   viewBox=&quot;0 0 582.71997 508.16&quot;
   sodipodi:docname=&quot;OPC-UA-Load-Balance-Dynamic.pdf&quot;
   xmlns:inkscape=&quot;http://www.inkscape.org/namespaces/inkscape&quot;
   xmlns:sodipodi=&quot;http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd&quot;
   xmlns=&quot;http://www.w3.org/2000/svg&quot;
   xmlns:svg=&quot;http://www.w3.org/2000/svg&quot;&gt;&lt;defs
     id=&quot;defs6&quot;&gt;&lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath16&quot;&gt;&lt;path
         d=&quot;M 0,0 H 1820.8331 V 1586.5566 H 0 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path14&quot; /&gt;&lt;/clipPath&gt;&lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath28&quot;&gt;&lt;path
         d=&quot;M 0,0 H 1820.8331 V 1583.5911 H 0 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path26&quot; /&gt;&lt;/clipPath&gt;&lt;/defs&gt;&lt;sodipodi:namedview
     id=&quot;namedview4&quot;
     pagecolor=&quot;#ffffff&quot;
     bordercolor=&quot;#666666&quot;
     borderopacity=&quot;1.0&quot;
     inkscape:pageshadow=&quot;2&quot;
     inkscape:pageopacity=&quot;0.0&quot;
     inkscape:pagecheckerboard=&quot;0&quot; /&gt;&lt;g
     id=&quot;g8&quot;
     inkscape:groupmode=&quot;layer&quot;
     inkscape:label=&quot;OPC-UA-Load-Balance-Dynamic&quot;
     transform=&quot;matrix(0.31999998,0,0,0.31999998,0,1.2704e-5)&quot;&gt;&lt;g
       id=&quot;g10&quot;&gt;&lt;g
         id=&quot;g12&quot;
         clip-path=&quot;url(#clipPath16)&quot;&gt;&lt;g
           id=&quot;g18&quot;
           transform=&quot;scale(2.9655263)&quot;&gt;&lt;path
             d=&quot;M 0,0 H 614 V 535 H 0 Z&quot;
             style=&quot;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
             id=&quot;path20&quot; /&gt;&lt;/g&gt;&lt;/g&gt;&lt;/g&gt;&lt;g
       id=&quot;g22&quot;&gt;&lt;g
         id=&quot;g24&quot;
         clip-path=&quot;url(#clipPath28)&quot;&gt;&lt;g
           id=&quot;g30&quot;
           transform=&quot;matrix(2.9655263,0,0,2.9655263,1.4827632,1.4827632)&quot;&gt;&lt;path
             d=&quot;m 246,466 h 120 v 60 H 246 Z&quot;
             style=&quot;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
             id=&quot;path32&quot; /&gt;&lt;path
             d=&quot;m 246,466 h 120 v 60 H 246 Z&quot;
             style=&quot;fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
             id=&quot;path34&quot; /&gt;&lt;/g&gt;&lt;g
           id=&quot;g36&quot;
           transform=&quot;scale(2.9655561)&quot;&gt;&lt;text
             transform=&quot;translate(252.29688,493)&quot;
             style=&quot;font-variant:normal;font-weight:normal;font-size:12px;font-family:Arial;-inkscape-font-specification:ArialMT;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
             id=&quot;text40&quot;&gt;&lt;tspan
               x=&quot;0 8.0039062 14.677734 20.677734 26.677734 33.351562 37.347656 44.021484 50.695312 57.369141 64.042969 67.376953 75.380859 81.380859 87.380859 90.714844 97.388672&quot;
               y=&quot;0&quot;
               sodipodi:role=&quot;line&quot;
               id=&quot;tspan38&quot;&gt;Background System&lt;/tspan&gt;&lt;/text&gt;&lt;text
             transform=&quot;translate(281.98438,508)&quot;
             style=&quot;font-variant:normal;font-weight:normal;font-size:12px;font-family:&apos;Microsoft YaHei&apos;;-inkscape-font-specification:MicrosoftYaHei;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
             id=&quot;text44&quot;&gt;&lt;tspan
               x=&quot;0 12 24 36&quot;
               y=&quot;0&quot;
               sodipodi:role=&quot;line&quot;
               id=&quot;tspan42&quot;&gt;后台系统&lt;/tspan&gt;&lt;/text&gt;&lt;/g&gt;&lt;g
           id=&quot;g46&quot;
           transform=&quot;matrix(2.9655263,0,0,2.9655263,1.4827632,1.4827632)&quot;&gt;&lt;path
             d=&quot;m 241,366 47.16,94.31&quot;
             style=&quot;fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
             id=&quot;path48&quot; /&gt;&lt;path
             d=&quot;m 290.5,465 -6.26001,-4.69 H 288.16 l 2.34,-3.13001 z&quot;
             style=&quot;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
             id=&quot;path50&quot; /&gt;&lt;path
             d=&quot;m 290.5,465 -6.26001,-4.69 H 288.16 l 2.34,-3.13001 z&quot;
             style=&quot;fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
             id=&quot;path52&quot; /&gt;&lt;path
             d=&quot;m 166,306 h 120 v 60 H 166 Z&quot;
             style=&quot;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
             id=&quot;path54&quot; /&gt;&lt;path
             d=&quot;m 166,306 h 120 v 60 H 166 Z&quot;
             style=&quot;fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
             id=&quot;path56&quot; /&gt;&lt;/g&gt;&lt;g
           id=&quot;g58&quot;
           transform=&quot;scale(2.9655561)&quot;&gt;&lt;text
             transform=&quot;translate(183.65625,340)&quot;
             style=&quot;font-variant:normal;font-weight:normal;font-size:12px;font-family:Arial;-inkscape-font-specification:ArialMT;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
             id=&quot;text62&quot;&gt;&lt;tspan
               x=&quot;0 9.3339844 17.337891 26.003906 29.337891 38.003906 45.345703&quot;
               y=&quot;0&quot;
               sodipodi:role=&quot;line&quot;
               id=&quot;tspan60&quot;&gt;OPC UA &lt;/tspan&gt;&lt;/text&gt;&lt;text
             transform=&quot;translate(232.33594,340)&quot;
             style=&quot;font-variant:normal;font-weight:normal;font-size:12px;font-family:&apos;Microsoft YaHei&apos;;-inkscape-font-specification:MicrosoftYaHei;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
             id=&quot;text66&quot;&gt;&lt;tspan
               x=&quot;0 12 24&quot;
               y=&quot;0&quot;
               sodipodi:role=&quot;line&quot;
               id=&quot;tspan64&quot;&gt;服务器&lt;/tspan&gt;&lt;/text&gt;&lt;/g&gt;&lt;g
           id=&quot;g68&quot;
           transform=&quot;matrix(2.9655263,0,0,2.9655263,1.4827632,1.4827632)&quot;&gt;&lt;path
             d=&quot;m 111,366 144.7,96.47&quot;
             style=&quot;fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
             id=&quot;path70&quot; /&gt;&lt;path
             d=&quot;m 260.07001,465.38 -7.76001,-0.97 3.39,-1.94 0.49,-3.88 z&quot;
             style=&quot;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
             id=&quot;path72&quot; /&gt;&lt;path
             d=&quot;m 260.07001,465.38 -7.76001,-0.97 3.39,-1.94 0.49,-3.88 z&quot;
             style=&quot;fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
             id=&quot;path74&quot; /&gt;&lt;path
             d=&quot;m 6,306 h 120 v 60 H 6 Z&quot;
             style=&quot;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
             id=&quot;path76&quot; /&gt;&lt;path
             d=&quot;m 6,306 h 120 v 60 H 6 Z&quot;
             style=&quot;fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
             id=&quot;path78&quot; /&gt;&lt;/g&gt;&lt;g
           id=&quot;g80&quot;
           transform=&quot;scale(2.9655561)&quot;&gt;&lt;text
             transform=&quot;translate(23.65625,340)&quot;
             style=&quot;font-variant:normal;font-weight:normal;font-size:12px;font-family:Arial;-inkscape-font-specification:ArialMT;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
             id=&quot;text84&quot;&gt;&lt;tspan
               x=&quot;0 9.3339844 17.337891 26.003906 29.337891 38.003906 45.345703&quot;
               y=&quot;0&quot;
               sodipodi:role=&quot;line&quot;
               id=&quot;tspan82&quot;&gt;OPC UA &lt;/tspan&gt;&lt;/text&gt;&lt;text
             transform=&quot;translate(72.335938,340)&quot;
             style=&quot;font-variant:normal;font-weight:normal;font-size:12px;font-family:&apos;Microsoft YaHei&apos;;-inkscape-font-specification:MicrosoftYaHei;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
             id=&quot;text88&quot;&gt;&lt;tspan
               x=&quot;0 12 24&quot;
               y=&quot;0&quot;
               sodipodi:role=&quot;line&quot;
               id=&quot;tspan86&quot;&gt;服务器&lt;/tspan&gt;&lt;/text&gt;&lt;/g&gt;&lt;g
           id=&quot;g90&quot;
           transform=&quot;matrix(2.9655263,0,0,2.9655263,1.4827632,1.4827632)&quot;&gt;&lt;path
             d=&quot;m 371,366 -47.14999,94.31&quot;
             style=&quot;fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
             id=&quot;path92&quot; /&gt;&lt;path
             d=&quot;m 321.5,465 v -7.82001 l 2.35001,3.13001 h 3.91 z&quot;
             style=&quot;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
             id=&quot;path94&quot; /&gt;&lt;path
             d=&quot;m 321.5,465 v -7.82001 l 2.35001,3.13001 h 3.91 z&quot;
             style=&quot;fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
             id=&quot;path96&quot; /&gt;&lt;path
             d=&quot;m 326,306 h 120 v 60 H 326 Z&quot;
             style=&quot;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
             id=&quot;path98&quot; /&gt;&lt;path
             d=&quot;m 326,306 h 120 v 60 H 326 Z&quot;
             style=&quot;fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
             id=&quot;path100&quot; /&gt;&lt;/g&gt;&lt;g
           id=&quot;g102&quot;
           transform=&quot;scale(2.9655561)&quot;&gt;&lt;text
             transform=&quot;translate(343.65625,340)&quot;
             style=&quot;font-variant:normal;font-weight:normal;font-size:12px;font-family:Arial;-inkscape-font-specification:ArialMT;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
             id=&quot;text106&quot;&gt;&lt;tspan
               x=&quot;0 9.3339844 17.337891 26.003906 29.337891 38.003906 45.345703&quot;
               y=&quot;0&quot;
               sodipodi:role=&quot;line&quot;
               id=&quot;tspan104&quot;&gt;OPC UA &lt;/tspan&gt;&lt;/text&gt;&lt;text
             transform=&quot;translate(392.33594,340)&quot;
             style=&quot;font-variant:normal;font-weight:normal;font-size:12px;font-family:&apos;Microsoft YaHei&apos;;-inkscape-font-specification:MicrosoftYaHei;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
             id=&quot;text110&quot;&gt;&lt;tspan
               x=&quot;0 12 24&quot;
               y=&quot;0&quot;
               sodipodi:role=&quot;line&quot;
               id=&quot;tspan108&quot;&gt;服务器&lt;/tspan&gt;&lt;/text&gt;&lt;/g&gt;&lt;g
           id=&quot;g112&quot;
           transform=&quot;matrix(2.9655263,0,0,2.9655263,1.4827632,1.4827632)&quot;&gt;&lt;path
             d=&quot;M 501.01001,366 356.29999,462.47&quot;
             style=&quot;fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
             id=&quot;path114&quot; /&gt;&lt;path
             d=&quot;m 351.92999,465.38 3.89002,-6.79 0.47998,3.88 3.40002,1.94 z&quot;
             style=&quot;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
             id=&quot;path116&quot; /&gt;&lt;path
             d=&quot;m 351.92999,465.38 3.89002,-6.79 0.47998,3.88 3.40002,1.94 z&quot;
             style=&quot;fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
             id=&quot;path118&quot; /&gt;&lt;path
             d=&quot;m 486,306 h 120 v 60 H 486 Z&quot;
             style=&quot;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
             id=&quot;path120&quot; /&gt;&lt;path
             d=&quot;m 486,306 h 120 v 60 H 486 Z&quot;
             style=&quot;fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
             id=&quot;path122&quot; /&gt;&lt;/g&gt;&lt;g
           id=&quot;g124&quot;
           transform=&quot;scale(2.9655561)&quot;&gt;&lt;text
             transform=&quot;translate(503.65625,340)&quot;
             style=&quot;font-variant:normal;font-weight:normal;font-size:12px;font-family:Arial;-inkscape-font-specification:ArialMT;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
             id=&quot;text128&quot;&gt;&lt;tspan
               x=&quot;0 9.3339844 17.337891 26.003906 29.337891 38.003906 45.345703&quot;
               y=&quot;0&quot;
               sodipodi:role=&quot;line&quot;
               id=&quot;tspan126&quot;&gt;OPC UA &lt;/tspan&gt;&lt;/text&gt;&lt;text
             transform=&quot;translate(552.33594,340)&quot;
             style=&quot;font-variant:normal;font-weight:normal;font-size:12px;font-family:&apos;Microsoft YaHei&apos;;-inkscape-font-specification:MicrosoftYaHei;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
             id=&quot;text132&quot;&gt;&lt;tspan
               x=&quot;0 12 24&quot;
               y=&quot;0&quot;
               sodipodi:role=&quot;line&quot;
               id=&quot;tspan130&quot;&gt;服务器&lt;/tspan&gt;&lt;/text&gt;&lt;/g&gt;&lt;g
           id=&quot;g134&quot;
           transform=&quot;matrix(2.9655263,0,0,2.9655263,1.4827632,1.4827632)&quot;&gt;&lt;path
             d=&quot;M 261,206 116.3,302.47&quot;
             style=&quot;fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
             id=&quot;path136&quot; /&gt;&lt;path
             d=&quot;m 111.93,305.38 3.88,-6.79 0.49,3.88 3.4,1.94 z&quot;
             style=&quot;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
             id=&quot;path138&quot; /&gt;&lt;path
             d=&quot;m 111.93,305.38 3.88,-6.79 0.49,3.88 3.4,1.94 z&quot;
             style=&quot;fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
             id=&quot;path140&quot; /&gt;&lt;path
             d=&quot;m 291,206 -47.14999,94.31&quot;
             style=&quot;fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
             id=&quot;path142&quot; /&gt;&lt;path
             d=&quot;m 241.5,305 v -7.82001 l 2.35001,3.13001 h 3.90998 z&quot;
             style=&quot;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
             id=&quot;path144&quot; /&gt;&lt;path
             d=&quot;m 241.5,305 v -7.82001 l 2.35001,3.13001 h 3.90998 z&quot;
             style=&quot;fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
             id=&quot;path146&quot; /&gt;&lt;path
             d=&quot;m 321,206 47.16,94.31&quot;
             style=&quot;fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
             id=&quot;path148&quot; /&gt;&lt;path
             d=&quot;m 370.5,305 -6.26001,-4.69 H 368.16 l 2.34,-3.13001 z&quot;
             style=&quot;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
             id=&quot;path150&quot; /&gt;&lt;path
             d=&quot;m 370.5,305 -6.26001,-4.69 H 368.16 l 2.34,-3.13001 z&quot;
             style=&quot;fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
             id=&quot;path152&quot; /&gt;&lt;path
             d=&quot;m 351,206 144.70999,96.47&quot;
             style=&quot;fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
             id=&quot;path154&quot; /&gt;&lt;path
             d=&quot;m 500.07001,305.38 -7.76001,-0.97 3.39999,-1.94 0.48001,-3.88 z&quot;
             style=&quot;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
             id=&quot;path156&quot; /&gt;&lt;path
             d=&quot;m 500.07001,305.38 -7.76001,-0.97 3.39999,-1.94 0.48001,-3.88 z&quot;
             style=&quot;fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
             id=&quot;path158&quot; /&gt;&lt;path
             d=&quot;m 246,146 h 120 v 60 H 246 Z&quot;
             style=&quot;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
             id=&quot;path160&quot; /&gt;&lt;path
             d=&quot;m 246,146 h 120 v 60 H 246 Z&quot;
             style=&quot;fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
             id=&quot;path162&quot; /&gt;&lt;/g&gt;&lt;g
           id=&quot;g164&quot;
           transform=&quot;scale(2.9655561)&quot;&gt;&lt;text
             transform=&quot;translate(276,180)&quot;
             style=&quot;font-variant:normal;font-weight:normal;font-size:12px;font-family:&apos;Microsoft YaHei&apos;;-inkscape-font-specification:MicrosoftYaHei;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
             id=&quot;text168&quot;&gt;&lt;tspan
               x=&quot;0 12 24 36 48&quot;
               y=&quot;0&quot;
               sodipodi:role=&quot;line&quot;
               id=&quot;tspan166&quot;&gt;负载均衡器&lt;/tspan&gt;&lt;/text&gt;&lt;/g&gt;&lt;g
           id=&quot;g170&quot;
           transform=&quot;matrix(2.9655263,0,0,2.9655263,1.4827632,1.4827632)&quot;&gt;&lt;path
             d=&quot;m 117.43,66 131.64001,76.78999&quot;
             style=&quot;fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
             id=&quot;path172&quot; /&gt;&lt;path
             d=&quot;m 253.61,145.44 -7.81,-0.51001 3.27001,-2.14 L 249.33,138.89 Z&quot;
             style=&quot;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
             id=&quot;path174&quot; /&gt;&lt;path
             d=&quot;m 253.61,145.44 -7.81,-0.51001 3.27001,-2.14 L 249.33,138.89 Z&quot;
             style=&quot;fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
             id=&quot;path176&quot; /&gt;&lt;path
             d=&quot;M 6,6 H 126 V 66 H 6 Z&quot;
             style=&quot;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
             id=&quot;path178&quot; /&gt;&lt;path
             d=&quot;M 6,6 H 126 V 66 H 6 Z&quot;
             style=&quot;fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
             id=&quot;path180&quot; /&gt;&lt;/g&gt;&lt;g
           id=&quot;g182&quot;
           transform=&quot;scale(2.9655561)&quot;&gt;&lt;text
             transform=&quot;translate(23.65625,40)&quot;
             style=&quot;font-variant:normal;font-weight:normal;font-size:12px;font-family:Arial;-inkscape-font-specification:ArialMT;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
             id=&quot;text186&quot;&gt;&lt;tspan
               x=&quot;0 9.3339844 17.337891 26.003906 29.337891 38.003906 45.345703&quot;
               y=&quot;0&quot;
               sodipodi:role=&quot;line&quot;
               id=&quot;tspan184&quot;&gt;OPC UA &lt;/tspan&gt;&lt;/text&gt;&lt;text
             transform=&quot;translate(72.335938,40)&quot;
             style=&quot;font-variant:normal;font-weight:normal;font-size:12px;font-family:&apos;Microsoft YaHei&apos;;-inkscape-font-specification:MicrosoftYaHei;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
             id=&quot;text190&quot;&gt;&lt;tspan
               x=&quot;0 12 24&quot;
               y=&quot;0&quot;
               sodipodi:role=&quot;line&quot;
               id=&quot;tspan188&quot;&gt;客户端&lt;/tspan&gt;&lt;/text&gt;&lt;/g&gt;&lt;g
           id=&quot;g192&quot;
           transform=&quot;matrix(2.9655263,0,0,2.9655263,1.4827632,1.4827632)&quot;&gt;&lt;path
             d=&quot;m 243.14999,66 42.55002,74.47&quot;
             style=&quot;fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
             id=&quot;path194&quot; /&gt;&lt;path
             d=&quot;m 288.31,145.03 -6.51999,-4.34 3.91,-0.22 2.16999,-3.25 z&quot;
             style=&quot;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
             id=&quot;path196&quot; /&gt;&lt;path
             d=&quot;m 288.31,145.03 -6.51999,-4.34 3.91,-0.22 2.16999,-3.25 z&quot;
             style=&quot;fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
             id=&quot;path198&quot; /&gt;&lt;path
             d=&quot;M 166,6 H 286 V 66 H 166 Z&quot;
             style=&quot;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
             id=&quot;path200&quot; /&gt;&lt;path
             d=&quot;M 166,6 H 286 V 66 H 166 Z&quot;
             style=&quot;fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
             id=&quot;path202&quot; /&gt;&lt;/g&gt;&lt;g
           id=&quot;g204&quot;
           transform=&quot;scale(2.9655561)&quot;&gt;&lt;text
             transform=&quot;translate(183.65625,40)&quot;
             style=&quot;font-variant:normal;font-weight:normal;font-size:12px;font-family:Arial;-inkscape-font-specification:ArialMT;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
             id=&quot;text208&quot;&gt;&lt;tspan
               x=&quot;0 9.3339844 17.337891 26.003906 29.337891 38.003906 45.345703&quot;
               y=&quot;0&quot;
               sodipodi:role=&quot;line&quot;
               id=&quot;tspan206&quot;&gt;OPC UA &lt;/tspan&gt;&lt;/text&gt;&lt;text
             transform=&quot;translate(232.33594,40)&quot;
             style=&quot;font-variant:normal;font-weight:normal;font-size:12px;font-family:&apos;Microsoft YaHei&apos;;-inkscape-font-specification:MicrosoftYaHei;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
             id=&quot;text212&quot;&gt;&lt;tspan
               x=&quot;0 12 24&quot;
               y=&quot;0&quot;
               sodipodi:role=&quot;line&quot;
               id=&quot;tspan210&quot;&gt;客户端&lt;/tspan&gt;&lt;/text&gt;&lt;/g&gt;&lt;g
           id=&quot;g214&quot;
           transform=&quot;matrix(2.9655263,0,0,2.9655263,1.4827632,1.4827632)&quot;&gt;&lt;path
             d=&quot;M 368.85999,66 326.31,140.47&quot;
             style=&quot;fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
             id=&quot;path216&quot; /&gt;&lt;path
             d=&quot;m 323.70001,145.03 0.42999,-7.81 2.18,3.25 3.89999,0.22 z&quot;
             style=&quot;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
             id=&quot;path218&quot; /&gt;&lt;path
             d=&quot;m 323.70001,145.03 0.42999,-7.81 2.18,3.25 3.89999,0.22 z&quot;
             style=&quot;fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
             id=&quot;path220&quot; /&gt;&lt;path
             d=&quot;M 326,6 H 446 V 66 H 326 Z&quot;
             style=&quot;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
             id=&quot;path222&quot; /&gt;&lt;path
             d=&quot;M 326,6 H 446 V 66 H 326 Z&quot;
             style=&quot;fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
             id=&quot;path224&quot; /&gt;&lt;/g&gt;&lt;g
           id=&quot;g226&quot;
           transform=&quot;scale(2.9655561)&quot;&gt;&lt;text
             transform=&quot;translate(343.65625,40)&quot;
             style=&quot;font-variant:normal;font-weight:normal;font-size:12px;font-family:Arial;-inkscape-font-specification:ArialMT;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
             id=&quot;text230&quot;&gt;&lt;tspan
               x=&quot;0 9.3339844 17.337891 26.003906 29.337891 38.003906 45.345703&quot;
               y=&quot;0&quot;
               sodipodi:role=&quot;line&quot;
               id=&quot;tspan228&quot;&gt;OPC UA &lt;/tspan&gt;&lt;/text&gt;&lt;text
             transform=&quot;translate(392.33594,40)&quot;
             style=&quot;font-variant:normal;font-weight:normal;font-size:12px;font-family:&apos;Microsoft YaHei&apos;;-inkscape-font-specification:MicrosoftYaHei;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
             id=&quot;text234&quot;&gt;&lt;tspan
               x=&quot;0 12 24&quot;
               y=&quot;0&quot;
               sodipodi:role=&quot;line&quot;
               id=&quot;tspan232&quot;&gt;客户端&lt;/tspan&gt;&lt;/text&gt;&lt;/g&gt;&lt;g
           id=&quot;g236&quot;
           transform=&quot;matrix(2.9655263,0,0,2.9655263,1.4827632,1.4827632)&quot;&gt;&lt;path
             d=&quot;m 494.57999,66 -131.65,76.78999&quot;
             style=&quot;fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
             id=&quot;path238&quot; /&gt;&lt;path
             d=&quot;m 358.39999,145.44 4.28,-6.55 0.25,3.89999 3.28,2.14 z&quot;
             style=&quot;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
             id=&quot;path240&quot; /&gt;&lt;path
             d=&quot;m 358.39999,145.44 4.28,-6.55 0.25,3.89999 3.28,2.14 z&quot;
             style=&quot;fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
             id=&quot;path242&quot; /&gt;&lt;path
             d=&quot;M 486,6 H 606 V 66 H 486 Z&quot;
             style=&quot;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
             id=&quot;path244&quot; /&gt;&lt;path
             d=&quot;M 486,6 H 606 V 66 H 486 Z&quot;
             style=&quot;fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
             id=&quot;path246&quot; /&gt;&lt;/g&gt;&lt;g
           id=&quot;g248&quot;
           transform=&quot;scale(2.9655561)&quot;&gt;&lt;text
             transform=&quot;translate(503.65625,40)&quot;
             style=&quot;font-variant:normal;font-weight:normal;font-size:12px;font-family:Arial;-inkscape-font-specification:ArialMT;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
             id=&quot;text252&quot;&gt;&lt;tspan
               x=&quot;0 9.3339844 17.337891 26.003906 29.337891 38.003906 45.345703&quot;
               y=&quot;0&quot;
               sodipodi:role=&quot;line&quot;
               id=&quot;tspan250&quot;&gt;OPC UA &lt;/tspan&gt;&lt;/text&gt;&lt;text
             transform=&quot;translate(552.33594,40)&quot;
             style=&quot;font-variant:normal;font-weight:normal;font-size:12px;font-family:&apos;Microsoft YaHei&apos;;-inkscape-font-specification:MicrosoftYaHei;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
             id=&quot;text256&quot;&gt;&lt;tspan
               x=&quot;0 12 24&quot;
               y=&quot;0&quot;
               sodipodi:role=&quot;line&quot;
               id=&quot;tspan254&quot;&gt;客户端&lt;/tspan&gt;&lt;/text&gt;&lt;/g&gt;&lt;/g&gt;&lt;/g&gt;&lt;/g&gt;&lt;/svg&gt;
&lt;/div&gt;
&lt;/p&gt;
&lt;/div&gt;

&lt;p&gt;
在这个方案中，后台系统是数据源，它可以是中心化的数据分析服务器，给各个工厂提供数据，而每个工厂是一个客户端，只能访问有权限读取的数据。它也可以是其他数据服务器，每个客户端会访问数据服务器的一部分数据。
&lt;/p&gt;

&lt;p&gt;
具体实现来说，客户端通过网络中的多个OPC UA服务器实例访问后台系统数据。服务器动态生成地址空间，负载均衡器分发工作负载给各个服务器。专利中指出
OPC UA 服务器都具有相似的功能和性能。因此，也可以通过容器的方式管理
OPC UA 服务器。这时候，可以用多种容器编排的方式进行动态扩展。
&lt;/p&gt;

&lt;p&gt;
负载均衡器管理服务器的生命周期。如果每个服务器的负载都超出了额定能力，则创建一个新的服务器接受会话请求。如果某个服务器超出一定时间没有活跃会话，则被负载均衡器移除，以释放资源。
&lt;/p&gt;

&lt;p&gt;
对于均衡器来说，最佳的负载均衡机制就是把新的OPC UA客户端通讯会话转发到已建立的工作会话最少的服务端。其他的负载均衡机制还有以轮询（round
robin）的方式分发客户端会话请求。
&lt;/p&gt;

&lt;p&gt;
为了简化负载均衡器的工作，提升其工作效率，OPC UA 服务器的性能可以通过添加新的实例的方式进行横向扩展。也就是说，每一个服务器都可以提供相同的地址空间信息。而所有这些地址空间信息都是通过一个共同的后端系统提供。然而，服务器不一定暴露完整的地址空间，可以根据客户端的需要提供地址空间的切片。而且这个切片也可以动态变化，以满足不同客户端的需求。服务端提供切片的依据可以是客户端用户凭证，或客户端应用证书。
&lt;/p&gt;


&lt;div id=&quot;org0d65b07&quot; class=&quot;figure&quot;&gt;
&lt;p&gt;&lt;div align=&quot;center&quot;&gt;&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;
&lt;!-- Created with Inkscape (http://www.inkscape.org/) --&gt;

&lt;svg
   version=&quot;1.1&quot;
   id=&quot;svg2&quot;
   xml:space=&quot;preserve&quot;
   width=&quot;302.72&quot;
   height=&quot;653.44&quot;
   viewBox=&quot;0 0 302.72 653.44&quot;
   sodipodi:docname=&quot;OPC-UA-Load-Balance-Dynamic-Flowchart.pdf&quot;
   xmlns:inkscape=&quot;http://www.inkscape.org/namespaces/inkscape&quot;
   xmlns:sodipodi=&quot;http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd&quot;
   xmlns=&quot;http://www.w3.org/2000/svg&quot;
   xmlns:svg=&quot;http://www.w3.org/2000/svg&quot;&gt;&lt;defs
     id=&quot;defs6&quot;&gt;&lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath16&quot;&gt;&lt;path
         d=&quot;M 0,0 H 945.83331 V 2041.4725 H 0 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path14&quot; /&gt;&lt;/clipPath&gt;&lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath28&quot;&gt;&lt;path
         d=&quot;M 0,0 H 945.83331 V 2012.0989 H 0 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path26&quot; /&gt;&lt;/clipPath&gt;&lt;/defs&gt;&lt;sodipodi:namedview
     id=&quot;namedview4&quot;
     pagecolor=&quot;#ffffff&quot;
     bordercolor=&quot;#666666&quot;
     borderopacity=&quot;1.0&quot;
     inkscape:pageshadow=&quot;2&quot;
     inkscape:pageopacity=&quot;0.0&quot;
     inkscape:pagecheckerboard=&quot;0&quot; /&gt;&lt;g
     id=&quot;g8&quot;
     inkscape:groupmode=&quot;layer&quot;
     inkscape:label=&quot;OPC-UA-Load-Balance-Dynamic-Flowchart&quot;
     transform=&quot;matrix(0.31999998,0,0,0.31999998,0,1.9669333e-5)&quot;&gt;&lt;g
       id=&quot;g10&quot;&gt;&lt;g
         id=&quot;g12&quot;
         clip-path=&quot;url(#clipPath16)&quot;&gt;&lt;g
           id=&quot;g18&quot;
           transform=&quot;scale(2.9373705)&quot;&gt;&lt;path
             d=&quot;M 0,0 H 322 V 695 H 0 Z&quot;
             style=&quot;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
             id=&quot;path20&quot; /&gt;&lt;/g&gt;&lt;/g&gt;&lt;/g&gt;&lt;g
       id=&quot;g22&quot;&gt;&lt;g
         id=&quot;g24&quot;
         clip-path=&quot;url(#clipPath28)&quot;&gt;&lt;g
           id=&quot;g30&quot;
           transform=&quot;matrix(2.9373705,0,0,2.9373705,1.4686853,1.4686853)&quot;&gt;&lt;path
             d=&quot;m 106,66 v 53.63&quot;
             style=&quot;fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
             id=&quot;path32&quot; /&gt;&lt;path
             d=&quot;m 106,124.88 -3.5,-7 3.5,1.75 3.5,-1.75 z&quot;
             style=&quot;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
             id=&quot;path34&quot; /&gt;&lt;path
             d=&quot;m 106,124.88 -3.5,-7 3.5,1.75 3.5,-1.75 z&quot;
             style=&quot;fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
             id=&quot;path36&quot; /&gt;&lt;/g&gt;&lt;g
           id=&quot;g38&quot;
           transform=&quot;scale(2.9373705)&quot;&gt;&lt;path
             d=&quot;m 156.0005,36 c 0,0.982548 -0.0803,1.96273 -0.24078,2.940544 -0.16049,0.977814 -0.40048,1.948551 -0.71997,2.912216 -0.31947,0.963669 -0.71689,1.915623 -1.19225,2.855862 -0.47537,0.940243 -1.02639,1.864239 -1.65307,2.771988 -0.62667,0.907757 -1.32598,1.794899 -2.09793,2.661426 -0.77196,0.866528 -1.61284,1.708271 -2.52263,2.525231 -0.90978,0.816959 -1.8841,1.605198 -2.92298,2.364715 -1.03886,0.759518 -2.13726,1.48666 -3.29521,2.181427 -1.15793,0.694767 -2.36983,1.35381 -3.63569,1.977127 -1.26587,0.623318 -2.57961,1.207917 -3.94121,1.753788 -1.36159,0.54588 -2.7645,1.050404 -4.20871,1.513573 -1.44422,0.463169 -2.92279,0.882752 -4.43572,1.258755 -1.51291,0.376007 -3.05291,0.706619 -4.61997,0.991836 -1.56707,0.285225 -3.15365,0.523674 -4.75977,0.715355 -1.60611,0.191689 -3.22401,0.335686 -4.8537,0.432 -1.62969,0.09631 -3.26333,0.144455 -4.90091,0.144455 -1.63757,0 -3.27121,-0.04815 -4.9009,-0.144455 -1.629694,-0.09631 -3.247606,-0.240311 -4.853723,-0.432 -1.60611,-0.191681 -3.192696,-0.43013 -4.759766,-0.715355 -1.567062,-0.285217 -3.107056,-0.615829 -4.61998,-0.991836 C 85.352707,63.340649 83.874138,62.921066 82.429924,62.457897 80.98571,61.994728 79.582802,61.490204 78.221199,60.944328 76.859604,60.398457 75.545876,59.813858 74.280006,59.19054 73.014145,58.567219 71.802238,57.908176 70.644302,57.213409 69.486366,56.518642 68.387955,55.7915 67.349083,55.031982 66.310211,54.272465 65.335884,53.484226 64.426094,52.667267 63.516308,51.850307 62.675438,51.008564 61.903484,50.142036 61.131538,49.275509 60.432224,48.388367 59.80555,47.48061 59.178879,46.572861 58.627861,45.648861 58.152496,44.708618 57.677135,43.768383 57.279713,42.816429 56.960236,41.85276 56.640766,40.889095 56.400776,39.918358 56.240265,38.940544 56.079754,37.96273 55.9995,36.982548 55.9995,36 c 0,-0.982544 0.08025,-1.962727 0.240765,-2.940544 0.160511,-0.977818 0.400501,-1.948559 0.719974,-2.912228 0.319477,-0.963667 0.716896,-1.915619 1.192257,-2.855856 0.475365,-0.940241 1.026383,-1.864238 1.653054,-2.771993 0.626674,-0.907755 1.325988,-1.794896 2.097934,-2.661425 0.771954,-0.866529 1.612824,-1.708273 2.52261,-2.52523 0.90979,-0.816958 1.884125,-1.605196 2.922997,-2.364714 1.038871,-0.75952 2.137275,-1.486661 3.295211,-2.181426 1.157936,-0.694765 2.369843,-1.353808 3.635704,-1.97713 1.26587,-0.623321 2.579598,-1.207918 3.941193,-1.753793 1.361603,-0.545872 2.764511,-1.050394 4.208725,-1.513563 1.444214,-0.4631691 2.922783,-0.8827562 4.435707,-1.2587614 1.512924,-0.3760042 3.052918,-0.7066154 4.619988,-0.9918332 1.56707,-0.2852177 3.153656,-0.5236697 4.759765,-0.7153554 1.606117,-0.1916852 3.224022,-0.3356809 4.853716,-0.4319873 1.62969,-0.096307 3.26333,-0.1444602 4.9009,-0.1444602 1.63758,0 3.27121,0.048153 4.9009,0.1444602 1.62969,0.096306 3.2476,0.2403017 4.85371,0.4319869 1.60612,0.1916852 3.1927,0.4301371 4.75976,0.7153549 1.56707,0.2852177 3.10707,0.615829 4.61998,0.9918332 1.51293,0.3760052 2.99149,0.7955923 4.4357,1.2587614 1.44422,0.4631699 2.84712,0.9676919 4.20871,1.5135639 1.36161,0.545875 2.67534,1.130472 3.94123,1.753793 1.26586,0.623322 2.47776,1.282365 3.63569,1.97713 1.15795,0.694765 2.25636,1.421906 3.29523,2.181426 1.03886,0.759518 2.01318,1.547756 2.92296,2.364714 0.90979,0.816957 1.75065,1.658701 2.52261,2.52523 0.77196,0.866529 1.47127,1.75367 2.09793,2.661425 0.62668,0.907755 1.17771,1.831752 1.65308,2.771993 0.47536,0.940237 0.87277,1.892189 1.19224,2.855856 0.31948,0.963669 0.55948,1.93441 0.71999,2.912228 0.16052,0.977817 0.24078,1.958 0.24078,2.940544 z&quot;
             style=&quot;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
             id=&quot;path40&quot; /&gt;&lt;path
             d=&quot;m 156.0005,36 c 0,0.982548 -0.0803,1.96273 -0.24078,2.940544 -0.16049,0.977814 -0.40048,1.948551 -0.71997,2.912216 -0.31947,0.963669 -0.71689,1.915623 -1.19225,2.855862 -0.47537,0.940243 -1.02639,1.864239 -1.65307,2.771988 -0.62667,0.907757 -1.32598,1.794899 -2.09793,2.661426 -0.77196,0.866528 -1.61284,1.708271 -2.52263,2.525231 -0.90978,0.816959 -1.8841,1.605198 -2.92298,2.364715 -1.03886,0.759518 -2.13726,1.48666 -3.29521,2.181427 -1.15793,0.694767 -2.36983,1.35381 -3.63569,1.977127 -1.26587,0.623318 -2.57961,1.207917 -3.94121,1.753788 -1.36159,0.54588 -2.7645,1.050404 -4.20871,1.513573 -1.44422,0.463169 -2.92279,0.882752 -4.43572,1.258755 -1.51291,0.376007 -3.05291,0.706619 -4.61997,0.991836 -1.56707,0.285225 -3.15365,0.523674 -4.75977,0.715355 -1.60611,0.191689 -3.22401,0.335686 -4.8537,0.432 -1.62969,0.09631 -3.26333,0.144455 -4.90091,0.144455 -1.63757,0 -3.27121,-0.04815 -4.9009,-0.144455 -1.629694,-0.09631 -3.247606,-0.240311 -4.853723,-0.432 -1.60611,-0.191681 -3.192696,-0.43013 -4.759766,-0.715355 -1.567062,-0.285217 -3.107056,-0.615829 -4.61998,-0.991836 C 85.352707,63.340649 83.874138,62.921066 82.429924,62.457897 80.98571,61.994728 79.582802,61.490204 78.221199,60.944328 76.859604,60.398457 75.545876,59.813858 74.280006,59.19054 73.014145,58.567219 71.802238,57.908176 70.644302,57.213409 69.486366,56.518642 68.387955,55.7915 67.349083,55.031982 66.310211,54.272465 65.335884,53.484226 64.426094,52.667267 63.516308,51.850307 62.675438,51.008564 61.903484,50.142036 61.131538,49.275509 60.432224,48.388367 59.80555,47.48061 59.178879,46.572861 58.627861,45.648861 58.152496,44.708618 57.677135,43.768383 57.279713,42.816429 56.960236,41.85276 56.640766,40.889095 56.400776,39.918358 56.240265,38.940544 56.079754,37.96273 55.9995,36.982548 55.9995,36 c 0,-0.982544 0.08025,-1.962727 0.240765,-2.940544 0.160511,-0.977818 0.400501,-1.948559 0.719974,-2.912228 0.319477,-0.963667 0.716896,-1.915619 1.192257,-2.855856 0.475365,-0.940241 1.026383,-1.864238 1.653054,-2.771993 0.626674,-0.907755 1.325988,-1.794896 2.097934,-2.661425 0.771954,-0.866529 1.612824,-1.708273 2.52261,-2.52523 0.90979,-0.816958 1.884125,-1.605196 2.922997,-2.364714 1.038871,-0.75952 2.137275,-1.486661 3.295211,-2.181426 1.157936,-0.694765 2.369843,-1.353808 3.635704,-1.97713 1.26587,-0.623321 2.579598,-1.207918 3.941193,-1.753793 1.361603,-0.545872 2.764511,-1.050394 4.208725,-1.513563 1.444214,-0.4631691 2.922783,-0.8827562 4.435707,-1.2587614 1.512924,-0.3760042 3.052918,-0.7066154 4.619988,-0.9918332 1.56707,-0.2852177 3.153656,-0.5236697 4.759765,-0.7153554 1.606117,-0.1916852 3.224022,-0.3356809 4.853716,-0.4319873 1.62969,-0.096307 3.26333,-0.1444602 4.9009,-0.1444602 1.63758,0 3.27121,0.048153 4.9009,0.1444602 1.62969,0.096306 3.2476,0.2403017 4.85371,0.4319869 1.60612,0.1916852 3.1927,0.4301371 4.75976,0.7153549 1.56707,0.2852177 3.10707,0.615829 4.61998,0.9918332 1.51293,0.3760052 2.99149,0.7955923 4.4357,1.2587614 1.44422,0.4631699 2.84712,0.9676919 4.20871,1.5135639 1.36161,0.545875 2.67534,1.130472 3.94123,1.753793 1.26586,0.623322 2.47776,1.282365 3.63569,1.97713 1.15795,0.694765 2.25636,1.421906 3.29523,2.181426 1.03886,0.759518 2.01318,1.547756 2.92296,2.364714 0.90979,0.816957 1.75065,1.658701 2.52261,2.52523 0.77196,0.866529 1.47127,1.75367 2.09793,2.661425 0.62668,0.907755 1.17771,1.831752 1.65308,2.771993 0.47536,0.940237 0.87277,1.892189 1.19224,2.855856 0.31948,0.963669 0.55948,1.93441 0.71999,2.912228 0.16052,0.977817 0.24078,1.958 0.24078,2.940544 z&quot;
             style=&quot;fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
             id=&quot;path42&quot; /&gt;&lt;/g&gt;&lt;g
           id=&quot;g44&quot;
           transform=&quot;scale(2.9373999)&quot;&gt;&lt;text
             transform=&quot;translate(61,42)&quot;
             style=&quot;font-variant:normal;font-weight:normal;font-size:15px;font-family:&apos;Microsoft YaHei&apos;;-inkscape-font-specification:MicrosoftYaHei;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
             id=&quot;text48&quot;&gt;&lt;tspan
               x=&quot;0 15 30 45 60 75&quot;
               y=&quot;0&quot;
               sodipodi:role=&quot;line&quot;
               id=&quot;tspan46&quot;&gt;收到服务请求&lt;/tspan&gt;&lt;/text&gt;&lt;/g&gt;&lt;g
           id=&quot;g50&quot;
           transform=&quot;matrix(2.9373705,0,0,2.9373705,1.4686853,1.4686853)&quot;&gt;&lt;path
             d=&quot;m 106,296 v 63.64001&quot;
             style=&quot;fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
             id=&quot;path52&quot; /&gt;&lt;path
             d=&quot;m 106,364.89001 -3.5,-7 3.5,1.75 3.5,-1.75 z&quot;
             style=&quot;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
             id=&quot;path54&quot; /&gt;&lt;path
             d=&quot;m 106,364.89001 -3.5,-7 3.5,1.75 3.5,-1.75 z&quot;
             style=&quot;fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
             id=&quot;path56&quot; /&gt;&lt;/g&gt;&lt;g
           id=&quot;g58&quot;
           transform=&quot;scale(2.9373999)&quot;&gt;&lt;path
             d=&quot;m 99,323 h 15 v 18 H 99 Z&quot;
             style=&quot;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
             id=&quot;path60&quot; /&gt;&lt;text
             transform=&quot;translate(99,337)&quot;
             style=&quot;font-variant:normal;font-weight:normal;font-size:15px;font-family:&apos;Microsoft YaHei&apos;;-inkscape-font-specification:MicrosoftYaHei;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
             id=&quot;text64&quot;&gt;&lt;tspan
               x=&quot;0&quot;
               y=&quot;0&quot;
               id=&quot;tspan62&quot;&gt;否&lt;/tspan&gt;&lt;/text&gt;&lt;/g&gt;&lt;g
           id=&quot;g66&quot;
           transform=&quot;matrix(2.9373705,0,0,2.9373705,1.4686853,1.4686853)&quot;&gt;&lt;path
             d=&quot;m 131,271 h 175 v 370 l -93.63,0.01&quot;
             style=&quot;fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
             id=&quot;path68&quot; /&gt;&lt;path
             d=&quot;m 207.12,641.01001 7,-3.5 -1.75,3.5 1.75,3.5 z&quot;
             style=&quot;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
             id=&quot;path70&quot; /&gt;&lt;path
             d=&quot;m 207.12,641.01001 7,-3.5 -1.75,3.5 1.75,3.5 z&quot;
             style=&quot;fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
             id=&quot;path72&quot; /&gt;&lt;/g&gt;&lt;g
           id=&quot;g74&quot;
           transform=&quot;scale(2.9373999)&quot;&gt;&lt;path
             d=&quot;m 299,410 h 15 v 18 h -15 z&quot;
             style=&quot;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
             id=&quot;path76&quot; /&gt;&lt;text
             transform=&quot;translate(299,424)&quot;
             style=&quot;font-variant:normal;font-weight:normal;font-size:15px;font-family:&apos;Microsoft YaHei&apos;;-inkscape-font-specification:MicrosoftYaHei;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
             id=&quot;text80&quot;&gt;&lt;tspan
               x=&quot;0&quot;
               y=&quot;0&quot;
               id=&quot;tspan78&quot;&gt;是&lt;/tspan&gt;&lt;/text&gt;&lt;/g&gt;&lt;g
           id=&quot;g82&quot;
           transform=&quot;scale(2.9373705)&quot;&gt;&lt;path
             d=&quot;m 106,246 25,25 -25,25 -25,-25 z&quot;
             style=&quot;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
             id=&quot;path84&quot; /&gt;&lt;path
             d=&quot;m 106,246 25,25 -25,25 -25,-25 z&quot;
             style=&quot;fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
             id=&quot;path86&quot; /&gt;&lt;/g&gt;&lt;g
           id=&quot;g88&quot;
           transform=&quot;matrix(2.9373705,0,0,2.9373705,1.4686853,1.4686853)&quot;&gt;&lt;path
             d=&quot;m 106,196 v 43.63&quot;
             style=&quot;fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
             id=&quot;path90&quot; /&gt;&lt;path
             d=&quot;m 106,244.88 -3.5,-7 3.5,1.75 3.5,-1.75 z&quot;
             style=&quot;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
             id=&quot;path92&quot; /&gt;&lt;path
             d=&quot;m 106,244.88 -3.5,-7 3.5,1.75 3.5,-1.75 z&quot;
             style=&quot;fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
             id=&quot;path94&quot; /&gt;&lt;/g&gt;&lt;g
           id=&quot;g96&quot;
           transform=&quot;scale(2.9373705)&quot;&gt;&lt;path
             d=&quot;m 13,126 h 186 c 0.45963,0 0.91484,0.0448 1.36563,0.1345 0.45078,0.0897 0.88849,0.22245 1.31313,0.39834 0.42463,0.17589 0.82803,0.39151 1.21019,0.64685 0.38217,0.25537 0.73576,0.54555 1.06079,0.87056 0.32499,0.32499 0.61519,0.67859 0.87054,1.06074 0.25534,0.38217 0.47096,0.78557 0.64687,1.21021 0.17589,0.42465 0.30867,0.86238 0.39833,1.31317 0.0897,0.45079 0.1345,0.90599 0.13452,1.36563 v 56 c -2e-5,0.45963 -0.0448,0.91483 -0.13452,1.36562 -0.0897,0.45079 -0.22244,0.88848 -0.39833,1.31312 -0.17591,0.42465 -0.39153,0.82807 -0.64687,1.21024 -0.25535,0.38217 -0.54555,0.73576 -0.87054,1.06076 -0.32503,0.32499 -0.67862,0.61519 -1.06078,0.87054 -0.38217,0.25534 -0.78557,0.47096 -1.2102,0.64685 -0.42464,0.17589 -0.86235,0.30867 -1.31313,0.39835 -0.45079,0.0897 -0.906,0.1345 -1.36563,0.13452 H 13 c -0.459627,-2e-5 -0.914839,-0.0448 -1.365634,-0.13452 -0.450794,-0.0897 -0.888512,-0.22246 -1.313151,-0.39835 -0.42464,-0.17589 -0.8280424,-0.39152 -1.2102073,-0.64688 -0.382165,-0.25534 -0.7357502,-0.54552 -1.0607557,-0.87051 -0.3250051,-0.325 -0.6151853,-0.67859 -0.8705407,-1.06076 C 6.9243569,192.50681 6.708734,192.10339 6.5328426,191.67876 6.3569508,191.25412 6.2241707,190.81641 6.1345024,190.36562 6.0448337,189.91483 5.9999995,189.45963 6,189 v -56 c -5e-7,-0.45964 0.044833,-0.91484 0.1345019,-1.36563 0.089669,-0.45079 0.2224489,-0.88852 0.3983407,-1.31317 0.1758914,-0.42464 0.3915143,-0.82804 0.6468692,-1.21021 0.2553549,-0.38215 0.5455351,-0.73575 0.8705402,-1.06074 0.3250055,-0.32501 0.6785898,-0.61519 1.0607547,-0.87056 0.382165,-0.25534 0.7855683,-0.47096 1.2102083,-0.64685 0.424639,-0.17589 0.862357,-0.30867 1.313152,-0.39834 C 12.085162,126.04483 12.540373,126 13,126 Z&quot;
             style=&quot;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
             id=&quot;path98&quot; /&gt;&lt;path
             d=&quot;m 13,126 h 186 c 0.45963,0 0.91484,0.0448 1.36563,0.1345 0.45078,0.0897 0.88849,0.22245 1.31313,0.39834 0.42463,0.17589 0.82803,0.39151 1.21019,0.64685 0.38217,0.25537 0.73576,0.54555 1.06079,0.87056 0.32499,0.32499 0.61519,0.67859 0.87054,1.06074 0.25534,0.38217 0.47096,0.78557 0.64687,1.21021 0.17589,0.42465 0.30867,0.86238 0.39833,1.31317 0.0897,0.45079 0.1345,0.90599 0.13452,1.36563 v 56 c -2e-5,0.45963 -0.0448,0.91483 -0.13452,1.36562 -0.0897,0.45079 -0.22244,0.88848 -0.39833,1.31312 -0.17591,0.42465 -0.39153,0.82807 -0.64687,1.21024 -0.25535,0.38217 -0.54555,0.73576 -0.87054,1.06076 -0.32503,0.32499 -0.67862,0.61519 -1.06078,0.87054 -0.38217,0.25534 -0.78557,0.47096 -1.2102,0.64685 -0.42464,0.17589 -0.86235,0.30867 -1.31313,0.39835 -0.45079,0.0897 -0.906,0.1345 -1.36563,0.13452 H 13 c -0.459627,-2e-5 -0.914839,-0.0448 -1.365634,-0.13452 -0.450794,-0.0897 -0.888512,-0.22246 -1.313151,-0.39835 -0.42464,-0.17589 -0.8280424,-0.39152 -1.2102073,-0.64688 -0.382165,-0.25534 -0.7357502,-0.54552 -1.0607557,-0.87051 -0.3250051,-0.325 -0.6151853,-0.67859 -0.8705407,-1.06076 C 6.9243569,192.50681 6.708734,192.10339 6.5328426,191.67876 6.3569508,191.25412 6.2241707,190.81641 6.1345024,190.36562 6.0448337,189.91483 5.9999995,189.45963 6,189 v -56 c -5e-7,-0.45964 0.044833,-0.91484 0.1345019,-1.36563 0.089669,-0.45079 0.2224489,-0.88852 0.3983407,-1.31317 0.1758914,-0.42464 0.3915143,-0.82804 0.6468692,-1.21021 0.2553549,-0.38215 0.5455351,-0.73575 0.8705402,-1.06074 0.3250055,-0.32501 0.6785898,-0.61519 1.0607547,-0.87056 0.382165,-0.25534 0.7855683,-0.47096 1.2102083,-0.64685 0.424639,-0.17589 0.862357,-0.30867 1.313152,-0.39834 C 12.085162,126.04483 12.540373,126 13,126 Z&quot;
             style=&quot;fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
             id=&quot;path100&quot; /&gt;&lt;/g&gt;&lt;g
           id=&quot;g102&quot;
           transform=&quot;scale(2.9373999)&quot;&gt;&lt;text
             transform=&quot;translate(31,167)&quot;
             style=&quot;font-variant:normal;font-weight:normal;font-size:15px;font-family:&apos;Microsoft YaHei&apos;;-inkscape-font-specification:MicrosoftYaHei;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
             id=&quot;text106&quot;&gt;&lt;tspan
               x=&quot;0 15 30 45 60 75 90 105 120 135&quot;
               y=&quot;0&quot;
               sodipodi:role=&quot;line&quot;
               id=&quot;tspan104&quot;&gt;地址空间是否实例化？&lt;/tspan&gt;&lt;/text&gt;&lt;/g&gt;&lt;g
           id=&quot;g108&quot;
           transform=&quot;matrix(2.9373705,0,0,2.9373705,1.4686853,1.4686853)&quot;&gt;&lt;path
             d=&quot;m 106,436 v 43.64001&quot;
             style=&quot;fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
             id=&quot;path110&quot; /&gt;&lt;path
             d=&quot;m 106,484.89001 -3.5,-7 3.5,1.75 3.5,-1.75 z&quot;
             style=&quot;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
             id=&quot;path112&quot; /&gt;&lt;path
             d=&quot;m 106,484.89001 -3.5,-7 3.5,1.75 3.5,-1.75 z&quot;
             style=&quot;fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
             id=&quot;path114&quot; /&gt;&lt;/g&gt;&lt;g
           id=&quot;g116&quot;
           transform=&quot;scale(2.9373705)&quot;&gt;&lt;path
             d=&quot;m 13,366 h 186 c 0.45963,0 0.91484,0.0448 1.36563,0.13449 0.45078,0.0897 0.88849,0.22244 1.31313,0.39832 0.42463,0.17587 0.82803,0.39151 1.21019,0.64691 0.38217,0.25534 0.73576,0.54553 1.06079,0.87051 0.32499,0.32501 0.61519,0.67859 0.87054,1.06073 0.25534,0.38217 0.47096,0.78559 0.64687,1.21021 0.17589,0.42465 0.30867,0.86236 0.39833,1.31314 0.0897,0.45083 0.1345,0.90606 0.13452,1.36569 v 56 c -2e-5,0.45959 -0.0448,0.91479 -0.13452,1.36557 -0.0897,0.45078 -0.22244,0.88849 -0.39833,1.31314 -0.17591,0.42465 -0.39153,0.82806 -0.64687,1.21024 -0.25535,0.38217 -0.54555,0.73578 -0.87054,1.06079 -0.32503,0.32498 -0.67862,0.61517 -1.06078,0.87051 -0.38217,0.25537 -0.78557,0.47101 -1.2102,0.64688 -0.42464,0.17591 -0.86235,0.30869 -1.31313,0.39835 C 199.91484,435.95517 199.45963,436 199,436 H 13 c -0.459627,0 -0.914839,-0.0448 -1.365634,-0.13449 -0.450794,-0.0897 -0.888512,-0.22247 -1.313151,-0.39838 -0.42464,-0.17587 -0.8280424,-0.39151 -1.2102073,-0.64688 C 8.7288427,434.56491 8.3752575,434.27472 8.050252,433.94974 7.7252469,433.62473 7.4350667,433.27112 7.1797113,432.88895 6.9243569,432.50677 6.708734,432.10339 6.5328426,431.67874 6.3569508,431.25409 6.2241707,430.81638 6.1345024,430.3656 6.0448337,429.91479 5.9999995,429.45959 6,429 v -56 c -5e-7,-0.45963 0.044833,-0.91486 0.1345019,-1.36566 0.089669,-0.45078 0.2224489,-0.88852 0.3983407,-1.31317 0.1758914,-0.42462 0.3915143,-0.82801 0.6468692,-1.21018 0.2553549,-0.38217 0.5455351,-0.73575 0.8705402,-1.06076 0.3250055,-0.32498 0.6785898,-0.61517 1.0607547,-0.87054 0.382165,-0.25537 0.7855683,-0.47101 1.2102083,-0.64688 0.424639,-0.17588 0.862357,-0.30866 1.313152,-0.39832 C 12.085162,366.04483 12.540373,366 13,366 Z&quot;
             style=&quot;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
             id=&quot;path118&quot; /&gt;&lt;path
             d=&quot;m 13,366 h 186 c 0.45963,0 0.91484,0.0448 1.36563,0.13449 0.45078,0.0897 0.88849,0.22244 1.31313,0.39832 0.42463,0.17587 0.82803,0.39151 1.21019,0.64691 0.38217,0.25534 0.73576,0.54553 1.06079,0.87051 0.32499,0.32501 0.61519,0.67859 0.87054,1.06073 0.25534,0.38217 0.47096,0.78559 0.64687,1.21021 0.17589,0.42465 0.30867,0.86236 0.39833,1.31314 0.0897,0.45083 0.1345,0.90606 0.13452,1.36569 v 56 c -2e-5,0.45959 -0.0448,0.91479 -0.13452,1.36557 -0.0897,0.45078 -0.22244,0.88849 -0.39833,1.31314 -0.17591,0.42465 -0.39153,0.82806 -0.64687,1.21024 -0.25535,0.38217 -0.54555,0.73578 -0.87054,1.06079 -0.32503,0.32498 -0.67862,0.61517 -1.06078,0.87051 -0.38217,0.25537 -0.78557,0.47101 -1.2102,0.64688 -0.42464,0.17591 -0.86235,0.30869 -1.31313,0.39835 C 199.91484,435.95517 199.45963,436 199,436 H 13 c -0.459627,0 -0.914839,-0.0448 -1.365634,-0.13449 -0.450794,-0.0897 -0.888512,-0.22247 -1.313151,-0.39838 -0.42464,-0.17587 -0.8280424,-0.39151 -1.2102073,-0.64688 C 8.7288427,434.56491 8.3752575,434.27472 8.050252,433.94974 7.7252469,433.62473 7.4350667,433.27112 7.1797113,432.88895 6.9243569,432.50677 6.708734,432.10339 6.5328426,431.67874 6.3569508,431.25409 6.2241707,430.81638 6.1345024,430.3656 6.0448337,429.91479 5.9999995,429.45959 6,429 v -56 c -5e-7,-0.45963 0.044833,-0.91486 0.1345019,-1.36566 0.089669,-0.45078 0.2224489,-0.88852 0.3983407,-1.31317 0.1758914,-0.42462 0.3915143,-0.82801 0.6468692,-1.21018 0.2553549,-0.38217 0.5455351,-0.73575 0.8705402,-1.06076 0.3250055,-0.32498 0.6785898,-0.61517 1.0607547,-0.87054 0.382165,-0.25537 0.7855683,-0.47101 1.2102083,-0.64688 0.424639,-0.17588 0.862357,-0.30866 1.313152,-0.39832 C 12.085162,366.04483 12.540373,366 13,366 Z&quot;
             style=&quot;fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
             id=&quot;path120&quot; /&gt;&lt;/g&gt;&lt;g
           id=&quot;g122&quot;
           transform=&quot;scale(2.9373999)&quot;&gt;&lt;text
             transform=&quot;translate(8.5,398)&quot;
             style=&quot;font-variant:normal;font-weight:normal;font-size:15px;font-family:&apos;Microsoft YaHei&apos;;-inkscape-font-specification:MicrosoftYaHei;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
             id=&quot;text126&quot;&gt;&lt;tspan
               x=&quot;0 15 30 45 60 75 90 105 120 135 150 165 180&quot;
               y=&quot;0&quot;
               sodipodi:role=&quot;line&quot;
               id=&quot;tspan124&quot;&gt;地址空间是否有预存的信息模&lt;/tspan&gt;&lt;/text&gt;&lt;text
             transform=&quot;translate(91,416)&quot;
             style=&quot;font-variant:normal;font-weight:normal;font-size:15px;font-family:&apos;Microsoft YaHei&apos;;-inkscape-font-specification:MicrosoftYaHei;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
             id=&quot;text130&quot;&gt;&lt;tspan
               x=&quot;0 15&quot;
               y=&quot;0&quot;
               sodipodi:role=&quot;line&quot;
               id=&quot;tspan128&quot;&gt;型？&lt;/tspan&gt;&lt;/text&gt;&lt;/g&gt;&lt;g
           id=&quot;g132&quot;
           transform=&quot;matrix(2.9373705,0,0,2.9373705,1.4686853,1.4686853)&quot;&gt;&lt;path
             d=&quot;m 106,556.01001 v 43.63&quot;
             style=&quot;fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
             id=&quot;path134&quot; /&gt;&lt;path
             d=&quot;m 106,604.89001 -3.5,-7 3.5,1.75 3.5,-1.75 z&quot;
             style=&quot;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
             id=&quot;path136&quot; /&gt;&lt;path
             d=&quot;m 106,604.89001 -3.5,-7 3.5,1.75 3.5,-1.75 z&quot;
             style=&quot;fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
             id=&quot;path138&quot; /&gt;&lt;/g&gt;&lt;g
           id=&quot;g140&quot;
           transform=&quot;scale(2.9373705)&quot;&gt;&lt;path
             d=&quot;m 13,486 h 186 c 0.45963,0 0.91484,0.0448 1.36563,0.13449 0.45078,0.0897 0.88849,0.22244 1.31313,0.39835 0.42463,0.17587 0.82803,0.39148 1.21019,0.64682 0.38217,0.25534 0.73576,0.54553 1.06079,0.87057 0.32499,0.32498 0.61519,0.67856 0.87054,1.06073 0.25534,0.38217 0.47096,0.78559 0.64687,1.21024 0.17589,0.42462 0.30867,0.86233 0.39833,1.31314 0.0897,0.4508 0.1345,0.90603 0.13452,1.36566 v 56 c -2e-5,0.45959 -0.0448,0.91479 -0.13452,1.36554 -0.0897,0.45081 -0.22244,0.88855 -0.39833,1.31317 -0.17591,0.42462 -0.39153,0.82806 -0.64687,1.21021 -0.25535,0.3822 -0.54555,0.73577 -0.87054,1.06079 -0.32503,0.32501 -0.67862,0.61517 -1.06078,0.87048 -0.38217,0.25543 -0.78557,0.47107 -1.2102,0.64691 -0.42464,0.17591 -0.86235,0.30872 -1.31313,0.39838 C 199.91484,555.95514 199.45963,556 199,556 H 13 c -0.459627,0 -0.914839,-0.0449 -1.365634,-0.13452 -0.450794,-0.0897 -0.888512,-0.22247 -1.313151,-0.39838 -0.42464,-0.17584 -0.8280424,-0.39148 -1.2102073,-0.64691 C 8.7288427,554.56488 8.3752575,554.27472 8.050252,553.94971 7.7252469,553.62469 7.4350667,553.27112 7.1797113,552.88892 6.9243569,552.50677 6.708734,552.10333 6.5328426,551.67871 6.3569508,551.25409 6.2241707,550.81635 6.1345024,550.36554 6.0448337,549.91479 5.9999995,549.45959 6,549 v -56 c -5e-7,-0.45963 0.044833,-0.91486 0.1345019,-1.36566 0.089669,-0.45081 0.2224489,-0.88852 0.3983407,-1.31314 0.1758914,-0.42465 0.3915143,-0.82804 0.6468692,-1.21021 0.2553549,-0.38217 0.5455351,-0.73578 0.8705402,-1.06076 0.3250055,-0.32504 0.6785898,-0.6152 1.0607547,-0.87054 0.382165,-0.25537 0.7855683,-0.47101 1.2102083,-0.64688 0.424639,-0.17588 0.862357,-0.30866 1.313152,-0.39832 C 12.085162,486.04483 12.540373,486 13,486 Z&quot;
             style=&quot;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
             id=&quot;path142&quot; /&gt;&lt;path
             d=&quot;m 13,486 h 186 c 0.45963,0 0.91484,0.0448 1.36563,0.13449 0.45078,0.0897 0.88849,0.22244 1.31313,0.39835 0.42463,0.17587 0.82803,0.39148 1.21019,0.64682 0.38217,0.25534 0.73576,0.54553 1.06079,0.87057 0.32499,0.32498 0.61519,0.67856 0.87054,1.06073 0.25534,0.38217 0.47096,0.78559 0.64687,1.21024 0.17589,0.42462 0.30867,0.86233 0.39833,1.31314 0.0897,0.4508 0.1345,0.90603 0.13452,1.36566 v 56 c -2e-5,0.45959 -0.0448,0.91479 -0.13452,1.36554 -0.0897,0.45081 -0.22244,0.88855 -0.39833,1.31317 -0.17591,0.42462 -0.39153,0.82806 -0.64687,1.21021 -0.25535,0.3822 -0.54555,0.73577 -0.87054,1.06079 -0.32503,0.32501 -0.67862,0.61517 -1.06078,0.87048 -0.38217,0.25543 -0.78557,0.47107 -1.2102,0.64691 -0.42464,0.17591 -0.86235,0.30872 -1.31313,0.39838 C 199.91484,555.95514 199.45963,556 199,556 H 13 c -0.459627,0 -0.914839,-0.0449 -1.365634,-0.13452 -0.450794,-0.0897 -0.888512,-0.22247 -1.313151,-0.39838 -0.42464,-0.17584 -0.8280424,-0.39148 -1.2102073,-0.64691 C 8.7288427,554.56488 8.3752575,554.27472 8.050252,553.94971 7.7252469,553.62469 7.4350667,553.27112 7.1797113,552.88892 6.9243569,552.50677 6.708734,552.10333 6.5328426,551.67871 6.3569508,551.25409 6.2241707,550.81635 6.1345024,550.36554 6.0448337,549.91479 5.9999995,549.45959 6,549 v -56 c -5e-7,-0.45963 0.044833,-0.91486 0.1345019,-1.36566 0.089669,-0.45081 0.2224489,-0.88852 0.3983407,-1.31314 0.1758914,-0.42465 0.3915143,-0.82804 0.6468692,-1.21021 0.2553549,-0.38217 0.5455351,-0.73578 0.8705402,-1.06076 0.3250055,-0.32504 0.6785898,-0.6152 1.0607547,-0.87054 0.382165,-0.25537 0.7855683,-0.47101 1.2102083,-0.64688 0.424639,-0.17588 0.862357,-0.30866 1.313152,-0.39832 C 12.085162,486.04483 12.540373,486 13,486 Z&quot;
             style=&quot;fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
             id=&quot;path144&quot; /&gt;&lt;/g&gt;&lt;g
           id=&quot;g146&quot;
           transform=&quot;scale(2.9373999)&quot;&gt;&lt;text
             transform=&quot;translate(53.5,527)&quot;
             style=&quot;font-variant:normal;font-weight:normal;font-size:15px;font-family:&apos;Microsoft YaHei&apos;;-inkscape-font-specification:MicrosoftYaHei;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
             id=&quot;text150&quot;&gt;&lt;tspan
               x=&quot;0 15 30 45 60 75 90&quot;
               y=&quot;0&quot;
               sodipodi:role=&quot;line&quot;
               id=&quot;tspan148&quot;&gt;实例化地址空间&lt;/tspan&gt;&lt;/text&gt;&lt;/g&gt;&lt;g
           id=&quot;g152&quot;
           transform=&quot;scale(2.9373705)&quot;&gt;&lt;path
             d=&quot;m 13,606.01001 h 186 c 0.45963,0 0.91484,0.0448 1.36563,0.13446 0.45078,0.0897 0.88849,0.22241 1.31313,0.39832 0.42463,0.17584 0.82803,0.39148 1.21019,0.64691 0.38217,0.25531 0.73576,0.54553 1.06079,0.87054 0.32499,0.32495 0.61519,0.67853 0.87054,1.06073 0.25534,0.38214 0.47096,0.78559 0.64687,1.21021 0.17589,0.42462 0.30867,0.86236 0.39833,1.31317 0.0897,0.45074 0.1345,0.906 0.13452,1.36566 v 56 c -2e-5,0.45959 -0.0448,0.91479 -0.13452,1.3656 -0.0897,0.45074 -0.22244,0.88849 -0.39833,1.31311 -0.17591,0.42462 -0.39153,0.82806 -0.64687,1.21021 -0.25535,0.38214 -0.54555,0.73577 -0.87054,1.06079 -0.32503,0.32495 -0.67862,0.61511 -1.06078,0.87048 -0.38217,0.25531 -0.78557,0.47095 -1.2102,0.64685 -0.42464,0.1759 -0.86235,0.30872 -1.31313,0.39838 -0.45079,0.0897 -0.906,0.13452 -1.36563,0.13458 H 13 c -0.459627,-6e-5 -0.914839,-0.0449 -1.365634,-0.13458 -0.450794,-0.0897 -0.888512,-0.22248 -1.313151,-0.39838 -0.42464,-0.1759 -0.8280424,-0.39154 -1.2102073,-0.64685 C 8.7288427,674.57483 8.3752575,674.28467 8.050252,673.95972 7.7252469,673.6347 7.4350667,673.28107 7.1797113,672.89893 6.9243569,672.51678 6.708734,672.11334 6.5328426,671.68872 6.3569508,671.2641 6.2241707,670.82635 6.1345024,670.37561 6.0448337,669.9248 5.9999995,669.4696 6,669.01001 v -56 c -5e-7,-0.45966 0.044833,-0.91492 0.1345019,-1.36566 0.089669,-0.45081 0.2224489,-0.88855 0.3983407,-1.31317 0.1758914,-0.42462 0.3915143,-0.82807 0.6468692,-1.21021 0.2553549,-0.3822 0.5455351,-0.73578 0.8705402,-1.06073 0.3250055,-0.32501 0.6785898,-0.61523 1.0607547,-0.8706 0.382165,-0.25537 0.7855683,-0.47101 1.2102083,-0.64685 0.424639,-0.17591 0.862357,-0.30866 1.313152,-0.39832 0.450795,-0.0897 0.906006,-0.13446 1.365633,-0.13446 z&quot;
             style=&quot;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
             id=&quot;path154&quot; /&gt;&lt;path
             d=&quot;m 13,606.01001 h 186 c 0.45963,0 0.91484,0.0448 1.36563,0.13446 0.45078,0.0897 0.88849,0.22241 1.31313,0.39832 0.42463,0.17584 0.82803,0.39148 1.21019,0.64691 0.38217,0.25531 0.73576,0.54553 1.06079,0.87054 0.32499,0.32495 0.61519,0.67853 0.87054,1.06073 0.25534,0.38214 0.47096,0.78559 0.64687,1.21021 0.17589,0.42462 0.30867,0.86236 0.39833,1.31317 0.0897,0.45074 0.1345,0.906 0.13452,1.36566 v 56 c -2e-5,0.45959 -0.0448,0.91479 -0.13452,1.3656 -0.0897,0.45074 -0.22244,0.88849 -0.39833,1.31311 -0.17591,0.42462 -0.39153,0.82806 -0.64687,1.21021 -0.25535,0.38214 -0.54555,0.73577 -0.87054,1.06079 -0.32503,0.32495 -0.67862,0.61511 -1.06078,0.87048 -0.38217,0.25531 -0.78557,0.47095 -1.2102,0.64685 -0.42464,0.1759 -0.86235,0.30872 -1.31313,0.39838 -0.45079,0.0897 -0.906,0.13452 -1.36563,0.13458 H 13 c -0.459627,-6e-5 -0.914839,-0.0449 -1.365634,-0.13458 -0.450794,-0.0897 -0.888512,-0.22248 -1.313151,-0.39838 -0.42464,-0.1759 -0.8280424,-0.39154 -1.2102073,-0.64685 C 8.7288427,674.57483 8.3752575,674.28467 8.050252,673.95972 7.7252469,673.6347 7.4350667,673.28107 7.1797113,672.89893 6.9243569,672.51678 6.708734,672.11334 6.5328426,671.68872 6.3569508,671.2641 6.2241707,670.82635 6.1345024,670.37561 6.0448337,669.9248 5.9999995,669.4696 6,669.01001 v -56 c -5e-7,-0.45966 0.044833,-0.91492 0.1345019,-1.36566 0.089669,-0.45081 0.2224489,-0.88855 0.3983407,-1.31317 0.1758914,-0.42462 0.3915143,-0.82807 0.6468692,-1.21021 0.2553549,-0.3822 0.5455351,-0.73578 0.8705402,-1.06073 0.3250055,-0.32501 0.6785898,-0.61523 1.0607547,-0.8706 0.382165,-0.25537 0.7855683,-0.47101 1.2102083,-0.64685 0.424639,-0.17591 0.862357,-0.30866 1.313152,-0.39832 0.450795,-0.0897 0.906006,-0.13446 1.365633,-0.13446 z&quot;
             style=&quot;fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
             id=&quot;path156&quot; /&gt;&lt;/g&gt;&lt;g
           id=&quot;g158&quot;
           transform=&quot;scale(2.9373999)&quot;&gt;&lt;text
             transform=&quot;translate(31,647)&quot;
             style=&quot;font-variant:normal;font-weight:normal;font-size:15px;font-family:&apos;Microsoft YaHei&apos;;-inkscape-font-specification:MicrosoftYaHei;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
             id=&quot;text162&quot;&gt;&lt;tspan
               x=&quot;0 15 30 45 60 75 90 105 120 135&quot;
               y=&quot;0&quot;
               sodipodi:role=&quot;line&quot;
               id=&quot;tspan160&quot;&gt;发送服务请求给客户端&lt;/tspan&gt;&lt;/text&gt;&lt;/g&gt;&lt;/g&gt;&lt;/g&gt;&lt;/g&gt;&lt;/svg&gt;
&lt;/div&gt;
&lt;/p&gt;
&lt;/div&gt;

&lt;p&gt;
以上流程图就是均衡器响应OPC UA客户端请求的过程。
&lt;/p&gt;

&lt;p&gt;
均衡器收到来自客户端的服务请求，查询是否有服务器能提供地址空间实例，如果没有，则根据客户端的请求动态地创建地址空间实例。
&lt;/p&gt;

&lt;p&gt;
如果没有，就自动扩展OPC UA服务器资源。动态管理OPC UA提供的地址空间（Address Space）。动态创建的地址空间发送地址空间请求到后端系统，并且从接收来自后端的地址空间信息。
&lt;/p&gt;

&lt;p&gt;
负载均衡器是客户端和服务器之间的一个透明路由，在以下任何情况下，客户端不与服务器建立直接连接，只通过负载均衡器与服务器建立连接，包括
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;建立会话、&lt;/li&gt;
&lt;li&gt;会话操作、&lt;/li&gt;
&lt;li&gt;会话结束。&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
负载均衡器则只负责转发客户端和服务器之间的通讯，不关心通信内容。
&lt;/p&gt;


&lt;p&gt;
这个专利的应用价值：
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;通过多个服务器保障平滑的功能扩展&lt;/li&gt;
&lt;li&gt;可以利用服务编排工具满足零停机（zero downtime）需求&lt;/li&gt;
&lt;li&gt;通过自动添加服务器满足服务性能要求，且不影响已经建立的链接&lt;/li&gt;
&lt;/ul&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines ES.56 只有需要显式的把对象移动到另一个作用域范围时才用 std::move()</title>
   <link href="http://kimi.im/2023-04-27-cppcoreguidelines-es56"/>
   <updated>2023-04-27T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-es56</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;Write &lt;code&gt;std::move()&lt;/code&gt; only when you need to explicitly move an object to
another scope&amp;rdquo;
&lt;/p&gt;

&lt;p&gt;
理由
&lt;/p&gt;

&lt;p&gt;
相比 copy ，移动 move能避免重复，提升性能。
&lt;/p&gt;

&lt;p&gt;
移动完之后，留下的是一个空对象。这样就可能导致意外甚至危险情况。所以我们应该避免移动左值，因为左值可能后面会被访问。
&lt;/p&gt;


&lt;p&gt;
注意
&lt;/p&gt;

&lt;p&gt;
对于右值来说，移动是隐式的操作（比如函数的返回值）。所以，不要显式地写移动操作，导致代码复杂。编译器会自动进行优化。
&lt;/p&gt;

&lt;p&gt;
通常来说，遵循本文档中的指南编写代码，可以避免大部分显式使用&lt;code&gt;std::move&lt;/code&gt;的情况：
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;避免变量的作用域范围不必要的大&lt;/li&gt;
&lt;li&gt;编写篇幅短的函数&lt;/li&gt;
&lt;li&gt;返回本地变量&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
显式移动操作用于把一个对象移动到另一个作用域范围。主要是传递数据到“地漏”函数，实现移动构造和移动赋值以及 swap 操作。
&lt;/p&gt;

&lt;p&gt;
坏例子
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;sink&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;X&lt;/span&gt;&amp;amp;&amp;amp; &lt;span style=&quot;color: #000000;&quot;&gt;x&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;sink takes ownership of x&lt;/span&gt;

&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;user&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;X&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;x&lt;/span&gt;;

    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;error: cannot bind an lvalue to a rvalue reference&lt;/span&gt;
    sink&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;x&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;OK: sink takes the contents of x, x must now be assumed to be&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;empty&lt;/span&gt;
    sink&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;std&lt;/span&gt;::move&lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;x&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;

    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;...&lt;/span&gt;

    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;probably a mistake&lt;/span&gt;
    use&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;x&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
通常，&lt;code&gt;std::move()&lt;/code&gt;用于传递&lt;code&gt;&amp;amp;&amp;amp;&lt;/code&gt;参数。并且在传递参数之后，对象就已经移出去，不要再读取该变量，直到赋予新值。
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;string&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;s1&lt;/span&gt; = &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;supercalifragilisticexpialidocious&quot;&lt;/span&gt;;

    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;string&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;s2&lt;/span&gt; = s1;             &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;ok, takes a copy&lt;/span&gt;
    assert&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;s1 == &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;supercalifragilisticexpialidocious&quot;&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;  &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;ok&lt;/span&gt;

    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;bad, if you want to keep using s1&apos;s value&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;string&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;s3&lt;/span&gt; = move&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;s1&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;

    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;bad, assert will likely fail, s1 likely changed&lt;/span&gt;
    assert&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;s1 == &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;supercalifragilisticexpialidocious&quot;&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;main&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    f&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt;;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; EXIT_SUCCESS;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;pre class=&quot;example&quot; id=&quot;org57c193c&quot;&gt;
Assertion failed: s1 == &quot;supercalifragilisticexpialidocious&quot;
&lt;/pre&gt;

&lt;p&gt;
例子
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;sink&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;unique_ptr&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;&amp;lt;&lt;/span&gt;widget&lt;span style=&quot;color: #7388d6;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;p&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;  &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;pass ownership of p to sink()&lt;/span&gt;

&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;auto&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;w&lt;/span&gt; = make_unique&lt;span style=&quot;color: #7388d6;&quot;&gt;&amp;lt;&lt;/span&gt;widget&lt;span style=&quot;color: #7388d6;&quot;&gt;&amp;gt;()&lt;/span&gt;;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;...&lt;/span&gt;
    sink&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;std&lt;/span&gt;::move&lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;w&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;               &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;ok, give to sink()&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;...&lt;/span&gt;
    sink&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;w&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;Error: unique_ptr is carefully designed so that you&lt;/span&gt;
                &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;cannot copy it&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
注意
&lt;/p&gt;

&lt;p&gt;
&lt;code&gt;std::move()&lt;/code&gt; 只是假装把变量类型转换成&lt;code&gt;&amp;amp;&amp;amp;&lt;/code&gt;。其本身不移动任何东西，而只是把一个对象标记成被移动的实体。编程语言本身知道哪些对象是可以移动的，尤其是函数的返回值，所以不需要添加多余的&lt;code&gt;std::move()&lt;/code&gt;。
&lt;/p&gt;

&lt;p&gt;
不要仅仅因为你听说 &lt;code&gt;move&lt;/code&gt; 效率更高而写&lt;code&gt;std::move()&lt;/code&gt;。没有数据支撑，不要声明效率高。一般来说，没有什么理由的话，不要把代码搞的太复杂。绝对不要对 &lt;code&gt;const&lt;/code&gt; 对象使用&lt;code&gt;std::move()&lt;/code&gt;，其实只是悄悄的转成了一个副本。
&lt;/p&gt;


&lt;p&gt;
坏例子
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;vector&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;make_vector&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;vector&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;result&lt;/span&gt;;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;... load result with data&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;std&lt;/span&gt;::move&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;result&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;       &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;bad; just write &quot;return result;&quot;&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
不要移动本地变量。因为语言默认本地变量是可移动。以上写法没有帮助，只会让编译器干预 RVO（返回值优化）过程，产生本地变量的一个不必要的引用别名。
&lt;/p&gt;


&lt;p&gt;
坏例子
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;vector&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;v&lt;/span&gt; = &lt;span style=&quot;color: #110099;&quot;&gt;std&lt;/span&gt;::move&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;make_vector&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;bad; the std::move is&lt;/span&gt;
                                            &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;entirely redundant&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
不要移动返回值，比如在&lt;code&gt;x = move(f())&lt;/code&gt;中。编程语言知道返回值是一个临时对象，可以移动。
&lt;/p&gt;


&lt;p&gt;
例子
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;mover&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;X&lt;/span&gt;&amp;amp;&amp;amp; &lt;span style=&quot;color: #000000;&quot;&gt;x&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    call_something&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;std&lt;/span&gt;::move&lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;x&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;         &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;ok&lt;/span&gt;
    call_something&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;std&lt;/span&gt;::forward&lt;span style=&quot;color: #909183;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;X&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;&amp;gt;(&lt;/span&gt;x&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;bad, don&apos;t std::forward&lt;/span&gt;
                                          &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;an rvalue reference&lt;/span&gt;
    call_something&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;x&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;                    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;suspicious, why not std::move?&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;template&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;forwarder&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt;&amp;amp;&amp;amp; &lt;span style=&quot;color: #000000;&quot;&gt;t&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    call_something&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;std&lt;/span&gt;::move&lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;t&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;         &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;bad, don&apos;t std::move a&lt;/span&gt;
                                          &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;forwarding reference&lt;/span&gt;
    call_something&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;std&lt;/span&gt;::forward&lt;span style=&quot;color: #909183;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;&amp;gt;(&lt;/span&gt;t&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;ok&lt;/span&gt;
    call_something&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;t&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;                    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;suspicious, why not std::forward?&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;
强化
&lt;/p&gt;

&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;标记警告以下情况：
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;&lt;code&gt;std::move(x)&lt;/code&gt; ，其中 &lt;code&gt;x&lt;/code&gt; 是右值，或这开发语言以右值对待的变量，包括从
&lt;code&gt;std::move(local_variable)&lt;/code&gt; 返回的值&lt;/li&gt;
&lt;li&gt;对于值返回的函数的返回结果进行移动操作 &lt;code&gt;std::move(f())&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;标记警告接受&lt;code&gt;S&amp;amp;&amp;amp;&lt;/code&gt;参数的函数，且该函数没有能接受左值&lt;code&gt;const S&amp;amp;&lt;/code&gt;的重载&lt;/li&gt;
&lt;li&gt;标记警告以&lt;code&gt;std::move&lt;/code&gt;的方式传参给函数的情况。除了以下情况：
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;参数类型为&lt;code&gt;X&amp;amp;&amp;amp;&lt;/code&gt;右值引用&lt;/li&gt;
&lt;li&gt;类型只能移动，且参数是值传递的&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;标记警告&lt;code&gt;std::move&lt;/code&gt;用于转发引用的情况（&lt;code&gt;T&amp;amp;&amp;amp;&lt;/code&gt;中 &lt;code&gt;T&lt;/code&gt; 为一个模板类型参数）。考虑使用 &lt;code&gt;std::forward&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;标记警告除了从右值引用到非 &lt;code&gt;const&lt;/code&gt; 传参中使用&lt;code&gt;std::move&lt;/code&gt;的其他情况&lt;/li&gt;
&lt;li&gt;标记警告&lt;code&gt;std::forward&lt;/code&gt;用于右值引用的情况（&lt;code&gt;X&amp;amp;&amp;amp;&lt;/code&gt;中 &lt;code&gt;X&lt;/code&gt; 不是模板类型参数）。考虑使用 &lt;code&gt;std::move&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;标记警告除了转发引用之外的使用&lt;code&gt;std::forward&lt;/code&gt;的情况&lt;/li&gt;
&lt;li&gt;标记警告一个对象是可能从别处移动来的，而下一个操作是 &lt;code&gt;const&lt;/code&gt; 操作。应该首先有一个非 &lt;code&gt;const&lt;/code&gt; 的动作。这个动作最好是赋值操作，该操作重置对象的值。&lt;/li&gt;
&lt;/ul&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines ES.55 避免范围检测</title>
   <link href="http://kimi.im/2023-04-26-cppcoreguidelines-es55"/>
   <updated>2023-04-26T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-es55</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;Avoid the need for range checking&amp;rdquo;
&lt;/p&gt;

&lt;p&gt;
理由
&lt;/p&gt;

&lt;p&gt;
不会溢出的代码不溢出，（通常跑得更快）
&lt;/p&gt;

&lt;p&gt;
例子
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;for&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;auto&lt;/span&gt;&amp;amp; &lt;span style=&quot;color: #000000;&quot;&gt;x&lt;/span&gt; : v&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;      &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;print all elements of v&lt;/span&gt;
    cout &amp;lt;&amp;lt; x &amp;lt;&amp;lt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&apos;\n&apos;&lt;/span&gt;;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;auto&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;p&lt;/span&gt; = find&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;v, x&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;find x in v&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
强化
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;发现显式类型检测的代码，启发式的提供改进建议&lt;/li&gt;
&lt;/ul&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines ES.50 不要强制类型转换掉 const</title>
   <link href="http://kimi.im/2023-04-25-cppcoreguidelines-es50"/>
   <updated>2023-04-25T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-es50</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;Don’t cast away &lt;code&gt;const&lt;/code&gt;&amp;rdquo;
&lt;/p&gt;

&lt;p&gt;
理由
&lt;/p&gt;

&lt;p&gt;
通过强制类型转换把 &lt;code&gt;const&lt;/code&gt; 去掉，其实只是制造了一种变量可变的假象。如果实际变量是个常变量，但是你通过强制类型转换去掉了 &lt;code&gt;const&lt;/code&gt; ，然后去修改它，结果是未定义的行为。
&lt;/p&gt;

&lt;p&gt;
坏例子
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt;&amp;amp; &lt;span style=&quot;color: #000000;&quot;&gt;x&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const_cast&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt;&amp;amp;&lt;span style=&quot;color: #7388d6;&quot;&gt;&amp;gt;(&lt;/span&gt;x&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; = 42;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;BAD&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;static&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;i&lt;/span&gt; = 0;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;static&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;j&lt;/span&gt; = 0;

&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;main&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    f&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;i&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;silent side effect&lt;/span&gt;
    cout &amp;lt;&amp;lt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;i = &quot;&lt;/span&gt; &amp;lt;&amp;lt; i &amp;lt;&amp;lt;&lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;\n&quot;&lt;/span&gt;;
    f&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;j&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;undefined behavior&lt;/span&gt;
    cout &amp;lt;&amp;lt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;j = &quot;&lt;/span&gt; &amp;lt;&amp;lt; j &amp;lt;&amp;lt;&lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;\n&quot;&lt;/span&gt;;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; EXIT_SUCCESS;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;pre class=&quot;example&quot;&gt;
i = 42
&lt;/pre&gt;



&lt;p&gt;
例子
&lt;/p&gt;

&lt;p&gt;
有时候，你可能会考虑利用&lt;code&gt;const_cast&lt;/code&gt;避免重复代码。比如，两个访问函数，分别对应常量和非常量方式访问。
&lt;/p&gt;

&lt;p&gt;
比如以下这种情况：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Bar&lt;/span&gt;;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Foo&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;public&lt;/span&gt;:
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;BAD, duplicates logic&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Bar&lt;/span&gt;&amp;amp; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;get_bar&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt;
    &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;
        &lt;span style=&quot;color: #3F7F5F;&quot;&gt;/* &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;complex logic around getting a non-const reference to my_bar&lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt; */&lt;/span&gt;
    &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;

    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Bar&lt;/span&gt;&amp;amp; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;get_bar&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt;
    &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;
        &lt;span style=&quot;color: #3F7F5F;&quot;&gt;/* &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;same complex logic around getting a const reference to my_bar&lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt; */&lt;/span&gt;
    &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;private&lt;/span&gt;:
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Bar&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;my_bar&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
为了避免代码重复，一般可以让非常量访问的函数调用常量访问的函数。
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Foo&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;public&lt;/span&gt;:
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;not great, non-const calls const version but resorts to&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;const_cast&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Bar&lt;/span&gt;&amp;amp; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;get_bar&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt;
    &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;
        &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const_cast&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Bar&lt;/span&gt;&amp;amp;&lt;span style=&quot;color: #909183;&quot;&gt;&amp;gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;static_cast&lt;/span&gt;&lt;span style=&quot;color: #709870;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Foo&lt;/span&gt;&amp;amp;&lt;span style=&quot;color: #709870;&quot;&gt;&amp;gt;(&lt;/span&gt;*&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;this&lt;/span&gt;&lt;span style=&quot;color: #709870;&quot;&gt;)&lt;/span&gt;.get_bar&lt;span style=&quot;color: #709870;&quot;&gt;()&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt;;
    &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Bar&lt;/span&gt;&amp;amp; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;get_bar&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt;
    &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;
        &lt;span style=&quot;color: #3F7F5F;&quot;&gt;/* &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;the complex logic around getting a const reference to my_bar&lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt; */&lt;/span&gt;
    &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;private&lt;/span&gt;:
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Bar&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;my_bar&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
如果实现正确，这个模式还是安全可行的。因为发起调用的函数保管一个非-const
的对象。但是不够完美。
&lt;/p&gt;

&lt;p&gt;
另外一个办法，就是把共用部分的代码放进一个辅助函数里，把这个辅助函数设置成模板，这样就不需要&lt;code&gt;const_cast&lt;/code&gt;也能推导出两个版本：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Foo&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;public&lt;/span&gt;:                         &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;good&lt;/span&gt;
          &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Bar&lt;/span&gt;&amp;amp; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;get_bar&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt;       &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; get_bar_impl&lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;*&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;this&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt;; &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Bar&lt;/span&gt;&amp;amp; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;get_bar&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; get_bar_impl&lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;*&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;this&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt;; &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;private&lt;/span&gt;:
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Bar&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;my_bar&lt;/span&gt;;

    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;template&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;&amp;gt;&lt;/span&gt;           &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;good, deduces whether T is const or non-const&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;static&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;auto&lt;/span&gt;&amp;amp; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;get_bar_impl&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt;&amp;amp; &lt;span style=&quot;color: #000000;&quot;&gt;t&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;
        &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;/* &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;the complex logic around getting a possibly-const&lt;/span&gt;
&lt;span style=&quot;color: #3F7F5F;&quot;&gt;           * reference to my_bar&lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt; */&lt;/span&gt;
        &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
注意，不要在模板函数中放太多不相关的代码，不然会导致代码膨胀。比如说，后期如果发现有一些共用代码不需要做成模板，就可以提取出来，各自调用，而不要放进模板函数。这样可以降低生成重复的代码。
&lt;/p&gt;


&lt;p&gt;
例外
&lt;/p&gt;

&lt;p&gt;
在调用 &lt;code&gt;const&lt;/code&gt; 不正确的函数时候，你可能会把 &lt;code&gt;const&lt;/code&gt; 强制转换掉。最好把这些函数限制在一个 &lt;code&gt;inline&lt;/code&gt; 的 &lt;code&gt;const&lt;/code&gt; 正确的函数中，把类型转换限制在一个地方。
&lt;/p&gt;

&lt;p&gt;
例子
&lt;/p&gt;

&lt;p&gt;
有时候，把 &lt;code&gt;const&lt;/code&gt; 转换掉是为了临时更新某个不可变对象。例子有：缓存
caching、备忘 memoization 、以及预计算 precomputation。不过，处理这些例子的更好的方法是使用 &lt;code&gt;mutable&lt;/code&gt;或间接访问。
&lt;/p&gt;

&lt;p&gt;
考虑把之前耗费资源的操作计算的结果保存起来使用：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;compute&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;x&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;compute a value for x; assume this to be costly&lt;/span&gt;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Cache&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;some type implementing a cache for an int-&amp;gt;int operation&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;public&lt;/span&gt;:
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;pair&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;bool&lt;/span&gt;, &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;find&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;x&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt;;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;is there a value for x?&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;set&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;x&lt;/span&gt;, &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;v&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;             &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;make y the value for x&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;...&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;private&lt;/span&gt;:
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;...&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;X&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;public&lt;/span&gt;:
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;get_val&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;x&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;
    &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;
        &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;auto&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;p&lt;/span&gt; = cache.find&lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;x&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt;;
        &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;p.first&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; p.second;
        &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;val&lt;/span&gt; = compute&lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;x&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt;;
        cache.set&lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;x, val&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt;; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;insert value for x&lt;/span&gt;
        &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; val;
    &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;...&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;private&lt;/span&gt;:
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Cache&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;cache&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
这里&lt;code&gt;get_val()&lt;/code&gt;逻辑上是个常数，所以我们可能想要把它设置为 &lt;code&gt;const&lt;/code&gt; 成员。但是，依然需要修改 &lt;code&gt;cache&lt;/code&gt; ，所以人们经常用到&lt;code&gt;const_cast&lt;/code&gt;：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;X&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;Suspicious solution based on casting&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;public&lt;/span&gt;:
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;get_val&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;x&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt;
    &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;
        &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;auto&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;p&lt;/span&gt; = cache.find&lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;x&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt;;
        &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;p.first&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; p.second;
        &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;val&lt;/span&gt; = compute&lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;x&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt;;
        &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const_cast&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Cache&lt;/span&gt;&amp;amp;&lt;span style=&quot;color: #909183;&quot;&gt;&amp;gt;(&lt;/span&gt;cache&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt;.set&lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;x, val&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt;;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;ugly&lt;/span&gt;
        &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; val;
    &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;...&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;private&lt;/span&gt;:
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Cache&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;cache&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
幸运的是，有更好的方案：把 &lt;code&gt;cache&lt;/code&gt; 设置为 &lt;code&gt;mutable&lt;/code&gt; 。这样，就算对象 &lt;code&gt;X&lt;/code&gt; 是个 &lt;code&gt;const&lt;/code&gt; ，你依然能修改 &lt;code&gt;cache&lt;/code&gt; 。
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;X&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;better solution&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;public&lt;/span&gt;:
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;get_val&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;x&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt;
    &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;
        &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;auto&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;p&lt;/span&gt; = cache.find&lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;x&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt;;
        &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;p.first&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; p.second;
        &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;val&lt;/span&gt; = compute&lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;x&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt;;
        cache.set&lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;x, val&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt;;
        &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; val;
    &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;...&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;private&lt;/span&gt;:
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;mutable&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Cache&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;cache&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;
&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;
An alternative solution would be to store a pointer to the cache:
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;X&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;OK, but slightly messier solution&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;public&lt;/span&gt;:
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;get_val&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;x&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt;
    &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;
        &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;auto&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;p&lt;/span&gt; = cache-&amp;gt;find&lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;x&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt;;
        &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;p.first&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; p.second;
        &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;val&lt;/span&gt; = compute&lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;x&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt;;
        cache-&amp;gt;set&lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;x, val&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt;;
        &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; val;
    &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;...&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;private&lt;/span&gt;:
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;unique_ptr&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;&amp;lt;&lt;/span&gt;Cache&lt;span style=&quot;color: #7388d6;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;cache&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
这个解决方案更加灵活。但是需要显式地构造和析构&lt;code&gt;*cache&lt;/code&gt;。
&lt;/p&gt;

&lt;p&gt;
不管什么情况，我们都需要确保多线程执行的时候， &lt;code&gt;cache&lt;/code&gt; 线程安全，可能需要用到&lt;code&gt;std::mutex&lt;/code&gt;。
&lt;/p&gt;


&lt;p&gt;
强化
&lt;/p&gt;

&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;标注 &lt;code&gt;const_casts&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;此规则适用于类型安全指南集合&lt;/li&gt;
&lt;/ul&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines ES.49 如果需要强制类型转换，可以用带名字的转换</title>
   <link href="http://kimi.im/2023-04-24-cppcoreguidelines-es49"/>
   <updated>2023-04-24T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-es49</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;If you must use a cast, use a named cast&amp;rdquo;
&lt;/p&gt;

&lt;p&gt;
理由
&lt;/p&gt;

&lt;p&gt;
可读性更好。可避免错误。比 C 风格或函数风格的转换更准确。可以让编译器捕捉某些错误。
&lt;/p&gt;

&lt;p&gt;
带名字的类型转换有：
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;&lt;code&gt;static_cast&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;const_cast&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;reinterpret_cast&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;dynamic_cast&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;std::move&lt;/code&gt; ：&lt;code&gt;move(x)&lt;/code&gt;是一种从右值引用转为 &lt;code&gt;x&lt;/code&gt; 的操作&lt;/li&gt;
&lt;li&gt;&lt;code&gt;std::forward&lt;/code&gt; ：&lt;code&gt;forward&amp;lt;T&amp;gt;(x)&lt;/code&gt;是一种依赖于类型 &lt;code&gt;T&lt;/code&gt; 从右值或左值引用转成 &lt;code&gt;x&lt;/code&gt; 的操作&lt;/li&gt;
&lt;li&gt;&lt;code&gt;gsl::narrow_cast&lt;/code&gt; ：&lt;code&gt;narrow_cast&amp;lt;T&amp;gt;(x)&lt;/code&gt;是一种 &lt;code&gt;static_cast&amp;lt;T&amp;gt;(x)&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;gsl::narrow&lt;/code&gt; ：&lt;code&gt;narrow&amp;lt;T&amp;gt;(x)&lt;/code&gt;是静态类型转换&lt;code&gt;static_cast&amp;lt;T&amp;gt;(x)&lt;/code&gt;，并且要么&lt;code&gt;static_cast&amp;lt;T&amp;gt;(x) == x&lt;/code&gt;， 要么会抛出异常 &lt;code&gt;narrowing_error&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
例子
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;B&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;/* &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;...&lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt; */&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;D&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;/* &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;...&lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt; */&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;template&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;typename&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;D&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;D&lt;/span&gt;* &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;upcast&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;B&lt;/span&gt;* &lt;span style=&quot;color: #000000;&quot;&gt;pb&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;D&lt;/span&gt;* &lt;span style=&quot;color: #000000;&quot;&gt;pd0&lt;/span&gt; = pb;                        &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;error: no implicit&lt;/span&gt;
                                        &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;conversion from B* to D*&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;D&lt;/span&gt;* &lt;span style=&quot;color: #000000;&quot;&gt;pd1&lt;/span&gt; = &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;D&lt;/span&gt;*&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;pb;                    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;legal, but what is done?&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;D&lt;/span&gt;* &lt;span style=&quot;color: #000000;&quot;&gt;pd2&lt;/span&gt; = &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;static_cast&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;D&lt;/span&gt;*&lt;span style=&quot;color: #7388d6;&quot;&gt;&amp;gt;(&lt;/span&gt;pb&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;       &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;error: D is not derived from B&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;D&lt;/span&gt;* &lt;span style=&quot;color: #000000;&quot;&gt;pd3&lt;/span&gt; = &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;reinterpret_cast&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;D&lt;/span&gt;*&lt;span style=&quot;color: #7388d6;&quot;&gt;&amp;gt;(&lt;/span&gt;pb&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;  &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;OK: on your head be it!&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;D&lt;/span&gt;* &lt;span style=&quot;color: #000000;&quot;&gt;pd4&lt;/span&gt; = &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;dynamic_cast&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;D&lt;/span&gt;*&lt;span style=&quot;color: #7388d6;&quot;&gt;&amp;gt;(&lt;/span&gt;pb&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;      &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;OK: return nullptr&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;...&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
以上是来自真实世界的 bug ， D一开始是从 B 派生的，后来某个人重构了代码，
D 不再是 B 的子类。 C 风格的强制类型转换是危险的，因为可以做任何类型转换，剥夺了任何防止错误的保护措施。
&lt;/p&gt;


&lt;p&gt;
注意
&lt;/p&gt;

&lt;p&gt;
如果类型转换不会导致丢失信息（比如从 &lt;code&gt;float&lt;/code&gt; 转为 &lt;code&gt;double&lt;/code&gt; ，从 &lt;code&gt;int32&lt;/code&gt; 转为
&lt;code&gt;int64&lt;/code&gt; ）可以考虑用花括号初始化。
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;double&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;d&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;some_float&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;
&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int64_t&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;i&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;some_int32&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
这样写，可以表明是类型转换是有意为之。并且避免了可能导致精度丢失的转换。（如果是从 &lt;code&gt;double&lt;/code&gt; 转为 &lt;code&gt;float&lt;/code&gt; ，编译其会报错）。
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;double&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;x&lt;/span&gt; = 10.1;
&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;float&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;x&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;
&lt;/pre&gt;
&lt;/div&gt;

&lt;pre class=&quot;example&quot; id=&quot;org27a12e3&quot;&gt;
C-src-Qi3AYa.cpp: In function &apos;int main()&apos;:
C-src-Qi3AYa.cpp:12:9: warning: narrowing conversion of &apos;x&apos; from &apos;double&apos; to &apos;float&apos; [-Wnarrowing]
   12 | float f{x};
      |         ^
&lt;/pre&gt;

&lt;p&gt;
注意
&lt;/p&gt;

&lt;p&gt;
&lt;code&gt;reinterpret_cast&lt;/code&gt; 有时候是需要的，（比如，把机器地址转为指针），但是它并不类型安全。
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;auto&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;p&lt;/span&gt; = &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;reinterpret_cast&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;lt;&lt;/span&gt;Device_register&lt;span style=&quot;color: #707183;&quot;&gt;&amp;gt;(&lt;/span&gt;0x800&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;  &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;inherently dangerous&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;
强化
&lt;/p&gt;

&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;标注所有 C 风格的强制类型转换，包括转到 &lt;code&gt;void&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;标注函数风格的强制类型转换&lt;code&gt;Type(value)&lt;/code&gt;。使用花括号&lt;code&gt;Type{value}&lt;/code&gt;，不会导致类型变窄。&lt;/li&gt;
&lt;li&gt;类型转换指南集禁用 &lt;code&gt;reinterpret_cast&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;类型转换指南集警告针对数值类型使用 &lt;code&gt;static_cast&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines ES.48 避免类型转换</title>
   <link href="http://kimi.im/2023-04-23-cppcoreguidelines-es48"/>
   <updated>2023-04-23T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-es48</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;Avoid casts&amp;rdquo;
&lt;/p&gt;

&lt;p&gt;
理由
&lt;/p&gt;

&lt;p&gt;
类型转换容易导致错误、导致代码优化不可靠。
&lt;/p&gt;


&lt;p&gt;
坏例子
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;double&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;d&lt;/span&gt; = 2;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;auto&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;p&lt;/span&gt; = &lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;long&lt;/span&gt;*&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;&amp;amp;d;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;auto&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;q&lt;/span&gt; = &lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;long&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;long&lt;/span&gt;*&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;&amp;amp;d;
cout &amp;lt;&amp;lt; d &amp;lt;&amp;lt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&apos; &apos;&lt;/span&gt; &amp;lt;&amp;lt; *p &amp;lt;&amp;lt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&apos; &apos;&lt;/span&gt; &amp;lt;&amp;lt; *q &amp;lt;&amp;lt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&apos;\n&apos;&lt;/span&gt;;
&lt;/pre&gt;
&lt;/div&gt;

&lt;pre class=&quot;example&quot;&gt;
2 0 4611686018427387904
&lt;/pre&gt;


&lt;p&gt;
不同实现，以上代码的输出也不一样。
&lt;/p&gt;

&lt;p&gt;
如果中间修改，结果更加奇怪：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;double&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;d&lt;/span&gt; = 2;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;auto&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;p&lt;/span&gt; = &lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;long&lt;/span&gt;*&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;&amp;amp;d;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;auto&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;q&lt;/span&gt; = &lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;long&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;long&lt;/span&gt;*&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;&amp;amp;d;
*q = 666;
cout &amp;lt;&amp;lt; d &amp;lt;&amp;lt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&apos; &apos;&lt;/span&gt; &amp;lt;&amp;lt; *p &amp;lt;&amp;lt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&apos; &apos;&lt;/span&gt; &amp;lt;&amp;lt; *q &amp;lt;&amp;lt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&apos;\n&apos;&lt;/span&gt;;
&lt;/pre&gt;
&lt;/div&gt;

&lt;pre class=&quot;example&quot;&gt;
3.29048e-321 666 666
&lt;/pre&gt;


&lt;p&gt;
很奇怪吧，好在还没有导致程序崩溃。
&lt;/p&gt;


&lt;p&gt;
注意
&lt;/p&gt;

&lt;p&gt;
程序员用上类型转换，往往都觉得这是自己想要做的，觉得这样写代码更容易读。事实上，他们违背了使用数值的通用规则。重载解析或者模板实例化往往能够帮你选择合适的函数。如果没有重载或模板实例化，可能需要去实现这些，而非进行局部修理（类型转换）。
&lt;/p&gt;


&lt;p&gt;
注意
&lt;/p&gt;

&lt;p&gt;
对于系统开发语言来说，类型转换也是必不可少的。比如，除了类型转换，还有什么把设备寄存器的地址存入指针？但是，总的来说，类型转换的使用还是严重过度了。是代码错误很主要的来源。
&lt;/p&gt;

&lt;p&gt;
如果你感觉需要很多类型转换，那么，你肯定遇到很根本的设计问题。
&lt;/p&gt;

&lt;p&gt;
类型规则集禁止使用&lt;code&gt;reinterpret_cast&lt;/code&gt;和 C 风格的类型转换。
&lt;/p&gt;

&lt;p&gt;
不要把&lt;code&gt;[[nodiscard]]&lt;/code&gt;返回值强制转换成 &lt;code&gt;void&lt;/code&gt; 。如果你确实有意要抹掉返回值？如果代码评审和你都觉得忽略返回值是需要的。那么可以使用&lt;code&gt;std::ignore =&lt;/code&gt;来消除编译器警告。这个方式更简单、可移植，也更容易通过 grep 搜索到。
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #707183;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;[&lt;/span&gt;nodiscard&lt;span style=&quot;color: #7388d6;&quot;&gt;]&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;]&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;get_value&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; 42; &lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;main&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #110099;&quot;&gt;std&lt;/span&gt;::ignore = get_value&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt;; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;no warning now: warning: ignoring&lt;/span&gt;
                               &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;return value of &apos;int get_value()&apos;,&lt;/span&gt;
                               &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;declared with attribute &apos;nodiscard&apos;&lt;/span&gt;
                               &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;[-Wunused-result]&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; EXIT_SUCCESS;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
强制类型转换用的优点过度。现代C++提供规则和机制避免在大部分情况下使用强制类型转换。比如：
&lt;/p&gt;

&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;使用模板&lt;/li&gt;
&lt;li&gt;使用 &lt;code&gt;std::variant&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;使用定义良好的、安全、隐式指针类型转换&lt;/li&gt;
&lt;li&gt;使用&lt;code&gt;std::ignore =&lt;/code&gt;忽略&lt;code&gt;[[nodiscard]]&lt;/code&gt;返回值&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;
强化
&lt;/p&gt;

&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;标记 C 风格的强制类型转换，包括转换成 &lt;code&gt;void&lt;/code&gt; 的情况&lt;/li&gt;
&lt;li&gt;标记函数形式的强制类型转换&lt;code&gt;Type(value)&lt;/code&gt;。使用&lt;code&gt;Type{value}&lt;/code&gt;，这个方式可以避免变窄转换。&lt;/li&gt;
&lt;li&gt;标记源和目标类型一样的指针类型转换&lt;/li&gt;
&lt;li&gt;标记可以隐式转换的显示的指针类型转换&lt;/li&gt;
&lt;/ul&gt;
</content>
 </entry>
 
 <entry>
   <title>单词本：shepherd</title>
   <link href="http://kimi.im/2023-04-23-shepherd"/>
   <updated>2023-04-23T00:00:00+00:00</updated>
   <id>http://kimi.im/shepherd</id>
   <content type="html">&lt;p&gt;
一般在大一点的研发组织，都会设立 PMO 项目管理办公室，PMI Agile
(&lt;a href=&quot;#citeproc_bib_item_1&quot;&gt;PMI 2017&lt;/a&gt;) 中，是这样描述 PMO 的：
&lt;/p&gt;

&lt;p&gt;
The PMO exists to &lt;b&gt;shepherd&lt;/b&gt; business value throughout the
organization.
&lt;/p&gt;

&lt;p&gt;
PMO 的存在是为了引领业务价值。这里用了作为动词形式的 shepherd。作为名词，这个词的意思是牧羊人。
&lt;/p&gt;

&lt;p&gt;
事实上，shepherd 的前半部分 shep 是 sheep 绵羊的比较古老的写法。而herd
则是牧人。合起来，就是绵羊牧人。
&lt;/p&gt;

&lt;p&gt;
那么，女牧羊人，或者牧羊女，则成为 shepherdess。
&lt;/p&gt;

&lt;p&gt;
这里还要注意一下， shepherd 中的 h 是不发音的，读若 sheperd。
&lt;/p&gt;

&lt;p&gt;
在另一本产品管理的小册子中，Jim Semick 写道 The product roadmap and
product backlog serve distinct but complementary roles in helping a
product manager &lt;b&gt;shepherd&lt;/b&gt; a product from early strategic
conceptualization all the way through development and market release.
&lt;/p&gt;

&lt;p&gt;
这里 shepherd 也引伸为引领、指引、推进的意思。
&lt;/p&gt;

&lt;p&gt;
&lt;b&gt;References&lt;/b&gt;
&lt;/p&gt;
&lt;style&gt;.csl-entry{text-indent: -1.5em; margin-left: 1.5em;}&lt;/style&gt;&lt;div class=&quot;csl-bib-body&quot;&gt;
  &lt;div class=&quot;csl-entry&quot;&gt;&lt;a id=&quot;citeproc_bib_item_1&quot;&gt;&lt;/a&gt;PMI. 2017. &lt;i&gt;Agile Practice Guide&lt;/i&gt;.&lt;/div&gt;
&lt;/div&gt;
</content>
 </entry>
 
 <entry>
   <title>单词本：modus operandi</title>
   <link href="http://kimi.im/2023-04-23-latin-modus-operandi"/>
   <updated>2023-04-23T00:00:00+00:00</updated>
   <id>http://kimi.im/latin-modus-operandi</id>
   <content type="html">&lt;p&gt;
CYBOK (&lt;a href=&quot;#citeproc_bib_item_2&quot;&gt;Rashid et al. 2021&lt;/a&gt;) 提到了系统攻击者的攻击行为的特点时，这么写的：
&lt;/p&gt;

&lt;p&gt;
It is reasonable to assume that the same actors will follow a similar
&lt;b&gt;modus operandi&lt;/b&gt; in their attacks, and in particular will use the same
software exploits to break into their victims&amp;rsquo; systems.
&lt;/p&gt;

&lt;p&gt;
这里modus operandi的意思是“特殊做法”、作案手段。这个词本来是拉丁语中“操作方法”的意思。modus 是方法，operandi 是操作。合起来是操作方法。但是，在英语里，这个普普通通的操作方法有了特殊做法的意思。
&lt;/p&gt;

&lt;p&gt;
这就好像，我们古文中说的“道术”，道就是规律、道理。术就是技术、方法。合起来其实就是操作方法的意思吧。但是，因为有了历史的沉淀，道术的意思就很微妙，是一种带有阴谋论的政治权术操控方法论。
&lt;/p&gt;


&lt;p&gt;
OT:ICEFALL (&lt;a href=&quot;#citeproc_bib_item_1&quot;&gt;LABS 2022&lt;/a&gt;) 探寻了很多 OT 技术中的不安全漏洞，提到：Abusing insecure-by-design native capabilities of OT equipment
is the preferred &lt;b&gt;modus operandi&lt;/b&gt; of real-world ICS attackers. OT 设备本身的不安全设计成了 ICS 攻击者经常利用来进行攻击的作案手段。
&lt;/p&gt;

&lt;p&gt;
与 modus 相关单词还有比如 incommode 添麻烦，比如 We do not ask others
to be faultless, we only ask their faults should not &lt;b&gt;incommode&lt;/b&gt; to our
own. 我们不要求他人完美无缺，我们只要求他们的缺陷不会妨碍我们。
&lt;/p&gt;

&lt;p&gt;
commodious 宽敞的，方便的。比如 A stop-gap measure merely serves as a
&lt;b&gt;commodious&lt;/b&gt; addition to some short-sighted result-driven
politicians. 一项权宜之计只是为一些目光短浅、以结果为导向的政客提供了方便。
&lt;/p&gt;

&lt;p&gt;
&lt;b&gt;References&lt;/b&gt;
&lt;/p&gt;
&lt;style&gt;.csl-entry{text-indent: -1.5em; margin-left: 1.5em;}&lt;/style&gt;&lt;div class=&quot;csl-bib-body&quot;&gt;
  &lt;div class=&quot;csl-entry&quot;&gt;&lt;a id=&quot;citeproc_bib_item_1&quot;&gt;&lt;/a&gt;LABS, VEDERE. 2022. “OT:ICEFALL - the Legacy of ‘Insecure by Design’ and Its Implications for Certifications and Risk Management.” Forescout Technologies, Inc.&lt;/div&gt;
  &lt;div class=&quot;csl-entry&quot;&gt;&lt;a id=&quot;citeproc_bib_item_2&quot;&gt;&lt;/a&gt;Rashid, Awais, Howard Chivers, Emil Lupu, Andrew Martin, and Steve Schneider. 2021. &lt;i&gt;The Cyber Security Body of Knowledge&lt;/i&gt;.&lt;/div&gt;
&lt;/div&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines ES.47 用 nullptr，不要用 0 或 NULL</title>
   <link href="http://kimi.im/2023-04-21-cppcoreguidelines-es47"/>
   <updated>2023-04-21T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-es47</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;Use &lt;code&gt;nullptr&lt;/code&gt; rather than 0 or &lt;code&gt;NULL&lt;/code&gt;&amp;rdquo;
&lt;/p&gt;

&lt;p&gt;
理由
&lt;/p&gt;

&lt;p&gt;
可读性。减少出人意料： &lt;code&gt;nullptr&lt;/code&gt; 不会和 &lt;code&gt;int&lt;/code&gt; 混淆在一起。 &lt;code&gt;nullptr&lt;/code&gt; 也是一种完整定义的类型。所以不太会被推演成错误的东西。 &lt;code&gt;NULL&lt;/code&gt; 和 &lt;code&gt;0&lt;/code&gt; 则很容易被当成数值。
&lt;/p&gt;

&lt;p&gt;
例子
&lt;/p&gt;

&lt;p&gt;
考虑：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;
&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;char&lt;/span&gt;*&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;
f&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;0&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;         &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;call f(int)&lt;/span&gt;
f&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;nullptr&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;call f(char*)&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
强化
&lt;/p&gt;

&lt;p&gt;
标记所有以 &lt;code&gt;NULL&lt;/code&gt; 和 &lt;code&gt;0&lt;/code&gt; 作为指针的地方。工具可能可以进行简单的代码调整。
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>单词本：impromptu</title>
   <link href="http://kimi.im/2023-04-21-latin-impromptu"/>
   <updated>2023-04-21T00:00:00+00:00</updated>
   <id>http://kimi.im/latin-impromptu</id>
   <content type="html">&lt;p&gt;
Kyuchang Kang, et. al.  (&lt;a href=&quot;#citeproc_bib_item_2&quot;&gt;Kang, Lee, and Choi 2007&lt;/a&gt;) 写了一个关于小设备部署机制的论文，其中提到了 Jini 技术： The Jini technology provides simple
mechanisms that enable devices to form &lt;b&gt;impromptu&lt;/b&gt; communities, which
can be assembled without any planning, installation, or human
intervention.
&lt;/p&gt;

&lt;p&gt;
文中的 &lt;b&gt;impromptu&lt;/b&gt; 意思是没有提前准备的，即兴的。这个词来自拉丁语 in
promptu ，promptu 是 promptus 的离格形式，动词原形是 promere 产生、激发。in promptu可以理解为现场激发的。
&lt;/p&gt;

&lt;p&gt;
Peter Cappelli (&lt;a href=&quot;#citeproc_bib_item_1&quot;&gt;Cappelli 2021&lt;/a&gt;) 关于未来企业的企业办公室，也用到这个词：Companies made &lt;b&gt;impromptu&lt;/b&gt; decisions to cope with the
pandemic&amp;rsquo;s ever-changing parameters. 公司在没有准备的情况下，作出一些决定，应对新冠隔离。
&lt;/p&gt;

&lt;p&gt;
&lt;b&gt;Impromptu&lt;/b&gt; 也是即兴曲的意思，比如萧邦的 Fantaisie-impromptu（Op.66）。
&lt;/p&gt;

&lt;p&gt;
&lt;b&gt;References&lt;/b&gt;
&lt;/p&gt;
&lt;style&gt;.csl-entry{text-indent: -1.5em; margin-left: 1.5em;}&lt;/style&gt;&lt;div class=&quot;csl-bib-body&quot;&gt;
  &lt;div class=&quot;csl-entry&quot;&gt;&lt;a id=&quot;citeproc_bib_item_1&quot;&gt;&lt;/a&gt;Cappelli, Peter. 2021. &lt;i&gt;The Future of the Office: Work from Home, Remote Work, and the Hard Choices We All Face&lt;/i&gt;. Wharton School Press.&lt;/div&gt;
  &lt;div class=&quot;csl-entry&quot;&gt;&lt;a id=&quot;citeproc_bib_item_2&quot;&gt;&lt;/a&gt;Kang, Kyuchang, Jeunwoo Lee, and Hoon Choi. 2007. “Device Detection and Driver Provisioning Mechanism for Small Devices.” &lt;i&gt;The 9th International Conference on Advanced Communication Technology&lt;/i&gt; 3: 1587–90.&lt;/div&gt;
&lt;/div&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines ES.46 避免那些导致精度损失的变窄、截断数值类型转换</title>
   <link href="http://kimi.im/2023-04-20-cppcoreguidelines-es46"/>
   <updated>2023-04-20T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-es46</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;Avoid lossy (narrowing, truncating) arithmetic conversions&amp;rdquo;
&lt;/p&gt;

&lt;p&gt;
坏例子
&lt;/p&gt;

&lt;p&gt;
变窄类型转换操作
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;double&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;d&lt;/span&gt; = 7.9;
&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;i&lt;/span&gt; = d;    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;bad: narrowing: i becomes 7&lt;/span&gt;
cout &amp;lt;&amp;lt; d &amp;lt;&amp;lt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;, &quot;&lt;/span&gt; &amp;lt;&amp;lt; i &amp;lt;&amp;lt; endl;
i = &lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt; d;  &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;bad: we&apos;re going to claim this is still not explicit enough&lt;/span&gt;
cout &amp;lt;&amp;lt; d &amp;lt;&amp;lt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;, &quot;&lt;/span&gt; &amp;lt;&amp;lt; i &amp;lt;&amp;lt; endl;
&lt;/pre&gt;
&lt;/div&gt;

&lt;pre class=&quot;example&quot;&gt;
7.9, 7
7.9, 7
&lt;/pre&gt;


&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;x&lt;/span&gt;, &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;long&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;y&lt;/span&gt;, &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;double&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;d&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;char&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;c1&lt;/span&gt; = x;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;bad: narrowing&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;char&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;c2&lt;/span&gt; = y;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;bad: narrowing&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;char&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;c3&lt;/span&gt; = d;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;bad: narrowing&lt;/span&gt;
    cout &amp;lt;&amp;lt; c1 &amp;lt;&amp;lt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;, &quot;&lt;/span&gt; &amp;lt;&amp;lt; c2 &amp;lt;&amp;lt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;, &quot;&lt;/span&gt; &amp;lt;&amp;lt; c3;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;

&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;main&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    f&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;10099, 1000000099, 9999990.999999&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; EXIT_SUCCESS;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;pre class=&quot;example&quot;&gt;
s, c, v
&lt;/pre&gt;




&lt;p&gt;
注意
&lt;/p&gt;

&lt;p&gt;
指南支持库 GSL 提供&lt;code&gt;narrow_cast&lt;/code&gt;操作和 &lt;code&gt;narrow&lt;/code&gt; 操作。如果允许数值丢失，那么可以用&lt;code&gt;narrow_cast&lt;/code&gt;；如果认为数值丢失是一种错误，那么用 &lt;code&gt;narrow&lt;/code&gt; 操作，如果类型转换的过程中数值丢失，它会抛出&lt;code&gt;narrow_error&lt;/code&gt;。
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;double&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;d&lt;/span&gt; = 7.9;
&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;double&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;d2&lt;/span&gt; = 8.0;
&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;i&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;{}&lt;/span&gt;;
i = &lt;span style=&quot;color: #110099;&quot;&gt;gsl&lt;/span&gt;::narrow_cast&lt;span style=&quot;color: #707183;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;gt;(&lt;/span&gt;d&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;OK (you asked for it): narrowing: i becomes 7&lt;/span&gt;
cout &amp;lt;&amp;lt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;gsl::narrow_cast&amp;lt;int&amp;gt;(&quot;&lt;/span&gt; &amp;lt;&amp;lt; d &amp;lt;&amp;lt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;) = &quot;&lt;/span&gt; &amp;lt;&amp;lt;  i &amp;lt;&amp;lt; endl;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;try&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    i = &lt;span style=&quot;color: #110099;&quot;&gt;gsl&lt;/span&gt;::narrow&lt;span style=&quot;color: #7388d6;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;&amp;gt;(&lt;/span&gt;d2&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
    cout &amp;lt;&amp;lt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;gsl::narrow&amp;lt;int&amp;gt;(&quot;&lt;/span&gt; &amp;lt;&amp;lt; fixed &amp;lt;&amp;lt; setprecision&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;1&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;
         &amp;lt;&amp;lt; d2 &amp;lt;&amp;lt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;) = &quot;&lt;/span&gt; &amp;lt;&amp;lt; i &amp;lt;&amp;lt; endl;
    i = &lt;span style=&quot;color: #110099;&quot;&gt;gsl&lt;/span&gt;::narrow&lt;span style=&quot;color: #7388d6;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;&amp;gt;(&lt;/span&gt;d&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;        &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;OK: throws narrowing_error&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;catch&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;gsl&lt;/span&gt;::narrowing_error&amp;amp; e&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    cout &amp;lt;&amp;lt; e.what&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;pre class=&quot;example&quot;&gt;
gsl::narrow_cast&amp;lt;int&amp;gt;(7.9) = 7
gsl::narrow&amp;lt;int&amp;gt;(8.0) = 8
std::exception
&lt;/pre&gt;



&lt;p&gt;
负数浮点类型也可以用 gsl 类型转换操作：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;double&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;d&lt;/span&gt; = -7.9;
&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;unsigned&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;u&lt;/span&gt; = 0;

u = d;                               &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;bad: narrowing&lt;/span&gt;
cout &amp;lt;&amp;lt; u &amp;lt;&amp;lt; endl;

u = &lt;span style=&quot;color: #110099;&quot;&gt;gsl&lt;/span&gt;::narrow_cast&lt;span style=&quot;color: #707183;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;unsigned&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;gt;(&lt;/span&gt;d&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;OK (you asked for it): u&lt;/span&gt;
                                     &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;becomes 4294967289&lt;/span&gt;
cout &amp;lt;&amp;lt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;gsl::narrow_cast&amp;lt;int&amp;gt;(&quot;&lt;/span&gt; &amp;lt;&amp;lt; d &amp;lt;&amp;lt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;) = &quot;&lt;/span&gt; &amp;lt;&amp;lt;  u &amp;lt;&amp;lt; endl;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;try&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    u = &lt;span style=&quot;color: #110099;&quot;&gt;gsl&lt;/span&gt;::narrow&lt;span style=&quot;color: #7388d6;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;unsigned&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;&amp;gt;(&lt;/span&gt;d&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;OK: throws narrowing_error&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;catch&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;gsl&lt;/span&gt;::narrowing_error&amp;amp; e&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    cout &amp;lt;&amp;lt; e.what&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;pre class=&quot;example&quot;&gt;
4294967289
gsl::narrow_cast&amp;lt;int&amp;gt;(-7.9) = 4294967289
std::exception
&lt;/pre&gt;



&lt;p&gt;
注意
&lt;/p&gt;

&lt;p&gt;
此规则不适用于转换到布尔型的某些特殊操作：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;ptr&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt; do_something&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;*ptr&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;OK: ptr is used as a condition&lt;/span&gt;
&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;bool&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;b&lt;/span&gt; = ptr;                  &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;bad: narrowing&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
强化
&lt;/p&gt;

&lt;p&gt;
好的分析工具能检测到所有窄转换操作。然而，把所有窄转换都打上标记，可能会导致太多误报。
&lt;/p&gt;


&lt;p&gt;
建议
&lt;/p&gt;

&lt;p&gt;
标记所有从浮点型到整型的类型转换。也包括浮点到 char，双精度型到 int。
&lt;/p&gt;

&lt;p&gt;
标记所有 &lt;code&gt;long&lt;/code&gt; 到 &lt;code&gt;char&lt;/code&gt; 的类型转换。
&lt;/p&gt;

&lt;p&gt;
函数参数出现窄类型转换也很值得怀疑！
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines ES.45 避免“魔数”，用符号常量</title>
   <link href="http://kimi.im/2023-04-19-cppcoreguidelines-es45"/>
   <updated>2023-04-19T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-es45</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;Avoid “magic constants”; use symbolic constants&amp;rdquo;
&lt;/p&gt;

&lt;p&gt;
理由
&lt;/p&gt;

&lt;p&gt;
表达式中嵌入的常数很容易被忽视，经常很难理解。
&lt;/p&gt;

&lt;p&gt;
例子
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;for&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;m&lt;/span&gt; = 1; m &amp;lt;= 12; ++m&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;don&apos;t: magic constant 12&lt;/span&gt;
    cout &amp;lt;&amp;lt; month&lt;span style=&quot;color: #707183;&quot;&gt;[&lt;/span&gt;m&lt;span style=&quot;color: #707183;&quot;&gt;]&lt;/span&gt; &amp;lt;&amp;lt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&apos;\n&apos;&lt;/span&gt;;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
不一定大家都知道一年有 12 个月，分别是 1 到 12。
&lt;/p&gt;

&lt;p&gt;
更好的例子
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;months are indexed 1..12&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;constexpr&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;first_month&lt;/span&gt; = 1;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;constexpr&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;last_month&lt;/span&gt; = 12;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;for&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;m&lt;/span&gt; = first_month; m &amp;lt;= last_month; ++m&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;better&lt;/span&gt;
    cout &amp;lt;&amp;lt; month&lt;span style=&quot;color: #707183;&quot;&gt;[&lt;/span&gt;m&lt;span style=&quot;color: #707183;&quot;&gt;]&lt;/span&gt; &amp;lt;&amp;lt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&apos;\n&apos;&lt;/span&gt;;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
更加好的方法，不暴露常量：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;for&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;auto&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;m&lt;/span&gt; : month&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
    cout &amp;lt;&amp;lt; m &amp;lt;&amp;lt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&apos;\n&apos;&lt;/span&gt;;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
强化
&lt;/p&gt;

&lt;p&gt;
标记代码中的数值，除了 &lt;code&gt;0&lt;/code&gt; ， &lt;code&gt;1&lt;/code&gt; ， &lt;code&gt;nullptr&lt;/code&gt; ， &lt;code&gt;\n&lt;/code&gt; ， &lt;code&gt;&quot;&quot;&lt;/code&gt; 
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines ES.44 代码的正确与否不应该基于函数参数的求值顺序</title>
   <link href="http://kimi.im/2023-04-18-cppcoreguidelines-es44"/>
   <updated>2023-04-18T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-es44</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;Don’t depend on order of evaluation of function arguments&amp;rdquo;
&lt;/p&gt;

&lt;p&gt;
理由
&lt;/p&gt;

&lt;p&gt;
因为函数参数的求值顺序是未定义的行为。
&lt;/p&gt;


&lt;p&gt;
注意
&lt;/p&gt;

&lt;p&gt;
C++17 强化了求值顺序规则：一般都是从左到右，除了赋值操作是从右到左。但是没有定义函数参数列表的求值顺序规则。
&lt;/p&gt;

&lt;p&gt;
例子
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;i&lt;/span&gt; = 0;
&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;a&lt;/span&gt;, &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;b&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt; cout &amp;lt;&amp;lt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;a= &quot;&lt;/span&gt; &amp;lt;&amp;lt; a &amp;lt;&amp;lt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;, b= &quot;&lt;/span&gt; &amp;lt;&amp;lt; b; &lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;main&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    f&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;++i, ++i&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; EXIT_SUCCESS;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;pre class=&quot;example&quot;&gt;
a= 2, b= 1
&lt;/pre&gt;


&lt;p&gt;
在C++17之前，以上代码行为是未定义的。所以任何结果都有可能，比如 &lt;code&gt;f(2,
2)&lt;/code&gt; 。从C++17开始，以上代码不能有未定义行为，但是没有指明哪个参数先求值。所以 &lt;code&gt;f&lt;/code&gt; 的调用可能成了&lt;code&gt;f(1, 2)&lt;/code&gt;也可能是&lt;code&gt;f(2, 1)&lt;/code&gt;，但是不同编译器可以自由选择以哪种方式求值。
&lt;/p&gt;

&lt;p&gt;
例子
&lt;/p&gt;

&lt;p&gt;
重载操作符可能导致求值顺序问题：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;f1&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;-&amp;gt;m&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;f2&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;          &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;m(f1(), f2())&lt;/span&gt;
cout &amp;lt;&amp;lt; f1&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt; &amp;lt;&amp;lt; f2&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;operator&amp;lt;&amp;lt;(operator&amp;lt;&amp;lt;(cout, f1()), f2())&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
在C++17中，这个例子按照预期求值：从左到右。赋值操作从右到左。
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;f1&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt; = f2&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;;    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;undefined behavior in C++14; in C++17, f2() is&lt;/span&gt;
                &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;evaluated before f1()&lt;/span&gt;

&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;
强化
&lt;/p&gt;

&lt;p&gt;
好的代码分析工具能够提出告警
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines ES.43 避免求值顺序未定义的表达式</title>
   <link href="http://kimi.im/2023-04-17-cppcoreguidelines-es43"/>
   <updated>2023-04-17T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-es43</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;Avoid expressions with undefined order of evaluation&amp;rdquo;
&lt;/p&gt;

&lt;p&gt;
理由
&lt;/p&gt;

&lt;p&gt;
有时候你无法判断代码到底做什么。可移植性的考量。就算你自己清楚代码在做什么，不同的编译器可能有不同的翻译。甚至你当前用的编译器的下一个版本翻译的都会不一样。或者不同的编译器选项会导致不同的求值结果。
&lt;/p&gt;

&lt;p&gt;
注意
&lt;/p&gt;

&lt;p&gt;
C++17 强化了求值顺序规则：一般都是从左到右，除了赋值操作是从右到左。但是没有定义函数参数列表的求值顺序规则。
&lt;/p&gt;

&lt;p&gt;
请记住，如果你的代码能用C++17之前的编译器编译，但是不要太侥幸。
&lt;/p&gt;


&lt;p&gt;
例子
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;i&lt;/span&gt; = 10;
&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;v&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;[&lt;/span&gt;20&lt;span style=&quot;color: #707183;&quot;&gt;]&lt;/span&gt;;

v&lt;span style=&quot;color: #707183;&quot;&gt;[&lt;/span&gt;i&lt;span style=&quot;color: #707183;&quot;&gt;]&lt;/span&gt; = ++i;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;//  &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;the result is undefined&lt;/span&gt;
cout &amp;lt;&amp;lt; v&lt;span style=&quot;color: #707183;&quot;&gt;[&lt;/span&gt;i&lt;span style=&quot;color: #707183;&quot;&gt;]&lt;/span&gt;;
&lt;/pre&gt;
&lt;/div&gt;

&lt;pre class=&quot;example&quot;&gt;
11
&lt;/pre&gt;


&lt;p&gt;
总归一句话，不要在一个表达式中多次读取一个变量的值。
&lt;/p&gt;

&lt;p&gt;
强化
&lt;/p&gt;

&lt;p&gt;
好的代码分析工具能够提出告警。
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines ES.42 确保指针的使用简单明了</title>
   <link href="http://kimi.im/2023-04-15-cppcoreguidelines-es42"/>
   <updated>2023-04-15T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-es42</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;Keep use of pointers simple and straightforward&amp;rdquo;
&lt;/p&gt;

&lt;p&gt;
理由
&lt;/p&gt;

&lt;p&gt;
复杂的指针操作是导致故障的根源。
&lt;/p&gt;


&lt;p&gt;
注意
&lt;/p&gt;

&lt;p&gt;
请使用&lt;code&gt;gsl::span&lt;/code&gt;。指针应该只指向一个对象。指针的数值计算很容易出错误，是大量严重 bug 和安全隐患的根源。用 &lt;code&gt;span&lt;/code&gt;就能以边界检测、类型安全的方式访问数组数据。如果我们通过常量访问已知边界长度的数组，编译器能够帮助我们验证数组下标是否合法。
&lt;/p&gt;

&lt;p&gt;
坏例子
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt;* &lt;span style=&quot;color: #000000;&quot;&gt;p&lt;/span&gt;, &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;count&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;count &amp;lt; 2&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt;;

    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt;* &lt;span style=&quot;color: #000000;&quot;&gt;q&lt;/span&gt; = p + 1;    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;BAD&lt;/span&gt;

    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;ptrdiff_t&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;d&lt;/span&gt;;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;n&lt;/span&gt;;
    d = &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;p - &amp;amp;n&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;      &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;OK&lt;/span&gt;
    d = &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;q - p&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;       &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;OK&lt;/span&gt;

    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;n&lt;/span&gt; = *p++;      &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;BAD&lt;/span&gt;

    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;count &amp;lt; 6&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt;;

    p&lt;span style=&quot;color: #7388d6;&quot;&gt;[&lt;/span&gt;4&lt;span style=&quot;color: #7388d6;&quot;&gt;]&lt;/span&gt; = 1;          &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;BAD&lt;/span&gt;

    p&lt;span style=&quot;color: #7388d6;&quot;&gt;[&lt;/span&gt;count - 1&lt;span style=&quot;color: #7388d6;&quot;&gt;]&lt;/span&gt; = 2;  &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;BAD&lt;/span&gt;

    use&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&amp;amp;p&lt;span style=&quot;color: #909183;&quot;&gt;[&lt;/span&gt;0&lt;span style=&quot;color: #909183;&quot;&gt;]&lt;/span&gt;, 3&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;     &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;BAD&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
好例子
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;span&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;a&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;BETTER: use span in the function declaration&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;a.size&lt;span style=&quot;color: #909183;&quot;&gt;()&lt;/span&gt; &amp;lt; 2&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt;;

    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;n&lt;/span&gt; = a&lt;span style=&quot;color: #7388d6;&quot;&gt;[&lt;/span&gt;0&lt;span style=&quot;color: #7388d6;&quot;&gt;]&lt;/span&gt;;      &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;OK&lt;/span&gt;

    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;span&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;q&lt;/span&gt; = a.subspan&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;1&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;OK&lt;/span&gt;

    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;a.size&lt;span style=&quot;color: #909183;&quot;&gt;()&lt;/span&gt; &amp;lt; 6&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt;;

    a&lt;span style=&quot;color: #7388d6;&quot;&gt;[&lt;/span&gt;4&lt;span style=&quot;color: #7388d6;&quot;&gt;]&lt;/span&gt; = 1;          &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;OK&lt;/span&gt;

    a&lt;span style=&quot;color: #7388d6;&quot;&gt;[&lt;/span&gt;a.size&lt;span style=&quot;color: #909183;&quot;&gt;()&lt;/span&gt; - 1&lt;span style=&quot;color: #7388d6;&quot;&gt;]&lt;/span&gt; = 2;  &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;OK&lt;/span&gt;

    use&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;a.data&lt;span style=&quot;color: #909183;&quot;&gt;()&lt;/span&gt;, 3&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;  &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;OK&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
注意
&lt;/p&gt;

&lt;p&gt;
对于用变量作为下标访问数组的操作，不管是工具还是程序员都很难验证其正确性与安全性。 &lt;code&gt;span&lt;/code&gt; 在运行时会被边界检测，就能以类型安全的方式访问数组数据。&lt;code&gt;at()&lt;/code&gt;是另一个解决方案，可以确保单次访问是被边界检测的。如果需要迭代器访问数组数据，请使用从数组的 &lt;code&gt;span&lt;/code&gt; 生成的迭代器。
&lt;/p&gt;

&lt;p&gt;
坏例子
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;array&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt;, 10&lt;span style=&quot;color: #7388d6;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;a&lt;/span&gt;, &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;pos&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    a&lt;span style=&quot;color: #7388d6;&quot;&gt;[&lt;/span&gt;pos / 2&lt;span style=&quot;color: #7388d6;&quot;&gt;]&lt;/span&gt; = 1; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;BAD&lt;/span&gt;
    a&lt;span style=&quot;color: #7388d6;&quot;&gt;[&lt;/span&gt;pos - 1&lt;span style=&quot;color: #7388d6;&quot;&gt;]&lt;/span&gt; = 2; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;BAD&lt;/span&gt;
    a&lt;span style=&quot;color: #7388d6;&quot;&gt;[&lt;/span&gt;-1&lt;span style=&quot;color: #7388d6;&quot;&gt;]&lt;/span&gt; = 3;    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;BAD (but easily caught by tools) -- no&lt;/span&gt;
                  &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;replacement, just don&apos;t do this&lt;/span&gt;
    a&lt;span style=&quot;color: #7388d6;&quot;&gt;[&lt;/span&gt;10&lt;span style=&quot;color: #7388d6;&quot;&gt;]&lt;/span&gt; = 4;    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;BAD (but easily caught by tools) -- no&lt;/span&gt;
                  &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;replacement, just don&apos;t do this&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;
好例子
&lt;/p&gt;

&lt;p&gt;
使用 &lt;code&gt;span&lt;/code&gt; ：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;f1&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;span&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt;, 10&lt;span style=&quot;color: #7388d6;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;a&lt;/span&gt;, &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;pos&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;A1: Change parameter type to use span&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    a&lt;span style=&quot;color: #7388d6;&quot;&gt;[&lt;/span&gt;pos / 2&lt;span style=&quot;color: #7388d6;&quot;&gt;]&lt;/span&gt; = 1; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;OK&lt;/span&gt;
    a&lt;span style=&quot;color: #7388d6;&quot;&gt;[&lt;/span&gt;pos - 1&lt;span style=&quot;color: #7388d6;&quot;&gt;]&lt;/span&gt; = 2; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;OK&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;

&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;f2&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;array&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt;, 10&lt;span style=&quot;color: #7388d6;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;arr&lt;/span&gt;, &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;pos&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;A2: Add local span and use that&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;span&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;a&lt;/span&gt; = &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;arr.data&lt;span style=&quot;color: #909183;&quot;&gt;()&lt;/span&gt;, pos&lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;;
    a&lt;span style=&quot;color: #7388d6;&quot;&gt;[&lt;/span&gt;pos / 2&lt;span style=&quot;color: #7388d6;&quot;&gt;]&lt;/span&gt; = 1; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;OK&lt;/span&gt;
    a&lt;span style=&quot;color: #7388d6;&quot;&gt;[&lt;/span&gt;pos - 1&lt;span style=&quot;color: #7388d6;&quot;&gt;]&lt;/span&gt; = 2; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;OK&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
使用 &lt;code&gt;at()&lt;/code&gt;
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;f3&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;array&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt;, 10&lt;span style=&quot;color: #7388d6;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;a&lt;/span&gt;, &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;pos&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;ALTERNATIVE B: Use at() for access&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    at&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;a, pos / 2&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; = 1; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;OK&lt;/span&gt;
    at&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;a, pos - 1&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; = 2; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;OK&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;
坏例子
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;arr&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;[&lt;/span&gt;COUNT&lt;span style=&quot;color: #7388d6;&quot;&gt;]&lt;/span&gt;;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;for&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;i&lt;/span&gt; = 0; i &amp;lt; COUNT; ++i&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;
        arr&lt;span style=&quot;color: #7388d6;&quot;&gt;[&lt;/span&gt;i&lt;span style=&quot;color: #7388d6;&quot;&gt;]&lt;/span&gt; = i; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;BAD, cannot use non-constant indexer&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
好例子
&lt;/p&gt;

&lt;p&gt;
使用 &lt;code&gt;span&lt;/code&gt;
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;#include&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #2A00FF;&quot;&gt;gsl/gsl&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;using&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;namespace&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;gsl&lt;/span&gt;;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;constexpr&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;COUNT&lt;/span&gt; = 10;
&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;f1&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;arr&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;[&lt;/span&gt;COUNT&lt;span style=&quot;color: #7388d6;&quot;&gt;]&lt;/span&gt;;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;span&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;av&lt;/span&gt; = arr;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;for&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;i&lt;/span&gt; = 0; i &amp;lt; COUNT; ++i&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;
        av&lt;span style=&quot;color: #909183;&quot;&gt;[&lt;/span&gt;i&lt;span style=&quot;color: #909183;&quot;&gt;]&lt;/span&gt; = i;
        cout &amp;lt;&amp;lt; av&lt;span style=&quot;color: #909183;&quot;&gt;[&lt;/span&gt;i&lt;span style=&quot;color: #909183;&quot;&gt;]&lt;/span&gt; &amp;lt;&amp;lt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;, &quot;&lt;/span&gt;;
    &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;main&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    f1&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt;;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; EXIT_SUCCESS;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;pre class=&quot;example&quot;&gt;
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 
&lt;/pre&gt;


&lt;p&gt;
使用 &lt;code&gt;span&lt;/code&gt; 和带范围的 &lt;code&gt;for&lt;/code&gt;
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;#include&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #2A00FF;&quot;&gt;gsl/gsl&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;using&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;namespace&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;gsl&lt;/span&gt;;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;constexpr&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;COUNT&lt;/span&gt; = 10;
&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;f1a&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
     &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;arr&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;[&lt;/span&gt;COUNT&lt;span style=&quot;color: #7388d6;&quot;&gt;]&lt;/span&gt;;
     &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;span&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt;, COUNT&lt;span style=&quot;color: #7388d6;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;av&lt;/span&gt; = arr;
     &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;i&lt;/span&gt; = 0;
     &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;for&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;auto&lt;/span&gt;&amp;amp; &lt;span style=&quot;color: #000000;&quot;&gt;e&lt;/span&gt; : av&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;         
         e = i++;
         cout &amp;lt;&amp;lt; e &amp;lt;&amp;lt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;, &quot;&lt;/span&gt;;
     &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;main&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    f1a&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt;;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; EXIT_SUCCESS;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;pre class=&quot;example&quot;&gt;
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 
&lt;/pre&gt;



&lt;p&gt;
使用&lt;code&gt;at()&lt;/code&gt;访问
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;#include&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #2A00FF;&quot;&gt;gsl/gsl&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;using&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;namespace&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;gsl&lt;/span&gt;;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;constexpr&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;COUNT&lt;/span&gt; = 10;
&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;f2&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;arr&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;[&lt;/span&gt;COUNT&lt;span style=&quot;color: #7388d6;&quot;&gt;]&lt;/span&gt;;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;for&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;i&lt;/span&gt; = 0; i &amp;lt; COUNT; ++i&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;
        at&lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;arr, i&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt; = i;
        cout &amp;lt;&amp;lt; at&lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;arr, i&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt; &amp;lt;&amp;lt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;, &quot;&lt;/span&gt;;
    &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;main&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    f2&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt;;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; EXIT_SUCCESS;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;pre class=&quot;example&quot;&gt;
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 
&lt;/pre&gt;


&lt;p&gt;
使用带范围的 &lt;code&gt;for&lt;/code&gt;
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;constexpr&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;COUNT&lt;/span&gt; = 10;
&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;f3&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;arr&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;[&lt;/span&gt;COUNT&lt;span style=&quot;color: #7388d6;&quot;&gt;]&lt;/span&gt;;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;i&lt;/span&gt; = 0;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;for&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;auto&lt;/span&gt;&amp;amp; &lt;span style=&quot;color: #000000;&quot;&gt;e&lt;/span&gt; : arr&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;
         e = i++;
         cout &amp;lt;&amp;lt; e &amp;lt;&amp;lt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;, &quot;&lt;/span&gt;;
    &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;main&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    f3&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt;;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; EXIT_SUCCESS;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;pre class=&quot;example&quot;&gt;
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 
&lt;/pre&gt;




&lt;p&gt;
注意
&lt;/p&gt;

&lt;p&gt;
工具可以用&lt;code&gt;at()&lt;/code&gt;替换掉用动态索引访问数组的代码：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;#include&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #2A00FF;&quot;&gt;gsl/gsl&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;using&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;namespace&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;gsl&lt;/span&gt;;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;static&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;a&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;[&lt;/span&gt;10&lt;span style=&quot;color: #707183;&quot;&gt;]&lt;/span&gt;;

&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;i&lt;/span&gt;, &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;j&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    a&lt;span style=&quot;color: #7388d6;&quot;&gt;[&lt;/span&gt;i + j&lt;span style=&quot;color: #7388d6;&quot;&gt;]&lt;/span&gt; = 12;      &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;BAD, could be rewritten as ...&lt;/span&gt;
    at&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;a, i + j&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; = 12;  &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;OK -- bounds-checked&lt;/span&gt;
    cout &amp;lt;&amp;lt; at&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;a, i + j&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;main&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    f&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;2, 3&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; EXIT_SUCCESS;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;pre class=&quot;example&quot;&gt;
12
&lt;/pre&gt;



&lt;p&gt;
例子
&lt;/p&gt;

&lt;p&gt;
如果用指针传递数组，则没有机会进行边界检测了。所以尽量避免。
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;g&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt;* &lt;span style=&quot;color: #000000;&quot;&gt;p&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;

&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;a&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;[&lt;/span&gt;5&lt;span style=&quot;color: #7388d6;&quot;&gt;]&lt;/span&gt;;
    g&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;a&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;        &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;BAD: are we trying to pass an array?&lt;/span&gt;
    g&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&amp;amp;a&lt;span style=&quot;color: #909183;&quot;&gt;[&lt;/span&gt;0&lt;span style=&quot;color: #909183;&quot;&gt;]&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;OK: passing one object&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;
如果你要传递一个数组，可以这样写：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;g&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt;* &lt;span style=&quot;color: #000000;&quot;&gt;p&lt;/span&gt;, &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;size_t&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;length&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;  &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;old (dangerous) code&lt;/span&gt;

&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;g1&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;span&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;av&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;BETTER: get g() changed.&lt;/span&gt;

&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;f2&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;a&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;[&lt;/span&gt;5&lt;span style=&quot;color: #7388d6;&quot;&gt;]&lt;/span&gt;;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;span&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;av&lt;/span&gt; = a;

    g&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;av.data&lt;span style=&quot;color: #909183;&quot;&gt;()&lt;/span&gt;, av.size&lt;span style=&quot;color: #909183;&quot;&gt;()&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;OK, if you have no choice&lt;/span&gt;
    g1&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;a&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;                     &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;OK -- no decay here, instead use&lt;/span&gt;
                               &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;implicit span ctor&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;
强化
&lt;/p&gt;

&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;标记计算结果为指针类型，针对指针的算术操作。&lt;/li&gt;
&lt;li&gt;标记索引下标不是有效范围内的常量，且针对表达式或数组类变量的下标操作。&lt;/li&gt;
&lt;li&gt;标记隐式地将数组类型转换成指针的操作。&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
此规则是边界安全规则集的一部分。 
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines ES.41 如果不确定操作符优先级，添加括号</title>
   <link href="http://kimi.im/2023-04-14-cppcoreguidelines-es41"/>
   <updated>2023-04-14T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-es41</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;If in doubt about operator precedence, parenthesize&amp;rdquo;
&lt;/p&gt;

&lt;p&gt;
理由
&lt;/p&gt;

&lt;p&gt;
避免错误。可读性。并非每个人都记得操作符优先级表格。
&lt;/p&gt;

&lt;p&gt;
例子
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;unsigned&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;flag&lt;/span&gt; = 2;
&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;unsigned&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;a&lt;/span&gt; = flag;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;a&lt;/span&gt; &amp;amp; &lt;span style=&quot;color: #000000;&quot;&gt;flag&lt;/span&gt; != 0&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;  &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;bad: means a&amp;amp;(flag != 0)&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;
注意：
&lt;/p&gt;

&lt;p&gt;
我们建议程序员熟悉算术操作符、逻辑操作符的优先级顺序。但是针对位操作符和其他操作符混合在一起的运算，建议添加括号。
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;a&lt;/span&gt; &amp;amp; &lt;span style=&quot;color: #000000;&quot;&gt;flag&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; != 0&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;  &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;OK: works as intended&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;
注意
&lt;/p&gt;

&lt;p&gt;
你应该清楚哪些情况不要添加多余的括号，比如：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;a &amp;lt; 0 || a &amp;lt;= max&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;...&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;
强化
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;标记位操作符和其他操作符混用的情况&lt;/li&gt;
&lt;li&gt;标记赋值操作符不在最左边的情况&lt;/li&gt;
&lt;/ul&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines ES.40 避免复杂的表达式</title>
   <link href="http://kimi.im/2023-04-13-cppcoreguidelines-es40"/>
   <updated>2023-04-13T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-es40</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;Avoid complicated expressions&amp;rdquo;
&lt;/p&gt;

&lt;p&gt;
理由
&lt;/p&gt;

&lt;p&gt;
复杂表达式容易出错。
&lt;/p&gt;

&lt;p&gt;
例子
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;bad: assignment hidden in subexpression&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;while&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;c = getc&lt;span style=&quot;color: #909183;&quot;&gt;()&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; != -1&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;

&lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;bad: two non-local variables assigned in sub-expressions&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;while&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;cin &amp;gt;&amp;gt; c1, cin &amp;gt;&amp;gt; c2&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;, c1 == c2&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;

&lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;better, but possibly still too complicated&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;for&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;char&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;c1&lt;/span&gt;, &lt;span style=&quot;color: #000000;&quot;&gt;c2&lt;/span&gt;; cin &amp;gt;&amp;gt; c1 &amp;gt;&amp;gt; c2 &amp;amp;&amp;amp; c1 == c2;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;

&lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;OK: if i and j are not aliased&lt;/span&gt;
&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;x&lt;/span&gt; = ++i + ++j;

&lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;OK: if i != j and i != k&lt;/span&gt;
v&lt;span style=&quot;color: #707183;&quot;&gt;[&lt;/span&gt;i&lt;span style=&quot;color: #707183;&quot;&gt;]&lt;/span&gt; = v&lt;span style=&quot;color: #707183;&quot;&gt;[&lt;/span&gt;j&lt;span style=&quot;color: #707183;&quot;&gt;]&lt;/span&gt; + v&lt;span style=&quot;color: #707183;&quot;&gt;[&lt;/span&gt;k&lt;span style=&quot;color: #707183;&quot;&gt;]&lt;/span&gt;;

&lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;bad: multiple assignments &quot;hidden&quot; in subexpressions&lt;/span&gt;
x = a + &lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;b = f&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt; + &lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;c = g&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt; * 7;

&lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;bad: relies on commonly misunderstood precedence rules&lt;/span&gt;
x = a &amp;amp; b + c * d &amp;amp;&amp;amp; e ^ f == 7;

&lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;bad: undefined behavior&lt;/span&gt;
x = x++ + x++ + ++x;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
有些表达式肯定是不好的（比如，他们依赖于未定义的行为）。其他的，就是太复杂，哪怕熟练的程序员也不能理解或在匆忙中忽视其中的问题。
&lt;/p&gt;


&lt;p&gt;
注意
&lt;/p&gt;

&lt;p&gt;
C++17 加强了求值顺序的规则（除了赋值操作，其他都是从左到右，不规定函数参数的求值顺序），但是不变的实事是，复杂表达式很容易误解。
&lt;/p&gt;

&lt;p&gt;
注意
&lt;/p&gt;

&lt;p&gt;
程序员应该会使用最基本的表达式规则。
&lt;/p&gt;

&lt;p&gt;
比如
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;x = k * y + z;             &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;OK&lt;/span&gt;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;auto&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;t1&lt;/span&gt; = k * y;           &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;bad: unnecessarily verbose&lt;/span&gt;
x = t1 + z;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;0 &amp;lt;= x &amp;amp;&amp;amp; x &amp;lt; max&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;OK&lt;/span&gt;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;auto&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;t1&lt;/span&gt; = 0 &amp;lt;= x;        &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;bad: unnecessarily verbose&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;auto&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;t2&lt;/span&gt; = x &amp;lt; max;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;t1&lt;/span&gt; &amp;amp;&amp;amp; &lt;span style=&quot;color: #000000;&quot;&gt;t2&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;            &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;...&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;
强化
&lt;/p&gt;

&lt;p&gt;
比较麻烦。到底多复杂的表达式算太复杂？一个语句进行一次计算也容易导致误解。
&lt;/p&gt;

&lt;p&gt;
需要考虑的事情：
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;副作用：对多个非局部变量产生副作用的操作。尤其是副作用分散在多个不同的子表达式中。&lt;/li&gt;
&lt;li&gt;改写别名变量。&lt;/li&gt;
&lt;li&gt;多余 N 个操作符。N = 多少？&lt;/li&gt;
&lt;li&gt;基于晦涩的优先级规则。&lt;/li&gt;
&lt;li&gt;使用未定义的行为。&lt;/li&gt;
&lt;li&gt;使用不同实现定义的不同行为。&lt;/li&gt;
&lt;/ul&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines ES.34 不要定义 C 风格的可变长参数的函数</title>
   <link href="http://kimi.im/2023-04-12-cppcoreguidelines-es34"/>
   <updated>2023-04-12T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-es34</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;Don’t define a (C-style) variadic function&amp;rdquo;
&lt;/p&gt;

&lt;p&gt;
理由
&lt;/p&gt;

&lt;p&gt;
类型不安全。需要杂乱的加载宏和类型转换才可以让代码正确工作。
&lt;/p&gt;


&lt;p&gt;
例子
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;#include&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #2A00FF;&quot;&gt;cstdarg&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;gt;&lt;/span&gt;

&lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;&quot;severity&quot; followed by a zero-terminated list of char*s; write the&lt;/span&gt;
&lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;C-style strings to cerr&lt;/span&gt;
&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;error&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;severity&lt;/span&gt; ...&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;va_list&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;ap&lt;/span&gt;;             &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;a magic type for holding arguments&lt;/span&gt;
    va_start&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;ap, severity&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;arg startup: &quot;severity&quot; is the first&lt;/span&gt;
                            &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;argument of error()&lt;/span&gt;

    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;for&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;;;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;
        &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;treat the next var as a char*; no checking: a cast in&lt;/span&gt;
        &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;disguise&lt;/span&gt;
        &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;char&lt;/span&gt;* &lt;span style=&quot;color: #000000;&quot;&gt;p&lt;/span&gt; = va_arg&lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;ap, &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;char&lt;/span&gt;*&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt;;
        &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;!p&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;break&lt;/span&gt;;
        cout &amp;lt;&amp;lt; p &amp;lt;&amp;lt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&apos; &apos;&lt;/span&gt;;
    &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;

    va_end&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;ap&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;             &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;arg cleanup (don&apos;t forget this)&lt;/span&gt;

    cout &amp;lt;&amp;lt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&apos;\n&apos;&lt;/span&gt;;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;severity&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; exit&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;severity&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;

&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;use&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    error&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;7, &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;this&quot;&lt;/span&gt;, &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;is&quot;&lt;/span&gt;, &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;an&quot;&lt;/span&gt;, &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;error&quot;&lt;/span&gt;, &lt;span style=&quot;color: #110099;&quot;&gt;nullptr&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
    error&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;7&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;crash&lt;/span&gt;
    error&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;7, &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;this&quot;&lt;/span&gt;, &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;is&quot;&lt;/span&gt;, &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;an&quot;&lt;/span&gt;, &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;error&quot;&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;  &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;crash&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;char&lt;/span&gt;* &lt;span style=&quot;color: #000000;&quot;&gt;is&lt;/span&gt; = &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;is&quot;&lt;/span&gt;;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;string&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;an&lt;/span&gt; = &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;an&quot;&lt;/span&gt;;
    error&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;7, &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;this&quot;&lt;/span&gt;, &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;is&quot;&lt;/span&gt;, an, &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;error&quot;&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;crash&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;main&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    use&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt;;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; EXIT_SUCCESS;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;pre class=&quot;example&quot;&gt;
this is an error 
&lt;/pre&gt;



&lt;p&gt;
替代方案：重载。模板。可变参数模板。
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;#include&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #2A00FF;&quot;&gt;iostream&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;gt;&lt;/span&gt;

&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;error&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;severity&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #110099;&quot;&gt;std&lt;/span&gt;::cerr &amp;lt;&amp;lt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&apos;\n&apos;&lt;/span&gt;;
    &lt;span style=&quot;color: #110099;&quot;&gt;std&lt;/span&gt;::exit&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;severity&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;template&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;typename&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt;, &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;typename&lt;/span&gt;... &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Ts&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;constexpr&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;error&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;severity&lt;/span&gt;, &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;head&lt;/span&gt;, &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Ts&lt;/span&gt;... &lt;span style=&quot;color: #000000;&quot;&gt;tail&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #110099;&quot;&gt;std&lt;/span&gt;::cerr &amp;lt;&amp;lt; head;
    error&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;severity, tail...&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;

&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;use&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    error&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;7&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;No crash!&lt;/span&gt;
    error&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;5, &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;this&quot;&lt;/span&gt;, &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;is&quot;&lt;/span&gt;, &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;not&quot;&lt;/span&gt;, &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;an&quot;&lt;/span&gt;, &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;error&quot;&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;No crash!&lt;/span&gt;

    &lt;span style=&quot;color: #110099;&quot;&gt;std&lt;/span&gt;::&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;string&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;an&lt;/span&gt; = &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;an&quot;&lt;/span&gt;;
    error&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;7, &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;this&quot;&lt;/span&gt;, &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;is&quot;&lt;/span&gt;, &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;not&quot;&lt;/span&gt;, an, &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;error&quot;&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;No crash!&lt;/span&gt;

    error&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;5, &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;oh&quot;&lt;/span&gt;, &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;no&quot;&lt;/span&gt;, &lt;span style=&quot;color: #110099;&quot;&gt;nullptr&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;Compile error! No need for nullptr.&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;
注意
&lt;/p&gt;

&lt;p&gt;
大体上， &lt;code&gt;printf&lt;/code&gt; 都是这么实现的。
&lt;/p&gt;


&lt;p&gt;
强化
&lt;/p&gt;

&lt;p&gt;
标记定义 C 风格可变参数函数之处。
&lt;/p&gt;

&lt;p&gt;
标记&lt;code&gt;#includ &amp;lt;cstdarg&amp;gt;&lt;/code&gt;和 &lt;code&gt;#include &amp;lt;stdarg.h&amp;gt;&lt;/code&gt; 之处。
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines ES.33 如果必须用到宏，请使用独一无二的名字</title>
   <link href="http://kimi.im/2023-04-11-cppcoreguidelines-es33"/>
   <updated>2023-04-11T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-es33</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;If you must use macros, give them unique names&amp;rdquo;
&lt;/p&gt;

&lt;p&gt;
理由
&lt;/p&gt;

&lt;p&gt;
宏不遵循作用域范围规则。
&lt;/p&gt;

&lt;p&gt;
例子
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;#define&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;MYCHAR&lt;/span&gt;        &lt;span style=&quot;color: #3F7F5F;&quot;&gt;/* &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;BAD, will eventually clash with someone else&apos;s MYCHAR&lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;*/&lt;/span&gt;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;#define&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;ZCORP_CHAR&lt;/span&gt;    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;/* &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;Still evil, but less likely to clash&lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt; */&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;
注意
&lt;/p&gt;

&lt;p&gt;
尽量避免使用宏。然而，世界上有大量的代码散乱着各种宏。对宏的过度使用也有相当长的传统。如果你不得不使用宏，请用长名称，并添加独一无二的前缀（比如你的组织的名字），以降低名称冲突的可能性。
&lt;/p&gt;

&lt;p&gt;
强化
&lt;/p&gt;

&lt;p&gt;
对短的宏名称提出警告。
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines ES.32 宏名字要全部大写字母</title>
   <link href="http://kimi.im/2023-04-10-cppcoreguidelines-es32"/>
   <updated>2023-04-10T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-es32</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;Use &lt;code&gt;ALL_CAPS&lt;/code&gt; for all macro names&amp;rdquo;
&lt;/p&gt;

&lt;p&gt;
理由
&lt;/p&gt;

&lt;p&gt;
编码习俗。可读性。容易辨认出宏。
&lt;/p&gt;

&lt;p&gt;
例子
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;#define&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;forever&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;for&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;;;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;/* &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;very BAD&lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt; */&lt;/span&gt;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;#define&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;FOREVER&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;for&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;;;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;/* &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;Still evil, but at least visible to humans&lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt; */&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;
强化
&lt;/p&gt;

&lt;p&gt;
当你看到小写字母组成的宏时，请大声尖叫。
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines ES.31 不要用宏定义常量或“函数”</title>
   <link href="http://kimi.im/2023-04-08-cppcoreguidelines-es31"/>
   <updated>2023-04-08T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-es31</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;Don’t use macros for constants or “ functions ”&amp;rdquo;
&lt;/p&gt;

&lt;p&gt;
理由
&lt;/p&gt;

&lt;p&gt;
很多 bug 是因为宏引起的。宏不遵循通常的作用域范围和类型规则。宏不遵循通常的参数传递规则。开发人员和编译器所看到的宏是有差异的。宏会把编译过程变得复杂。
&lt;/p&gt;

&lt;p&gt;
坏例子
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;#define&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;PI&lt;/span&gt; 3.14
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;#define&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;SQUARE&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;a&lt;/span&gt;, &lt;span style=&quot;color: #000000;&quot;&gt;b&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;a * b&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;
以下例子更好：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;constexpr&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;double&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;pi&lt;/span&gt; = 3.14;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;template&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;typename&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;square&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;a&lt;/span&gt;, &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;b&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; a * b; &lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;
强化
&lt;/p&gt;

&lt;p&gt;
如果宏不是用于源码控制（如&lt;code&gt;#ifdef&lt;/code&gt;等），请尖叫吧
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines ES.30 避免用宏进行程序代码文本操作</title>
   <link href="http://kimi.im/2023-04-08-cppcoreguidelines-es30"/>
   <updated>2023-04-08T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-es30</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;Don’t use macros for program text manipulation&amp;rdquo;
&lt;/p&gt;

&lt;p&gt;
理由
&lt;/p&gt;

&lt;p&gt;
宏是大部分 bug 的根源。宏不遵循作用域范围规则和类型规则。宏使得人和编译器看到的东西不一样。宏使得编译过程更复杂。
&lt;/p&gt;

&lt;p&gt;
坏例子
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;#define&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;Case&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;break&lt;/span&gt;; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;case&lt;/span&gt;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;/* &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;BAD&lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt; */&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
这个宏看起来无伤大雅，它把小写字母的 &lt;code&gt;case&lt;/code&gt; 变成大写字母的 &lt;code&gt;Case&lt;/code&gt; ，但是却引入了控制过程 bug 。
&lt;/p&gt;


&lt;p&gt;
注意
&lt;/p&gt;

&lt;p&gt;
这条规则并不禁止使用&lt;code&gt;#ifdef&lt;/code&gt;这类配置控制用的宏。
&lt;/p&gt;

&lt;p&gt;
未来，模块导入方式可能会替代这类配置控制宏。
&lt;/p&gt;


&lt;p&gt;
注意
&lt;/p&gt;

&lt;p&gt;
这条规则也不鼓励使用&lt;code&gt;#&lt;/code&gt;进行字符串化处理，不鼓励用&lt;code&gt;##&lt;/code&gt;进行字符串拼接。这类用法跟宏一样，有时候看起来人畜无害，却也给工具会引入问题。比如自动补全、静态分析、调试器等。经常的，对这种特殊宏的需要，预示着某总过度复杂的设计。&lt;code&gt;#&lt;/code&gt;和 &lt;code&gt;##&lt;/code&gt; 促进宏的定义与使用。
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;#define&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;CAT&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;a&lt;/span&gt;, &lt;span style=&quot;color: #000000;&quot;&gt;b&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt; a ## b
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;#define&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;STRINGIFY&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;a&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt; #a

&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;x&lt;/span&gt;, &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;y&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;string&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;CAT&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;x, y&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; = &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;asdf&quot;&lt;/span&gt;;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;BAD: hard for tools to handle (and ugly)&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;string&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;sx2&lt;/span&gt; = STRINGIFY&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;x&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;...&lt;/span&gt;
    cout &amp;lt;&amp;lt; xy &amp;lt;&amp;lt; endl;
    cout &amp;lt;&amp;lt; sx2 &amp;lt;&amp;lt; endl;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;main&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    f&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;10, 111&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; EXIT_SUCCESS;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;pre class=&quot;example&quot;&gt;
asdf
x
&lt;/pre&gt;


&lt;p&gt;
对于这种底层字符串操作的宏，有规避方法，比如：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;string&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;s&lt;/span&gt; = &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;asdf&quot;&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;lkjh&quot;&lt;/span&gt;;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;ordinary string literal concatenation&lt;/span&gt;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;enum&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;E&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;a&lt;/span&gt;, &lt;span style=&quot;color: #000000;&quot;&gt;b&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;template&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;x&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;constexpr&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;char&lt;/span&gt;* &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;stringify&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;switch&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;x&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;case&lt;/span&gt; a: &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;a&quot;&lt;/span&gt;;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;case&lt;/span&gt; b: &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;b&quot;&lt;/span&gt;;
    &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;

&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;main&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    cout &amp;lt;&amp;lt; s &amp;lt;&amp;lt; endl;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;string&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;sx1&lt;/span&gt; = stringify&lt;span style=&quot;color: #7388d6;&quot;&gt;&amp;lt;&lt;/span&gt;a&lt;span style=&quot;color: #7388d6;&quot;&gt;&amp;gt;()&lt;/span&gt;;
    cout &amp;lt;&amp;lt; sx1 &amp;lt;&amp;lt; endl;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;string&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;sx2&lt;/span&gt; = stringify&lt;span style=&quot;color: #7388d6;&quot;&gt;&amp;lt;&lt;/span&gt;b&lt;span style=&quot;color: #7388d6;&quot;&gt;&amp;gt;()&lt;/span&gt;;
    cout &amp;lt;&amp;lt; sx2 &amp;lt;&amp;lt; endl;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; EXIT_SUCCESS;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;pre class=&quot;example&quot;&gt;
asdflkjh
a
b
&lt;/pre&gt;


&lt;p&gt;
虽然这段代码不像宏那样容易定义，但是使用起来没负担，也没有额外运行时开销。且遵循范围和类型规则。
&lt;/p&gt;

&lt;p&gt;
未来，静态反射很可能免除掉字符串的预处理操作。
&lt;/p&gt;


&lt;p&gt;
强化
&lt;/p&gt;

&lt;p&gt;
当你看到用于代码控制之外的目的时，请尖叫。
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines ES.28 使用 lambda 初始化复杂对象，尤其是常变量</title>
   <link href="http://kimi.im/2023-04-07-cppcoreguidelines-es28"/>
   <updated>2023-04-07T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-es28</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;Use lambdas for complex initialization, especially of const variables&amp;rdquo;
&lt;/p&gt;

&lt;p&gt;
理由
&lt;/p&gt;

&lt;p&gt;
可以很好的把局部初始化封装起来。包括清理初始化过程中用到的临时变量，无需创建非局部，却不会重用的函数。此规则也适用于需要特定初始化工作的常量。
&lt;/p&gt;

&lt;p&gt;
坏例子
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;widget&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;x&lt;/span&gt;;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;should be const, but:&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;for&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;auto&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;i&lt;/span&gt; = 2; i &amp;lt;= N; ++i&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;          &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;this could be some&lt;/span&gt;
    x += some_obj.do_something_with&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;i&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;  &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;arbitrarily long code&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;                                        &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;needed to initialize x&lt;/span&gt;
&lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;from here, x should be const, but we can&apos;t say so in code in this style&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
好例子
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;widget&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;x&lt;/span&gt; = &lt;span style=&quot;color: #707183;&quot;&gt;[&lt;/span&gt;&amp;amp;&lt;span style=&quot;color: #707183;&quot;&gt;]&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;widget&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;val&lt;/span&gt;;                                &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;assume that widget&lt;/span&gt;
                                               &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;has a default&lt;/span&gt;
                                               &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;constructor&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;for&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;auto&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;i&lt;/span&gt; = 2; i &amp;lt;= N; ++i&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;            &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;this could be some&lt;/span&gt;
        val += some_obj.do_something_with&lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;i&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt;;  &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;arbitrarily long code&lt;/span&gt;
    &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;                                          &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;needed to initialize x&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; val;
&lt;span style=&quot;color: #707183;&quot;&gt;}()&lt;/span&gt;;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
如果可行的话，尽量将分支条件限定在某一组简单的数据集。（比如可以是一个枚举）。不要把初始化和选择分支语句混合在一起使用。
&lt;/p&gt;


&lt;p&gt;
强化
&lt;/p&gt;

&lt;p&gt;
比较难，只能是探索式的。检查是否有未初始化变量，其后紧跟一个循环给这个变量赋值。
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>单词本：plutocracy</title>
   <link href="http://kimi.im/2023-04-07-plutocracy"/>
   <updated>2023-04-07T00:00:00+00:00</updated>
   <id>http://kimi.im/plutocracy</id>
   <content type="html">&lt;p&gt;
昨天看了一个关于分布式自治组织（ DAO ）的报告(&lt;a href=&quot;#citeproc_bib_item_1&quot;&gt;WEF 2023&lt;/a&gt;) 。
&lt;/p&gt;

&lt;p&gt;
仅仅 2021 年一年， DAO 的财富值就增加了 40 倍，达到了3.8亿美元。其中提到 DAO 的投票机制可能会因为代币所有权的大小而导致财阀统治，所以在
DAO 的决策投票设计过程中，要避免这种情况发生，文中写道：Voting
processes of DAO seek to increase efficiency while mitigating common
governance issues such as rational apathy and &lt;b&gt;plutocracy&lt;/b&gt;.
&lt;/p&gt;

&lt;p&gt;
这里， plutocracy 就是富豪统治，财阀统治的意思。其对应的财阀、富豪则是
plutocrat。
&lt;/p&gt;

&lt;p&gt;
所谓的财阀统治指的是拥有财富的阶层获得了统治地位。plutocrat 这个单词中，
Pluto 就是那个太阳系的冥王星（&lt;a href=&quot;http://kimi.im/2019-02-10-solar-system&quot;&gt;太阳系&lt;/a&gt;）的名字。也就是罗马神话故事中的冥王布鲁托。希腊神话中，Pluton 其实是财富之神。因为我们地球的财富都是深藏在地下的么，所以他也就是冥王了。
&lt;/p&gt;

&lt;p&gt;
而这个 pluto 很可能是从 pleu 演化来的。pleu 就是我们现在看到的 flow，流水，因为财富都是流动的么，所以流动的东西就是财富，也说的通。 flow ，
float， flood ，flight，fly 都是从 pleu 演化来的。包括 pluvial，洪水季的。
&lt;/p&gt;

&lt;p&gt;
-cracy 则是统治的意思。比如 aristocracy 贵族统治阶级，autocracy 独裁统治，bureaucracy 官僚统治，kleptocracy 盗贼统治。
&lt;/p&gt;

&lt;p&gt;
报告(&lt;a href=&quot;#citeproc_bib_item_1&quot;&gt;WEF 2023&lt;/a&gt;)后面进一步解释了什么是 plutocracy：
&lt;/p&gt;

&lt;p&gt;
DAO voting processes balance efficiency and effectiveness
considerations. They seek to avoid familiar problems in governance
systems, such as rational apathy (where voters do not participate
because it requires time and effort, but each voter has a minimal
impact on outcomes) and plutocracy (a concentration of power deriving
from wealth).
&lt;/p&gt;

&lt;p&gt;
最近经济不太好，但是为财富阶层制造豪车的企业反而发展很不错：The maker
of incredibly expensive carriages of the &lt;b&gt;plutocracy&lt;/b&gt; fared far better
than BMW and Aston Martin, which produce cars for the wealthy. 可见，财富的两级分化越来越严重了呀。
&lt;/p&gt;

&lt;p&gt;
&lt;b&gt;References&lt;/b&gt;
&lt;/p&gt;
&lt;style&gt;.csl-entry{text-indent: -1.5em; margin-left: 1.5em;}&lt;/style&gt;&lt;div class=&quot;csl-bib-body&quot;&gt;
  &lt;div class=&quot;csl-entry&quot;&gt;&lt;a id=&quot;citeproc_bib_item_1&quot;&gt;&lt;/a&gt;WEF. 2023. “Decentralized Autonomous Organization Toolkit.” World Economic Forum.&lt;/div&gt;
&lt;/div&gt;
</content>
 </entry>
 
 <entry>
   <title>单词本：oxymoronic</title>
   <link href="http://kimi.im/2023-04-06-oxymoronic"/>
   <updated>2023-04-06T00:00:00+00:00</updated>
   <id>http://kimi.im/oxymoronic</id>
   <content type="html">&lt;p&gt;
在PMI Agile Practice Guide (&lt;a href=&quot;#citeproc_bib_item_1&quot;&gt;PMI 2017&lt;/a&gt;)中看到团队领导的这个引用：
&lt;/p&gt;

&lt;p&gt;
The &lt;b&gt;oxymoronic&lt;/b&gt; quote “We lead teams by standing behind them” speaks to
the role of the leader in developing their team members.
&lt;/p&gt;

&lt;p&gt;
这里说，团队领导的一个自相矛盾的引用：我们（领导）站在团队后面带领他们。说的就是那种服务型领导的工作模式。
&lt;/p&gt;

&lt;p&gt;
这个 oxymoronic 是“修辞上的自相矛盾的”之意。其名词形式为 oxymoron，剂自相矛盾修辞法。
&lt;/p&gt;

&lt;p&gt;
拆开来由oxy-和 moron 组成。oxy- 源自希腊语，意思是锋利的、尖的。
moron 则是迟钝的。有可能和 moratorium 同源。moratorium 是金融上冻结、延期支付的意思。
&lt;/p&gt;

&lt;p&gt;
我们常见的 oxygen ，oxide， ocid 也都是源自 oxy 。那么怎么解释呢？因为酸的感觉，往往能通感到尖锐的。也就是酸是一种比较尖锐的味觉。 oxygen 氧气往往能产生酸性物质，oxide 则是氧化物。ocid 就是酸了。
&lt;/p&gt;

&lt;p&gt;
这个跟我们韩非子中那个故事异曲同工呀。矛盾。矛为 oxy，盾为 moron：
&lt;/p&gt;

&lt;p&gt;
楚人有鬻盾与矛者，誉之曰：“吾盾之坚，物莫能陷也。”又誉其矛曰：“吾矛之利，于物无不陷也。”或曰：“以子之矛陷子之盾，何如？” 其人弗能应也。夫不可陷之盾与无不陷之矛，不可同世而立。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;References&lt;/b&gt;
&lt;/p&gt;
&lt;style&gt;.csl-entry{text-indent: -1.5em; margin-left: 1.5em;}&lt;/style&gt;&lt;div class=&quot;csl-bib-body&quot;&gt;
  &lt;div class=&quot;csl-entry&quot;&gt;&lt;a id=&quot;citeproc_bib_item_1&quot;&gt;&lt;/a&gt;PMI. 2017. &lt;i&gt;Agile Practice Guide&lt;/i&gt;.&lt;/div&gt;
&lt;/div&gt;
</content>
 </entry>
 
 <entry>
   <title>单词本：auspicious</title>
   <link href="http://kimi.im/2023-04-05-auspicious"/>
   <updated>2023-04-05T00:00:00+00:00</updated>
   <id>http://kimi.im/auspicious</id>
   <content type="html">&lt;p&gt;
清明节，多云凉爽，去到云栖竹径爬山，一路到龙井村吃午饭。
&lt;/p&gt;

&lt;p&gt;
在云栖竹径公园入口，看到英文版的简介。其中写道：
&lt;/p&gt;

&lt;p&gt;
It is said that some &lt;b&gt;auspicious&lt;/b&gt; colorful clouds came and lingered on
here, hence the name.
&lt;/p&gt;

&lt;p&gt;
确实，爬到山顶，在树丛中能看到烟雾缭绕的祥云。只是，可能没有遇到阳光，所以并不 colorful。难怪，五云山山顶新修的真迹院香火很旺。门口千年银杏挂满祈福彩带。侧院祈福纸 198 ，398卖得脱销。
&lt;/p&gt;

&lt;p&gt;
这里，auspicious clouds就是祥云的意思了。auspicious 本身是吉祥、有利的、吉利的、吉兆的。从它的名词形式 auspice 吉兆变化而来。
&lt;/p&gt;

&lt;p&gt;
而 auspice 这个词，则源自 auspex 。在拉丁语中， au 或者 av 有鸟的意思，而 spex 则是观察的意思。所以 auspex 是观察鸟的人，而观察鸟在古时候可能能观察出大自然的一些征兆，所以 auspex 是鸟卜者，占卜者。而 auspex 观察到的结果则是 auspice 征兆，或者说是鸟兆。尽管，鸟兆可能有吉兆，也可能有凶兆。但是，人们总是希望多看到吉兆，auspice 是吉兆。 auspicious 的意思是吉兆的、吉祥的。
&lt;/p&gt;

&lt;p&gt;
我们前面说了，au/av 是鸟的意思，大部分的鸟能飞，所以 aviation 是飞行术，
aviator 是飞行员。avian 则是鸟类的，aviary 是鸟类饲养场，aviculture 是鸟类饲养。avicide 则是杀害鸟类的杀鸟剂。
&lt;/p&gt;

&lt;p&gt;
而 spex 有观察之意，所以 inspect 检查、审查。suspect 猜测。respect 重视。introspect 内省。retrospect 回顾。
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines ES.27 栈中数组用 std::array 或 stack_array</title>
   <link href="http://kimi.im/2023-04-04-cppcoreguidelines-es27"/>
   <updated>2023-04-04T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-es27</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;Use &lt;code&gt;std::array&lt;/code&gt; or &lt;code&gt;stack_array&lt;/code&gt; for arrays on the stack&amp;rdquo;
&lt;/p&gt;

&lt;p&gt;
理由
&lt;/p&gt;

&lt;p&gt;
可读性更好，不会隐式地类型转换成指针。不会和不标准的内置数组类型扩展搞混淆了。
&lt;/p&gt;

&lt;p&gt;
坏例子
&lt;/p&gt;


&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;n&lt;/span&gt; = 7;
&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;m&lt;/span&gt; = 9;

&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;a1&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;[&lt;/span&gt;n&lt;span style=&quot;color: #7388d6;&quot;&gt;]&lt;/span&gt;;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;a2&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;[&lt;/span&gt;m&lt;span style=&quot;color: #7388d6;&quot;&gt;]&lt;/span&gt;;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;error: not ISO C++&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;...&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;
注意
&lt;/p&gt;

&lt;p&gt;
&lt;code&gt;a1&lt;/code&gt; 的定义在C++中一直是合法的。但是容易出错，尤其是当数组的范围变量不是本地的时候。另外，这也是常见出错的地方（比如，缓冲区移除、指针腐蚀等）。然而 &lt;code&gt;a2&lt;/code&gt; 在 C 中合法，在C++中不合法。容易引起安全性问题。
&lt;/p&gt;

&lt;p&gt;
建议参考以下例子
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;n&lt;/span&gt; = 7;
&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;m&lt;/span&gt; = 9;

&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;array&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt;, n&lt;span style=&quot;color: #7388d6;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;a1&lt;/span&gt;;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;stack_array&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;a2&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;m&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;...&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;
强化
&lt;/p&gt;

&lt;p&gt;
标注使用非常量的范围值的数组
&lt;/p&gt;

&lt;p&gt;
标注非局部常量作为范围值的数组
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines ES.26 不要把变量用于多个目的</title>
   <link href="http://kimi.im/2023-04-03-cppcoreguidelines-es26"/>
   <updated>2023-04-03T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-es26</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;Don’t use a variable for two unrelated purposes&amp;rdquo;
&lt;/p&gt;


&lt;p&gt;
理由
&lt;/p&gt;

&lt;p&gt;
可读性，安全性。
&lt;/p&gt;

&lt;p&gt;
坏例子
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;use&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;i&lt;/span&gt;;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;for&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;i = 0; i &amp;lt; 20; ++i&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;/* &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;...&lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt; */&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;for&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;i = 0; i &amp;lt; 200; ++i&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;/* &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;...&lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt; */&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;bad: i recycled&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
注意
&lt;/p&gt;

&lt;p&gt;
为了优化资源，你可能复用一个缓冲区。就算这种情况，也请限制变量的作用域范围，注意避免因为缓冲区留下的数据引起 bug 。这是常见的安全 bug 。
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;write_to_file&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #110099;&quot;&gt;std&lt;/span&gt;::&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;string&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;buffer&lt;/span&gt;;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;to avoid reallocations on every loop iteration&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;for&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;auto&lt;/span&gt;&amp;amp; &lt;span style=&quot;color: #000000;&quot;&gt;o&lt;/span&gt; : objects&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;
        &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;First part of the work.&lt;/span&gt;
        generate_first_string&lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;buffer, o&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt;;
        write_to_file&lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;buffer&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt;;

        &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;Second part of the work.&lt;/span&gt;
        generate_second_string&lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;buffer, o&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt;;
        write_to_file&lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;buffer&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt;;

        &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;etc...&lt;/span&gt;
    &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
强化
&lt;/p&gt;

&lt;p&gt;
标记回收重复利用的变量
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines ES.25 把对象声明为 const 或 constexpr，除非之后要修改</title>
   <link href="http://kimi.im/2023-04-02-cppcoreguidelines-es25"/>
   <updated>2023-04-02T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-es25</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;Declare an object &lt;code&gt;const&lt;/code&gt; or &lt;code&gt;constexpr&lt;/code&gt; unless you want to modify its
value later on&amp;rdquo;
&lt;/p&gt;

&lt;p&gt;
理由
&lt;/p&gt;

&lt;p&gt;
这样你不会一不留神改值。还可能给编译器提供优化的机会。
&lt;/p&gt;

&lt;p&gt;
例子
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;n&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;bufmax&lt;/span&gt; = 2 * n + 2;  &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;good: we can&apos;t change bufmax by accident&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;xmax&lt;/span&gt; = n;                  &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;suspicious: is xmax intended to change?&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;...&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;
强化
&lt;/p&gt;

&lt;p&gt;
检查变量是否实际改动，不然打上标记。
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>单词本：redingote</title>
   <link href="http://kimi.im/2023-04-01-redingote"/>
   <updated>2023-04-01T00:00:00+00:00</updated>
   <id>http://kimi.im/redingote</id>
   <content type="html">&lt;p&gt;
La Langue Française : Une Longue Histoire Riche d&amp;rsquo;Emprunts
(&lt;a href=&quot;#citeproc_bib_item_1&quot;&gt;PRUVOST 2010&lt;/a&gt;) 文中提到， 18 世纪，英国经济、政治方面比法国发展快，所以这个时期，法语里引进了很多英语单词。也包括时装界：
&lt;/p&gt;

&lt;p&gt;
Il arrive que certains mots soient si parfaitement inté gr és à la
langue française et à sa configuration phonétique et orthographique -
citons par exemple la « &lt;b&gt;redingote&lt;/b&gt; » qui correspond à la déformation du
mot anglais « &lt;b&gt;riding coat&lt;/b&gt; », un « manteau pour monter à cheval ».
&lt;/p&gt;

&lt;p&gt;
这个法语单词 redingote 其实是英语riding coat的法语写法。不知道这个历史的人，还真看不出来。
&lt;/p&gt;

&lt;p&gt;
之后，在时装界，法国可能迎头赶了上来，于是 redingote 又传回到了英国，也变成了一个英语单词：开襟女式轻外套，骑装式外衣；双排纽男式骑装长外套。
&lt;/p&gt;

&lt;p&gt;
&lt;b&gt;References&lt;/b&gt;
&lt;/p&gt;
&lt;style&gt;.csl-entry{text-indent: -1.5em; margin-left: 1.5em;}&lt;/style&gt;&lt;div class=&quot;csl-bib-body&quot;&gt;
  &lt;div class=&quot;csl-entry&quot;&gt;&lt;a id=&quot;citeproc_bib_item_1&quot;&gt;&lt;/a&gt;PRUVOST, Jean. 2010. “La Langue Française : Une Longue Histoire Riche d’Emprunts.”&lt;/div&gt;
&lt;/div&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines ES.24 使用 unique_ptr<T> 管理指针</title>
   <link href="http://kimi.im/2023-03-31-cppcoreguidelines-es24"/>
   <updated>2023-03-31T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-es24</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;Use a unique_ptr&amp;lt;T&amp;gt; to hold pointers&amp;rdquo;
&lt;/p&gt;

&lt;p&gt;
理由
&lt;/p&gt;

&lt;p&gt;
使用&lt;code&gt;std::unique_ptr&lt;/code&gt;是避免内存泄漏最简单的方法。非常可靠。让类型系统做尽可能多的工作确保所有权安全。增加可读性。几乎没有运行时开销。
&lt;/p&gt;

&lt;p&gt;
例子
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;use&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;bool&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;leak&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;auto&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;p1&lt;/span&gt; = make_unique&lt;span style=&quot;color: #7388d6;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;&amp;gt;(&lt;/span&gt;7&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;OK&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt;* &lt;span style=&quot;color: #000000;&quot;&gt;p2&lt;/span&gt; = &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;7&lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;;            &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;bad: might leak&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;... no assignment to p2 ...&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;leak&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt;;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;... no assignment to p2 ...&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;vector&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;v&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;7&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
    v.at&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;7&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; = 0;                    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;exception thrown&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;...&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
如果&lt;code&gt;leak == true&lt;/code&gt;那么， &lt;code&gt;p2&lt;/code&gt; 指向的对象就内存泄漏了。然而， &lt;code&gt;p1&lt;/code&gt; 指向的对象不会泄漏。在&lt;code&gt;at()&lt;/code&gt;处发生异常的话，也会发生同样的情况。
&lt;/p&gt;


&lt;p&gt;
强化
&lt;/p&gt;

&lt;p&gt;
检查以下给原始指针赋值的情况： &lt;code&gt;new&lt;/code&gt; ， &lt;code&gt;malloc()&lt;/code&gt; 以及返回指针的函数。
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>单词本：unencumbered</title>
   <link href="http://kimi.im/2023-03-31-unencumbered"/>
   <updated>2023-03-31T00:00:00+00:00</updated>
   <id>http://kimi.im/unencumbered</id>
   <content type="html">&lt;p&gt;
因为非对称加解密计算量很大，对于那些资源有限的工业设备来说，可能负担不起。
&lt;/p&gt;

&lt;p&gt;
NIST 的电网安全指南(&lt;a href=&quot;#citeproc_bib_item_1&quot;&gt;The Smart Grid Interoperability Panel–Smart Grid Cybersecurity Committee 2014&lt;/a&gt;)就提到：
&lt;/p&gt;

&lt;p&gt;
A trustworthy and &lt;b&gt;unencumbered&lt;/b&gt; implementation of cryptography that is
suitable (both computationally and resource-wise) for deployment in
the smart grid would benefit all stakeholders in smart grid
deployments.
&lt;/p&gt;

&lt;p&gt;
这里， unencumbered 的意思是没障碍、没负担的意思。指南后面还提到：
&lt;/p&gt;

&lt;p&gt;
The preconfigured SA class solution, for all but the smallest systems,
is likely to be excessively costly, subject to human error, and
&lt;b&gt;encumbered&lt;/b&gt; with significant vulnerabilities due to the replication of
so many credentials.
&lt;/p&gt;

&lt;p&gt;
这里，encumbered 则是有负担的、有障碍的。
&lt;/p&gt;

&lt;p&gt;
encumber 是个及物动词，意思是阻塞、妨碍、拖累。比如 You shouldn’t let
those heavy books encumber you. 你不该让这些沉重的书拖累你的学习。
&lt;/p&gt;

&lt;p&gt;
而 cumber 则是不及物动词，比如 He does&amp;rsquo;t want to cumber with anyone!
他不想拖累任何人。
&lt;/p&gt;

&lt;p&gt;
cumber 可能最早源自拉丁语 cumulus ，堆积的意思。 cumulus 还是积云的意思。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;References&lt;/b&gt;
&lt;/p&gt;
&lt;style&gt;.csl-entry{text-indent: -1.5em; margin-left: 1.5em;}&lt;/style&gt;&lt;div class=&quot;csl-bib-body&quot;&gt;
  &lt;div class=&quot;csl-entry&quot;&gt;&lt;a id=&quot;citeproc_bib_item_1&quot;&gt;&lt;/a&gt;The Smart Grid Interoperability Panel–Smart Grid Cybersecurity Committee. 2014. &lt;i&gt;NIST Internal Report 7628 - Guidelines for Smart Grid Cybersecurity&lt;/i&gt;. National Institute of Standards and Technology. doi:&lt;a href=&quot;https://doi.org/10.6028/NIST.IR.7628r1&quot;&gt;10.6028/NIST.IR.7628r1&lt;/a&gt;.&lt;/div&gt;
&lt;/div&gt;
</content>
 </entry>
 
 <entry>
   <title>单词本：flirter</title>
   <link href="http://kimi.im/2023-03-31-flirter"/>
   <updated>2023-03-31T00:00:00+00:00</updated>
   <id>http://kimi.im/flirter</id>
   <content type="html">&lt;p&gt;
晚上看了讲法语历史的一篇文章 《La langue française : une longue
histoire riche d&amp;rsquo;emprunts》(&lt;a href=&quot;#citeproc_bib_item_1&quot;&gt;PRUVOST 2010&lt;/a&gt;) 其中提供英语中不少单词是从法语里借过去的：
&lt;/p&gt;

&lt;p&gt;
Leur prononciation ou leur orthographe les rendent cependant parfois
méconnaissables : qui reconnaîtrait spontanément dans « pudding », le
mot « boudin » ou dans « flirter », le français « fleureter, conter
fleurette »?
&lt;/p&gt;

&lt;p&gt;
这里提到了 pudding 布丁，说是来自古法语 boudin，其实是香肠的意思。而法语中的 pouding，其实是从英语里反借回来……
&lt;/p&gt;

&lt;p&gt;
而 flirter 调情者则是借用了古法语的动词 fleureter 指的是说甜言蜜语。这个词又是 fleur 鲜花的昵称 fleurette 转变过来。也可能比拟像蜜蜂一样一朵花接着一朵花飞舞。
&lt;/p&gt;

&lt;p&gt;
先有了 flirter 表示调情者、讲甜言蜜语的人。再有 flirt 就是调情、讲甜言蜜语的动作。接着 flirtee 表示被调情的人。而 flirty 则是形容词：轻浮的。
&lt;/p&gt;

&lt;p&gt;
有趣的是，现代法语并没有保留 fleureter ，而是从英语里，又把 flirter借用了回去。比如：Il flirte avec une collègue de bureau. ❤️
&lt;/p&gt;

&lt;p&gt;
当然，法语里也用conter fleurette，比如： j ’ai conté fleuretteà la
plus belle dame.
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;References&lt;/b&gt;
&lt;/p&gt;
&lt;style&gt;.csl-entry{text-indent: -1.5em; margin-left: 1.5em;}&lt;/style&gt;&lt;div class=&quot;csl-bib-body&quot;&gt;
  &lt;div class=&quot;csl-entry&quot;&gt;&lt;a id=&quot;citeproc_bib_item_1&quot;&gt;&lt;/a&gt;PRUVOST, Jean. 2010. “La Langue Française : Une Longue Histoire Riche d’Emprunts.”&lt;/div&gt;
&lt;/div&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines ES.23 首选 {} 花括号初始化语法</title>
   <link href="http://kimi.im/2023-03-30-cppcoreguidelines-es23"/>
   <updated>2023-03-30T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-es23</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;Prefer the &lt;code&gt;{}&lt;/code&gt;-initializer syntax&amp;rdquo;
&lt;/p&gt;

&lt;p&gt;
理由
&lt;/p&gt;

&lt;p&gt;
&lt;code&gt;{}&lt;/code&gt; 初始化规则更简单、更普通、不模糊、相比其他形式更安全。
&lt;/p&gt;

&lt;p&gt;
只有当你确信没有变窄转换的时候，用 &lt;code&gt;=&lt;/code&gt; 初始化。
&lt;/p&gt;

&lt;p&gt;
对于内置数值类型，只对 &lt;code&gt;auto&lt;/code&gt; 变量，使用 &lt;code&gt;=&lt;/code&gt; 初始化。
&lt;/p&gt;

&lt;p&gt;
避免 &lt;code&gt;()&lt;/code&gt; 初始化。因为容易引起语法解析模糊。
&lt;/p&gt;


&lt;p&gt;
比如
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;x&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;f&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;99&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;
&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;y&lt;/span&gt; = x;
&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;vector&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;v&lt;/span&gt; = &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;1, 2, 3, 4, 5, 6&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
例外
&lt;/p&gt;

&lt;p&gt;
对于容器类型，按照传统，我们用 &lt;code&gt;{...}&lt;/code&gt; 表示列表元素， &lt;code&gt;(...)&lt;/code&gt; 表示容器大小：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;vector&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;v1&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;10&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;vector of 10 elements with the default value 0&lt;/span&gt;
&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;vector&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;v2&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;10&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;vector of 1 element with the value 10&lt;/span&gt;

&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;vector&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;v3&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;1, 2&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;  &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;vector of 1 element with the value 2&lt;/span&gt;
&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;vector&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;v4&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;1, 2&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;  &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;vector of 2 elements with the values 1 and 2&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;
注意
&lt;/p&gt;

&lt;p&gt;
&lt;code&gt;{}&lt;/code&gt; 初始化不允许变窄类型转换（有时候是好东西），只允许显示构造函数（也很好，我们有意要初始化一个变量）。
&lt;/p&gt;

&lt;p&gt;
比如
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;x&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;7.9&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;error: narrowing&lt;/span&gt;
&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;y&lt;/span&gt; = 7.9;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;OK: y becomes 7. Hope for a compiler warning&lt;/span&gt;
&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;z&lt;/span&gt; = &lt;span style=&quot;color: #110099;&quot;&gt;gsl&lt;/span&gt;::narrow_cast&lt;span style=&quot;color: #707183;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;gt;(&lt;/span&gt;7.9&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;  &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;OK: you asked for it&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
注意
&lt;/p&gt;

&lt;p&gt;
&lt;code&gt;{}&lt;/code&gt; 几乎可以用于任何初始化。而其他形式不行。
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;auto&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;p&lt;/span&gt; = &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;vector&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;1, 2, 3, 4, 5&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;initialized vector&lt;/span&gt;
&lt;span style=&quot;color: #110099;&quot;&gt;D&lt;/span&gt;::&lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;D&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;a&lt;/span&gt;, &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;b&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt; :m&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;a, b&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;member initializer (e.g., m might be a pair)&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;...&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;
&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;X&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;var&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{}&lt;/span&gt;;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;initialize var to be empty&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;struct&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;S&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;m&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;7&lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;default initializer for a member&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;...&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
基于此原因， &lt;code&gt;{}&lt;/code&gt; 初始化又称“统一初始化/万能初始化”。（当然，也还有一些异常情况）。
&lt;/p&gt;


&lt;p&gt;
注意
&lt;/p&gt;

&lt;p&gt;
C++17 之前声明为 &lt;code&gt;auto&lt;/code&gt; 的变量通过单值进行初始化，会有些奇怪的结果。比如 &lt;code&gt;{v}&lt;/code&gt; ：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;auto&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;x1&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;7&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;        &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;x1 is an int with the value 7&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;auto&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;x2&lt;/span&gt; = &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;7&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;      &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;x2 is an initializer_list&amp;lt;int&amp;gt; with an element 7&lt;/span&gt;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;auto&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;x11&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;7, 8&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;error: two initializers&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;auto&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;x22&lt;/span&gt; = &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;7, 8&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;  &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;x22 is an initializer_list&amp;lt;int&amp;gt; with elements 7 and 8&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
如果你确实想要一个初始化列表类型 &lt;code&gt;initializer_list&amp;lt;T&amp;gt;&lt;/code&gt; 请使用 &lt;code&gt;={...}&lt;/code&gt; ：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;auto&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;fib10&lt;/span&gt; = &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;1, 1, 2, 3, 5, 8, 13, 21, 34, 55&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;fib10 is a list&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;
注意
&lt;/p&gt;

&lt;p&gt;
&lt;code&gt;={}&lt;/code&gt; 其实上是一个拷贝初始化。而 &lt;code&gt;{}&lt;/code&gt; 是直接初始化。就跟拷贝初始化与直接初始化的差别一样。 &lt;code&gt;{}&lt;/code&gt; 接受 &lt;code&gt;explicit&lt;/code&gt; 构造函数，而 &lt;code&gt;={}&lt;/code&gt; 不接受。
&lt;/p&gt;

&lt;p&gt;
比如
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;struct&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Z&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;explicit&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;Z&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{}&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;
&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Z&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;z1&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;{}&lt;/span&gt;;     &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;OK: direct initialization, so we use explicit constructor&lt;/span&gt;
&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Z&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;z2&lt;/span&gt; = &lt;span style=&quot;color: #707183;&quot;&gt;{}&lt;/span&gt;;  &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;error: copy initialization, so we cannot use the&lt;/span&gt;
            &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;explicit constructor&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
请使用 &lt;code&gt;{}&lt;/code&gt; 初始化，除非你想禁用 &lt;code&gt;explicit&lt;/code&gt; 构造函数。
&lt;/p&gt;


&lt;p&gt;
例子
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;template&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;typename&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;x1&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;1&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;T initialized with 1&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;x0&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt;;     &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;bad: function declaration (often a mistake)&lt;/span&gt;

    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;y1&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;1&lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;T initialized with 1&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;y0&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{}&lt;/span&gt;;    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;default initialized T&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;...&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;
强化
&lt;/p&gt;

&lt;p&gt;
标记使用 &lt;code&gt;=&lt;/code&gt; 初始化数值类型，且出现窄类型转换的情况。
&lt;/p&gt;

&lt;p&gt;
标记使用 &lt;code&gt;()&lt;/code&gt; 语法初始化，而实际是声明的情况。很多编译器应该会发出告警。
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines ES.22 不要在没有能用的初始值之前声明变量</title>
   <link href="http://kimi.im/2023-03-29-cppcoreguidelines-es.22"/>
   <updated>2023-03-29T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-es.22</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;Don’t declare a variable until you have a value to initialize it with&amp;rdquo;
&lt;/p&gt;

&lt;p&gt;
理由
&lt;/p&gt;

&lt;p&gt;
可读性。限制变量的作用域范围。避免“设置前使用”的问题。通常，初始化比赋值操作效率更高。
&lt;/p&gt;

&lt;p&gt;
坏例子
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;string&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;s&lt;/span&gt;;
&lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;... no use of s here ...&lt;/span&gt;
s = &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;what a waste&quot;&lt;/span&gt;;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
坏例子
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;SomeLargeType&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;var&lt;/span&gt;;  &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;Hard-to-read CaMeLcAsEvArIaBlE&lt;/span&gt;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;cond&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;some non-trivial condition&lt;/span&gt;
    Set&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&amp;amp;var&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;else&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;cond2 || !cond3&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    var = Set2&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;3.14&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;else&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    var = 0;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;for&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;auto&lt;/span&gt;&amp;amp; &lt;span style=&quot;color: #000000;&quot;&gt;e&lt;/span&gt; : something&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;
        var += e;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;use var;&lt;/span&gt;
&lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;that this isn&apos;t done too early can be enforced statically with only&lt;/span&gt;
&lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;control flow&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
如果 &lt;code&gt;SomeLargeType&lt;/code&gt; 类型的默认初始化不太消耗资源，那问题不大。不然，程序员就要好好考虑，每一个迷宫一样的条件分支是不是都覆盖到了。如果没有的话，我们就可能遇到“设置前使用”的 bug。这将会是维护工作中的一个大陷阱。
&lt;/p&gt;

&lt;p&gt;
对于初始过程略微复杂的情况，包括 &lt;code&gt;const&lt;/code&gt; 变量，可以考虑使用 &lt;code&gt;lambda&lt;/code&gt; 来进行初始化。
&lt;/p&gt;


&lt;p&gt;
强化
&lt;/p&gt;

&lt;p&gt;
标记有默认初始化过程，被赋值操作又在首次读取操作之前的情况。
&lt;/p&gt;

&lt;p&gt;
标记在未初始化变量之后有一堆复杂计算，之后才使用这个变量的情况
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines ES.21 不要在需要使用之前引入一个变量或常量</title>
   <link href="http://kimi.im/2023-03-28-cppcoreguidelines-es.21"/>
   <updated>2023-03-28T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-es.21</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;Don’t introduce a variable (or constant) before you need to use it&amp;rdquo;
&lt;/p&gt;

&lt;p&gt;
理由
&lt;/p&gt;

&lt;p&gt;
可读性。限制变量能使用的范围。
&lt;/p&gt;

&lt;p&gt;
例如（坏例子）
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;x&lt;/span&gt; = 7;
&lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;... no use of x here ...&lt;/span&gt;
++x;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
强化
&lt;/p&gt;

&lt;p&gt;
标记变量第一次使用的位置与声明的位置距离很远的情况
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines ES.20 确保对象总是被初始化</title>
   <link href="http://kimi.im/2023-03-27-cppcoreguidelines-es20"/>
   <updated>2023-03-27T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-es20</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;Always initialize an object&amp;rdquo;
&lt;/p&gt;

&lt;p&gt;
理由
&lt;/p&gt;

&lt;p&gt;
避免设置前使用的错误。以及可能产生的未定义行为。避免难理解的复杂的初始化。使重构变得简单。
&lt;/p&gt;

&lt;p&gt;
例子
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;use&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;arg&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;i&lt;/span&gt;;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;bad: uninitialized variable&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;...&lt;/span&gt;
    i = 7;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;initialize i&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
&lt;code&gt;i = 7&lt;/code&gt; 并不是初始化 &lt;code&gt;i&lt;/code&gt; ，而是赋值给 &lt;code&gt;i&lt;/code&gt; 。在省略号部分，可能就会读取 &lt;code&gt;i&lt;/code&gt; 的未初始化的值。
&lt;/p&gt;

&lt;p&gt;
更好的代码:
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;use&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;arg&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;OK&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;i&lt;/span&gt; = 7;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;OK: initialized&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;string&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;s&lt;/span&gt;;    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;OK: default initialized&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;...&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
注意
&lt;/p&gt;

&lt;p&gt;
“总是要初始化”的规则比“对象必须设值”的规则更强。后者相对宽松，但是会导致：
&lt;/p&gt;

&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;难以阅读的代码&lt;/li&gt;
&lt;li&gt;让人们在过大的范围声明变量&lt;/li&gt;
&lt;li&gt;鼓励复杂的代码，导致逻辑bug&lt;/li&gt;
&lt;li&gt;妨碍重构&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
总是要初始化规则是一个代码风格规则，可提升可维护性。
&lt;/p&gt;


&lt;p&gt;
例子
&lt;/p&gt;

&lt;p&gt;
这个例子经常用于演示对稍微宽松一些的初始化规则的需求：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;widget&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;i&lt;/span&gt;;    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;&quot;widget&quot; a type that&apos;s expensive to initialize,&lt;/span&gt;
             &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;possibly a large POD&lt;/span&gt;
&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;widget&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;j&lt;/span&gt;;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;cond&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;  &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;bad: i and j are initialized &quot;late&quot;&lt;/span&gt;
    i = f1&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt;;
    j = f2&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;else&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    i = f3&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt;;
    j = f4&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
以上代码不能很轻松地就重构，从而可以通过初始化操作来初始化 &lt;code&gt;i&lt;/code&gt; 和 &lt;code&gt;j&lt;/code&gt; 。注意，如果一个类型有默认构造函数，那么，你尝试推出初始化，只会简单的导致先进行默认初始化，再进行一次赋值操作。以上这种写法的主流原因是“效率”。但是编译器其实能够检测到我们是否犯了“设置前使用”错误，也能避免多余的重复初始化。
&lt;/p&gt;


&lt;p&gt;
假设 &lt;code&gt;i&lt;/code&gt; 与 &lt;code&gt;j&lt;/code&gt; 之间有一些逻辑关联，那么这种关联可以通过代码表示：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;pair&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;lt;&lt;/span&gt;widget, widget&lt;span style=&quot;color: #707183;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;make_related_widgets&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;bool&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;x&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;x&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; ? &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;f1&lt;span style=&quot;color: #909183;&quot;&gt;()&lt;/span&gt;, f2&lt;span style=&quot;color: #909183;&quot;&gt;()&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt; : &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;f3&lt;span style=&quot;color: #909183;&quot;&gt;()&lt;/span&gt;, f4&lt;span style=&quot;color: #909183;&quot;&gt;()&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;auto&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;[&lt;/span&gt;i, j&lt;span style=&quot;color: #707183;&quot;&gt;]&lt;/span&gt; = make_related_widgets&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;cond&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;C++17&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
如果说，你觉得 &lt;code&gt;make_related_widgets&lt;/code&gt; 函数有些重复多余，我们也可以通过
&lt;code&gt;lambda&lt;/code&gt; 省略之。
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;auto&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;[&lt;/span&gt;i, j&lt;span style=&quot;color: #707183;&quot;&gt;]&lt;/span&gt; = &lt;span style=&quot;color: #707183;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;x&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;]&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;x&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; ? pair&lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;f1&lt;span style=&quot;color: #909183;&quot;&gt;()&lt;/span&gt;, f2&lt;span style=&quot;color: #909183;&quot;&gt;()&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt; : pair&lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;f3&lt;span style=&quot;color: #909183;&quot;&gt;()&lt;/span&gt;, f4&lt;span style=&quot;color: #909183;&quot;&gt;()&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;}()&lt;/span&gt;;
&lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;C++17&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
利用某个特殊的值表示“未初始化”通常是一种问题的症状，而非解决方法：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;widget&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;i&lt;/span&gt; = uninit;  &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;bad&lt;/span&gt;
&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;widget&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;j&lt;/span&gt; = uninit;

&lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;...&lt;/span&gt;
use&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;i&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;         &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;possibly used before set&lt;/span&gt;
&lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;...&lt;/span&gt;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;cond&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;     &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;bad: i and j are initialized &quot;late&quot;&lt;/span&gt;
    i = f1&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt;;
    j = f2&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;else&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    i = f3&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt;;
    j = f4&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
这样写之后，编译器都无法简单的检测到“设置之前使用”这类错误。进一步来说，我们还在 &lt;code&gt;widget&lt;/code&gt; 的状态空间引入了新的复杂性：哪些操作对未初始化的
&lt;code&gt;widget&lt;/code&gt; 是合法的，哪些是不合法的？
&lt;/p&gt;

&lt;p&gt;
多年以来，聪明的程序员流行使用复杂的初始化方法。然而，这往往是大部分代码错误和复杂的来源。很多这类错误会在代码实现之后若干年的维护过程中引入。
&lt;/p&gt;

&lt;p&gt;
例如：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;X&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;public&lt;/span&gt;:
    &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;X&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;i&lt;/span&gt;, &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;ci&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; : m2&lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;i&lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;, cm2&lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;ci&lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{}&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;...&lt;/span&gt;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;private&lt;/span&gt;:
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;m1&lt;/span&gt; = 7;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;m2&lt;/span&gt;;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;m3&lt;/span&gt;;

    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;cm1&lt;/span&gt; = 7;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;cm2&lt;/span&gt;;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;cm3&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
编译器会标记出未初始化的 &lt;code&gt;cm3&lt;/code&gt; ，因为这是个 &lt;code&gt;const&lt;/code&gt; 成员变量。但是编译器不会发现 &lt;code&gt;m3&lt;/code&gt; 缺少初始化。通常，偶尔的伪造的成员变量初始化是值得的。因为它可以避免缺少初始化而引起的错误。而且，编译器经常能够优化掉多余的初始化（比如，赋值操作前的一次初始化）。
&lt;/p&gt;


&lt;p&gt;
例外
&lt;/p&gt;

&lt;p&gt;
如果你声明一个以输入数据进行初始化的对象，那么在此之前进行初始化，会导致重复初始化。然而，必须注意，不要在输入数据之后，还存在未初始化的对象。那样会导致错误，以及安全性问题。
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;constexpr&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;max&lt;/span&gt; = 8 * 1024;
&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;buf&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;[&lt;/span&gt;max&lt;span style=&quot;color: #707183;&quot;&gt;]&lt;/span&gt;;         &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;OK, but suspicious: uninitialized&lt;/span&gt;
f.read&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;buf, max&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
初始化这个大数组可能在某些情况下比较消耗计算资源。但是，这个例子中，未初始化的变量可能被访问。所以千万要小心处理。
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;constexpr&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;max&lt;/span&gt; = 8 * 1024;
&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;buf&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;[&lt;/span&gt;max&lt;span style=&quot;color: #707183;&quot;&gt;]&lt;/span&gt; = &lt;span style=&quot;color: #707183;&quot;&gt;{}&lt;/span&gt;;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;zero all elements; better in some situations&lt;/span&gt;
f.read&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;buf, max&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
因为对于数组和 &lt;code&gt;std::array&lt;/code&gt; 的约束性初始化规则，所以有很多针对这类数据的例外情况。
&lt;/p&gt;

&lt;p&gt;
但是，如果可以，尽量使用不会溢出的库函数。比如：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;string&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;s&lt;/span&gt;;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;s is default initialized to &quot;&quot;&lt;/span&gt;
cin &amp;gt;&amp;gt; s;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;s expands to hold the string&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
对于简单的变量，不要考虑套用这里提到的例外情况（通过输入数据初始化）。
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;i&lt;/span&gt;;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;bad&lt;/span&gt;
&lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;...&lt;/span&gt;
cin &amp;gt;&amp;gt; i;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
通常，输入操作和对象的操作可能会分开，就可能会出现“设置前使用”的情况。
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;i2&lt;/span&gt; = 0;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;better, assuming that zero is an acceptable value for i2&lt;/span&gt;
&lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;...&lt;/span&gt;
cin &amp;gt;&amp;gt; i2;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
一个好的编译优化器应该能识别输入操作，避免多余的初始化操作。
&lt;/p&gt;


&lt;p&gt;
注意
&lt;/p&gt;

&lt;p&gt;
有时候，我们可以用 &lt;code&gt;lambda&lt;/code&gt; 作为初始化工具，从而避免未初始化的变量：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;error_code&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;ec&lt;/span&gt;;
&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Value&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;v&lt;/span&gt; = &lt;span style=&quot;color: #707183;&quot;&gt;[&lt;/span&gt;&amp;amp;&lt;span style=&quot;color: #707183;&quot;&gt;]&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;auto&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;p&lt;/span&gt; = get_value&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt;;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;get_value() returns a pair&amp;lt;error_code, Value&amp;gt;&lt;/span&gt;
    ec = p.first;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; p.second;
&lt;span style=&quot;color: #707183;&quot;&gt;}()&lt;/span&gt;;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
或者，可能这样：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Value&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;v&lt;/span&gt; = &lt;span style=&quot;color: #707183;&quot;&gt;[]&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;auto&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;p&lt;/span&gt; = get_value&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt;;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;get_value() returns a pair&amp;lt;error_code, Value&amp;gt;&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;p.first&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;throw&lt;/span&gt; Bad_value&lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;p.first&lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; p.second;
&lt;span style=&quot;color: #707183;&quot;&gt;}()&lt;/span&gt;;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
强化
&lt;/p&gt;

&lt;p&gt;
标记每一个未初始化的变量。不要标记有默认构造函数的用户类型。
&lt;/p&gt;

&lt;p&gt;
确保未初始化的缓冲区在声明之后马上写入数据。以非 const 参数类型传递未初始化的变量，可以认为是对变量的一次写入操作。
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>单词本：aspiration</title>
   <link href="http://kimi.im/2023-03-26-aspiration"/>
   <updated>2023-03-26T00:00:00+00:00</updated>
   <id>http://kimi.im/aspiration</id>
   <content type="html">&lt;p&gt;
最近看书遇到不少 aspiration，比如：
&lt;/p&gt;

&lt;p&gt;
Any enterprise integration program must be business driven and reflect
the goals and &lt;b&gt;aspirations&lt;/b&gt; of management concerning the expected
outcome of the integration endeavor. 企业信息继承项目必须是业务驱动的，反映了管理层的目标和抱负。
&lt;/p&gt;

&lt;p&gt;
这里 aspiration，是渴望、抱负的意思。这词来自拉丁语 aspirationem，本意是向最远的地方吹气。 拉丁语 ad + spirare，ad 是 to，spirare 是呼吸。所以 aspire 的本意就是朝这最远的地方呼吸，即渴望、有志向于某事。
&lt;/p&gt;

&lt;p&gt;
比如，前几天，我们管理层开会，PPT 中有一句：By end of 2024, &lt;b&gt;aspire&lt;/b&gt; to
have xxx in place. 到 2024 年第，我们有志于实现 xxx 项目的产品化。
&lt;/p&gt;

&lt;p&gt;
Ross Mcilroy et. al. (&lt;a href=&quot;#citeproc_bib_item_3&quot;&gt;Mcilroy et al. 2019&lt;/a&gt;) 的一篇芯片安全论文中也用到了这个词：Computer systems &lt;b&gt;aspire&lt;/b&gt; to enforce three key security
properties: confidentiality, integrity, and availability. 计算机系统立志于强化三个安全属性：保密、完整，以及可用性。
&lt;/p&gt;

&lt;p&gt;
再比如：
&lt;/p&gt;

&lt;p&gt;
Every project finds itself in tension with competing
&lt;b&gt;aspirations&lt;/b&gt;. (&lt;a href=&quot;#citeproc_bib_item_5&quot;&gt;PMI 2017&lt;/a&gt;) 每个项目都处于多个竞争的目标的紧张关系中。
&lt;/p&gt;

&lt;p&gt;
Hope is the bridge between &lt;b&gt;aspiration&lt;/b&gt; and the disappointments of
reality. (&lt;a href=&quot;#citeproc_bib_item_1&quot;&gt;Carucci 2021&lt;/a&gt;) 希望是连接渴望的志向与现实的失望的桥梁。
&lt;/p&gt;

&lt;p&gt;
level of performance in relation to his &lt;b&gt;aspiration&lt;/b&gt;
level. (&lt;a href=&quot;#citeproc_bib_item_4&quot;&gt;Openstax 2019&lt;/a&gt;) 绩效的等级与其渴望程度相关。
&lt;/p&gt;

&lt;p&gt;
另外，aspirational 是 aspiration 的形容词形式，即有雄心壮志的、梦寐以求的。
&lt;/p&gt;

&lt;p&gt;
比如，Thomas Gamer, et. al.  (&lt;a href=&quot;#citeproc_bib_item_2&quot;&gt;Gamer et al. 2019&lt;/a&gt;) 的一篇论文，介绍自动化系统的自主控制等级，提到：Today, this is still largely &lt;b&gt;aspirational&lt;/b&gt;,
but for instance an electric self-driving mining vehicle for fully
autonomous loading of the ore would carry major advantages of safety
and productivity. 如今，完全自主驾驶很大程度上还只是雄心壮志的目标。但是在矿区的自动驾驶已经能够完全自主执行挖矿加载操作。实现了安全高效矿区运营。
&lt;/p&gt;

&lt;p&gt;
&lt;b&gt;References&lt;/b&gt;
&lt;/p&gt;
&lt;style&gt;.csl-entry{text-indent: -1.5em; margin-left: 1.5em;}&lt;/style&gt;&lt;div class=&quot;csl-bib-body&quot;&gt;
  &lt;div class=&quot;csl-entry&quot;&gt;&lt;a id=&quot;citeproc_bib_item_1&quot;&gt;&lt;/a&gt;Carucci, Ron A. 2021. &lt;i&gt;To Be Honest: Lead with the Power of Truth, Justice and Purpose&lt;/i&gt;. Kogan Page.&lt;/div&gt;
  &lt;div class=&quot;csl-entry&quot;&gt;&lt;a id=&quot;citeproc_bib_item_2&quot;&gt;&lt;/a&gt;Gamer, Thomas, Mario Hoernicke, Benjamin Kloepper, Reinhard Bauer, and Alf J. Isaksson. 2019. “The Autonomous Industrial Plant -Future of Process Engineering, Operations and Maintenance.” &lt;i&gt;IFAC-PapersOnLine&lt;/i&gt; 52 (1): 454–60. doi:&lt;a href=&quot;https://doi.org/https://doi.org/10.1016/j.ifacol.2019.06.104&quot;&gt;https://doi.org/10.1016/j.ifacol.2019.06.104&lt;/a&gt;.&lt;/div&gt;
  &lt;div class=&quot;csl-entry&quot;&gt;&lt;a id=&quot;citeproc_bib_item_3&quot;&gt;&lt;/a&gt;Mcilroy, Ross, Jaroslav Sevcik, Tobias Tebbi, Ben L. Titzer, and Toon Verwaest. 2019. “Spectre Is Here to Stay: An Analysis of Side-Channels and Speculative Execution.”&lt;/div&gt;
  &lt;div class=&quot;csl-entry&quot;&gt;&lt;a id=&quot;citeproc_bib_item_4&quot;&gt;&lt;/a&gt;Openstax. 2019. &lt;i&gt;Principles of Management&lt;/i&gt;. Rice University.&lt;/div&gt;
  &lt;div class=&quot;csl-entry&quot;&gt;&lt;a id=&quot;citeproc_bib_item_5&quot;&gt;&lt;/a&gt;PMI. 2017. &lt;i&gt;Agile Practice Guide&lt;/i&gt;.&lt;/div&gt;
&lt;/div&gt;
</content>
 </entry>
 
 <entry>
   <title>单词本：deviate</title>
   <link href="http://kimi.im/2023-03-23-deviate"/>
   <updated>2023-03-23T00:00:00+00:00</updated>
   <id>http://kimi.im/deviate</id>
   <content type="html">&lt;p&gt;
不好意思，最近分享的比较少。一般来说，分享少的时候，就是埋头干活的时候。分享多的时候，就是大量阅读的时候。阅读也是在干活啊。所以，我一直在忙着干活。
&lt;/p&gt;

&lt;p&gt;
昨天看敏捷开发方法，遇到很多个 via 为词根的词，比如：
&lt;/p&gt;

&lt;p&gt;
As the project continues, the team may &lt;b&gt;deviate&lt;/b&gt; from the original
vision.  The team can manage the &lt;b&gt;deviations&lt;/b&gt;, because the team delivers
value sooner. (&lt;a href=&quot;#citeproc_bib_item_1&quot;&gt;PMI 2017&lt;/a&gt;) 随着项目进展，团队会偏离原来的愿景。团队能管理这些偏差，因为他们能很快发布有价值的交付物。
&lt;/p&gt;

&lt;p&gt;
The team may need feedback on a prototype and may then choose to
deliver a minimum &lt;b&gt;viable&lt;/b&gt; product (MVP) to a subset of
customers. (&lt;a href=&quot;#citeproc_bib_item_1&quot;&gt;PMI 2017&lt;/a&gt;) 团队需要他人对原形的反馈，从而选择交付最小可行产品（MVP）。
&lt;/p&gt;


&lt;p&gt;
这里的 deviate 是偏离、违背的意思。deviation 是其名词，偏差。viable 是可行的意思。
&lt;/p&gt;

&lt;p&gt;
他们都源自拉丁语 via 道路。deviate 来自 deviatus，即偏离道路。viable
即道路可行。
&lt;/p&gt;

&lt;p&gt;
那么，反义词，undeviating 则是坚持正道、坚定不移、不迷失的。deviant 则是反常的、变态之人，也就是不走寻常路的人。
&lt;/p&gt;

&lt;p&gt;
&lt;b&gt;References&lt;/b&gt;
&lt;/p&gt;
&lt;style&gt;.csl-entry{text-indent: -1.5em; margin-left: 1.5em;}&lt;/style&gt;&lt;div class=&quot;csl-bib-body&quot;&gt;
  &lt;div class=&quot;csl-entry&quot;&gt;&lt;a id=&quot;citeproc_bib_item_1&quot;&gt;&lt;/a&gt;PMI. 2017. &lt;i&gt;Agile Practice Guide&lt;/i&gt;.&lt;/div&gt;
&lt;/div&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines ES.12 不要在嵌套作用域内重用变量名</title>
   <link href="http://kimi.im/2023-03-22-cppcoreguidelines-es12"/>
   <updated>2023-03-22T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-es12</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;Do not reuse names in nested scopes&amp;rdquo;
&lt;/p&gt;

&lt;p&gt;
理由
&lt;/p&gt;

&lt;p&gt;
太容易搞错了。导致维护上的麻烦。
&lt;/p&gt;


&lt;p&gt;
坏例子
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;d&lt;/span&gt; = 0;
&lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;...&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;cond&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;...&lt;/span&gt;
    d = 9;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;...&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;else&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;...&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;d&lt;/span&gt; = 7;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;...&lt;/span&gt;
    d = value_to_be_returned;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;...&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; d;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
如果这里的 if 代码段很长的话，很容易忽视内部作用域引入的 d。这是很常见的 bug。有时候，这种内部作用域引入同名变量，称为“shadowing遮蔽”。
&lt;/p&gt;

&lt;p&gt;
注意
&lt;/p&gt;

&lt;p&gt;
当函数很长很复杂的时候，shadowing 是常见的问题。
&lt;/p&gt;

&lt;p&gt;
例子
&lt;/p&gt;

&lt;p&gt;
C++ 语言不允许对最外层的函数参数做 shadowing。
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;x&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;x&lt;/span&gt; = 4;  &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;error: reuse of function argument name&lt;/span&gt;

    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;x&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;
        &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;x&lt;/span&gt; = 7;  &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;allowed, but bad&lt;/span&gt;
        &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;...&lt;/span&gt;
    &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;
坏例子
&lt;/p&gt;

&lt;p&gt;
局部变量重用成员变量名也容易出问题：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;struct&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;S&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;m&lt;/span&gt;;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;x&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;

&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;S&lt;/span&gt;::&lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;x&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    m = 7;    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;assign to member&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;x&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;
        &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;m&lt;/span&gt; = 9;
        &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;...&lt;/span&gt;
        m = 99; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;assign to local variable&lt;/span&gt;
        &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;...&lt;/span&gt;
    &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
例外
&lt;/p&gt;

&lt;p&gt;
我们经常在派生类中重用基类函数名：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;struct&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;B&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;struct&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;D&lt;/span&gt; : &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;B&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;double&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;using&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;B&lt;/span&gt;::f;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
不过，这样也容易出错。比如，如果我们忘记用 &lt;code&gt;using&lt;/code&gt; 声明，调用 &lt;code&gt;d.f(1)&lt;/code&gt; 就找不到参数为 &lt;code&gt;int&lt;/code&gt; 类型的 &lt;code&gt;f&lt;/code&gt; 函数。
&lt;/p&gt;


&lt;p&gt;
强化
&lt;/p&gt;

&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;标记在嵌套局部作用域重用变量名的情况&lt;/li&gt;
&lt;li&gt;标记在成员函数内重用成员变量名的情况&lt;/li&gt;
&lt;li&gt;标记把全局变量重用到局部变量或成员变量名的情况&lt;/li&gt;
&lt;li&gt;标记派生类中重用基类成员变量名的情况（函数名除外）&lt;/li&gt;
&lt;/ul&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines ES.11 使用 auto 避免重复的类型名</title>
   <link href="http://kimi.im/2023-03-21-cppcoreguidelines-es11"/>
   <updated>2023-03-21T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-es11</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;Use auto to avoid redundant repetition of type names&amp;rdquo;
&lt;/p&gt;


&lt;p&gt;
理由
&lt;/p&gt;

&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;简单的重复繁琐易错。&lt;/li&gt;
&lt;li&gt;如果你用了 auto，声明的变量实体在固定位置，（因为 auto 的宽度固定么）提升了阅读性。&lt;/li&gt;
&lt;li&gt;声明函数模板时，auto 还可以表示返回值是成员类型&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;
例子
&lt;/p&gt;

&lt;p&gt;
考虑：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;auto&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;p&lt;/span&gt; = v.begin&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;;      &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;vector&amp;lt;DataRecord&amp;gt;::iterator&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;auto&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;z1&lt;/span&gt; = v&lt;span style=&quot;color: #707183;&quot;&gt;[&lt;/span&gt;3&lt;span style=&quot;color: #707183;&quot;&gt;]&lt;/span&gt;;          &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;makes copy of DataRecord&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;auto&lt;/span&gt;&amp;amp; &lt;span style=&quot;color: #000000;&quot;&gt;z2&lt;/span&gt; = v&lt;span style=&quot;color: #707183;&quot;&gt;[&lt;/span&gt;3&lt;span style=&quot;color: #707183;&quot;&gt;]&lt;/span&gt;;         &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;avoids copy&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;auto&lt;/span&gt;&amp;amp; &lt;span style=&quot;color: #000000;&quot;&gt;z3&lt;/span&gt; = v&lt;span style=&quot;color: #707183;&quot;&gt;[&lt;/span&gt;3&lt;span style=&quot;color: #707183;&quot;&gt;]&lt;/span&gt;;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;const and avoids copy&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;auto&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;h&lt;/span&gt; = t.future&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;auto&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;q&lt;/span&gt; = make_unique&lt;span style=&quot;color: #707183;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;[]&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;gt;(&lt;/span&gt;s&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;auto&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;f&lt;/span&gt; = &lt;span style=&quot;color: #707183;&quot;&gt;[](&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;x&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; x + 10; &lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
以上例子中，我们避免了写繁琐、难记的类型名。编译器能推导出来，但是程序员容易出错。
&lt;/p&gt;

&lt;p&gt;
例子
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;template&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;auto&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;Container&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;gt;&lt;/span&gt;::&lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;first&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt; -&amp;gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Iterator&lt;/span&gt;;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;Container&amp;lt;T&amp;gt;::Iterator&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;
例外
&lt;/p&gt;


&lt;p&gt;
如果你明确什么类型，就避免对初始化列表使用 auto。可能需要类型转换。
&lt;/p&gt;

&lt;p&gt;
例子
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;auto&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;lst&lt;/span&gt; = &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt; 1, 2, 3 &lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;lst is an initializer list&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;auto&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;x&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;1&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;x is an int (in C++17; initializer_list in C++11)&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;
注意
&lt;/p&gt;

&lt;p&gt;
在 C++20 中，我们可以，而且应该用 concept 明确我们想推导的类型：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;...&lt;/span&gt;
&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;forward_iterator&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;auto&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;p&lt;/span&gt; = algo&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;x, y, z&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;
&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;
C++17 例子
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #110099;&quot;&gt;std&lt;/span&gt;::&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;set&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;values&lt;/span&gt;;
&lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;...&lt;/span&gt;
&lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;break out the members of the std::pair&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;auto&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;[&lt;/span&gt; position, newly_inserted &lt;span style=&quot;color: #707183;&quot;&gt;]&lt;/span&gt; = values.insert&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;5&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;   
&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;
强化
&lt;/p&gt;

&lt;p&gt;
在声明中标注多余重复的类型名
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines ES.10 一个声明语句只声明一个变量</title>
   <link href="http://kimi.im/2023-03-18-cppcoreguidelines-es10"/>
   <updated>2023-03-18T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-es10</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;Declare one name (only) per declaration&amp;rdquo;
&lt;/p&gt;

&lt;p&gt;
理由
&lt;/p&gt;

&lt;p&gt;
一行只声明一个变量可以提升可读性，避免语法相关的错误。也能有助于添加行尾注释。
&lt;/p&gt;

&lt;p&gt;
坏例子
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;char&lt;/span&gt; *&lt;span style=&quot;color: #000000;&quot;&gt;p&lt;/span&gt;, &lt;span style=&quot;color: #000000;&quot;&gt;c&lt;/span&gt;, &lt;span style=&quot;color: #000000;&quot;&gt;a&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;[&lt;/span&gt;7&lt;span style=&quot;color: #707183;&quot;&gt;]&lt;/span&gt;, *&lt;span style=&quot;color: #000000;&quot;&gt;pp&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;[&lt;/span&gt;7&lt;span style=&quot;color: #707183;&quot;&gt;]&lt;/span&gt;, **&lt;span style=&quot;color: #000000;&quot;&gt;aa&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;[&lt;/span&gt;10&lt;span style=&quot;color: #707183;&quot;&gt;]&lt;/span&gt;;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;yuck!&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;
例外
&lt;/p&gt;

&lt;p&gt;
函数声明中可以有多个参数声明。
&lt;/p&gt;


&lt;p&gt;
例外
&lt;/p&gt;

&lt;p&gt;
结构化绑定（C++17）设计的目的是为了引入多个变量：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;auto&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;[&lt;/span&gt;iter, inserted&lt;span style=&quot;color: #707183;&quot;&gt;]&lt;/span&gt; = m.insert_or_assign&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;k, val&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;inserted&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;/* &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;new entry was inserted&lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt; */&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;
例子
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;template&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;InputIterator&lt;/span&gt;, &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Predicate&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;bool&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;any_of&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;InputIterator&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;first&lt;/span&gt;, &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;InputIterator&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;last&lt;/span&gt;, &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Predicate&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;pred&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
或者使用概念（concept）会更好：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;bool&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;any_of&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;input_iterator&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;auto&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;first&lt;/span&gt;, &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;input_iterator&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;auto&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;last&lt;/span&gt;, &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;predicate&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;auto&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;pred&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
例子
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;double&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;scalbn&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;double&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;x&lt;/span&gt;, &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;n&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;OK: x * pow(FLT_RADIX, n); FLT_RADIX is usually 2&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
或
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;double&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;scalbn&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;better: x * pow(FLT_RADIX, n); FLT_RADIX is usually 2&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;double&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;x&lt;/span&gt;,     &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;base value&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;n&lt;/span&gt;         &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;exponent&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
或
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;better: base * pow(FLT_RADIX, exponent); FLT_RADIX is usually 2&lt;/span&gt;
&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;double&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;scalbn&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;double&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;base&lt;/span&gt;, &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;exponent&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
例子
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;a&lt;/span&gt; = 10, &lt;span style=&quot;color: #000000;&quot;&gt;b&lt;/span&gt; = 11, &lt;span style=&quot;color: #000000;&quot;&gt;c&lt;/span&gt; = 12, &lt;span style=&quot;color: #000000;&quot;&gt;d&lt;/span&gt;, &lt;span style=&quot;color: #000000;&quot;&gt;e&lt;/span&gt; = 14, &lt;span style=&quot;color: #000000;&quot;&gt;f&lt;/span&gt; = 15;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
这种过长的初始化过程很容易不小心引入未初始化的变量。
&lt;/p&gt;


&lt;p&gt;
强化
&lt;/p&gt;

&lt;p&gt;
标注一行声明多个变量或常量的情况（如 int* p, q;）
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines ES.9 避免全大写的命名</title>
   <link href="http://kimi.im/2023-03-17-cppcoreguidelines-es9"/>
   <updated>2023-03-17T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-es9</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;Avoid &lt;code&gt;ALL_CAPS&lt;/code&gt; names&amp;rdquo;
&lt;/p&gt;


&lt;p&gt;
理由
&lt;/p&gt;

&lt;p&gt;
这类命名通常是宏。因此全大写的命名可能会不小心被宏替换掉。
&lt;/p&gt;

&lt;p&gt;
例子
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;somewhere in some header:&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;#define&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;NE&lt;/span&gt; !=

&lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;somewhere else in some other header:&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;enum&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Coord&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;N&lt;/span&gt;, &lt;span style=&quot;color: #000000;&quot;&gt;NE&lt;/span&gt;, &lt;span style=&quot;color: #000000;&quot;&gt;NW&lt;/span&gt;, &lt;span style=&quot;color: #000000;&quot;&gt;S&lt;/span&gt;, &lt;span style=&quot;color: #000000;&quot;&gt;SE&lt;/span&gt;, &lt;span style=&quot;color: #000000;&quot;&gt;SW&lt;/span&gt;, &lt;span style=&quot;color: #000000;&quot;&gt;E&lt;/span&gt;, &lt;span style=&quot;color: #000000;&quot;&gt;W&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;

&lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;somewhere third in some poor programmer&apos;s .cpp:&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;switch&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;direction&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;case&lt;/span&gt; N:
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;...&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;case&lt;/span&gt; NE:
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;...&lt;/span&gt;
&lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;...&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
注意
&lt;/p&gt;

&lt;p&gt;
不要因为习惯用宏来定义常量而把常量写成全大写的。
&lt;/p&gt;


&lt;p&gt;
标注所有使用全大写的命名。对于老的代码，可以接受全大写的宏。对于不是宏的全大写命名，需要特别标注。
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines ES.8 避免似是而非的名字</title>
   <link href="http://kimi.im/2023-03-15-cppcoreguidelines-es8"/>
   <updated>2023-03-15T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-es8</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;Avoid similar-looking names&amp;rdquo;
&lt;/p&gt;


&lt;p&gt;
理由
&lt;/p&gt;

&lt;p&gt;
代码清晰可读。太相似的名字，难以理解、容易出错。
&lt;/p&gt;

&lt;p&gt;
坏例子
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;readable&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;i1 + l1 + ol + o1 + o0 + ol + o1 + I0 + l0&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt; surprise&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;;
&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;
坏例子
&lt;/p&gt;

&lt;p&gt;
不要在同一个作用域范围中声明一个与类型名一样变量名。这样声明变量的时候，就可以避免添加 struct, enum 关键字。也能减少错误的可能。比如 struct X 可能会隐式的声明一个 X 类型。
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;struct&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;foo&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;n&lt;/span&gt;; &lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;struct&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;foo&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;foo&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;;       &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;BAD, foo is a type already in scope&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;struct&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;foo&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;x&lt;/span&gt; = foo&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;requires disambiguation&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;
例外
&lt;/p&gt;

&lt;p&gt;
古老的头文件中可能会在同个作用域范围内定义一个和类型名一样的变量名。
&lt;/p&gt;


&lt;p&gt;
强化
&lt;/p&gt;

&lt;p&gt;
检查难以识别的字母和数字组合。还可以选择区分度比较高的编码字体。
&lt;/p&gt;

&lt;p&gt;
标记在同一个作用域中，与类型名重名的变量、函数和枚举值。
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>单词本：paucity</title>
   <link href="http://kimi.im/2023-03-15-paucity"/>
   <updated>2023-03-15T00:00:00+00:00</updated>
   <id>http://kimi.im/paucity</id>
   <content type="html">&lt;p&gt;
Michelle Brody 的关于办公室文化的书《Own Your Armor》
(&lt;a href=&quot;#citeproc_bib_item_1&quot;&gt;Brody 2022&lt;/a&gt;) 中写道：
&lt;/p&gt;

&lt;p&gt;
Typical symptoms of a dysfunctional workplace include a &lt;b&gt;paucity&lt;/b&gt; of
trust, accountability and honesty. People behave unprofessionally,
blame one another, gossip and complain. Frustrations run high. 办公室职能失调症状包括：缺少信任、责任感和坦诚。人们不专业、谴责他人、闲言碎语、报怨，容易懊恼。
&lt;/p&gt;

&lt;p&gt;
这里用到一个词 paucity，意思是缺乏、少数、少量。
&lt;/p&gt;

&lt;p&gt;
这个词来自拉丁语 paucus，意思是一些、一点点。
&lt;/p&gt;

&lt;p&gt;
另外法语中的 peu，意大利中的 poco 也都源自 paucus。比如：
&lt;/p&gt;

&lt;p&gt;
C&amp;rsquo;est une situation un &lt;b&gt;peu&lt;/b&gt; étrange. 这个情况有些诡异。
&lt;/p&gt;

&lt;p&gt;
Quand je dis point, je veux dire très &lt;b&gt;peu&lt;/b&gt;; Encor ce &lt;b&gt;peu&lt;/b&gt; lui donnait de
la peine. 当我说到点上，我说的很少，这很少一些仍能给他点颜色看看。
&lt;/p&gt;

&lt;p&gt;
le &lt;b&gt;peu&lt;/b&gt; 也可以表示很短的时间，比如：
&lt;/p&gt;

&lt;p&gt;
Le &lt;b&gt;peu&lt;/b&gt; que nous avons à les posséder. 我们只有很短的时间拥有世上的东西。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;References&lt;/b&gt;
&lt;/p&gt;
&lt;style&gt;.csl-entry{text-indent: -1.5em; margin-left: 1.5em;}&lt;/style&gt;&lt;div class=&quot;csl-bib-body&quot;&gt;
  &lt;div class=&quot;csl-entry&quot;&gt;&lt;a id=&quot;citeproc_bib_item_1&quot;&gt;&lt;/a&gt;Brody, Michelle. 2022. &lt;i&gt;Own Your Armor: Revolutionary Change for Workplace Culture&lt;/i&gt;. Edited by Michelle Brody. Michelle Brody.&lt;/div&gt;
&lt;/div&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines ES.7 常见局部变量名尽量短，不常见非局部变量名可稍长</title>
   <link href="http://kimi.im/2023-03-14-cppcoreguidelines-es7"/>
   <updated>2023-03-14T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-es7</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;Keep common and local names short, and keep uncommon and non-local names longer&amp;rdquo;
&lt;/p&gt;


&lt;p&gt;
理由
&lt;/p&gt;

&lt;p&gt;
可读性。避免不相关的非局部变量重名。
&lt;/p&gt;


&lt;p&gt;
例子
&lt;/p&gt;

&lt;p&gt;
按照惯例，短小的局部变量名可提升可读性。
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;template&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;typename&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;gt;&lt;/span&gt;    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;good&lt;/span&gt;
&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;print&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;ostream&lt;/span&gt;&amp;amp; &lt;span style=&quot;color: #000000;&quot;&gt;os&lt;/span&gt;, &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;vector&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;&amp;gt;&lt;/span&gt;&amp;amp; &lt;span style=&quot;color: #000000;&quot;&gt;v&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;for&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;gsl&lt;/span&gt;::&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;index&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;i&lt;/span&gt; = 0; i &amp;lt; v.size&lt;span style=&quot;color: #909183;&quot;&gt;()&lt;/span&gt;; ++i&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;
        os &amp;lt;&amp;lt; v&lt;span style=&quot;color: #7388d6;&quot;&gt;[&lt;/span&gt;i&lt;span style=&quot;color: #7388d6;&quot;&gt;]&lt;/span&gt; &amp;lt;&amp;lt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&apos;\n&apos;&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
按照惯例，下标索引都叫 i。vector 也没特别要求，命名为 v 就足够了。
&lt;/p&gt;

&lt;p&gt;
试比较
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;template&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;typename&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Element_type&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;gt;&lt;/span&gt;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;bad: verbose, hard to read&lt;/span&gt;
&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;print&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;ostream&lt;/span&gt;&amp;amp; &lt;span style=&quot;color: #000000;&quot;&gt;target_stream&lt;/span&gt;, &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;vector&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Element_type&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;&amp;gt;&lt;/span&gt;&amp;amp; &lt;span style=&quot;color: #000000;&quot;&gt;current_vector&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;for&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;gsl&lt;/span&gt;::&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;index&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;current_element_index&lt;/span&gt; = 0;
         current_element_index &amp;lt; current_vector.size&lt;span style=&quot;color: #909183;&quot;&gt;()&lt;/span&gt;;
         ++current_element_index
    &lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;
    target_stream &amp;lt;&amp;lt; current_vector&lt;span style=&quot;color: #7388d6;&quot;&gt;[&lt;/span&gt;current_element_index&lt;span style=&quot;color: #7388d6;&quot;&gt;]&lt;/span&gt; &amp;lt;&amp;lt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&apos;\n&apos;&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
是不是有些夸张，我们还见过更夸张的呢。
&lt;/p&gt;


&lt;p&gt;
例子
&lt;/p&gt;

&lt;p&gt;
没有相关惯例的情况下，短小的非局部名称会导致混乱：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;use1&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;string&lt;/span&gt;&amp;amp; &lt;span style=&quot;color: #000000;&quot;&gt;s&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;...&lt;/span&gt;
    tt&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;s&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;bad: what is tt()?&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;...&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
最好给这种非局部的实体取个可读性好的名字
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;use1&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;string&lt;/span&gt;&amp;amp; &lt;span style=&quot;color: #000000;&quot;&gt;s&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;...&lt;/span&gt;
    trim_tail&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;s&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;better&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;...&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
这样，读代码的人能猜出 &lt;code&gt;trim_tail&lt;/code&gt; 的意思，之后，可能知道怎么查找。
&lt;/p&gt;


&lt;p&gt;
坏例子
&lt;/p&gt;

&lt;p&gt;
对于比较长的函数来说，其参数要作为非局部变量对待。
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;void&lt;/span&gt; compl&lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;icated_algorithm&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;vector&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;&amp;lt;&lt;/span&gt;Record&lt;span style=&quot;color: #7388d6;&quot;&gt;&amp;gt;&lt;/span&gt;&amp;amp; &lt;span style=&quot;color: #000000;&quot;&gt;vr&lt;/span&gt;, &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;vector&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;&amp;gt;&lt;/span&gt;&amp;amp; &lt;span style=&quot;color: #000000;&quot;&gt;vi&lt;/span&gt;, &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;map&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;string&lt;/span&gt;, &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;&amp;gt;&lt;/span&gt;&amp;amp; &lt;span style=&quot;color: #000000;&quot;&gt;out&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;read from events in vr (marking used Records) for the indices in&lt;/span&gt;
&lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;vi placing (name, index) pairs into out&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;... 500 lines of code using vr, vi, and out ...&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
尽管我们建议短函数。但是总会出现长函数的情况，那么规则也要相应调整。
&lt;/p&gt;


&lt;p&gt;
强化
&lt;/p&gt;

&lt;p&gt;
检查局部和非局部的变量名长度情况。函数的长度也要考虑进来。
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>单词本：furlough</title>
   <link href="http://kimi.im/2023-03-14-english-furlough"/>
   <updated>2023-03-14T00:00:00+00:00</updated>
   <id>http://kimi.im/english-furlough</id>
   <content type="html">&lt;p&gt;
Peter Cappelli 写的《The Future of the Office》
(&lt;a href=&quot;#citeproc_bib_item_1&quot;&gt;Cappelli 2021&lt;/a&gt;) 提到假期的重要性，写道：
&lt;/p&gt;

&lt;p&gt;
Some companies, such as Marriott International, &lt;b&gt;furloughed&lt;/b&gt; 66% of
their corporate employees for two months. 有些公司，比如万豪国际给 66%
的员工提供 2 个月的放假。
&lt;/p&gt;

&lt;p&gt;
这个 furlough 是放假的意思，多用于军事中的准假。其实是 for leave 的一个比较古老的写法。
&lt;/p&gt;

&lt;p&gt;
举个例子，比如英国最近在清算，召回了 23 亿英镑新冠期间的企业补助。这些无良企业宣传员工在休假，领取政府补助，其实是在让员工上班。
&lt;/p&gt;

&lt;p&gt;
Efforts by Tory ministers to recover the £2.3 billion of taxpayers’
cash received by employers falsely claiming Covid-19 &lt;b&gt;furlough&lt;/b&gt; support
for staff who continued to work are “woeful and will fail to deter
potential future criminals,” MPs warned today.
&lt;/p&gt;

&lt;p&gt;
&lt;b&gt;References&lt;/b&gt;
&lt;/p&gt;
&lt;style&gt;.csl-entry{text-indent: -1.5em; margin-left: 1.5em;}&lt;/style&gt;&lt;div class=&quot;csl-bib-body&quot;&gt;
  &lt;div class=&quot;csl-entry&quot;&gt;&lt;a id=&quot;citeproc_bib_item_1&quot;&gt;&lt;/a&gt;Cappelli, Peter. 2021. &lt;i&gt;The Future of the Office: Work from Home, Remote Work, and the Hard Choices We All Face&lt;/i&gt;. Wharton School Press.&lt;/div&gt;
&lt;/div&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines ES.6 在 for 语句的初始化和条件判断处声明变量，限制变量范围</title>
   <link href="http://kimi.im/2023-03-13-cppcoreguidelines-es6"/>
   <updated>2023-03-13T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-es6</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;Declare names in for-statement initializers and conditions to limit
scope&amp;rdquo;
&lt;/p&gt;


&lt;p&gt;
理由
&lt;/p&gt;


&lt;p&gt;
高可读性。在循环或条件判断的范围内限制变量的作用域。避免在循环或条件判断外使用循环变量。缩小资源驻留期。
&lt;/p&gt;


&lt;p&gt;
例子
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;use&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;for&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;string&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;s&lt;/span&gt;; cin &amp;gt;&amp;gt; s;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;
        v.push_back&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;s&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;

    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;for&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;i&lt;/span&gt; = 0; i &amp;lt; 20; ++i&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;good: i is local to for-loop&lt;/span&gt;
        &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;...&lt;/span&gt;
    &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;

    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;auto&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;pc&lt;/span&gt; = &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;dynamic_cast&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Circle&lt;/span&gt;*&lt;span style=&quot;color: #909183;&quot;&gt;&amp;gt;(&lt;/span&gt;ps&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;good: pc is local to if-statement&lt;/span&gt;
        &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;... deal with Circle ...&lt;/span&gt;
    &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;else&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;
        &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;... handle error ...&lt;/span&gt;
    &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
坏例子
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;j&lt;/span&gt;;                            &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;BAD: j is visible outside the loop&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;for&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;j = 0; j &amp;lt; 100; ++j&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;...&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;j is still visible here and isn&apos;t needed&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;
强化
&lt;/p&gt;

&lt;p&gt;
标注警告：如果一个变量在 for 循环外部声明，在循环内中修改了，之后没有被使用。
&lt;/p&gt;

&lt;p&gt;
标注警告：如果一个变量在循环前声明，在循环后又做其他用途。
&lt;/p&gt;


&lt;p&gt;
讨论
&lt;/p&gt;

&lt;p&gt;
限定循环变量的使用范围可以帮助优化代码。如果能识别出变量只在循环中使用，可以发掘潜在的优化可能：比如通过代码提升（把内部循环提升到外部执行）、强度减弱（用消耗小的等价代码替代耗费资源的的代码），循环不变代码移动（Loop-Invarian Code Motion (LICM)，通过发现每次循环执行的结果不变，直接用替代结果）。
&lt;/p&gt;


&lt;p&gt;
C++17 和 C++20 的例子
&lt;/p&gt;

&lt;p&gt;
注意， C++17 和 C++20 还引入了 if, switch, 范围 for 的初始化语句。
&lt;/p&gt;

&lt;p&gt;
比如
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;map&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt;, &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;string&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;mymap&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;1, &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;one&quot;&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;, &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;2, &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;two&quot;&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;
 
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;auto&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;result&lt;/span&gt; = mymap.insert&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;{&lt;/span&gt;4, &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;three&quot;&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;; result.second&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;insert succeeded, and result is valid for this block&lt;/span&gt;
    cout &amp;lt;&amp;lt; result.first-&amp;gt;second;  &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;ok&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;...&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;result is destroyed here&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;pre class=&quot;example&quot;&gt;
three
&lt;/pre&gt;



&lt;p&gt;
针对 C++17 和 C++20 的强化
&lt;/p&gt;

&lt;p&gt;
标注选择/循环变量在语句前声明的情况
&lt;/p&gt;

&lt;p&gt;
标注在选择/循环语句前声明，却在语句后用作它途的情况
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>单词本：ethereal</title>
   <link href="http://kimi.im/2023-03-13-ethereal"/>
   <updated>2023-03-13T00:00:00+00:00</updated>
   <id>http://kimi.im/ethereal</id>
   <content type="html">&lt;p&gt;
以太网是 3Com 的创始人 Bob Metcalfe 发明的。
&lt;/p&gt;

&lt;p&gt;
那么，为什么要取这个名字呢。因为 19 世纪英国科学家 James Clerk Maxwell
发现了电磁场，并提出了著名的麦克斯韦方程组。但是的科学家不知道真空中能传输电磁波，于是就认为空间中充满了某些 &lt;b&gt;ethereal&lt;/b&gt; medium，即虚无飘渺的媒介。
&lt;/p&gt;

&lt;p&gt;
这个 ethereal 可能源自拉丁语 aether，意思是&amp;ldquo;the upper pure, bright
air&amp;rdquo;，就是苍穹了。ethereal 的意思就是向苍穹那样虚无缥缈，轻飘飘的。
&lt;/p&gt;

&lt;p&gt;
虚无缥缈、轻飘飘，也是一种优雅。比如 She&amp;rsquo;s the prettiest, most
&lt;b&gt;ethereal&lt;/b&gt; romantic heroine in the movies. 她是最美的、最优雅的女主角。
&lt;/p&gt;

&lt;p&gt;
因为乙醚是一种极易挥发的轻飘飘的气体。所以它名字也叫 ether：乙醚，是一种有机化合物，化学式为 \(C_{2}H_{5}OC_{2}H_{5}\)，为无色透明液体，有特殊刺激气味。带甜味。极易挥发。
&lt;/p&gt;

&lt;p&gt;
这就导致了 etherealize 这个动词有两种意思，一个是使得东西含有乙醚，即乙醚化。另一个意思则是轻飘飘化、脱俗化。
&lt;/p&gt;

&lt;p&gt;
另外，网络抓报工具 wireshark 之前的名字叫 ethereal。也是有其深意的。
&lt;/p&gt;

&lt;p&gt;
还有比如以太坊 Ethereum，也是一种虚无缥缈的东西。
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines ES.5 小作用域范围</title>
   <link href="http://kimi.im/2023-03-10-cppcoreguidelines-es5"/>
   <updated>2023-03-10T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-es5</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;Keep scopes small&amp;rdquo;
&lt;/p&gt;


&lt;p&gt;
理由
&lt;/p&gt;

&lt;p&gt;
可读性。减小资源的驻留。避免意外错误使用变量。
&lt;/p&gt;


&lt;p&gt;
其他规则：不要把变量声明在不必要的大作用域范围中。
&lt;/p&gt;


&lt;p&gt;
例子
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;use&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;i&lt;/span&gt;;    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;bad: i is needlessly accessible after loop&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;for&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;i = 0; i &amp;lt; 20; ++i&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;/* &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;...&lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt; */&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;no intended use of i here&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;for&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;i&lt;/span&gt; = 0; i &amp;lt; 20; ++i&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;/* &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;...&lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt; */&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;  &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;good: i is local to for-loop&lt;/span&gt;

    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;auto&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;pc&lt;/span&gt; = &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;dynamic_cast&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Circle&lt;/span&gt;*&lt;span style=&quot;color: #909183;&quot;&gt;&amp;gt;(&lt;/span&gt;ps&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;  &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;good: pc is local to if-statement&lt;/span&gt;
        &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;... deal with Circle ...&lt;/span&gt;
    &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;else&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;
        &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;... handle error ...&lt;/span&gt;
    &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
坏例子
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;use&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;string&lt;/span&gt;&amp;amp; &lt;span style=&quot;color: #000000;&quot;&gt;name&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;string&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;fn&lt;/span&gt; = name + &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;.txt&quot;&lt;/span&gt;;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;ifstream&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;is&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;fn&lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Record&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;r&lt;/span&gt;;
    is &amp;gt;&amp;gt; r;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;... 200 lines of code without intended use of fn or is ...&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
首先，这个函数太长了。但是，重点是 fn 这个文件句柄的驻留范围太大，在后面，可能被错误使用。所以，最好把相关代码提取出来，单独设立个函数：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Record&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;load_record&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;string&lt;/span&gt;&amp;amp; &lt;span style=&quot;color: #000000;&quot;&gt;name&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;string&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;fn&lt;/span&gt; = name + &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;.txt&quot;&lt;/span&gt;;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;ifstream&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;is&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;fn&lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Record&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;r&lt;/span&gt;;
    is &amp;gt;&amp;gt; r;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; r;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;

&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;use&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;string&lt;/span&gt;&amp;amp; &lt;span style=&quot;color: #000000;&quot;&gt;name&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Record&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;r&lt;/span&gt; = load_record&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;name&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;... 200 lines of code ...&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;
强化
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;标注变量声明在循环外，但是循环结束后却不再使用的情况&lt;/li&gt;
&lt;li&gt;标注一些开销大的，如文件、锁等资源，在连续 N 行代码没有被用到的情况。&lt;/li&gt;
&lt;/ul&gt;
</content>
 </entry>
 
 <entry>
   <title>单词本：endorse</title>
   <link href="http://kimi.im/2023-03-08-endorse"/>
   <updated>2023-03-08T00:00:00+00:00</updated>
   <id>http://kimi.im/endorse</id>
   <content type="html">&lt;p&gt;
昨天看了 Xu Lei, et. al. (&lt;a href=&quot;#citeproc_bib_item_2&quot;&gt;Xu et al. 2020&lt;/a&gt;) 写的一篇论文，介绍如何使用
FPGA 作为 TEE，构建工业物联网区块链系统的方案，因为用的是联盟区块链，所以他们写道：a device/server can participate the system only if it
has a private key with corresponding public key &lt;b&gt;endorsed&lt;/b&gt; by all
administrators.
&lt;/p&gt;

&lt;p&gt;
这个 &lt;b&gt;endorse&lt;/b&gt; 是背书、认可、赞同的意思。这里是指设备服务节点的非对称密钥的公钥被管理员认可了，才能参与区块链网络连接。
&lt;/p&gt;

&lt;p&gt;
至于背书、认可的过程，作者写道：All administrators verify the
signature \(\sigma_{c_{s}}\) using the public key \(pk^D_{BSP}\), which
they obtained directly from the device D. Then they &lt;b&gt;endorse&lt;/b&gt; the public
key \(pk^D_{BS}\) by signing it using their private keys and the
multisignature scheme, and D can use \(sk^D_{BS}\) for interaction with
other components of the system for authentication and other
attestation purposes.
&lt;/p&gt;

&lt;p&gt;
所有区块链节点管理员签名认可了设备的公钥之后，参能与其他节点交互通信。这种多签名机制，就能避免了单一信任问题：To guarantee the genuineness
of the corresponding public key, administrators physically obtain
public keys from devices and then &lt;b&gt;endorse&lt;/b&gt; them using a multi-signature
scheme.
&lt;/p&gt;

&lt;p&gt;
Lee et. al. 也写过一篇利用区块链管理物联网的文章 (&lt;a href=&quot;#citeproc_bib_item_1&quot;&gt;Lee et al. 2021&lt;/a&gt;)，其中也提到了区块链背书机制：In order to reduce both latency and
traffic in IIoT blockchain network, we propose an &lt;b&gt;endorsement&lt;/b&gt; policy
that allows orderer to collect the &lt;b&gt;endorsed&lt;/b&gt; responses from various
&lt;b&gt;endorsers&lt;/b&gt; instead of a client which transmits transaction proposals
only.
&lt;/p&gt;

&lt;p&gt;
这里 endorsement 是背书的名词，endorser 是背书人。
&lt;/p&gt;

&lt;p&gt;
其实前缀 en- 有 put on，装上，穿上的意思。而 dorse 则来自拉丁语 dossum，即后背的意思。连在一起，相当于是在背面装上、写上点东西，表示认可。最早的意思，是指在纸质文档的背面签名确认。那么，在数字化时代，就是对实体的公钥进行签名认可。
&lt;/p&gt;

&lt;p&gt;
与 dossum 相关的还有 dorsal，背部的、后背的。
&lt;/p&gt;

&lt;p&gt;
&lt;b&gt;References&lt;/b&gt;
&lt;/p&gt;
&lt;style&gt;.csl-entry{text-indent: -1.5em; margin-left: 1.5em;}&lt;/style&gt;&lt;div class=&quot;csl-bib-body&quot;&gt;
  &lt;div class=&quot;csl-entry&quot;&gt;&lt;a id=&quot;citeproc_bib_item_1&quot;&gt;&lt;/a&gt;Lee, Yunseong, Donghyun Lee, Junsuk Oh, Laihyuk Park, Woongsoo Na, and Sungrae Cho. 2021. “Endorsement Policy for Industrial Internet of Thing with Private Blockchain.” In &lt;i&gt;2021 International Conference on Information and Communication Technology Convergence (ICTC)&lt;/i&gt;, 449–52. doi:&lt;a href=&quot;https://doi.org/10.1109/ICTC52510.2021.9620893&quot;&gt;10.1109/ICTC52510.2021.9620893&lt;/a&gt;.&lt;/div&gt;
  &lt;div class=&quot;csl-entry&quot;&gt;&lt;a id=&quot;citeproc_bib_item_2&quot;&gt;&lt;/a&gt;Xu, Lei, Lin Chen, Zhimin Gao, Hanyee Kim, Taeweon Suh, and Weidong Shi. 2020. “FPGA Based Blockchain System for Industrial IoT.” In &lt;i&gt;2020 IEEE 19th International Conference on Trust, Security and Privacy in Computing and Communications (TrustCom)&lt;/i&gt;, 876–83. doi:&lt;a href=&quot;https://doi.org/10.1109/TrustCom50675.2020.00118&quot;&gt;10.1109/TrustCom50675.2020.00118&lt;/a&gt;.&lt;/div&gt;
&lt;/div&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines ES.3 不要重复、避免多余</title>
   <link href="http://kimi.im/2023-03-07-cppcoreguidelines-es3"/>
   <updated>2023-03-07T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-es3</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;Don&amp;rsquo;t repeat yourself, avoid redundant code&amp;rdquo;
&lt;/p&gt;

&lt;p&gt;
理由
&lt;/p&gt;

&lt;p&gt;
重复多余的代码，导致代码目的混乱，逻辑难以理解，维护困难等问题。往往是因为拷贝粘贴编程导致。
&lt;/p&gt;

&lt;p&gt;
尽量使用标准算法，而不要自己编写算法实现。
&lt;/p&gt;

&lt;p&gt;
例子
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;func&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;bool&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;flag&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;Bad, duplicated code.&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;flag&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;
        x&lt;span style=&quot;color: #909183;&quot;&gt;()&lt;/span&gt;;
        y&lt;span style=&quot;color: #909183;&quot;&gt;()&lt;/span&gt;;
    &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;else&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;
        x&lt;span style=&quot;color: #909183;&quot;&gt;()&lt;/span&gt;;
        z&lt;span style=&quot;color: #909183;&quot;&gt;()&lt;/span&gt;;
    &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;func&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;bool&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;flag&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;Better, no duplicated code.&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    x&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt;;

    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;flag&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;
        y&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt;;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;else&lt;/span&gt;
        z&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
强化
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;使用静态分析工具分析。可以发现一些多余重复的代码。&lt;/li&gt;
&lt;li&gt;进行代码评审&lt;/li&gt;
&lt;/ul&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines ES.2 请使用适当的抽象机制</title>
   <link href="http://kimi.im/2023-03-06-cppcoreguidelines-es2"/>
   <updated>2023-03-06T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-es2</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;Prefer suitable abstractions to direct use of language features&amp;rdquo;
&lt;/p&gt;


&lt;p&gt;
理由
&lt;/p&gt;

&lt;p&gt;
恰当的抽象（如库、类）比纯语言功能更接近应用概念。产生更短、更清晰、更可测的代码。
&lt;/p&gt;


&lt;p&gt;
例子
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;vector&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;string&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;read1&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;istream&lt;/span&gt;&amp;amp; &lt;span style=&quot;color: #000000;&quot;&gt;is&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;good&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;vector&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;string&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;res&lt;/span&gt;;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;for&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;string&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;s&lt;/span&gt;; is &amp;gt;&amp;gt; s;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;
        res.push_back&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;s&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; res;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
更传统和底层的实现方式代码更长、更混乱、更难写正确、可能速度更慢：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;char&lt;/span&gt;** &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;read2&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;istream&lt;/span&gt;&amp;amp; &lt;span style=&quot;color: #000000;&quot;&gt;is&lt;/span&gt;, &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;maxelem&lt;/span&gt;, &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;maxstring&lt;/span&gt;, &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt;* &lt;span style=&quot;color: #000000;&quot;&gt;nread&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;bad: verbose and incomplete&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;auto&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;res&lt;/span&gt; = &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;char&lt;/span&gt;*&lt;span style=&quot;color: #7388d6;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;maxelem&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;]&lt;/span&gt;;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;elemcount&lt;/span&gt; = 0;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;while&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;is&lt;/span&gt; &amp;amp;&amp;amp; &lt;span style=&quot;color: #000000;&quot;&gt;elemcount&lt;/span&gt; &amp;lt; maxelem&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;
        &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;auto&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;s&lt;/span&gt; = &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;char&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;[&lt;/span&gt;maxstring&lt;span style=&quot;color: #909183;&quot;&gt;]&lt;/span&gt;;
        is.read&lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;s, maxstring&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt;;
        res&lt;span style=&quot;color: #909183;&quot;&gt;[&lt;/span&gt;elemcount++&lt;span style=&quot;color: #909183;&quot;&gt;]&lt;/span&gt; = s;
    &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;
    *nread = elemcount;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; res;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;
如果再增加一些溢出检测和错误处理代码，程序会变得更加杂乱，还有个问题，我们还必须记得删除返回的指针和 C 风格的字符串数组。
&lt;/p&gt;


&lt;p&gt;
强化
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;检查杂乱循环、嵌套循环、长函数、缺少的函数调用、少用内置类型的地方。还有圈复杂度。&lt;/li&gt;
&lt;/ul&gt;
</content>
 </entry>
 
 <entry>
   <title>单词本：taurus</title>
   <link href="http://kimi.im/2023-03-06-taurus"/>
   <updated>2023-03-06T00:00:00+00:00</updated>
   <id>http://kimi.im/taurus</id>
   <content type="html">&lt;p&gt;
昨天提到周忠福博士创立的 Taurus International 公司在收购英国威尔斯石墨烯制造商 Perpetuus Group 的交易，近日遭到了英国政府的审查。Taurus
International 公司在国内也拥有全资控股的子公司——上海长犇实业有限公司。
&lt;/p&gt;

&lt;p&gt;
后来，我们了解到 taurus 是金牛座，也是拉丁语中公牛的意思。
&lt;/p&gt;

&lt;p&gt;
其实还有
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;taurine 牛磺酸&lt;/li&gt;
&lt;li&gt;taurodont 牛牙&lt;/li&gt;
&lt;li&gt;tauricide 牛磺酸杀虫剂。我们之前学习 &lt;a href=&quot;./2023-02-26-english-circumcision.html&quot;&gt;circumcision&lt;/a&gt; 的时候，了解到，
cide 是来自 caedere 切割。suicide 是自杀，这里是用牛磺酸杀虫咯。&lt;/li&gt;
&lt;li&gt;torero，toreador 斗牛士；&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
这些都跟 taurus 有些渊源的。
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>单词本：perpectual</title>
   <link href="http://kimi.im/2023-03-06-perpetual"/>
   <updated>2023-03-06T00:00:00+00:00</updated>
   <id>http://kimi.im/perpetual</id>
   <content type="html">&lt;p&gt;
心理咨询师、执行教练 Michelle Brody 的书《Own Your Armor》
(&lt;a href=&quot;#citeproc_bib_item_1&quot;&gt;Brody 2022&lt;/a&gt;)，讲的是针对职场出现的主动和被动防御心理，我们要以身作则，对自己的这种防备心理负责，和同事开诚布公、坦诚相处才可以尽释前嫌。
&lt;/p&gt;

&lt;p&gt;
那么，这种防御性的盔甲是怎么造成的呢？她说：When people feel
threatened, they build up their protective armor, and that fuels a
&lt;b&gt;perpetual&lt;/b&gt; cycle of workplace dysfunction. 当人们受到心理上的威胁的时候，就会建立自己的保护性盔甲，长此以往，就会形成持续性的工作空间功能紊乱。
&lt;/p&gt;

&lt;p&gt;
这里，Michelle 用了个单词是 perpetual，意思是永久的、持续的、无尽无休的。这个词来自拉丁语单词 perpetuus，意思也是持续的、无止尽的。
&lt;/p&gt;

&lt;p&gt;
刚刚，还找到个新闻，周忠福博士创立的Taurus International公司在收购英国威尔斯石墨烯制造商Perpetuus Group的交易，近日遭到了英国政府的审查。
&lt;/p&gt;

&lt;p&gt;
大家可以看到，这个周博士的公司 Taurus 是金牛座，在拉丁语里是公牛的意思。而 Perpetuus Group 正是用了我们今天介绍的 perpetuus。看来学点拉丁语，给公司取名字不愁了。顺便说下，Taurus International公司在国内也拥有全资控股的子公司——上海长犇实业有限公司，和 Taurus 还是有点关系的。
&lt;/p&gt;

&lt;p&gt;
其动词形式是 perpetuate，比如 Michelle 后面说到一个人穿上防御性盔甲之后，别人也会穿上，这就导致了无休止的不信任：When someone puts on armor
in self-defense, that causes other employees to armor up as well. This
fuels and &lt;b&gt;perpetuates&lt;/b&gt; a cycle of mistrust. 看来作者还是很喜欢这个单词的。
&lt;/p&gt;

&lt;p&gt;
另外，在 Ron A. Carucci 的《To Be Honest》(&lt;a href=&quot;#citeproc_bib_item_2&quot;&gt;Carucci 2021&lt;/a&gt;)，也用到了这个词：Microsoft once focused its traditional performance
evaluations on each person&amp;rsquo;s contribution, but it found that this
approach &lt;b&gt;perpetuated&lt;/b&gt; a culture of individualism and competitiveness.
competitiveness. 他说微软传统的绩效考核注重员工的个人贡献，导致了无休止的个人主义和竞争主义的企业文化。现在这个科技巨头改成考核团队协作。
&lt;/p&gt;

&lt;p&gt;
健身大师 Amaresh Ojha 在《健身习惯》 (&lt;a href=&quot;#citeproc_bib_item_3&quot;&gt;Ojha and Moitra 2021&lt;/a&gt;) 中也写道：Most
people find it difficult to change their habits because the
cue-routine-reward loop &lt;b&gt;perpetuates&lt;/b&gt; itself. 很多人发现改变习惯很难，因为提示、例行、激励这种循环本身无穷无尽。
&lt;/p&gt;

&lt;p&gt;
&lt;b&gt;References&lt;/b&gt;
&lt;/p&gt;
&lt;style&gt;.csl-entry{text-indent: -1.5em; margin-left: 1.5em;}&lt;/style&gt;&lt;div class=&quot;csl-bib-body&quot;&gt;
  &lt;div class=&quot;csl-entry&quot;&gt;&lt;a id=&quot;citeproc_bib_item_1&quot;&gt;&lt;/a&gt;Brody, Michelle. 2022. &lt;i&gt;Own Your Armor: Revolutionary Change for Workplace Culture&lt;/i&gt;. Edited by Michelle Brody. Michelle Brody.&lt;/div&gt;
  &lt;div class=&quot;csl-entry&quot;&gt;&lt;a id=&quot;citeproc_bib_item_2&quot;&gt;&lt;/a&gt;Carucci, Ron A. 2021. &lt;i&gt;To Be Honest: Lead with the Power of Truth, Justice and Purpose&lt;/i&gt;. Kogan Page.&lt;/div&gt;
  &lt;div class=&quot;csl-entry&quot;&gt;&lt;a id=&quot;citeproc_bib_item_3&quot;&gt;&lt;/a&gt;Ojha, Amaresh, and Subhra Moitra. 2021. &lt;i&gt;Fitness Habits: Breaking the Barriers to Fitness&lt;/i&gt;. Srishti Publishers.&lt;/div&gt;
&lt;/div&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines ES.1 相比非标准库和自己编写代码，首选标准库</title>
   <link href="http://kimi.im/2023-03-05-cppcoreguidelines-es1"/>
   <updated>2023-03-05T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-es1</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;Prefer the standard library to other libraries and to &amp;lsquo;handcrafted code&amp;rsquo;&amp;rdquo;
&lt;/p&gt;


&lt;p&gt;
理由
&lt;/p&gt;

&lt;p&gt;
使用程序标准库编码更容易、更精简、抽象层级更高。并且标准库代码都是经过严密测试的。ISO C++ 标准库是最广泛使用的、测试最彻底的库，所有 C++ 的实现中都自带的。
&lt;/p&gt;


&lt;p&gt;
例子
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;a&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;[]{&lt;/span&gt;1,3,5,7,9&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;auto&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;sum&lt;/span&gt; = accumulate&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;begin&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;a&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;, end&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;a&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;, 0.0&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;good&lt;/span&gt;
cout &amp;lt;&amp;lt; sum;
&lt;/pre&gt;
&lt;/div&gt;

&lt;pre class=&quot;example&quot;&gt;
25
&lt;/pre&gt;


&lt;p&gt;
最好是带范围信息的累加：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;auto&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;sum&lt;/span&gt; = accumulate&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;v, 0.0&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;better&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
但是不要自己编写常见的算法：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;vector&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;v&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;1,3,5,7,9&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;
&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;max&lt;/span&gt; = v.size&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;bad: verbose, purpose unstated&lt;/span&gt;
&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;double&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;sum&lt;/span&gt; = 0.0;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;for&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;i&lt;/span&gt; = 0; i &amp;lt; max; ++i&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
    sum = sum + v&lt;span style=&quot;color: #707183;&quot;&gt;[&lt;/span&gt;i&lt;span style=&quot;color: #707183;&quot;&gt;]&lt;/span&gt;;
cout &amp;lt;&amp;lt; sum;
&lt;/pre&gt;
&lt;/div&gt;

&lt;pre class=&quot;example&quot;&gt;
25
&lt;/pre&gt;



&lt;p&gt;
例外
&lt;/p&gt;

&lt;p&gt;
大部分标准库依赖于动态内存分配（自由存储区）。所以标准库中容器这部分数据结构是不满足硬实时和嵌入式应用的要求。这种情况，请考虑实现类似的功能。
&lt;/p&gt;


&lt;p&gt;
强化
&lt;/p&gt;

&lt;p&gt;
检查混乱的循环，嵌套循环，长函数，较少标准库类型，圈复杂度。
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>单词本：sal volatile</title>
   <link href="http://kimi.im/2023-03-05-sal-volatile"/>
   <updated>2023-03-05T00:00:00+00:00</updated>
   <id>http://kimi.im/sal-volatile</id>
   <content type="html">&lt;p&gt;
还是 C. S. Lewis 的《纳尼亚传奇》（The Chronicles of Narnia）第一册 The
Magician&amp;rsquo;s Nephew 第七章中 Aunt Letty 被女巫 Jadis 摔倒之后，
&lt;/p&gt;

&lt;p&gt;
she had had some &lt;b&gt;sal volatile&lt;/b&gt; and sat still for a few minutes, she
said there was nothing the matter with her except a few bruises.
&lt;/p&gt;

&lt;p&gt;
这里 Aunt Letty 吸了一些 sal volatile。这个 大概是拉丁语和法语的组合。
sal 是拉丁语“盐” salis 的属格。volatile 是法语，来自拉丁语 volatilis，即 飞 volare 的过去分词。合起来 sal volatile 就是挥发性盐，主要指的是碳酸氨，即 sal ammoniac。用来治疗眩晕用的。
&lt;/p&gt;

&lt;p&gt;
我们之前学到&lt;a href=&quot;./2021-12-16-english-worth-salt.html&quot;&gt;单词本：worth salt&lt;/a&gt;的时候，也考究过，拉丁语 salarium 是古罗马战士的特殊津贴。而特殊津贴是用来买盐吃的。所以 salary 就从 salarium
演变而来。
&lt;/p&gt;

&lt;p&gt;
顺便说下，这里 bruise 是瘀青的意思。大概来自古法语 bruisier 受伤。但是
bruiser 在英语里又是 pugilist，彪形大汉，职业拳击家。
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>单词本：pedal</title>
   <link href="http://kimi.im/2023-03-05-piano-pedal"/>
   <updated>2023-03-05T00:00:00+00:00</updated>
   <id>http://kimi.im/piano-pedal</id>
   <content type="html">&lt;p&gt;
大部分钢琴都配有三个脚踏板，分别是：
&lt;/p&gt;

&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;左踏板&lt;/li&gt;
&lt;li&gt;中踏板&lt;/li&gt;
&lt;li&gt;右踏板&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
左踏板也被称作 soft pedal，即弱音踏板、柔音踏板。立式钢琴和三角钢琴的左踏板工作原理不太一样。但作用差不多。都是通过移动钢琴音锤（hammer），使得它只敲击三个琴弦中的一根，从而产生较轻的声音。所以，在意大利语里，
soft pedal 也叫 una corda，即一根弦。
&lt;/p&gt;

&lt;p&gt;
在三角钢琴上，中踏板（middle pedal）则被称作保持音踏板、持续音踏板或保留音踏板（sostenuto pedal）。在立式钢琴上，中踏板被称作弱音踏板。顾名思义，这个踏板是能够起到弱化琴音的作用的。当演奏者在弹下一个音的同时踩下中踏板，刚刚弹出的音就会有延音效果，但演奏者之后弹出的音却不会得到延音效果。也就是说，中踏板只会使踩下时所弹奏的音对应的琴弦的制音器打开。比如你弹 Rachmaninoff 的 Piano Concerto No. 3 的时候就非常需要这个
sostenuto pedal 的支持。琴谱上 sostenuto 保持音记号用小短横表示。
&lt;/p&gt;

&lt;p&gt;
但是，在立式钢琴中，中踏板的作用只是在音锤和琴弦之间插入一层毛毡，从而减弱声音，避免影响邻居休息。因此，立式钢琴的中踏板又叫 practice pedal。或者你可以叫它：好邻居踏板！
&lt;/p&gt;

&lt;p&gt;
右踏板（right pedal）又叫延音踏板、制音踏板（damper pedal 或 sustain
pedal），它在钢琴的机械结构里与制音器相连，能够控制琴音的延续与否。所以当你踩下它的时候，琴弦声音就会一致延续，直到你松开 damper pedal，或者直到你不小心睡着了，从琴凳上摔下来。
&lt;/p&gt;


&lt;p&gt;
这个 pedal 是踏板的意思，它源自法语 la pédale 即 élément d&amp;rsquo;une machine
activé avec le pied. 机器上配合脚运动的组件。所以，你会发现法语 le
pied 脚和 la pédale 有不少相似的地方。
&lt;/p&gt;

&lt;p&gt;
其实上，拉丁语里 pes 就是脚的意思。所以，英语里 pedestrian 就是用脚走路的人，即行人。pedicure 足部保养。pedometer 计步器。
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>单词本：lunatic</title>
   <link href="http://kimi.im/2023-03-05-lunatic"/>
   <updated>2023-03-05T00:00:00+00:00</updated>
   <id>http://kimi.im/lunatic</id>
   <content type="html">&lt;p&gt;
C. S. Lewis 的《纳尼亚传奇》（The Chronicles of Narnia）第一册 The
Magician&amp;rsquo;s Nephew 第七章中 Aunt Letty 被女巫 Jadis 摔倒之后，起身让女佣Sarah 去警察局报警，让 Sarah 告诉警察， there is a dangerous &lt;b&gt;lunatic&lt;/b&gt;
at large.
&lt;/p&gt;

&lt;p&gt;
这里 &lt;b&gt;lunatic&lt;/b&gt; 是精神失常的意思。其实从字面看，好像是月亮相关的。因为月亮在拉丁语是 luna 在 法语是 lune。
&lt;/p&gt;

&lt;p&gt;
确实，lunatic 的本意其实是指因为月亮的变化而导致的周期性精神失常。拉丁语中写作 lunaticus 即 moon-stuck: unable to think or act normally,
especially as a result of being in love. 因爱情原因而无法正常思考和行动。有部叫《moon struck》的电影，译作《月色撩人》。
&lt;/p&gt;

&lt;p&gt;
其他比如 lunette 是月亮的 diminutive 小词缀形式。指的弦月窗、半月形物品。在法语里 lunettes 指的是太阳眼镜。戴上可以让太阳开起来像可爱的小月亮？
&lt;/p&gt;

&lt;p&gt;
所以，lunastic 是骂人的话。比如：you drive at wrong side! you lunatic!
你开错道了！你这个蠢货！you have a lunatic idea! 你的想法真蠢！
&lt;/p&gt;

&lt;p&gt;
慎用。
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines R.37 不要以指针或引用的方式传递智能指针的别名</title>
   <link href="http://kimi.im/2023-03-04-cppcoreguidelines-r37"/>
   <updated>2023-03-04T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-r37</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;Do not pass a pointer or reference obtained from an aliased smart pointer&amp;rdquo;
&lt;/p&gt;


&lt;p&gt;
理由
&lt;/p&gt;

&lt;p&gt;
违背此规则是导致引用计数丢失的首要原因。你会遇到悬挂指针问题。函数调用链中应该首选原始指针或引用。在调用链顶层，从智能指针获取原始指针或引用。智能指针用来记录对象是否存活。同时，你得保证在函数调用链中，智能指针不会不小心重置或重新赋值。
&lt;/p&gt;


&lt;p&gt;
注意
&lt;/p&gt;

&lt;p&gt;
有时候，你需要保存智能指针的一份本地副本，这个副本可以确保在函数调用期间对象不会删除。
&lt;/p&gt;


&lt;p&gt;
例子
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;global (static or heap), or aliased local ...&lt;/span&gt;
&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;shared_ptr&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;lt;&lt;/span&gt;widget&lt;span style=&quot;color: #707183;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;g_p&lt;/span&gt; = ...;

&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;widget&lt;/span&gt;&amp;amp; &lt;span style=&quot;color: #000000;&quot;&gt;w&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    g&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt;;
    use&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;w&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;  &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;A&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;

&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;g&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    g_p = ...; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;oops, if this was the last shared_ptr to that widget, destroys the widget&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
以下代码有问题：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;my_code&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;BAD: passing pointer or reference obtained from a non-local smart pointer&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;//      &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;that could be inadvertently reset somewhere inside f or its callees&lt;/span&gt;
    f&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;*g_p&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;

    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;BAD: same reason, just passing it as a &quot;this&quot; pointer&lt;/span&gt;
    g_p-&amp;gt;func&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;
修改方法也很简单，只要本地复制一份指针，在调用树中保持引用计数。
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;my_code&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;cheap: 1 increment covers this entire function and all the call trees below us&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;auto&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;pin&lt;/span&gt; = g_p;

    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;GOOD: passing pointer or reference obtained from a local unaliased smart pointer&lt;/span&gt;
    f&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;*pin&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;

    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;GOOD: same reason&lt;/span&gt;
    pin-&amp;gt;func&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;
强化
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;警告：从非局部的一个智能指针获取的指针/引用或者局部但可能是个别名的指针，用在了函数调用中。如果智能指针是一个共享指针，那么建议获取一份局部副本，并从那个副本获取指针或引用来使用。&lt;/li&gt;
&lt;/ul&gt;
</content>
 </entry>
 
 <entry>
   <title>单词本：encore</title>
   <link href="http://kimi.im/2023-03-04-encore"/>
   <updated>2023-03-04T00:00:00+00:00</updated>
   <id>http://kimi.im/encore</id>
   <content type="html">&lt;p&gt;
我们参加音乐会的时候，在演奏家演奏完退到幕后的时候，观众会不怀好意的继续大声鼓掌。这时候，演奏家就不得不再次出现演奏一曲。这就叫 encore。
&lt;/p&gt;

&lt;p&gt;
比如：The performer gives many encores to the audience.
&lt;/p&gt;

&lt;p&gt;
其实 encore 是法语单词，就是再一次，again，still，yet 的意思。那么，这个法语里简单的词语，到英语里，就成了音乐会专用词语“再次出场演出，经要求再唱”的意思。
&lt;/p&gt;

&lt;p&gt;
一般 encore 是按照法语读音的，即：盎告。所以 encore 的中文音译为安可曲。
&lt;/p&gt;

&lt;p&gt;
安可曲，一般在演唱会和音乐会中经常听到，即演出末尾邀请艺术家返场再来一曲，以示赞誉与不舍。面对如此盛情，艺术家们也会积极配合，以最拿手的代表作重响舞台，激起新一轮的热潮。
&lt;/p&gt;

&lt;p&gt;
那么，什么时候是要求安可的最佳时机呢？一般来说，在音乐会节目都演奏完毕后，就是观众们喊安可的时间。不过若是碰到有演奏协奏曲的音乐会，让独奏家安可也是一种礼貌与惯例，观众们可以在协奏曲演奏结束后，大声喊 encore！
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines R.36 用 const shared_ptr<widget>& 参数表明函数会保留对象的引用计数</title>
   <link href="http://kimi.im/2023-03-03-cppcoreguidelines-r36"/>
   <updated>2023-03-03T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-r36</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;Take a &lt;code&gt;const shared_ptr&amp;lt;widget&amp;gt;&amp;amp;&lt;/code&gt; parameter to express that it might retain a reference count to the object&amp;rdquo;
&lt;/p&gt;


&lt;p&gt;
理由
&lt;/p&gt;

&lt;p&gt;
显式的表达函数保持引用计数的机制
&lt;/p&gt;


&lt;p&gt;
好例子
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;share&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;shared_ptr&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;&amp;lt;&lt;/span&gt;widget&lt;span style=&quot;color: #7388d6;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;            &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;share -- &quot;will&quot; retain refcount&lt;/span&gt;

&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;reseat&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;shared_ptr&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;&amp;lt;&lt;/span&gt;widget&lt;span style=&quot;color: #7388d6;&quot;&gt;&amp;gt;&lt;/span&gt;&amp;amp;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;          &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;&quot;might&quot; reseat ptr&lt;/span&gt;

&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;may_share&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;shared_ptr&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;&amp;lt;&lt;/span&gt;widget&lt;span style=&quot;color: #7388d6;&quot;&gt;&amp;gt;&lt;/span&gt;&amp;amp;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;&quot;might&quot; retain refcount&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;
强化
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;警告：如果一个函数接收 &lt;code&gt;shared_ptr&amp;lt;T&amp;gt;&lt;/code&gt; 的左值引用参数，但是在所有代码执行路径上既不赋值，也不调用 &lt;code&gt;reset()&lt;/code&gt; 。考虑使用 &lt;code&gt;T*&lt;/code&gt; 或 &lt;code&gt;T&amp;amp;&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;警告：如果一个函数接收 &lt;code&gt;unique_ptr&amp;lt;T&amp;gt;&lt;/code&gt; 值或常值引用，但是在所有代码路径上，不复制或移动到另一个共享指针，考虑使用 &lt;code&gt;T*&lt;/code&gt; 或 &lt;code&gt;T&amp;amp;&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;警告：如果一个函数接收 &lt;code&gt;shared_ptr&amp;lt;T&amp;gt;&lt;/code&gt; 右值引用，考虑使用值传递。&lt;/li&gt;
&lt;/ul&gt;
</content>
 </entry>
 
 <entry>
   <title>单词本：Thereby hangs a tale</title>
   <link href="http://kimi.im/2023-03-03-english-thereby-hangs-a-tale"/>
   <updated>2023-03-03T00:00:00+00:00</updated>
   <id>http://kimi.im/english-thereby-hangs-a-tale</id>
   <content type="html">&lt;p&gt;
昨天看我们公司的架构师们写的架构文档，在提到某个设计方案的时候，写道：
Thereby hangs a tale。然后，哗啦哗啦地写了一堆。
&lt;/p&gt;

&lt;p&gt;
这个 Thereby hangs a tale 直译是这里挂着一个故事。大概就是说来话长、一言难尽的意思。
&lt;/p&gt;

&lt;p&gt;
所以，当别人问你一个事情的时候，你觉得这个事情一时半会解释不清楚，可以说 “Thereby hangs a tale” 因为有很多东西要解释。
&lt;/p&gt;

&lt;p&gt;
这个表达方式出自莎士比亚的喜剧《皆大欢喜（As You Like It）》：
&lt;/p&gt;

&lt;p class=&quot;verse&quot;&gt;
JAQUES:&lt;br /&gt;
&lt;br /&gt;
A fool, a fool! I met a fool i&amp;rsquo; the forest,&lt;br /&gt;
A motley fool; a miserable world!&lt;br /&gt;
As I do live by food, I met a fool&lt;br /&gt;
Who laid him down and bask&amp;rsquo;d him in the sun,&lt;br /&gt;
And rail&amp;rsquo;d on Lady Fortune in good terms,&lt;br /&gt;
and yet a motley fool.&lt;br /&gt;
&amp;rsquo;Good morrow, fool,&amp;rsquo; quoth I. &amp;rsquo;No, sir,&amp;rsquo; quoth he,&lt;br /&gt;
&amp;rsquo;Call me not fool till heaven hath sent me fortune:&amp;rsquo;&lt;br /&gt;
And then he drew a dial from his poke,&lt;br /&gt;
And, looking on it with lack-lustre eye,&lt;br /&gt;
Says very wisely, &amp;rsquo;It is ten o&amp;rsquo;clock:&lt;br /&gt;
Thus we may see,&amp;rsquo; quoth he, &amp;rsquo;how the world wags:&lt;br /&gt;
&amp;rsquo;Tis but an hour ago since it was nine,&lt;br /&gt;
And after one hour more &amp;rsquo;twill be eleven;&lt;br /&gt;
And so, from hour to hour, we ripe and ripe,&lt;br /&gt;
And then, from hour to hour, we rot and rot;&lt;br /&gt;
And &lt;b&gt;thereby hangs a tale&lt;/b&gt;.&amp;rsquo; When I did hear&lt;br /&gt;
The motley fool thus moral on the time,&lt;br /&gt;
My lungs began to crow like chanticleer,&lt;br /&gt;
That fools should be so deep-contemplative,&lt;br /&gt;
And I did laugh sans intermission&lt;br /&gt;
An hour by his dial. O noble fool!&lt;br /&gt;
A worthy fool! Motley&amp;rsquo;s the only wear.&lt;br /&gt;
&lt;/p&gt;

&lt;p&gt;
Jaques 在森林遇到个人，他说：“现在是十点钟了。我们可以从这里看出世界是怎样在变迁着：一小时之前还不过是九点钟，而再过一小时便是十一点钟了；照这样，一小时一小时地过去，我们越长越老，越老越不中用。真是一言难尽。”
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>单词本：concur</title>
   <link href="http://kimi.im/2023-03-03-english-concur"/>
   <updated>2023-03-03T00:00:00+00:00</updated>
   <id>http://kimi.im/english-concur</id>
   <content type="html">&lt;p&gt;
Peter Cappelli 的 《The Future of the Office》
(&lt;a href=&quot;#citeproc_bib_item_1&quot;&gt;Cappelli 2021&lt;/a&gt;) 在介绍远程工作称为新常态时，写道：
Post-pandemic, many employees want to keep working remotely, but not
all employers &lt;b&gt;concur&lt;/b&gt;. 后疫情时代，很多员工希望继续在家远程工作，但是并非所有雇主都赞同。
&lt;/p&gt;

&lt;p&gt;
这里，我们遇到个单词 &lt;b&gt;concur&lt;/b&gt; ，它的意思是赞同、赞成。其实其本意应该是一起发送、一起跑。
&lt;/p&gt;

&lt;p&gt;
为什么这么说呢？
&lt;/p&gt;

&lt;p&gt;
因为 con 其实是 com 的另一种写法，而 com 有是从拉丁语 cum 变来的。而
cum 是一起的意思。
&lt;/p&gt;

&lt;p&gt;
cur 则来自拉丁语 currere，就是跑步的意思。法语里的跑步 courir 倒是和拉丁语很接近。
&lt;/p&gt;

&lt;p&gt;
那么，con + cur 就是一起跑。一起跑，就要目标一致，赞成的意思咯。
&lt;/p&gt;

&lt;p&gt;
比如 Ron A. Carucci 在他的书《To Be Honest》(&lt;a href=&quot;#citeproc_bib_item_2&quot;&gt;Carucci 2021&lt;/a&gt;) 中说到作为 leader，在沟通一些负面评价的时候，尽管不赞成，也要做到同理心共情：Be empathetic, though you don&amp;rsquo;t have to concur or take action.
&lt;/p&gt;

&lt;p&gt;
SAP 倒是有个企业差旅 APP 叫 concur，帮你提高出差、报销的流程。确实是一个跟你一起出去跑业务的服务。
&lt;/p&gt;

&lt;p&gt;
再举几个例子，比如 concurrent 就是 concur 的状态，并存的、同时发生的、观点一致的意思。currency 就是在跑动的资金，流通的货币，就是通货。
current 就是跑动着的，就是当前流行的的么、最近的。
&lt;/p&gt;

&lt;p&gt;
&lt;b&gt;References&lt;/b&gt;
&lt;/p&gt;
&lt;style&gt;.csl-entry{text-indent: -1.5em; margin-left: 1.5em;}&lt;/style&gt;&lt;div class=&quot;csl-bib-body&quot;&gt;
  &lt;div class=&quot;csl-entry&quot;&gt;&lt;a id=&quot;citeproc_bib_item_1&quot;&gt;&lt;/a&gt;Cappelli, Peter. 2021. &lt;i&gt;The Future of the Office: Work from Home, Remote Work, and the Hard Choices We All Face&lt;/i&gt;. Wharton School Press.&lt;/div&gt;
  &lt;div class=&quot;csl-entry&quot;&gt;&lt;a id=&quot;citeproc_bib_item_2&quot;&gt;&lt;/a&gt;Carucci, Ron A. 2021. &lt;i&gt;To Be Honest: Lead with the Power of Truth, Justice and Purpose&lt;/i&gt;. Kogan Page.&lt;/div&gt;
&lt;/div&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines R.35 使用 shared_ptr<widget>& 参数表示函数会重座共享指针</title>
   <link href="http://kimi.im/2023-03-02-cppcoreguidelines-r35"/>
   <updated>2023-03-02T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-r35</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;Take a &lt;code&gt;shared_ptr&amp;lt;widget&amp;gt;&amp;amp;&lt;/code&gt; parameter to express that a function might reseat the shared pointer&amp;rdquo;
&lt;/p&gt;


&lt;p&gt;
理由
&lt;/p&gt;

&lt;p&gt;
明确标明函数的重座机制。
&lt;/p&gt;


&lt;p&gt;
注意
&lt;/p&gt;

&lt;p&gt;
重座（reseat）指的是让引用或智能指针指向另一个不同的对象
&lt;/p&gt;


&lt;p&gt;
坏例子
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;ChangeWidget&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;std&lt;/span&gt;::&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;shared_ptr&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;&amp;lt;&lt;/span&gt;widget&lt;span style=&quot;color: #7388d6;&quot;&gt;&amp;gt;&lt;/span&gt;&amp;amp; &lt;span style=&quot;color: #000000;&quot;&gt;w&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;This will change the callers widget&lt;/span&gt;
    w = &lt;span style=&quot;color: #110099;&quot;&gt;std&lt;/span&gt;::make_shared&lt;span style=&quot;color: #7388d6;&quot;&gt;&amp;lt;&lt;/span&gt;widget&lt;span style=&quot;color: #7388d6;&quot;&gt;&amp;gt;(&lt;/span&gt;widget&lt;span style=&quot;color: #909183;&quot;&gt;{}&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;
强化
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;警告：如果一个函数接收 &lt;code&gt;shared_ptr&amp;lt;T&amp;gt;&lt;/code&gt; 的左值引用参数，但是在所有代码执行路径上既不赋值，也不调用 &lt;code&gt;reset()&lt;/code&gt; 。考虑使用 &lt;code&gt;T*&lt;/code&gt; 或 &lt;code&gt;T&amp;amp;&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;警告：如果一个函数接收 &lt;code&gt;unique_ptr&amp;lt;T&amp;gt;&lt;/code&gt; 值或常值引用，但是在所有代码路径上，不复制或移动到另一个共享指针，考虑使用 &lt;code&gt;T*&lt;/code&gt; 或 &lt;code&gt;T&amp;amp;&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;警告：如果一个函数接收 &lt;code&gt;shared_ptr&amp;lt;T&amp;gt;&lt;/code&gt; 右值引用，考虑使用值传递。&lt;/li&gt;
&lt;/ul&gt;
</content>
 </entry>
 
 <entry>
   <title>单词本：anchorite</title>
   <link href="http://kimi.im/2023-03-02-english-anchorite"/>
   <updated>2023-03-02T00:00:00+00:00</updated>
   <id>http://kimi.im/english-anchorite</id>
   <content type="html">&lt;p&gt;
众所周知，《单词本》系列文章中提到的单词，大部分都是我自己在看看书、看文献资料的时候遇到的，然后系统整理一下，顺便分享到网络上，如果遇到刚好需要了解的同学，也算是缘分。
&lt;/p&gt;

&lt;p&gt;
但是，这次就不一样了。这次的单词 anchorite 是有位同学私信发给我的。
&lt;/p&gt;

&lt;p&gt;
那么，我们和这位同学一起，了解一下，这个单词吧。
&lt;/p&gt;

&lt;p&gt;
anchorite 是个名词，意思是因为宗教原因而与世隔绝的人。a person who
lives in seclusion usually for religious reasons.
&lt;/p&gt;

&lt;p&gt;
大概在中世纪时期，有不少女性会把自己关在一个小黑屋里，每天祷告、沉思，不和人说话。这样的女性称为 anchoress. 对应的男性就叫 anchorite。似乎是这种女隐士更早出现。
&lt;/p&gt;

&lt;p&gt;
我记得在荷兰电影《指挥家》这个电影里，就看到过，主人公的妈妈的姐妹，为了保守秘密，把自己关在小石屋中，天天祷告。直到女指挥家去找她，才迫不得已开口说出了秘密。
&lt;/p&gt;

&lt;p&gt;
an- 这个前缀是up, against, back 的意思。比如 anabaptist，再洗礼派。就是 ana- 和 baptism 洗礼的组合。
&lt;/p&gt;

&lt;p&gt;
chorite 有地区、地方、区域的意思。比如 chorography 地图编制术。
&lt;/p&gt;

&lt;p&gt;
an-chorite 就是回避地区中的人，回到小黑屋中去的人。
&lt;/p&gt;

&lt;p&gt;
另外，有个单词 anchorhold 就是 anchoress 和 anchorite 住的地方：The
residence of an anchorite or anchoress。
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines R.34 用 shared_ptr 参数表示共享所有权</title>
   <link href="http://kimi.im/2023-03-01-cppcoreguidelines-r34"/>
   <updated>2023-03-01T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-r34</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;Take a shared_ptr&amp;lt;widget&amp;gt; parameter to express shared ownership&amp;rdquo;
&lt;/p&gt;

&lt;p&gt;
理由
&lt;/p&gt;

&lt;p&gt;
显式的表明函数的共享所有权
&lt;/p&gt;


&lt;p&gt;
好例子
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;WidgetUser&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;public&lt;/span&gt;:
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;WidgetUser will share ownership of the widget&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;explicit&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;WidgetUser&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;std&lt;/span&gt;::&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;shared_ptr&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;&amp;lt;&lt;/span&gt;widget&lt;span style=&quot;color: #909183;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;w&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;noexcept&lt;/span&gt;:
        m_widget&lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;std&lt;/span&gt;::move&lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;w&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{}&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;...&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;private&lt;/span&gt;:
    &lt;span style=&quot;color: #110099;&quot;&gt;std&lt;/span&gt;::&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;shared_ptr&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;&amp;lt;&lt;/span&gt;widget&lt;span style=&quot;color: #7388d6;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;m_widget&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;
&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;
强化
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;警告：如果一个函数接收 &lt;code&gt;shared_ptr&amp;lt;T&amp;gt;&lt;/code&gt; 的左值引用参数，但是在所有代码执行路径上既不赋值，也不调用 &lt;code&gt;reset()&lt;/code&gt; 。考虑使用 &lt;code&gt;T*&lt;/code&gt; 或 &lt;code&gt;T&amp;amp;&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;警告：如果一个函数接收 &lt;code&gt;unique_ptr&amp;lt;T&amp;gt;&lt;/code&gt; 值或常值引用，但是在所有代码路径上，不复制或移动到另一个共享指针，考虑使用 &lt;code&gt;T*&lt;/code&gt; 或 &lt;code&gt;T&amp;amp;&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;警告：如果一个函数接收 &lt;code&gt;shared_ptr&amp;lt;T&amp;gt;&lt;/code&gt; 右值引用，考虑使用值传递。&lt;/li&gt;
&lt;/ul&gt;
</content>
 </entry>
 
 <entry>
   <title>单词本：idiosyncratic</title>
   <link href="http://kimi.im/2023-03-01-english-idiosyncratic"/>
   <updated>2023-03-01T00:00:00+00:00</updated>
   <id>http://kimi.im/english-idiosyncratic</id>
   <content type="html">&lt;p&gt;
昨天看到一个技术报告，说，过去很多工业设备都是“Insecure by Design”，即设计上就是有不安全的功能，比如允许无授权地下载执行代码，使用明文密码之类的。在进行信息安全认证的时候，又因为标准本身的模糊不清，导致厂商和认证机构有各自有独特的解读（ &lt;b&gt;idiosyncratic&lt;/b&gt; interpretations ）：
&lt;/p&gt;

&lt;p&gt;
Many security standards use opaque definitions. For example, the IEC
62443 Security Assurance Levels are defined to correspond to attacker
classes of increasing sophistication. This sophistication, however, is
defined in very generic and opaque terms such as ‘moderate resources’,
‘sophisticated means’ and ‘IACS specific skills.’ These terms, when
left vague and unquantified, lend themselves to &lt;b&gt;idiosyncratic&lt;/b&gt;
interpretations more reflective of the auditor’s perceptions and
expectations than of a product’s security posture. (&lt;a href=&quot;#citeproc_bib_item_3&quot;&gt;LABS 2022&lt;/a&gt;)
&lt;/p&gt;

&lt;p&gt;
这里，我们遇到一个比较长的单词： &lt;b&gt;idiosyncratic&lt;/b&gt; 意思是独特的、怪癖的。
&lt;/p&gt;

&lt;p&gt;
这个词由 idio + syncratic 组成。idio 来自拉丁语 idios 自己的、个人的。而 syncratic 则是来自希腊语 synkrasis 混合物。合起来就是自己个人独特的混合的。
&lt;/p&gt;

&lt;p&gt;
比如 C++ 2020 (&lt;a href=&quot;#citeproc_bib_item_2&quot;&gt;ISO/IEC 2020&lt;/a&gt;) 标准里也提到：Implementations can
provide additional execution policies to those described in this
standard as extensions to address parallel architectures that require
&lt;b&gt;idiosyncratic&lt;/b&gt; parameters for efficient execution. 针对 C++ 标准库的算法函数，并行计算需要独特的参数以提高执行效率。
&lt;/p&gt;

&lt;p&gt;
Elizabeth C. Hirschman and Morris B. Holbrook
(&lt;a href=&quot;#citeproc_bib_item_1&quot;&gt;Hirschman and Holbrook 1982&lt;/a&gt;) 引用了 Commonality and &lt;b&gt;Idiosyncracy&lt;/b&gt; in
Popular Culture: An Empirical Examination of the &amp;rsquo;Layers of Meaning&amp;rsquo;
Concept. 这里用了单词的名词形式，即独特风格之意思。
&lt;/p&gt;

&lt;p&gt;
&lt;b&gt;References&lt;/b&gt;
&lt;/p&gt;
&lt;style&gt;.csl-entry{text-indent: -1.5em; margin-left: 1.5em;}&lt;/style&gt;&lt;div class=&quot;csl-bib-body&quot;&gt;
  &lt;div class=&quot;csl-entry&quot;&gt;&lt;a id=&quot;citeproc_bib_item_1&quot;&gt;&lt;/a&gt;Hirschman, Elizabeth C., and Morris B. Holbrook. 1982. “Hedonic Consumption: Emerging Concepts, Methods and Propositions.” &lt;i&gt;Journal of Marketing&lt;/i&gt;.&lt;/div&gt;
  &lt;div class=&quot;csl-entry&quot;&gt;&lt;a id=&quot;citeproc_bib_item_2&quot;&gt;&lt;/a&gt;ISO/IEC. 2020. “ISO/IEC 14882:2020: Programming Languages - c++.”&lt;/div&gt;
  &lt;div class=&quot;csl-entry&quot;&gt;&lt;a id=&quot;citeproc_bib_item_3&quot;&gt;&lt;/a&gt;LABS, VEDERE. 2022. “OT:ICEFALL - the Legacy of ‘Insecure by Design’ and Its Implications for Certifications and Risk Management.” Forescout Technologies, Inc.&lt;/div&gt;
&lt;/div&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines R.33 用 unique_ptr<widget>& 参数表示函数会重座该 widget</title>
   <link href="http://kimi.im/2023-02-28-cppcoreguidelines-r33"/>
   <updated>2023-02-28T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-r33</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;Take a unique&lt;sub&gt;ptr&lt;/sub&gt;&amp;lt;widget&amp;gt;&amp;amp; parameter to express that a function reseats the widget&amp;rdquo;
&lt;/p&gt;

&lt;p&gt;
理由
&lt;/p&gt;

&lt;p&gt;
通过这种方式使用 &lt;code&gt;unique_ptr&lt;/code&gt; 说明并强化函数调用的重座语义。
&lt;/p&gt;

&lt;p&gt;
注意
&lt;/p&gt;

&lt;p&gt;
重座（Reseat）意思是让一个指针或智能指针指向一个不同的对象。
&lt;/p&gt;


&lt;p&gt;
例子
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;reseat&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;unique_ptr&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;&amp;lt;&lt;/span&gt;widget&lt;span style=&quot;color: #7388d6;&quot;&gt;&amp;gt;&lt;/span&gt;&amp;amp;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;&quot;will&quot; or &quot;might&quot; reseat pointer&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
坏例子
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;thinko&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;unique_ptr&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;&amp;lt;&lt;/span&gt;widget&lt;span style=&quot;color: #7388d6;&quot;&gt;&amp;gt;&lt;/span&gt;&amp;amp;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;usually not what you want&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;
强化
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;警告：如果一个函数接收 &lt;code&gt;unique_ptr&amp;lt;T&amp;gt;&lt;/code&gt; 的左值引用参数，但是在所有代码执行路径上既不赋值，也不调用 &lt;code&gt;reset()&lt;/code&gt; 。考虑使用 &lt;code&gt;T*&lt;/code&gt; 或 &lt;code&gt;T&amp;amp;&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;警告：一个函数接收 &lt;code&gt;unique_ptr&amp;lt;T&amp;gt;&lt;/code&gt; 常值引用，考虑使用 &lt;code&gt;const T*&lt;/code&gt; 或 &lt;code&gt;const T&amp;amp;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
</content>
 </entry>
 
 <entry>
   <title>单词本：impetus</title>
   <link href="http://kimi.im/2023-02-28-latin-impetus"/>
   <updated>2023-02-28T00:00:00+00:00</updated>
   <id>http://kimi.im/latin-impetus</id>
   <content type="html">&lt;p&gt;
昨天看工业物联网时代的数字化转型，读到这句话：
&lt;/p&gt;

&lt;p&gt;
Technological advances have been the &lt;b&gt;impetus&lt;/b&gt; for dramatic increases in
industrial productivity since the dawn of the Industrial Revolution in
the 16th century. (&lt;a href=&quot;#citeproc_bib_item_1&quot;&gt;FCG 2016&lt;/a&gt;)
&lt;/p&gt;

&lt;p&gt;
16 世纪的技术演进成为工业生产力大幅提升的动力。
&lt;/p&gt;

&lt;p&gt;
这里我们看到有一个拉丁语单词 &lt;b&gt;impetus&lt;/b&gt; 。这个词是由 in + petere 组成的。
in 是朝向，petere 是攻击。合起来是朝着某处攻击。于是就引伸为动力、动量、冲力。
&lt;/p&gt;

&lt;p&gt;
比如，健身专家 Amaresh Ojha (&lt;a href=&quot;#citeproc_bib_item_4&quot;&gt;Ojha and Moitra 2021&lt;/a&gt;) 在提到培养健身习惯的时候，说一个不清晰的健身目标本身是无法提供改变现状的动力。要一点一点的进步：
Once you make the decision to launch your fitness habit, &amp;#x2026; an
ambiguous goal does not, in and of itself, give you the &lt;b&gt;impetus&lt;/b&gt; you
need to change your status quo. &amp;ldquo;Small progress everyday manifests
bigger results in the long run.&amp;rdquo; 这里他也用到了之前介绍的 &lt;a href=&quot;./2023-02-26-latin-status-quo.html&quot;&gt;Status Quo&lt;/a&gt;。
&lt;/p&gt;

&lt;p&gt;
再比如，Matthew T. Lawder 等 (&lt;a href=&quot;#citeproc_bib_item_3&quot;&gt;Lawder et al. 2014&lt;/a&gt;) 提到液流电池在储能领域的发展，说这种电池在储能圈子获得了推动力：However, one battery
system that has gained &lt;b&gt;impetus&lt;/b&gt; within the storage community recently
has been the RFB that uses exterior electrolyte pumped through the
typical cathode–separator–anode system.
&lt;/p&gt;

&lt;p&gt;
市场消费者心理专家 Elizabeth C. Hirschman (&lt;a href=&quot;#citeproc_bib_item_2&quot;&gt;Hirschman and Holbrook 1982&lt;/a&gt;)
在一篇关于享乐主义消费的论文中提到美观的产品能给消费者提供动力去发掘相关产品，用到这个词：
&lt;/p&gt;

&lt;p&gt;
This emphasis on esthetic products is constructive for several
reasons. First, it provides an &lt;b&gt;impetus&lt;/b&gt; for exploring several classes
of products that have been largely ignored in traditional consumer
research.
&lt;/p&gt;

&lt;p&gt;
&lt;b&gt;References&lt;/b&gt;
&lt;/p&gt;
&lt;style&gt;.csl-entry{text-indent: -1.5em; margin-left: 1.5em;}&lt;/style&gt;&lt;div class=&quot;csl-bib-body&quot;&gt;
  &lt;div class=&quot;csl-entry&quot;&gt;&lt;a id=&quot;citeproc_bib_item_1&quot;&gt;&lt;/a&gt;FCG. 2016. “Digital Transformation in the Age of IIoT.” FieldComm Group.&lt;/div&gt;
  &lt;div class=&quot;csl-entry&quot;&gt;&lt;a id=&quot;citeproc_bib_item_2&quot;&gt;&lt;/a&gt;Hirschman, Elizabeth C., and Morris B. Holbrook. 1982. “Hedonic Consumption: Emerging Concepts, Methods and Propositions.” &lt;i&gt;Journal of Marketing&lt;/i&gt;.&lt;/div&gt;
  &lt;div class=&quot;csl-entry&quot;&gt;&lt;a id=&quot;citeproc_bib_item_3&quot;&gt;&lt;/a&gt;Lawder, Matthew T., Bharatkumar Suthar, Paul W. C. Northrop, Sumitava De, C. Michael Hoff, Olivia Leitermann, Mariesa L. Crow, Shriram Santhanagopalan, and Venkat R. Subramanian. 2014. “Battery Energy Storage System (BESS) and Battery Management System (BMS) for Grid-Scale Applications.” &lt;i&gt;Proceedings of the IEEE&lt;/i&gt; 102 (6): 1014–30. doi:&lt;a href=&quot;https://doi.org/10.1109/JPROC.2014.2317451&quot;&gt;10.1109/JPROC.2014.2317451&lt;/a&gt;.&lt;/div&gt;
  &lt;div class=&quot;csl-entry&quot;&gt;&lt;a id=&quot;citeproc_bib_item_4&quot;&gt;&lt;/a&gt;Ojha, Amaresh, and Subhra Moitra. 2021. &lt;i&gt;Fitness Habits: Breaking the Barriers to Fitness&lt;/i&gt;. Srishti Publishers.&lt;/div&gt;
&lt;/div&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines R.32 用 unique_ptr 参数标明函数接收指针的所有权</title>
   <link href="http://kimi.im/2023-02-27-cppcoreguidelines-r32"/>
   <updated>2023-02-27T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-r32</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;Take a &lt;code&gt;unique_ptr&amp;lt;widget&amp;gt;&lt;/code&gt; parameter to express that a function assumes ownership of a widget&amp;rdquo;
&lt;/p&gt;


&lt;p&gt;
理由
&lt;/p&gt;

&lt;p&gt;
使用 &lt;code&gt;unique_ptr&lt;/code&gt; 说明并强化函数调用接收所有权转移。
&lt;/p&gt;

&lt;p&gt;
例子
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;sink&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;unique_ptr&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;&amp;lt;&lt;/span&gt;widget&lt;span style=&quot;color: #7388d6;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;takes ownership of the widget&lt;/span&gt;

&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;uses&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;widget&lt;/span&gt;*&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;            &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;just uses the widget&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
坏例子
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;thinko&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;unique_ptr&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;&amp;lt;&lt;/span&gt;widget&lt;span style=&quot;color: #7388d6;&quot;&gt;&amp;gt;&lt;/span&gt;&amp;amp;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;usually not what you want&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;
强化
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;警告：如果一个函数接收左值引用的 &lt;code&gt;unique_ptr&amp;lt;T&amp;gt;&lt;/code&gt; 参数，却在任何代码路径中不给它赋值，或调用 &lt;code&gt;reset()&lt;/code&gt; 。考虑使用 T* 或 T&amp;amp;&lt;/li&gt;
&lt;li&gt;警告：如果一个函数接收 &lt;code&gt;unique_ptr&amp;lt;T&amp;gt;&lt;/code&gt; 的常值引用，考虑使用 &lt;code&gt;const T*&lt;/code&gt;
或 &lt;code&gt;const T&amp;amp;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
</content>
 </entry>
 
 <entry>
   <title>单词本：staycation</title>
   <link href="http://kimi.im/2023-02-27-english-staycation"/>
   <updated>2023-02-27T00:00:00+00:00</updated>
   <id>http://kimi.im/english-staycation</id>
   <content type="html">&lt;p&gt;
信息安全运营专家 Gerald Auger 写了本书，介绍怎么从事信息安全事业。因为搞信息安全工作的人，有时候不得不加班加点应对安全威胁，所以，他也提出了一些建议，比如以下这些建议：
&lt;/p&gt;

&lt;p&gt;
How do we find the perfect zen and balance? The following are things
to consider to avoid burnout (&lt;a href=&quot;#citeproc_bib_item_1&quot;&gt;Auger et al. 2021&lt;/a&gt;):
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;Take breaks away from your computer.&lt;/li&gt;
&lt;li&gt;Go outside (with no technology).&lt;/li&gt;
&lt;li&gt;Don&amp;rsquo;t bite off more than you can chew.&lt;/li&gt;
&lt;li&gt;Take a vacation if you can. It&amp;rsquo;s essential to enjoy the love of your
labor, so celebrate with a trip, even if it&amp;rsquo;s a &lt;b&gt;staycation&lt;/b&gt; in your
home!&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
最后一条提到了要给自己放个假。哪怕是 staycation。我查了下，是这么说的：
&lt;/p&gt;

&lt;p&gt;
a holiday spent in one&amp;rsquo;s home country rather than abroad, or one spent
at home and involving day trips to local attractions.
&lt;/p&gt;

&lt;p&gt;
所以，有两个意思：1）宅在家里不出门，阳台喝喝茶，晒晒太阳。2）在自己所在的国家找个景点游玩下，而不是出国游。
&lt;/p&gt;

&lt;p&gt;
我觉得，转换到中国的语境，home country 太大了，home city 就差不多了。
&lt;/p&gt;

&lt;p&gt;
最近，天气这么好，适合来一场说走就走的 staycation！
&lt;/p&gt;

&lt;p&gt;
&lt;b&gt;References&lt;/b&gt;
&lt;/p&gt;
&lt;style&gt;.csl-entry{text-indent: -1.5em; margin-left: 1.5em;}&lt;/style&gt;&lt;div class=&quot;csl-bib-body&quot;&gt;
  &lt;div class=&quot;csl-entry&quot;&gt;&lt;a id=&quot;citeproc_bib_item_1&quot;&gt;&lt;/a&gt;Auger, Gerald, Jaclyn Scott, Jonathan Helmus, and Kim Nguyen. 2021. &lt;i&gt;Cybersecurity Career Master Plan: Proven Techniques and Effective Tips to Help You Advance in Your Cybersecurity Career&lt;/i&gt;. Packt Publishing.&lt;/div&gt;
&lt;/div&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines R.31 如果要非标准库的智能指针，请遵循标准库的设计模式</title>
   <link href="http://kimi.im/2023-02-26-cppcoreguidelines-r31"/>
   <updated>2023-02-26T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-r31</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;If you have non-std smart pointers, follow the basic pattern from std&amp;rdquo;
&lt;/p&gt;


&lt;p&gt;
理由
&lt;/p&gt;

&lt;p&gt;
此规则适用于任何第三方和定制的智能指针。有利于诊断智能指针的错误导致的性能、正确性问题。
&lt;/p&gt;

&lt;p&gt;
任何重载一元操作符 * 和 -&amp;gt; 的类型（包括模板和派生类），都可以认为是智能指针：
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;如果可复制，则认为是引用计数的共享指针 &lt;code&gt;shared_ptr&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;如果不可复制，则认为是 &lt;code&gt;unique_ptr&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;
错误例子
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;use Boost&apos;s intrusive_ptr&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;#include&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #2A00FF;&quot;&gt;boost/intrusive_ptr.hpp&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;boost&lt;/span&gt;::&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;intrusive_ptr&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;&amp;lt;&lt;/span&gt;widget&lt;span style=&quot;color: #7388d6;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;p&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;  &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;error under rule &apos;sharedptrparam&apos;&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    p-&amp;gt;foo&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;

&lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;use Microsoft&apos;s CComPtr&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;#include&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #2A00FF;&quot;&gt;atlbase.h&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;CComPtr&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;&amp;lt;&lt;/span&gt;widget&lt;span style=&quot;color: #7388d6;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;p&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;               &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;error under rule &apos;sharedptrparam&apos;&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    p-&amp;gt;foo&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
这两个例子都违背了共享指针参数准则： p 是一个共享指针，但是并没有用到它的共享性。函数只有参与 widget 的生存周期管理才需要接收智能指针作为参数。不然的话，如果可以接收 nullptr， widget* 原始指针就可以。更好的情况接收引用 widget&amp;amp;。
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>单词本：status quo</title>
   <link href="http://kimi.im/2023-02-26-latin-status-quo"/>
   <updated>2023-02-26T00:00:00+00:00</updated>
   <id>http://kimi.im/latin-status-quo</id>
   <content type="html">&lt;p&gt;
昨天看了一篇关于锂电池电芯数字孪生的文章。文章开头说这篇文章介绍数字孪生的现状，以及阐述锂电池电芯生产过程数字孪生概念：
&lt;/p&gt;

&lt;p&gt;
Es bietet einen Überblick über den Status Quo des Digitalen Zwillings
in der Produktion und erläutert das Konzept für einen Digitalen
Zwilling in der Batteriezellfertigung. (&lt;a href=&quot;#citeproc_bib_item_1&quot;&gt;Krauß and Baum 2023&lt;/a&gt;)
&lt;/p&gt;

&lt;p&gt;
这里出现了一个拉丁语单词 Status Quo。
&lt;/p&gt;

&lt;p&gt;
我们就来了解了解这个词吧。
&lt;/p&gt;

&lt;p&gt;
status 就是 state，状态。quo 是 what, which 的意思。连起来就是在此状态，
state in which. 那么，如果我们说 your status quo 就相当于 the state in
which your current results happen, 即你所处在的产生当前结果的状态。
&lt;/p&gt;

&lt;p&gt;
比如：The history of international relations suggests that a rising
power always challenges the hegemon of the day and the status quo.
&lt;/p&gt;

&lt;p&gt;
那么，产生当前结果的现状可以是一种中性的陈述，如前面德文引用所表示的。
&lt;/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=&quot;#citeproc_bib_item_2&quot;&gt;商鞅 361AD&lt;/a&gt;) 只有 challenging the status quo will make you a better
leader.
&lt;/p&gt;

&lt;p&gt;
那么怎么 challenging the status quo 呢？
&lt;/p&gt;

&lt;p&gt;
第一步，是要知道自己的 status quo 是什么。这个句子描述自己的 status quo：
&lt;/p&gt;

&lt;p&gt;
“My current status quo is the state in which [current outcome] occurs
as the result of [description of inputs].”
&lt;/p&gt;

&lt;p&gt;
第二步，就是定义你当前 status quo 的风险：
&lt;/p&gt;

&lt;p&gt;
“If [current outcome] continues, I risk [worse outcomes].”
&lt;/p&gt;

&lt;p&gt;
例如 “If our team keeps [habitually missing deadlines], the risk is
[missing our quarterly KPI goals for the second quarter].”
&lt;/p&gt;

&lt;p&gt;
第三步，就是设定目标。基于第一步陈述的 status quo，回答这个问题：假设今晚睡觉的时候发生奇迹，明天，我希望会有什么改变？
&lt;/p&gt;

&lt;p&gt;
第四步，就是制定计划了。根据上一步列出的目标，制定相应计划，一步一步落实。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;References&lt;/b&gt;
&lt;/p&gt;
&lt;style&gt;.csl-entry{text-indent: -1.5em; margin-left: 1.5em;}&lt;/style&gt;&lt;div class=&quot;csl-bib-body&quot;&gt;
  &lt;div class=&quot;csl-entry&quot;&gt;&lt;a id=&quot;citeproc_bib_item_1&quot;&gt;&lt;/a&gt;Krauß, Jonathan, and Christoph Baum. 2023. “Der Digitale Zwilling in Der Batteriezellfertigung: Potenziale Für Eine Effi Ziente Und Nachhaltige Produktion.” Fraunhofer.&lt;/div&gt;
  &lt;div class=&quot;csl-entry&quot;&gt;&lt;a id=&quot;citeproc_bib_item_2&quot;&gt;&lt;/a&gt;商鞅. 361AD. &lt;i&gt;《商君书》&lt;/i&gt;.&lt;/div&gt;
&lt;/div&gt;
</content>
 </entry>
 
 <entry>
   <title>单词本：circumcision</title>
   <link href="http://kimi.im/2023-02-26-english-circumcision"/>
   <updated>2023-02-26T00:00:00+00:00</updated>
   <id>http://kimi.im/english-circumcision</id>
   <content type="html">&lt;p&gt;
昨天，介绍了 &lt;a href=&quot;./2023-02-25-english-circumscribe.html&quot;&gt;circumscribe&lt;/a&gt; 这个词，顺便研究了下 circum- 开头的单词。因为 circum 是周围的意思，所以都是跟周围相关的。
&lt;/p&gt;

&lt;p&gt;
Dr. Cao 告诉我，其实还有一个单词 circumcision 也是 circum 开头的。意思是男生的环切手术。
&lt;/p&gt;

&lt;p&gt;
这个词在拉丁语里写作 circumcidere。
&lt;/p&gt;

&lt;p&gt;
这个 cidere 是拉丁语 caedere （to cut）的组合形式。
&lt;/p&gt;

&lt;p&gt;
所以，比如说过 incision 就是 cut in, 切入，也就是外科手术切口的意思。
&lt;/p&gt;

&lt;p&gt;
decision 就是 cut off，也就是作决定。正如我们常说的快刀斩乱麻、斩钉截铁、当机立断等。你看，“快刀”、“斩截”、“断”，是不是都有 cut 的意思呀？所以人类的语言还是相通的。正如，唯物历史观所认为的，语言是劳动的产物么。
&lt;/p&gt;

&lt;p&gt;
suicide，拉丁语 sui，self，自己，cide 就是 caedere，自己 cut 自己，就是自我了断。
&lt;/p&gt;

&lt;p&gt;
concise 拉丁语意思切掉多余的，即简明的，简洁的。
&lt;/p&gt;

&lt;p&gt;
precise 拉丁语意思是之前就切好，即已经切得不多不少了，精确的，确切的。
&lt;/p&gt;

&lt;p&gt;
举个例子：
&lt;/p&gt;

&lt;p&gt;
Written for students encountering the subject for the first time, this
&lt;b&gt;concise&lt;/b&gt; textbook focuses on fundamental concepts, problem solving, and
methodical calculations of common mechanical components, rather than
providing a comprehensive treatment of a wide range of components.
&lt;/p&gt;

&lt;p&gt;
这里说这个教科书很简洁明了。
&lt;/p&gt;

&lt;p&gt;
比如 Google Maps: &amp;ldquo;The investigation is broadly focused on Google’s
control of digital maps and location data, in this instance the
&lt;b&gt;precise&lt;/b&gt; location of a host of different places.&amp;rdquo;
&lt;/p&gt;

&lt;p&gt;
这里指的是精确的位置。
&lt;/p&gt;


&lt;p&gt;
感谢 Doctor 的启发！
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>利斯科夫替代原则，Liskov substitution principle，LSP</title>
   <link href="http://kimi.im/2023-02-25-lsp"/>
   <updated>2023-02-25T00:00:00+00:00</updated>
   <id>http://kimi.im/lsp</id>
   <content type="html">&lt;blockquote&gt;
&lt;p&gt;
以指喻指之非指，不若以非指喻指之非指也；以马喻马之非马，不若以非马喻马之非马也。天地一指也，万物一马也。
&lt;/p&gt;

&lt;p&gt;
《庄子·齐物论》
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;
软件工程领域，有一个概念叫 SOLID。SOLID 是五个面向对象设计原则的首字母缩写。最早由 Robert C. Martin 在其 2000 年的论文《Design Principles
and Design Patterns》中提出的。
&lt;/p&gt;

&lt;p&gt;
其中，L 原则指的是 Liskov substitution principle，里氏替换原则，利斯科夫替代原则，简称 LSP。
&lt;/p&gt;

&lt;p&gt;
LSP 是这么表述的：“Functions that use pointers or references to base
classes must be able to use objects of derived classes without knowing
it.” 通过对象的指针或引用调用其基类上定义的函数时，必须做到不用关心实际对象是基类的实体还是继承类的实体。
&lt;/p&gt;

&lt;p&gt;
LSP 原则其实规定了一种所谓“强行为子类型化”（Strong Behavioral
Subtyping ）的子类型化关系。这个概念最早在 1987 年由女计算机科学家
Barbara Liskov 在一个会议的主旨发言中提出的。那个发言标题为“数据抽象和继承层级”。LSP 原则的基础是面向对象中的可替代性原则，即一个对象可以被它的子对象替换，而不会破坏现有程序。Barbara Liskov 和华人计算机女科学家周以真在 1994 年合写的论文中进一步阐述这个原则：
&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;
Subtype Requirement: Let \(\phi (x)\) be a property provable about
objects \(x\) of type \(T\). Then \(\phi (y)\) should be true for objects
\(y\) of type \(S\) where \(S\) is a subtype of \(T\).
&lt;/p&gt;

&lt;p&gt;
子类型要求：令 \(\phi (x)\) 为关于类型 \(T\) 的一个对象 \(x\) 的一个可证明的属性。那么，对于 \(T\) 的子类型 \(S\)，它的一个对象 \(y\) 应该满足\(\phi (y)\)。
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;
用符号表示为：
&lt;/p&gt;

&lt;p&gt;
\(S&lt;:T\to (\forall x{:}T)\phi (x)\to (\forall y{:}S)\phi(y)\)
&lt;/p&gt;

&lt;p&gt;
即，如果 \(S\) 是 \(T\) 的子类型，对于 \(T\) 的对象成立的属性，对 \(S\) 的对象也成立。
&lt;/p&gt;

&lt;p&gt;
之前介绍的开放封闭原则 OCP 是基于抽象和多态。而像 C++ 这样的静态类型语言，则是通过继承机制来支持抽象和多态。即通过继承，我们能通过定义抽象基类的纯虚函数，创建遵循抽象多态接口的派生类。而 LSP 原则就对子类型化，或者说继承机制提出了规定。
&lt;/p&gt;

&lt;p&gt;
那么，我们来举个最简单的例子。一般我们都认为，正方形是长方形的子类，如图：
&lt;/p&gt;


&lt;div id=&quot;orgaea9acf&quot; class=&quot;figure&quot;&gt;
&lt;p&gt;&lt;div align=&quot;center&quot;&gt;&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; xmlns:xlink=&quot;http://www.w3.org/1999/xlink&quot; contentStyleType=&quot;text/css&quot; height=&quot;240px&quot; preserveAspectRatio=&quot;none&quot; style=&quot;width:131px;height:240px;background:#FFFFFF;&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 131 240&quot; width=&quot;131px&quot; zoomAndPan=&quot;magnify&quot;&gt;&lt;defs/&gt;&lt;g&gt;&lt;!--MD5=[c75e629d71444dd998043aef5ce1a035]
class R--&gt;&lt;g id=&quot;elem_R&quot;&gt;&lt;rect codeLine=&quot;1&quot; fill=&quot;#F1F1F1&quot; height=&quot;118.4375&quot; id=&quot;R&quot; rx=&quot;2.5&quot; ry=&quot;2.5&quot; style=&quot;stroke:#181818;stroke-width:0.5;&quot; width=&quot;117&quot; x=&quot;7&quot; y=&quot;7&quot;/&gt;&lt;ellipse cx=&quot;31.45&quot; cy=&quot;23&quot; fill=&quot;#ADD1B2&quot; rx=&quot;11&quot; ry=&quot;11&quot; style=&quot;stroke:#181818;stroke-width:1.0;&quot;/&gt;&lt;path d=&quot;M34.2156,18.875 Q34.3719,18.6563 34.5594,18.5469 Q34.7469,18.4375 34.9656,18.4375 Q35.3406,18.4375 35.575,18.7031 Q35.8094,18.9531 35.8094,19.5625 L35.8094,21.0156 Q35.8094,21.625 35.575,21.8906 Q35.3406,22.1563 34.9656,22.1563 Q34.6219,22.1563 34.4188,21.9531 Q34.2156,21.7656 34.1063,21.25 Q34.0594,20.8906 33.8719,20.7031 Q33.5438,20.3281 32.9344,20.1094 Q32.325,19.8906 31.7,19.8906 Q30.9344,19.8906 30.2938,20.2188 Q29.6688,20.5469 29.1688,21.2969 Q28.6844,22.0469 28.6844,23.0781 L28.6844,24.1719 Q28.6844,25.4063 29.575,26.2344 Q30.4656,27.0469 32.0594,27.0469 Q32.9969,27.0469 33.6531,26.7969 Q34.0438,26.6406 34.4656,26.2031 Q34.7313,25.9375 34.8719,25.8594 Q35.0281,25.7813 35.2313,25.7813 Q35.5594,25.7813 35.8094,26.0469 Q36.075,26.2969 36.075,26.6406 Q36.075,26.9844 35.7313,27.3906 Q35.2313,27.9688 34.4344,28.2969 Q33.3563,28.75 32.0594,28.75 Q30.5438,28.75 29.3406,28.125 Q28.3563,27.625 27.6688,26.5625 Q26.9813,25.4844 26.9813,24.2031 L26.9813,23.0469 Q26.9813,21.7188 27.5906,20.5781 Q28.2156,19.4219 29.3094,18.8125 Q30.4031,18.1875 31.6375,18.1875 Q32.3719,18.1875 33.0125,18.3594 Q33.6688,18.5156 34.2156,18.875 Z &quot; fill=&quot;#000000&quot;/&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;14&quot; lengthAdjust=&quot;spacing&quot; textLength=&quot;64&quot; x=&quot;47.55&quot; y=&quot;28.7285&quot;&gt;Rectangle&lt;/text&gt;&lt;line style=&quot;stroke:#181818;stroke-width:0.5;&quot; x1=&quot;8&quot; x2=&quot;123&quot; y1=&quot;39&quot; y2=&quot;39&quot;/&gt;&lt;line style=&quot;stroke:#181818;stroke-width:0.5;&quot; x1=&quot;8&quot; x2=&quot;123&quot; y1=&quot;47&quot; y2=&quot;47&quot;/&gt;&lt;ellipse cx=&quot;18&quot; cy=&quot;58&quot; fill=&quot;#84BE84&quot; rx=&quot;3&quot; ry=&quot;3&quot; style=&quot;stroke:#038048;stroke-width:1.0;&quot;/&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;14&quot; lengthAdjust=&quot;spacing&quot; textLength=&quot;84&quot; x=&quot;27&quot; y=&quot;65.5332&quot;&gt;set_width(int)&lt;/text&gt;&lt;ellipse cx=&quot;18&quot; cy=&quot;75.6094&quot; fill=&quot;#84BE84&quot; rx=&quot;3&quot; ry=&quot;3&quot; style=&quot;stroke:#038048;stroke-width:1.0;&quot;/&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;14&quot; lengthAdjust=&quot;spacing&quot; textLength=&quot;91&quot; x=&quot;27&quot; y=&quot;83.1426&quot;&gt;set_length(int)&lt;/text&gt;&lt;ellipse cx=&quot;18&quot; cy=&quot;93.2188&quot; fill=&quot;#84BE84&quot; rx=&quot;3&quot; ry=&quot;3&quot; style=&quot;stroke:#038048;stroke-width:1.0;&quot;/&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;14&quot; lengthAdjust=&quot;spacing&quot; textLength=&quot;70&quot; x=&quot;27&quot; y=&quot;100.752&quot;&gt;get_width()&lt;/text&gt;&lt;ellipse cx=&quot;18&quot; cy=&quot;110.8281&quot; fill=&quot;#84BE84&quot; rx=&quot;3&quot; ry=&quot;3&quot; style=&quot;stroke:#038048;stroke-width:1.0;&quot;/&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;14&quot; lengthAdjust=&quot;spacing&quot; textLength=&quot;77&quot; x=&quot;27&quot; y=&quot;118.3613&quot;&gt;get_length()&lt;/text&gt;&lt;/g&gt;&lt;!--MD5=[8d919f42174a8592853f0e252dac1126]
class S--&gt;&lt;g id=&quot;elem_S&quot;&gt;&lt;rect codeLine=&quot;8&quot; fill=&quot;#F1F1F1&quot; height=&quot;48&quot; id=&quot;S&quot; rx=&quot;2.5&quot; ry=&quot;2.5&quot; style=&quot;stroke:#181818;stroke-width:0.5;&quot; width=&quot;78&quot; x=&quot;26.5&quot; y=&quot;185&quot;/&gt;&lt;ellipse cx=&quot;41.5&quot; cy=&quot;201&quot; fill=&quot;#ADD1B2&quot; rx=&quot;11&quot; ry=&quot;11&quot; style=&quot;stroke:#181818;stroke-width:1.0;&quot;/&gt;&lt;path d=&quot;M44.2656,196.875 Q44.4219,196.6563 44.6094,196.5469 Q44.7969,196.4375 45.0156,196.4375 Q45.3906,196.4375 45.625,196.7031 Q45.8594,196.9531 45.8594,197.5625 L45.8594,199.0156 Q45.8594,199.625 45.625,199.8906 Q45.3906,200.1563 45.0156,200.1563 Q44.6719,200.1563 44.4688,199.9531 Q44.2656,199.7656 44.1563,199.25 Q44.1094,198.8906 43.9219,198.7031 Q43.5938,198.3281 42.9844,198.1094 Q42.375,197.8906 41.75,197.8906 Q40.9844,197.8906 40.3438,198.2188 Q39.7188,198.5469 39.2188,199.2969 Q38.7344,200.0469 38.7344,201.0781 L38.7344,202.1719 Q38.7344,203.4063 39.625,204.2344 Q40.5156,205.0469 42.1094,205.0469 Q43.0469,205.0469 43.7031,204.7969 Q44.0938,204.6406 44.5156,204.2031 Q44.7813,203.9375 44.9219,203.8594 Q45.0781,203.7813 45.2813,203.7813 Q45.6094,203.7813 45.8594,204.0469 Q46.125,204.2969 46.125,204.6406 Q46.125,204.9844 45.7813,205.3906 Q45.2813,205.9688 44.4844,206.2969 Q43.4063,206.75 42.1094,206.75 Q40.5938,206.75 39.3906,206.125 Q38.4063,205.625 37.7188,204.5625 Q37.0313,203.4844 37.0313,202.2031 L37.0313,201.0469 Q37.0313,199.7188 37.6406,198.5781 Q38.2656,197.4219 39.3594,196.8125 Q40.4531,196.1875 41.6875,196.1875 Q42.4219,196.1875 43.0625,196.3594 Q43.7188,196.5156 44.2656,196.875 Z &quot; fill=&quot;#000000&quot;/&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;14&quot; lengthAdjust=&quot;spacing&quot; textLength=&quot;46&quot; x=&quot;55.5&quot; y=&quot;206.7285&quot;&gt;Square&lt;/text&gt;&lt;line style=&quot;stroke:#181818;stroke-width:0.5;&quot; x1=&quot;27.5&quot; x2=&quot;103.5&quot; y1=&quot;217&quot; y2=&quot;217&quot;/&gt;&lt;line style=&quot;stroke:#181818;stroke-width:0.5;&quot; x1=&quot;27.5&quot; x2=&quot;103.5&quot; y1=&quot;225&quot; y2=&quot;225&quot;/&gt;&lt;/g&gt;&lt;!--MD5=[f8ac62970a8a02b877306923832cf698]
reverse link R to S--&gt;&lt;g id=&quot;link_R_S&quot;&gt;&lt;path codeLine=&quot;11&quot; d=&quot;M65.5,145.49 C65.5,159.84 65.5,173.74 65.5,184.77 &quot; fill=&quot;none&quot; id=&quot;R-backto-S&quot; style=&quot;stroke:#181818;stroke-width:1.0;&quot;/&gt;&lt;polygon fill=&quot;none&quot; points=&quot;58.5,145.16,65.5,125.16,72.5,145.16,58.5,145.16&quot; style=&quot;stroke:#181818;stroke-width:1.0;&quot;/&gt;&lt;/g&gt;&lt;!--MD5=[825eaae96a88d06aef822d32c8949889]
@startuml
class &quot;Rectangle&quot; as R {
        +set_width(int)
        +set_length(int)
        +get_width()
        +get_length()

}
class &quot;Square&quot; as S {

}
S -u-|&gt; R
@enduml

PlantUML version 1.2022.3beta3(Unknown compile time)
(GPL source distribution)
Java Runtime: OpenJDK Runtime Environment
JVM: OpenJDK 64-Bit Server VM
Default Encoding: Cp1252
Language: en
Country: US
--&gt;&lt;/g&gt;&lt;/svg&gt;&lt;/div&gt;
&lt;/p&gt;
&lt;/div&gt;

&lt;p&gt;
现在，我们用 C++ 实现长方形 Rectangle 类：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot; id=&quot;org555cb75&quot;&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;-*- compile-command: &quot;g++ -std=c++20 code.cpp &amp;amp;&amp;amp; ./a&quot;; -*-&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Rectangle&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
  &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;public&lt;/span&gt;:
    &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;Rectangle&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;w&lt;/span&gt;, &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;l&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; : m_w&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;w&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;, m_l&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;l&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{}&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;virtual&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;set_width&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;w&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;
        m_w = w;
    &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;virtual&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;set_length&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;l&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;
        m_l = l;
    &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;virtual&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;get_width&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;
        &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; m_w;
    &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;virtual&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;get_length&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;
        &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; m_l;
    &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;
  &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;private&lt;/span&gt;:
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;m_w&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;0&lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;m_l&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;0&lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
假设，我们设计 Rectangle 类的同时，让一个实习小朋友写相应的单元测试函数：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot; id=&quot;org8cb424e&quot;&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;test_rectangle&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Rectangle&lt;/span&gt;&amp;amp; &lt;span style=&quot;color: #000000;&quot;&gt;r&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    r.set_width&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;9&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
    r.set_length&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;10&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;!&lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;r.get_width&lt;span style=&quot;color: #709870;&quot;&gt;()&lt;/span&gt; * r.get_length&lt;span style=&quot;color: #709870;&quot;&gt;()&lt;/span&gt; == 9 * 10&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;std&lt;/span&gt;::cout &amp;lt;&amp;lt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;ERROR!\n&quot;&lt;/span&gt;;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;else&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;std&lt;/span&gt;::cout &amp;lt;&amp;lt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;PASS\n&quot;&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
显然，顺利通过了单元测试：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;

&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;main&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Rectangle&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;r&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;2, 4&lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;;
    test_rectangle&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;r&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;pre class=&quot;example&quot;&gt;
PASS
&lt;/pre&gt;


&lt;p&gt;
再创建一个正方形 Square 类，继承 Rectangle。为了符合正方形的要求，我们初始化的时候，把长和宽都设置成一样。同时，不管是修改正方形的长或宽，都要同时设置长和宽。
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot; id=&quot;orga349ce7&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Square&lt;/span&gt; : &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Rectangle&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
  &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;public&lt;/span&gt;:
    &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;Square&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;l&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; : Rectangle&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;l, l&lt;span style=&quot;color: #7388d6;&quot;&gt;){}&lt;/span&gt;;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;virtual&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;set_width&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;w&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;
        &lt;span style=&quot;color: #110099;&quot;&gt;Rectangle&lt;/span&gt;::set_width&lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;w&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt;;
        &lt;span style=&quot;color: #110099;&quot;&gt;Rectangle&lt;/span&gt;::set_length&lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;w&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt;;
    &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;virtual&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;set_length&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;l&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;
        &lt;span style=&quot;color: #110099;&quot;&gt;Rectangle&lt;/span&gt;::set_width&lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;l&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt;;
        &lt;span style=&quot;color: #110099;&quot;&gt;Rectangle&lt;/span&gt;::set_length&lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;l&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt;;
    &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;
&lt;/pre&gt;
&lt;/div&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;


&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;main&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Square&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;s&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;4&lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;;
    test_rectangle&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;s&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;pre class=&quot;example&quot;&gt;
ERROR!
&lt;/pre&gt;


&lt;p&gt;
好了，这下遇到麻烦了，单元测试出错了。我们检查下，发现，是因为长和宽同时变化导致出错。
&lt;/p&gt;

&lt;p&gt;
一个正方形可能是长方形，但是正方形对象的行为和长方形并不一样。面向对象所关注的是对象的行为。LSP 原则更加明确的说明，OOD 中的 ISA 关系针对的是对象外部行为。
&lt;/p&gt;

&lt;p&gt;
Bertrand Meyer 提出的 Design by Contract（基于契约的设计）更加清楚的阐述了 LSP 原则：
&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;
when redefining a routine [in a derivative], you may only replace its
precondition by a weaker one, and its postcondition by a stronger one.
&lt;/p&gt;

&lt;p&gt;
当通过继承重新定义一个例程，你只能把它的前置条件替换成更弱的要求，并且把它的后置条件替换成更强的要求。
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;
只有符合这个契约条件，子类型对象才可能在使用父类型对象的地方替换父类型。
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines R.30 只有在需要表达生存周期机制的时候使用智能指针</title>
   <link href="http://kimi.im/2023-02-25-cppcoreguidelines-r30"/>
   <updated>2023-02-25T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-r30</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;Take smart pointers as parameters only to explicitly express lifetime semantics&amp;rdquo;
&lt;/p&gt;

&lt;p&gt;
请参考 &lt;a href=&quot;http://kimi.im/2022-04-10-cppcoreguidelines-f7&quot;&gt;F.7&lt;/a&gt;
&lt;/p&gt;


&lt;p&gt;
理由：
&lt;/p&gt;

&lt;p&gt;
智能指针可以传递所有权或共享所有权。只有在需要所有权机制的时候使用。不操作生存周期的函数，应该只接受原始指针 &lt;code&gt;T*&lt;/code&gt; 或引用 &lt;code&gt;T&amp;amp;&lt;/code&gt; 。
&lt;/p&gt;

&lt;p&gt;
函数的参数如果是智能指针的话，就要求调用它的地方也使用智能指针。函数应该能以各种方式接受对象，而不能依靠智能指针，因为智能指针需要相应的生存周期管理。
&lt;/p&gt;

&lt;p&gt;
使用共享指针做参数，会产生潜在的运行时成本。
&lt;/p&gt;

&lt;p&gt;
例子
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;accepts any int*&lt;/span&gt;
&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt;*&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;

&lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;can only accept ints for which you want to transfer ownership&lt;/span&gt;
&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;g&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;unique_ptr&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;

&lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;can only accept ints for which you are willing to share ownership&lt;/span&gt;
&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;g&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;shared_ptr&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;

&lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;doesn&apos;t change ownership, but requires a particular ownership of the caller&lt;/span&gt;
&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;h&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;unique_ptr&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;&amp;gt;&lt;/span&gt;&amp;amp;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;

&lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;accepts any int&lt;/span&gt;
&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;h&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt;&amp;amp;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
坏例子：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;#include&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #2A00FF;&quot;&gt;memory&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;callee&lt;/span&gt;
&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;shared_ptr&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;&amp;gt;&lt;/span&gt;&amp;amp; &lt;span style=&quot;color: #000000;&quot;&gt;w&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;...&lt;/span&gt;
    cout &amp;lt;&amp;lt; *w &amp;lt;&amp;lt; endl; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;only use of w -- the lifetime is not used at all&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;...&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;

&lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;caller&lt;/span&gt;
&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;main&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;shared_ptr&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;my_widget&lt;/span&gt; = make_shared&lt;span style=&quot;color: #7388d6;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;&amp;gt;(&lt;/span&gt;111&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
    f&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;my_widget&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;

    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;//&lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;int* stack_widget =  new int(111);;&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;//&lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;f(stack_widget);&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;error: invalid initialization of reference of type&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;&apos;std::shared_ptr&amp;lt;int&amp;gt;&amp;amp;&apos; from expression of type &apos;int*&apos;&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;//&lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;26 |     f(stack_widget);&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;//   &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;|       ^~~~~~~~~~~~&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;note: in passing argument 1 of &apos;void f(std::shared_ptr&amp;lt;int&amp;gt;&amp;amp;)&apos;&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;12 | void f(shared_ptr&amp;lt;int&amp;gt;&amp;amp; w)&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;//    &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;|        ~~~~~~~~~~~~~~~~~^&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; 0;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;pre class=&quot;example&quot;&gt;
111
&lt;/pre&gt;


&lt;p&gt;
好例子：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;#include&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #2A00FF;&quot;&gt;memory&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;callee&lt;/span&gt;
&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt;&amp;amp; &lt;span style=&quot;color: #000000;&quot;&gt;w&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;...&lt;/span&gt;
    cout &amp;lt;&amp;lt; w &amp;lt;&amp;lt; endl;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;...&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;

&lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;caller&lt;/span&gt;
&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;main&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;shared_ptr&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;my_widget&lt;/span&gt; = make_shared&lt;span style=&quot;color: #7388d6;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;&amp;gt;(&lt;/span&gt;111&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
    f&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;*my_widget&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;

    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;stack_widget&lt;/span&gt; = 222;
    f&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;stack_widget&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;ok -- now this works&lt;/span&gt;

    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; 0;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;pre class=&quot;example&quot;&gt;
111
222
&lt;/pre&gt;



&lt;p&gt;
注意
&lt;/p&gt;

&lt;p&gt;
大部分的悬空指针（dangling pointer）问题都能通过静态代码分析检测到。函数参数的生存期持续到函数调用结束，所以没有太多指针生存期问题。
&lt;/p&gt;


&lt;p&gt;
强化
&lt;/p&gt;

&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;（简单）如果一个函数接受智能指针类型，但是这个函数只调用 &lt;code&gt;operator*&lt;/code&gt;
， &lt;code&gt;operator-&amp;gt;&lt;/code&gt; 以及 &lt;code&gt;get()&lt;/code&gt; 。建议使用 &lt;code&gt;T*&lt;/code&gt; 或 &lt;code&gt;T&amp;amp;&lt;/code&gt; 。&lt;/li&gt;
&lt;li&gt;如果一个参数是可复制、可移动的智能指针类型，但是在函数体或进一步的调用中没有被复制或移动，那么，就不需要所有权机制。建议使用 &lt;code&gt;T*&lt;/code&gt; 或 &lt;code&gt;T&amp;amp;&lt;/code&gt; 。&lt;/li&gt;
&lt;/ul&gt;
</content>
 </entry>
 
 <entry>
   <title>单词本：circumscribe</title>
   <link href="http://kimi.im/2023-02-25-english-circumscribe"/>
   <updated>2023-02-25T00:00:00+00:00</updated>
   <id>http://kimi.im/english-circumscribe</id>
   <content type="html">&lt;p&gt;
很多人都知道，Stephen Richards Covery 写过一本书叫做《高效能人士的七个习惯》（The 7 Habits of Highly Effective People）。
&lt;/p&gt;

&lt;p&gt;
今天介绍的单词是另一个人写的书《Trust &amp;amp; Inspire: How Truly Great
Leaders Unleash Greatness in Others》，作者名字叫 Stephen M.R. Covey。他好像，大概是 Stephen Richards Covery 的儿子。
&lt;/p&gt;

&lt;p&gt;
先不管了，这本书就是说信任+启发式领导与命令+控制式领导的差别。书中举了个例子，说把跳蚤关在玻璃罐子里，不加盖子，跳蚤会轻易跳出去。但是加了盖子，它们就跳不出去了。过段时间，把盖子拿到，它们也不会尝试跳出去。作者就总结说：
&lt;/p&gt;

&lt;p&gt;
You have conditioned them against jumping out of the jar and have
severely &lt;b&gt;circumscribed&lt;/b&gt; their potential. (&lt;a href=&quot;#citeproc_bib_item_1&quot;&gt;Covey 2022&lt;/a&gt;)
&lt;/p&gt;

&lt;p&gt;
你已经把它们训练的不敢跳出罐子了。你严重的限制了它们的潜力。
&lt;/p&gt;

&lt;p&gt;
作者举这个例子就是要说明命令+控制式领导对员工能力的负面作用。所以要成为信任+启发式领导。 Wise executives and managers now embrace a new
leadership method and mind-set: “Trust &amp;amp; Inspire.”
&lt;/p&gt;

&lt;p&gt;
当然，本文重点不是介绍信任与启发，而是介绍 &lt;b&gt;circumscribe&lt;/b&gt; 这个单词。
circum 是拉丁语around、周围的意思。scribe 是书写的意思。所以合起来就是在周围画了个圈，限制其活动。就好象是孙悟空用金箍棒给唐僧他们画了个保护圈，限制他们的活动。
&lt;/p&gt;

&lt;p&gt;
拉丁语 scribo, scribere, scripsi, scriptum 是书写的意思。相关的单词还有
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;conscript 征召，通过书写的文件，让人集合：Your body accords with
&lt;b&gt;conscript&lt;/b&gt; requirement completely.&lt;/li&gt;
&lt;li&gt;describe 描述：How do you &lt;b&gt;describe&lt;/b&gt; your books?&lt;/li&gt;
&lt;li&gt;inscribe 铭记：His name is &lt;b&gt;inscribed&lt;/b&gt; on the monument.&lt;/li&gt;
&lt;li&gt;proscribe 禁止，反对的描述：The crux of the dispute was an
initiative by a few members to &lt;b&gt;proscribe&lt;/b&gt; any broadcasts to aliens,
whether or not we receive a signal first.&lt;/li&gt;
&lt;li&gt;postscript 附言，写在后面的文字：I mean an addendum which he called
&lt;b&gt;postscript&lt;/b&gt;.&lt;/li&gt;
&lt;li&gt;subscribe 订阅：Which journals does the library &lt;b&gt;subscribe&lt;/b&gt; to?&lt;/li&gt;
&lt;li&gt;transcribe 转录： I have done some dictations that I need you to &lt;b&gt;transcribe&lt;/b&gt;.&lt;/li&gt;
&lt;li&gt;scribble 乱涂乱画：I&amp;rsquo;m sorry what I wrote was such a &lt;b&gt;scribble&lt;/b&gt;.&lt;/li&gt;
&lt;li&gt;scrivener 公证人、代笔人。&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
德语动词 schreiben 书写，直接就是拉丁语微调了一下么。法语动词 écrire
也有一些拉丁语的痕迹。
&lt;/p&gt;

&lt;p&gt;
在讲到领袖的榜样作用时，《Trust &amp;amp; Inspire: How Truly Great Leaders
Unleash Greatness in Others》书中还提到古希腊哲学家的领导力标准：
&lt;/p&gt;

&lt;p&gt;
classic Greek philosophers’ focus on three leadership standards:
“ethos, pathos and logos.” &amp;#x2026; Logos concerns logic. Take care to act
in a logical, rational way that is appropriate in scale to the
&lt;b&gt;cirumstances&lt;/b&gt;.
&lt;/p&gt;

&lt;p&gt;
这里也出现了 circum- 开头的单词 circumstance，即所出的环境，即条件、状况。在拉丁语里：
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;circumsto: 周围站着，stand around 即环境、状况。&lt;/li&gt;
&lt;li&gt;circumlocution: 之前学习 &lt;a href=&quot;./2021-03-15-english-red-tape.html&quot;&gt;red tap&lt;/a&gt; 的时候，遇到过这个词，迂回婉转。
This was no time for red tape and circumlocution, although these
have their place in a well-ordered, placid system. 官僚习气和推三拖四的作风，在按部就班、平平稳稳的秩序里还可以，但现在却不合时宜。&lt;/li&gt;
&lt;li&gt;circumduco: 带领着环绕，lead around。英语单词 circumduction 应该就是从这个词来的。 &lt;b&gt;Circumduction&lt;/b&gt; is the movement of a body region in a
circular manner, in which one end of the body region being moved
stays relatively stationary while the other end describes a circle.&lt;/li&gt;
&lt;li&gt;circumvenio: come around 绕着来。英语单词 circumvent 回避、规避、改道。Title II of the Civil Rights Act of 1964 mandates that hotels
and other public accommodations must not discriminate based on race,
national origin, sex, or religion, and Title VIII of the Civil
Rights Act of 1968 (also known as the Fair Housing Act [FHA])
prohibits discrimination specifically in housing. However, Airbnb&amp;rsquo;s
unique structure allows it to &lt;b&gt;circumvent&lt;/b&gt; those
laws. (&lt;a href=&quot;#citeproc_bib_item_2&quot;&gt;Openstax 2019&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
其他还有：
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;circumference: 周围承受，即图形的周长。&lt;/li&gt;
&lt;li&gt;circumflex 法语单词中的 ^ 符号，比如 côte 中 o 上面的那个。&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
德语里 circumvent 就是 umgehen，相应的 circumscribe 就成了 umschreiben。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;References&lt;/b&gt;
&lt;/p&gt;

&lt;style&gt;.csl-entry{text-indent: -1.5em; margin-left: 1.5em;}&lt;/style&gt;&lt;div class=&quot;csl-bib-body&quot;&gt;
  &lt;div class=&quot;csl-entry&quot;&gt;&lt;a id=&quot;citeproc_bib_item_1&quot;&gt;&lt;/a&gt;Covey, Stephen M.R. 2022. &lt;i&gt;Trust &amp;#38; Inspire: How Truly Great Leaders Unleash Greatness in Others&lt;/i&gt;. Simon &amp;#38; Schuster.&lt;/div&gt;
  &lt;div class=&quot;csl-entry&quot;&gt;&lt;a id=&quot;citeproc_bib_item_2&quot;&gt;&lt;/a&gt;Openstax. 2019. &lt;i&gt;Principles of Management&lt;/i&gt;. Rice University.&lt;/div&gt;
&lt;/div&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines R.24 用 std::weak_ptr 打破 shared_ptr 循环</title>
   <link href="http://kimi.im/2023-02-24-cppcoreguidelines-r24"/>
   <updated>2023-02-24T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-r24</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;Use &lt;code&gt;std::weak_ptr&lt;/code&gt; to break cycles of &lt;code&gt;shared_ptr&lt;/code&gt;&amp;rsquo;s&amp;rdquo;
&lt;/p&gt;


&lt;p&gt;
理由
&lt;/p&gt;

&lt;p&gt;
&lt;code&gt;shared_ptr&lt;/code&gt; 依赖于使用计数，如果我们的数据结构是一种循环结构，你依赖我，我依赖你，那么使用计数就永远不会减到 0。所以我们需要一种机制去破坏这种循环结构。
&lt;/p&gt;

&lt;p&gt;
&lt;code&gt;std::weak_ptr&lt;/code&gt; 可以临时指向一个 &lt;code&gt;std::shared_ptr&lt;/code&gt; ，作为一个临时所有者，不增加其使用计数。这样，就不会阻止别的代码删除这个这个对象。一旦这个对象的使用计数清零， &lt;code&gt;weak_ptr&lt;/code&gt; 指向的对象就没了。这就要求我们在使用这个指针的时候，先判断对象是否还存在，可以通过 &lt;code&gt;lock()&lt;/code&gt; 函数锁住对象，然后访问使用。
&lt;/p&gt;


&lt;p&gt;
比如
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;#include&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #2A00FF;&quot;&gt;memory&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;gt;&lt;/span&gt;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;bar&lt;/span&gt;;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;foo&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;public&lt;/span&gt;:
  &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;explicit&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;foo&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;std&lt;/span&gt;::&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;shared_ptr&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;bar&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;&amp;gt;&lt;/span&gt;&amp;amp; &lt;span style=&quot;color: #000000;&quot;&gt;forward_reference&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;
    : forward_reference_&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;forward_reference&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;
  &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;private&lt;/span&gt;:
  &lt;span style=&quot;color: #110099;&quot;&gt;std&lt;/span&gt;::&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;shared_ptr&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;bar&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;forward_reference_&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;bar&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;public&lt;/span&gt;:
  &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;explicit&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;bar&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;std&lt;/span&gt;::&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;weak_ptr&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;foo&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;&amp;gt;&lt;/span&gt;&amp;amp; &lt;span style=&quot;color: #000000;&quot;&gt;back_reference&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;
    : back_reference_&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;back_reference&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;
  &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;
  &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;do_something&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt;
  &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;auto&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;shared_back_reference&lt;/span&gt; = back_reference_.lock&lt;span style=&quot;color: #709870;&quot;&gt;()&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #909183;&quot;&gt;{&lt;/span&gt;
      &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;Use *shared_back_reference&lt;/span&gt;
    &lt;span style=&quot;color: #909183;&quot;&gt;}&lt;/span&gt;
  &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;private&lt;/span&gt;:
  &lt;span style=&quot;color: #110099;&quot;&gt;std&lt;/span&gt;::&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;weak_ptr&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;foo&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;back_reference_&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
再比如以下代码，树的结构就是一种循环结构。当我们把树的根节点设置成
&lt;code&gt;weak_ptr&lt;/code&gt; 的时候，就可以通过 reset 根节点来销毁这棵树。
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;#include&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #2A00FF;&quot;&gt;memory&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;#include&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #2A00FF;&quot;&gt;vector&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;gt;&lt;/span&gt;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;struct&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;TreeNode&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #110099;&quot;&gt;std&lt;/span&gt;::&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;weak_ptr&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;TreeNode&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;parent&lt;/span&gt;;
    &lt;span style=&quot;color: #110099;&quot;&gt;std&lt;/span&gt;::&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;vector&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;&amp;lt;&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;std&lt;/span&gt;::&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;shared_ptr&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;TreeNode&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;children&lt;/span&gt;;
    ~&lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;TreeNode&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;
        cout &amp;lt;&amp;lt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;destroying node\n&quot;&lt;/span&gt;;
    &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;

&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;main&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;Create a TreeNode as the root&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;auto&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;root&lt;/span&gt; = make_shared&lt;span style=&quot;color: #7388d6;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;TreeNode&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;&amp;gt;()&lt;/span&gt;;

    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;Give the parent 10 child nodes.&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;for&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;size_t&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;i&lt;/span&gt; = 0; i &amp;lt; 10; ++i&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;
        &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;auto&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;child&lt;/span&gt; = make_shared&lt;span style=&quot;color: #909183;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;TreeNode&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;&amp;gt;()&lt;/span&gt;;
        root-&amp;gt;children.push_back&lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;child&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt;;
        child-&amp;gt;parent = root;
    &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;

    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;Reset the root shared pointer, destroying the root object, and&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;subsequently its child nodes.&lt;/span&gt;
    root.reset&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;pre class=&quot;example&quot; id=&quot;orgd479873&quot;&gt;
destroying node
destroying node
destroying node
destroying node
destroying node
destroying node
destroying node
destroying node
destroying node
destroying node
destroying node
&lt;/pre&gt;


&lt;p&gt;
强化如果可以静态检测到这种循环，就不需要 &lt;code&gt;weak_ptr&lt;/code&gt; 了。
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>单词本：inter alia</title>
   <link href="http://kimi.im/2023-02-24-latin-inter-alia"/>
   <updated>2023-02-24T00:00:00+00:00</updated>
   <id>http://kimi.im/latin-inter-alia</id>
   <content type="html">&lt;p&gt;
昨天读到篇论文 (&lt;a href=&quot;#citeproc_bib_item_1&quot;&gt;Binder et al. 2020&lt;/a&gt;)，估计作者学过法律还是怎么的，用了好多次 &lt;b&gt;inter alia&lt;/b&gt;:
&lt;/p&gt;

&lt;p&gt;
This includes &lt;b&gt;inter alia&lt;/b&gt; the asset&amp;rsquo;s ability to autonomously negotiate
characteristics like bitrate, quality and security during the setup of
communication channels.
&lt;/p&gt;

&lt;p&gt;
「试翻译」在设置通信通道的时候，尤其需要包含设备自主协商比特率、质量、安全等特性的能力。
&lt;/p&gt;

&lt;p&gt;
Source of the data is the current order, which includes &lt;b&gt;inter alia&lt;/b&gt;
label and quantity of the product, or other production parameters,
that can be defined directly within the model.
&lt;/p&gt;

&lt;p&gt;
「试翻译」数据的来源是当前的顺序，尤其包括产品、生产参数的标签和质量。因为这些能直接在模型中定义。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;inter alia&lt;/b&gt; 是拉丁语，意思是 among other things “在其他东西之间”。这个词放在句子中间，大概是表达这样一个意思，其他还有很多事情，也很重要，但是在其他这些事情之中，我后面列出来的东西尤其重要。
&lt;/p&gt;

&lt;p&gt;
之前我们学过，&lt;a href=&quot;./2022-06-24-latin-primus-inter-pares.html&quot;&gt;primus inter pares&lt;/a&gt;，意思是同行中最牛的。这里也用到了
inter。
&lt;/p&gt;

&lt;p&gt;
那么，我们用 inter alia 来造句看看（下次写专利、写论文就可以用上啦
^_^）：
&lt;/p&gt;

&lt;p&gt;
Operating system is used for, &lt;b&gt;inter alia&lt;/b&gt;, managing computer resources
and scheduling computing tasks.
&lt;/p&gt;

&lt;p&gt;
The principle of SOA includes &lt;b&gt;inter alia&lt;/b&gt; loose coupling, late binding,
and service discovery.
&lt;/p&gt;

&lt;p&gt;
&lt;b&gt;参考文献&lt;/b&gt;
&lt;/p&gt;

&lt;style&gt;.csl-entry{text-indent: -1.5em; margin-left: 1.5em;}&lt;/style&gt;&lt;div class=&quot;csl-bib-body&quot;&gt;
  &lt;div class=&quot;csl-entry&quot;&gt;&lt;a id=&quot;citeproc_bib_item_1&quot;&gt;&lt;/a&gt;Binder, Christoph, Katharina Polanec, Franz Schweiberer, Christian Neureiter, Goran Lastro, and Arndt Lüder. 2020. “Using a Model-Based Engineering Approach for Developing Industrial Internet of Things Applications.” In &lt;i&gt;2020 IEEE International Symposium on Systems Engineering (ISSE)&lt;/i&gt;, 1–6. doi:&lt;a href=&quot;https://doi.org/10.1109/ISSE49799.2020.9272026&quot;&gt;10.1109/ISSE49799.2020.9272026&lt;/a&gt;.&lt;/div&gt;
&lt;/div&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines R.23 用 make_unique 创建 unique_ptr</title>
   <link href="http://kimi.im/2023-02-23-cppcoreguidelines-r23"/>
   <updated>2023-02-23T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-r23</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;Use &lt;code&gt;make_unique()&lt;/code&gt; to make &lt;code&gt;unique_ptr&lt;/code&gt;&amp;rsquo;s&amp;rdquo;
&lt;/p&gt;

&lt;p&gt;
理由
&lt;/p&gt;

&lt;p&gt;
代码更精简。在复杂语句中，确保发生异常也是安全的。
&lt;/p&gt;


&lt;p&gt;
例子
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;unique_ptr&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;lt;&lt;/span&gt;Foo&lt;span style=&quot;color: #707183;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;p&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Foo&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;7&lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;OK: but repetitive&lt;/span&gt;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;auto&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;q&lt;/span&gt; = make_unique&lt;span style=&quot;color: #707183;&quot;&gt;&amp;lt;&lt;/span&gt;Foo&lt;span style=&quot;color: #707183;&quot;&gt;&amp;gt;(&lt;/span&gt;7&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;      &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;Better: no repetition of Foo&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;
强化
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;警告：用 new 构造 &lt;code&gt;unique_ptr&lt;/code&gt; 的地方&lt;/li&gt;
&lt;/ul&gt;
</content>
 </entry>
 
 <entry>
   <title>单词本：nepotism</title>
   <link href="http://kimi.im/2023-02-23-english-nepotism"/>
   <updated>2023-02-23T00:00:00+00:00</updated>
   <id>http://kimi.im/english-nepotism</id>
   <content type="html">&lt;p&gt;
最近在看管理学原则，看到管理学历史这部分，介绍科学管理之父泰勒
Frederick Winslow Taylor (1856–1915)，他提出了几条管理原则。其中第二条原则就是要科学的选择和培养员工。
&lt;/p&gt;

&lt;p&gt;
Scientifically select and train each worker. Prior to Taylor&amp;rsquo;s work,
the selection of workers was made based on favoritism, &lt;b&gt;nepotism&lt;/b&gt;, or
random choice. (&lt;a href=&quot;#citeproc_bib_item_1&quot;&gt;Openstax 2019&lt;/a&gt;)
&lt;/p&gt;

&lt;p&gt;
在泰勒之前，企业提拔员工主要是基于偏袒、任人唯亲，或根本就是随机选择。
&lt;/p&gt;

&lt;p&gt;
事实上，1878 年，泰勒能进入位于费城的米德维尔钢铁公司任职。 也是因为他父亲的朋友帮忙的。
&lt;/p&gt;

&lt;p&gt;
这里这个单词 &lt;b&gt;nepotism&lt;/b&gt; 是指裙带关系、任人唯亲、任用亲属的意思。
&lt;/p&gt;

&lt;p&gt;
聪明的同学一定发现了，这个 nepotism 和 nephew （外甥、侄子） 很像。事实上，也确实是相关的。
&lt;/p&gt;

&lt;p&gt;
大概是十五世纪七十年代，有个叫 Sixtus IV 西克斯图斯四世的教皇。他当上教皇之后，就提拔了很多自己的亲戚，他任命他的两个侄子，两个行为放荡的年轻人，为枢机团成员。后来他另外的三个侄子和侄孙也获得这一职位。
&lt;/p&gt;

&lt;p&gt;
后来，有个叫 Gregorio Leti 的人，写了本书《Nepotismo di Roma》就是讲教皇侄子的故事，英文翻译为《The History of the Popes&amp;rsquo; Nephews》。从此
nepotism 就流行开来，指这种任人唯亲的行为。
&lt;/p&gt;

&lt;p&gt;
意大利语 nipote 就是侄子的意思。比如 Mio nipote è allergico alle
uova. 我侄子对鸡蛋过敏。nepote 大概是 nipote 在 17 世纪比较老的写法吧。
&lt;/p&gt;

&lt;p&gt;
侄子或外甥。法语 neveu，德语 Neffe，英语 nephew，意大利 nipote，应该都源自拉丁语 nepot。故而，选贤唯亲。法语 népotisme, 德语 Nepotismus，英语 nepotism，意大利语 nepotismo。
&lt;/p&gt;

&lt;p&gt;
&lt;b&gt;参考文献&lt;/b&gt;
&lt;/p&gt;


&lt;style&gt;.csl-entry{text-indent: -1.5em; margin-left: 1.5em;}&lt;/style&gt;&lt;div class=&quot;csl-bib-body&quot;&gt;
  &lt;div class=&quot;csl-entry&quot;&gt;&lt;a id=&quot;citeproc_bib_item_1&quot;&gt;&lt;/a&gt;Openstax. 2019. &lt;i&gt;Principles of Management&lt;/i&gt;. Rice University.&lt;/div&gt;
&lt;/div&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines R.22 用 make_shared 创建 shared_ptr</title>
   <link href="http://kimi.im/2023-02-22-cppcoreguidelines-r22"/>
   <updated>2023-02-22T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-r22</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;Use &lt;code&gt;make_shared()&lt;/code&gt; to make &lt;code&gt;shared_ptr&lt;/code&gt;&amp;rsquo;s&amp;rdquo;
&lt;/p&gt;

&lt;p&gt;
理由
&lt;/p&gt;

&lt;p&gt;
&lt;code&gt;make_shared&lt;/code&gt; 语句代码更简洁。且能避免分开分配内存，对象的生成和引用计数更接近。
&lt;/p&gt;


&lt;p&gt;
例子
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;shared_ptr&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;lt;&lt;/span&gt;X&lt;span style=&quot;color: #707183;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;p1&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;X&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;2&lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;bad&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;auto&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;p&lt;/span&gt; = make_shared&lt;span style=&quot;color: #707183;&quot;&gt;&amp;lt;&lt;/span&gt;X&lt;span style=&quot;color: #707183;&quot;&gt;&amp;gt;(&lt;/span&gt;2&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;good&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
第二句只用到一次 X，所以代码更精简，速度更快。
&lt;/p&gt;


&lt;p&gt;
强化
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;警告：用 new 构造 &lt;code&gt;shared_ptr&lt;/code&gt; 的地方&lt;/li&gt;
&lt;/ul&gt;
</content>
 </entry>
 
 <entry>
   <title>单词本：argumentum ad ignorantiam</title>
   <link href="http://kimi.im/2023-02-22-latin-argumentum-ad-ignorantiam"/>
   <updated>2023-02-22T00:00:00+00:00</updated>
   <id>http://kimi.im/latin-argumentum-ad-ignorantiam</id>
   <content type="html">&lt;p&gt;
前几天，读信息安全的技术资料，看到这句话：
&lt;/p&gt;

&lt;p&gt;
This is in contrast to the use of &lt;b&gt;argumentum ad ignorantiam&lt;/b&gt; where just
because you have no evidence of a protection breach implies a fully
protected.
&lt;/p&gt;

&lt;p&gt;
这和无知的辩论相反。后者认为就算是没有证据的安全失效，也要进行完全的保护。
&lt;/p&gt;

&lt;p&gt;
这里出现一个拉丁语词组 argumentum ad ignorantiam 意思是无知的辩论。其实说白了，就是无理取闹的意思吧。
&lt;/p&gt;

&lt;p&gt;
这个 argumentum ad ignorantiam 是一种谬论，其推理过程有两种：
&lt;/p&gt;


&lt;p&gt;
其一：假设 p 断言是无法证实的，∴ 非 p 为真。
&lt;/p&gt;

&lt;p&gt;
其二：假设非 p 断言是无法证实的，∴ p 为真。
&lt;/p&gt;


&lt;p&gt;
举个例子：
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;因为你不能证明外星人的存在，所以外星人不存在。&lt;/li&gt;
&lt;li&gt;因为你不能证明外星人不存在，所以外星人存在。&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;
再回头看本文引用的那段话，其实就是说，因为无法证明安全防护是不是会被攻破，我们就要不遗余力的砸大价钱进行网络安全保护。这就有点无知者无畏的意思啦。也就是所谓的 argumentum ad ignorantiam。
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines R.21 最好用 unique_ptr，除非有共享所有权的需要，则用 shared_ptr</title>
   <link href="http://kimi.im/2023-02-21-cppcoreguidelines-r21"/>
   <updated>2023-02-21T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-r21</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;Prefer &lt;code&gt;unique_ptr&lt;/code&gt; over &lt;code&gt;shared_ptr&lt;/code&gt; unless you need to share ownership&amp;rdquo;
&lt;/p&gt;


&lt;p&gt;
理由
&lt;/p&gt;

&lt;p&gt;
&lt;code&gt;unique_ptr&lt;/code&gt; 更简单，行为更可预测。因为你能知道什么时候会调用析构函数。速度也更快，不需要维护使用计数。
&lt;/p&gt;


&lt;p&gt;
坏例子
&lt;/p&gt;

&lt;p&gt;
这里其实不需要维护引用计数：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;shared_ptr&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;&amp;lt;&lt;/span&gt;Base&lt;span style=&quot;color: #7388d6;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;base&lt;/span&gt; = make_shared&lt;span style=&quot;color: #7388d6;&quot;&gt;&amp;lt;&lt;/span&gt;Derived&lt;span style=&quot;color: #7388d6;&quot;&gt;&amp;gt;()&lt;/span&gt;;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;use base locally, without copying it -- refcount never exceeds 1&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;destroy base&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;
例子
&lt;/p&gt;

&lt;p&gt;
效率更高
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;unique_ptr&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;&amp;lt;&lt;/span&gt;Base&lt;span style=&quot;color: #7388d6;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;base&lt;/span&gt; = make_unique&lt;span style=&quot;color: #7388d6;&quot;&gt;&amp;lt;&lt;/span&gt;Derived&lt;span style=&quot;color: #7388d6;&quot;&gt;&amp;gt;()&lt;/span&gt;;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;use base locally&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;destroy base&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;
强化
&lt;/p&gt;

&lt;p&gt;
警告：如果一个函数内用了共享指针，但是却不返回该指针，或以共享指针引用的方式传递给别的函数。建议使用 &lt;code&gt;unique_ptr&lt;/code&gt;
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>单词本：a priori</title>
   <link href="http://kimi.im/2023-02-21-latin-a-priori"/>
   <updated>2023-02-21T00:00:00+00:00</updated>
   <id>http://kimi.im/latin-a-priori</id>
   <content type="html">&lt;p&gt;
昨天读到 Samanis et al. (&lt;a href=&quot;#citeproc_bib_item_1&quot;&gt;Samanis, Gardiner, and Rashid 2022&lt;/a&gt;) 的一篇论文，看到以下这段话：
&lt;/p&gt;

&lt;p&gt;
Our approach involves transforming policies from simply a means to
enforce security requirements defined a priori, to adaptive objects
that are capable to evolve in response to unfolding attacks.
&lt;/p&gt;

&lt;p&gt;
我们的方法可以针对网络攻击的方式，调整先验的转换策略。
&lt;/p&gt;

&lt;p&gt;
这里咱们遇到一个拉丁语单词 a priori 即 from causes to the effect，先验的，超越经验的。
&lt;/p&gt;

&lt;p&gt;
在上面这段话的语境中， security requirement defined a priori 指的是在未遭遇安全攻击之前，所事先提出的一些网络安全需求。
&lt;/p&gt;

&lt;p&gt;
再举个例子：There has been considerable recent interest in methods of
determining sample size for qualitative research a priori, rather than
through an adaptive approach such as saturation. 相对于通过饱和的适应方法，最近大家对确定样本大小的先验定量研究更感兴趣。（实在有点绕口）
&lt;/p&gt;

&lt;p&gt;
那么，与 a priori 相对应的就是后验，即 a posteriori，凭经验得到的。
&lt;/p&gt;

&lt;p&gt;
举个例子：
&lt;/p&gt;

&lt;p&gt;
An optimal control approach to a posteriori error estimation in finite
element methods
&lt;/p&gt;

&lt;p&gt;
意思就是：一种根据在有限元素中的错误评估的经验推导出来的优化控制方法。
&lt;/p&gt;

&lt;p&gt;
&lt;b&gt;References&lt;/b&gt;
&lt;/p&gt;

&lt;style&gt;.csl-entry{text-indent: -1.5em; margin-left: 1.5em;}&lt;/style&gt;&lt;div class=&quot;csl-bib-body&quot;&gt;
  &lt;div class=&quot;csl-entry&quot;&gt;&lt;a id=&quot;citeproc_bib_item_1&quot;&gt;&lt;/a&gt;Samanis, Emmanouil, Joseph Gardiner, and Awais Rashid. 2022. “Adaptive Cyber Security for Critical Infrastructure.” In &lt;i&gt;2022 ACM/IEEE 13th International Conference on Cyber-Physical Systems (ICCPS)&lt;/i&gt;, 304–5. doi:&lt;a href=&quot;https://doi.org/10.1109/ICCPS54341.2022.00043&quot;&gt;10.1109/ICCPS54341.2022.00043&lt;/a&gt;.&lt;/div&gt;
&lt;/div&gt;
</content>
 </entry>
 
 <entry>
   <title>单词本：ad nauseam</title>
   <link href="http://kimi.im/2023-02-21-english-ad-nauseam"/>
   <updated>2023-02-21T00:00:00+00:00</updated>
   <id>http://kimi.im/english-ad-nauseam</id>
   <content type="html">&lt;p&gt;
读文章的时候，看到这句话：
&lt;/p&gt;

&lt;p&gt;
You&amp;rsquo;ve heard it &lt;b&gt;ad nauseam&lt;/b&gt;: Digital transformation is pivotal to the future success of your business.
&lt;/p&gt;

&lt;p&gt;
对此，你一定听烦：数字化转型是业务未来成功的关键。
&lt;/p&gt;

&lt;p&gt;
这里 ad nauseam 的意思是 used to refer to the fact that something has
been done or repeated so often that it has become annoying or
tiresome. 对于重复了很多遍的事情或话语，产生了厌烦疲倦。
&lt;/p&gt;

&lt;p&gt;
ad nauseam 来自拉丁语，字面意思是 to sickness，导致生病。 nauseam 的原意是作呕。所以 ad nauseam 更具体的说是厌烦到作呕想吐。
&lt;/p&gt;

&lt;p&gt;
naus 其实是船的意思。所以，nauseam 其实是指 ship-sickness，即晕船。比如：
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;aeronautics 飞行术，就是空中航行&lt;/li&gt;
&lt;li&gt;aquanaut 海底观察员&lt;/li&gt;
&lt;li&gt;astronaut 宇航员，即太空船员。也称 cosmonaut&lt;/li&gt;
&lt;li&gt;navy 海军&lt;/li&gt;
&lt;li&gt;naval 海军的&lt;/li&gt;
&lt;li&gt;navicular 船状的&lt;/li&gt;
&lt;li&gt;navigation 导航&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
nauseam 相关的单词，英语里还有:
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;nauseous：令人作呕的；厌恶的&lt;/li&gt;
&lt;li&gt;nauseate：作呕；厌恶；产生恶感；使厌恶；使恶心；使作呕&lt;/li&gt;
&lt;/ul&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines R.20 用 unique_ptr 或 shared_ptr 表达所有权</title>
   <link href="http://kimi.im/2023-02-20-cppcoreguidelines-r20"/>
   <updated>2023-02-20T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-r20</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;Use &lt;code&gt;unique_ptr&lt;/code&gt; or &lt;code&gt;shared_ptr&lt;/code&gt; to represent ownership&amp;rdquo;
&lt;/p&gt;


&lt;p&gt;
理由
&lt;/p&gt;

&lt;p&gt;
可以避免资源泄漏。
&lt;/p&gt;


&lt;p&gt;
例子
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;X&lt;/span&gt;* &lt;span style=&quot;color: #000000;&quot;&gt;p1&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;X&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;;              &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;bad, p1 will leak&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;auto&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;p2&lt;/span&gt; = make_unique&lt;span style=&quot;color: #7388d6;&quot;&gt;&amp;lt;&lt;/span&gt;X&lt;span style=&quot;color: #7388d6;&quot;&gt;&amp;gt;()&lt;/span&gt;;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;good, unique ownership&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;auto&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;p3&lt;/span&gt; = make_shared&lt;span style=&quot;color: #7388d6;&quot;&gt;&amp;lt;&lt;/span&gt;X&lt;span style=&quot;color: #7388d6;&quot;&gt;&amp;gt;()&lt;/span&gt;;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;good, shared ownership&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
上面函数中，初始化 p1 指针的对象会泄漏。
&lt;/p&gt;


&lt;p&gt;
强化
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;警告：new 出来的对象赋值给原始指针的情况&lt;/li&gt;
&lt;li&gt;警告：函数的返回值是原始指针，并赋值给另一个原始指针的情况&lt;/li&gt;
&lt;/ul&gt;
</content>
 </entry>
 
 <entry>
   <title>基于区块链智能合约的服务等级协议</title>
   <link href="http://kimi.im/2023-02-19-sla-based-on-blockchain"/>
   <updated>2023-02-19T00:00:00+00:00</updated>
   <id>http://kimi.im/sla-based-on-blockchain</id>
   <content type="html">&lt;p&gt;
我们应用物联网的云服务的时候，会考量其服务等级协议 SLA。服务等级协议描述的是双方的一种约定，是一种服务可用性的指标。服务可用性可以用以下公式计算：
&lt;/p&gt;

&lt;p&gt;
\(\textit{SLA} = \frac{\sum_{i=i}^n V}{\sum_{i=1}^n V + \sum_{i=i}^n F} \times 100\%\)
&lt;/p&gt;

&lt;p&gt;
其中 V 表示有效服务，F 表示无效服务。
&lt;/p&gt;

&lt;p&gt;
但是，目前 SLA 的结果通常由用户来提供证明。服务提供方和用户之间又会存在猜疑，有时候还会需要上升到法律仲裁。
&lt;/p&gt;

&lt;p&gt;
那么，具有不可篡改（immutability）、分布式、不可抵赖的区块链技术是否能解决这个问题呢？
&lt;/p&gt;

&lt;p&gt;
是的，英国纽卡斯尔大学和瑞典吕勒奥科技大学的研究人员就提出了一个基于分布式区块链智能合约的 SLA 方案。
&lt;/p&gt;


&lt;div id=&quot;orge268f03&quot; class=&quot;figure&quot;&gt;
&lt;p&gt;&lt;div align=&quot;center&quot;&gt;&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;
&lt;!-- Created with Inkscape (http://www.inkscape.org/) --&gt;

&lt;svg
   version=&quot;1.1&quot;
   id=&quot;svg2&quot;
   xml:space=&quot;preserve&quot;
   width=&quot;560&quot;
   height=&quot;796.15997&quot;
   viewBox=&quot;0 0 560 796.15997&quot;
   sodipodi:docname=&quot;SLA-smart-contract.pdf&quot;
   xmlns:inkscape=&quot;http://www.inkscape.org/namespaces/inkscape&quot;
   xmlns:sodipodi=&quot;http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd&quot;
   xmlns=&quot;http://www.w3.org/2000/svg&quot;
   xmlns:svg=&quot;http://www.w3.org/2000/svg&quot;&gt;&lt;defs
     id=&quot;defs6&quot;&gt;&lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath16&quot;&gt;&lt;path
         d=&quot;M 0,0 H 1749.9999 V 2487.1572 H 0 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path14&quot; /&gt;&lt;/clipPath&gt;&lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath30&quot;&gt;&lt;path
         d=&quot;M 0,0 H 1749.9999 V 2481.1643 H 0 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path28&quot; /&gt;&lt;/clipPath&gt;&lt;/defs&gt;&lt;sodipodi:namedview
     id=&quot;namedview4&quot;
     pagecolor=&quot;#ffffff&quot;
     bordercolor=&quot;#666666&quot;
     borderopacity=&quot;1.0&quot;
     inkscape:pageshadow=&quot;2&quot;
     inkscape:pageopacity=&quot;0.0&quot;
     inkscape:pagecheckerboard=&quot;0&quot; /&gt;&lt;g
     id=&quot;g8&quot;
     inkscape:groupmode=&quot;layer&quot;
     inkscape:label=&quot;SLA-smart-contract&quot;
     transform=&quot;matrix(0.31999998,0,0,0.31999998,0,1.9904e-5)&quot;&gt;&lt;g
       id=&quot;g10&quot;&gt;&lt;g
         id=&quot;g12&quot;
         clip-path=&quot;url(#clipPath16)&quot;&gt;&lt;g
           id=&quot;g18&quot;
           transform=&quot;scale(2.9965751)&quot;&gt;&lt;path
             d=&quot;M 0,0 H 584 V 830 H 0 Z&quot;
             style=&quot;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
             id=&quot;path20&quot; /&gt;&lt;path
             d=&quot;M 0,0 H 584 V 828 H 0 Z&quot;
             style=&quot;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
             id=&quot;path22&quot; /&gt;&lt;/g&gt;&lt;/g&gt;&lt;/g&gt;&lt;g
       id=&quot;g24&quot;&gt;&lt;g
         id=&quot;g26&quot;
         clip-path=&quot;url(#clipPath30)&quot;&gt;&lt;g
           id=&quot;g32&quot;
           transform=&quot;matrix(2.9965751,0,0,2.9965751,1.4982876,1.4982876)&quot;&gt;&lt;path
             d=&quot;m 115,388 h 52.13&quot;
             style=&quot;fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
             id=&quot;path34&quot; /&gt;&lt;path
             d=&quot;m 173.88,388 -9,4.5 2.25,-4.5 -2.25,-4.5 z&quot;
             style=&quot;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
             id=&quot;path36&quot; /&gt;&lt;path
             d=&quot;m 173.88,388 -9,4.5 2.25,-4.5 -2.25,-4.5 z&quot;
             style=&quot;fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
             id=&quot;path38&quot; /&gt;&lt;path
             d=&quot;M 100,358 V 251.87&quot;
             style=&quot;fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
             id=&quot;path40&quot; /&gt;&lt;path
             d=&quot;m 100,245.12 4.5,9 -4.5,-2.25 -4.5,2.25 z&quot;
             style=&quot;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
             id=&quot;path42&quot; /&gt;&lt;path
             d=&quot;m 100,245.12 4.5,9 -4.5,-2.25 -4.5,2.25 z&quot;
             style=&quot;fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
             id=&quot;path44&quot; /&gt;&lt;path
             d=&quot;m 107.5,365.5 c 0,0.49246 -0.048,0.98016 -0.14412,1.46317 -0.0961,0.483 -0.23834,0.95196 -0.42679,1.40692 -0.18846,0.45498 -0.41948,0.8872 -0.69308,1.29666 -0.2736,0.40945 -0.5845,0.7883 -0.93272,1.13653 -0.34822,0.34824 -0.72706,0.65912 -1.13653,0.93271 -0.40946,0.27359 -0.84167,0.50464 -1.29664,0.69309 -0.45497,0.18844 -0.92395,0.33072 -1.40695,0.42679 -0.48299,0.0961 -0.97071,0.1441 -1.46317,0.14413 -0.492462,-3e-5 -0.980194,-0.0481 -1.463188,-0.14413 -0.482994,-0.0961 -0.951981,-0.23835 -1.406952,-0.42682 -0.454971,-0.18845 -0.887192,-0.41947 -1.296654,-0.69306 -0.409462,-0.27359 -0.788299,-0.58447 -1.136513,-0.93271 -0.348228,-0.34823 -0.659133,-0.72708 -0.932724,-1.13653 -0.273597,-0.40946 -0.504623,-0.84168 -0.693077,-1.29666 -0.188453,-0.45496 -0.330719,-0.92392 -0.426788,-1.40692 C 92.548027,366.48016 92.499992,365.99246 92.5,365.5 c -8e-6,-0.49246 0.04803,-0.98016 0.144096,-1.46317 0.09608,-0.483 0.238343,-0.95199 0.426796,-1.40698 0.188454,-0.45498 0.41948,-0.8872 0.69307,-1.29669 0.273598,-0.40945 0.584503,-0.78827 0.932731,-1.13647 0.348214,-0.34824 0.727051,-0.65915 1.136513,-0.93274 0.40947,-0.27359 0.84169,-0.50464 1.296662,-0.69309 0.454963,-0.18844 0.92395,-0.33069 1.406944,-0.42673 C 99.019806,358.04803 99.507538,358 100,358 c 0.49246,0 0.98018,0.048 1.46317,0.14413 0.483,0.096 0.95198,0.23829 1.40695,0.42673 0.45497,0.18845 0.88718,0.41947 1.29664,0.69306 0.40947,0.27359 0.78831,0.58453 1.13653,0.93277 0.34822,0.3482 0.65912,0.72705 0.93272,1.13653 0.2736,0.40946 0.50462,0.84165 0.69308,1.29663 0.18845,0.45499 0.33071,0.92398 0.42679,1.40698 0.0961,0.48301 0.14412,0.97071 0.14412,1.46317 z&quot;
             style=&quot;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
             id=&quot;path46&quot; /&gt;&lt;path
             d=&quot;m 107.5,365.5 c 0,0.49246 -0.048,0.98016 -0.14412,1.46317 -0.0961,0.483 -0.23834,0.95196 -0.42679,1.40692 -0.18846,0.45498 -0.41948,0.8872 -0.69308,1.29666 -0.2736,0.40945 -0.5845,0.7883 -0.93272,1.13653 -0.34822,0.34824 -0.72706,0.65912 -1.13653,0.93271 -0.40946,0.27359 -0.84167,0.50464 -1.29664,0.69309 -0.45497,0.18844 -0.92395,0.33072 -1.40695,0.42679 -0.48299,0.0961 -0.97071,0.1441 -1.46317,0.14413 -0.492462,-3e-5 -0.980194,-0.0481 -1.463188,-0.14413 -0.482994,-0.0961 -0.951981,-0.23835 -1.406952,-0.42682 -0.454971,-0.18845 -0.887192,-0.41947 -1.296654,-0.69306 -0.409462,-0.27359 -0.788299,-0.58447 -1.136513,-0.93271 -0.348228,-0.34823 -0.659133,-0.72708 -0.932724,-1.13653 -0.273597,-0.40946 -0.504623,-0.84168 -0.693077,-1.29666 -0.188453,-0.45496 -0.330719,-0.92392 -0.426788,-1.40692 C 92.548027,366.48016 92.499992,365.99246 92.5,365.5 c -8e-6,-0.49246 0.04803,-0.98016 0.144096,-1.46317 0.09608,-0.483 0.238343,-0.95199 0.426796,-1.40698 0.188454,-0.45498 0.41948,-0.8872 0.69307,-1.29669 0.273598,-0.40945 0.584503,-0.78827 0.932731,-1.13647 0.348214,-0.34824 0.727051,-0.65915 1.136513,-0.93274 0.40947,-0.27359 0.84169,-0.50464 1.296662,-0.69309 0.454963,-0.18844 0.92395,-0.33069 1.406944,-0.42673 C 99.019806,358.04803 99.507538,358 100,358 c 0.49246,0 0.98018,0.048 1.46317,0.14413 0.483,0.096 0.95198,0.23829 1.40695,0.42673 0.45497,0.18845 0.88718,0.41947 1.29664,0.69306 0.40947,0.27359 0.78831,0.58453 1.13653,0.93277 0.34822,0.3482 0.65912,0.72705 0.93272,1.13653 0.2736,0.40946 0.50462,0.84165 0.69308,1.29663 0.18845,0.45499 0.33071,0.92398 0.42679,1.40698 0.0961,0.48301 0.14412,0.97071 0.14412,1.46317 z&quot;
             style=&quot;fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
             id=&quot;path48&quot; /&gt;&lt;path
             d=&quot;m 100,373 v 25 m 0,-20 H 85 m 15,0 h 15 m -15,20 -15,20 m 15,-20 15,20&quot;
             style=&quot;fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
             id=&quot;path50&quot; /&gt;&lt;/g&gt;&lt;g
           id=&quot;g52&quot;
           transform=&quot;scale(2.9965751)&quot;&gt;&lt;text
             transform=&quot;translate(68.5,440)&quot;
             style=&quot;font-variant:normal;font-weight:normal;font-size:16px;font-family:&apos;Microsoft YaHei&apos;;-inkscape-font-specification:MicrosoftYaHei;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
             id=&quot;text56&quot;&gt;&lt;tspan
               x=&quot;0 16 32 48&quot;
               y=&quot;0&quot;
               sodipodi:role=&quot;line&quot;
               id=&quot;tspan54&quot;&gt;云服务商&lt;/tspan&gt;&lt;/text&gt;&lt;/g&gt;&lt;g
           id=&quot;g58&quot;
           transform=&quot;matrix(2.9965751,0,0,2.9965751,1.4982876,1.4982876)&quot;&gt;&lt;path
             d=&quot;M 115,503 H 215 V 445.87&quot;
             style=&quot;fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
             id=&quot;path60&quot; /&gt;&lt;path
             d=&quot;m 215,439.12 4.5,9 -4.5,-2.25 -4.5,2.25 z&quot;
             style=&quot;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
             id=&quot;path62&quot; /&gt;&lt;path
             d=&quot;m 215,439.12 4.5,9 -4.5,-2.25 -4.5,2.25 z&quot;
             style=&quot;fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
             id=&quot;path64&quot; /&gt;&lt;path
             d=&quot;m 107.5,480.5 c 0,0.49243 -0.048,0.98013 -0.14412,1.4631 -0.0961,0.48298 -0.23834,0.95194 -0.42679,1.40693 -0.18846,0.45498 -0.41948,0.8872 -0.69308,1.29672 -0.2736,0.40945 -0.5845,0.7883 -0.93272,1.13653 -0.34822,0.34824 -0.72706,0.65912 -1.13653,0.93271 -0.40946,0.27359 -0.84167,0.50461 -1.29664,0.69309 -0.45497,0.18844 -0.92395,0.33072 -1.40695,0.42682 -0.48299,0.096 -0.97071,0.14407 -1.46317,0.1441 -0.492462,-3e-5 -0.980194,-0.0481 -1.463188,-0.14413 -0.482994,-0.0961 -0.951981,-0.23835 -1.406952,-0.42679 -0.454971,-0.18848 -0.887192,-0.4195 -1.296654,-0.69309 -0.409462,-0.27359 -0.788299,-0.58447 -1.136513,-0.93271 -0.348228,-0.34823 -0.659133,-0.72708 -0.932724,-1.13653 -0.273597,-0.40952 -0.504623,-0.84174 -0.693077,-1.29669 -0.188453,-0.45499 -0.330719,-0.92398 -0.426788,-1.40696 -0.09608,-0.48297 -0.144112,-0.97067 -0.144104,-1.4631 -8e-6,-0.49249 0.04803,-0.98026 0.144096,-1.46326 0.09608,-0.483 0.238343,-0.95196 0.426796,-1.40695 0.188454,-0.45499 0.41948,-0.88721 0.69307,-1.29666 0.273598,-0.40945 0.584503,-0.78827 0.932731,-1.13647 0.348214,-0.34824 0.727051,-0.65912 1.136513,-0.93271 0.40947,-0.27362 0.84169,-0.50464 1.296662,-0.69309 0.454963,-0.18844 0.92395,-0.33072 1.406944,-0.42676 C 99.019806,473.04803 99.507538,473 100,473 c 0.49246,0 0.98018,0.048 1.46317,0.14407 0.483,0.0961 0.95198,0.23832 1.40695,0.42676 0.45497,0.18845 0.88718,0.41947 1.29664,0.69309 0.40947,0.27359 0.78831,0.5845 1.13653,0.93274 0.34822,0.3482 0.65912,0.72702 0.93272,1.13647 0.2736,0.40945 0.50462,0.84171 0.69308,1.29669 0.18845,0.45499 0.33071,0.92395 0.42679,1.40695 0.0961,0.48301 0.14412,0.97074 0.14412,1.46323 z&quot;
             style=&quot;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
             id=&quot;path66&quot; /&gt;&lt;path
             d=&quot;m 107.5,480.5 c 0,0.49243 -0.048,0.98013 -0.14412,1.4631 -0.0961,0.48298 -0.23834,0.95194 -0.42679,1.40693 -0.18846,0.45498 -0.41948,0.8872 -0.69308,1.29672 -0.2736,0.40945 -0.5845,0.7883 -0.93272,1.13653 -0.34822,0.34824 -0.72706,0.65912 -1.13653,0.93271 -0.40946,0.27359 -0.84167,0.50461 -1.29664,0.69309 -0.45497,0.18844 -0.92395,0.33072 -1.40695,0.42682 -0.48299,0.096 -0.97071,0.14407 -1.46317,0.1441 -0.492462,-3e-5 -0.980194,-0.0481 -1.463188,-0.14413 -0.482994,-0.0961 -0.951981,-0.23835 -1.406952,-0.42679 -0.454971,-0.18848 -0.887192,-0.4195 -1.296654,-0.69309 -0.409462,-0.27359 -0.788299,-0.58447 -1.136513,-0.93271 -0.348228,-0.34823 -0.659133,-0.72708 -0.932724,-1.13653 -0.273597,-0.40952 -0.504623,-0.84174 -0.693077,-1.29669 -0.188453,-0.45499 -0.330719,-0.92398 -0.426788,-1.40696 -0.09608,-0.48297 -0.144112,-0.97067 -0.144104,-1.4631 -8e-6,-0.49249 0.04803,-0.98026 0.144096,-1.46326 0.09608,-0.483 0.238343,-0.95196 0.426796,-1.40695 0.188454,-0.45499 0.41948,-0.88721 0.69307,-1.29666 0.273598,-0.40945 0.584503,-0.78827 0.932731,-1.13647 0.348214,-0.34824 0.727051,-0.65912 1.136513,-0.93271 0.40947,-0.27362 0.84169,-0.50464 1.296662,-0.69309 0.454963,-0.18844 0.92395,-0.33072 1.406944,-0.42676 C 99.019806,473.04803 99.507538,473 100,473 c 0.49246,0 0.98018,0.048 1.46317,0.14407 0.483,0.0961 0.95198,0.23832 1.40695,0.42676 0.45497,0.18845 0.88718,0.41947 1.29664,0.69309 0.40947,0.27359 0.78831,0.5845 1.13653,0.93274 0.34822,0.3482 0.65912,0.72702 0.93272,1.13647 0.2736,0.40945 0.50462,0.84171 0.69308,1.29669 0.18845,0.45499 0.33071,0.92395 0.42679,1.40695 0.0961,0.48301 0.14412,0.97074 0.14412,1.46323 z&quot;
             style=&quot;fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
             id=&quot;path68&quot; /&gt;&lt;path
             d=&quot;m 100,488 v 25 m 0,-20 H 85 m 15,0 h 15 m -15,20 -15,20 m 15,-20 15,20&quot;
             style=&quot;fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
             id=&quot;path70&quot; /&gt;&lt;/g&gt;&lt;g
           id=&quot;g72&quot;
           transform=&quot;scale(2.9965751)&quot;&gt;&lt;text
             transform=&quot;translate(84.5,555)&quot;
             style=&quot;font-variant:normal;font-weight:normal;font-size:16px;font-family:&apos;Microsoft YaHei&apos;;-inkscape-font-specification:MicrosoftYaHei;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
             id=&quot;text76&quot;&gt;&lt;tspan
               x=&quot;0 16&quot;
               y=&quot;0&quot;
               sodipodi:role=&quot;line&quot;
               id=&quot;tspan74&quot;&gt;用户&lt;/tspan&gt;&lt;/text&gt;&lt;/g&gt;&lt;g
           id=&quot;g78&quot;
           transform=&quot;matrix(2.9965751,0,0,2.9965751,1.4982876,1.4982876)&quot;&gt;&lt;path
             d=&quot;M 215,338 V 234 h 72.13&quot;
             style=&quot;fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
             id=&quot;path80&quot; /&gt;&lt;path
             d=&quot;m 293.88,234 -9,4.5 2.25,-4.5 -2.25,-4.5 z&quot;
             style=&quot;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
             id=&quot;path82&quot; /&gt;&lt;path
             d=&quot;m 293.88,234 -9,4.5 2.25,-4.5 -2.25,-4.5 z&quot;
             style=&quot;fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
             id=&quot;path84&quot; /&gt;&lt;/g&gt;&lt;g
           id=&quot;g86&quot;
           transform=&quot;scale(2.9965751)&quot;&gt;&lt;path
             d=&quot;m 180,239 h 72 v 15 h -72 z&quot;
             style=&quot;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
             id=&quot;path88&quot; /&gt;&lt;text
             transform=&quot;translate(179.5,250)&quot;
             style=&quot;font-variant:normal;font-weight:normal;font-size:12px;font-family:&apos;Microsoft YaHei&apos;;-inkscape-font-specification:MicrosoftYaHei;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
             id=&quot;text92&quot;&gt;&lt;tspan
               x=&quot;0 12 24 36 48 60&quot;
               y=&quot;0&quot;
               sodipodi:role=&quot;line&quot;
               id=&quot;tspan90&quot;&gt;部署智能合约&lt;/tspan&gt;&lt;/text&gt;&lt;/g&gt;&lt;g
           id=&quot;g94&quot;
           transform=&quot;matrix(2.9965751,0,0,2.9965751,1.4982876,1.4982876)&quot;&gt;&lt;path
             d=&quot;m 175,338 h 50 l 30,30 v 70 h -80 z&quot;
             style=&quot;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
             id=&quot;path96&quot; /&gt;&lt;path
             d=&quot;m 175,338 h 50 l 30,30 v 70 h -80 z&quot;
             style=&quot;fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
             id=&quot;path98&quot; /&gt;&lt;path
             d=&quot;m 225,338 v 30 h 30 z&quot;
             style=&quot;fill:#000000;fill-opacity:0.051;fill-rule:nonzero;stroke:none&quot;
             id=&quot;path100&quot; /&gt;&lt;path
             d=&quot;m 225,338 v 30 h 30&quot;
             style=&quot;fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
             id=&quot;path102&quot; /&gt;&lt;/g&gt;&lt;g
           id=&quot;g104&quot;
           transform=&quot;scale(2.9965751)&quot;&gt;&lt;text
             transform=&quot;translate(183.875,394)&quot;
             style=&quot;font-variant:normal;font-weight:normal;font-size:16px;font-family:Arial;-inkscape-font-specification:ArialMT;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
             id=&quot;text108&quot;&gt;&lt;tspan
               x=&quot;0 10.671875 19.570312&quot;
               y=&quot;0&quot;
               sodipodi:role=&quot;line&quot;
               id=&quot;tspan106&quot;&gt;SLA&lt;/tspan&gt;&lt;/text&gt;&lt;text
             transform=&quot;translate(214.11719,394)&quot;
             style=&quot;font-variant:normal;font-weight:normal;font-size:16px;font-family:&apos;Microsoft YaHei&apos;;-inkscape-font-specification:MicrosoftYaHei;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
             id=&quot;text112&quot;&gt;&lt;tspan
               x=&quot;0 16&quot;
               y=&quot;0&quot;
               sodipodi:role=&quot;line&quot;
               id=&quot;tspan110&quot;&gt;协议&lt;/tspan&gt;&lt;/text&gt;&lt;/g&gt;&lt;g
           id=&quot;g114&quot;
           transform=&quot;matrix(2.9965751,0,0,2.9965751,1.4982876,1.4982876)&quot;&gt;&lt;path
             d=&quot;m 355,264 c 0,0 0,31.33334 0,94&quot;
             style=&quot;fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
             id=&quot;path116&quot; /&gt;&lt;path
             d=&quot;m 415,262 c 0,0 10,4.66666 30,14&quot;
             style=&quot;fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
             id=&quot;path118&quot; /&gt;&lt;path
             d=&quot;m 295,204 h 120 v 60 H 295 Z&quot;
             style=&quot;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
             id=&quot;path120&quot; /&gt;&lt;path
             d=&quot;m 295,204 h 120 v 60 H 295 Z&quot;
             style=&quot;fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
             id=&quot;path122&quot; /&gt;&lt;/g&gt;&lt;g
           id=&quot;g124&quot;
           transform=&quot;scale(2.9965751)&quot;&gt;&lt;text
             transform=&quot;translate(315,240)&quot;
             style=&quot;font-variant:normal;font-weight:normal;font-size:16px;font-family:&apos;Microsoft YaHei&apos;;-inkscape-font-specification:MicrosoftYaHei;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
             id=&quot;text128&quot;&gt;&lt;tspan
               x=&quot;0 16 32 48 64&quot;
               y=&quot;0&quot;
               sodipodi:role=&quot;line&quot;
               id=&quot;tspan126&quot;&gt;区块链节点&lt;/tspan&gt;&lt;/text&gt;&lt;/g&gt;&lt;g
           id=&quot;g130&quot;
           transform=&quot;matrix(2.9965751,0,0,2.9965751,1.4982876,1.4982876)&quot;&gt;&lt;path
             d=&quot;m 355,418 c 0,0 0,32 0,96&quot;
             style=&quot;fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
             id=&quot;path132&quot; /&gt;&lt;path
             d=&quot;m 408.57001,358 c 0,0 14.28665,-8 42.85998,-24&quot;
             style=&quot;fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
             id=&quot;path134&quot; /&gt;&lt;path
             d=&quot;m 415,417.79999 c 0,0 11,5.46667 33,16.40002&quot;
             style=&quot;fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
             id=&quot;path136&quot; /&gt;&lt;path
             d=&quot;m 295,358 h 120 v 60 H 295 Z&quot;
             style=&quot;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
             id=&quot;path138&quot; /&gt;&lt;path
             d=&quot;m 295,358 h 120 v 60 H 295 Z&quot;
             style=&quot;fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
             id=&quot;path140&quot; /&gt;&lt;/g&gt;&lt;g
           id=&quot;g142&quot;
           transform=&quot;scale(2.9965751)&quot;&gt;&lt;text
             transform=&quot;translate(315,394)&quot;
             style=&quot;font-variant:normal;font-weight:normal;font-size:16px;font-family:&apos;Microsoft YaHei&apos;;-inkscape-font-specification:MicrosoftYaHei;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
             id=&quot;text146&quot;&gt;&lt;tspan
               x=&quot;0 16 32 48 64&quot;
               y=&quot;0&quot;
               sodipodi:role=&quot;line&quot;
               id=&quot;tspan144&quot;&gt;区块链节点&lt;/tspan&gt;&lt;/text&gt;&lt;/g&gt;&lt;g
           id=&quot;g148&quot;
           transform=&quot;matrix(2.9965751,0,0,2.9965751,1.4982876,1.4982876)&quot;&gt;&lt;path
             d=&quot;m 412.38,514 c 0,0 12.75,-6.66666 38.25,-20&quot;
             style=&quot;fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
             id=&quot;path150&quot; /&gt;&lt;path
             d=&quot;m 295,514 h 120 v 60 H 295 Z&quot;
             style=&quot;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
             id=&quot;path152&quot; /&gt;&lt;path
             d=&quot;m 295,514 h 120 v 60 H 295 Z&quot;
             style=&quot;fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
             id=&quot;path154&quot; /&gt;&lt;/g&gt;&lt;g
           id=&quot;g156&quot;
           transform=&quot;scale(2.9965751)&quot;&gt;&lt;text
             transform=&quot;translate(315,550)&quot;
             style=&quot;font-variant:normal;font-weight:normal;font-size:16px;font-family:&apos;Microsoft YaHei&apos;;-inkscape-font-specification:MicrosoftYaHei;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
             id=&quot;text160&quot;&gt;&lt;tspan
               x=&quot;0 16 32 48 64&quot;
               y=&quot;0&quot;
               sodipodi:role=&quot;line&quot;
               id=&quot;tspan158&quot;&gt;区块链节点&lt;/tspan&gt;&lt;/text&gt;&lt;/g&gt;&lt;g
           id=&quot;g162&quot;
           transform=&quot;matrix(2.9965751,0,0,2.9965751,1.4982876,1.4982876)&quot;&gt;&lt;path
             d=&quot;m 505.56,334 c 0,0 0.62668,33.33331 1.88,100&quot;
             style=&quot;fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
             id=&quot;path164&quot; /&gt;&lt;path
             d=&quot;m 486.25,334 c 0,0 -37.5,60 -112.5,180&quot;
             style=&quot;fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
             id=&quot;path166&quot; /&gt;&lt;path
             d=&quot;m 445,274 h 120 v 60 H 445 Z&quot;
             style=&quot;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
             id=&quot;path168&quot; /&gt;&lt;path
             d=&quot;m 445,274 h 120 v 60 H 445 Z&quot;
             style=&quot;fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
             id=&quot;path170&quot; /&gt;&lt;/g&gt;&lt;g
           id=&quot;g172&quot;
           transform=&quot;scale(2.9965751)&quot;&gt;&lt;text
             transform=&quot;translate(465,310)&quot;
             style=&quot;font-variant:normal;font-weight:normal;font-size:16px;font-family:&apos;Microsoft YaHei&apos;;-inkscape-font-specification:MicrosoftYaHei;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
             id=&quot;text176&quot;&gt;&lt;tspan
               x=&quot;0 16 32 48 64&quot;
               y=&quot;0&quot;
               sodipodi:role=&quot;line&quot;
               id=&quot;tspan174&quot;&gt;区块链节点&lt;/tspan&gt;&lt;/text&gt;&lt;/g&gt;&lt;g
           id=&quot;g178&quot;
           transform=&quot;matrix(2.9965751,0,0,2.9965751,1.4982876,1.4982876)&quot;&gt;&lt;path
             d=&quot;m 488.04001,434 c 0,0 -37.69333,-56.66666 -113.08002,-170&quot;
             style=&quot;fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
             id=&quot;path180&quot; /&gt;&lt;path
             d=&quot;m 448,434 h 120 v 60 H 448 Z&quot;
             style=&quot;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
             id=&quot;path182&quot; /&gt;&lt;path
             d=&quot;m 448,434 h 120 v 60 H 448 Z&quot;
             style=&quot;fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
             id=&quot;path184&quot; /&gt;&lt;/g&gt;&lt;g
           id=&quot;g186&quot;
           transform=&quot;scale(2.9965751)&quot;&gt;&lt;text
             transform=&quot;translate(468,470)&quot;
             style=&quot;font-variant:normal;font-weight:normal;font-size:16px;font-family:&apos;Microsoft YaHei&apos;;-inkscape-font-specification:MicrosoftYaHei;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
             id=&quot;text190&quot;&gt;&lt;tspan
               x=&quot;0 16 32 48 64&quot;
               y=&quot;0&quot;
               sodipodi:role=&quot;line&quot;
               id=&quot;tspan188&quot;&gt;区块链节点&lt;/tspan&gt;&lt;/text&gt;&lt;/g&gt;&lt;g
           id=&quot;g192&quot;
           transform=&quot;matrix(2.9965751,0,0,2.9965751,1.4982876,1.4982876)&quot;&gt;&lt;path
             d=&quot;M 70,184 C 46,184 40,204 59.200001,208 40,216.8 61.599998,236 77.199997,228 88,244 124,244 136,228 c 24,0 24,-16 9,-24 15,-16 -9,-32 -30,-24 -15,-12 -39,-12 -45,4 z&quot;
             style=&quot;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
             id=&quot;path194&quot; /&gt;&lt;path
             d=&quot;M 70,184 C 46,184 40,204 59.200001,208 40,216.8 61.599998,236 77.199997,228 88,244 124,244 136,228 c 24,0 24,-16 9,-24 15,-16 -9,-32 -30,-24 -15,-12 -39,-12 -45,4 z&quot;
             style=&quot;fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
             id=&quot;path196&quot; /&gt;&lt;/g&gt;&lt;g
           id=&quot;g198&quot;
           transform=&quot;scale(2.9965751)&quot;&gt;&lt;text
             transform=&quot;translate(76,210)&quot;
             style=&quot;font-variant:normal;font-weight:normal;font-size:16px;font-family:&apos;Microsoft YaHei&apos;;-inkscape-font-specification:MicrosoftYaHei;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
             id=&quot;text202&quot;&gt;&lt;tspan
               x=&quot;0 16 32&quot;
               y=&quot;0&quot;
               sodipodi:role=&quot;line&quot;
               id=&quot;tspan200&quot;&gt;云服务&lt;/tspan&gt;&lt;/text&gt;&lt;/g&gt;&lt;g
           id=&quot;g204&quot;
           transform=&quot;matrix(2.9965751,0,0,2.9965751,1.4982876,1.4982876)&quot;&gt;&lt;path
             d=&quot;M 35,634 H 15 V 196 h 25.529999&quot;
             style=&quot;fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
             id=&quot;path206&quot; /&gt;&lt;path
             d=&quot;m 47.279999,196 -9,4.5 2.25,-4.5 -2.25,-4.5 z&quot;
             style=&quot;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
             id=&quot;path208&quot; /&gt;&lt;path
             d=&quot;m 47.279999,196 -9,4.5 2.25,-4.5 -2.25,-4.5 z&quot;
             style=&quot;fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
             id=&quot;path210&quot; /&gt;&lt;path
             d=&quot;M 155,634 H 355 V 581.87&quot;
             style=&quot;fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
             id=&quot;path212&quot; /&gt;&lt;path
             d=&quot;m 355,575.12 4.5,9 -4.5,-2.25 -4.5,2.25 z&quot;
             style=&quot;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
             id=&quot;path214&quot; /&gt;&lt;path
             d=&quot;m 355,575.12 4.5,9 -4.5,-2.25 -4.5,2.25 z&quot;
             style=&quot;fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
             id=&quot;path216&quot; /&gt;&lt;/g&gt;&lt;g
           id=&quot;g218&quot;
           transform=&quot;scale(2.9965751)&quot;&gt;&lt;path
             d=&quot;m 250,627 h 72 v 15 h -72 z&quot;
             style=&quot;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
             id=&quot;path220&quot; /&gt;&lt;text
             transform=&quot;translate(249.5,638)&quot;
             style=&quot;font-variant:normal;font-weight:normal;font-size:12px;font-family:&apos;Microsoft YaHei&apos;;-inkscape-font-specification:MicrosoftYaHei;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
             id=&quot;text224&quot;&gt;&lt;tspan
               x=&quot;0 12 24 36 48 60&quot;
               y=&quot;0&quot;
               sodipodi:role=&quot;line&quot;
               id=&quot;tspan222&quot;&gt;调用智能合约&lt;/tspan&gt;&lt;/text&gt;&lt;/g&gt;&lt;g
           id=&quot;g226&quot;
           transform=&quot;matrix(2.9965751,0,0,2.9965751,1.4982876,1.4982876)&quot;&gt;&lt;path
             d=&quot;m 35,604 h 120 v 60 H 35 Z&quot;
             style=&quot;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
             id=&quot;path228&quot; /&gt;&lt;path
             d=&quot;m 35,604 h 120 v 60 H 35 Z&quot;
             style=&quot;fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
             id=&quot;path230&quot; /&gt;&lt;/g&gt;&lt;g
           id=&quot;g232&quot;
           transform=&quot;scale(2.9965751)&quot;&gt;&lt;text
             transform=&quot;translate(63.875,630)&quot;
             style=&quot;font-variant:normal;font-weight:normal;font-size:16px;font-family:Arial;-inkscape-font-specification:ArialMT;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
             id=&quot;text236&quot;&gt;&lt;tspan
               x=&quot;0 10.671875 19.570312&quot;
               y=&quot;0&quot;
               sodipodi:role=&quot;line&quot;
               id=&quot;tspan234&quot;&gt;SLA&lt;/tspan&gt;&lt;/text&gt;&lt;text
             transform=&quot;translate(94.117188,630)&quot;
             style=&quot;font-variant:normal;font-weight:normal;font-size:16px;font-family:&apos;Microsoft YaHei&apos;;-inkscape-font-specification:MicrosoftYaHei;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
             id=&quot;text240&quot;&gt;&lt;tspan
               x=&quot;0 16&quot;
               y=&quot;0&quot;
               sodipodi:role=&quot;line&quot;
               id=&quot;tspan238&quot;&gt;监控&lt;/tspan&gt;&lt;/text&gt;&lt;text
             transform=&quot;translate(55,650)&quot;
             style=&quot;font-variant:normal;font-weight:normal;font-size:16px;font-family:&apos;Microsoft YaHei&apos;;-inkscape-font-specification:MicrosoftYaHei;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
             id=&quot;text244&quot;&gt;&lt;tspan
               x=&quot;0 16 32 48 64&quot;
               y=&quot;0&quot;
               sodipodi:role=&quot;line&quot;
               id=&quot;tspan242&quot;&gt;物联网设备&lt;/tspan&gt;&lt;/text&gt;&lt;/g&gt;&lt;/g&gt;&lt;/g&gt;&lt;/g&gt;&lt;/svg&gt;
&lt;/div&gt;
&lt;/p&gt;
&lt;/div&gt;

&lt;p&gt;
云服务商和用户签订 SLA 协议，并部署到联盟区块链 Hyperledger Fabric 上。物联网设备通过 MQTT Broker 发送消息的时候，监控消息是否发送成功，并在区块链账本记录有效请求和失败请求数据。等到核算日期，计算失败率。如果消息发送失败率出发 SLA 惩罚条件，触发智能合约执行。
&lt;/p&gt;

&lt;p&gt;
但是区块链的执行速度还不能满足物联网大量数据通信的要求，论文作者也提出，下一工作方向是调研可行的改进方法。
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Use org2jekyll to publish my blog</title>
   <link href="http://kimi.im/2023-02-19-adopt-org2jekyll"/>
   <updated>2023-02-19T00:00:00+00:00</updated>
   <id>http://kimi.im/adopt-org2jekyll</id>
   <content type="html">&lt;div id=&quot;table-of-contents&quot; role=&quot;doc-toc&quot;&gt;
&lt;h2&gt;Table of Contents&lt;/h2&gt;
&lt;div id=&quot;text-table-of-contents&quot; role=&quot;doc-toc&quot;&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;#org014b915&quot;&gt;1. Publish settings&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#org4daf0a3&quot;&gt;2. Method to create draft&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#org00b63c5&quot;&gt;3. Publish&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#orgea2de35&quot;&gt;4. Future plan&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;
I&amp;rsquo;ve already created some org jekyll function to publish blogs for
github jekyll. But there is a small issue that the org file should
contains the &lt;code&gt;export_html&lt;/code&gt; drawer with jekyll YAML metadata.
&lt;/p&gt;

&lt;p&gt;
The emacs extension &lt;a href=&quot;https://github.com/ardumont/org2jekyll&quot;&gt;org2jekyll&lt;/a&gt; already supports extract metadata from
orgmode files. So I reuse this extension with some modifications.
&lt;/p&gt;

&lt;div id=&quot;outline-container-org014b915&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;org014b915&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;1.&lt;/span&gt; Publish settings&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-1&quot;&gt;
&lt;p&gt;
My orgmode files are located in &lt;code&gt;&amp;lt;jekyll-folder&amp;gt;/_notes/_posts&lt;/code&gt; and the
exported HTML files are in &lt;code&gt;&amp;lt;jekyll-folder&amp;gt;/_posts&lt;/code&gt;:
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-emacs-lisp&quot;&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;custom-set-variables &apos;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;org2jekyll-blog-author &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;kimim&quot;&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;
                      &apos;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;org2jekyll-source-directory &lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;expand-file-name &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;~/kimi.im/_notes/_posts&quot;&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;
                      &apos;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;org2jekyll-jekyll-directory &lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;expand-file-name &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;~/kimi.im/_posts&quot;&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;
                      &apos;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;org2jekyll-jekyll-drafts-dir &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;&quot;&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;
                      &apos;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;org2jekyll-jekyll-posts-dir &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;&quot;&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;
                      &apos;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;org-publish-project-alist
                        `&lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #709870;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;post&quot;&lt;/span&gt;  &lt;span style=&quot;color: #3F7F5F;&quot;&gt;;; &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;dynamic pages like blog articles&lt;/span&gt;
                           &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;:base-directory&lt;/span&gt; ,&lt;span style=&quot;color: #907373;&quot;&gt;(&lt;/span&gt;org2jekyll-input-directory&lt;span style=&quot;color: #907373;&quot;&gt;)&lt;/span&gt;
                           &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;:base-extension&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;org&lt;/span&gt;&lt;span style=&quot;color: #7F0055;&quot;&gt;\\&lt;/span&gt;&lt;span style=&quot;color: #7F0055;&quot;&gt;|&lt;/span&gt;&lt;span style=&quot;color: #2A00FF;&quot;&gt;txt&quot;&lt;/span&gt;
                           &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;:publishing-directory&lt;/span&gt; ,&lt;span style=&quot;color: #907373;&quot;&gt;(&lt;/span&gt;org2jekyll-output-directory&lt;span style=&quot;color: #907373;&quot;&gt;)&lt;/span&gt;
                           &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;:publishing-function&lt;/span&gt; org-html-publish-to-html
                           &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;:headline-levels&lt;/span&gt; 4
                           &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;:html-head&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;&amp;lt;link rel=\&quot;stylesheet\&quot; href=\&quot;./css/style.css\&quot; type=\&quot;text/css\&quot;/&amp;gt;&quot;&lt;/span&gt;
                           &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;:html-preamble&lt;/span&gt; t
                           &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;:recursive&lt;/span&gt; t
                           &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;:make-index&lt;/span&gt; t
                           &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;:html-extension&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;html&quot;&lt;/span&gt;
                           &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;:body-only&lt;/span&gt; t&lt;span style=&quot;color: #709870;&quot;&gt;)&lt;/span&gt;
                          &lt;span style=&quot;color: #709870;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;images&quot;&lt;/span&gt;
                           &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;:base-directory&lt;/span&gt; ,&lt;span style=&quot;color: #907373;&quot;&gt;(&lt;/span&gt;org2jekyll-input-directory &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;img&quot;&lt;/span&gt;&lt;span style=&quot;color: #907373;&quot;&gt;)&lt;/span&gt;
                           &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;:base-extension&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;jpg&lt;/span&gt;&lt;span style=&quot;color: #7F0055;&quot;&gt;\\&lt;/span&gt;&lt;span style=&quot;color: #7F0055;&quot;&gt;|&lt;/span&gt;&lt;span style=&quot;color: #2A00FF;&quot;&gt;gif&lt;/span&gt;&lt;span style=&quot;color: #7F0055;&quot;&gt;\\&lt;/span&gt;&lt;span style=&quot;color: #7F0055;&quot;&gt;|&lt;/span&gt;&lt;span style=&quot;color: #2A00FF;&quot;&gt;png&quot;&lt;/span&gt;
                           &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;:publishing-directory&lt;/span&gt; ,&lt;span style=&quot;color: #907373;&quot;&gt;(&lt;/span&gt;org2jekyll-output-directory &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;img&quot;&lt;/span&gt;&lt;span style=&quot;color: #907373;&quot;&gt;)&lt;/span&gt;
                           &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;:publishing-function&lt;/span&gt; org-publish-attachment
                           &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;:recursive&lt;/span&gt; t&lt;span style=&quot;color: #709870;&quot;&gt;)&lt;/span&gt;
                          &lt;span style=&quot;color: #709870;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;js&quot;&lt;/span&gt;
                           &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;:base-directory&lt;/span&gt; ,&lt;span style=&quot;color: #907373;&quot;&gt;(&lt;/span&gt;org2jekyll-input-directory &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;js&quot;&lt;/span&gt;&lt;span style=&quot;color: #907373;&quot;&gt;)&lt;/span&gt;
                           &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;:base-extension&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;js&quot;&lt;/span&gt;
                           &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;:publishing-directory&lt;/span&gt; ,&lt;span style=&quot;color: #907373;&quot;&gt;(&lt;/span&gt;org2jekyll-output-directory &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;js&quot;&lt;/span&gt;&lt;span style=&quot;color: #907373;&quot;&gt;)&lt;/span&gt;
                           &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;:publishing-function&lt;/span&gt; org-publish-attachment
                           &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;:recursive&lt;/span&gt; t&lt;span style=&quot;color: #709870;&quot;&gt;)&lt;/span&gt;
                          &lt;span style=&quot;color: #709870;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;css&quot;&lt;/span&gt;
                           &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;:base-directory&lt;/span&gt; ,&lt;span style=&quot;color: #907373;&quot;&gt;(&lt;/span&gt;org2jekyll-input-directory &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;css&quot;&lt;/span&gt;&lt;span style=&quot;color: #907373;&quot;&gt;)&lt;/span&gt;
                           &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;:base-extension&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;css&lt;/span&gt;&lt;span style=&quot;color: #7F0055;&quot;&gt;\\&lt;/span&gt;&lt;span style=&quot;color: #7F0055;&quot;&gt;|&lt;/span&gt;&lt;span style=&quot;color: #2A00FF;&quot;&gt;el&quot;&lt;/span&gt;
                           &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;:publishing-directory&lt;/span&gt; ,&lt;span style=&quot;color: #907373;&quot;&gt;(&lt;/span&gt;org2jekyll-output-directory &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;css&quot;&lt;/span&gt;&lt;span style=&quot;color: #907373;&quot;&gt;)&lt;/span&gt;
                           &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;:publishing-function&lt;/span&gt; org-publish-attachment
                           &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;:recursive&lt;/span&gt; t&lt;span style=&quot;color: #709870;&quot;&gt;)&lt;/span&gt;
                          &lt;span style=&quot;color: #709870;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;web&quot;&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;:components&lt;/span&gt; &lt;span style=&quot;color: #907373;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;images&quot;&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;js&quot;&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;css&quot;&lt;/span&gt;&lt;span style=&quot;color: #907373;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #709870;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-org4daf0a3&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;org4daf0a3&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;2.&lt;/span&gt; Method to create draft&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-2&quot;&gt;
&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-emacs-lisp&quot;&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;;; &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;simplify template&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;setq&lt;/span&gt; org2jekyll-default-template-entries
  &apos;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;layout&quot;&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt;
    &lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;title&quot;&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt;
    &lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;tags&quot;&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt;
    &lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;categories&quot;&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;

&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;defconst&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;org2jekyll-required-org-header-alist&lt;/span&gt; &apos;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;:title&lt;/span&gt;       . &apos;required&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt;
                                                 &lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;:categories&lt;/span&gt;  . &apos;required&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt;
                                                 &lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;:tags&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt;
                                                 &lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;:layout&lt;/span&gt;      . &apos;required&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;

&lt;span style=&quot;color: #3F7F5F;&quot;&gt;;; &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;read filename from prompt&lt;/span&gt;
&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;defun&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;org2jekyll--read-filename&lt;/span&gt; &lt;span style=&quot;color: #909183;&quot;&gt;()&lt;/span&gt;
  &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;Read the file name.&quot;&lt;/span&gt;
  &lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;read-string &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;Filename: &quot;&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;

&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;defun&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;org2jekyll--init-buffer-metadata&lt;/span&gt; &lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;&amp;amp;optional&lt;/span&gt; ignore-plist&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt;
  &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;Return an plist holding buffer metadata information collected from the user.&lt;/span&gt;
&lt;span style=&quot;color: #2A00FF;&quot;&gt;Any non-nil property in IGNORE-PLIST will not be collected from the user, and&lt;/span&gt;
&lt;span style=&quot;color: #2A00FF;&quot;&gt;will instead have its value omitted in the returned plist.&quot;&lt;/span&gt;
  &lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;-concat &lt;span style=&quot;color: #709870;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;unless&lt;/span&gt; &lt;span style=&quot;color: #907373;&quot;&gt;(&lt;/span&gt;plist-get ignore-plist &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;:author&lt;/span&gt;&lt;span style=&quot;color: #907373;&quot;&gt;)&lt;/span&gt;
         &lt;span style=&quot;color: #907373;&quot;&gt;(&lt;/span&gt;list &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;:author&lt;/span&gt; org2jekyll-blog-author&lt;span style=&quot;color: #907373;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #709870;&quot;&gt;)&lt;/span&gt;
       &lt;span style=&quot;color: #3F7F5F;&quot;&gt;;; &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;(unless (plist-get ignore-plist :date)&lt;/span&gt;
       &lt;span style=&quot;color: #3F7F5F;&quot;&gt;;;   &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;(list :date (org2jekyll-now)))&lt;/span&gt;
       &lt;span style=&quot;color: #709870;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;unless&lt;/span&gt; &lt;span style=&quot;color: #907373;&quot;&gt;(&lt;/span&gt;plist-get ignore-plist &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;:layout&lt;/span&gt;&lt;span style=&quot;color: #907373;&quot;&gt;)&lt;/span&gt;
         &lt;span style=&quot;color: #907373;&quot;&gt;(&lt;/span&gt;list &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;:layout&lt;/span&gt; &lt;span style=&quot;color: #6276ba;&quot;&gt;(&lt;/span&gt;org2jekyll--input-read &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;Layout: &quot;&lt;/span&gt; org2jekyll-jekyll-layouts&lt;span style=&quot;color: #6276ba;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #907373;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #709870;&quot;&gt;)&lt;/span&gt;
       &lt;span style=&quot;color: #709870;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;unless&lt;/span&gt; &lt;span style=&quot;color: #907373;&quot;&gt;(&lt;/span&gt;plist-get ignore-plist &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;:filename&lt;/span&gt;&lt;span style=&quot;color: #907373;&quot;&gt;)&lt;/span&gt;
         &lt;span style=&quot;color: #907373;&quot;&gt;(&lt;/span&gt;list &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;:filename&lt;/span&gt; &lt;span style=&quot;color: #6276ba;&quot;&gt;(&lt;/span&gt;org2jekyll--read-filename&lt;span style=&quot;color: #6276ba;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #907373;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #709870;&quot;&gt;)&lt;/span&gt;
       &lt;span style=&quot;color: #709870;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;unless&lt;/span&gt; &lt;span style=&quot;color: #907373;&quot;&gt;(&lt;/span&gt;plist-get ignore-plist &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;:title&lt;/span&gt;&lt;span style=&quot;color: #907373;&quot;&gt;)&lt;/span&gt;
         &lt;span style=&quot;color: #907373;&quot;&gt;(&lt;/span&gt;list &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;:title&lt;/span&gt; &lt;span style=&quot;color: #6276ba;&quot;&gt;(&lt;/span&gt;org2jekyll--read-title&lt;span style=&quot;color: #6276ba;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #907373;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #709870;&quot;&gt;)&lt;/span&gt;
       &lt;span style=&quot;color: #3F7F5F;&quot;&gt;;; &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;(unless (plist-get ignore-plist :description)&lt;/span&gt;
       &lt;span style=&quot;color: #3F7F5F;&quot;&gt;;;   &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;(list :description (org2jekyll--read-description)))&lt;/span&gt;
       &lt;span style=&quot;color: #709870;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;unless&lt;/span&gt; &lt;span style=&quot;color: #907373;&quot;&gt;(&lt;/span&gt;plist-get ignore-plist &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;:tags&lt;/span&gt;&lt;span style=&quot;color: #907373;&quot;&gt;)&lt;/span&gt;
         &lt;span style=&quot;color: #907373;&quot;&gt;(&lt;/span&gt;list &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;:tags&lt;/span&gt; &lt;span style=&quot;color: #6276ba;&quot;&gt;(&lt;/span&gt;org2jekyll--read-tags&lt;span style=&quot;color: #6276ba;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #907373;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #709870;&quot;&gt;)&lt;/span&gt;
       &lt;span style=&quot;color: #709870;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;unless&lt;/span&gt; &lt;span style=&quot;color: #907373;&quot;&gt;(&lt;/span&gt;plist-get ignore-plist &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;:categories&lt;/span&gt;&lt;span style=&quot;color: #907373;&quot;&gt;)&lt;/span&gt;
         &lt;span style=&quot;color: #907373;&quot;&gt;(&lt;/span&gt;list &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;:categories&lt;/span&gt; &lt;span style=&quot;color: #6276ba;&quot;&gt;(&lt;/span&gt;org2jekyll--read-categories&lt;span style=&quot;color: #6276ba;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #907373;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #709870;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;

&lt;span style=&quot;color: #3F7F5F;&quot;&gt;;; &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;concat category, date string and filename&lt;/span&gt;
&lt;span style=&quot;color: #3F7F5F;&quot;&gt;;; &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;for example: _notes/_posts/language/2023-02-19-filename.org&lt;/span&gt;
&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;defun&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;org2jekyll-create-draft&lt;/span&gt; &lt;span style=&quot;color: #909183;&quot;&gt;()&lt;/span&gt;
  &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;Prompt the user for org metadata and then create a new Jekyll blog post.&lt;/span&gt;
&lt;span style=&quot;color: #2A00FF;&quot;&gt;The specified title will be used as the name of the file.&quot;&lt;/span&gt;
  &lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;interactive&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt;
  &lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;let*&lt;/span&gt; &lt;span style=&quot;color: #709870;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #907373;&quot;&gt;(&lt;/span&gt;metadata &lt;span style=&quot;color: #6276ba;&quot;&gt;(&lt;/span&gt;org2jekyll--init-buffer-metadata&lt;span style=&quot;color: #6276ba;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #907373;&quot;&gt;)&lt;/span&gt;
     &lt;span style=&quot;color: #907373;&quot;&gt;(&lt;/span&gt;metadata-alist &lt;span style=&quot;color: #6276ba;&quot;&gt;(&lt;/span&gt;org2jekyll--plist-to-alist metadata&lt;span style=&quot;color: #6276ba;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #907373;&quot;&gt;)&lt;/span&gt;
     &lt;span style=&quot;color: #907373;&quot;&gt;(&lt;/span&gt;category &lt;span style=&quot;color: #6276ba;&quot;&gt;(&lt;/span&gt;plist-get metadata &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;:categories&lt;/span&gt;&lt;span style=&quot;color: #6276ba;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #907373;&quot;&gt;)&lt;/span&gt;
     &lt;span style=&quot;color: #907373;&quot;&gt;(&lt;/span&gt;filename &lt;span style=&quot;color: #6276ba;&quot;&gt;(&lt;/span&gt;plist-get metadata &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;:filename&lt;/span&gt;&lt;span style=&quot;color: #6276ba;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #907373;&quot;&gt;)&lt;/span&gt;
     &lt;span style=&quot;color: #907373;&quot;&gt;(&lt;/span&gt;draft-file  &lt;span style=&quot;color: #6276ba;&quot;&gt;(&lt;/span&gt;org2jekyll--draft-filename
                   &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;~/kimim/_draft/&quot;&lt;/span&gt;
                   filename&lt;span style=&quot;color: #6276ba;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #907373;&quot;&gt;)&lt;/span&gt;
     &lt;span style=&quot;color: #907373;&quot;&gt;(&lt;/span&gt;add-to-file-options &lt;span style=&quot;color: #6276ba;&quot;&gt;(&lt;/span&gt;org2jekyll--get-template-entries metadata-alist&lt;span style=&quot;color: #6276ba;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #907373;&quot;&gt;)&lt;/span&gt;
     &lt;span style=&quot;color: #907373;&quot;&gt;(&lt;/span&gt;add-to-file-tuples &lt;span style=&quot;color: #6276ba;&quot;&gt;(&lt;/span&gt;org2jekyll--alist-to-tuples add-to-file-options&lt;span style=&quot;color: #6276ba;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #907373;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #709870;&quot;&gt;)&lt;/span&gt;
    &lt;span style=&quot;color: #709870;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;unless&lt;/span&gt; &lt;span style=&quot;color: #907373;&quot;&gt;(&lt;/span&gt;file-exists-p draft-file&lt;span style=&quot;color: #907373;&quot;&gt;)&lt;/span&gt;
      &lt;span style=&quot;color: #907373;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;with-temp-file&lt;/span&gt; draft-file
        &lt;span style=&quot;color: #6276ba;&quot;&gt;(&lt;/span&gt;insert &lt;span style=&quot;color: #858580;&quot;&gt;(&lt;/span&gt;org2jekyll-default-headers-template add-to-file-tuples&lt;span style=&quot;color: #858580;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;\n\n&quot;&lt;/span&gt;&lt;span style=&quot;color: #6276ba;&quot;&gt;)&lt;/span&gt;
        &lt;span style=&quot;color: #6276ba;&quot;&gt;(&lt;/span&gt;insert &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;* &quot;&lt;/span&gt;&lt;span style=&quot;color: #6276ba;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #907373;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #709870;&quot;&gt;)&lt;/span&gt;
    &lt;span style=&quot;color: #709870;&quot;&gt;(&lt;/span&gt;find-file draft-file&lt;span style=&quot;color: #709870;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-org00b63c5&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;org00b63c5&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;3.&lt;/span&gt; Publish&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-3&quot;&gt;
&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-emacs-lisp&quot;&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;;; &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;use .txt file ext as the temp file&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;defun&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;org2jekyll--publish-post-org-file-with-metadata&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;org-metadata org-file&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;
  &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;Publish as post with ORG-METADATA the ORG-FILE.&quot;&lt;/span&gt;
  &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;let*&lt;/span&gt; &lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #709870;&quot;&gt;(&lt;/span&gt;project      &lt;span style=&quot;color: #907373;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;-&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;layout&quot;&lt;/span&gt;
                           &lt;span style=&quot;color: #6276ba;&quot;&gt;(&lt;/span&gt;assoc-default org-metadata&lt;span style=&quot;color: #6276ba;&quot;&gt;)&lt;/span&gt;  &lt;span style=&quot;color: #3F7F5F;&quot;&gt;;; &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;layout is the blog-project&lt;/span&gt;
                           &lt;span style=&quot;color: #6276ba;&quot;&gt;(&lt;/span&gt;assoc org-publish-project-alist&lt;span style=&quot;color: #6276ba;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #907373;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #709870;&quot;&gt;)&lt;/span&gt;
         &lt;span style=&quot;color: #709870;&quot;&gt;(&lt;/span&gt;temp-file &lt;span style=&quot;color: #907373;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;-&amp;gt;&amp;gt;&lt;/span&gt; org-file
                         &lt;span style=&quot;color: #6276ba;&quot;&gt;(&lt;/span&gt;replace-regexp-in-string &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;.org$&quot;&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;.txt&quot;&lt;/span&gt;&lt;span style=&quot;color: #6276ba;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #907373;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #709870;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt;
    &lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;org2jekyll--publish-temp-file-then-cleanup org-file temp-file project&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;

&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;defun&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;org2jekyll--space-separated-values-to-yaml&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;str&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;
  &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;Transform a STR of space separated values entries into yaml entries.&quot;&lt;/span&gt;
  &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;concat &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;[&quot;&lt;/span&gt;
          &lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;-&amp;gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #709870;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;if&lt;/span&gt; str str &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;&quot;&lt;/span&gt;&lt;span style=&quot;color: #709870;&quot;&gt;)&lt;/span&gt;
               &lt;span style=&quot;color: #709870;&quot;&gt;(&lt;/span&gt;s-split &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot; &quot;&lt;/span&gt;&lt;span style=&quot;color: #709870;&quot;&gt;)&lt;/span&gt;
               &lt;span style=&quot;color: #709870;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;--filter&lt;/span&gt; &lt;span style=&quot;color: #907373;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;unless&lt;/span&gt; &lt;span style=&quot;color: #6276ba;&quot;&gt;(&lt;/span&gt;equal it &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;&quot;&lt;/span&gt;&lt;span style=&quot;color: #6276ba;&quot;&gt;)&lt;/span&gt; it&lt;span style=&quot;color: #907373;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #709870;&quot;&gt;)&lt;/span&gt;
               &lt;span style=&quot;color: #709870;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;--map&lt;/span&gt; &lt;span style=&quot;color: #907373;&quot;&gt;(&lt;/span&gt;format  &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;%s&quot;&lt;/span&gt; it&lt;span style=&quot;color: #907373;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #709870;&quot;&gt;)&lt;/span&gt;
               &lt;span style=&quot;color: #709870;&quot;&gt;(&lt;/span&gt;s-join &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;,&quot;&lt;/span&gt;&lt;span style=&quot;color: #709870;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt;
          &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;]&quot;&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;

&lt;span style=&quot;color: #3F7F5F;&quot;&gt;;; &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;change org to txt, as .txt is the temp file, will be removed.&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;defun&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;org2jekyll-install-yaml-headers&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;original-file published-file&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;
  &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;Read ORIGINAL-FILE metadata and install yaml header to PUBLISHED-FILE.&lt;/span&gt;
&lt;span style=&quot;color: #2A00FF;&quot;&gt;Then delete the original-file which is intended as a temporary file.&lt;/span&gt;
&lt;span style=&quot;color: #2A00FF;&quot;&gt;Only for org-mode file, for other files, it&apos;s a noop.&lt;/span&gt;
&lt;span style=&quot;color: #2A00FF;&quot;&gt;This function is intended to be used as org-publish hook function.&quot;&lt;/span&gt;
  &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;let&lt;/span&gt; &lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #709870;&quot;&gt;(&lt;/span&gt;original-file-ext &lt;span style=&quot;color: #907373;&quot;&gt;(&lt;/span&gt;file-name-extension original-file&lt;span style=&quot;color: #907373;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #709870;&quot;&gt;)&lt;/span&gt;
        &lt;span style=&quot;color: #709870;&quot;&gt;(&lt;/span&gt;published-file-ext &lt;span style=&quot;color: #907373;&quot;&gt;(&lt;/span&gt;file-name-extension published-file&lt;span style=&quot;color: #907373;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #709870;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;;; &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;original-file is the temporary file generated which will be edited with&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;;; &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;jekyll&apos;s yaml headers&lt;/span&gt;

    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;;; &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;careful about extensions: &quot;post&quot; -&amp;gt; org ; page -&amp;gt; org2jekyll&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;;; &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;other stuff are considered neither, so it&apos;s a noop&lt;/span&gt;
    &lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;when&lt;/span&gt; &lt;span style=&quot;color: #709870;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;and&lt;/span&gt; &lt;span style=&quot;color: #907373;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;or&lt;/span&gt; &lt;span style=&quot;color: #6276ba;&quot;&gt;(&lt;/span&gt;string= &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;txt&quot;&lt;/span&gt; original-file-ext&lt;span style=&quot;color: #6276ba;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #6276ba;&quot;&gt;(&lt;/span&gt;string= &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;org2jekyll&quot;&lt;/span&gt; original-file-ext&lt;span style=&quot;color: #6276ba;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #907373;&quot;&gt;)&lt;/span&gt;
               &lt;span style=&quot;color: #907373;&quot;&gt;(&lt;/span&gt;string= &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;html&quot;&lt;/span&gt; published-file-ext&lt;span style=&quot;color: #907373;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #709870;&quot;&gt;)&lt;/span&gt;
      &lt;span style=&quot;color: #709870;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;let&lt;/span&gt; &lt;span style=&quot;color: #907373;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #6276ba;&quot;&gt;(&lt;/span&gt;yaml-headers &lt;span style=&quot;color: #858580;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;-&amp;gt;&lt;/span&gt; original-file
                              org2jekyll-read-metadata
                              org2jekyll--to-yaml-header&lt;span style=&quot;color: #858580;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #6276ba;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #907373;&quot;&gt;)&lt;/span&gt;
        &lt;span style=&quot;color: #907373;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;with-temp-file&lt;/span&gt; published-file
          &lt;span style=&quot;color: #6276ba;&quot;&gt;(&lt;/span&gt;insert-file-contents published-file&lt;span style=&quot;color: #6276ba;&quot;&gt;)&lt;/span&gt;
          &lt;span style=&quot;color: #6276ba;&quot;&gt;(&lt;/span&gt;goto-char &lt;span style=&quot;color: #858580;&quot;&gt;(&lt;/span&gt;point-min&lt;span style=&quot;color: #858580;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #6276ba;&quot;&gt;)&lt;/span&gt;
          &lt;span style=&quot;color: #6276ba;&quot;&gt;(&lt;/span&gt;insert yaml-headers&lt;span style=&quot;color: #6276ba;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #907373;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #709870;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;

&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;defun&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;org2jekyll-publish-from-jekyll&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;org-file&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;
  &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;let*&lt;/span&gt; &lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #709870;&quot;&gt;(&lt;/span&gt;org-options &lt;span style=&quot;color: #907373;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;with-current-buffer&lt;/span&gt; &lt;span style=&quot;color: #6276ba;&quot;&gt;(&lt;/span&gt;current-buffer&lt;span style=&quot;color: #6276ba;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #6276ba;&quot;&gt;(&lt;/span&gt;org2jekyll-get-options-from-buffer&lt;span style=&quot;color: #6276ba;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #907373;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #709870;&quot;&gt;)&lt;/span&gt;
         &lt;span style=&quot;color: #709870;&quot;&gt;(&lt;/span&gt;publish-fn &lt;span style=&quot;color: #907373;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;-&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #6276ba;&quot;&gt;(&lt;/span&gt;plist-get org-options &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;:layout&lt;/span&gt;&lt;span style=&quot;color: #6276ba;&quot;&gt;)&lt;/span&gt;
                         org2jekyll-post-p
                         &lt;span style=&quot;color: #6276ba;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;if&lt;/span&gt; &apos;org2jekyll-publish-post
                             &apos;org2jekyll-publish-page&lt;span style=&quot;color: #6276ba;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #907373;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #709870;&quot;&gt;)&lt;/span&gt;
         &lt;span style=&quot;color: #709870;&quot;&gt;(&lt;/span&gt;final-message &lt;span style=&quot;color: #907373;&quot;&gt;(&lt;/span&gt;funcall publish-fn org-file&lt;span style=&quot;color: #907373;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #709870;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt;
    &lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;progn&lt;/span&gt;
      &lt;span style=&quot;color: #709870;&quot;&gt;(&lt;/span&gt;org2jekyll-publish-web-project&lt;span style=&quot;color: #709870;&quot;&gt;)&lt;/span&gt;
      &lt;span style=&quot;color: #709870;&quot;&gt;(&lt;/span&gt;org2jekyll-message final-message&lt;span style=&quot;color: #709870;&quot;&gt;)&lt;/span&gt;
      &lt;span style=&quot;color: #709870;&quot;&gt;(&lt;/span&gt;magit-status-setup-buffer&lt;span style=&quot;color: #709870;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;

&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;defun&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;org2jekyll-publish&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt;
  &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;interactive&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;
  &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;load-theme &apos;kimim-light t&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;
  &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;let*&lt;/span&gt; &lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #709870;&quot;&gt;(&lt;/span&gt;buffer &lt;span style=&quot;color: #907373;&quot;&gt;(&lt;/span&gt;current-buffer&lt;span style=&quot;color: #907373;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #709870;&quot;&gt;)&lt;/span&gt;
         &lt;span style=&quot;color: #709870;&quot;&gt;(&lt;/span&gt;org-file &lt;span style=&quot;color: #907373;&quot;&gt;(&lt;/span&gt;buffer-file-name &lt;span style=&quot;color: #6276ba;&quot;&gt;(&lt;/span&gt;current-buffer&lt;span style=&quot;color: #6276ba;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #907373;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #709870;&quot;&gt;)&lt;/span&gt;
         &lt;span style=&quot;color: #709870;&quot;&gt;(&lt;/span&gt;filepath &lt;span style=&quot;color: #907373;&quot;&gt;(&lt;/span&gt;file-name-directory org-file&lt;span style=&quot;color: #907373;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #709870;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt;
    &lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #709870;&quot;&gt;(&lt;/span&gt;string-prefix-p &lt;span style=&quot;color: #907373;&quot;&gt;(&lt;/span&gt;file-truename org2jekyll-source-directory&lt;span style=&quot;color: #907373;&quot;&gt;)&lt;/span&gt;
                         filepath&lt;span style=&quot;color: #709870;&quot;&gt;)&lt;/span&gt;
        &lt;span style=&quot;color: #709870;&quot;&gt;(&lt;/span&gt;org2jekyll-publish-from-jekyll org-file&lt;span style=&quot;color: #709870;&quot;&gt;)&lt;/span&gt;
        &lt;span style=&quot;color: #709870;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;let*&lt;/span&gt; &lt;span style=&quot;color: #907373;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #6276ba;&quot;&gt;(&lt;/span&gt;filename &lt;span style=&quot;color: #858580;&quot;&gt;(&lt;/span&gt;file-name-nondirectory org-file&lt;span style=&quot;color: #858580;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #6276ba;&quot;&gt;)&lt;/span&gt;
               &lt;span style=&quot;color: #6276ba;&quot;&gt;(&lt;/span&gt;movefile &lt;span style=&quot;color: #858580;&quot;&gt;(&lt;/span&gt;concat
                          org2jekyll-source-directory &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;/&quot;&lt;/span&gt;
                          &lt;span style=&quot;color: #80a880;&quot;&gt;(&lt;/span&gt;plist-get &lt;span style=&quot;color: #887070;&quot;&gt;(&lt;/span&gt;org2jekyll-get-options-from-buffer&lt;span style=&quot;color: #887070;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;:categories&lt;/span&gt;&lt;span style=&quot;color: #80a880;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;/&quot;&lt;/span&gt;
                          &lt;span style=&quot;color: #80a880;&quot;&gt;(&lt;/span&gt;format-time-string &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;%Y-%m-%d-&quot;&lt;/span&gt;&lt;span style=&quot;color: #80a880;&quot;&gt;)&lt;/span&gt; filename&lt;span style=&quot;color: #858580;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #6276ba;&quot;&gt;)&lt;/span&gt;
               &lt;span style=&quot;color: #6276ba;&quot;&gt;(&lt;/span&gt;_ &lt;span style=&quot;color: #858580;&quot;&gt;(&lt;/span&gt;rename-file buffer-file-name movefile&lt;span style=&quot;color: #858580;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #6276ba;&quot;&gt;)&lt;/span&gt;
               &lt;span style=&quot;color: #6276ba;&quot;&gt;(&lt;/span&gt;_ &lt;span style=&quot;color: #858580;&quot;&gt;(&lt;/span&gt;switch-to-buffer &lt;span style=&quot;color: #80a880;&quot;&gt;(&lt;/span&gt;find-file-noselect movefile&lt;span style=&quot;color: #80a880;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #858580;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #6276ba;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #907373;&quot;&gt;)&lt;/span&gt;
          &lt;span style=&quot;color: #907373;&quot;&gt;(&lt;/span&gt;org2jekyll-publish-from-jekyll org-file&lt;span style=&quot;color: #907373;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #709870;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgea2de35&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgea2de35&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;4.&lt;/span&gt; Future plan&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-4&quot;&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;complete TAGS, CATEGORIES from existing jekyll project&lt;/li&gt;
&lt;li&gt;with more and more modification, it turns out that I should fork
org2jekyll now&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines R.15 重载匹配的分配/释放函数对</title>
   <link href="http://kimi.im/2023-02-19-cppcoreguidelines-r15"/>
   <updated>2023-02-19T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-r15</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;rsquo;&amp;ldquo;Always overload matched allocation/deallocation pairs&amp;rdquo;
&lt;/p&gt;


&lt;p&gt;
理由
&lt;/p&gt;

&lt;p&gt;
不然，会导致不匹配的操作，混乱。
&lt;/p&gt;


&lt;p&gt;
例子
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;X&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;...&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;void&lt;/span&gt;* &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;operator&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;new&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;size_t&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;s&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;operator&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;delete&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;void&lt;/span&gt;*&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;...&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;
&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;
注意
&lt;/p&gt;

&lt;p&gt;
如果你希望分配的内容不释放，可以把释放函数设置为 &lt;code&gt;=delete&lt;/code&gt; ，但不要留着不定义。
&lt;/p&gt;


&lt;p&gt;
强化
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;标注不完全的函数对。&lt;/li&gt;
&lt;/ul&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines R.14 用 span 做参数，不要用 []</title>
   <link href="http://kimi.im/2023-02-17-cppcoreguidelines-r14"/>
   <updated>2023-02-17T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-r14</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;Avoid [] parameters, prefer span&amp;rdquo;
&lt;/p&gt;


&lt;p&gt;
理由
&lt;/p&gt;

&lt;p&gt;
用指针访问数组，会导致数组的大小信息丢失。会导致一些列相关的错误。用
span 保留数组大小信息。
&lt;/p&gt;


&lt;p&gt;
例子
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;[]&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;          &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;not recommended&lt;/span&gt;

&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt;*&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;           &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;not recommended for multiple objects&lt;/span&gt;
                        &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;(a pointer should point to a single object, do not subscript)&lt;/span&gt;

&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;gsl&lt;/span&gt;::&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;span&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;good, recommended&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
强化
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;标记 [] 参数，改用 span&lt;/li&gt;
&lt;/ul&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines R.13 一个表达式中只显式地分配一个资源</title>
   <link href="http://kimi.im/2023-02-16-cppcoreguidelines-r13"/>
   <updated>2023-02-16T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-r13</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;Perform at most one explicit resource allocation in a single expression statement&amp;rdquo;
&lt;/p&gt;


&lt;p&gt;
理由
&lt;/p&gt;


&lt;p&gt;
在一个语句中申请两个资源，可能会导致内存泄漏，因为很多子语句的执行顺序是未定义的。包括函数参数。
&lt;/p&gt;


&lt;p&gt;
例子
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;fun&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;shared_ptr&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;&amp;lt;&lt;/span&gt;Widget&lt;span style=&quot;color: #7388d6;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;sp1&lt;/span&gt;, &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;shared_ptr&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;&amp;lt;&lt;/span&gt;Widget&lt;span style=&quot;color: #7388d6;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;sp2&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
可能会这样调用这个函数：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;BAD: potential leak&lt;/span&gt;
fun&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;shared_ptr&lt;span style=&quot;color: #7388d6;&quot;&gt;&amp;lt;&lt;/span&gt;Widget&lt;span style=&quot;color: #7388d6;&quot;&gt;&amp;gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Widget&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;a, b&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;, shared_ptr&lt;span style=&quot;color: #7388d6;&quot;&gt;&amp;lt;&lt;/span&gt;Widget&lt;span style=&quot;color: #7388d6;&quot;&gt;&amp;gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Widget&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;c, d&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
这段代码在出现异常的时候是不安全的。因为编译器处理两个参数的时候，可能会做一些顺序调整，比如先统一分配内存，然后调用两个对象的构造函数。一旦构造一个对象的时候，抛出异常了，就再也不释放另一个对象的内存，就导致内存泄漏了。
&lt;/p&gt;

&lt;p&gt;
一个简单的解决方案是：不在一个语句中分配多个资源。比如：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;shared_ptr&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;lt;&lt;/span&gt;Widget&lt;span style=&quot;color: #707183;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;sp1&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Widget&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;a, b&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;Better, but messy&lt;/span&gt;
fun&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;sp1, &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Widget&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;c, d&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
最佳的解决方案是避免直接的内存分配，而是使用工厂函数直接返回所管理的对象：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;fun&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;make_shared&lt;span style=&quot;color: #7388d6;&quot;&gt;&amp;lt;&lt;/span&gt;Widget&lt;span style=&quot;color: #7388d6;&quot;&gt;&amp;gt;(&lt;/span&gt;a, b&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;, make_shared&lt;span style=&quot;color: #7388d6;&quot;&gt;&amp;lt;&lt;/span&gt;Widget&lt;span style=&quot;color: #7388d6;&quot;&gt;&amp;gt;(&lt;/span&gt;c, d&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;Best&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
如果没有现成的工厂函数，自己封装一个。
&lt;/p&gt;

&lt;p&gt;
强化
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;标注显式分配多个资源的语句&lt;/li&gt;
&lt;/ul&gt;
</content>
 </entry>
 
 <entry>
   <title>设置 nostr 代理</title>
   <link href="http://kimi.im/2023-02-15-setup-nostr-proxy"/>
   <updated>2023-02-15T00:00:00+00:00</updated>
   <id>http://kimi.im/setup-nostr-proxy</id>
   <content type="html">&lt;p&gt;
上一篇文章，我们&lt;a href=&quot;./2023-02-04-setup-nostr-relay.html&quot;&gt;搭建了一个 nostr relay&lt;/a&gt;。如果在 nostr 客户端只设置自己的 relay，就只能看到自己的消息，不管你设置了多少个私钥，都是自己一个人的狂欢。
&lt;/p&gt;

&lt;p&gt;
这次，我们试着搭建一个 nostr 代理。
&lt;/p&gt;

&lt;p&gt;
那么，在搭建代理之前，我们要清楚一个问题，即：为什么要搭建代理？
&lt;/p&gt;

&lt;p&gt;
我们知道，nostr 的消息都是通过 relay 中转的。为了确保更多的人能收到我们的消息，我们会在客户端中添加很多 relay，尤其是那些用到人多的 relay。这样才能加入到更多人的狂欢之中。
&lt;/p&gt;

&lt;p&gt;
但是，这样就会出现个问题，当我们添加的 relay 太多的时候，我们要获取更新的时候，客户端就要不停的连接这些 relay，检查是不是有最新消息。当我们要去发送消息的时候，客户端就要向所有 relay 发送消息。对于客户端来说，这显然效率不太高。
&lt;/p&gt;

&lt;p&gt;
这时候，nostr 代理就能解决这个问题。当我们查询更新的时候，nostr 代理会去汇总其他 relay 的消息，我们的客户端只要向代理查询最新消息即可。当我们发送消息的时候，只要发送一条消息给 nostr 代理，然后它会把消息发送给其他 relay。
&lt;/p&gt;

&lt;p&gt;
现在我们看看怎么搭建 nostr relay。
&lt;/p&gt;

&lt;p&gt;
首先，从 &lt;a href=&quot;https://github.com/Dolu89/nostr-proxy&quot;&gt;https://github.com/Dolu89/nostr-proxy&lt;/a&gt; clone nostr-relay：
&lt;/p&gt;

&lt;pre class=&quot;example&quot; id=&quot;orgee0496b&quot;&gt;
kimim@nostr:~$ git clone https://github.com/Dolu89/nostr-proxy
Cloning into &apos;nostr-proxy&apos;...
remote: Enumerating objects: 226, done.
remote: Counting objects: 100% (226/226), done.
remote: Compressing objects: 100% (157/157), done.
remote: Total 226 (delta 75), reused 191 (delta 49), pack-reused 0
Receiving objects: 100% (226/226), 193.45 KiB | 2.33 MiB/s, done.
Resolving deltas: 100% (75/75), done.
&lt;/pre&gt;

&lt;p&gt;
然后，记得卸载当前的旧版的 nodejs，安装官网最新版本。因为 nostr-relay
需要最新的 nodejs。
&lt;/p&gt;

&lt;pre class=&quot;example&quot; id=&quot;orgd972874&quot;&gt;
$ sudo apt-get remove nodejs libnode-dev
$ curl -fsSL https://deb.nodesource.com/setup_current.x | sudo -E bash -
$ sudo apt-get install nodejs
&lt;/pre&gt;

&lt;p&gt;
然后，cd 到刚才 clone 的 nostr-relay 文件夹下，安装依赖包：
&lt;/p&gt;

&lt;pre class=&quot;example&quot; id=&quot;org1e29203&quot;&gt;
kimim@nostr:~$ cd nostr-proxy/
kimim@nostr:~/nostr-proxy$ npm install
...
added 1295 packages, and audited 1296 packages in 2m

131 packages are looking for funding
  run `npm fund` for details

5 high severity vulnerabilities

Some issues need review, and may require choosing
a different dependency.

Run `npm audit` for details.
&lt;/pre&gt;

&lt;p&gt;
调用命令生成 APP KEY：
&lt;/p&gt;

&lt;pre class=&quot;example&quot; id=&quot;org8e696ca&quot;&gt;
kimim@nostr:~/nostr-proxy$ node ace generate:key
snZunvc4O9U_f4IN2LgzqVc5kQUU9w-0
  &amp;gt; During development, you may want to set the above secret as &quot;APP_KEY&quot; inside the .env file
&lt;/pre&gt;

&lt;p&gt;
然后将密钥填入 .env 文件。同时设置 proxy 的端口，按照之前
&lt;a href=&quot;./2023-02-04-setup-nostr-relay.html&quot;&gt;安装 nostr relay 的设置&lt;/a&gt;，我用了 8008 端口。这里我只添加了两个 relay，其实可以添加很多很多个。
&lt;/p&gt;

&lt;pre class=&quot;example&quot; id=&quot;org69119d4&quot;&gt;
kimim@nostr:~/nostr-proxy$ cp .env.example .env
kimim@nostr:~/nostr-proxy$ vi .env
kimim@nostr:~/nostr-proxy$ cat .env
PORT=8008
HOST=0.0.0.0
NODE_ENV=development
APP_KEY=snZunvc4O9U_f4IN2LgzqVc5kQUU9w-0
DRIVE_DISK=local
SESSION_DRIVER=cookie
CACHE_VIEWS=false
PROXY_URL=wss:/nostr.kimi.im/
RELAYS=wss://nos.lol,wss://brb.io
&lt;/pre&gt;

&lt;p&gt;
然后，开启 dev 服务试试看。
&lt;/p&gt;

&lt;pre class=&quot;example&quot; id=&quot;org873abd7&quot;&gt;
kimim@nostr:~/nostr-proxy$ npm run dev

&amp;gt; nostr-proxy@1.0.0 dev
&amp;gt; node ace serve --watch

[ info ]  building project...
[ info ]  starting http server...
[ encore ] Running webpack-dev-server ...
[ info ]  watching file system for changes
[10:44:39.919] INFO (nostr-proxy/45785): started server on 0.0.0.0:8008
╭────────────────────────────────────────────────────────╮
│                                                        │
│    Server address: http://127.0.0.1:8008               │
│    Watching filesystem for changes: YES                │
│    Encore server address: http://localhost:8080        │
│                                                        │
╰────────────────────────────────────────────────────────╯
UPDATE: public/assets/manifest.json
UPDATE: public/assets/entrypoints.json
[ encore ]  DONE  Compiled successfully in 1499ms10:44:42 AM
[ encore ] webpack compiled successfully
&lt;/pre&gt;

&lt;p&gt;
切换到我本地的 Linux 虚拟机，试试看：
&lt;/p&gt;

&lt;p&gt;
删除之前配置的 relay，添加 nostr proxy
&lt;/p&gt;
&lt;pre class=&quot;example&quot; id=&quot;org20ab155&quot;&gt;
$ ./noscl relay
wss://nos.lol: rw
$ ./noscl relay remove wss://nos.lol
Removed relay wss://nos.lol.
$ ./noscl relay add wss://nostr.kimi.im
&lt;/pre&gt;

&lt;p&gt;
发送消息：
&lt;/p&gt;

&lt;pre class=&quot;example&quot; id=&quot;org9157881&quot;&gt;
$ ./noscl publish &quot;Bonjour tout le monde from nostr-proxy&quot;
Sent event 1c4a92e8c36c259eb5d34ccd96c5a78e7dea1bdd2ba46f61fc9f8b5bebb7442d to &apos;wss://nostr.kimi.im&apos;.
Seen 1c4a92e8c36c259eb5d34ccd96c5a78e7dea1bdd2ba46f61fc9f8b5bebb7442d on &apos;wss://nostr.kimi.im&apos;.
&lt;/pre&gt;

&lt;p&gt;
消息通过 nostr 代理成功发送！
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines R.12 对于直接分配的资源，立即用一个对象管理起来</title>
   <link href="http://kimi.im/2023-02-15-cppcoreguidelines-r12"/>
   <updated>2023-02-15T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-r12</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;Immediately give the result of an explicit resource allocation to a manager object&amp;rdquo;
&lt;/p&gt;


&lt;p&gt;
理由
&lt;/p&gt;

&lt;p&gt;
如果你不这么做，异常或返回就会导致内存泄漏
&lt;/p&gt;


&lt;p&gt;
坏例子
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;func&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;string&lt;/span&gt;&amp;amp; &lt;span style=&quot;color: #000000;&quot;&gt;name&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;FILE&lt;/span&gt;* &lt;span style=&quot;color: #000000;&quot;&gt;f&lt;/span&gt; = fopen&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;name, &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;r&quot;&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;            &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;open the file&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;vector&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;char&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;buf&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;1024&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;auto&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;_&lt;/span&gt; = finally&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;]&lt;/span&gt; &lt;span style=&quot;color: #909183;&quot;&gt;{&lt;/span&gt; fclose&lt;span style=&quot;color: #709870;&quot;&gt;(&lt;/span&gt;f&lt;span style=&quot;color: #709870;&quot;&gt;)&lt;/span&gt;; &lt;span style=&quot;color: #909183;&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;  &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;remember to close the file&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;...&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
以上例子中，分配 buf 的过程可能失败，这样 f 这个文件句柄就没有关掉，内存泄漏了。
&lt;/p&gt;


&lt;p&gt;
例子
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;func&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;string&lt;/span&gt;&amp;amp; &lt;span style=&quot;color: #000000;&quot;&gt;name&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;ifstream&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;name&lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;open the file&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;vector&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;char&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;buf&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;1024&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;...&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
使用 ifstream 作为文件句柄更简洁、高效、安全。
&lt;/p&gt;


&lt;p&gt;
强化
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;标记使用直接内存分配的方式初始化指针的地方&lt;/li&gt;
&lt;/ul&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines R.11 避免直接调用 new 和 delete</title>
   <link href="http://kimi.im/2023-02-14-cppcoreguidelines-r11"/>
   <updated>2023-02-14T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-r11</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;Avoid calling new and delete explicitly&amp;rdquo;
&lt;/p&gt;


&lt;p&gt;
理由
&lt;/p&gt;

&lt;p&gt;
new 返回的指针应该属于某种资源句柄，该句柄能够调用 delete。如果 new 返回的指针赋值给了原始裸露指针，就有资源泄漏的风险。
&lt;/p&gt;


&lt;p&gt;
注意
&lt;/p&gt;

&lt;p&gt;
在大型程序中，裸露的 delete 操作可能是个 bug：如果你有 N 次 delete，你怎么确保你是不是需要 N+1 次，或 N-1 次？这个 bug 可能很隐蔽，你可能在某些地方少了一次裸露的 delete 操作。
&lt;/p&gt;


&lt;p&gt;
强化
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;对于直接调用 new 和 delete 的操作进行警告。建议使用 &lt;code&gt;make_unique&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
</content>
 </entry>
 
 <entry>
   <title>OPC UA 在变电站辅控系统中的应用</title>
   <link href="http://kimi.im/2023-02-13-opc-ua-in-substation-auxiliary-control"/>
   <updated>2023-02-13T00:00:00+00:00</updated>
   <id>http://kimi.im/opc-ua-in-substation-auxiliary-control</id>
   <content type="html">&lt;p&gt;
最近，在第五届国际可再生能源和电力工程会议上，建设部国网上海市电力公司和复旦大学联合发表了一篇题为《Design and Implementation of the
Substation Intelligent Auxiliary Control System Based on OPC UA》的论文，介绍了国家电网如何在变电站的辅控系统中利用 OPC UA 实现设备的互联互通和数据的统一利用。
&lt;/p&gt;

&lt;p&gt;
对于变电站来说，因为它一般都是架设在比较偏远的地方，所以传统的运维方式是依靠人力进行巡检定期，所以不能做到对变电站所有设备的实时监测，也不能实时掌握变电站设备和环境是否安全稳定。
&lt;/p&gt;

&lt;p&gt;
通过利用变电站辅助控制系统，则可以对电气设备、环境、安防、消防等进行综合监控，无需人工排班巡检。告警信息及时发出，故障精准定位，帮助工作人员高效运维。变电站的辅控系统对变电站内各种电气设备进行监测、保护、控制，对变电站内环境包括温度、湿度、空调、新风机、漏水、SF6气体泄漏，对变电站设施进行安防保护，安放系统包括门禁、红外、照明、视频图像、火灾消防、防盗等。
&lt;/p&gt;

&lt;p&gt;
但是，在辅助控制系统的建设过程中，电网公司也遇到这样一些问题：
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;由于辅助控制设备的厂家众多，接口不一，设备之间数据不兼容、通信协议不匹配，导致辅助控制设备之间间通信较为困难。&lt;/li&gt;
&lt;li&gt;目前的通信协议缺少信息安全保障，无法做到隐私数据的安全利用。&lt;/li&gt;
&lt;/ul&gt;



&lt;div id=&quot;org387cdb1&quot; class=&quot;figure&quot;&gt;
&lt;p&gt;&lt;div align=&quot;center&quot;&gt;&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
&lt;!-- Do not edit this file with editors other than diagrams.net --&gt;
&lt;!DOCTYPE svg PUBLIC &quot;-//W3C//DTD SVG 1.1//EN&quot; &quot;http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd&quot;&gt;
&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; xmlns:xlink=&quot;http://www.w3.org/1999/xlink&quot; version=&quot;1.1&quot; width=&quot;462px&quot; height=&quot;501px&quot; viewBox=&quot;-0.5 -0.5 462 501&quot; content=&quot;&amp;lt;mxfile host=&amp;quot;Electron&amp;quot; modified=&amp;quot;2023-02-13T10:23:59.084Z&amp;quot; agent=&amp;quot;5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) draw.io/20.8.10 Chrome/106.0.5249.199 Electron/21.3.5 Safari/537.36&amp;quot; etag=&amp;quot;lm7F9cgem3UB7G04uROo&amp;quot; version=&amp;quot;20.8.10&amp;quot; type=&amp;quot;device&amp;quot;&amp;gt;&amp;lt;diagram name=&amp;quot;Page-1&amp;quot; id=&amp;quot;x3aBHcs5ZalOineYVWUV&amp;quot;&amp;gt;7VpLb+M2EP41PDYQ9aSOkq1k222BBYJ2t6dCsRhLXVk0ZDq2++s7I1EvSxvbcWwrwOYScjgckTPfPEiaGJPF9iEPl/EfIuIp0bVoS4wp0XVKmQX/kLIrKQ72kDDPk0gxNYTH5D+uiJqirpOIrzqMUohUJssucSayjM9khxbmudh02Z5F2v3qMpzzHuFxFqZ96tckknFJZbrT0D/xZB6rL1vMKAcWYcWrNrKKw0hsWiQjIMYkF0KWrcV2wlPUXaWWct79D0brdeU8k8dMEDndPnz7qv/68M/n32bTzw9//fnpF2WcldxV++URbF91RS5jMRdZmAYN1c/FOos4StWg1/D8LsQSiBSI/3Ipd8qW4VoKIMVykapRWHC++4bz76yq+3d7bLpVwsveTvWeRSaVUArq80GjS+w8p3zroamBVu4HN/FDNSnSSqzzGX9FNxXawnzO5St8em1McAIuFhzWDPNynoYyeemuI1RonNd8aiqsP9y1GJYiyeSqJfkLEoBBOZauKVgpt7Jox/rQKCVWvdbSGlKBkBPQYr8BLUNGGg2CboAW40y0tCx8ugGdnwY824DmLdzd0m/g7moTL2G6VtsigUXYPXEZCRzimsS3sOH5xHVJAN0J8TQS2ISZxL1HZqB7wGwQphFGccilOIpyDBQFDQ8mmg2Pbqegfv8ph9YcW4XAgHhOMYsR325Jhq9PCXOVHNcrKA5hUxIw4gXED9QQ62O/i+JNnEj+uAwLkGygmOkito08u0beC88l376OvT5WqhhuWR2jmo4y8qYpNOo6KG4VGUy7UHzQBy0Oaiw1DLVcqXPXRzs2dnGI76NpSjB496NTNTW7/mNYfVVTfUDV9qVUTc2xxOJeWQUhUCrp06dUzL5jGN4msozXuqW6dbyGdhOusVNF61aUdzphXjsQ5t8xrLMrVXHngeEtdfilE7N+kslORJFzPIpuAIabFml0hFVaBwlNyXYOFm5gVveWZmUDudXFTMrsIpMy4mqYZH0PK6uyvsJsCyXTpKhnIP96xKM9cNw8t7JubtXNgTJGu2puNcbiQdf2hKpaPOgK7KYRThvwBbNAPv0AgNf3DmN14XizYtIY0KdTFOflCUvH09ZHrNsNbWx1uzmgalYcOW2M56Bq1PAHVLVpj03VdPT3je9SFL9j+HePjP7n3mGdZVZ3wINsvM+B+A+uBJHKL4K/72DwhyGvuBrCBMHQicoEAcxj96ChQujKHqSPzoMoGfVRgh57DUy1YSxcqYIaupstbj7RQcrCiR2RdBDvyQzsGD7x9ItYJTIRGWpWSCkWoNqKwUuTOQ5IsedH9bMmWisKV3GNkpXMxff60ZS2kLXYzvGx+C7Molwk0d0yFhnX6ykTkYq8WB+kf/y7kLvunVsG8p014KxUu5i3DhwRe+6bRRX6M1BaW+e0a5iuy7714aSvvQPqqWinvYf0HjwMdy+W0j2tl56sZjWKPyjI2pNTOnpPzru9oQxku582PdOmtnZA0JuNCt3mFxkle/OzFiP4Hw==&amp;lt;/diagram&amp;gt;&amp;lt;/mxfile&amp;gt;&quot; style=&quot;background-color: rgb(255, 255, 255);&quot;&gt;&lt;defs/&gt;&lt;g&gt;&lt;path d=&quot;M 114.5 455 L 114.5 465 L 55.03 465 L 55.01 379.5 L 44.51 379.5 L 60 360.5 L 75.51 379.5 L 65.01 379.5 L 65.03 455 Z&quot; fill=&quot;none&quot; stroke=&quot;rgb(0, 0, 0)&quot; stroke-miterlimit=&quot;1.42&quot; pointer-events=&quot;all&quot;/&gt;&lt;path d=&quot;M 55.01 379.5 L 44.51 379.5 L 60 360.5 L 75.51 379.5 L 65.01 379.5&quot; fill=&quot;none&quot; stroke=&quot;rgb(0, 0, 0)&quot; stroke-miterlimit=&quot;4&quot; pointer-events=&quot;all&quot;/&gt;&lt;path d=&quot;M 225 419.5 L 215 419.5 L 215 379.5 L 204.5 379.5 L 220 360.5 L 235.5 379.5 L 225 379.5 Z&quot; fill=&quot;none&quot; stroke=&quot;rgb(0, 0, 0)&quot; stroke-miterlimit=&quot;10&quot; pointer-events=&quot;all&quot;/&gt;&lt;path d=&quot;M 325.5 465 L 325.5 455 L 375.03 455 L 375.01 379.5 L 364.51 379.5 L 380 360.5 L 395.51 379.5 L 385.01 379.5 L 385.03 465 Z&quot; fill=&quot;none&quot; stroke=&quot;rgb(0, 0, 0)&quot; stroke-miterlimit=&quot;1.42&quot; pointer-events=&quot;all&quot;/&gt;&lt;path d=&quot;M 375.01 379.5 L 364.51 379.5 L 380 360.5 L 395.51 379.5 L 385.01 379.5&quot; fill=&quot;none&quot; stroke=&quot;rgb(0, 0, 0)&quot; stroke-miterlimit=&quot;4&quot; pointer-events=&quot;all&quot;/&gt;&lt;rect x=&quot;115&quot; y=&quot;420&quot; width=&quot;210&quot; height=&quot;80&quot; fill=&quot;rgb(255, 255, 255)&quot; stroke=&quot;rgb(0, 0, 0)&quot; pointer-events=&quot;all&quot;/&gt;&lt;g transform=&quot;translate(-0.5 -0.5)&quot;&gt;&lt;switch&gt;&lt;foreignObject pointer-events=&quot;none&quot; width=&quot;100%&quot; height=&quot;100%&quot; requiredFeatures=&quot;http://www.w3.org/TR/SVG11/feature#Extensibility&quot; style=&quot;overflow: visible; text-align: left;&quot;&gt;&lt;div xmlns=&quot;http://www.w3.org/1999/xhtml&quot; style=&quot;display: flex; align-items: unsafe center; justify-content: unsafe center; width: 208px; height: 1px; padding-top: 460px; margin-left: 116px;&quot;&gt;&lt;div data-drawio-colors=&quot;color: rgb(0, 0, 0); &quot; style=&quot;box-sizing: border-box; font-size: 0px; text-align: center;&quot;&gt;&lt;div style=&quot;display: inline-block; font-size: 16px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;&quot;&gt;变电站传感器、摄像头、&lt;br /&gt;控制器等多种设备&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/foreignObject&gt;&lt;text x=&quot;220&quot; y=&quot;465&quot; fill=&quot;rgb(0, 0, 0)&quot; font-family=&quot;Helvetica&quot; font-size=&quot;16px&quot; text-anchor=&quot;middle&quot;&gt;变电站传感器、摄像头、&amp;#xa;控制器等多种设备&lt;/text&gt;&lt;/switch&gt;&lt;/g&gt;&lt;rect x=&quot;0&quot; y=&quot;300&quot; width=&quot;120&quot; height=&quot;60&quot; fill=&quot;rgb(255, 255, 255)&quot; stroke=&quot;rgb(0, 0, 0)&quot; pointer-events=&quot;all&quot;/&gt;&lt;g transform=&quot;translate(-0.5 -0.5)&quot;&gt;&lt;switch&gt;&lt;foreignObject pointer-events=&quot;none&quot; width=&quot;100%&quot; height=&quot;100%&quot; requiredFeatures=&quot;http://www.w3.org/TR/SVG11/feature#Extensibility&quot; style=&quot;overflow: visible; text-align: left;&quot;&gt;&lt;div xmlns=&quot;http://www.w3.org/1999/xhtml&quot; style=&quot;display: flex; align-items: unsafe center; justify-content: unsafe center; width: 118px; height: 1px; padding-top: 330px; margin-left: 1px;&quot;&gt;&lt;div data-drawio-colors=&quot;color: rgb(0, 0, 0); &quot; style=&quot;box-sizing: border-box; font-size: 0px; text-align: center;&quot;&gt;&lt;div style=&quot;display: inline-block; font-size: 16px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;&quot;&gt;安全监控终端&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/foreignObject&gt;&lt;text x=&quot;60&quot; y=&quot;335&quot; fill=&quot;rgb(0, 0, 0)&quot; font-family=&quot;Helvetica&quot; font-size=&quot;16px&quot; text-anchor=&quot;middle&quot;&gt;安全监控终端&lt;/text&gt;&lt;/switch&gt;&lt;/g&gt;&lt;path d=&quot;M 85 269.5 L 74.5 269.5 L 90 250.5 L 105.5 269.5 L 95 269.5 L 95 280.5 L 105.5 280.5 L 90 299.5 L 74.5 280.5 L 85 280.5 Z&quot; fill=&quot;none&quot; stroke=&quot;rgb(0, 0, 0)&quot; stroke-miterlimit=&quot;10&quot; pointer-events=&quot;all&quot;/&gt;&lt;path d=&quot;M 185 269.5 L 174.5 269.5 L 190 250.5 L 205.5 269.5 L 195 269.5 L 195 280.5 L 205.5 280.5 L 190 299.5 L 174.5 280.5 L 185 280.5 Z&quot; fill=&quot;none&quot; stroke=&quot;rgb(0, 0, 0)&quot; stroke-miterlimit=&quot;10&quot; pointer-events=&quot;all&quot;/&gt;&lt;path d=&quot;M 259.5 225 L 259.5 235.5 L 240.5 220 L 259.5 204.5 L 259.5 215 L 300.5 215 L 300.5 204.5 L 319.5 220 L 300.5 235.5 L 300.5 225 Z&quot; fill=&quot;none&quot; stroke=&quot;rgb(0, 0, 0)&quot; stroke-miterlimit=&quot;10&quot; pointer-events=&quot;all&quot;/&gt;&lt;rect x=&quot;40&quot; y=&quot;190&quot; width=&quot;200&quot; height=&quot;60&quot; fill=&quot;rgb(255, 255, 255)&quot; stroke=&quot;rgb(0, 0, 0)&quot; pointer-events=&quot;all&quot;/&gt;&lt;g transform=&quot;translate(-0.5 -0.5)&quot;&gt;&lt;switch&gt;&lt;foreignObject pointer-events=&quot;none&quot; width=&quot;100%&quot; height=&quot;100%&quot; requiredFeatures=&quot;http://www.w3.org/TR/SVG11/feature#Extensibility&quot; style=&quot;overflow: visible; text-align: left;&quot;&gt;&lt;div xmlns=&quot;http://www.w3.org/1999/xhtml&quot; style=&quot;display: flex; align-items: unsafe center; justify-content: unsafe center; width: 198px; height: 1px; padding-top: 220px; margin-left: 41px;&quot;&gt;&lt;div data-drawio-colors=&quot;color: rgb(0, 0, 0); &quot; style=&quot;box-sizing: border-box; font-size: 0px; text-align: center;&quot;&gt;&lt;div style=&quot;display: inline-block; font-size: 16px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;&quot;&gt;集成应用服务&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/foreignObject&gt;&lt;text x=&quot;140&quot; y=&quot;225&quot; fill=&quot;rgb(0, 0, 0)&quot; font-family=&quot;Helvetica&quot; font-size=&quot;16px&quot; text-anchor=&quot;middle&quot;&gt;集成应用服务&lt;/text&gt;&lt;/switch&gt;&lt;/g&gt;&lt;path d=&quot;M 135 149.5 L 124.5 149.5 L 140 130.5 L 155.5 149.5 L 145 149.5 L 145 170.5 L 155.5 170.5 L 140 189.5 L 124.5 170.5 L 135 170.5 Z&quot; fill=&quot;none&quot; stroke=&quot;rgb(0, 0, 0)&quot; stroke-miterlimit=&quot;10&quot; pointer-events=&quot;all&quot;/&gt;&lt;rect x=&quot;80&quot; y=&quot;70&quot; width=&quot;120&quot; height=&quot;60&quot; fill=&quot;rgb(255, 255, 255)&quot; stroke=&quot;rgb(0, 0, 0)&quot; pointer-events=&quot;all&quot;/&gt;&lt;g transform=&quot;translate(-0.5 -0.5)&quot;&gt;&lt;switch&gt;&lt;foreignObject pointer-events=&quot;none&quot; width=&quot;100%&quot; height=&quot;100%&quot; requiredFeatures=&quot;http://www.w3.org/TR/SVG11/feature#Extensibility&quot; style=&quot;overflow: visible; text-align: left;&quot;&gt;&lt;div xmlns=&quot;http://www.w3.org/1999/xhtml&quot; style=&quot;display: flex; align-items: unsafe center; justify-content: unsafe center; width: 118px; height: 1px; padding-top: 100px; margin-left: 81px;&quot;&gt;&lt;div data-drawio-colors=&quot;color: rgb(0, 0, 0); &quot; style=&quot;box-sizing: border-box; font-size: 0px; text-align: center;&quot;&gt;&lt;div style=&quot;display: inline-block; font-size: 16px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;&quot;&gt;云服务&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/foreignObject&gt;&lt;text x=&quot;140&quot; y=&quot;105&quot; fill=&quot;rgb(0, 0, 0)&quot; font-family=&quot;Helvetica&quot; font-size=&quot;16px&quot; text-anchor=&quot;middle&quot;&gt;云服务&lt;/text&gt;&lt;/switch&gt;&lt;/g&gt;&lt;rect x=&quot;160&quot; y=&quot;300&quot; width=&quot;120&quot; height=&quot;60&quot; fill=&quot;rgb(255, 255, 255)&quot; stroke=&quot;rgb(0, 0, 0)&quot; pointer-events=&quot;all&quot;/&gt;&lt;g transform=&quot;translate(-0.5 -0.5)&quot;&gt;&lt;switch&gt;&lt;foreignObject pointer-events=&quot;none&quot; width=&quot;100%&quot; height=&quot;100%&quot; requiredFeatures=&quot;http://www.w3.org/TR/SVG11/feature#Extensibility&quot; style=&quot;overflow: visible; text-align: left;&quot;&gt;&lt;div xmlns=&quot;http://www.w3.org/1999/xhtml&quot; style=&quot;display: flex; align-items: unsafe center; justify-content: unsafe center; width: 118px; height: 1px; padding-top: 330px; margin-left: 161px;&quot;&gt;&lt;div data-drawio-colors=&quot;color: rgb(0, 0, 0); &quot; style=&quot;box-sizing: border-box; font-size: 0px; text-align: center;&quot;&gt;&lt;div style=&quot;display: inline-block; font-size: 16px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;&quot;&gt;环境监控终端&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/foreignObject&gt;&lt;text x=&quot;220&quot; y=&quot;335&quot; fill=&quot;rgb(0, 0, 0)&quot; font-family=&quot;Helvetica&quot; font-size=&quot;16px&quot; text-anchor=&quot;middle&quot;&gt;环境监控终端&lt;/text&gt;&lt;/switch&gt;&lt;/g&gt;&lt;rect x=&quot;320&quot; y=&quot;300&quot; width=&quot;120&quot; height=&quot;60&quot; fill=&quot;rgb(255, 255, 255)&quot; stroke=&quot;rgb(0, 0, 0)&quot; pointer-events=&quot;all&quot;/&gt;&lt;g transform=&quot;translate(-0.5 -0.5)&quot;&gt;&lt;switch&gt;&lt;foreignObject pointer-events=&quot;none&quot; width=&quot;100%&quot; height=&quot;100%&quot; requiredFeatures=&quot;http://www.w3.org/TR/SVG11/feature#Extensibility&quot; style=&quot;overflow: visible; text-align: left;&quot;&gt;&lt;div xmlns=&quot;http://www.w3.org/1999/xhtml&quot; style=&quot;display: flex; align-items: unsafe center; justify-content: unsafe center; width: 118px; height: 1px; padding-top: 330px; margin-left: 321px;&quot;&gt;&lt;div data-drawio-colors=&quot;color: rgb(0, 0, 0); &quot; style=&quot;box-sizing: border-box; font-size: 0px; text-align: center;&quot;&gt;&lt;div style=&quot;display: inline-block; font-size: 16px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;&quot;&gt;视频监控终端&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/foreignObject&gt;&lt;text x=&quot;380&quot; y=&quot;335&quot; fill=&quot;rgb(0, 0, 0)&quot; font-family=&quot;Helvetica&quot; font-size=&quot;16px&quot; text-anchor=&quot;middle&quot;&gt;视频监控终端&lt;/text&gt;&lt;/switch&gt;&lt;/g&gt;&lt;path d=&quot;M 375 269.5 L 364.5 269.5 L 380 250.5 L 395.5 269.5 L 385 269.5 L 385 280.5 L 395.5 280.5 L 380 299.5 L 364.5 280.5 L 375 280.5 Z&quot; fill=&quot;none&quot; stroke=&quot;rgb(0, 0, 0)&quot; stroke-miterlimit=&quot;10&quot; pointer-events=&quot;all&quot;/&gt;&lt;rect x=&quot;320&quot; y=&quot;190&quot; width=&quot;120&quot; height=&quot;60&quot; fill=&quot;rgb(255, 255, 255)&quot; stroke=&quot;rgb(0, 0, 0)&quot; pointer-events=&quot;all&quot;/&gt;&lt;g transform=&quot;translate(-0.5 -0.5)&quot;&gt;&lt;switch&gt;&lt;foreignObject pointer-events=&quot;none&quot; width=&quot;100%&quot; height=&quot;100%&quot; requiredFeatures=&quot;http://www.w3.org/TR/SVG11/feature#Extensibility&quot; style=&quot;overflow: visible; text-align: left;&quot;&gt;&lt;div xmlns=&quot;http://www.w3.org/1999/xhtml&quot; style=&quot;display: flex; align-items: unsafe center; justify-content: unsafe center; width: 118px; height: 1px; padding-top: 220px; margin-left: 321px;&quot;&gt;&lt;div data-drawio-colors=&quot;color: rgb(0, 0, 0); &quot; style=&quot;box-sizing: border-box; font-size: 0px; text-align: center;&quot;&gt;&lt;div style=&quot;display: inline-block; font-size: 16px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;&quot;&gt;智能巡检主机&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/foreignObject&gt;&lt;text x=&quot;380&quot; y=&quot;225&quot; fill=&quot;rgb(0, 0, 0)&quot; font-family=&quot;Helvetica&quot; font-size=&quot;16px&quot; text-anchor=&quot;middle&quot;&gt;智能巡检主机&lt;/text&gt;&lt;/switch&gt;&lt;/g&gt;&lt;path d=&quot;M 320.5 45 L 320.5 34.5 L 339.5 50 L 320.5 65.5 L 320.5 55 L 275.03 55 L 275.03 105 L 219.5 105 L 219.5 115.5 L 200.5 100 L 219.5 84.5 L 219.5 95 L 265.03 95 L 265.03 45 Z&quot; fill=&quot;none&quot; stroke=&quot;rgb(0, 0, 0)&quot; stroke-miterlimit=&quot;1.42&quot; pointer-events=&quot;all&quot;/&gt;&lt;path d=&quot;M 320.5 45 L 320.5 34.5 L 339.5 50 L 320.5 65.5 L 320.5 55&quot; fill=&quot;none&quot; stroke=&quot;rgb(0, 0, 0)&quot; stroke-miterlimit=&quot;4&quot; pointer-events=&quot;all&quot;/&gt;&lt;path d=&quot;M 219.5 105 L 219.5 115.5 L 200.5 100 L 219.5 84.5 L 219.5 95&quot; fill=&quot;none&quot; stroke=&quot;rgb(0, 0, 0)&quot; stroke-miterlimit=&quot;4&quot; pointer-events=&quot;all&quot;/&gt;&lt;path d=&quot;M 340 9.23 C 340 6.78 340.95 4.43 342.64 2.7 C 344.32 0.97 346.61 0 349 0 L 381 0 C 383.39 0 385.68 0.97 387.36 2.7 C 389.05 4.43 390 6.78 390 9.23 L 390 90.77 C 390 93.22 389.05 95.57 387.36 97.3 C 385.68 99.03 383.39 100 381 100 L 349 100 C 346.61 100 344.32 99.03 342.64 97.3 C 340.95 95.57 340 93.22 340 90.77 Z Z M 342 8.97 L 342 91.03 L 388.25 91.03 L 388.25 8.97 Z&quot; fill=&quot;rgb(255, 255, 255)&quot; stroke=&quot;#000000&quot; stroke-miterlimit=&quot;10&quot; pointer-events=&quot;all&quot;/&gt;&lt;ellipse cx=&quot;356.75&quot; cy=&quot;2.05&quot; rx=&quot;0.75&quot; ry=&quot;0.7692307692307692&quot; fill=&quot;#ffffff&quot; stroke=&quot;#000000&quot; pointer-events=&quot;all&quot;/&gt;&lt;rect x=&quot;359&quot; y=&quot;93.85&quot; width=&quot;12&quot; height=&quot;3.59&quot; rx=&quot;1.54&quot; ry=&quot;1.54&quot; fill=&quot;#ffffff&quot; stroke=&quot;#000000&quot; pointer-events=&quot;all&quot;/&gt;&lt;rect x=&quot;359.25&quot; y=&quot;1.79&quot; width=&quot;11.25&quot; height=&quot;1.28&quot; rx=&quot;0.51&quot; ry=&quot;0.51&quot; fill=&quot;#ffffff&quot; stroke=&quot;#000000&quot; pointer-events=&quot;all&quot;/&gt;&lt;ellipse cx=&quot;372.5&quot; cy=&quot;2.05&quot; rx=&quot;0.75&quot; ry=&quot;0.7692307692307692&quot; fill=&quot;#ffffff&quot; stroke=&quot;#000000&quot; pointer-events=&quot;all&quot;/&gt;&lt;ellipse cx=&quot;375&quot; cy=&quot;2.05&quot; rx=&quot;0.75&quot; ry=&quot;0.7692307692307692&quot; fill=&quot;#ffffff&quot; stroke=&quot;#000000&quot; pointer-events=&quot;all&quot;/&gt;&lt;ellipse cx=&quot;381.25&quot; cy=&quot;3.08&quot; rx=&quot;1&quot; ry=&quot;1.0256410256410255&quot; fill=&quot;#ffffff&quot; stroke=&quot;#000000&quot; pointer-events=&quot;all&quot;/&gt;&lt;g transform=&quot;translate(-0.5 -0.5)&quot;&gt;&lt;switch&gt;&lt;foreignObject pointer-events=&quot;none&quot; width=&quot;100%&quot; height=&quot;100%&quot; requiredFeatures=&quot;http://www.w3.org/TR/SVG11/feature#Extensibility&quot; style=&quot;overflow: visible; text-align: left;&quot;&gt;&lt;div xmlns=&quot;http://www.w3.org/1999/xhtml&quot; style=&quot;display: flex; align-items: unsafe flex-start; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 107px; margin-left: 365px;&quot;&gt;&lt;div data-drawio-colors=&quot;color: rgb(0, 0, 0); &quot; style=&quot;box-sizing: border-box; font-size: 0px; text-align: center;&quot;&gt;&lt;div style=&quot;display: inline-block; font-size: 16px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: nowrap;&quot;&gt;移动终端&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/foreignObject&gt;&lt;text x=&quot;365&quot; y=&quot;123&quot; fill=&quot;rgb(0, 0, 0)&quot; font-family=&quot;Helvetica&quot; font-size=&quot;16px&quot; text-anchor=&quot;middle&quot;&gt;移动终端&lt;/text&gt;&lt;/switch&gt;&lt;/g&gt;&lt;path d=&quot;M 250 160 L 250 0&quot; fill=&quot;none&quot; stroke=&quot;rgb(0, 0, 0)&quot; stroke-miterlimit=&quot;10&quot; stroke-dasharray=&quot;3 3&quot; pointer-events=&quot;stroke&quot;/&gt;&lt;path d=&quot;M 250 160 L 460 160&quot; fill=&quot;none&quot; stroke=&quot;rgb(0, 0, 0)&quot; stroke-miterlimit=&quot;10&quot; stroke-dasharray=&quot;3 3&quot; pointer-events=&quot;stroke&quot;/&gt;&lt;/g&gt;&lt;switch&gt;&lt;g requiredFeatures=&quot;http://www.w3.org/TR/SVG11/feature#Extensibility&quot;/&gt;&lt;a transform=&quot;translate(0,-5)&quot; xlink:href=&quot;https://www.diagrams.net/doc/faq/svg-export-text-problems&quot; target=&quot;_blank&quot;&gt;&lt;text text-anchor=&quot;middle&quot; font-size=&quot;10px&quot; x=&quot;50%&quot; y=&quot;100%&quot;&gt;Text is not SVG - cannot display&lt;/text&gt;&lt;/a&gt;&lt;/switch&gt;&lt;/svg&gt;&lt;/div&gt;
&lt;/p&gt;
&lt;/div&gt;

&lt;p&gt;
针对这些问题，这篇论文的解决方案是在辅控系统从设备端到云端用 OPC UA 进行统一通信。变电站传感器、摄像头、控制器等设备作为 OPC UA Publisher 发布服务器，实时提供采集到的数据。安全监控终端、动态环境监控系统、视频监控系统作为 OPC UA Subscriber 订阅客户端，接收来自底层设备的数据，同时对上提供 OPC UA Server 服务，供集成应用服务器和智能巡检系统访问。集成应用服务器提供数据服务给云上的 OPC UA 客户端应用访问。远程控制命令可以通过移动终端向云服务器发送命令。
&lt;/p&gt;

&lt;p&gt;
这对这个论文，我有一些疑惑：
&lt;/p&gt;

&lt;p&gt;
第一，论文中提到集成应用服务器接受到命令后，由服务器上的 OPC UA 客户端应用查询命令，再下发指令到变电站设备。这里就可能会有一些延时，不知道为什么要这么设计。或许，直接通过 OPC UA 服务器应用中的的方法调用客户端接口发送命令，效果会更好一些。
&lt;/p&gt;

&lt;p&gt;
第二，目前辅控系统中的那么多设备，是否都具有 OPC UA 通信能力？或许，这篇论文是选择了有 OPC UA 通信能力的设备联网，做了一个 PoC 验证测试。那么，OPC UA 在电网辅控系统中的应用，是否有前景？针对这个问题，我计划后续深入调研下，了解下这个领域的现状。
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>PowerizeD 项目</title>
   <link href="http://kimi.im/2023-02-13-PowerizeD"/>
   <updated>2023-02-13T00:00:00+00:00</updated>
   <id>http://kimi.im/PowerizeD</id>
   <content type="html">&lt;p&gt;
近日，欧洲多家企业联合发起了 PowerizeD 项目，关注于如何通过能源电子的数字化和智能化，提升发电和传输效率；如何提升控制、驱动、开关功能的集成性，总体优化能源开关的功能。如何通过新电路模型、高级控制策略及人工智能技术提升电力运营的健壮性和可靠性。项目的最终目标是为欧洲建立一个独立、可持续的电力能源发展愿景。
&lt;/p&gt;


&lt;p&gt;
项目还包括以下主题：
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;通过联邦学习技术保障数据安全：项目关注数据隐私，所以会使用联邦学习技术确保安全的分享数据、利用数据。通过加密传输敏感数据进行协作。&lt;/li&gt;
&lt;li&gt;创新使用数字孪生进行管控：利用数字孪生技术对实时电力运营进行监控，利用电力模型提升监控水平。&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;
PowerizeD 项目的具体使命是通过实现智能化的新产品和应用，达到以下目标：
&lt;/p&gt;
&lt;ol class=&quot;org-ol&quot;&gt;
&lt;li&gt;绿色能源：通过提升能源设备和系统的效率，减少 25% 的能源损耗。&lt;/li&gt;
&lt;li&gt;可持续运营：提升能源设备 30% 的使用寿命。&lt;/li&gt;
&lt;li&gt;安全运营：通过智能设备控制，提升运营的安全性和稳健性。&lt;/li&gt;
&lt;li&gt;通过技术革新，缩小能源设备使用的芯片尺寸 10-15%。&lt;/li&gt;
&lt;li&gt;缩短电力控制系统 50% 的设计时间&lt;/li&gt;
&lt;/ol&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines R.10 避免使用 malloc() 和 free()</title>
   <link href="http://kimi.im/2023-02-13-cppcoreguidelines-r10"/>
   <updated>2023-02-13T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-r10</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;Avoid malloc() and free()&amp;rdquo;
&lt;/p&gt;


&lt;p&gt;
理由
&lt;/p&gt;


&lt;p&gt;
&lt;code&gt;malloc()&lt;/code&gt; 和 &lt;code&gt;free()&lt;/code&gt; 不支持构造与析构，而且不能很好的和 &lt;code&gt;new&lt;/code&gt; 及 &lt;code&gt;delete&lt;/code&gt; 混用。
&lt;/p&gt;


&lt;p&gt;
例子
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Record&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;id&lt;/span&gt;;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;string&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;name&lt;/span&gt;;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;...&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;

&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;use&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;p1 might be nullptr&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;*p1 is not initialized; in particular,&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;that string isn&apos;t a string, but a string-sized bag of bits&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Record&lt;/span&gt;* &lt;span style=&quot;color: #000000;&quot;&gt;p1&lt;/span&gt; = &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;static_cast&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Record&lt;/span&gt;*&lt;span style=&quot;color: #7388d6;&quot;&gt;&amp;gt;(&lt;/span&gt;malloc&lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;sizeof&lt;/span&gt;&lt;span style=&quot;color: #709870;&quot;&gt;(&lt;/span&gt;Record&lt;span style=&quot;color: #709870;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;

    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;auto&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;p2&lt;/span&gt; = &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Record&lt;/span&gt;;

    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;unless an exception is thrown, *p2 is default initialized&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;auto&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;p3&lt;/span&gt; = &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;new&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;nothrow&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Record&lt;/span&gt;;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;p3 might be nullptr; if not, *p3 is default initialized&lt;/span&gt;

    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;...&lt;/span&gt;

    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;delete&lt;/span&gt; p1;    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;error: cannot delete object allocated by malloc()&lt;/span&gt;
    free&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;p2&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;error: cannot free() object allocated by new&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
有些实现中， &lt;code&gt;delete&lt;/code&gt; 与 &lt;code&gt;free()&lt;/code&gt; 混用可能能工作，但是也可能导致运行时错误。
&lt;/p&gt;


&lt;p&gt;
例外
&lt;/p&gt;

&lt;p&gt;
有些不能抛出异常的代码中可以用 malloc 和 free。比如有些关键的硬实时系统。但是请注意，大部分禁止使用异常都是坏的迷信，或者是因为不系统的资源管理。在这些情况下，可以考虑使用 nothrow 版本的 new。
&lt;/p&gt;


&lt;p&gt;
强化
&lt;/p&gt;

&lt;p&gt;
标记显式使用 malloc 和 free 的代码
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>开放封闭原则，Open–closed principle，OCP</title>
   <link href="http://kimi.im/2023-02-12-ocp"/>
   <updated>2023-02-12T00:00:00+00:00</updated>
   <id>http://kimi.im/ocp</id>
   <content type="html">&lt;blockquote&gt;
&lt;p&gt;
天地与我并生，而万物与我为一。既已为一矣，且得有言乎？既已谓之一矣，且得无言乎？一与言为二，二与一为三。自此以往，巧历不能得，而况其凡乎！故自无适有，以至于三，而况自有适有乎！无适焉，因是已！
&lt;/p&gt;

&lt;p&gt;
《庄子·齐物论》
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;
软件工程领域，有一个概念叫 SOLID。SOLID 是五个面向对象设计原则的首字母缩写。最早由 Robert C. Martin 在其 2000 年的论文《Design Principles
and Design Patterns》中提出的。
&lt;/p&gt;

&lt;p&gt;
其中，O 原则指的是 Open–closed principle，开放封闭原则，简称 OCP。
&lt;/p&gt;

&lt;p&gt;
OCP 是这么表述的：“Software entities … should be open for extension,
but closed for modification.” 软件实体应该开放于扩展，但封闭于修改。
&lt;/p&gt;

&lt;p&gt;
正如 Ivar Jacobson 所说的：“All systems change during their life
cycles. This must be borne in mind when developing systems expected to
last longer than the first version.” （在其生存周期中，任何系统都会改变。只要系统还有后续版本，就要在开发过程中，清醒的意识到，系统后续一定会改变）。所以，设计系统的时候要遵循 OCP 原则。这意味着一个软件实体是允许在不改变它的源代码的前提下扩展它的行为。该原则在生产环境中是特别有价值的，在这种环境中，改变源代码需要代码审查，单元测试等用以确保产品使用质量的过程。遵循这种原则的代码在扩展时本身并不发生改变，因此无需上述的过程。只需对扩展部分进行质量保障即可。
&lt;/p&gt;

&lt;p&gt;
符合 OCP 原则的模块遵循两个属性：
&lt;/p&gt;

&lt;ol class=&quot;org-ol&quot;&gt;
&lt;li&gt;&lt;p&gt;
扩展模块是开放的
&lt;/p&gt;

&lt;p&gt;
就是说，模块的行为是可以扩展的。根据新的需求，我们可以扩展模块，调整它的行为。
&lt;/p&gt;&lt;/li&gt;

&lt;li&gt;&lt;p&gt;
修改模块是封闭的
&lt;/p&gt;

&lt;p&gt;
模块本身的代码是封闭的。不允许修改模块的代码来改变它的行为。
&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;


&lt;p&gt;
一般认为，要修改一个模块的行为，就应该修改模块的代码，如果模块的代码不允许修改，那怎么调整它的行为？
&lt;/p&gt;

&lt;p&gt;
这里的关键技术就是抽象。
&lt;/p&gt;

&lt;p&gt;
在面向对象语言中，我们可以创建一个抽象类。这个抽象类本身的行为接口是确定的，但是它的继承类，可以扩展它的功能。而使用这个抽象类的模块，只是依赖与抽象类的接口，所以这个修改这个模块是封闭的。但是可以通过扩展抽象类，调整模块的行为。
&lt;/p&gt;


&lt;div id=&quot;orgc768cb5&quot; class=&quot;figure&quot;&gt;
&lt;p&gt;&lt;div align=&quot;center&quot;&gt;&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; xmlns:xlink=&quot;http://www.w3.org/1999/xlink&quot; contentStyleType=&quot;text/css&quot; height=&quot;46px&quot; preserveAspectRatio=&quot;none&quot; style=&quot;width:191px;height:46px;background:#FFFFFF;&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 191 46&quot; width=&quot;191px&quot; zoomAndPan=&quot;magnify&quot;&gt;&lt;defs/&gt;&lt;g&gt;&lt;!--MD5=[378b18254a1b2429f435e93f5e5cc50c]
class C--&gt;&lt;g id=&quot;elem_C&quot;&gt;&lt;rect codeLine=&quot;4&quot; fill=&quot;#F1F1F1&quot; height=&quot;32&quot; id=&quot;C&quot; rx=&quot;2.5&quot; ry=&quot;2.5&quot; style=&quot;stroke:#181818;stroke-width:0.5;&quot; width=&quot;68&quot; x=&quot;7&quot; y=&quot;7&quot;/&gt;&lt;ellipse cx=&quot;22&quot; cy=&quot;23&quot; fill=&quot;#ADD1B2&quot; rx=&quot;11&quot; ry=&quot;11&quot; style=&quot;stroke:#181818;stroke-width:1.0;&quot;/&gt;&lt;path d=&quot;M24.7656,18.875 Q24.9219,18.6563 25.1094,18.5469 Q25.2969,18.4375 25.5156,18.4375 Q25.8906,18.4375 26.125,18.7031 Q26.3594,18.9531 26.3594,19.5625 L26.3594,21.0156 Q26.3594,21.625 26.125,21.8906 Q25.8906,22.1563 25.5156,22.1563 Q25.1719,22.1563 24.9688,21.9531 Q24.7656,21.7656 24.6563,21.25 Q24.6094,20.8906 24.4219,20.7031 Q24.0938,20.3281 23.4844,20.1094 Q22.875,19.8906 22.25,19.8906 Q21.4844,19.8906 20.8438,20.2188 Q20.2188,20.5469 19.7188,21.2969 Q19.2344,22.0469 19.2344,23.0781 L19.2344,24.1719 Q19.2344,25.4063 20.125,26.2344 Q21.0156,27.0469 22.6094,27.0469 Q23.5469,27.0469 24.2031,26.7969 Q24.5938,26.6406 25.0156,26.2031 Q25.2813,25.9375 25.4219,25.8594 Q25.5781,25.7813 25.7813,25.7813 Q26.1094,25.7813 26.3594,26.0469 Q26.625,26.2969 26.625,26.6406 Q26.625,26.9844 26.2813,27.3906 Q25.7813,27.9688 24.9844,28.2969 Q23.9063,28.75 22.6094,28.75 Q21.0938,28.75 19.8906,28.125 Q18.9063,27.625 18.2188,26.5625 Q17.5313,25.4844 17.5313,24.2031 L17.5313,23.0469 Q17.5313,21.7188 18.1406,20.5781 Q18.7656,19.4219 19.8594,18.8125 Q20.9531,18.1875 22.1875,18.1875 Q22.9219,18.1875 23.5625,18.3594 Q24.2188,18.5156 24.7656,18.875 Z &quot; fill=&quot;#000000&quot;/&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;14&quot; lengthAdjust=&quot;spacing&quot; textLength=&quot;36&quot; x=&quot;36&quot; y=&quot;28.7285&quot;&gt;Client&lt;/text&gt;&lt;/g&gt;&lt;!--MD5=[8d919f42174a8592853f0e252dac1126]
class S--&gt;&lt;g id=&quot;elem_S&quot;&gt;&lt;rect codeLine=&quot;5&quot; fill=&quot;#F1F1F1&quot; height=&quot;32&quot; id=&quot;S&quot; rx=&quot;2.5&quot; ry=&quot;2.5&quot; style=&quot;stroke:#181818;stroke-width:0.5;&quot; width=&quot;74&quot; x=&quot;110&quot; y=&quot;7&quot;/&gt;&lt;ellipse cx=&quot;125&quot; cy=&quot;23&quot; fill=&quot;#ADD1B2&quot; rx=&quot;11&quot; ry=&quot;11&quot; style=&quot;stroke:#181818;stroke-width:1.0;&quot;/&gt;&lt;path d=&quot;M127.7656,18.875 Q127.9219,18.6563 128.1094,18.5469 Q128.2969,18.4375 128.5156,18.4375 Q128.8906,18.4375 129.125,18.7031 Q129.3594,18.9531 129.3594,19.5625 L129.3594,21.0156 Q129.3594,21.625 129.125,21.8906 Q128.8906,22.1563 128.5156,22.1563 Q128.1719,22.1563 127.9688,21.9531 Q127.7656,21.7656 127.6563,21.25 Q127.6094,20.8906 127.4219,20.7031 Q127.0938,20.3281 126.4844,20.1094 Q125.875,19.8906 125.25,19.8906 Q124.4844,19.8906 123.8438,20.2188 Q123.2188,20.5469 122.7188,21.2969 Q122.2344,22.0469 122.2344,23.0781 L122.2344,24.1719 Q122.2344,25.4063 123.125,26.2344 Q124.0156,27.0469 125.6094,27.0469 Q126.5469,27.0469 127.2031,26.7969 Q127.5938,26.6406 128.0156,26.2031 Q128.2813,25.9375 128.4219,25.8594 Q128.5781,25.7813 128.7813,25.7813 Q129.1094,25.7813 129.3594,26.0469 Q129.625,26.2969 129.625,26.6406 Q129.625,26.9844 129.2813,27.3906 Q128.7813,27.9688 127.9844,28.2969 Q126.9063,28.75 125.6094,28.75 Q124.0938,28.75 122.8906,28.125 Q121.9063,27.625 121.2188,26.5625 Q120.5313,25.4844 120.5313,24.2031 L120.5313,23.0469 Q120.5313,21.7188 121.1406,20.5781 Q121.7656,19.4219 122.8594,18.8125 Q123.9531,18.1875 125.1875,18.1875 Q125.9219,18.1875 126.5625,18.3594 Q127.2188,18.5156 127.7656,18.875 Z &quot; fill=&quot;#000000&quot;/&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;14&quot; lengthAdjust=&quot;spacing&quot; textLength=&quot;42&quot; x=&quot;139&quot; y=&quot;28.7285&quot;&gt;Server&lt;/text&gt;&lt;/g&gt;&lt;!--MD5=[b8d56df72565c580b38a92b1aa5c5263]
reverse link C to S--&gt;&lt;g id=&quot;link_C_S&quot;&gt;&lt;path codeLine=&quot;6&quot; d=&quot;M88.54,23 C95.62,23 102.7,23 109.78,23 &quot; fill=&quot;none&quot; id=&quot;C-backto-S&quot; style=&quot;stroke:#181818;stroke-width:1.0;&quot;/&gt;&lt;polygon fill=&quot;none&quot; points=&quot;75.37,23,81.37,27,87.37,23,81.37,19,75.37,23&quot; style=&quot;stroke:#181818;stroke-width:1.0;&quot;/&gt;&lt;/g&gt;&lt;!--MD5=[2223f6611409b2b7b65a3b2ea1112ff6]
@startuml
&apos;sequence no length than 20
hide footbox
hide unlinked
class &quot;Client&quot; as C
class &quot;Server&quot; as S
S -lo C
hide members
@enduml

@startuml
hide footbox
hide unlinked
class &quot;Client&quot; as C
class &quot;Server&quot; as S
S -lo C
hide members
@enduml

PlantUML version 1.2022.3beta3(Unknown compile time)
(GPL source distribution)
Java Runtime: OpenJDK Runtime Environment
JVM: OpenJDK 64-Bit Server VM
Default Encoding: Cp1252
Language: en
Country: US
--&gt;&lt;/g&gt;&lt;/svg&gt;&lt;/div&gt;
&lt;/p&gt;
&lt;p&gt;&lt;span class=&quot;figure-number&quot;&gt;Figure 1: &lt;/span&gt;封闭的客户端&lt;/p&gt;
&lt;/div&gt;

&lt;p&gt;
比如图 &lt;a href=&quot;#orgc768cb5&quot;&gt;1&lt;/a&gt;，描述的设计就没有遵循开放封闭原则。Client 和
Server 类都是具体类，我们不能确保 Server 类的成员函数都是虚函数。如果
Client 要改用别的 Server 对象， 我们就要 Client 的代码，以适配新的
Server 类。
&lt;/p&gt;


&lt;div id=&quot;org55bc40b&quot; class=&quot;figure&quot;&gt;
&lt;p&gt;&lt;div align=&quot;center&quot;&gt;&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; xmlns:xlink=&quot;http://www.w3.org/1999/xlink&quot; contentStyleType=&quot;text/css&quot; height=&quot;138px&quot; preserveAspectRatio=&quot;none&quot; style=&quot;width:242px;height:138px;background:#FFFFFF;&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 242 138&quot; width=&quot;242px&quot; zoomAndPan=&quot;magnify&quot;&gt;&lt;defs/&gt;&lt;g&gt;&lt;!--MD5=[378b18254a1b2429f435e93f5e5cc50c]
class C--&gt;&lt;g id=&quot;elem_C&quot;&gt;&lt;rect codeLine=&quot;4&quot; fill=&quot;#F1F1F1&quot; height=&quot;32&quot; id=&quot;C&quot; rx=&quot;2.5&quot; ry=&quot;2.5&quot; style=&quot;stroke:#181818;stroke-width:0.5;&quot; width=&quot;68&quot; x=&quot;7&quot; y=&quot;7&quot;/&gt;&lt;ellipse cx=&quot;22&quot; cy=&quot;23&quot; fill=&quot;#ADD1B2&quot; rx=&quot;11&quot; ry=&quot;11&quot; style=&quot;stroke:#181818;stroke-width:1.0;&quot;/&gt;&lt;path d=&quot;M24.7656,18.875 Q24.9219,18.6563 25.1094,18.5469 Q25.2969,18.4375 25.5156,18.4375 Q25.8906,18.4375 26.125,18.7031 Q26.3594,18.9531 26.3594,19.5625 L26.3594,21.0156 Q26.3594,21.625 26.125,21.8906 Q25.8906,22.1563 25.5156,22.1563 Q25.1719,22.1563 24.9688,21.9531 Q24.7656,21.7656 24.6563,21.25 Q24.6094,20.8906 24.4219,20.7031 Q24.0938,20.3281 23.4844,20.1094 Q22.875,19.8906 22.25,19.8906 Q21.4844,19.8906 20.8438,20.2188 Q20.2188,20.5469 19.7188,21.2969 Q19.2344,22.0469 19.2344,23.0781 L19.2344,24.1719 Q19.2344,25.4063 20.125,26.2344 Q21.0156,27.0469 22.6094,27.0469 Q23.5469,27.0469 24.2031,26.7969 Q24.5938,26.6406 25.0156,26.2031 Q25.2813,25.9375 25.4219,25.8594 Q25.5781,25.7813 25.7813,25.7813 Q26.1094,25.7813 26.3594,26.0469 Q26.625,26.2969 26.625,26.6406 Q26.625,26.9844 26.2813,27.3906 Q25.7813,27.9688 24.9844,28.2969 Q23.9063,28.75 22.6094,28.75 Q21.0938,28.75 19.8906,28.125 Q18.9063,27.625 18.2188,26.5625 Q17.5313,25.4844 17.5313,24.2031 L17.5313,23.0469 Q17.5313,21.7188 18.1406,20.5781 Q18.7656,19.4219 19.8594,18.8125 Q20.9531,18.1875 22.1875,18.1875 Q22.9219,18.1875 23.5625,18.3594 Q24.2188,18.5156 24.7656,18.875 Z &quot; fill=&quot;#000000&quot;/&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;14&quot; lengthAdjust=&quot;spacing&quot; textLength=&quot;36&quot; x=&quot;36&quot; y=&quot;28.7285&quot;&gt;Client&lt;/text&gt;&lt;/g&gt;&lt;!--MD5=[af0c02eee1ec217e23844599855444ef]
class AS--&gt;&lt;g id=&quot;elem_AS&quot;&gt;&lt;rect codeLine=&quot;5&quot; fill=&quot;#F1F1F1&quot; height=&quot;32&quot; id=&quot;AS&quot; rx=&quot;2.5&quot; ry=&quot;2.5&quot; style=&quot;stroke:#181818;stroke-width:0.5;&quot; width=&quot;125&quot; x=&quot;110.5&quot; y=&quot;7&quot;/&gt;&lt;ellipse cx=&quot;125.5&quot; cy=&quot;23&quot; fill=&quot;#A9DCDF&quot; rx=&quot;11&quot; ry=&quot;11&quot; style=&quot;stroke:#181818;stroke-width:1.0;&quot;/&gt;&lt;path d=&quot;M127.6875,24.7656 L123.5469,24.7656 L123.125,25.7969 L123.5469,25.7969 Q124.1563,25.7969 124.4219,26.0313 Q124.6875,26.2656 124.6875,26.6563 Q124.6875,27.0313 124.4219,27.2656 Q124.1563,27.5 123.5469,27.5 L121.25,27.5 Q120.6406,27.5 120.3906,27.2656 Q120.125,27.0313 120.125,26.6406 Q120.125,26.2656 120.4063,26.0313 Q120.6719,25.7813 121.2969,25.7969 L123.9688,19.1406 L122.8594,19.1406 Q122.25,19.1406 121.9844,18.9063 Q121.7188,18.6719 121.7188,18.2813 Q121.7188,17.9063 121.9844,17.6719 Q122.25,17.4375 122.8594,17.4375 L126.5313,17.4375 L129.9219,25.7969 Q130.5156,25.7969 130.7031,25.9375 Q131.0938,26.2031 131.0938,26.6563 Q131.0938,27.0313 130.8281,27.2656 Q130.5781,27.5 129.9688,27.5 L127.6719,27.5 Q127.0625,27.5 126.7969,27.2656 Q126.5313,27.0313 126.5313,26.6406 Q126.5313,26.2656 126.7969,26.0313 Q127.0625,25.7969 127.6719,25.7969 L128.0938,25.7969 L127.6875,24.7656 Z M126.9688,23.0625 L125.6094,19.6875 L124.2344,23.0625 L126.9688,23.0625 Z &quot; fill=&quot;#000000&quot;/&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;14&quot; font-style=&quot;italic&quot; lengthAdjust=&quot;spacing&quot; textLength=&quot;93&quot; x=&quot;139.5&quot; y=&quot;28.7285&quot;&gt;AbstractServer&lt;/text&gt;&lt;/g&gt;&lt;!--MD5=[8d919f42174a8592853f0e252dac1126]
class S--&gt;&lt;g id=&quot;elem_S&quot;&gt;&lt;rect codeLine=&quot;6&quot; fill=&quot;#F1F1F1&quot; height=&quot;32&quot; id=&quot;S&quot; rx=&quot;2.5&quot; ry=&quot;2.5&quot; style=&quot;stroke:#181818;stroke-width:0.5;&quot; width=&quot;74&quot; x=&quot;136&quot; y=&quot;99&quot;/&gt;&lt;ellipse cx=&quot;151&quot; cy=&quot;115&quot; fill=&quot;#ADD1B2&quot; rx=&quot;11&quot; ry=&quot;11&quot; style=&quot;stroke:#181818;stroke-width:1.0;&quot;/&gt;&lt;path d=&quot;M153.7656,110.875 Q153.9219,110.6563 154.1094,110.5469 Q154.2969,110.4375 154.5156,110.4375 Q154.8906,110.4375 155.125,110.7031 Q155.3594,110.9531 155.3594,111.5625 L155.3594,113.0156 Q155.3594,113.625 155.125,113.8906 Q154.8906,114.1563 154.5156,114.1563 Q154.1719,114.1563 153.9688,113.9531 Q153.7656,113.7656 153.6563,113.25 Q153.6094,112.8906 153.4219,112.7031 Q153.0938,112.3281 152.4844,112.1094 Q151.875,111.8906 151.25,111.8906 Q150.4844,111.8906 149.8438,112.2188 Q149.2188,112.5469 148.7188,113.2969 Q148.2344,114.0469 148.2344,115.0781 L148.2344,116.1719 Q148.2344,117.4063 149.125,118.2344 Q150.0156,119.0469 151.6094,119.0469 Q152.5469,119.0469 153.2031,118.7969 Q153.5938,118.6406 154.0156,118.2031 Q154.2813,117.9375 154.4219,117.8594 Q154.5781,117.7813 154.7813,117.7813 Q155.1094,117.7813 155.3594,118.0469 Q155.625,118.2969 155.625,118.6406 Q155.625,118.9844 155.2813,119.3906 Q154.7813,119.9688 153.9844,120.2969 Q152.9063,120.75 151.6094,120.75 Q150.0938,120.75 148.8906,120.125 Q147.9063,119.625 147.2188,118.5625 Q146.5313,117.4844 146.5313,116.2031 L146.5313,115.0469 Q146.5313,113.7188 147.1406,112.5781 Q147.7656,111.4219 148.8594,110.8125 Q149.9531,110.1875 151.1875,110.1875 Q151.9219,110.1875 152.5625,110.3594 Q153.2188,110.5156 153.7656,110.875 Z &quot; fill=&quot;#000000&quot;/&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;14&quot; lengthAdjust=&quot;spacing&quot; textLength=&quot;42&quot; x=&quot;165&quot; y=&quot;120.7285&quot;&gt;Server&lt;/text&gt;&lt;/g&gt;&lt;!--MD5=[f2b07859e2f17d237346e74095a2919b]
reverse link C to AS--&gt;&lt;g id=&quot;link_C_AS&quot;&gt;&lt;path codeLine=&quot;7&quot; d=&quot;M88.23,23 C95.57,23 102.9,23 110.24,23 &quot; fill=&quot;none&quot; id=&quot;C-backto-AS&quot; style=&quot;stroke:#181818;stroke-width:1.0;&quot;/&gt;&lt;polygon fill=&quot;none&quot; points=&quot;75.03,23,81.03,27,87.03,23,81.03,19,75.03,23&quot; style=&quot;stroke:#181818;stroke-width:1.0;&quot;/&gt;&lt;/g&gt;&lt;!--MD5=[8b1558a572ae4853efe509bc4b5b6380]
reverse link AS to S--&gt;&lt;g id=&quot;link_AS_S&quot;&gt;&lt;path codeLine=&quot;8&quot; d=&quot;M173,59.61 C173,73.31 173,88.22 173,98.96 &quot; fill=&quot;none&quot; id=&quot;AS-backto-S&quot; style=&quot;stroke:#181818;stroke-width:1.0;&quot;/&gt;&lt;polygon fill=&quot;none&quot; points=&quot;166,59.27,173,39.27,180,59.27,166,59.27&quot; style=&quot;stroke:#181818;stroke-width:1.0;&quot;/&gt;&lt;/g&gt;&lt;!--MD5=[0774ff0e336413de10472c601a9a2c7f]
@startuml
&apos;sequence no length than 20
hide footbox
hide unlinked
class &quot;Client&quot; as C
abstract class &quot;AbstractServer&quot; as AS
class &quot;Server&quot; as S
AS -lo C
S -u-|&gt; AS
hide members
@enduml

@startuml
hide footbox
hide unlinked
class &quot;Client&quot; as C
abstract class &quot;AbstractServer&quot; as AS
class &quot;Server&quot; as S
AS -lo C
S -u-|&gt; AS
hide members
@enduml

PlantUML version 1.2022.3beta3(Unknown compile time)
(GPL source distribution)
Java Runtime: OpenJDK Runtime Environment
JVM: OpenJDK 64-Bit Server VM
Default Encoding: Cp1252
Language: en
Country: US
--&gt;&lt;/g&gt;&lt;/svg&gt;&lt;/div&gt;
&lt;/p&gt;
&lt;p&gt;&lt;span class=&quot;figure-number&quot;&gt;Figure 2: &lt;/span&gt;开放的客户端&lt;/p&gt;
&lt;/div&gt;

&lt;p&gt;
图 &lt;a href=&quot;#org55bc40b&quot;&gt;2&lt;/a&gt; 描述的设计就符合开放封闭原则。我们添加了一个
AbstractServer 抽象类。抽象类的成员函数都是纯虚函数。Client 调用抽象接口。至于具体实现，则由 AbstractServer 的继承类 Server 完成。如果
Client 要用不同的 Server 实现，只要从 AbstractServer 派生一个新的类，给 Client 用就可以了。Client 本身的代码逻辑就不需要修改了。如图
&lt;a href=&quot;#orgcd12ff2&quot;&gt;3&lt;/a&gt; 所示。
&lt;/p&gt;


&lt;div id=&quot;orgcd12ff2&quot; class=&quot;figure&quot;&gt;
&lt;p&gt;&lt;div align=&quot;center&quot;&gt;&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; xmlns:xlink=&quot;http://www.w3.org/1999/xlink&quot; contentStyleType=&quot;text/css&quot; height=&quot;138px&quot; preserveAspectRatio=&quot;none&quot; style=&quot;width:291px;height:138px;background:#FFFFFF;&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 291 138&quot; width=&quot;291px&quot; zoomAndPan=&quot;magnify&quot;&gt;&lt;defs/&gt;&lt;g&gt;&lt;!--MD5=[378b18254a1b2429f435e93f5e5cc50c]
class C--&gt;&lt;g id=&quot;elem_C&quot;&gt;&lt;rect codeLine=&quot;4&quot; fill=&quot;#F1F1F1&quot; height=&quot;32&quot; id=&quot;C&quot; rx=&quot;2.5&quot; ry=&quot;2.5&quot; style=&quot;stroke:#181818;stroke-width:0.5;&quot; width=&quot;68&quot; x=&quot;7&quot; y=&quot;7&quot;/&gt;&lt;ellipse cx=&quot;22&quot; cy=&quot;23&quot; fill=&quot;#ADD1B2&quot; rx=&quot;11&quot; ry=&quot;11&quot; style=&quot;stroke:#181818;stroke-width:1.0;&quot;/&gt;&lt;path d=&quot;M24.7656,18.875 Q24.9219,18.6563 25.1094,18.5469 Q25.2969,18.4375 25.5156,18.4375 Q25.8906,18.4375 26.125,18.7031 Q26.3594,18.9531 26.3594,19.5625 L26.3594,21.0156 Q26.3594,21.625 26.125,21.8906 Q25.8906,22.1563 25.5156,22.1563 Q25.1719,22.1563 24.9688,21.9531 Q24.7656,21.7656 24.6563,21.25 Q24.6094,20.8906 24.4219,20.7031 Q24.0938,20.3281 23.4844,20.1094 Q22.875,19.8906 22.25,19.8906 Q21.4844,19.8906 20.8438,20.2188 Q20.2188,20.5469 19.7188,21.2969 Q19.2344,22.0469 19.2344,23.0781 L19.2344,24.1719 Q19.2344,25.4063 20.125,26.2344 Q21.0156,27.0469 22.6094,27.0469 Q23.5469,27.0469 24.2031,26.7969 Q24.5938,26.6406 25.0156,26.2031 Q25.2813,25.9375 25.4219,25.8594 Q25.5781,25.7813 25.7813,25.7813 Q26.1094,25.7813 26.3594,26.0469 Q26.625,26.2969 26.625,26.6406 Q26.625,26.9844 26.2813,27.3906 Q25.7813,27.9688 24.9844,28.2969 Q23.9063,28.75 22.6094,28.75 Q21.0938,28.75 19.8906,28.125 Q18.9063,27.625 18.2188,26.5625 Q17.5313,25.4844 17.5313,24.2031 L17.5313,23.0469 Q17.5313,21.7188 18.1406,20.5781 Q18.7656,19.4219 19.8594,18.8125 Q20.9531,18.1875 22.1875,18.1875 Q22.9219,18.1875 23.5625,18.3594 Q24.2188,18.5156 24.7656,18.875 Z &quot; fill=&quot;#000000&quot;/&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;14&quot; lengthAdjust=&quot;spacing&quot; textLength=&quot;36&quot; x=&quot;36&quot; y=&quot;28.7285&quot;&gt;Client&lt;/text&gt;&lt;/g&gt;&lt;!--MD5=[af0c02eee1ec217e23844599855444ef]
class AS--&gt;&lt;g id=&quot;elem_AS&quot;&gt;&lt;rect codeLine=&quot;5&quot; fill=&quot;#F1F1F1&quot; height=&quot;32&quot; id=&quot;AS&quot; rx=&quot;2.5&quot; ry=&quot;2.5&quot; style=&quot;stroke:#181818;stroke-width:0.5;&quot; width=&quot;125&quot; x=&quot;110.5&quot; y=&quot;7&quot;/&gt;&lt;ellipse cx=&quot;125.5&quot; cy=&quot;23&quot; fill=&quot;#A9DCDF&quot; rx=&quot;11&quot; ry=&quot;11&quot; style=&quot;stroke:#181818;stroke-width:1.0;&quot;/&gt;&lt;path d=&quot;M127.6875,24.7656 L123.5469,24.7656 L123.125,25.7969 L123.5469,25.7969 Q124.1563,25.7969 124.4219,26.0313 Q124.6875,26.2656 124.6875,26.6563 Q124.6875,27.0313 124.4219,27.2656 Q124.1563,27.5 123.5469,27.5 L121.25,27.5 Q120.6406,27.5 120.3906,27.2656 Q120.125,27.0313 120.125,26.6406 Q120.125,26.2656 120.4063,26.0313 Q120.6719,25.7813 121.2969,25.7969 L123.9688,19.1406 L122.8594,19.1406 Q122.25,19.1406 121.9844,18.9063 Q121.7188,18.6719 121.7188,18.2813 Q121.7188,17.9063 121.9844,17.6719 Q122.25,17.4375 122.8594,17.4375 L126.5313,17.4375 L129.9219,25.7969 Q130.5156,25.7969 130.7031,25.9375 Q131.0938,26.2031 131.0938,26.6563 Q131.0938,27.0313 130.8281,27.2656 Q130.5781,27.5 129.9688,27.5 L127.6719,27.5 Q127.0625,27.5 126.7969,27.2656 Q126.5313,27.0313 126.5313,26.6406 Q126.5313,26.2656 126.7969,26.0313 Q127.0625,25.7969 127.6719,25.7969 L128.0938,25.7969 L127.6875,24.7656 Z M126.9688,23.0625 L125.6094,19.6875 L124.2344,23.0625 L126.9688,23.0625 Z &quot; fill=&quot;#000000&quot;/&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;14&quot; font-style=&quot;italic&quot; lengthAdjust=&quot;spacing&quot; textLength=&quot;93&quot; x=&quot;139.5&quot; y=&quot;28.7285&quot;&gt;AbstractServer&lt;/text&gt;&lt;/g&gt;&lt;!--MD5=[8d919f42174a8592853f0e252dac1126]
class S--&gt;&lt;g id=&quot;elem_S&quot;&gt;&lt;rect codeLine=&quot;6&quot; fill=&quot;#F1F1F1&quot; height=&quot;32&quot; id=&quot;S&quot; rx=&quot;2.5&quot; ry=&quot;2.5&quot; style=&quot;stroke:#181818;stroke-width:0.5;&quot; width=&quot;74&quot; x=&quot;75&quot; y=&quot;99&quot;/&gt;&lt;ellipse cx=&quot;90&quot; cy=&quot;115&quot; fill=&quot;#ADD1B2&quot; rx=&quot;11&quot; ry=&quot;11&quot; style=&quot;stroke:#181818;stroke-width:1.0;&quot;/&gt;&lt;path d=&quot;M92.7656,110.875 Q92.9219,110.6563 93.1094,110.5469 Q93.2969,110.4375 93.5156,110.4375 Q93.8906,110.4375 94.125,110.7031 Q94.3594,110.9531 94.3594,111.5625 L94.3594,113.0156 Q94.3594,113.625 94.125,113.8906 Q93.8906,114.1563 93.5156,114.1563 Q93.1719,114.1563 92.9688,113.9531 Q92.7656,113.7656 92.6563,113.25 Q92.6094,112.8906 92.4219,112.7031 Q92.0938,112.3281 91.4844,112.1094 Q90.875,111.8906 90.25,111.8906 Q89.4844,111.8906 88.8438,112.2188 Q88.2188,112.5469 87.7188,113.2969 Q87.2344,114.0469 87.2344,115.0781 L87.2344,116.1719 Q87.2344,117.4063 88.125,118.2344 Q89.0156,119.0469 90.6094,119.0469 Q91.5469,119.0469 92.2031,118.7969 Q92.5938,118.6406 93.0156,118.2031 Q93.2813,117.9375 93.4219,117.8594 Q93.5781,117.7813 93.7813,117.7813 Q94.1094,117.7813 94.3594,118.0469 Q94.625,118.2969 94.625,118.6406 Q94.625,118.9844 94.2813,119.3906 Q93.7813,119.9688 92.9844,120.2969 Q91.9063,120.75 90.6094,120.75 Q89.0938,120.75 87.8906,120.125 Q86.9063,119.625 86.2188,118.5625 Q85.5313,117.4844 85.5313,116.2031 L85.5313,115.0469 Q85.5313,113.7188 86.1406,112.5781 Q86.7656,111.4219 87.8594,110.8125 Q88.9531,110.1875 90.1875,110.1875 Q90.9219,110.1875 91.5625,110.3594 Q92.2188,110.5156 92.7656,110.875 Z &quot; fill=&quot;#000000&quot;/&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;14&quot; lengthAdjust=&quot;spacing&quot; textLength=&quot;42&quot; x=&quot;104&quot; y=&quot;120.7285&quot;&gt;Server&lt;/text&gt;&lt;/g&gt;&lt;!--MD5=[e3745221521e0fb6d07354c4adcb2374]
class NS--&gt;&lt;g id=&quot;elem_NS&quot;&gt;&lt;rect codeLine=&quot;7&quot; fill=&quot;#F1F1F1&quot; height=&quot;32&quot; id=&quot;NS&quot; rx=&quot;2.5&quot; ry=&quot;2.5&quot; style=&quot;stroke:#181818;stroke-width:0.5;&quot; width=&quot;100&quot; x=&quot;184&quot; y=&quot;99&quot;/&gt;&lt;ellipse cx=&quot;199&quot; cy=&quot;115&quot; fill=&quot;#ADD1B2&quot; rx=&quot;11&quot; ry=&quot;11&quot; style=&quot;stroke:#181818;stroke-width:1.0;&quot;/&gt;&lt;path d=&quot;M201.7656,110.875 Q201.9219,110.6563 202.1094,110.5469 Q202.2969,110.4375 202.5156,110.4375 Q202.8906,110.4375 203.125,110.7031 Q203.3594,110.9531 203.3594,111.5625 L203.3594,113.0156 Q203.3594,113.625 203.125,113.8906 Q202.8906,114.1563 202.5156,114.1563 Q202.1719,114.1563 201.9688,113.9531 Q201.7656,113.7656 201.6563,113.25 Q201.6094,112.8906 201.4219,112.7031 Q201.0938,112.3281 200.4844,112.1094 Q199.875,111.8906 199.25,111.8906 Q198.4844,111.8906 197.8438,112.2188 Q197.2188,112.5469 196.7188,113.2969 Q196.2344,114.0469 196.2344,115.0781 L196.2344,116.1719 Q196.2344,117.4063 197.125,118.2344 Q198.0156,119.0469 199.6094,119.0469 Q200.5469,119.0469 201.2031,118.7969 Q201.5938,118.6406 202.0156,118.2031 Q202.2813,117.9375 202.4219,117.8594 Q202.5781,117.7813 202.7813,117.7813 Q203.1094,117.7813 203.3594,118.0469 Q203.625,118.2969 203.625,118.6406 Q203.625,118.9844 203.2813,119.3906 Q202.7813,119.9688 201.9844,120.2969 Q200.9063,120.75 199.6094,120.75 Q198.0938,120.75 196.8906,120.125 Q195.9063,119.625 195.2188,118.5625 Q194.5313,117.4844 194.5313,116.2031 L194.5313,115.0469 Q194.5313,113.7188 195.1406,112.5781 Q195.7656,111.4219 196.8594,110.8125 Q197.9531,110.1875 199.1875,110.1875 Q199.9219,110.1875 200.5625,110.3594 Q201.2188,110.5156 201.7656,110.875 Z &quot; fill=&quot;#000000&quot;/&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;14&quot; lengthAdjust=&quot;spacing&quot; textLength=&quot;68&quot; x=&quot;213&quot; y=&quot;120.7285&quot;&gt;NewServer&lt;/text&gt;&lt;/g&gt;&lt;!--MD5=[f2b07859e2f17d237346e74095a2919b]
reverse link C to AS--&gt;&lt;g id=&quot;link_C_AS&quot;&gt;&lt;path codeLine=&quot;9&quot; d=&quot;M88.23,23 C95.57,23 102.9,23 110.24,23 &quot; fill=&quot;none&quot; id=&quot;C-backto-AS&quot; style=&quot;stroke:#181818;stroke-width:1.0;&quot;/&gt;&lt;polygon fill=&quot;none&quot; points=&quot;75.03,23,81.03,27,87.03,23,81.03,19,75.03,23&quot; style=&quot;stroke:#181818;stroke-width:1.0;&quot;/&gt;&lt;/g&gt;&lt;!--MD5=[8b1558a572ae4853efe509bc4b5b6380]
reverse link AS to S--&gt;&lt;g id=&quot;link_AS_S&quot;&gt;&lt;path codeLine=&quot;10&quot; d=&quot;M151.19,56.18 C141.3,70.77 130.09,87.31 122.19,98.96 &quot; fill=&quot;none&quot; id=&quot;AS-backto-S&quot; style=&quot;stroke:#181818;stroke-width:1.0;&quot;/&gt;&lt;polygon fill=&quot;none&quot; points=&quot;145.64,51.9,162.65,39.27,157.23,59.75,145.64,51.9&quot; style=&quot;stroke:#181818;stroke-width:1.0;&quot;/&gt;&lt;/g&gt;&lt;!--MD5=[a2be8bb390596ba35260321245362ee7]
reverse link AS to NS--&gt;&lt;g id=&quot;link_AS_NS&quot;&gt;&lt;path codeLine=&quot;11&quot; d=&quot;M194.81,56.18 C204.7,70.77 215.91,87.31 223.81,98.96 &quot; fill=&quot;none&quot; id=&quot;AS-backto-NS&quot; style=&quot;stroke:#181818;stroke-width:1.0;&quot;/&gt;&lt;polygon fill=&quot;none&quot; points=&quot;188.77,59.75,183.35,39.27,200.36,51.9,188.77,59.75&quot; style=&quot;stroke:#181818;stroke-width:1.0;&quot;/&gt;&lt;/g&gt;&lt;!--MD5=[664298d042e99ef68512b7992185b91a]
@startuml
&apos;sequence no length than 20
hide footbox
hide unlinked
class &quot;Client&quot; as C
abstract class &quot;AbstractServer&quot; as AS
class &quot;Server&quot; as S
class &quot;NewServer&quot; as NS

AS -lo C
S -u-|&gt; AS
NS -u-|&gt; AS
hide members
@enduml

@startuml
hide footbox
hide unlinked
class &quot;Client&quot; as C
abstract class &quot;AbstractServer&quot; as AS
class &quot;Server&quot; as S
class &quot;NewServer&quot; as NS

AS -lo C
S -u-|&gt; AS
NS -u-|&gt; AS
hide members
@enduml

PlantUML version 1.2022.3beta3(Unknown compile time)
(GPL source distribution)
Java Runtime: OpenJDK Runtime Environment
JVM: OpenJDK 64-Bit Server VM
Default Encoding: Cp1252
Language: en
Country: US
--&gt;&lt;/g&gt;&lt;/svg&gt;&lt;/div&gt;
&lt;/p&gt;
&lt;p&gt;&lt;span class=&quot;figure-number&quot;&gt;Figure 3: &lt;/span&gt;开放的客户端的扩展&lt;/p&gt;
&lt;/div&gt;

&lt;p&gt;
那么，对于函数式编程（Functional Programming, FP）来说，OCP 意味着对于函数组合开放，对于函数修改封闭。比如以下例子，我们定义了一个函数求成员的比例：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-bb&quot;&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;defn&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;calc-percent&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;[&lt;/span&gt;v&lt;span style=&quot;color: #7388d6;&quot;&gt;]&lt;/span&gt;
  &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;let&lt;/span&gt; &lt;span style=&quot;color: #909183;&quot;&gt;[&lt;/span&gt;total &lt;span style=&quot;color: #709870;&quot;&gt;(&lt;/span&gt;reduce + v&lt;span style=&quot;color: #709870;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;]&lt;/span&gt;
    &lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;map #&lt;span style=&quot;color: #709870;&quot;&gt;(&lt;/span&gt;* 100.0 &lt;span style=&quot;color: #907373;&quot;&gt;(&lt;/span&gt;/ &lt;span style=&quot;color: #000000;&quot;&gt;%&lt;/span&gt; &lt;span style=&quot;color: #6276ba;&quot;&gt;(&lt;/span&gt;count v&lt;span style=&quot;color: #6276ba;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #907373;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #709870;&quot;&gt;)&lt;/span&gt; v&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;calc-percent &lt;span style=&quot;color: #7388d6;&quot;&gt;[&lt;/span&gt;1 2 3 4 5 6 7 8 9&lt;span style=&quot;color: #7388d6;&quot;&gt;]&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;pre class=&quot;example&quot;&gt;
(11.11111111111111 22.22222222222222 33.33333333333333 44.44444444444444 55.55555555555556 66.66666666666667 77.77777777777779 88.8888888888889 100.0)
&lt;/pre&gt;


&lt;p&gt;
我们可以通过函数的组合扩展功能，比如说，把刚才的结果转换成百分比格式的字符串：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-bb&quot;&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;defn&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;calc-percent&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;[&lt;/span&gt;v&lt;span style=&quot;color: #7388d6;&quot;&gt;]&lt;/span&gt;
  &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;let&lt;/span&gt; &lt;span style=&quot;color: #909183;&quot;&gt;[&lt;/span&gt;total &lt;span style=&quot;color: #709870;&quot;&gt;(&lt;/span&gt;reduce + v&lt;span style=&quot;color: #709870;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;]&lt;/span&gt;
    &lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;map #&lt;span style=&quot;color: #709870;&quot;&gt;(&lt;/span&gt;* 100.0 &lt;span style=&quot;color: #907373;&quot;&gt;(&lt;/span&gt;/ &lt;span style=&quot;color: #000000;&quot;&gt;%&lt;/span&gt; &lt;span style=&quot;color: #6276ba;&quot;&gt;(&lt;/span&gt;count v&lt;span style=&quot;color: #6276ba;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #907373;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #709870;&quot;&gt;)&lt;/span&gt; v&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;

&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;defn&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;format-percent&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;[&lt;/span&gt;vv&lt;span style=&quot;color: #7388d6;&quot;&gt;]&lt;/span&gt;
  &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;map #&lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;format &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;%.2f%%&quot;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;%&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt; vv&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;format-percent &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;calc-percent &lt;span style=&quot;color: #909183;&quot;&gt;[&lt;/span&gt;1 2 3 4 5 6 7 8 9&lt;span style=&quot;color: #909183;&quot;&gt;]&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;pre class=&quot;example&quot;&gt;
(11.11% 22.22% 33.33% 44.44% 55.56% 66.67% 77.78% 88.89% 100.00%)
&lt;/pre&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines R.6 避免使用全局变量</title>
   <link href="http://kimi.im/2023-02-12-cppcoreguidelines-r6"/>
   <updated>2023-02-12T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-r6</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;Avoid non-const global variables&amp;rdquo;
&lt;/p&gt;

&lt;p&gt;
同 &lt;a href=&quot;http://kimi.im/2022-03-09-cppcoreguidelines-i2&quot;&gt;I.2&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
理由：
&lt;/p&gt;

&lt;p&gt;
非 &lt;code&gt;const&lt;/code&gt; 的全局变量隐藏依赖关系，会导致不可预料的结果。比如：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;struct&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Data&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;... lots of stuff ...&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;data&lt;/span&gt;;             &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;non-const data&lt;/span&gt;

&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;compute&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;      &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;don&apos;t&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;... use data ...&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;

&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;output&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;       &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;don&apos;t&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;... use data ...&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
可能还有其他地方会修改数据。这样的话， &lt;code&gt;compute&lt;/code&gt; 和 &lt;code&gt;output&lt;/code&gt; 的计算结果就不可预料了。
&lt;/p&gt;

&lt;p&gt;
警告：全局的对象初始化的时候，不一定完全按顺序进行。 &lt;code&gt;const&lt;/code&gt; 对象的初始化顺序是无序进行的。因此，最好把全局对象初始化为常量。
&lt;/p&gt;

&lt;p&gt;
例外：
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;全局对象一般来说比单实例 singleton 好。&lt;/li&gt;
&lt;li&gt;全局常量自有其妙用。&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
针对名字空间范围的变量，此规则也适用。
&lt;/p&gt;

&lt;p&gt;
其他选项：如果你要用全局（名字空间）变量来避免重复copy，可以考虑以指向
&lt;code&gt;const&lt;/code&gt; 的引用形式传递数据。另一个解决办法是把数据定义为某个对象的状态，把数据的操作函数设定为对象的成员方法。
&lt;/p&gt;

&lt;p&gt;
警告：注意数据竞争情况。如果一个线程能访问非局部数据（或作为引用传进来的数据），而另一个线程执行的时候调用函数修改数据，就会造成数据竞争。任何可变数据的指针或引用都可能导致数据竞争。
&lt;/p&gt;

&lt;p&gt;
使用全局指针或引用访问/修改非 const，非全局的变量，依然避免不了隐藏的数据依赖关系，也可能导致数据竞争情况。
&lt;/p&gt;

&lt;p&gt;
不可变数据不会造成竞争情况。
&lt;/p&gt;

&lt;p&gt;
交叉参考：查看调用函数的规则。
&lt;/p&gt;

&lt;p&gt;
当然也有例外情况，比如 cin, cout, 以及 cerr.
&lt;/p&gt;

&lt;p&gt;
强化：清点所有在名字空间作用域的非 const 变量，以及全局范围的指向非
const 数据的指针和引用。
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>C++17 string_view</title>
   <link href="http://kimi.im/2023-02-11-string_view"/>
   <updated>2023-02-11T00:00:00+00:00</updated>
   <id>http://kimi.im/string_view</id>
   <content type="html">&lt;p&gt;
&lt;code&gt;string_view&lt;/code&gt; 是 C++17 提供的只读字符串的视图轻对象。
&lt;/p&gt;

&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;可以调用 &lt;code&gt;string_view&lt;/code&gt; 构造器从字符串构造 &lt;code&gt;string_view&lt;/code&gt; 对象。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;string_view&lt;/code&gt; 代替 &lt;code&gt;const string&amp;amp;&lt;/code&gt; ，可以避免内存分配。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;string_view&lt;/code&gt; 的外部接口与 &lt;code&gt;string&lt;/code&gt; 一致，但只包含只读的部分。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;string_view::substr()&lt;/code&gt; 的返回值类型还是 &lt;code&gt;string_view&lt;/code&gt; ，不产生新的字符串，不进行内存分配。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;string_view&lt;/code&gt; 字面量的后缀是 &lt;code&gt;sv&lt;/code&gt; 。string字面量的后缀是 &lt;code&gt;s&lt;/code&gt; 。&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
以下展示从 &lt;code&gt;char*&lt;/code&gt; 和 &lt;code&gt;std::string&lt;/code&gt; 生成 &lt;code&gt;std::string_view&lt;/code&gt; ：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;#include&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #2A00FF;&quot;&gt;iostream&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;#include&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #2A00FF;&quot;&gt;string&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;#include&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #2A00FF;&quot;&gt;string_view&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;#include&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #2A00FF;&quot;&gt;typeinfo&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;using&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;namespace&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;std&lt;/span&gt;;

&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;main&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;char&lt;/span&gt;* &lt;span style=&quot;color: #000000;&quot;&gt;cstr&lt;/span&gt; = &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;bonjour tout le monde&quot;&lt;/span&gt;;
    &lt;span style=&quot;color: #110099;&quot;&gt;std&lt;/span&gt;::&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;string_view&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;sv11&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;cstr&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
    &lt;span style=&quot;color: #110099;&quot;&gt;std&lt;/span&gt;::&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;string_view&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;sv12&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;cstr, 7&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
    &lt;span style=&quot;color: #110099;&quot;&gt;std&lt;/span&gt;::&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;string_view&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;sv13&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;cstr + 7, cstr + 12&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
    &lt;span style=&quot;color: #110099;&quot;&gt;std&lt;/span&gt;::cout &amp;lt;&amp;lt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;sv11: &quot;&lt;/span&gt; &amp;lt;&amp;lt; sv11
              &amp;lt;&amp;lt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;, sv12: &quot;&lt;/span&gt; &amp;lt;&amp;lt; sv12
              &amp;lt;&amp;lt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;, sv13: &quot;&lt;/span&gt; &amp;lt;&amp;lt; sv13 &amp;lt;&amp;lt; &lt;span style=&quot;color: #110099;&quot;&gt;std&lt;/span&gt;::endl;

    &lt;span style=&quot;color: #110099;&quot;&gt;std&lt;/span&gt;::&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;string&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;str&lt;/span&gt; = &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;bonjour tout le monde&quot;&lt;/span&gt;;
    &lt;span style=&quot;color: #110099;&quot;&gt;std&lt;/span&gt;::&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;string_view&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;sv21&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;str&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
    &lt;span style=&quot;color: #110099;&quot;&gt;std&lt;/span&gt;::&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;string_view&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;sv22&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;cbegin&lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;str&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt;, cbegin&lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;str&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt; + 7&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
    &lt;span style=&quot;color: #110099;&quot;&gt;std&lt;/span&gt;::&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;string_view&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;sv23&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;str.substr&lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;8, 4&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
    &lt;span style=&quot;color: #110099;&quot;&gt;std&lt;/span&gt;::cout &amp;lt;&amp;lt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;sv21: &quot;&lt;/span&gt; &amp;lt;&amp;lt; sv21
              &amp;lt;&amp;lt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;, sv22: &quot;&lt;/span&gt; &amp;lt;&amp;lt; sv22
              &amp;lt;&amp;lt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;, sv23: &quot;&lt;/span&gt; &amp;lt;&amp;lt; sv23 &amp;lt;&amp;lt; &lt;span style=&quot;color: #110099;&quot;&gt;std&lt;/span&gt;::endl;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;auto&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;sv31&lt;/span&gt; = &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;bonjour&quot;&lt;/span&gt;sv;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;auto&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;sv32&lt;/span&gt; = &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot; tout&quot;&lt;/span&gt;s;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;implicit conversion from string to string_view&lt;/span&gt;
    &lt;span style=&quot;color: #110099;&quot;&gt;std&lt;/span&gt;::&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;string_view&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;sv33&lt;/span&gt; = &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot; le monde&quot;&lt;/span&gt;s;
    &lt;span style=&quot;color: #110099;&quot;&gt;std&lt;/span&gt;::cout &amp;lt;&amp;lt; sv31 &amp;lt;&amp;lt; sv32 &amp;lt;&amp;lt; sv33 &amp;lt;&amp;lt; &lt;span style=&quot;color: #110099;&quot;&gt;std&lt;/span&gt;::endl;
    &lt;span style=&quot;color: #110099;&quot;&gt;std&lt;/span&gt;::cout &amp;lt;&amp;lt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;typeid&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;sv32&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;.name&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt; &amp;lt;&amp;lt; &lt;span style=&quot;color: #110099;&quot;&gt;std&lt;/span&gt;::endl;
    &lt;span style=&quot;color: #110099;&quot;&gt;std&lt;/span&gt;::cout &amp;lt;&amp;lt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;typeid&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;sv33&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;.name&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt; &amp;lt;&amp;lt; &lt;span style=&quot;color: #110099;&quot;&gt;std&lt;/span&gt;::endl;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;pre class=&quot;example&quot;&gt;
sv11: bonjour tout le monde, sv12: bonjour, sv13:  tout
sv21: bonjour tout le monde, sv22: bonjour, sv23: tout
bonjour tout le monde
NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE
St17basic_string_viewIcSt11char_traitsIcEE
&lt;/pre&gt;


&lt;p&gt;
因为 &lt;code&gt;std::string_view&lt;/code&gt; 不分配内存，所以执行效率比 &lt;code&gt;std::string&lt;/code&gt; 高。前者比后者大致快 20 倍。
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;#include&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #2A00FF;&quot;&gt;iostream&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;#include&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #2A00FF;&quot;&gt;string&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;#include&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #2A00FF;&quot;&gt;string_view&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;#include&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #2A00FF;&quot;&gt;chrono&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;using&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;namespace&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;std&lt;/span&gt;;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;using&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;namespace&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;std&lt;/span&gt;::&lt;span style=&quot;color: #110099;&quot;&gt;chrono&lt;/span&gt;;

&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;main&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;char&lt;/span&gt;* &lt;span style=&quot;color: #000000;&quot;&gt;cstr&lt;/span&gt; = &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;bonjour tout le monde&quot;&lt;/span&gt;;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;auto&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;constexpr&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;repeats&lt;/span&gt; = 1000000;

    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;auto&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;it_string&lt;/span&gt; = &lt;span style=&quot;color: #7388d6;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;cstr&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;]()&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;
        &lt;span style=&quot;color: #110099;&quot;&gt;std&lt;/span&gt;::&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;string&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;s&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;{&lt;/span&gt;cstr+7&lt;span style=&quot;color: #909183;&quot;&gt;}&lt;/span&gt;;
    &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;auto&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;it_string_view&lt;/span&gt; = &lt;span style=&quot;color: #7388d6;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;cstr&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;]()&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;
        &lt;span style=&quot;color: #110099;&quot;&gt;std&lt;/span&gt;::&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;string_view&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;s2&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;{&lt;/span&gt;cstr, 7&lt;span style=&quot;color: #909183;&quot;&gt;}&lt;/span&gt;;
    &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;auto&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;time_it&lt;/span&gt; = &lt;span style=&quot;color: #7388d6;&quot;&gt;[](&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;auto&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;it&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;
        &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;auto&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;tix&lt;/span&gt; = &lt;span style=&quot;color: #110099;&quot;&gt;high_resolution_clock&lt;/span&gt;::now&lt;span style=&quot;color: #909183;&quot;&gt;()&lt;/span&gt;;
        &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;for&lt;/span&gt; &lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;size_t&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;i&lt;/span&gt;&lt;span style=&quot;color: #709870;&quot;&gt;{}&lt;/span&gt;; i &amp;lt; repeats; i++&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #909183;&quot;&gt;{&lt;/span&gt;
            it&lt;span style=&quot;color: #709870;&quot;&gt;()&lt;/span&gt;;
        &lt;span style=&quot;color: #909183;&quot;&gt;}&lt;/span&gt;
        &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;auto&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;duration&lt;/span&gt; =
            duration_cast&lt;span style=&quot;color: #909183;&quot;&gt;&amp;lt;&lt;/span&gt;nanoseconds&lt;span style=&quot;color: #909183;&quot;&gt;&amp;gt;(&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;high_resolution_clock&lt;/span&gt;::now&lt;span style=&quot;color: #709870;&quot;&gt;()&lt;/span&gt; - tix&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt;;
        cout &amp;lt;&amp;lt; duration.count&lt;span style=&quot;color: #909183;&quot;&gt;()&lt;/span&gt; &amp;lt;&amp;lt; endl;
    &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;;

    time_it&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;it_string&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
    time_it&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;it_string_view&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;pre class=&quot;example&quot;&gt;
64267000
3667000
&lt;/pre&gt;
</content>
 </entry>
 
 <entry>
   <title>动力电池管理系统（BMS）关键技术</title>
   <link href="http://kimi.im/2023-02-11-bms-knowledge-architecture"/>
   <updated>2023-02-11T00:00:00+00:00</updated>
   <id>http://kimi.im/bms-knowledge-architecture</id>
   <content type="html">&lt;p&gt;
一直想系统的整理一下汽车动力电池管理系统的知识体系。今天有些空闲，就坐下来整理整理。
&lt;/p&gt;

&lt;p&gt;
首先，什么是 BMS？BMS 是 Battery Management System 的简称。BMS 是对电电池组（Battery Pack）进行监控和管理的系统。电池电芯（Battery Cell）组成电池模块（Battery Module），电池模块组成电池组。因此，BMS 对电芯、模块、电池组的电压、电流、SOC、SOE、SOH、SOP 等参数进行采集、计算，进而控制电池的充放电过程，确保电池在额定的电压、电流长时间的工作，满足不同工作负载的需要。
&lt;/p&gt;

&lt;p&gt;
BMS 的关键技术有以下几个方面：
&lt;/p&gt;
&lt;ol class=&quot;org-ol&quot;&gt;
&lt;li&gt;电池状态评估。&lt;/li&gt;
&lt;li&gt;电池性能平衡。&lt;/li&gt;
&lt;li&gt;电池安全管理。&lt;/li&gt;
&lt;/ol&gt;


&lt;p&gt;
电池状态评估的关键指标有：
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;SOC 指的是 State of Capacity，即剩余电量，荷电状态，电量状态：BMS 监控的的关键状态之一，SOC 是电池可用容量与额定容量的百分比。另外，从电化学的角度来看，由于可用电荷量依赖于电极中储存的锂离子量，所以 SOC
也可用通过锂浓度来计算。&lt;/li&gt;
&lt;li&gt;SOE 指的是 State of Energy，即剩余能量，能量状态：在不同 SOC 状态下，由于电池的电势水平在放电过程中会有明显的下降趋势，因此，在不同的剩余电量情况下，电池的剩余能量会有不同的变化曲线。&lt;/li&gt;
&lt;li&gt;SOH 指的是电池健康状态：由于电池内部的化学反应，电池在使用过程中会出现性能衰退的现象。通常根据电池容量的衰退或内阻的增加来评估电池的健康状态。一般而言，当电池的容量衰减到 80% 或者内阻增加一倍时，认为该电池达到了寿命终点（End of Life，EOL）。&lt;/li&gt;
&lt;li&gt;SOP 指的是电池的功率状态：表示电池在短时间内可以提供或吸收的功率。电池 SOP 可以看作在考虑了各种工况下，极限电流和相应电压的乘积。&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;
BMS 需要提供电池性能平衡管理。因为动力电池是通过多个电池模组、电芯串并联一起工作从而达到额定电压的需求。而电芯之间因为其存在一定的不一致性，当某些电芯与其他电芯不匹配。则可能会有一个或多个电芯充电不足或过度充电，这两种情况都可能导致电池故障。 改善这种情况的方法称为电池平衡（Battery
Equalization）。平衡是强制所有电池具有相同电压的过程。电池平衡有被动平衡和主动平衡方法：
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;被动平衡方法：在一般的锂电池管理系统中，每个电池单元都通过一个开关连接到一个负载电阻。将不需要的充电电流分流至电阻，让电阻耗散这些电流，避免电池的过充过放。&lt;/li&gt;
&lt;li&gt;主动平衡法：通过一个用于转移能量的存储元件，确保锂电池组内的电芯无论是在充电、放电还是闲置状态都能传送电荷，从而使电芯之间保持动态平衡。&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;
电池安全管理是 BMS 基本需求之一。BMS 不仅要通过能量管理、监控诊断避免出现电池过充电（Over Charge）、电池过放（Over Discharge）、过热（Over
Heating）、过流（Over Current）；还要通过高压互锁（High Voltage
Inter-Lock）和绝缘检测，发现高压连接器意外断开的故障。
&lt;/p&gt;


&lt;p&gt;
从技术实现角度看，BMS 的控制架构又分为集中式架构、模块架构、主从架构和分布式控制。控制器与传感器执行器之间会用到 CAN、CANOpen、FlexRay 等总线协议。电池状态评估会用到等效电路模型（Equivalent Circuit Model）、电化学模型（Electrochemical Model）、神经网络模型（Neural Network Model）。
&lt;/p&gt;


&lt;p&gt;
BMS 的主要作用：
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;保障产品的功能安全&lt;/li&gt;
&lt;li&gt;提升电池的使用寿命和可靠性&lt;/li&gt;
&lt;li&gt;确保电池的性能和工作范围&lt;/li&gt;
&lt;li&gt;诊断、数据收集、外部通信&lt;/li&gt;
&lt;li&gt;避免意外、保障性能，减少产品召回损失&lt;/li&gt;
&lt;/ul&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines R.5 首选带作用域的对象，避免不必要的堆分配</title>
   <link href="http://kimi.im/2023-02-11-cppcoreguidelines-r5"/>
   <updated>2023-02-11T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-r5</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;Prefer scoped objects, don&amp;rsquo;t heap-allocate unnecessarily&amp;rdquo;
&lt;/p&gt;


&lt;p&gt;
理由
&lt;/p&gt;

&lt;p&gt;
有作用域范围的对象可以是局部的、全局的或成员的。这意味着，在作用域范围内，没有额外的分配释放开销。有作用域范围的对象的成员本省也是在作用域范围内，通过对象的构造析构函数管理生存周期。
&lt;/p&gt;


&lt;p&gt;
例子
&lt;/p&gt;

&lt;p&gt;
下面代码效率不高。每次调用都要申请释放内存。而且可能因为异常，导致内存泄漏。
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;n&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;auto&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;p&lt;/span&gt; = &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Gadget&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;n&lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;...&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;delete&lt;/span&gt; p;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
可以使用局部变量替代：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;n&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Gadget&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;g&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;n&lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;...&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;
强化
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;如果一个对象在函数中分配，又释放，可以考虑使用局部栈对象。&lt;/li&gt;
&lt;li&gt;警告：如果一个局部的 unique 指针，shared 指针没有被移动、复制、重赋值、重置，但又不是声明为 const&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;
例外
&lt;/p&gt;

&lt;p&gt;
不要警告一个局部的指向一个没约束范围的数组的 unique 指针
&lt;/p&gt;


&lt;p&gt;
例外
&lt;/p&gt;

&lt;p&gt;
允许创建一个局部的常量的 &lt;code&gt;unique_ptr&amp;lt;T[]&amp;gt;&lt;/code&gt; 指向堆中分配的缓存区。因为这是表示带范围的动态数组的有效方式。
&lt;/p&gt;


&lt;p&gt;
例子
&lt;/p&gt;

&lt;p&gt;
局部 &lt;code&gt;const unique_ptr&amp;lt;T[]&amp;gt;&lt;/code&gt; 变量的合法案例：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;get_median_value&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;std&lt;/span&gt;::&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;list&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;&amp;gt;&lt;/span&gt;&amp;amp; &lt;span style=&quot;color: #000000;&quot;&gt;integers&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
  &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;auto&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;size&lt;/span&gt; = integers.size&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt;;

  &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;OK: declaring a local unique_ptr&amp;lt;T[]&amp;gt;.&lt;/span&gt;
  &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;auto&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;local_buffer&lt;/span&gt; = &lt;span style=&quot;color: #110099;&quot;&gt;std&lt;/span&gt;::make_unique_for_overwrite&lt;span style=&quot;color: #7388d6;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;[]&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;&amp;gt;(&lt;/span&gt;size&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;

  &lt;span style=&quot;color: #110099;&quot;&gt;std&lt;/span&gt;::copy_n&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;begin&lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;integers&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt;, size, local_buffer.get&lt;span style=&quot;color: #909183;&quot;&gt;()&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
  &lt;span style=&quot;color: #110099;&quot;&gt;std&lt;/span&gt;::nth_element&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;local_buffer.get&lt;span style=&quot;color: #909183;&quot;&gt;()&lt;/span&gt;,
                   local_buffer.get&lt;span style=&quot;color: #909183;&quot;&gt;()&lt;/span&gt; + size/2,
                   local_buffer.get&lt;span style=&quot;color: #909183;&quot;&gt;()&lt;/span&gt; + size&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
  &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; local_buffer&lt;span style=&quot;color: #7388d6;&quot;&gt;[&lt;/span&gt;size/2&lt;span style=&quot;color: #7388d6;&quot;&gt;]&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;
</content>
 </entry>
 
 <entry>
   <title>单一责任原则，Single-responsibility principle，SRP</title>
   <link href="http://kimi.im/2023-02-10-srp"/>
   <updated>2023-02-10T00:00:00+00:00</updated>
   <id>http://kimi.im/srp</id>
   <content type="html">&lt;blockquote&gt;
&lt;p&gt;
许由曰：“子治天下，天下既已治也；而我犹代子，吾将为名乎？名者，实之宾也；吾将为宾乎？鹪鹩巢于深林，不过一枝；偃鼠饮河，不过满腹。归休乎君，予无所用天下为！庖人虽不治庖，尸祝不越樽俎而代之矣！”
&lt;/p&gt;

&lt;p&gt;
《庄子·逍遥游》
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;
软件工程领域，有一个概念叫 SOLID。SOLID 是五个面向对象设计原则的首字母缩写。最早由 Robert C. Martin 在其 2000 年的论文《Design Principles
and Design Patterns》中提出的。
&lt;/p&gt;

&lt;p&gt;
其中，S 原则指的是 Single-responsibility principle，单一责任原则，简称
SRP。
&lt;/p&gt;

&lt;p&gt;
SRP 是这么表述的：“There should never be more than one reason for a
class to change.” In other words, every class should have only one
responsibility. 一个类应该只有一个发生变化的原因。换言之，每个类应该只有一个职责。
&lt;/p&gt;

&lt;p&gt;
如果有多个原因导致类设计的变更，那么这个类就不仅仅只有一个职责，很可能承担了多个职责。而单一职责原则就是指一个类或者模块应该有且只有一个导致其变更的原因。
&lt;/p&gt;

&lt;p&gt;
如果一个类承担了多个职责，那么最好按照单一职责原则，将这个类拆分成多个类实现。为什么呢？每一个职责都是变更的一个轴线，当我们的需求变更的时候，这些需求变更会通过类的职责传导到类的设计实现中。如果一个类有一个以上的职责，这些职责就耦合在了一起。这会导致设计的脆弱性。当你因为某个需求变更修改类的某个职责的时候，可能会影响到该类的其他职责，尽管你小心谨慎的进行代码修改，你还是可能会因为某些考虑不周，改动了不该改动的针对其他职责的设计。这是代码设计脆弱易碎的一个常见原因。另外，多个职责耦合在一起，还会会影响代码的复用性。你需要花点工夫才能把某个职责相关的代码分离出来，分离出来的代码可能还粘连了处理其他职责的代码，你就不太放心复用这段代码。
&lt;/p&gt;

&lt;p&gt;
比如说，我们设计一个 Triangle 类，它有两个方法，分别是：在屏幕绘制图形，计算图形的面积。
&lt;/p&gt;


&lt;div id=&quot;org23a3866&quot; class=&quot;figure&quot;&gt;
&lt;p&gt;&lt;div align=&quot;center&quot;&gt;&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; xmlns:xlink=&quot;http://www.w3.org/1999/xlink&quot; contentStyleType=&quot;text/css&quot; height=&quot;185px&quot; preserveAspectRatio=&quot;none&quot; style=&quot;width:487px;height:185px;background:#FFFFFF;&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 487 185&quot; width=&quot;487px&quot; zoomAndPan=&quot;magnify&quot;&gt;&lt;defs/&gt;&lt;g&gt;&lt;!--MD5=[40b067e448d061f8c1f714bff454de58]
class Triangle--&gt;&lt;g id=&quot;elem_Triangle&quot;&gt;&lt;rect codeLine=&quot;1&quot; fill=&quot;#F1F1F1&quot; height=&quot;75.2188&quot; id=&quot;Triangle&quot; rx=&quot;2.5&quot; ry=&quot;2.5&quot; style=&quot;stroke:#181818;stroke-width:0.5;&quot; width=&quot;112&quot; x=&quot;186&quot; y=&quot;7&quot;/&gt;&lt;ellipse cx=&quot;213.6&quot; cy=&quot;23&quot; fill=&quot;#ADD1B2&quot; rx=&quot;11&quot; ry=&quot;11&quot; style=&quot;stroke:#181818;stroke-width:1.0;&quot;/&gt;&lt;path d=&quot;M216.3656,18.875 Q216.5219,18.6563 216.7094,18.5469 Q216.8969,18.4375 217.1156,18.4375 Q217.4906,18.4375 217.725,18.7031 Q217.9594,18.9531 217.9594,19.5625 L217.9594,21.0156 Q217.9594,21.625 217.725,21.8906 Q217.4906,22.1563 217.1156,22.1563 Q216.7719,22.1563 216.5688,21.9531 Q216.3656,21.7656 216.2563,21.25 Q216.2094,20.8906 216.0219,20.7031 Q215.6938,20.3281 215.0844,20.1094 Q214.475,19.8906 213.85,19.8906 Q213.0844,19.8906 212.4438,20.2188 Q211.8188,20.5469 211.3188,21.2969 Q210.8344,22.0469 210.8344,23.0781 L210.8344,24.1719 Q210.8344,25.4063 211.725,26.2344 Q212.6156,27.0469 214.2094,27.0469 Q215.1469,27.0469 215.8031,26.7969 Q216.1938,26.6406 216.6156,26.2031 Q216.8813,25.9375 217.0219,25.8594 Q217.1781,25.7813 217.3813,25.7813 Q217.7094,25.7813 217.9594,26.0469 Q218.225,26.2969 218.225,26.6406 Q218.225,26.9844 217.8813,27.3906 Q217.3813,27.9688 216.5844,28.2969 Q215.5063,28.75 214.2094,28.75 Q212.6938,28.75 211.4906,28.125 Q210.5063,27.625 209.8188,26.5625 Q209.1313,25.4844 209.1313,24.2031 L209.1313,23.0469 Q209.1313,21.7188 209.7406,20.5781 Q210.3656,19.4219 211.4594,18.8125 Q212.5531,18.1875 213.7875,18.1875 Q214.5219,18.1875 215.1625,18.3594 Q215.8188,18.5156 216.3656,18.875 Z &quot; fill=&quot;#000000&quot;/&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;14&quot; lengthAdjust=&quot;spacing&quot; textLength=&quot;52&quot; x=&quot;230.4&quot; y=&quot;28.7285&quot;&gt;Triangle&lt;/text&gt;&lt;line style=&quot;stroke:#181818;stroke-width:0.5;&quot; x1=&quot;187&quot; x2=&quot;297&quot; y1=&quot;39&quot; y2=&quot;39&quot;/&gt;&lt;ellipse cx=&quot;197&quot; cy=&quot;50&quot; fill=&quot;#84BE84&quot; rx=&quot;3&quot; ry=&quot;3&quot; style=&quot;stroke:#038048;stroke-width:1.0;&quot;/&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;14&quot; lengthAdjust=&quot;spacing&quot; textLength=&quot;40&quot; x=&quot;206&quot; y=&quot;57.5332&quot;&gt;draw()&lt;/text&gt;&lt;ellipse cx=&quot;197&quot; cy=&quot;67.6094&quot; fill=&quot;#84BE84&quot; rx=&quot;3&quot; ry=&quot;3&quot; style=&quot;stroke:#038048;stroke-width:1.0;&quot;/&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;14&quot; lengthAdjust=&quot;spacing&quot; textLength=&quot;86&quot; x=&quot;206&quot; y=&quot;75.1426&quot;&gt;double area()&lt;/text&gt;&lt;/g&gt;&lt;g id=&quot;elem_ca&quot;&gt;&lt;rect fill=&quot;#F1F1F1&quot; height=&quot;37.6094&quot; style=&quot;stroke:#181818;stroke-width:0.5;&quot; width=&quot;144&quot; x=&quot;7&quot; y=&quot;25.5&quot;/&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;14&quot; lengthAdjust=&quot;spacing&quot; textLength=&quot;130&quot; x=&quot;14&quot; y=&quot;42.0332&quot;&gt;Compute Application&lt;/text&gt;&lt;line style=&quot;stroke:#181818;stroke-width:0.5;&quot; x1=&quot;8&quot; x2=&quot;150&quot; y1=&quot;47.1094&quot; y2=&quot;47.1094&quot;/&gt;&lt;/g&gt;&lt;g id=&quot;elem_ga&quot;&gt;&lt;rect fill=&quot;#F1F1F1&quot; height=&quot;37.6094&quot; style=&quot;stroke:#181818;stroke-width:0.5;&quot; width=&quot;148&quot; x=&quot;333&quot; y=&quot;25.5&quot;/&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;14&quot; lengthAdjust=&quot;spacing&quot; textLength=&quot;134&quot; x=&quot;340&quot; y=&quot;42.0332&quot;&gt;Graphical Application&lt;/text&gt;&lt;line style=&quot;stroke:#181818;stroke-width:0.5;&quot; x1=&quot;334&quot; x2=&quot;480&quot; y1=&quot;47.1094&quot; y2=&quot;47.1094&quot;/&gt;&lt;/g&gt;&lt;g id=&quot;elem_gui&quot;&gt;&lt;rect fill=&quot;#F1F1F1&quot; height=&quot;37.6094&quot; style=&quot;stroke:#181818;stroke-width:0.5;&quot; width=&quot;37&quot; x=&quot;305.5&quot; y=&quot;142&quot;/&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;14&quot; lengthAdjust=&quot;spacing&quot; textLength=&quot;23&quot; x=&quot;312.5&quot; y=&quot;158.5332&quot;&gt;GUI&lt;/text&gt;&lt;line style=&quot;stroke:#181818;stroke-width:0.5;&quot; x1=&quot;306.5&quot; x2=&quot;341.5&quot; y1=&quot;163.6094&quot; y2=&quot;163.6094&quot;/&gt;&lt;/g&gt;&lt;!--MD5=[1b4915d434968cc561da42ef14295676]
link ca to Triangle--&gt;&lt;g id=&quot;link_ca_Triangle&quot;&gt;&lt;path codeLine=&quot;8&quot; d=&quot;M151.27,44.5 C161.03,44.5 170.78,44.5 180.54,44.5 &quot; fill=&quot;none&quot; id=&quot;ca-to-Triangle&quot; style=&quot;stroke:#181818;stroke-width:1.0;&quot;/&gt;&lt;polygon fill=&quot;#181818&quot; points=&quot;185.65,44.5,176.65,40.5,180.65,44.5,176.65,48.5,185.65,44.5&quot; style=&quot;stroke:#181818;stroke-width:1.0;&quot;/&gt;&lt;/g&gt;&lt;!--MD5=[9e31abf28d37fa5a089f71d43401679f]
reverse link Triangle to ga--&gt;&lt;g id=&quot;link_Triangle_ga&quot;&gt;&lt;path codeLine=&quot;9&quot; d=&quot;M303.25,44.5 C313.16,44.5 323.06,44.5 332.96,44.5 &quot; fill=&quot;none&quot; id=&quot;Triangle-backto-ga&quot; style=&quot;stroke:#181818;stroke-width:1.0;&quot;/&gt;&lt;polygon fill=&quot;#181818&quot; points=&quot;298.07,44.5,307.07,48.5,303.07,44.5,307.07,40.5,298.07,44.5&quot; style=&quot;stroke:#181818;stroke-width:1.0;&quot;/&gt;&lt;/g&gt;&lt;!--MD5=[f318b4d0706210fb567d27b5a21f94c1]
link ga to gui--&gt;&lt;g id=&quot;link_ga_gui&quot;&gt;&lt;path codeLine=&quot;10&quot; d=&quot;M393.85,63.64 C379.28,83.74 355.78,116.16 340.11,137.77 &quot; fill=&quot;none&quot; id=&quot;ga-to-gui&quot; style=&quot;stroke:#181818;stroke-width:1.0;&quot;/&gt;&lt;polygon fill=&quot;#181818&quot; points=&quot;337.09,141.94,345.6091,136.9979,340.0232,137.8908,339.1304,132.3048,337.09,141.94&quot; style=&quot;stroke:#181818;stroke-width:1.0;&quot;/&gt;&lt;/g&gt;&lt;!--MD5=[a83942a8436a922a0ce607e4e08eef07]
link Triangle to gui--&gt;&lt;g id=&quot;link_Triangle_gui&quot;&gt;&lt;path codeLine=&quot;11&quot; d=&quot;M268.17,82.04 C281.19,100.23 296.53,121.64 307.82,137.41 &quot; fill=&quot;none&quot; id=&quot;Triangle-to-gui&quot; style=&quot;stroke:#181818;stroke-width:1.0;&quot;/&gt;&lt;polygon fill=&quot;#181818&quot; points=&quot;310.9,141.71,308.8981,132.0667,307.983,137.6491,302.4007,136.7339,310.9,141.71&quot; style=&quot;stroke:#181818;stroke-width:1.0;&quot;/&gt;&lt;/g&gt;&lt;!--MD5=[90207bf5d4dd9001cdb19b15c8ab1309]
@startuml
class Triangle {
        +draw()
        + double area()
}
object &quot;Compute Application&quot; as ca
object &quot;Graphical Application&quot; as ga
object &quot;GUI&quot; as gui
ca -&gt; Triangle
ga -l-&gt; Triangle
ga -d-&gt; gui
Triangle -&gt; gui
hide members
show Triangle methods
@enduml

PlantUML version 1.2022.3beta3(Unknown compile time)
(GPL source distribution)
Java Runtime: OpenJDK Runtime Environment
JVM: OpenJDK 64-Bit Server VM
Default Encoding: Cp1252
Language: en
Country: US
--&gt;&lt;/g&gt;&lt;/svg&gt;&lt;/div&gt;
&lt;/p&gt;
&lt;/div&gt;

&lt;p&gt;
于是，会有两个应用程序会用到 Triangle 这个类。一个是图形计算应用，它会调用 Triangle 类的 area() 方法计算图形面积。还有一个应用是图形显示应用，它会调用 Triangle 类的 draw() 方法，在 GUI 上绘制图形。 draw() 方法本身也要用到 GUI 子系统的资源。
&lt;/p&gt;

&lt;p&gt;
这个设计就违背了 SRP。Triangle 类实现了两个职责。一个职责是计算图形面积，另一个职责是在 GUI 上显示图形。
&lt;/p&gt;

&lt;p&gt;
这导致的第一个问题是，在进行面积计算的时候，你也不得不包含 GUI 程序库。对于 C++ 程序来说，意味着你要链接 GUI 库，编译需要时间、链接需要时间、还会占用运行内存和使得应用程序变得臃肿。对于 Java 来说，你还要把 GUI
相关的 .class 或 .jar 文件部署到目标平台。
&lt;/p&gt;

&lt;p&gt;
第二个问题是，为了改进图形显示应用，你修改了 Triangle 中的 draw() 方法，你就不得不再一次编译图形计算应用，重新使用修改过的 Triangle 类。如果你忘记做，可能遇到意想不到的程序崩溃。
&lt;/p&gt;

&lt;p&gt;
改进的设计应该是能够将两个职责放到不同的类中实现。GeoTriangle 实现图形计算的 area() 职责，而 Triangle 实现图形显示的 draw() 职责。这时候，当你修改了图形显示职责时，不会影响到图形计算应用。
&lt;/p&gt;


&lt;div id=&quot;org7ed0075&quot; class=&quot;figure&quot;&gt;
&lt;p&gt;&lt;div align=&quot;center&quot;&gt;&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; xmlns:xlink=&quot;http://www.w3.org/1999/xlink&quot; contentStyleType=&quot;text/css&quot; height=&quot;169px&quot; preserveAspectRatio=&quot;none&quot; style=&quot;width:364px;height:169px;background:#FFFFFF;&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 364 169&quot; width=&quot;364px&quot; zoomAndPan=&quot;magnify&quot;&gt;&lt;defs/&gt;&lt;g&gt;&lt;!--MD5=[a72409d4ff22c8ec5b400d3bbb023114]
class GeoTriangle--&gt;&lt;g id=&quot;elem_GeoTriangle&quot;&gt;&lt;rect codeLine=&quot;1&quot; fill=&quot;#F1F1F1&quot; height=&quot;32&quot; id=&quot;GeoTriangle&quot; rx=&quot;2.5&quot; ry=&quot;2.5&quot; style=&quot;stroke:#181818;stroke-width:0.5;&quot; width=&quot;111&quot; x=&quot;23.5&quot; y=&quot;118&quot;/&gt;&lt;ellipse cx=&quot;38.5&quot; cy=&quot;134&quot; fill=&quot;#ADD1B2&quot; rx=&quot;11&quot; ry=&quot;11&quot; style=&quot;stroke:#181818;stroke-width:1.0;&quot;/&gt;&lt;path d=&quot;M41.2656,129.875 Q41.4219,129.6563 41.6094,129.5469 Q41.7969,129.4375 42.0156,129.4375 Q42.3906,129.4375 42.625,129.7031 Q42.8594,129.9531 42.8594,130.5625 L42.8594,132.0156 Q42.8594,132.625 42.625,132.8906 Q42.3906,133.1563 42.0156,133.1563 Q41.6719,133.1563 41.4688,132.9531 Q41.2656,132.7656 41.1563,132.25 Q41.1094,131.8906 40.9219,131.7031 Q40.5938,131.3281 39.9844,131.1094 Q39.375,130.8906 38.75,130.8906 Q37.9844,130.8906 37.3438,131.2188 Q36.7188,131.5469 36.2188,132.2969 Q35.7344,133.0469 35.7344,134.0781 L35.7344,135.1719 Q35.7344,136.4063 36.625,137.2344 Q37.5156,138.0469 39.1094,138.0469 Q40.0469,138.0469 40.7031,137.7969 Q41.0938,137.6406 41.5156,137.2031 Q41.7813,136.9375 41.9219,136.8594 Q42.0781,136.7813 42.2813,136.7813 Q42.6094,136.7813 42.8594,137.0469 Q43.125,137.2969 43.125,137.6406 Q43.125,137.9844 42.7813,138.3906 Q42.2813,138.9688 41.4844,139.2969 Q40.4063,139.75 39.1094,139.75 Q37.5938,139.75 36.3906,139.125 Q35.4063,138.625 34.7188,137.5625 Q34.0313,136.4844 34.0313,135.2031 L34.0313,134.0469 Q34.0313,132.7188 34.6406,131.5781 Q35.2656,130.4219 36.3594,129.8125 Q37.4531,129.1875 38.6875,129.1875 Q39.4219,129.1875 40.0625,129.3594 Q40.7188,129.5156 41.2656,129.875 Z &quot; fill=&quot;#000000&quot;/&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;14&quot; lengthAdjust=&quot;spacing&quot; textLength=&quot;79&quot; x=&quot;52.5&quot; y=&quot;139.7285&quot;&gt;GeoTriangle&lt;/text&gt;&lt;/g&gt;&lt;!--MD5=[40b067e448d061f8c1f714bff454de58]
class Triangle--&gt;&lt;g id=&quot;elem_Triangle&quot;&gt;&lt;rect codeLine=&quot;4&quot; fill=&quot;#F1F1F1&quot; height=&quot;57.6094&quot; id=&quot;Triangle&quot; rx=&quot;2.5&quot; ry=&quot;2.5&quot; style=&quot;stroke:#181818;stroke-width:0.5;&quot; width=&quot;84&quot; x=&quot;170&quot; y=&quot;105&quot;/&gt;&lt;ellipse cx=&quot;185&quot; cy=&quot;121&quot; fill=&quot;#ADD1B2&quot; rx=&quot;11&quot; ry=&quot;11&quot; style=&quot;stroke:#181818;stroke-width:1.0;&quot;/&gt;&lt;path d=&quot;M187.7656,116.875 Q187.9219,116.6563 188.1094,116.5469 Q188.2969,116.4375 188.5156,116.4375 Q188.8906,116.4375 189.125,116.7031 Q189.3594,116.9531 189.3594,117.5625 L189.3594,119.0156 Q189.3594,119.625 189.125,119.8906 Q188.8906,120.1563 188.5156,120.1563 Q188.1719,120.1563 187.9688,119.9531 Q187.7656,119.7656 187.6563,119.25 Q187.6094,118.8906 187.4219,118.7031 Q187.0938,118.3281 186.4844,118.1094 Q185.875,117.8906 185.25,117.8906 Q184.4844,117.8906 183.8438,118.2188 Q183.2188,118.5469 182.7188,119.2969 Q182.2344,120.0469 182.2344,121.0781 L182.2344,122.1719 Q182.2344,123.4063 183.125,124.2344 Q184.0156,125.0469 185.6094,125.0469 Q186.5469,125.0469 187.2031,124.7969 Q187.5938,124.6406 188.0156,124.2031 Q188.2813,123.9375 188.4219,123.8594 Q188.5781,123.7813 188.7813,123.7813 Q189.1094,123.7813 189.3594,124.0469 Q189.625,124.2969 189.625,124.6406 Q189.625,124.9844 189.2813,125.3906 Q188.7813,125.9688 187.9844,126.2969 Q186.9063,126.75 185.6094,126.75 Q184.0938,126.75 182.8906,126.125 Q181.9063,125.625 181.2188,124.5625 Q180.5313,123.4844 180.5313,122.2031 L180.5313,121.0469 Q180.5313,119.7188 181.1406,118.5781 Q181.7656,117.4219 182.8594,116.8125 Q183.9531,116.1875 185.1875,116.1875 Q185.9219,116.1875 186.5625,116.3594 Q187.2188,116.5156 187.7656,116.875 Z &quot; fill=&quot;#000000&quot;/&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;14&quot; lengthAdjust=&quot;spacing&quot; textLength=&quot;52&quot; x=&quot;199&quot; y=&quot;126.7285&quot;&gt;Triangle&lt;/text&gt;&lt;line style=&quot;stroke:#181818;stroke-width:0.5;&quot; x1=&quot;171&quot; x2=&quot;253&quot; y1=&quot;137&quot; y2=&quot;137&quot;/&gt;&lt;ellipse cx=&quot;181&quot; cy=&quot;148&quot; fill=&quot;#84BE84&quot; rx=&quot;3&quot; ry=&quot;3&quot; style=&quot;stroke:#038048;stroke-width:1.0;&quot;/&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;14&quot; lengthAdjust=&quot;spacing&quot; textLength=&quot;40&quot; x=&quot;190&quot; y=&quot;155.5332&quot;&gt;draw()&lt;/text&gt;&lt;/g&gt;&lt;g id=&quot;elem_ca&quot;&gt;&lt;rect fill=&quot;#F1F1F1&quot; height=&quot;37.6094&quot; style=&quot;stroke:#181818;stroke-width:0.5;&quot; width=&quot;144&quot; x=&quot;7&quot; y=&quot;7&quot;/&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;14&quot; lengthAdjust=&quot;spacing&quot; textLength=&quot;130&quot; x=&quot;14&quot; y=&quot;23.5332&quot;&gt;Compute Application&lt;/text&gt;&lt;line style=&quot;stroke:#181818;stroke-width:0.5;&quot; x1=&quot;8&quot; x2=&quot;150&quot; y1=&quot;28.6094&quot; y2=&quot;28.6094&quot;/&gt;&lt;/g&gt;&lt;g id=&quot;elem_ga&quot;&gt;&lt;rect fill=&quot;#F1F1F1&quot; height=&quot;37.6094&quot; style=&quot;stroke:#181818;stroke-width:0.5;&quot; width=&quot;148&quot; x=&quot;210&quot; y=&quot;7&quot;/&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;14&quot; lengthAdjust=&quot;spacing&quot; textLength=&quot;134&quot; x=&quot;217&quot; y=&quot;23.5332&quot;&gt;Graphical Application&lt;/text&gt;&lt;line style=&quot;stroke:#181818;stroke-width:0.5;&quot; x1=&quot;211&quot; x2=&quot;357&quot; y1=&quot;28.6094&quot; y2=&quot;28.6094&quot;/&gt;&lt;/g&gt;&lt;g id=&quot;elem_gui&quot;&gt;&lt;rect fill=&quot;#F1F1F1&quot; height=&quot;37.6094&quot; style=&quot;stroke:#181818;stroke-width:0.5;&quot; width=&quot;37&quot; x=&quot;289.5&quot; y=&quot;115&quot;/&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;14&quot; lengthAdjust=&quot;spacing&quot; textLength=&quot;23&quot; x=&quot;296.5&quot; y=&quot;131.5332&quot;&gt;GUI&lt;/text&gt;&lt;line style=&quot;stroke:#181818;stroke-width:0.5;&quot; x1=&quot;290.5&quot; x2=&quot;325.5&quot; y1=&quot;136.6094&quot; y2=&quot;136.6094&quot;/&gt;&lt;/g&gt;&lt;!--MD5=[300ae1a6b57c83aa75bcd67fea62e456]
link ca to GeoTriangle--&gt;&lt;g id=&quot;link_ca_GeoTriangle&quot;&gt;&lt;path codeLine=&quot;10&quot; d=&quot;M79,45.46 C79,64.22 79,93.21 79,112.63 &quot; fill=&quot;none&quot; id=&quot;ca-to-GeoTriangle&quot; style=&quot;stroke:#181818;stroke-width:1.0;&quot;/&gt;&lt;polygon fill=&quot;#181818&quot; points=&quot;79,117.83,83,108.83,79,112.83,75,108.83,79,117.83&quot; style=&quot;stroke:#181818;stroke-width:1.0;&quot;/&gt;&lt;/g&gt;&lt;!--MD5=[cefe6da901cdabc96aa66b972d245767]
link ga to Triangle--&gt;&lt;g id=&quot;link_ga_Triangle&quot;&gt;&lt;path codeLine=&quot;11&quot; d=&quot;M271.46,45.46 C261.21,60.56 246.46,82.27 234.22,100.29 &quot; fill=&quot;none&quot; id=&quot;ga-to-Triangle&quot; style=&quot;stroke:#181818;stroke-width:1.0;&quot;/&gt;&lt;polygon fill=&quot;#181818&quot; points=&quot;231.16,104.79,239.5221,99.5866,233.9665,100.6519,232.9011,95.0963,231.16,104.79&quot; style=&quot;stroke:#181818;stroke-width:1.0;&quot;/&gt;&lt;/g&gt;&lt;!--MD5=[f318b4d0706210fb567d27b5a21f94c1]
link ga to gui--&gt;&lt;g id=&quot;link_ga_gui&quot;&gt;&lt;path codeLine=&quot;12&quot; d=&quot;M288.18,45.46 C292.21,63.25 298.31,90.22 302.68,109.52 &quot; fill=&quot;none&quot; id=&quot;ga-to-gui&quot; style=&quot;stroke:#181818;stroke-width:1.0;&quot;/&gt;&lt;polygon fill=&quot;#181818&quot; points=&quot;303.87,114.75,305.7625,105.0847,302.7551,109.8759,297.9639,106.8685,303.87,114.75&quot; style=&quot;stroke:#181818;stroke-width:1.0;&quot;/&gt;&lt;/g&gt;&lt;!--MD5=[a83942a8436a922a0ce607e4e08eef07]
link Triangle to gui--&gt;&lt;g id=&quot;link_Triangle_gui&quot;&gt;&lt;path codeLine=&quot;13&quot; d=&quot;M254.38,134 C264.25,134 274.12,134 283.99,134 &quot; fill=&quot;none&quot; id=&quot;Triangle-to-gui&quot; style=&quot;stroke:#181818;stroke-width:1.0;&quot;/&gt;&lt;polygon fill=&quot;#181818&quot; points=&quot;289.15,134,280.15,130,284.15,134,280.15,138,289.15,134&quot; style=&quot;stroke:#181818;stroke-width:1.0;&quot;/&gt;&lt;/g&gt;&lt;!--MD5=[3935d09fbe0d85f1814af562d2372619]
reverse link GeoTriangle to Triangle--&gt;&lt;g id=&quot;link_GeoTriangle_Triangle&quot;&gt;&lt;path codeLine=&quot;14&quot; d=&quot;M139.84,134 C149.88,134 159.93,134 169.97,134 &quot; fill=&quot;none&quot; id=&quot;GeoTriangle-backto-Triangle&quot; style=&quot;stroke:#181818;stroke-width:1.0;&quot;/&gt;&lt;polygon fill=&quot;#181818&quot; points=&quot;134.59,134,143.59,138,139.59,134,143.59,130,134.59,134&quot; style=&quot;stroke:#181818;stroke-width:1.0;&quot;/&gt;&lt;/g&gt;&lt;!--MD5=[e85a67cfc4ba57a56bb613e1a3ce6422]
@startuml
class GeoTriangle {
        + double area()
}
class Triangle {
        + draw()
}
object &quot;Compute Application&quot; as ca
object &quot;Graphical Application&quot; as ga
object &quot;GUI&quot; as gui
ca -d-&gt; GeoTriangle
ga -d-&gt; Triangle
ga -d-&gt; gui
Triangle -&gt; gui
Triangle -l&gt; GeoTriangle
hide members
show Triangle methods
@enduml

PlantUML version 1.2022.3beta3(Unknown compile time)
(GPL source distribution)
Java Runtime: OpenJDK Runtime Environment
JVM: OpenJDK 64-Bit Server VM
Default Encoding: Cp1252
Language: en
Country: US
--&gt;&lt;/g&gt;&lt;/svg&gt;&lt;/div&gt;
&lt;/p&gt;
&lt;/div&gt;

&lt;p&gt;
SRP 原则也适用于函数式编程。在函数式编程中，SRP 意味分离 IO 和程序逻辑。比如这个最简单的例子：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-bb&quot;&gt;(defn mean [a b]
  (println &quot;Mean: &quot;, (/ (+ a b) 2.0)))

(mean 11 22)
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
mean 这个函数，既承担了计算平均数的职责，又承担了在命令行的输出结果的职责。那么，如果我现在不想在命令行输出结果，而是想把计算结果写到文件里，是不是就得重新写一个差不多的函数，然后把输出方式改掉？
&lt;/p&gt;

&lt;p&gt;
如果我们把这个还是拆分成两个函数，一个函数是做数值计算，另一个函数是做数据输出：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-clojure&quot;&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;defn&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;mean&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;[&lt;/span&gt;a b&lt;span style=&quot;color: #7388d6;&quot;&gt;]&lt;/span&gt;
  &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;/ &lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;+ a b&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt; 2.0&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;defn&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;print-log&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;[&lt;/span&gt;msg val&lt;span style=&quot;color: #7388d6;&quot;&gt;]&lt;/span&gt;
  &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;println&lt;/span&gt; msg val&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;

&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;-&amp;gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;mean 11 22&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;
     &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;print-log &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;Mean: &quot;&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;pre class=&quot;example&quot;&gt;
Mean:  16.5
&lt;/pre&gt;


&lt;p&gt;
这时候，我如果想输出到文件，只要再添加一个函数即可：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-clojure&quot;&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;defn&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;write-log&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;[&lt;/span&gt;msg val&lt;span style=&quot;color: #7388d6;&quot;&gt;]&lt;/span&gt;
  &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;spit&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;mean.txt&quot;&lt;/span&gt; &lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;str&lt;/span&gt; msg val&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;

&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;-&amp;gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;mean 11 22&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;
     &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;write-log &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;Mean: &quot;&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
再举个例子，假设我们有一组各个国家 GDP 清单，现在我想计算每个国家 GDP
占清单总额的比例是多少。代码可以这样写：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-clojure&quot;&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;def&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;nations&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;:country&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;China&quot;&lt;/span&gt;  &lt;span style=&quot;color: #110099;&quot;&gt;:gdp&lt;/span&gt; 17734062645371&lt;span style=&quot;color: #909183;&quot;&gt;}&lt;/span&gt;
              &lt;span style=&quot;color: #909183;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;:country&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;USA&quot;&lt;/span&gt;    &lt;span style=&quot;color: #110099;&quot;&gt;:gdp&lt;/span&gt; 23315080560000&lt;span style=&quot;color: #909183;&quot;&gt;}&lt;/span&gt;
              &lt;span style=&quot;color: #909183;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;:country&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;Japan&quot;&lt;/span&gt;  &lt;span style=&quot;color: #110099;&quot;&gt;:gdp&lt;/span&gt; 4940877780755&lt;span style=&quot;color: #909183;&quot;&gt;}&lt;/span&gt;
              &lt;span style=&quot;color: #909183;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;:country&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;German&quot;&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;:gdp&lt;/span&gt; 4259934911821&lt;span style=&quot;color: #909183;&quot;&gt;}&lt;/span&gt;
              &lt;span style=&quot;color: #909183;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;:country&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;India&quot;&lt;/span&gt;  &lt;span style=&quot;color: #110099;&quot;&gt;:gdp&lt;/span&gt; 3176295065497&lt;span style=&quot;color: #909183;&quot;&gt;}&lt;/span&gt;
              &lt;span style=&quot;color: #909183;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;:country&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;UK&quot;&lt;/span&gt;     &lt;span style=&quot;color: #110099;&quot;&gt;:gdp&lt;/span&gt; 3131377762925&lt;span style=&quot;color: #909183;&quot;&gt;}&lt;/span&gt;
              &lt;span style=&quot;color: #909183;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;:country&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;France&quot;&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;:gdp&lt;/span&gt; 2957879759263&lt;span style=&quot;color: #909183;&quot;&gt;}&lt;/span&gt;
              &lt;span style=&quot;color: #909183;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;:name&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;kimim&quot;&lt;/span&gt;  &lt;span style=&quot;color: #110099;&quot;&gt;:salary&lt;/span&gt; 800000&lt;span style=&quot;color: #909183;&quot;&gt;}&lt;/span&gt;
              &lt;span style=&quot;color: #909183;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;:country&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;Utopia&quot;&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;:gdp&lt;/span&gt; -100000&lt;span style=&quot;color: #909183;&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;]&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;

&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;defn&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;print-nations-gdp-percentage&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;[&lt;/span&gt;nations&lt;span style=&quot;color: #7388d6;&quot;&gt;]&lt;/span&gt;
  &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;empty?&lt;/span&gt; nations&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt;
    &lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;do&lt;/span&gt;
      &lt;span style=&quot;color: #709870;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;println&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;Nation list empty!&quot;&lt;/span&gt;&lt;span style=&quot;color: #709870;&quot;&gt;)&lt;/span&gt;
      &lt;span style=&quot;color: #110099;&quot;&gt;:invalid&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt;
    &lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;let&lt;/span&gt; &lt;span style=&quot;color: #709870;&quot;&gt;[&lt;/span&gt;cleanups &lt;span style=&quot;color: #907373;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;-&amp;gt;&amp;gt;&lt;/span&gt; nations
                        &lt;span style=&quot;color: #6276ba;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;filter&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;:country&lt;/span&gt;&lt;span style=&quot;color: #6276ba;&quot;&gt;)&lt;/span&gt;
                        &lt;span style=&quot;color: #6276ba;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;filter&lt;/span&gt; #&lt;span style=&quot;color: #858580;&quot;&gt;(&lt;/span&gt;&amp;lt; 0 &lt;span style=&quot;color: #80a880;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;:gdp&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;%&lt;/span&gt;&lt;span style=&quot;color: #80a880;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #858580;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #6276ba;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #907373;&quot;&gt;)&lt;/span&gt;
          sum &lt;span style=&quot;color: #907373;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;-&amp;gt;&amp;gt;&lt;/span&gt; cleanups
                   &lt;span style=&quot;color: #6276ba;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;map&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;:gdp&lt;/span&gt;&lt;span style=&quot;color: #6276ba;&quot;&gt;)&lt;/span&gt;
                   &lt;span style=&quot;color: #6276ba;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;reduce&lt;/span&gt; +&lt;span style=&quot;color: #6276ba;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #907373;&quot;&gt;)&lt;/span&gt;
          results &lt;span style=&quot;color: #907373;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;-&amp;gt;&amp;gt;&lt;/span&gt; cleanups
                       &lt;span style=&quot;color: #6276ba;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;map&lt;/span&gt;
                        &lt;span style=&quot;color: #858580;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;fn&lt;/span&gt; &lt;span style=&quot;color: #80a880;&quot;&gt;[&lt;/span&gt;n&lt;span style=&quot;color: #80a880;&quot;&gt;]&lt;/span&gt;
                          &lt;span style=&quot;color: #80a880;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;assoc&lt;/span&gt; n &lt;span style=&quot;color: #110099;&quot;&gt;:percentage&lt;/span&gt; &lt;span style=&quot;color: #887070;&quot;&gt;(&lt;/span&gt;* 100.0 &lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;/ &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;:gdp&lt;/span&gt; n&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; sum&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #887070;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #80a880;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #858580;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #6276ba;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #907373;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #709870;&quot;&gt;]&lt;/span&gt;
      &lt;span style=&quot;color: #709870;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;doseq&lt;/span&gt; &lt;span style=&quot;color: #907373;&quot;&gt;[&lt;/span&gt;x results&lt;span style=&quot;color: #907373;&quot;&gt;]&lt;/span&gt;
        &lt;span style=&quot;color: #907373;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;println&lt;/span&gt; &lt;span style=&quot;color: #6276ba;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;format&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;Country: %-7s&lt;/span&gt;&lt;span style=&quot;color: #000000; background-color: #f4ecd8; font-weight: bold;&quot;&gt;\t&lt;/span&gt;&lt;span style=&quot;color: #2A00FF;&quot;&gt;GDP: %d&lt;/span&gt;&lt;span style=&quot;color: #000000; background-color: #f4ecd8; font-weight: bold;&quot;&gt;\t&lt;/span&gt;&lt;span style=&quot;color: #2A00FF;&quot;&gt;Percentage: %5.2f%%&quot;&lt;/span&gt;
                         &lt;span style=&quot;color: #858580;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;:country&lt;/span&gt; x&lt;span style=&quot;color: #858580;&quot;&gt;)&lt;/span&gt;
                         &lt;span style=&quot;color: #858580;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;:gdp&lt;/span&gt; x&lt;span style=&quot;color: #858580;&quot;&gt;)&lt;/span&gt;
                         &lt;span style=&quot;color: #858580;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;:percentage&lt;/span&gt; x&lt;span style=&quot;color: #858580;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #6276ba;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #907373;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #709870;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;

&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;print-nations-gdp-percentage nations&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;pre class=&quot;example&quot;&gt;
Country: China  	GDP: 17734062645371	Percentage: 29.80%
Country: USA    	GDP: 23315080560000	Percentage: 39.17%
Country: Japan  	GDP: 4940877780755	Percentage:  8.30%
Country: German 	GDP: 4259934911821	Percentage:  7.16%
Country: India  	GDP: 3176295065497	Percentage:  5.34%
Country: UK     	GDP: 3131377762925	Percentage:  5.26%
Country: France 	GDP: 2957879759263	Percentage:  4.97%
&lt;/pre&gt;


&lt;p&gt;
但是这个函数职责太多：
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;检查异常输入&lt;/li&gt;
&lt;li&gt;过滤异常记录&lt;/li&gt;
&lt;li&gt;求和&lt;/li&gt;
&lt;li&gt;求百分比&lt;/li&gt;
&lt;li&gt;格式化打印&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;
如果我们把这些职责拆分成不同的函数，看起来会是这个样子：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-clojure&quot;&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;defn&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;handle-nations-empty&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;[&lt;/span&gt;nations&lt;span style=&quot;color: #7388d6;&quot;&gt;]&lt;/span&gt;
  &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;println&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;Nation list empty!&quot;&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;
  &lt;span style=&quot;color: #110099;&quot;&gt;:invalid&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;

&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;defn&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;cleanup&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;[&lt;/span&gt;nations&lt;span style=&quot;color: #7388d6;&quot;&gt;]&lt;/span&gt;
  &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;-&amp;gt;&amp;gt;&lt;/span&gt; nations
       &lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;filter&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;:country&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt;
       &lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;filter&lt;/span&gt; #&lt;span style=&quot;color: #709870;&quot;&gt;(&lt;/span&gt;&amp;lt; 0 &lt;span style=&quot;color: #907373;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;:gdp&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;%&lt;/span&gt;&lt;span style=&quot;color: #907373;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #709870;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;

&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;defn&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;gdp-sum&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;[&lt;/span&gt;nations&lt;span style=&quot;color: #7388d6;&quot;&gt;]&lt;/span&gt;
  &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;-&amp;gt;&amp;gt;&lt;/span&gt; nations
       &lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;map&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;:gdp&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt;
       &lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;reduce&lt;/span&gt; +&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;

&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;defn&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;calc-percentage&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;[&lt;/span&gt;val sum&lt;span style=&quot;color: #7388d6;&quot;&gt;]&lt;/span&gt;
  &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;* 100.0 &lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;/ val sum&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;

&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;defn&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;format-nation-record&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;[&lt;/span&gt;nation&lt;span style=&quot;color: #7388d6;&quot;&gt;]&lt;/span&gt;
  &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;format&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;Country: %-7s&lt;/span&gt;&lt;span style=&quot;color: #000000; background-color: #f4ecd8; font-weight: bold;&quot;&gt;\t&lt;/span&gt;&lt;span style=&quot;color: #2A00FF;&quot;&gt;GDP: %d&lt;/span&gt;&lt;span style=&quot;color: #000000; background-color: #f4ecd8; font-weight: bold;&quot;&gt;\t&lt;/span&gt;&lt;span style=&quot;color: #2A00FF;&quot;&gt;Percentage: %5.2f%%&quot;&lt;/span&gt;
          &lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;:country&lt;/span&gt; nation&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt;
          &lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;:gdp&lt;/span&gt; nation&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt;
          &lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;:percentage&lt;/span&gt; nation&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;


&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;defn&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;print-nations-gdp-percentage-v2&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;[&lt;/span&gt;nations&lt;span style=&quot;color: #7388d6;&quot;&gt;]&lt;/span&gt;
  &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;if&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;empty?&lt;/span&gt; nations&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt;
    &lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;handle-nations-empty nations&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt;
    &lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;let&lt;/span&gt; &lt;span style=&quot;color: #709870;&quot;&gt;[&lt;/span&gt;cleanuped &lt;span style=&quot;color: #907373;&quot;&gt;(&lt;/span&gt;cleanup nations&lt;span style=&quot;color: #907373;&quot;&gt;)&lt;/span&gt;
          total &lt;span style=&quot;color: #907373;&quot;&gt;(&lt;/span&gt;gdp-sum cleanuped&lt;span style=&quot;color: #907373;&quot;&gt;)&lt;/span&gt;
          results &lt;span style=&quot;color: #907373;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;map&lt;/span&gt;
                   &lt;span style=&quot;color: #6276ba;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;fn&lt;/span&gt; &lt;span style=&quot;color: #858580;&quot;&gt;[&lt;/span&gt;n&lt;span style=&quot;color: #858580;&quot;&gt;]&lt;/span&gt;
                     &lt;span style=&quot;color: #858580;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;assoc&lt;/span&gt;
                      n &lt;span style=&quot;color: #110099;&quot;&gt;:percentage&lt;/span&gt;
                      &lt;span style=&quot;color: #80a880;&quot;&gt;(&lt;/span&gt;calc-percentage &lt;span style=&quot;color: #887070;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;:gdp&lt;/span&gt; n&lt;span style=&quot;color: #887070;&quot;&gt;)&lt;/span&gt; total&lt;span style=&quot;color: #80a880;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #858580;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #6276ba;&quot;&gt;)&lt;/span&gt; cleanuped&lt;span style=&quot;color: #907373;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #709870;&quot;&gt;]&lt;/span&gt;
      &lt;span style=&quot;color: #709870;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;doseq&lt;/span&gt; &lt;span style=&quot;color: #907373;&quot;&gt;[&lt;/span&gt;x results&lt;span style=&quot;color: #907373;&quot;&gt;]&lt;/span&gt;
        &lt;span style=&quot;color: #907373;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;println&lt;/span&gt; &lt;span style=&quot;color: #6276ba;&quot;&gt;(&lt;/span&gt;format-nation-record x&lt;span style=&quot;color: #6276ba;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #907373;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #709870;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;print-nations-gdp-percentage-v2 nations&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;pre class=&quot;example&quot;&gt;
Country: China  	GDP: 17734062645371	Percentage: 29.80%
Country: USA    	GDP: 23315080560000	Percentage: 39.17%
Country: Japan  	GDP: 4940877780755	Percentage:  8.30%
Country: German 	GDP: 4259934911821	Percentage:  7.16%
Country: India  	GDP: 3176295065497	Percentage:  5.34%
Country: UK     	GDP: 3131377762925	Percentage:  5.26%
Country: France 	GDP: 2957879759263	Percentage:  4.97%
&lt;/pre&gt;



&lt;p&gt;
看起来，有些函数非常简单，似乎是多此一举。但是正因为其简单，只承担单一职责，我们进行单元测试的时候也很方便能保证代码正确。因为职责单一，修改起来也更容易，针对修改的测试也更容易编写。另外，每个步骤的函数都需要有一个有意义的函数名。可能会让你绞尽脑汁，但是仔细想想，这正是要求你为各个函数所承担的职责命名。如果你难以给函数命名，说明职责还是没有厘清。有了这些职责单一、命名合理、清晰明确的函数，未来不管是自己还是他人读这个代码也更容易理解、更好维护、节省时间。
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines R.4 原始引用是无主的</title>
   <link href="http://kimi.im/2023-02-10-cppcoreguidelines-r4"/>
   <updated>2023-02-10T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-r4</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;A raw reference (a &lt;code&gt;T&amp;amp;&lt;/code&gt;) is non-owning&amp;rdquo;
&lt;/p&gt;


&lt;p&gt;
理由
&lt;/p&gt;

&lt;p&gt;
大部分原始引用是无主的。我们希望明确引用的所有权，从而可以可靠、高效地删除对象。
&lt;/p&gt;


&lt;p&gt;
例子
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt;&amp;amp; &lt;span style=&quot;color: #000000;&quot;&gt;r&lt;/span&gt; = *&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;7&lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;;  &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;bad: raw owning reference&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;...&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;delete&lt;/span&gt; &amp;amp;r;             &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;bad: violated the rule against deleting raw pointers&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines R.3 原始指针是无主的</title>
   <link href="http://kimi.im/2023-02-09-cppcoreguidelines-r3"/>
   <updated>2023-02-09T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-r3</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;A raw pointer (a T*) is non-owning&amp;rdquo;
&lt;/p&gt;


&lt;p&gt;
理由
&lt;/p&gt;

&lt;p&gt;
无需多言，原始指针都是无主的。我们想要有主指针，从而可以可靠且高效地删除指针所指向的对象。
&lt;/p&gt;

&lt;p&gt;
例子
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt;* &lt;span style=&quot;color: #000000;&quot;&gt;p1&lt;/span&gt; = &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;7&lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;;           &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;bad: raw owning pointer&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;auto&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;p2&lt;/span&gt; = make_unique&lt;span style=&quot;color: #7388d6;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;&amp;gt;(&lt;/span&gt;7&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;  &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;OK: the int is owned by a unique pointer&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;...&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
&lt;code&gt;unique_ptr&lt;/code&gt; 可以确保所指向的对象成功删除，从而防止内存泄漏。就算是在异常情况下，也能很好的保证。
&lt;/p&gt;

&lt;p&gt;
例子
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;template&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;typename&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;X&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;public&lt;/span&gt;:
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt;* &lt;span style=&quot;color: #000000;&quot;&gt;p&lt;/span&gt;;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;bad: it is unclear whether p is owning or not&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt;* &lt;span style=&quot;color: #000000;&quot;&gt;q&lt;/span&gt;;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;bad: it is unclear whether q is owning or not&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;...&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
我们可以通过显式的说明所有权，来修复上面代码的问题。
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;template&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;typename&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;X2&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;public&lt;/span&gt;:
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;owner&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt;*&lt;span style=&quot;color: #7388d6;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;p&lt;/span&gt;;  &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;OK: p is owning&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt;* &lt;span style=&quot;color: #000000;&quot;&gt;q&lt;/span&gt;;         &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;OK: q is not owning&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;...&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;
&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;
例外
&lt;/p&gt;

&lt;p&gt;
大部分例外情况出现在老的代码里，为了可以和 C 或 C 风格接口的代码一起编译，有不少 C++ 代码违背此规则。最好是有什么工具可以自动转换，但是比较困难。
&lt;/p&gt;

&lt;p&gt;
有些很底层的资源处理的代码还避免不了原始指针，比如 vector 的实现中就用了一个有主指针，两个无主原始指针。
&lt;/p&gt;


&lt;p&gt;
注意
&lt;/p&gt;

&lt;p&gt;
&lt;code&gt;owner&amp;lt;T*&amp;gt;&lt;/code&gt; 和原始指针没有太多语义上的区别，只是作为一个标记，告诉程序员或分析工具，这里有一个指针，请记得删除。
&lt;/p&gt;


&lt;p&gt;
坏例子
&lt;/p&gt;

&lt;p&gt;
返回原始指针导致对象生命周期管理的不确定性，调用方到底要不要手工删除指向的对象？
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Gadget&lt;/span&gt;* &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;make_gadget&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;n&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;auto&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;p&lt;/span&gt; = &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Gadget&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;n&lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;...&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; p;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;

&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;caller&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;n&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;auto&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;p&lt;/span&gt; = make_gadget&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;n&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;remember to delete p&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;...&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;delete&lt;/span&gt; p;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
除了可能会有内存泄漏问题，这段代码还增加了 new 和 delete 操作。其实如果对象比较小，完全可以通过移动，或者值返回操作从函数返回。
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Gadget&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;make_gadget&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;n&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Gadget&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;g&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;n&lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;...&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; g;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;
注意
&lt;/p&gt;

&lt;p&gt;
此规则适用于工厂函数。
&lt;/p&gt;


&lt;p&gt;
注意
&lt;/p&gt;

&lt;p&gt;
如果一定需要指针语义，比如返回基类指针，指向类层级中的子类，可以使用智能指针。
&lt;/p&gt;


&lt;p&gt;
强化
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;警告：删除没有标记为 &lt;code&gt;owner&amp;lt;T&amp;gt;&lt;/code&gt; 的原始指针&lt;/li&gt;
&lt;li&gt;警告：在任何代码路径上重置或删除 &lt;code&gt;owner&amp;lt;T&amp;gt;&lt;/code&gt; 指针失败的情况&lt;/li&gt;
&lt;li&gt;警告：返回值是 new 出来的原始指针&lt;/li&gt;
&lt;li&gt;警告：如果函数以返回一个对象，但是这个对象是函数中分配的，并且该对象有一个移动构造函数。建议考虑值返回。&lt;/li&gt;
&lt;/ul&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines R.2 在接口中，只用原始指针表示独立的对象</title>
   <link href="http://kimi.im/2023-02-08-cppcoreguidelines-r2"/>
   <updated>2023-02-08T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-r2</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;In interfaces, use raw pointers to denote individual objects (only)&amp;rdquo;
&lt;/p&gt;


&lt;p&gt;
理由
&lt;/p&gt;

&lt;p&gt;
最好用容器类型表示数组，比如 vector（有所有权的）或 span（无所有权的）。因为容器和 view 带有可以进行范围检查的信息。
&lt;/p&gt;



&lt;p&gt;
坏例子
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt;* &lt;span style=&quot;color: #000000;&quot;&gt;p&lt;/span&gt;, &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;n&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;n is the number of elements in p[]&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;...&lt;/span&gt;
    p&lt;span style=&quot;color: #7388d6;&quot;&gt;[&lt;/span&gt;2&lt;span style=&quot;color: #7388d6;&quot;&gt;]&lt;/span&gt; = 7;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;bad: subscript raw pointer&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;...&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
编译器无法解析代码注释，没有其他信息，无法知道 p 执行的数组元素的数量是 n。应该使用 span。
&lt;/p&gt;


&lt;p&gt;
例子
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;g&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt;* &lt;span style=&quot;color: #000000;&quot;&gt;p&lt;/span&gt;, &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;fmt&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;print *p using format #fmt&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;... uses *p and p[0] only ...&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;
例外
&lt;/p&gt;

&lt;p&gt;
C 风格字符串以 NULL 结尾，所以可以以单独指针的方式传参。避免使用 char*
，用 zstring 来表达你需要用到空字符结尾的字符串。
&lt;/p&gt;


&lt;p&gt;
注意
&lt;/p&gt;

&lt;p&gt;
目前很多指向单一元素的指针都可以用引用替代。不过，如果 nullptr 是一个可选的值，那么引用就不合适了。
&lt;/p&gt;


&lt;p&gt;
强化
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;标记在指针上使用了指针运算符的情况（包括 &lt;code&gt;++&lt;/code&gt; ）。不过在老代码上，会产生很多误报。&lt;/li&gt;
&lt;li&gt;标记数组名作为单独指针传递的情况&lt;/li&gt;
&lt;/ul&gt;
</content>
 </entry>
 
 <entry>
   <title>SOLID 原则</title>
   <link href="http://kimi.im/2023-02-07-SOLID-principles"/>
   <updated>2023-02-07T00:00:00+00:00</updated>
   <id>http://kimi.im/SOLID-principles</id>
   <content type="html">&lt;p&gt;
软件工程领域，有一个概念叫 SOLID。SOLID 是五个面向对象设计原则的首字母缩写。最早由 Robert C. Martin 在其 2000 年的论文《Design Principles
and Design Patterns》中提出的。
&lt;/p&gt;

&lt;p&gt;
SOLID 指的是以下五个原则：
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;Single-responsibility principle，单一责任原则，简称 SRP。&amp;ldquo;There
should never be more than one reason for a class to change.&amp;rdquo; In
other words, every class should have only one responsibility. 一个类应该只有一个发生变化的原因。换言之，每个类应该只有一个职责。&lt;/li&gt;
&lt;li&gt;Open–closed principle，开闭原则，简称 OCP。&amp;ldquo;Software entities
&amp;#x2026; should be open for extension, but closed for modification.&amp;rdquo; 软件实体应该开放于扩展，但封闭于修改。&lt;/li&gt;
&lt;li&gt;Liskov substitution principle，里氏替换原则，利斯科夫替代原则，简称
LSP。 &amp;ldquo;Functions that use pointers or references to base classes
must be able to use objects of derived classes without knowing it.&amp;rdquo;
通过对象的指针或引用调用其基类上定义的函数时，必须做到不用关心实际对象是基类的实体还是继承类的实体。&lt;/li&gt;
&lt;li&gt;Interface segregation principle，接口隔离原则，简称 ISP。&amp;ldquo;Clients
should not be forced to depend upon interfaces that they do not
use.&amp;rdquo; 客户端不应该依赖它不需要的接口。一个类对另一个类的依赖应该建立在最小的接口上。&lt;/li&gt;
&lt;li&gt;Dependency inversion principle，依赖倒置原则，简称 DIP。 &amp;ldquo;Depend
upon abstractions, [not] concretions.&amp;rdquo; 程序要依赖于抽象接口，不要依赖于具体实现。简单的说就是要求对抽象进行编程，不要对实现进行编程，这样就降低了实现模块间的耦合。&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
据说 SOLID 是在 2004 年的时候，由 Michael Feathers 总结出来的。
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines R.1 通过资源句柄和 RAII 自动管理资源</title>
   <link href="http://kimi.im/2023-02-07-cppcoreguidelines-r1"/>
   <updated>2023-02-07T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-r1</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;Manage resources automatically using resource handles and RAII (Resource Acquisition Is Initialization)&amp;rdquo;
&lt;/p&gt;


&lt;p&gt;
理由
&lt;/p&gt;

&lt;p&gt;
避免内存泄漏，避免手工管理资源的复杂性。C++ 语言强化了构造和析构函数，对应资源的获取和释放，比如 fopen/fclose, lock/unlock, new/delete。在你需要这种成对的获取/释放函数的时候，可以将资源封装在对象中，让对象的构造/析构函数来强化这种成对的操作。
&lt;/p&gt;

&lt;p&gt;
坏例子
&lt;/p&gt;

&lt;p&gt;
考虑
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;send&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;X&lt;/span&gt;* &lt;span style=&quot;color: #000000;&quot;&gt;x&lt;/span&gt;, &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;string_view&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;destination&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;auto&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;port&lt;/span&gt; = open_port&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;destination&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
    my_mutex.lock&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt;;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;...&lt;/span&gt;
    send&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;port, x&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;...&lt;/span&gt;
    my_mutex.unlock&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt;;
    close_port&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;port&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;delete&lt;/span&gt; x;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
这段代码里，你必须记住 &lt;code&gt;unlock&lt;/code&gt; ， &lt;code&gt;close_port&lt;/code&gt; ， &lt;code&gt;delete&lt;/code&gt; 等操作，而且必须操作一次，任何地方出错，抛出了异常，就会导致资源泄漏，比如 x 没删掉，
&lt;code&gt;my_mutex&lt;/code&gt; 没解锁。
&lt;/p&gt;


&lt;p&gt;
例子
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;send&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;unique_ptr&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;&amp;lt;&lt;/span&gt;X&lt;span style=&quot;color: #7388d6;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;x&lt;/span&gt;, &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;string_view&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;destination&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;  &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;x owns the X&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Port&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;port&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;destination&lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;;            &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;port owns the PortHandle&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;lock_guard&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;&amp;lt;&lt;/span&gt;mutex&lt;span style=&quot;color: #7388d6;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;guard&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;my_mutex&lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;guard owns the lock&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;...&lt;/span&gt;
    send&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;port, x&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;...&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;automatically unlocks my_mutex and deletes the pointer in x&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
这个例子里，所哟资源都是自动清理掉的，而且只处理一次，不管有没有遇到异常情况。另外，函数还声明，接收指针的所有权。
&lt;/p&gt;

&lt;p&gt;
什么是 Port？其实是对资源的一个简单封装：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Port&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;PortHandle&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;port&lt;/span&gt;;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;public&lt;/span&gt;:
    &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;Port&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;string_view&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;destination&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; : port&lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;open_port&lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;destination&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;
    ~&lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;Port&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt; close_port&lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;port&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt;; &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;operator&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;PortHandle&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; port; &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;

    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;port handles can&apos;t usually be cloned, so disable copying and assignment if necessary&lt;/span&gt;
    &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;Port&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Port&lt;/span&gt;&amp;amp;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; = &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;delete&lt;/span&gt;;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Port&lt;/span&gt;&amp;amp; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;operator&lt;/span&gt;&lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Port&lt;/span&gt;&amp;amp;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; = &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;delete&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;
&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;
注意
&lt;/p&gt;

&lt;p&gt;
当一个资源不是一个有析构函数的类表示的时候，请将它封装到一个类中，或者用 finally。
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines Enum.8 需要的时候才指定枚举项的值</title>
   <link href="http://kimi.im/2023-02-06-cppcoreguidelines-enum8"/>
   <updated>2023-02-06T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-enum8</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;Specify enumerator values only when necessary&amp;rdquo;
&lt;/p&gt;


&lt;p&gt;
理由
&lt;/p&gt;

&lt;p&gt;
简单方便。避免枚举项的值重复。默认的值是按顺序设定的，对于 switch 语句的实现来说比较友好。
&lt;/p&gt;


&lt;p&gt;
例子
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;enum&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Col1&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;red&lt;/span&gt;, &lt;span style=&quot;color: #000000;&quot;&gt;yellow&lt;/span&gt;, &lt;span style=&quot;color: #000000;&quot;&gt;blue&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;enum&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Col2&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;red&lt;/span&gt; = 1, &lt;span style=&quot;color: #000000;&quot;&gt;yellow&lt;/span&gt; = 2, &lt;span style=&quot;color: #000000;&quot;&gt;blue&lt;/span&gt; = 2 &lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;typo&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;enum&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Month&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;jan&lt;/span&gt; = 1, &lt;span style=&quot;color: #000000;&quot;&gt;feb&lt;/span&gt;, &lt;span style=&quot;color: #000000;&quot;&gt;mar&lt;/span&gt;, &lt;span style=&quot;color: #000000;&quot;&gt;apr&lt;/span&gt;, &lt;span style=&quot;color: #000000;&quot;&gt;may&lt;/span&gt;, &lt;span style=&quot;color: #000000;&quot;&gt;jun&lt;/span&gt;,
                   &lt;span style=&quot;color: #000000;&quot;&gt;jul&lt;/span&gt;, &lt;span style=&quot;color: #000000;&quot;&gt;august&lt;/span&gt;, &lt;span style=&quot;color: #000000;&quot;&gt;sep&lt;/span&gt;, &lt;span style=&quot;color: #000000;&quot;&gt;oct&lt;/span&gt;, &lt;span style=&quot;color: #000000;&quot;&gt;nov&lt;/span&gt;, &lt;span style=&quot;color: #000000;&quot;&gt;dec&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;
                 &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;starting with 1 is conventional&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;enum&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Base_flag&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;dec&lt;/span&gt; = 1, &lt;span style=&quot;color: #000000;&quot;&gt;oct&lt;/span&gt; = dec &amp;lt;&amp;lt; 1, &lt;span style=&quot;color: #000000;&quot;&gt;hex&lt;/span&gt; = dec &amp;lt;&amp;lt; 2 &lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;set of bits&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
明确指定枚举项的值只有在这些情况下有用：
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;需要约定俗成的值，比如月份&lt;/li&gt;
&lt;li&gt;连续的值不是想要的，如设定不同的比特位&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;
强化
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;标记重复的枚举项值&lt;/li&gt;
&lt;li&gt;标记多余的显式方式设定连续值的情况&lt;/li&gt;
&lt;/ul&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines Enum.7 只有必要的时候才指定枚举项的数据类型</title>
   <link href="http://kimi.im/2023-02-05-cppcoreguidelines-enum7"/>
   <updated>2023-02-05T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-enum7</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;Specify the underlying type of an enumeration only when necessary&amp;rdquo;
&lt;/p&gt;


&lt;p&gt;
理由
&lt;/p&gt;

&lt;p&gt;
默认的方式更容易阅读和编写。 int 是默认的整型值，int 与 C 枚举兼容。
&lt;/p&gt;


&lt;p&gt;
例子
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;enum&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Direction&lt;/span&gt; : &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;char&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #000000;&quot;&gt;n&lt;/span&gt;, &lt;span style=&quot;color: #000000;&quot;&gt;s&lt;/span&gt;, &lt;span style=&quot;color: #000000;&quot;&gt;e&lt;/span&gt;, &lt;span style=&quot;color: #000000;&quot;&gt;w&lt;/span&gt;,
    &lt;span style=&quot;color: #000000;&quot;&gt;ne&lt;/span&gt;, &lt;span style=&quot;color: #000000;&quot;&gt;nw&lt;/span&gt;, &lt;span style=&quot;color: #000000;&quot;&gt;se&lt;/span&gt;, &lt;span style=&quot;color: #000000;&quot;&gt;sw&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;  &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;underlying type saves space&lt;/span&gt;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;enum&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Web_color&lt;/span&gt; : &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int32_t&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #000000;&quot;&gt;red&lt;/span&gt;   = 0xFF0000,
    &lt;span style=&quot;color: #000000;&quot;&gt;green&lt;/span&gt; = 0x00FF00,
    &lt;span style=&quot;color: #000000;&quot;&gt;blue&lt;/span&gt;  = 0x0000FF
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;  &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;underlying type is redundant&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;
注意
&lt;/p&gt;

&lt;p&gt;
在提前声明枚举类型的时候，你必须指明内部用什么数据类型：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;enum&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Flags&lt;/span&gt; : &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;char&lt;/span&gt;;

&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Flags&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;

&lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;....&lt;/span&gt;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;enum&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Flags&lt;/span&gt; : &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;char&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;/* &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;...&lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt; */&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;
&lt;/pre&gt;
&lt;/div&gt;
</content>
 </entry>
 
 <entry>
   <title>搭建一个 nostr 中继服务</title>
   <link href="http://kimi.im/2023-02-04-setup-nostr-relay"/>
   <updated>2023-02-04T00:00:00+00:00</updated>
   <id>http://kimi.im/setup-nostr-relay</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;https://github.com/nostr-protocol/nostr&quot;&gt;nostr&lt;/a&gt; 是一个相当简单的开放协议，可以在全球范围内搭建一个有趣的社交网络。因为协议本身很简单，所以大部分的加密、签名工作在客户端完成，而中继服务器 Relay 所做的事情只是接收事件消息，根据客户端订阅要求返回消息。
&lt;/p&gt;

&lt;p&gt;
目前 relay 的实现也很多，比如 nostream 的搭建就很方便，只要安装好
docker，设置好域名，直接运行就可以啦。
&lt;/p&gt;

&lt;p&gt;
以下记录一下 Relay 的搭建过程。
&lt;/p&gt;

&lt;div id=&quot;outline-container-org64de9c9&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;org64de9c9&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;1.&lt;/span&gt; 安装基础软件&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-1&quot;&gt;
&lt;p&gt;
首先分配一台安装 Ubuntu Server 20.04 LTS Ubuntu Server 20.04 LTS 操作系统的虚拟机，默认规格就够了。
&lt;/p&gt;

&lt;p&gt;
首先，更新软件包列表。提示 30 个软件包需要升级，暂时先不管。
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-shell&quot;&gt;kimim@nostr:~$ sudo apt update

&lt;span style=&quot;color: #3F7F5F;&quot;&gt;# &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;update package list from mirrors&lt;/span&gt;
Fetched 25.5 MB&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt; in&lt;/span&gt; 4s (6240 kB/s)
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
30 packages can be upgraded. Run &lt;span style=&quot;color: #2A00FF;&quot;&gt;&apos;apt list --upgradable&apos;&lt;/span&gt; to see them.
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
然后，安装以下软件包，用来运行编译 nostream，配置 relay 的证书。
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-shell&quot;&gt;kimim@nostr:~$ sudo apt install nodejs npm nginx certbot python3-certbot-nginx

&lt;span style=&quot;color: #3F7F5F;&quot;&gt;# &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;list of packages need to be installed&lt;/span&gt;
0 upgraded, 410 newly installed, 0 to remove and 30 not upgraded.
Need to get 168 MB of archives.
After this operation, 669 MB of additional disk space will be used.
Do you want to continue? [Y/n] Y
&lt;span style=&quot;color: #3F7F5F;&quot;&gt;# &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;installation in progress&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgec11bfe&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgec11bfe&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;2.&lt;/span&gt; 安装 docker&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-2&quot;&gt;
&lt;p&gt;
接下来，安装 docker，因为根据 nostream 官网要求，需要安装官方的 docker。就是按照 &lt;a href=&quot;https://docs.docker.com/engine/install/ubuntu/&quot;&gt;https://docs.docker.com/engine/install/ubuntu/&lt;/a&gt; 安装 docker。
&lt;/p&gt;

&lt;p&gt;
首先，删除已经安装的 docker（如果有，我的这台机器刚初始化，所以没有安装 docker）。
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-shell&quot;&gt;kimim@nostr:~$ sudo apt-get remove docker.io
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
Package &lt;span style=&quot;color: #2A00FF;&quot;&gt;&apos;docker.io&apos;&lt;/span&gt; is not installed, so not removed
0 upgraded, 0 newly installed, 0 to remove and 30 not upgraded.
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
然后，安装 docker 需要的证书组件。
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-shell&quot;&gt;kimim@nostr:~$ sudo apt-get install ca-certificates curl gnupg lsb-release
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
lsb-release is already the newest version (11.1.0ubuntu4)&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;.&lt;/span&gt;
lsb-release set to manually installed.
ca-certificates is already the newest version (20211016ubuntu0.22.04.1)&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;.&lt;/span&gt;
ca-certificates set to manually installed.
curl is already the newest version (7.81.0-1ubuntu1.7)&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;.&lt;/span&gt;
curl set to manually installed.
gnupg is already the newest version (2.2.27-3ubuntu2.1)&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;.&lt;/span&gt;
gnupg set to manually installed.
0 upgraded, 0 newly installed, 0 to remove and 30 not upgraded.
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
接着，添加 docker 官方 GPG 证书。
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-shell&quot;&gt;kimim@nostr:~$ sudo mkdir -p /etc/apt/keyrings
kimim@nostr:~$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
添加 docker 官方源：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-shell&quot;&gt;kimim@nostr:~$ echo &lt;span style=&quot;color: #2A00FF;&quot;&gt;\&lt;/span&gt;
  &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;deb [arch=$(&lt;/span&gt;&lt;span style=&quot;color: #ff00ff;&quot;&gt;dpkg --print-architecture&lt;/span&gt;&lt;span style=&quot;color: #2A00FF;&quot;&gt;) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \&lt;/span&gt;
&lt;span style=&quot;color: #2A00FF;&quot;&gt;  $(&lt;/span&gt;&lt;span style=&quot;color: #ff00ff;&quot;&gt;lsb_release -cs&lt;/span&gt;&lt;span style=&quot;color: #2A00FF;&quot;&gt;) stable&quot;&lt;/span&gt; | sudo tee /etc/apt/sources.list.d/docker.list &amp;gt; /dev/null
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
再次更新软件包：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-shell&quot;&gt;kimim@nostr:~$ sudo apt-get update
Get:1 https://download.docker.com/linux/ubuntu jammy InRelease [48.9 kB]
Get:2 https://download.docker.com/linux/ubuntu jammy/stable amd64 Packages [12.7 kB]
Fetched 61.6 kB&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt; in&lt;/span&gt; 1s (105 kB/s)
Reading package lists... Done
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
安装 docker 以及 cli，compose 插件。
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-shell&quot;&gt;kimim@nostr:~$ sudo apt-get install docker-ce docker-ce-cli containerd.io docker-compose-plugin

&lt;span style=&quot;color: #3F7F5F;&quot;&gt;# &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;list of packages need to be installed&lt;/span&gt;
0 upgraded, 11 newly installed, 0 to remove and 30 not upgraded.
Need to get 111 MB of archives.
After this operation, 397 MB of additional disk space will be used.
Do you want to continue? [Y/n] Y

&lt;span style=&quot;color: #3F7F5F;&quot;&gt;# &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;installation in progress&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
把当前用户添加到 docker 权限组：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-shell&quot;&gt;kimim@nostr:~$ sudo usermod -a -G docker kimim
kimim@nostr:~$ newgrp docker
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
测试一下 docker 是否正常工作：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-shell&quot;&gt;kimim@nostr:~$ docker run hello-world
Unable to find image &lt;span style=&quot;color: #2A00FF;&quot;&gt;&apos;hello-world:latest&apos;&lt;/span&gt; locally
latest: Pulling from library/hello-world
2db29710123e: Pull complete
Digest: sha256:aa0cc8055b82dc2509bed2e19b275c8f463506616377219d9642221ab53cf9fe
Status: Downloaded newer image for hello-world:latest

Hello from Docker!
This message shows that your installation appears to be working correctly.
&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-org50b2461&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;org50b2461&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;3.&lt;/span&gt; 配置服务器证书&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-3&quot;&gt;
&lt;p&gt;
修改 nginx 的配置文件。请根据自己的服务器域名修改 &lt;code&gt;server_name&lt;/code&gt; 字段。
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-shell&quot;&gt;kimim@nostr:~$ sudo rm -rf /etc/nginx/sites-available/default
kimim@nostr:~$ sudo vi /etc/nginx/sites-available/default
&lt;span style=&quot;color: #3F7F5F;&quot;&gt;# &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;&amp;#28155;&amp;#21152;&amp;#20197;&amp;#19979;&amp;#20869;&amp;#23481;&lt;/span&gt;
kimim@nostr:~$ cat /etc/nginx/sites-available/default
server{
    server_name nostr.kimi.im;
    location / {
        proxy_set_header X-Forwarded-For $&lt;span style=&quot;color: #000000;&quot;&gt;proxy_add_x_forwarded_for&lt;/span&gt;;
        proxy_set_header Host $&lt;span style=&quot;color: #000000;&quot;&gt;host&lt;/span&gt;;
        proxy_pass http://127.0.0.1:8008;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $&lt;span style=&quot;color: #000000;&quot;&gt;http_upgrade&lt;/span&gt;;
        proxy_set_header Connection &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;upgrade&quot;&lt;/span&gt;;
    }
}
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
重启 nginx，使配置生效。
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-shell&quot;&gt;kimim@nostr:~$ sudo service nginx restart
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
添加 A 域名记录，比如：
&lt;/p&gt;

&lt;pre class=&quot;example&quot; id=&quot;orgec34fcb&quot;&gt;
TYPE    HOST            ANSWER          TTL
A       nostr.kimi.im   192.30.252.153  300
&lt;/pre&gt;

&lt;p&gt;
等一两分钟，等域名记录生效，再用 certbox 配置服务器证书：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-shell&quot;&gt;kimim@nostr:~$ sudo certbot --nginx -d nostr.kimi.im
Saving debug log to /var/log/letsencrypt/letsencrypt.log
Enter email address (used for urgent renewal and security notices)
 (Enter &lt;span style=&quot;color: #2A00FF;&quot;&gt;&apos;c&apos;&lt;/span&gt; to cancel): kimim@kimi.im

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Please read the Terms of Service at
https://letsencrypt.org/documents/LE-SA-v1.3-September-21-2022.pdf. You must
agree&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt; in&lt;/span&gt; order to register with the ACME server. Do you agree?
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(Y)es/(N)o: Y

Successfully received certificate.
Certificate is saved at: /etc/letsencrypt/live/nostr.kimi.im/fullchain.pem
Key is saved at:         /etc/letsencrypt/live/nostr.kimi.im/privkey.pem
This certificate expires on 2023-05-05.
These files will be updated when the certificate renews.
Certbot has set up a scheduled task to automatically renew this certificate&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt; in&lt;/span&gt; the background.

Deploying certificate
Successfully deployed certificate for nostr.kimi.im to /etc/nginx/sites-enabled/default
Congratulations! You have successfully enabled HTTPS on https://nostr.kimi.im

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
If you like Certbot, please consider supporting our work by:
 * Donating to ISRG / Let&lt;span style=&quot;color: #2A00FF;&quot;&gt;&apos;s Encrypt:   https://letsencrypt.org/donate&lt;/span&gt;
&lt;span style=&quot;color: #2A00FF;&quot;&gt; * Donating to EFF:                    https://eff.org/donate-le&lt;/span&gt;
&lt;span style=&quot;color: #2A00FF;&quot;&gt;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-org9ff4345&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;org9ff4345&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;4.&lt;/span&gt; 运行 nostream&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-4&quot;&gt;
&lt;p&gt;
获取 nostream 代码：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-shell&quot;&gt;kimim@nostr:~$ git clone https://github.com/Cameri/nostream.git
Cloning into &lt;span style=&quot;color: #2A00FF;&quot;&gt;&apos;nostream&apos;&lt;/span&gt;...
remote: Enumerating objects: 3287, done.
remote: Counting objects: 100% (1228/1228), done.
remote: Compressing objects: 100% (415/415), done.
remote: Total 3287 (delta 889), reused 984 (delta 803), pack-reused 2059
Receiving objects: 100% (3287/3287), 1.05 MiB | 7.90 MiB/s, done.
Resolving deltas: 100% (2036/2036), done.
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
用 docker 运行 nostream，大概用了两分钟，就看到一个漂亮的 NOSTREAM logo 了。
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-shell&quot;&gt;kimim@nostr:~$ cd nostream/
kimim@nostr:~/nostream$ npm run docker:compose:start
&amp;gt; nostream@1.21.0 docker:compose:start
&amp;gt; ./scripts/start

[+] Running 25/25
&lt;span style=&quot;color: #3F7F5F;&quot;&gt;# &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;...&lt;/span&gt;
[+] Building 128.2s (16/16) FINISHED
&lt;span style=&quot;color: #3F7F5F;&quot;&gt;# &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;...&lt;/span&gt;
[+] Running 6/5
&lt;span style=&quot;color: #3F7F5F;&quot;&gt;# &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;...&lt;/span&gt;
Attaching to nostream, nostream-cache, nostream-db, nostream-migrate
&lt;span style=&quot;color: #3F7F5F;&quot;&gt;# &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;...&lt;/span&gt;
nostream-db       | CREATE DATABASE
&lt;span style=&quot;color: #3F7F5F;&quot;&gt;# &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;...&lt;/span&gt;
nostream          |
nostream          |  &amp;#9608;&amp;#9608;&amp;#9608;&amp;#9604;    &amp;#9608;  &amp;#9618;&amp;#9608;&amp;#9608;&amp;#9608;&amp;#9608;&amp;#9608;    &amp;#9608;&amp;#9608;&amp;#9608;&amp;#9608;&amp;#9608;&amp;#9608; &amp;#9604;&amp;#9604;&amp;#9604;&amp;#9608;&amp;#9608;&amp;#9608;&amp;#9608;&amp;#9608;&amp;#9619; &amp;#9608;&amp;#9608;&amp;#9600;&amp;#9608;&amp;#9608;&amp;#9608;  &amp;#9619;&amp;#9608;&amp;#9608;&amp;#9608;&amp;#9608;&amp;#9608; &amp;#9604;&amp;#9604;&amp;#9604;       &amp;#9608;&amp;#9608;&amp;#9608;&amp;#9604; &amp;#9604;&amp;#9608;&amp;#9608;&amp;#9608;&amp;#9619;
nostream          |  &amp;#9608;&amp;#9608; &amp;#9600;&amp;#9608;   &amp;#9608; &amp;#9618;&amp;#9608;&amp;#9608;&amp;#9618;  &amp;#9608;&amp;#9608;&amp;#9618;&amp;#9618;&amp;#9608;&amp;#9608;    &amp;#9618; &amp;#9619;  &amp;#9608;&amp;#9608;&amp;#9618; &amp;#9619;&amp;#9618;&amp;#9619;&amp;#9608;&amp;#9608; &amp;#9618; &amp;#9608;&amp;#9608;&amp;#9618;&amp;#9619;&amp;#9608;   &amp;#9600;&amp;#9618;&amp;#9608;&amp;#9608;&amp;#9608;&amp;#9608;&amp;#9604;    &amp;#9619;&amp;#9608;&amp;#9608;&amp;#9618;&amp;#9600;&amp;#9608;&amp;#9600; &amp;#9608;&amp;#9608;&amp;#9618;
nostream          | &amp;#9619;&amp;#9608;&amp;#9608;  &amp;#9600;&amp;#9608; &amp;#9608;&amp;#9608;&amp;#9618;&amp;#9618;&amp;#9608;&amp;#9608;&amp;#9617;  &amp;#9608;&amp;#9608;&amp;#9618;&amp;#9617; &amp;#9619;&amp;#9608;&amp;#9608;&amp;#9604;   &amp;#9618; &amp;#9619;&amp;#9608;&amp;#9608;&amp;#9617; &amp;#9618;&amp;#9617;&amp;#9619;&amp;#9608;&amp;#9608; &amp;#9617;&amp;#9604;&amp;#9608; &amp;#9618;&amp;#9618;&amp;#9608;&amp;#9608;&amp;#9608;  &amp;#9618;&amp;#9608;&amp;#9608;  &amp;#9600;&amp;#9608;&amp;#9604;  &amp;#9619;&amp;#9608;&amp;#9608;    &amp;#9619;&amp;#9608;&amp;#9608;&amp;#9617;
nostream          | &amp;#9619;&amp;#9608;&amp;#9608;&amp;#9618;  &amp;#9616;&amp;#9612;&amp;#9608;&amp;#9608;&amp;#9618;&amp;#9618;&amp;#9608;&amp;#9608;   &amp;#9608;&amp;#9608;&amp;#9617;  &amp;#9618;   &amp;#9608;&amp;#9608;&amp;#9618;&amp;#9617; &amp;#9619;&amp;#9608;&amp;#9608;&amp;#9619; &amp;#9617; &amp;#9618;&amp;#9608;&amp;#9608;&amp;#9600;&amp;#9600;&amp;#9608;&amp;#9604;  &amp;#9618;&amp;#9619;&amp;#9608;  &amp;#9604;&amp;#9617;&amp;#9608;&amp;#9608;&amp;#9604;&amp;#9604;&amp;#9604;&amp;#9604;&amp;#9608;&amp;#9608; &amp;#9618;&amp;#9608;&amp;#9608;    &amp;#9618;&amp;#9608;&amp;#9608;
nostream          | &amp;#9618;&amp;#9608;&amp;#9608;&amp;#9617;   &amp;#9619;&amp;#9608;&amp;#9608;&amp;#9617;&amp;#9617; &amp;#9608;&amp;#9608;&amp;#9608;&amp;#9608;&amp;#9619;&amp;#9618;&amp;#9617;&amp;#9618;&amp;#9608;&amp;#9608;&amp;#9608;&amp;#9608;&amp;#9608;&amp;#9608;&amp;#9618;&amp;#9618;  &amp;#9618;&amp;#9608;&amp;#9608;&amp;#9618; &amp;#9617; &amp;#9617;&amp;#9608;&amp;#9608;&amp;#9619; &amp;#9618;&amp;#9608;&amp;#9608;&amp;#9618;&amp;#9617;&amp;#9618;&amp;#9608;&amp;#9608;&amp;#9608;&amp;#9608;&amp;#9618;&amp;#9619;&amp;#9608;   &amp;#9619;&amp;#9608;&amp;#9608;&amp;#9618;&amp;#9618;&amp;#9608;&amp;#9608;&amp;#9618;   &amp;#9617;&amp;#9608;&amp;#9608;&amp;#9618;
nostream          | &amp;#9617; &amp;#9618;&amp;#9617;   &amp;#9618; &amp;#9618; &amp;#9617; &amp;#9618;&amp;#9617;&amp;#9618;&amp;#9617;&amp;#9618;&amp;#9617; &amp;#9618; &amp;#9618;&amp;#9619;&amp;#9618; &amp;#9618; &amp;#9617;  &amp;#9618; &amp;#9617;&amp;#9617;   &amp;#9617; &amp;#9618;&amp;#9619; &amp;#9617;&amp;#9618;&amp;#9619;&amp;#9617;&amp;#9617;&amp;#9617; &amp;#9618;&amp;#9617; &amp;#9617;&amp;#9618;&amp;#9618;   &amp;#9619;&amp;#9618;&amp;#9608;&amp;#9617;&amp;#9617; &amp;#9618;&amp;#9617;   &amp;#9617;  &amp;#9617;
nostream          | &amp;#9617; &amp;#9617;&amp;#9617;   &amp;#9617; &amp;#9618;&amp;#9617;  &amp;#9617; &amp;#9618; &amp;#9618;&amp;#9617; &amp;#9617; &amp;#9617;&amp;#9618;  &amp;#9617; &amp;#9617;    &amp;#9617;      &amp;#9617;&amp;#9618; &amp;#9617; &amp;#9618;&amp;#9617; &amp;#9617; &amp;#9617;  &amp;#9617; &amp;#9618;   &amp;#9618;&amp;#9618; &amp;#9617;&amp;#9617;  &amp;#9617;      &amp;#9617;
nostream          |    &amp;#9617;   &amp;#9617; &amp;#9617; &amp;#9617; &amp;#9617; &amp;#9617; &amp;#9618;  &amp;#9617;  &amp;#9617;  &amp;#9617;    &amp;#9617;        &amp;#9617;&amp;#9617;   &amp;#9617;    &amp;#9617;    &amp;#9617;   &amp;#9618;   &amp;#9617;      &amp;#9617;
nostream          |          &amp;#9617;     &amp;#9617; &amp;#9617;        &amp;#9617;              &amp;#9617;        &amp;#9617;  &amp;#9617;     &amp;#9617;  &amp;#9617;       &amp;#9617;
nostream          |                                   v1.21.0
nostream          |           NIPs implemented: 1,2,4,9,11,12,15,16,20,22,26,28,33,40
nostream          |                            Pay-to-relay disabled
nostream          |                          Payments provider: zebedee
nostream          |                           2 client workers started
nostream          |                         1 maintenance worker started
nostream          |                         Tor hidden service: disabled
&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-org62a5679&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;org62a5679&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;5.&lt;/span&gt; 用 noscl 测试 relay 是否正常工作&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-5&quot;&gt;
&lt;p&gt;
删除之前添加的 relay：
&lt;/p&gt;
&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-shell&quot;&gt;[kimim@virtualbox Desktop]$ ./noscl relay
wss://nos.lol: rw
[kimim@virtualbox Desktop]$ ./noscl relay remove wss://nos.lol
Removed relay wss://nos.lol.
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
添加刚刚搭建的 relay：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-shell&quot;&gt;[kimim@virtualbox Desktop]$ ./noscl relay add wss://nostr.kimi.im
Added relay wss://nostr.kimi.im.
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
发送消息 Bonjour tout le monde：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-shell&quot;&gt;[kimim@virtualbox Desktop]$ ./noscl publish &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;Bonjour tout le monde&quot;&lt;/span&gt;
Sent event a170e3f3c4f8cfb79cacccf28d5f7d51a5e17b4e40c0984593a692b83f9cf43c to &lt;span style=&quot;color: #2A00FF;&quot;&gt;&apos;wss://nostr.kimi.im&apos;&lt;/span&gt;.
Seen a170e3f3c4f8cfb79cacccf28d5f7d51a5e17b4e40c0984593a692b83f9cf43c on &lt;span style=&quot;color: #2A00FF;&quot;&gt;&apos;wss://nostr.kimi.im&apos;&lt;/span&gt;.
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
在 Damus 一开始收不测试帐号发送的消息，需要在 Damus 客户端也添加同样的 relay。
&lt;/p&gt;

&lt;p&gt;
然后，就能看到测试帐号发的：Bonjour tout le monde
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines Enum.6 不要用没名字的枚举类型</title>
   <link href="http://kimi.im/2023-02-04-cppcoreguidelines-enum6"/>
   <updated>2023-02-04T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-enum6</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;Avoid unnamed enumerations&amp;rdquo;
&lt;/p&gt;


&lt;p&gt;
理由
&lt;/p&gt;

&lt;p&gt;
如果你无法给一个枚举命名，那么说明枚举值是不相关的。
&lt;/p&gt;

&lt;p&gt;
坏例子
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;enum&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;red&lt;/span&gt; = 0xFF0000, &lt;span style=&quot;color: #000000;&quot;&gt;scale&lt;/span&gt; = 4, &lt;span style=&quot;color: #000000;&quot;&gt;is_signed&lt;/span&gt; = 1 &lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
以往代码中，这种错误比较场景。可以用 constexpr 改进：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;constexpr&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;red&lt;/span&gt; = 0xFF0000;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;constexpr&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;short&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;scale&lt;/span&gt; = 4;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;constexpr&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;bool&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;is_signed&lt;/span&gt; = &lt;span style=&quot;color: #110099;&quot;&gt;true&lt;/span&gt;;
&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;
强化
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;标记未命名的枚举&lt;/li&gt;
&lt;/ul&gt;
</content>
 </entry>
 
 <entry>
   <title>Nostr NIPS</title>
   <link href="http://kimi.im/2023-02-03-nostr-nips"/>
   <updated>2023-02-03T00:00:00+00:00</updated>
   <id>http://kimi.im/nostr-nips</id>
   <content type="html">&lt;p&gt;
昨天简单介绍了一下 nostr。今天继续介绍。
&lt;/p&gt;

&lt;p&gt;
其实 nostr 是 Notes and Other Stuff Transmitted by Relays，即“通过中继传输笔记和其他资料”。正如其名字所暗示，它是一个很简单很轻量级的协议，刚刚好能够工作。
&lt;/p&gt;

&lt;p&gt;
nostr 协议通过所谓的 NIP 规定。NIP 是 Nostr Improvement Proposals，即“Nostr 改进建议”。
&lt;/p&gt;

&lt;p&gt;
NIP-01 定义了 nostr 协议的基本数据结构和工作流。
&lt;/p&gt;

&lt;p&gt;
其中，事件消息的 JSON 格式如下：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-javascript&quot;&gt;&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
  &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;id&quot;&lt;/span&gt;: &amp;lt;&amp;#20107;&amp;#20214;&amp;#30340;&amp;#25968;&amp;#25454;&amp;#30340; sha256&amp;gt;
  &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;pubkey&quot;&lt;/span&gt;: &amp;lt;&amp;#20107;&amp;#20214;&amp;#21457;&amp;#36865;&amp;#32773;&amp;#30340;&amp;#20844;&amp;#38053;&amp;gt;,
  &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;created_at&quot;&lt;/span&gt;: &amp;lt;unix &amp;#26102;&amp;#38388;&amp;#25139;&lt;span style=&quot;color: #7388d6;&quot;&gt;&amp;#65288;&lt;/span&gt;&amp;#31186;&lt;span style=&quot;color: #7388d6;&quot;&gt;&amp;#65289;&lt;/span&gt;&amp;gt;,
  &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;kind&quot;&lt;/span&gt;: &amp;lt;&amp;#25972;&amp;#25968;&amp;gt;,
  &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;tags&quot;&lt;/span&gt;: &lt;span style=&quot;color: #7388d6;&quot;&gt;[&lt;/span&gt;
    &lt;span style=&quot;color: #909183;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;e&quot;&lt;/span&gt;, &amp;lt;&amp;#20854;&amp;#20182;&amp;#20107;&amp;#20214;&amp;#30340; ID&amp;gt;, &amp;lt;&amp;#24314;&amp;#35758;&amp;#30340;&amp;#20013;&amp;#32487; URL &amp;#22320;&amp;#22336;&amp;gt;&lt;span style=&quot;color: #909183;&quot;&gt;]&lt;/span&gt;,
    &lt;span style=&quot;color: #909183;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;p&quot;&lt;/span&gt;, &amp;lt;&amp;#20844;&amp;#38053;&amp;gt;, &amp;lt;&amp;#24314;&amp;#35758;&amp;#30340;&amp;#20013;&amp;#32487; URL &amp;#22320;&amp;#22336;&amp;gt;&lt;span style=&quot;color: #909183;&quot;&gt;]&lt;/span&gt;,
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;&amp;#20854;&amp;#20182;&amp;#26631;&amp;#31614;&lt;/span&gt;
  &lt;span style=&quot;color: #7388d6;&quot;&gt;]&lt;/span&gt;,
  &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;content&quot;&lt;/span&gt;: &amp;lt;&amp;#20107;&amp;#20214;&amp;#28040;&amp;#24687;&amp;#20869;&amp;#23481;&amp;gt;,
  &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;sig&quot;&lt;/span&gt;: &amp;lt;&amp;#20107;&amp;#20214;&amp;#30340;&amp;#31169;&amp;#38053;&amp;#31614;&amp;#21517;&amp;gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
所有其他的 NIP 都是基于这个事件格式，通过事件种类 kind 和事件标签 tag
扩展功能。比如，NIP-02 定义了如何 kind 3，tag p 查询好友列表、好友昵称。
NIP-04 定义了如何用 kind 4，tag p 发送私聊信息。NIP-08 定义如何在事件消息中@某个人。NIP-09 定义了通过 kind 5，tag e 删除事件消息。NIP-10 定义了过滤查询方法。NIP-13 定义了工作量证明方法。NIP-28 定义了 kind
40-44，用来管理公共聊天室。NIP-36 定义了&amp;ldquo;content-warning&amp;rdquo; tag，用来告知接收者，消息可能比较敏感。
&lt;/p&gt;

&lt;p&gt;
nostr 通信模型也很简单。中继服务器 Relay 开放 websocket 端口给客户端连接访问。客户端可以发送三种 JSON 消息：
&lt;/p&gt;

&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;[&amp;ldquo;EVENT&amp;rdquo;, &amp;lt;事件 JSON&amp;gt;]：发布事件&lt;/li&gt;
&lt;li&gt;[&amp;ldquo;REQ&amp;rdquo;, &amp;lt;订阅 ID&amp;gt;, &amp;lt;过滤器&amp;gt; &amp;#x2026;]：请求事件，订阅更新&lt;/li&gt;
&lt;li&gt;[&amp;ldquo;CLOSE&amp;rdquo;, &amp;lt;订阅 ID&amp;gt;]：终止前面创建的订阅&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;
中继服务器收到客户端的 REQ 请求后，创建订阅，根据过滤器，从数据库查询消息，返回给客户端。然后，如果有更新，发送更新给客户端。知道客户端发送
CLOSE 请求。
&lt;/p&gt;

&lt;p&gt;
过滤器的格式如下：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-javascript&quot;&gt;&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
  &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;ids&quot;&lt;/span&gt;: &amp;lt;&amp;#20107;&amp;#20214;ID&amp;#21015;&amp;#34920;&amp;gt;,
  &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;authors&quot;&lt;/span&gt;: &amp;lt;&amp;#21457;&amp;#24067;&amp;#32773;&amp;#30340;&amp;#20844;&amp;#38053;&amp;#21015;&amp;#34920;&amp;gt;,
    &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;kinds&quot;&lt;/span&gt;: &amp;lt;&amp;#28040;&amp;#24687;&amp;#31867;&amp;#22411;&amp;#21015;&amp;#34920;&amp;gt;,
  &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;#e&quot;&lt;/span&gt;: &amp;lt;e &amp;#26631;&amp;#31614;&amp;#24341;&amp;#29992;&amp;#30340;&amp;#28040;&amp;#24687;ID&amp;#21015;&amp;#34920;&amp;gt;,
  &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;#p&quot;&lt;/span&gt;: &amp;lt;p &amp;#26631;&amp;#31614;&amp;#24341;&amp;#29992;&amp;#30340;&amp;#21457;&amp;#24067;&amp;#32773;&amp;#20844;&amp;#38053;&amp;#21015;&amp;#34920;&amp;gt;,
  &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;since&quot;&lt;/span&gt;: &amp;lt;&amp;#36215;&amp;#22987;&amp;#20107;&amp;#20214;&amp;gt;,
  &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;until&quot;&lt;/span&gt;: &amp;lt;&amp;#32467;&amp;#26463;&amp;#20107;&amp;#20214;&amp;gt;,
  &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;limit&quot;&lt;/span&gt;: &amp;lt;&amp;#26368;&amp;#22823;&amp;#36820;&amp;#22238;&amp;#25968;&amp;#37327;&amp;gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
中继服务器发给客户端的消息类型有：
&lt;/p&gt;

&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;[&amp;ldquo;EVENT&amp;rdquo;, &amp;lt;订阅号&amp;gt;, &amp;lt;事件&amp;gt;]：返回客户端请求的事件&lt;/li&gt;
&lt;li&gt;[&amp;ldquo;NOTICE&amp;rdquo;, &amp;lt;消息&amp;gt;]：出错消息&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
NIP-01 中定义的基本事件类型有：
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;0 设置用户名、个人介绍和图片&lt;/li&gt;
&lt;li&gt;1 发送文本消息&lt;/li&gt;
&lt;li&gt;2 建议使用的中继地址&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;
差不多，Nostr 协议的核心内容就是这些了。
&lt;/p&gt;

&lt;p&gt;
接下来，我们来看看，怎么使用 noscl 工具直接在命令行下收发消息。
&lt;/p&gt;

&lt;p&gt;
在 nostr 网络中，你无需注册帐号，只要自己生成一对公钥和私钥，就可以往
Relay 发送消息了。用 noscl 命令行工具，生成公私钥也很方便。
&lt;/p&gt;

&lt;p&gt;
生成私钥：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-example&quot;&gt;$./noscl key-gen
seed: strike correct brother asset frequent garden bamboo episode certain verify tip canoe daring below intact roast whale jazz toddler sell giraffe index camera zoo
private key: a831778dd9cabb28d0929bad0a32dccd2da8e930c4bc3433890d861c64fa3267
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
设置你的私钥，根据私钥，生成公钥：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-example&quot;&gt;$./noscl setprivate  a831778dd9cabb28d0929bad0a32dccd2da8e930c4bc3433890d861c64fa3267
$./noscl public
5213a71f9189243e197b23b6f7ee5ae4edda04815559e92f4d6d80df05cc007e
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
添加一个能连接的 Relay：
&lt;/p&gt;

&lt;pre class=&quot;example&quot; id=&quot;orgcc234c7&quot;&gt;
$./noscl relay add wss://nos.lol
$./noscl relay
wss://nos.lol: rw
&lt;/pre&gt;

&lt;p&gt;
发送消息：
&lt;/p&gt;
&lt;pre class=&quot;example&quot; id=&quot;orga935d9d&quot;&gt;
$./noscl publish &quot;hello from Linux
&lt;/pre&gt;

&lt;p&gt;
接收消息：
&lt;/p&gt;

&lt;pre class=&quot;example&quot; id=&quot;org2927145&quot;&gt;
$./noscl publish &quot;hello from Linux
&lt;/pre&gt;

&lt;p&gt;
Follow 我自己，就能看到我昨天发过的消息：
&lt;/p&gt;

&lt;pre class=&quot;example&quot; id=&quot;orgf28cf02&quot;&gt;
$./noscl follow 172c463cf703a1abd9a1f8d9ff2a9d66c9904e1719b6352617d6293ac4929cdc
Followed 172c463cf703a1abd9a1f8d9ff2a9d66c9904e1719b6352617d6293ac4929cdc.
$./noscl home

Text Note [5b87...8370] from  (172c...9cdc) 23 hours ago
  Nice day
  https://i.postimg.cc/Vvf7qhrf/039-A488-D-6143-48-EE-B2-DF-E23-A35-D17-DD0.jpg
Profile Metadata [9eeb...e24c] from kimim (172c...9cdc) 23 hours ago
  name: kimim
about: &quot;&quot;
picture: https://i.postimg.cc/Vvf7qhrf/039-A488-D-6143-48-EE-B2-DF-E23-A35-D17-DD0.jpg
&lt;/pre&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines Enum.5 不要使用全大写的枚举</title>
   <link href="http://kimi.im/2023-02-03-cppcoreguidelines-enum5"/>
   <updated>2023-02-03T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-enum5</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;Don’t use ALL&lt;sub&gt;CAPS&lt;/sub&gt; for enumerators&amp;rdquo;
&lt;/p&gt;


&lt;p&gt;
理由
&lt;/p&gt;

&lt;p&gt;
避免与宏名字冲突。
&lt;/p&gt;


&lt;p&gt;
例子
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;webcolors.h (third party header)&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;#define&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;RED&lt;/span&gt;   0xFF0000
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;#define&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;GREEN&lt;/span&gt; 0x00FF00
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;#define&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;BLUE&lt;/span&gt;  0x0000FF

&lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;productinfo.h&lt;/span&gt;
&lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;The following define product subtypes based on color&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;enum&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Product_info&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;RED&lt;/span&gt;, &lt;span style=&quot;color: #000000;&quot;&gt;PURPLE&lt;/span&gt;, &lt;span style=&quot;color: #000000;&quot;&gt;BLUE&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;syntax error&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;
强化
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;标记全大写的枚举值&lt;/li&gt;
&lt;/ul&gt;
</content>
 </entry>
 
 <entry>
   <title>Nostr Pura Vida</title>
   <link href="http://kimi.im/2023-02-02-nostr"/>
   <updated>2023-02-02T00:00:00+00:00</updated>
   <id>http://kimi.im/nostr</id>
   <content type="html">&lt;p&gt;
“Pura Vida”。1 月 1 日，前 Twitter CEO Jack Dorsey 在 Twitter 上打出了这组词，点赞无数。
&lt;/p&gt;

&lt;p&gt;
Pura Vida 是哥斯达黎有一句标志性的话，就是 “Pure Life”，体现了他们的简单与热情，不管是见面、问候、还是再见，都可以说 Pura Vida。一句 Pura
Vida 就拉近了人之间的距离。卸任了 Twitter CEO 职位的 Jack Dorsey 也在思考如何构建一个简单纯粹的社交网络。
&lt;/p&gt;

&lt;p&gt;
2 月 1 日，Jack Dorsey 发布推文表示，基于分布式社交媒体协议 Nostr 的社交产品 Damus 和 Amethyst 正式在苹果 App Store 和谷歌 Google Play Store
上线。于是，这几天，nostr 成了坊间热议的话题。
&lt;/p&gt;

&lt;p&gt;
一句话概括就是：nostr 是一个匿名、简单、开放的网络协议，任何人都可以参与其中，建立一个无监管的社交网络。它不需要任何可信的中心服务器，所以服务不间断。它基于非对称密钥和签名，安全又可靠。
&lt;/p&gt;

&lt;p&gt;
nostr 的工作机制是这样的：任何人，在任何地方，可以通过任何形式的客户端，生成一对密钥对，注册帐号。客户端可以是原生的、可以是 web 的、甚至命令行形式的。然后你可以发布一些信息，用你的私钥签名，发送到多个中继服务器。你可以自己搭一个中继服务器，也可以用任何他人运维的中继服务器。然后，其他人就可以通过这些中继服务器，获取你发布的信息。中继的功能很简单，就是接受客户端或向其他中继转发消息。这种消息，在 nostr 协议中叫 Event 事件。中继不关心消息事件的内容，只有客户端会去验证消息来源是否可靠。这就是所谓的 “dumb server, smart client”模型。
&lt;/p&gt;

&lt;p&gt;
nostr 协议很简单，就是通过 websocket 收发 JSON 格式 Event，其格式如下：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-javascript&quot;&gt;&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
  &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;id&quot;&lt;/span&gt;: &amp;lt;sha256 &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;of&lt;/span&gt; the serialized event data&amp;gt;
  &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;pubkey&quot;&lt;/span&gt;: &amp;lt;32-bytes hex &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;of&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;public&lt;/span&gt; key &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;of&lt;/span&gt; the event creator&amp;gt;,
  &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;created_at&quot;&lt;/span&gt;: &amp;lt;unix timestamp &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;in&lt;/span&gt; seconds&amp;gt;,
  &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;kind&quot;&lt;/span&gt;: &amp;lt;integer&amp;gt;,
  &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;tags&quot;&lt;/span&gt;: &lt;span style=&quot;color: #7388d6;&quot;&gt;[&lt;/span&gt;
    &lt;span style=&quot;color: #909183;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;e&quot;&lt;/span&gt;, &amp;lt;32-bytes hex &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;of&lt;/span&gt; the id &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;of&lt;/span&gt; another event&amp;gt;, &amp;lt;recommended relay URL&amp;gt;&lt;span style=&quot;color: #909183;&quot;&gt;]&lt;/span&gt;,
    &lt;span style=&quot;color: #909183;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;p&quot;&lt;/span&gt;, &amp;lt;32-bytes hex &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;of&lt;/span&gt; the key&amp;gt;, &amp;lt;recommended relay URL&amp;gt;&lt;span style=&quot;color: #909183;&quot;&gt;]&lt;/span&gt;,
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;other kinds of tags may be included later&lt;/span&gt;
  &lt;span style=&quot;color: #7388d6;&quot;&gt;]&lt;/span&gt;
  &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;content&quot;&lt;/span&gt;: &amp;lt;arbitrary string&amp;gt;,
  &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;sig&quot;&lt;/span&gt;: &amp;lt;64-bytes signature &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;of&lt;/span&gt; the sha256 hash &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;of&lt;/span&gt; the serialized event data&amp;gt;,
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
比如下面这个 Event 就是我在 nostr 网络中发送的第一条消息：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-javascript&quot;&gt;&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;id&quot;&lt;/span&gt;:&lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;5b8794d009a43139558318df5475fd2a1659b52f26df3c0f3ce8b022d0d88370&quot;&lt;/span&gt;,
    &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;pubkey&quot;&lt;/span&gt;:&lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;172c463cf703a1abd9a1f8d9ff2a9d66c9904e1719b6352617d6293ac4929cdc&quot;&lt;/span&gt;,
    &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;created_at&quot;&lt;/span&gt;:1675339072,
    &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;kind&quot;&lt;/span&gt;:1,
    &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;tags&quot;&lt;/span&gt;:&lt;span style=&quot;color: #7388d6;&quot;&gt;[]&lt;/span&gt;,
    &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;content&quot;&lt;/span&gt;:&lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;Nice day&quot;&lt;/span&gt;,
    &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;sig&quot;&lt;/span&gt;:&lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;cc3a441feadaaef8ba745457732ea05a0d26fee0f08d97208853aa94085e2d3ceda8b18ef7ca871935ea0668a46fb095f258437588809b9c16089c92bb4459d1&quot;&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
客户端发给中继服务器 Relay 的所有 Event 都是 Schnorr 算法签名的。其他客户端通过订阅过滤器得到任何 Event。客户端不是去中心化的，但是 Relay
是去中心化的，Relay 之间互相通信收发 Event。客户端自己决定要订阅哪些
Event，怎么验证 Event 是否可信。你可能会觉得这样的协议，太过简单，没什么价值。其实，正是因为协议简单，才适合与去中心化的应用场景，满足去中心化社交网络 DSN 的需求。
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines Enum.4 为了安全且简单的使用，基于枚举值定义操作</title>
   <link href="http://kimi.im/2023-02-02-cppcoreguidelines-enum4"/>
   <updated>2023-02-02T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-enum4</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;Define operations on enumerations for safe and simple use&amp;rdquo;
&lt;/p&gt;


&lt;p&gt;
理由
&lt;/p&gt;

&lt;p&gt;
使用习惯，避免错误。
&lt;/p&gt;


&lt;p&gt;
例子
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;enum&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Day&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;mon&lt;/span&gt;, &lt;span style=&quot;color: #000000;&quot;&gt;tue&lt;/span&gt;, &lt;span style=&quot;color: #000000;&quot;&gt;wed&lt;/span&gt;, &lt;span style=&quot;color: #000000;&quot;&gt;thu&lt;/span&gt;, &lt;span style=&quot;color: #000000;&quot;&gt;fri&lt;/span&gt;, &lt;span style=&quot;color: #000000;&quot;&gt;sat&lt;/span&gt;, &lt;span style=&quot;color: #000000;&quot;&gt;sun&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;

&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Day&lt;/span&gt;&amp;amp; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;operator&lt;/span&gt;&lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;++&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Day&lt;/span&gt;&amp;amp; &lt;span style=&quot;color: #000000;&quot;&gt;d&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; d = &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;d == &lt;span style=&quot;color: #110099;&quot;&gt;Day&lt;/span&gt;::sun&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; ? &lt;span style=&quot;color: #110099;&quot;&gt;Day&lt;/span&gt;::mon : &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;static_cast&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Day&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;&amp;gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;static_cast&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;&amp;gt;(&lt;/span&gt;d&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt;+1&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;

&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;main&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Day&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;today&lt;/span&gt; = &lt;span style=&quot;color: #110099;&quot;&gt;Day&lt;/span&gt;::sat;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Day&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;tomorrow&lt;/span&gt; = ++today;
    cout &amp;lt;&amp;lt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;static_cast&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;&amp;gt;(&lt;/span&gt;tomorrow&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;pre class=&quot;example&quot;&gt;
6
&lt;/pre&gt;


&lt;p&gt;
这里用了&lt;code&gt;statc_cast&lt;/code&gt;看起来不太优美。但是：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Day&lt;/span&gt;&amp;amp; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;operator&lt;/span&gt;&lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;++&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Day&lt;/span&gt;&amp;amp; &lt;span style=&quot;color: #000000;&quot;&gt;d&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; d = &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;d == &lt;span style=&quot;color: #110099;&quot;&gt;Day&lt;/span&gt;::sun&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; ? &lt;span style=&quot;color: #110099;&quot;&gt;Day&lt;/span&gt;::mon : Day&lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;++d&lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;;    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;error&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
这里&lt;code&gt;++&lt;/code&gt;的使用，会导致无限递归。要么使用 &lt;code&gt;switch&lt;/code&gt; 实现，但这样代码又太多。
&lt;/p&gt;


&lt;p&gt;
强化
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;标记重复的转换回枚举的表达式。&lt;/li&gt;
&lt;/ul&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines Enum.3 用 enum class，而不要用普通枚举</title>
   <link href="http://kimi.im/2023-02-01-cppcoreguidelines-enum3"/>
   <updated>2023-02-01T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-enum3</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;Prefer class enums over “plain” enums&amp;rdquo;
&lt;/p&gt;


&lt;p&gt;
理由
&lt;/p&gt;

&lt;p&gt;
减少惊讶：传统枚举太容易转换成 int 值。
&lt;/p&gt;

&lt;p&gt;
例子
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;Print_color&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;color&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;enum&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Web_color&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;red&lt;/span&gt; = 0xFF0000, &lt;span style=&quot;color: #000000;&quot;&gt;green&lt;/span&gt; = 0x00FF00, &lt;span style=&quot;color: #000000;&quot;&gt;blue&lt;/span&gt; = 0x0000FF &lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;enum&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Product_info&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;red&lt;/span&gt; = 0, &lt;span style=&quot;color: #000000;&quot;&gt;purple&lt;/span&gt; = 1, &lt;span style=&quot;color: #000000;&quot;&gt;blue&lt;/span&gt; = 2 &lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;

&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Web_color&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;webby&lt;/span&gt; = &lt;span style=&quot;color: #110099;&quot;&gt;Web_color&lt;/span&gt;::blue;

&lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;Clearly at least one of these calls is buggy.&lt;/span&gt;
Print_color&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;webby&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;
Print_color&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;Product_info&lt;/span&gt;::blue&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
相反地，应该使用 enum class：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;Print_color&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;color&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;enum&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Web_color&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;red&lt;/span&gt; = 0xFF0000, &lt;span style=&quot;color: #000000;&quot;&gt;green&lt;/span&gt; = 0x00FF00, &lt;span style=&quot;color: #000000;&quot;&gt;blue&lt;/span&gt; = 0x0000FF &lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;enum&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Product_info&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;red&lt;/span&gt; = 0, &lt;span style=&quot;color: #000000;&quot;&gt;purple&lt;/span&gt; = 1, &lt;span style=&quot;color: #000000;&quot;&gt;blue&lt;/span&gt; = 2 &lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;

&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Web_color&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;webby&lt;/span&gt; = &lt;span style=&quot;color: #110099;&quot;&gt;Web_color&lt;/span&gt;::blue;
Print_color&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;webby&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;  &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;Error: cannot convert Web_color to int.&lt;/span&gt;
Print_color&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;Product_info&lt;/span&gt;::red&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;  &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;Error: cannot convert Product_info to int.&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;
强化
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;（简单）警告没有使用 class 的枚举定义&lt;/li&gt;
&lt;/ul&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines Enum.2 使用枚举来表示一组相关的常量</title>
   <link href="http://kimi.im/2023-01-31-cppcoreguidelines-enum2"/>
   <updated>2023-01-31T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-enum2</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;Use enumerations to represent sets of related named constants&amp;rdquo;
&lt;/p&gt;


&lt;p&gt;
理由
&lt;/p&gt;

&lt;p&gt;
枚举表示一组相关的，带名字的常量。
&lt;/p&gt;


&lt;p&gt;
例子
&lt;/p&gt;


&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;enum&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Web_color&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;red&lt;/span&gt; = 0xFF0000, &lt;span style=&quot;color: #000000;&quot;&gt;green&lt;/span&gt; = 0x00FF00, &lt;span style=&quot;color: #000000;&quot;&gt;blue&lt;/span&gt; = 0x0000FF &lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;
&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;
注意
&lt;/p&gt;

&lt;p&gt;
根据枚举值判断条件分支很常用。
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;enum&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Product_info&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;red&lt;/span&gt; = 0, &lt;span style=&quot;color: #000000;&quot;&gt;purple&lt;/span&gt; = 1, &lt;span style=&quot;color: #000000;&quot;&gt;blue&lt;/span&gt; = 2 &lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;

&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;print&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Product_info&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;inf&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;switch&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;inf&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;case&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;Product_info&lt;/span&gt;::red: cout &amp;lt;&amp;lt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;red&quot;&lt;/span&gt;; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;break&lt;/span&gt;;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;case&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;Product_info&lt;/span&gt;::purple: cout &amp;lt;&amp;lt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;purple&quot;&lt;/span&gt;; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;break&lt;/span&gt;;
    &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;

&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;main&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;auto&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;info&lt;/span&gt; = &lt;span style=&quot;color: #110099;&quot;&gt;Product_info&lt;/span&gt;::red;
    print&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;info&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;pre class=&quot;example&quot;&gt;
red
&lt;/pre&gt;


&lt;p&gt;
这种分支判断，没有完全列举枚举值，意味着枚举值太多了，或者测试不够全面。
&lt;/p&gt;


&lt;p&gt;
强化
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;标记没有遍历所有枚举值的 switch 语句&lt;/li&gt;
&lt;li&gt;标记只列举了部分枚举值，且没有默认语句的 switch&lt;/li&gt;
&lt;/ul&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines Enum.1 用枚举不要用宏</title>
   <link href="http://kimi.im/2023-01-30-cppcoreguidelines-enum1"/>
   <updated>2023-01-30T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-enum1</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;Prefer enumerations over macros&amp;rdquo;
&lt;/p&gt;


&lt;p&gt;
理由
&lt;/p&gt;

&lt;p&gt;
宏不遵循作用域范围和类型规则。另外，在预处理过程中，宏名会被删除。所以一般不会在调试工具中出现。
&lt;/p&gt;


&lt;p&gt;
例子
&lt;/p&gt;

&lt;p&gt;
首先是一些老的坏例子
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;webcolors.h (third party header)&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;#define&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;RED&lt;/span&gt;   0xFF0000
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;#define&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;GREEN&lt;/span&gt; 0x00FF00
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;#define&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;BLUE&lt;/span&gt;  0x0000FF

&lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;productinfo.h&lt;/span&gt;
&lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;The following define product subtypes based on color&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;#define&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;RED&lt;/span&gt;    0
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;#define&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;PURPLE&lt;/span&gt; 1
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;#define&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;BLUE&lt;/span&gt;   2

&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;webby&lt;/span&gt; = BLUE;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;webby == 2; probably not what was desired&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;
其实，应该使用 enum
&lt;/p&gt;


&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;enum&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Web_color&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;red&lt;/span&gt; = 0xFF0000, &lt;span style=&quot;color: #000000;&quot;&gt;green&lt;/span&gt; = 0x00FF00, &lt;span style=&quot;color: #000000;&quot;&gt;blue&lt;/span&gt; = 0x0000FF &lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;enum&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Product_info&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;red&lt;/span&gt; = 0, &lt;span style=&quot;color: #000000;&quot;&gt;purple&lt;/span&gt; = 1, &lt;span style=&quot;color: #000000;&quot;&gt;blue&lt;/span&gt; = 2 &lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;

&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;webby&lt;/span&gt; = blue;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;error: be specific&lt;/span&gt;
&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Web_color&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;webby&lt;/span&gt; = &lt;span style=&quot;color: #110099;&quot;&gt;Web_color&lt;/span&gt;::blue;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
这里，我们用了 enum class 避免名字冲突。
&lt;/p&gt;


&lt;p&gt;
强化
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;标记定义了整型数值的宏&lt;/li&gt;
&lt;/ul&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines C.183 不要使用 union 实现类型双关</title>
   <link href="http://kimi.im/2023-01-29-cppcoreguidelines-c183"/>
   <updated>2023-01-29T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-c183</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;Don’t use a union for type punning&amp;rdquo;
&lt;/p&gt;


&lt;p&gt;
理由
&lt;/p&gt;

&lt;p&gt;
从一个 union 中读取非写入的类型成员是未定义的。使用 union 来读取某个类型数据的bit位数值的另外一种类型表示，是很容易导致错误的行为。
&lt;/p&gt;



&lt;p&gt;
错误例子
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;union&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Pun&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;x&lt;/span&gt;;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;unsigned&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;char&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;c&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;sizeof&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;]&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;

&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;bad&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Pun&lt;/span&gt;&amp;amp; &lt;span style=&quot;color: #000000;&quot;&gt;u&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    u.x = &lt;span style=&quot;color: #2A00FF;&quot;&gt;&apos;x&apos;&lt;/span&gt;;
    cout &amp;lt;&amp;lt; u.c&lt;span style=&quot;color: #7388d6;&quot;&gt;[&lt;/span&gt;0&lt;span style=&quot;color: #7388d6;&quot;&gt;]&lt;/span&gt; &amp;lt;&amp;lt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&apos;\n&apos;&lt;/span&gt;;     &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;undefined behavior&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;main&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Pun&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;u&lt;/span&gt;;
    bad&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;u&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;pre class=&quot;example&quot;&gt;
x
&lt;/pre&gt;



&lt;p&gt;
如果你要查看 int 的字节表示，可以使用类型转换：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #110099;&quot;&gt;std&lt;/span&gt;::&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;ostream&lt;/span&gt;&amp;amp; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;operator&lt;/span&gt;&lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;std&lt;/span&gt;::&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;ostream&lt;/span&gt;&amp;amp; &lt;span style=&quot;color: #000000;&quot;&gt;os&lt;/span&gt;, &lt;span style=&quot;color: #110099;&quot;&gt;std&lt;/span&gt;::&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;byte&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;b&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; os &amp;lt;&amp;lt; &lt;span style=&quot;color: #110099;&quot;&gt;std&lt;/span&gt;::bitset&lt;span style=&quot;color: #7388d6;&quot;&gt;&amp;lt;&lt;/span&gt;8&lt;span style=&quot;color: #7388d6;&quot;&gt;&amp;gt;(&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;std&lt;/span&gt;::to_integer&lt;span style=&quot;color: #909183;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;&amp;gt;(&lt;/span&gt;b&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;

&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;if_you_must_pun&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt;&amp;amp; &lt;span style=&quot;color: #000000;&quot;&gt;x&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;auto&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;p&lt;/span&gt; = &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;reinterpret_cast&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;std&lt;/span&gt;::&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;byte&lt;/span&gt;*&lt;span style=&quot;color: #7388d6;&quot;&gt;&amp;gt;(&lt;/span&gt;&amp;amp;x&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
    cout &amp;lt;&amp;lt; p&lt;span style=&quot;color: #7388d6;&quot;&gt;[&lt;/span&gt;0&lt;span style=&quot;color: #7388d6;&quot;&gt;]&lt;/span&gt; &amp;lt;&amp;lt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&apos;\n&apos;&lt;/span&gt;;     &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;OK; better&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;...&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;main&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;x&lt;/span&gt; = 100;
    if_you_must_pun&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;x&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;pre class=&quot;example&quot;&gt;
01100100
&lt;/pre&gt;


&lt;p&gt;
通过 &lt;code&gt;reinterpret_cast&lt;/code&gt; 把一个对象转换成 &lt;code&gt;char*&lt;/code&gt; , &lt;code&gt;unsigned char*&lt;/code&gt; 或 &lt;code&gt;std::byte*&lt;/code&gt; 是可以得到确定性的数据的。（不过我们不建议这种操作）。
&lt;/p&gt;

&lt;p&gt;
C++17 引入了 &lt;code&gt;std::byte&lt;/code&gt; 来处理对象的原始字节表示。尽量避免使用 &lt;code&gt;unsinged
char&lt;/code&gt; 或 &lt;code&gt;char&lt;/code&gt;
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines C.182 使用匿名 union 实现带标签的 union</title>
   <link href="http://kimi.im/2023-01-28-cppcoreguidelines-c182"/>
   <updated>2023-01-28T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-c182</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;Use anonymous unions to implement tagged unions&amp;rdquo;
&lt;/p&gt;


&lt;p&gt;
理由
&lt;/p&gt;

&lt;p&gt;
精良设计的带标签的 union 就会类型安全。匿名 union 简化类的设计。
&lt;/p&gt;


&lt;p&gt;
例子
&lt;/p&gt;

&lt;p&gt;
以下代码处理用于定义的赋值和析构函数比较巧妙。为了节省程序员的时间，这种操作已经在标准库的 variant 中实现了。
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Value&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;two alternative representations represented as a union&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;private&lt;/span&gt;:
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;enum&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Tag&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;number&lt;/span&gt;, &lt;span style=&quot;color: #000000;&quot;&gt;text&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Tag&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;type&lt;/span&gt;; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;discriminant&lt;/span&gt;

    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;union&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;representation (note: anonymous union)&lt;/span&gt;
        &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;i&lt;/span&gt;;
        &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;string&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;s&lt;/span&gt;; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;string has default constructor, copy operations, and destructor&lt;/span&gt;
    &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;public&lt;/span&gt;:
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;struct&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Bad_entry&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;used for exceptions&lt;/span&gt;

    ~&lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;Value&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt;;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Value&lt;/span&gt;&amp;amp; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;operator&lt;/span&gt;&lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Value&lt;/span&gt;&amp;amp;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;necessary because of the string variant&lt;/span&gt;
    &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;Value&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Value&lt;/span&gt;&amp;amp;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;...&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;number&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt;;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;string&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;text&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt;;

    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;set_number&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;n&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;set_text&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;string&lt;/span&gt;&amp;amp;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;...&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;

&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;Value&lt;/span&gt;::&lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;number&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;type != &lt;span style=&quot;color: #110099;&quot;&gt;Tag&lt;/span&gt;::number&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;throw&lt;/span&gt; Bad_entry&lt;span style=&quot;color: #7388d6;&quot;&gt;{}&lt;/span&gt;;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; i;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;

&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;string&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;Value&lt;/span&gt;::&lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;text&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;type != &lt;span style=&quot;color: #110099;&quot;&gt;Tag&lt;/span&gt;::text&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;throw&lt;/span&gt; Bad_entry&lt;span style=&quot;color: #7388d6;&quot;&gt;{}&lt;/span&gt;;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; s;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;

&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;Value&lt;/span&gt;::&lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;set_number&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;n&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;type == &lt;span style=&quot;color: #110099;&quot;&gt;Tag&lt;/span&gt;::text&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;
        s.~string&lt;span style=&quot;color: #909183;&quot;&gt;()&lt;/span&gt;;      &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;explicitly destroy string&lt;/span&gt;
        type = &lt;span style=&quot;color: #110099;&quot;&gt;Tag&lt;/span&gt;::number;
    &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;
    i = n;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;

&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;Value&lt;/span&gt;::&lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;set_text&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;string&lt;/span&gt;&amp;amp; &lt;span style=&quot;color: #000000;&quot;&gt;ss&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;type == &lt;span style=&quot;color: #110099;&quot;&gt;Tag&lt;/span&gt;::text&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;
        s = ss;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;else&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;
        &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;new&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;&amp;amp;s&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;string&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;{&lt;/span&gt;ss&lt;span style=&quot;color: #909183;&quot;&gt;}&lt;/span&gt;;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;placement new: explicitly construct string&lt;/span&gt;
        type = &lt;span style=&quot;color: #110099;&quot;&gt;Tag&lt;/span&gt;::text;
    &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;

&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Value&lt;/span&gt;&amp;amp; &lt;span style=&quot;color: #110099;&quot;&gt;Value&lt;/span&gt;::&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;operator&lt;/span&gt;=&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Value&lt;/span&gt;&amp;amp; &lt;span style=&quot;color: #000000;&quot;&gt;e&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;necessary because of the string variant&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;type == &lt;span style=&quot;color: #110099;&quot;&gt;Tag&lt;/span&gt;::text &amp;amp;&amp;amp; e.type == &lt;span style=&quot;color: #110099;&quot;&gt;Tag&lt;/span&gt;::text&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;
        s = e.s;    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;usual string assignment&lt;/span&gt;
        &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; *&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;this&lt;/span&gt;;
    &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;

    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;type == &lt;span style=&quot;color: #110099;&quot;&gt;Tag&lt;/span&gt;::text&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; s.~string&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt;; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;explicit destroy&lt;/span&gt;

    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;switch&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;e.type&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;case&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;Tag&lt;/span&gt;::number:
        i = e.i;
        &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;break&lt;/span&gt;;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;case&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;Tag&lt;/span&gt;::text:
        &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;new&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;&amp;amp;s&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;string&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;e.s&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt;;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;placement new: explicit construct&lt;/span&gt;
    &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;

    type = e.type;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; *&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;this&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;

&lt;span style=&quot;color: #110099;&quot;&gt;Value&lt;/span&gt;::~&lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;Value&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;type == &lt;span style=&quot;color: #110099;&quot;&gt;Tag&lt;/span&gt;::text&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; s.~string&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt;; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;explicit destroy&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines C.181 避免裸露的 union</title>
   <link href="http://kimi.im/2023-01-27-cppcoreguidelines-c181"/>
   <updated>2023-01-27T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-c181</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;Avoid “naked” union&amp;rsquo;s&amp;rdquo;
&lt;/p&gt;


&lt;p&gt;
理由
&lt;/p&gt;

&lt;p&gt;
“裸露” union 指的是那种无从知晓其保存的到底是什么类型的数据。所以，程序员得自己进行记录。裸露 union 容易导致错误。
&lt;/p&gt;

&lt;p&gt;
坏例子
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot; id=&quot;org78f10da&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;union&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Value&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;x&lt;/span&gt;;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;double&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;d&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;

&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Value&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;v&lt;/span&gt;;
&lt;/pre&gt;
&lt;/div&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-:noweb&quot;&gt;$$c181-union$$
v.d = 987.654;  // v holds a double
cout &amp;lt;&amp;lt; v.d;
&lt;/pre&gt;
&lt;/div&gt;

&lt;pre class=&quot;example&quot;&gt;
987.654
&lt;/pre&gt;


&lt;p&gt;
目前，暂时没什么问题，但是很容易误用：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;union&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Value&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;x&lt;/span&gt;;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;double&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;d&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;

&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Value&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;v&lt;/span&gt;;
cout &amp;lt;&amp;lt; v.x &amp;lt;&amp;lt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&apos;\n&apos;&lt;/span&gt;;    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;BAD, undefined behavior: v holds a double, but we read it as an int&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;pre class=&quot;example&quot;&gt;
-564582640
&lt;/pre&gt;


&lt;p&gt;
注意，这里没有任何显示的类型转换。最后打印出的数据是 -564582640，这个数据是 987.654 这个浮点数据的bit位的整型表示。这里的类型错误是不可见的，很容易被忽略。
&lt;/p&gt;


&lt;p&gt;
以下代码把整型 123 的bit位数据以浮点型输出：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;union&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Value&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;x&lt;/span&gt;;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;double&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;d&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;

&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Value&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;v&lt;/span&gt;;
v.x = 123;
cout &amp;lt;&amp;lt; v.d &amp;lt;&amp;lt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&apos;\n&apos;&lt;/span&gt;;    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;BAD: undefined behavior&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;pre class=&quot;example&quot;&gt;
1.06312e-311
&lt;/pre&gt;



&lt;p&gt;
替代方案
&lt;/p&gt;

&lt;p&gt;
把 union 封装到有类型信息的类中。
&lt;/p&gt;


&lt;p&gt;
使用 C++17 variant 类型 （在 &amp;lt;variant&amp;gt; 中定义的）
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;variant&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt;, &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;double&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;v&lt;/span&gt;;
v = 123;        &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;v holds an int&lt;/span&gt;
&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;x&lt;/span&gt; = get&lt;span style=&quot;color: #707183;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;gt;(&lt;/span&gt;v&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;
v = 123.456;    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;v holds a double&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;auto&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;w&lt;/span&gt; = get&lt;span style=&quot;color: #707183;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;double&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;gt;(&lt;/span&gt;v&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;
cout &amp;lt;&amp;lt; w;
&lt;/pre&gt;
&lt;/div&gt;

&lt;pre class=&quot;example&quot;&gt;
123.456
&lt;/pre&gt;


&lt;p&gt;
如果你存进了 int， 但是想得到一个 double 就会出错：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;variant&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt;, &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;double&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;v&lt;/span&gt;;
v = 123;        &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;v holds an int&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;auto&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;w&lt;/span&gt; = get&lt;span style=&quot;color: #707183;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;double&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;gt;(&lt;/span&gt;v&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;
&lt;/pre&gt;
&lt;/div&gt;

&lt;pre class=&quot;example&quot; id=&quot;org0dabe55&quot;&gt;
terminate called after throwing an instance of &apos;std::bad_variant_access&apos;
  what():  std::get: wrong index for variant
&lt;/pre&gt;
</content>
 </entry>
 
 <entry>
   <title>单词本：boycott</title>
   <link href="http://kimi.im/2023-01-27-english-boycott"/>
   <updated>2023-01-27T00:00:00+00:00</updated>
   <id>http://kimi.im/english-boycott</id>
   <content type="html">&lt;p&gt;
在读管理学原理的时候，读到关于应急计划这一段：
&lt;/p&gt;

&lt;p&gt;
A contingency plan allows management to act immediately if an
unplanned occurrence, such as a strike, boycott, natural disaster, or
major economic shift, renders existing plans inoperable or
inappropriate.
&lt;/p&gt;

&lt;p&gt;
应急计划可以确保在遇到一些计划外的事件时，如罢工、抵制、自然灾害或重大经济转变，能够及时作出响应。
&lt;/p&gt;

&lt;p&gt;
这里有一个词 boycott 是联合抵制的意思，据说有人还创造了一个新词
girlcott 联合的妇女抵制运动。实际上来说，boycott 中的 boy 并不是男孩的意思。其实 boycott 是一个英国人的姓。
&lt;/p&gt;

&lt;p&gt;
故事要从 1870 年说起。
&lt;/p&gt;

&lt;p&gt;
英国人 Charles Cunningham Boycott (March 12, 1832 – June 19, 1897) 本来是不列颠的一位军人，退伍后在 1870 年代移居爱尔兰，成为了爱尔兰大地主
Lord Erne（俄内伯爵）的地产经纪人。
&lt;/p&gt;

&lt;p&gt;
在当时的爱尔兰，农民为了反抗地主的盘剥和压迫，纷纷组织各种形式的反抗运动。其中有个反抗组织叫“土地联盟”。“土地联盟”提出 3F (fair rent, fixity
of tenure, and free sale) 的要求。Boycott 拒绝降低地租，驱逐参加运动的佃农，激起了爱尔兰人的公愤。土地联盟和当地社区对 Boycott 实施了“道德流放”，也就是之前介绍过的 &lt;a href=&quot;http://kimi.im/2023-01-14-egnlish-ostracism&quot;&gt;ostracism&lt;/a&gt; ，他们断绝和他的来往、拒绝为他提供任何服务。过不了多久，Boycott 只能狼狈的离开了爱尔兰。
&lt;/p&gt;

&lt;p&gt;
后来，这个事件在报纸杂志上传播开来，Boycott 就和联合抵制关联在了一起。也就是说，对抗联合抵制的 Charles Cunninghan Boycott 的姓氏成了联合抵制本身。 boycotter 成了名词“联合抵制者”。这也是挺讽刺的。事实上，boycott
的对象是 boycottee，也就是说 Charles Boycott 其实是个 boycottee。
boycott 农民们是 boycotter。
&lt;/p&gt;

&lt;p&gt;
boycott 也可以做动词： We boycotted companies that were polluting the
environment. 他们联合抵制污染环境的企业。
&lt;/p&gt;

&lt;p&gt;
更离谱的是，boycott 到了德语里，连拼写都德语化了：Ein Boykott kann
sich zum Beispiel an Verbraucher richten, die bestimmte Produkte oder
Unternehmen ächten sollen.
&lt;/p&gt;

&lt;p&gt;
德语动词为 boykottieren，比如：einen Plan boykottieren, ein Projekt
boykottieren, einen Kollegen boykottieren.
&lt;/p&gt;

&lt;p&gt;
港澳台地区还有“杯葛”一词，就是从 boycott 音译的。哈哈，很有趣。
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines C.180 用 union 节省内存</title>
   <link href="http://kimi.im/2023-01-26-cppcoreguidelines-c180"/>
   <updated>2023-01-26T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-c180</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;Use unions to save memory&amp;rdquo;
&lt;/p&gt;


&lt;p&gt;
理由
&lt;/p&gt;

&lt;p&gt;
Union（联合体，也有叫共用体）可以在不同时候于同一块内存中保存不同类型的数据。这样，如果我们有多个对象，不会同时使用的话，就可以通过 union
节省内存。
&lt;/p&gt;

&lt;p&gt;
例子
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;union&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Value&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;x&lt;/span&gt;;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;double&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;d&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;

&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Value&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;v&lt;/span&gt; = &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt; 123 &lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;  &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;now v holds an int&lt;/span&gt;
cout &amp;lt;&amp;lt; v.x &amp;lt;&amp;lt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&apos;\n&apos;&lt;/span&gt;;    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;write 123&lt;/span&gt;
v.d = 987.654;  &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;now v holds a double&lt;/span&gt;
cout &amp;lt;&amp;lt; v.d &amp;lt;&amp;lt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&apos;\n&apos;&lt;/span&gt;;    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;write 987.654&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;pre class=&quot;example&quot;&gt;
123
987.654
&lt;/pre&gt;



&lt;p&gt;
但是请注意：避免“裸露”的 union
&lt;/p&gt;


&lt;p&gt;
例子
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;Short-string optimization&lt;/span&gt;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;constexpr&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;size_t&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;buffer_size&lt;/span&gt; = 16; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;Slightly larger than the size of a pointer&lt;/span&gt;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Immutable_string&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;public&lt;/span&gt;:
    &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;Immutable_string&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;char&lt;/span&gt;* &lt;span style=&quot;color: #000000;&quot;&gt;str&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; :
        size&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;strlen&lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;str&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;
    &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;
        &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;size &amp;lt; buffer_size&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt;
            strcpy_s&lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;string_buffer, buffer_size, str&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt;;
        &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;else&lt;/span&gt; &lt;span style=&quot;color: #909183;&quot;&gt;{&lt;/span&gt;
            string_ptr = &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;char&lt;/span&gt;&lt;span style=&quot;color: #709870;&quot;&gt;[&lt;/span&gt;size + 1&lt;span style=&quot;color: #709870;&quot;&gt;]&lt;/span&gt;;
            strcpy_s&lt;span style=&quot;color: #709870;&quot;&gt;(&lt;/span&gt;string_ptr, size + 1, str&lt;span style=&quot;color: #709870;&quot;&gt;)&lt;/span&gt;;
        &lt;span style=&quot;color: #909183;&quot;&gt;}&lt;/span&gt;
    &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;

    ~&lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;Immutable_string&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt;
    &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;
        &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;size &amp;gt;= buffer_size&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt;
            &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;delete&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;[]&lt;/span&gt; string_ptr;
    &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;

    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;char&lt;/span&gt;* &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;get_str&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt;
    &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;
        &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;size &amp;lt; buffer_size&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt; ? string_buffer : string_ptr;
    &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;private&lt;/span&gt;:
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;If the string is short enough, we store the string itself&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;instead of a pointer to the string.&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;union&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;
        &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;char&lt;/span&gt;* &lt;span style=&quot;color: #000000;&quot;&gt;string_ptr&lt;/span&gt;;
        &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;char&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;string_buffer&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;[&lt;/span&gt;buffer_size&lt;span style=&quot;color: #909183;&quot;&gt;]&lt;/span&gt;;
    &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;;

    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;size_t&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;size&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;

&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;main&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Immutable_string&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;s1&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;1234567890&quot;&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;;
    cout &amp;lt;&amp;lt; s1.get_str&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt; &amp;lt;&amp;lt; endl;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Immutable_string&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;s2&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;12345678901234567890&quot;&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;;
    cout &amp;lt;&amp;lt; s2.get_str&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt; &amp;lt;&amp;lt; endl;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;pre class=&quot;example&quot;&gt;
1234567890
12345678901234567890
&lt;/pre&gt;
</content>
 </entry>
 
 <entry>
   <title>单词本：people person</title>
   <link href="http://kimi.im/2023-01-26-english-people-person"/>
   <updated>2023-01-26T00:00:00+00:00</updated>
   <id>http://kimi.im/english-people-person</id>
   <content type="html">&lt;p&gt;
昨天看一个文章，读到这句话：I&amp;rsquo;m just not a people person. 我恰好不是一个善于和人打交道的人。
&lt;/p&gt;

&lt;p&gt;
这里的这个组合 people person 的意思是：有人缘的人，善于与人打交道的人，受欢迎的人。
&lt;/p&gt;

&lt;p&gt;
拆开来的话，person 的单数形式实际上是指单个的人类。比如 She is such a
nice person. 她是一个很好的人。 He&amp;rsquo;s a person I have a lot of respect
for. 他是我敬佩的人。
&lt;/p&gt;

&lt;p&gt;
person 的复数形式 persons 一般用于严密的法律条文：Any person or
persons found in possession of illegal substances will be prosecuted.
&lt;/p&gt;

&lt;p&gt;
而 people 则泛指人们。比如 I saw three people on the tree. 我看到三个人在树上。这里不能说 I saw three persons on the tree. 可能这么写，会让英语母语的人觉得是在说：我看到三个人类在树上。有点怪怪的。
&lt;/p&gt;

&lt;p&gt;
所以，前面说的 people person 也是不能反过来写成 person people。
&lt;/p&gt;

&lt;p&gt;
顺便提一下 people skills 指的是与人打交道的技能，比如 His people
skills helped him as a salesman. 对于销售人员，人际能力对他很有帮助。所以 A people person has excellent people skills.
&lt;/p&gt;

&lt;p&gt;
我们需要 people skills 但是我们不能成为 people pleaser。people pleaser
是指一味讨好他人的人，这就偏离了与人交往的准则了。比如 He&amp;rsquo;s a people
pleaser; he&amp;rsquo;s just horrified if people don&amp;rsquo;t love him. 他是一个取悦他人的人，他只是害怕人们不喜欢他。
&lt;/p&gt;

&lt;p&gt;
所以，A people person has excellent people skills, but he/she should
not be a people pleaser.
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines C.170 如果你想要重载一个 lambda，请使用泛型 lambda</title>
   <link href="http://kimi.im/2023-01-24-cppcoreguidelines-c170"/>
   <updated>2023-01-24T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-c170</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;If you feel like overloading a lambda, use a generic lambda&amp;rdquo;
&lt;/p&gt;


&lt;p&gt;
理由
&lt;/p&gt;

&lt;p&gt;
你无法用相同的名字重载定义不同的 lambda
&lt;/p&gt;


&lt;p&gt;
例子
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;
&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;double&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;auto&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;f&lt;/span&gt; = &lt;span style=&quot;color: #707183;&quot;&gt;[](&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;char&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;error: cannot overload variable and function&lt;/span&gt;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;auto&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;g&lt;/span&gt; = &lt;span style=&quot;color: #707183;&quot;&gt;[](&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;/* &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;...&lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt; */&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;auto&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;g&lt;/span&gt; = &lt;span style=&quot;color: #707183;&quot;&gt;[](&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;double&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;/* &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;...&lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt; */&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;error: cannot overload variables&lt;/span&gt;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;auto&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;h&lt;/span&gt; = &lt;span style=&quot;color: #707183;&quot;&gt;[](&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;auto&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;/* &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;...&lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt; */&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;OK&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;
强化
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;编译器会捕捉到重载 lambda 的情况&lt;/li&gt;
&lt;/ul&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines C.168 在操作对象的名字空间中定义重载的操作符</title>
   <link href="http://kimi.im/2023-01-23-cppcoreguidelines-c168"/>
   <updated>2023-01-23T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-c168</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;Define overloaded operators in the namespace of their operands&amp;rdquo;
&lt;/p&gt;


&lt;p&gt;
理由
&lt;/p&gt;

&lt;p&gt;
更好的可读性。可以使用 ADL 查找操作符。避免在不同名字空间中定义的不一致。
&lt;/p&gt;


&lt;p&gt;
例子
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;struct&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;S&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;
&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;S&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;operator&lt;/span&gt;&lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;S&lt;/span&gt;, &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;S&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;OK: in the same namespace as S, and even next to S&lt;/span&gt;
&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;S&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;s&lt;/span&gt;;

&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;S&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;r&lt;/span&gt; = s + s;
&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;
例子
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;namespace&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;N&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;struct&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;S&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;S&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;operator&lt;/span&gt;&lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;S&lt;/span&gt;, &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;S&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;OK: in the same namespace as S, and even next to S&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;

&lt;span style=&quot;color: #110099;&quot;&gt;N&lt;/span&gt;::&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;S&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;s&lt;/span&gt;;

&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;S&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;r&lt;/span&gt; = s + s;  &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;finds N::operator+() by ADL&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;
坏例子
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;struct&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;S&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;
&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;S&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;s&lt;/span&gt;;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;namespace&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;N&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;bool&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;operator&lt;/span&gt;!&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;S&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;a&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;true&lt;/span&gt;; &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;bool&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;not_s&lt;/span&gt; = !s;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;namespace&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;M&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;bool&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;operator&lt;/span&gt;!&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;S&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;a&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;false&lt;/span&gt;; &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;bool&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;not_s&lt;/span&gt; = !s;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
此处， !s 的意思在名字空间 N 和 M 中不一样。这样会导致很大的困惑。
&lt;/p&gt;



&lt;p&gt;
注意
&lt;/p&gt;

&lt;p&gt;
如果操作数是在不同的名字空间里的两个不同的对象，那就无法遵循这条规则了。
&lt;/p&gt;


&lt;p&gt;
比如
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #110099;&quot;&gt;Vec&lt;/span&gt;::&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Vector&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;operator&lt;/span&gt;&lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;Vec&lt;/span&gt;::&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Vector&lt;/span&gt;&amp;amp;, &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;Mat&lt;/span&gt;::&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Matrix&lt;/span&gt;&amp;amp;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
不过这种情况最好还是避免发生。
&lt;/p&gt;


&lt;p&gt;
强化
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;标注和操作数不在一个名字空间的操作符。&lt;/li&gt;
&lt;/ul&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines C.167 按照约定习俗使用操作符</title>
   <link href="http://kimi.im/2023-01-22-cppcoreguidelines-c167"/>
   <updated>2023-01-22T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-c167</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;Use an operator for an operation with its conventional meaning&amp;rdquo;
&lt;/p&gt;


&lt;p&gt;
理由
&lt;/p&gt;

&lt;p&gt;
可读性，约定习俗，可重用。支持泛型代码。
&lt;/p&gt;


&lt;p&gt;
例子
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;cout_my_class&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;My_class&lt;/span&gt;&amp;amp; &lt;span style=&quot;color: #000000;&quot;&gt;c&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;confusing, not conventional, not generic&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #110099;&quot;&gt;std&lt;/span&gt;::cout &amp;lt;&amp;lt; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;/* &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;class members here&lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt; */&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;

&lt;span style=&quot;color: #110099;&quot;&gt;std&lt;/span&gt;::&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;ostream&lt;/span&gt;&amp;amp; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;operator&lt;/span&gt;&lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;std&lt;/span&gt;::&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;ostream&lt;/span&gt;&amp;amp; &lt;span style=&quot;color: #000000;&quot;&gt;os&lt;/span&gt;, &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;my_class&lt;/span&gt;&amp;amp; &lt;span style=&quot;color: #000000;&quot;&gt;c&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;OK&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; os &amp;lt;&amp;lt; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;/* &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;class members here&lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt; */&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;
&lt;code&gt;cout_my_class&lt;/code&gt; 本身是没问题的，但是如果我们要跟其他依赖于 &lt;code&gt;&amp;lt;&amp;lt;&lt;/code&gt; 操作的代码在一起使用，就有问题了。
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;My_class&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;var&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;/* &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;...&lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt; */&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;
&lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;...&lt;/span&gt;
cout &amp;lt;&amp;lt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;var = &quot;&lt;/span&gt; &amp;lt;&amp;lt; var &amp;lt;&amp;lt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&apos;\n&apos;&lt;/span&gt;;
&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;
注意
&lt;/p&gt;

&lt;p&gt;
大部分操作符有很强很严格的使用习俗约定，比如：
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;比较 (&lt;code&gt;=, !&lt;/code&gt;, &amp;lt;, &amp;lt;=, &amp;gt;, &amp;gt;=, &amp;lt;=&amp;gt;),&lt;/li&gt;
&lt;li&gt;运算符 (+, -, *, /, %)&lt;/li&gt;
&lt;li&gt;访问操作 (., -&amp;gt;, unary *, [])&lt;/li&gt;
&lt;li&gt;赋值 (=)&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;
不要自己定义一种行为，也不要为这些操作发明新的名字。
&lt;/p&gt;


&lt;p&gt;
强化
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;需要语义理解&lt;/li&gt;
&lt;/ul&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines C.166 只有作为智能指针和引用的系统部分的时候重载一元操作符 &</title>
   <link href="http://kimi.im/2023-01-21-cppcoreguidelines-c166"/>
   <updated>2023-01-21T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-c166</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;Overload unary &amp;amp; only as part of a system of smart pointers and references&amp;rdquo;
&lt;/p&gt;


&lt;p&gt;
理由
&lt;/p&gt;

&lt;p&gt;
&amp;amp; 操作符在 C++ 中是很基础的操作符。大部分 C++ 语义都假定了 &amp;amp; 操作符的默认行为。
&lt;/p&gt;


&lt;p&gt;
例子
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Ptr&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;a somewhat smart pointer&lt;/span&gt;
    &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;Ptr&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;X&lt;/span&gt;* &lt;span style=&quot;color: #000000;&quot;&gt;pp&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; : p&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;pp&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;/* &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;check&lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt; */&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;X&lt;/span&gt;* &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;operator&lt;/span&gt;&lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;/* &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;check&lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt; */&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; p; &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;X&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;operator&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;[]&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;i&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;X&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;operator&lt;/span&gt;&lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt;;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;private&lt;/span&gt;:
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt;* &lt;span style=&quot;color: #000000;&quot;&gt;p&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;X&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Ptr&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;operator&lt;/span&gt;&lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; Ptr&lt;span style=&quot;color: #909183;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;this&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;}&lt;/span&gt;; &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;...&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;
&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;
注意
&lt;/p&gt;

&lt;p&gt;
对于 &amp;amp; 操作符，如果你遇到麻烦了，请确保 -&amp;gt;， []，* 和 . 等操作有确定的意义。
&lt;/p&gt;


&lt;p&gt;
注意
&lt;/p&gt;

&lt;p&gt;
目前不能重载 . 操作符。
&lt;/p&gt;

&lt;p&gt;
注意
&lt;/p&gt;

&lt;p&gt;
&lt;code&gt;std::addressof()&lt;/code&gt; 总是会产生一个内置指针。
&lt;/p&gt;


&lt;p&gt;
强化
&lt;/p&gt;

&lt;p&gt;
警告：如果 &amp;amp; 是自定义的，却没有定义 -&amp;gt;
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Clojure deps & clj guide</title>
   <link href="http://kimi.im/2023-01-20-deps-and-clj"/>
   <updated>2023-01-20T00:00:00+00:00</updated>
   <id>http://kimi.im/deps-and-clj</id>
   <content type="html">&lt;p&gt;
Clojure 命令行工具非常有用，但是一直没有仔细了解其功能，每次用的时候，就会手忙脚乱。现在参考 Clojure 官网的 ‘Deps and CLI Guide’ 系统学习学习。
&lt;/p&gt;

&lt;p&gt;
Clojure 命令行的作用：
&lt;/p&gt;
&lt;ol class=&quot;org-ol&quot;&gt;
&lt;li&gt;运行 REPL&lt;/li&gt;
&lt;li&gt;运行 Clojure 程序&lt;/li&gt;
&lt;li&gt;解析执行 Clojure 语句&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;
所有这些操作，都可能会用到 Clojure 或 Java 的程序库，可以用 &lt;code&gt;deps.edn&lt;/code&gt;
文件来指定程序库的来源和版本，从而可以让 Clojure 自动的下载程序库、添加到 JVM classpath。
&lt;/p&gt;

&lt;div id=&quot;outline-container-orgb410825&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgb410825&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;1.&lt;/span&gt; 安装 Clojure 命令行&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-1&quot;&gt;
&lt;p&gt;
这个网页 &lt;a href=&quot;https://clojure.org/guides/install_clojure&quot;&gt;https://clojure.org/guides/install_clojure&lt;/a&gt; 介绍了命令行下的安装方法：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-shell&quot;&gt;curl -O https://download.clojure.org/install/linux-install-1.11.1.1208.sh
chmod +x linux-install-1.11.1.1208.sh
./linux-install-1.11.1.1208.sh
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
运行结果如下：
&lt;/p&gt;

&lt;p&gt;
（这里，我的命令行提示符是 # 符号）
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-example&quot;&gt;# curl -O https://download.clojure.org/install/linux-install-1.11.1.1208.sh
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100  1828  100  1828    0     0    858      0  0:00:02  0:00:02 --:--:--   858

# chmod +x linux-install-1.11.1.1208.sh

# ./linux-install-1.11.1.1208.sh
Downloading and expanding tar
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 17.1M  100 17.1M    0     0  2471k      0  0:00:07  0:00:07 --:--:-- 3630k
Installing libs into /usr/local/lib/clojure
Installing clojure and clj into /usr/local/bin
Installing man pages into /usr/local/share/man/man1
Removing download
Use clj -h for help
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
让后我们可以用 &lt;code&gt;clj -h&lt;/code&gt; 打印出一堆帮助信息：
&lt;/p&gt;

&lt;pre class=&quot;example&quot; id=&quot;org43a156b&quot;&gt;
# clj -h
Version: 1.11.1.1208

You use the Clojure tools (&apos;clj&apos; or &apos;clojure&apos;) to run Clojure programs
on the JVM, e.g. to start a REPL or invoke a specific function with data.
The Clojure tools will configure the JVM process by defining a classpath
(of desired libraries), an execution environment (JVM options) and
specifying a main class and args.

Using a deps.edn file (or files), you tell Clojure where your source code
resides and what libraries you need. Clojure will then calculate the full
set of required libraries and a classpath, caching expensive parts of this
process for better performance.

The internal steps of the Clojure tools, as well as the Clojure functions
you intend to run, are parameterized by data structures, often maps. Shell
command lines are not optimized for passing nested data, so instead you
will put the data structures in your deps.edn file and refer to them on the
command line via &apos;aliases&apos; - keywords that name data structures.

&apos;clj&apos; and &apos;clojure&apos; differ in that &apos;clj&apos; has extra support for use as a REPL
in a terminal, and should be preferred unless you don&apos;t want that support,
then use &apos;clojure&apos;.

Usage:
  Start a REPL  clj     [clj-opt*] [-Aaliases] [init-opt*]
  Exec fn(s)    clojure [clj-opt*] -X[aliases] a/fn? [kpath v]* kv-map?
  Run tool      clojure [clj-opt*] -T[name|aliases] a/fn [kpath v] kv-map?
  Run main      clojure [clj-opt*] -M[aliases] [init-opt*] [main-opt] [arg*]
  Prepare       clojure [clj-opt*] -P [other exec opts]

exec-opts:
 -Aaliases      Use concatenated aliases to modify classpath
 -X[aliases]    Use concatenated aliases to modify classpath or supply exec fn/args
 -T[toolname|aliases]  Invoke tool by name or via aliases ala -X
 -M[aliases]    Use concatenated aliases to modify classpath or supply main opts
 -P             Prepare deps - download libs, cache classpath, but don&apos;t exec

clj-opts:
 -Jopt          Pass opt through in java_opts, ex: -J-Xmx512m
 -Sdeps EDN     Deps data to use as the last deps file to be merged
 -Spath         Compute classpath and echo to stdout only
 -Spom          Generate (or update) pom.xml with deps and paths
 -Stree         Print dependency tree
 -Scp CP        Do NOT compute or cache classpath, use this one instead
 -Srepro        Ignore the ~/.clojure/deps.edn config file
 -Sforce        Force recomputation of the classpath (don&apos;t use the cache)
 -Sverbose      Print important path info to console
 -Sdescribe     Print environment and command parsing info as data
 -Sthreads      Set specific number of download threads
 -Strace        Write a trace.edn file that traces deps expansion
 --             Stop parsing dep options and pass remaining arguments to clojure.main
 --version      Print the version to stdout and exit
 -version       Print the version to stderr and exit

init-opt:
 -i, --init path     Load a file or resource
 -e, --eval string   Eval exprs in string; print non-nil values
 --report target     Report uncaught exception to &quot;file&quot; (default), &quot;stderr&quot;, or &quot;none&quot;

main-opt:
 -m, --main ns-name  Call the -main function from namespace w/args
 -r, --repl          Run a repl
 path                Run a script from a file or resource
 -                   Run a script from standard input
 -h, -?, --help      Print this help message and exit

Programs provided by :deps alias:
 -X:deps list              List full transitive deps set and licenses
 -X:deps tree              Print deps tree
 -X:deps find-versions     Find available versions of a library
 -X:deps find-versions     Find available versions of a library
 -X:deps prep              Prepare all unprepped libs in the dep tree
 -X:deps mvn-install       Install a maven jar to the local repository cache
 -X:deps git-resolve-tags  Resolve git coord tags to shas and update deps.edn

For more info, see:
 https://clojure.org/guides/deps_and_cli
 https://clojure.org/reference/repl_and_main
&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgee69cec&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgee69cec&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;2.&lt;/span&gt; 运行 REPL&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-2&quot;&gt;
&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-example&quot;&gt;# clj
Clojure 1.11.1
user=&amp;gt; (+ 2 3)
5
user=&amp;gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
创建 &lt;code&gt;deps.edn&lt;/code&gt; 添加程序库，比如 &lt;code&gt;clojure.java-time&lt;/code&gt; 用来处理时间对象。
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-clojure&quot;&gt;&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;:deps&lt;/span&gt;
 &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;clojure.java-time&lt;/span&gt;/clojure.java-time &lt;span style=&quot;color: #909183;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;mvn&lt;/span&gt;&lt;span style=&quot;color: #000000; background-color: #f8f8f8;&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;version&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;1.1.0&quot;&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
命令行中，也可以查询程序库的版本：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-example&quot;&gt;# clj -X:deps find-versions :lib clojure.java-time/clojure.java-time
{:mvn/version &quot;0.3.0&quot;}
{:mvn/version &quot;0.3.1&quot;}
{:mvn/version &quot;0.3.2&quot;}
{:mvn/version &quot;0.3.3&quot;}
{:mvn/version &quot;1.0.0-SNAPSHOT&quot;}
{:mvn/version &quot;1.0.0&quot;}
{:mvn/version &quot;1.1.0&quot;}
{:mvn/version &quot;1.2.0&quot;}
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
既然，有新版本，那么，我们修改一下 &lt;code&gt;deps.edn&lt;/code&gt;
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-clojure&quot;&gt;&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;:deps&lt;/span&gt;
 &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;clojure.java-time&lt;/span&gt;/clojure.java-time &lt;span style=&quot;color: #909183;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;mvn&lt;/span&gt;&lt;span style=&quot;color: #000000; background-color: #f8f8f8;&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;version&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;1.2.0&quot;&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
再一次在 &lt;code&gt;deps.edn&lt;/code&gt; 所在的文件夹运行 clj：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-example&quot;&gt;# clj
Downloading: clojure/java-time/clojure.java-time/1.2.0/clojure.java-time-1.2.0.pom from clojars
Downloading: clojure/java-time/clojure.java-time/1.2.0/clojure.java-time-1.2.0.jar from clojars
Clojure 1.11.1
user=&amp;gt; (require &apos;[java-time.api :as t])
nil
user=&amp;gt; (str (t/instant))
&quot;2023-01-20T02:19:56.912808900Z&quot;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
我们就能在 REPL 中 &lt;code&gt;require&lt;/code&gt; 所 &lt;code&gt;deps.edn&lt;/code&gt; 指定的程序库啦。因为 &lt;code&gt;clj&lt;/code&gt; 会在后台下载程序库，并把程序库加载到 &lt;code&gt;classpath&lt;/code&gt; 中供我们调用。
&lt;/p&gt;

&lt;p&gt;
下载到的程序库，一般保存 &lt;code&gt;~/.m2&lt;/code&gt; 或 &lt;code&gt;~/.gitlibs&lt;/code&gt; ，比如刚才的库就在这里：
&lt;/p&gt;

&lt;pre class=&quot;example&quot; id=&quot;orga7881f5&quot;&gt;
# ls ~/.m2/repository/clojure/java-time/clojure.java-time/1.2.0/
-rw-r--r-- 1 63991 Jan 20 10:19 clojure.java-time-1.2.0.jar
-rw-r--r-- 1    40 Jan 20 10:19 clojure.java-time-1.2.0.jar.sha1
-rw-r--r-- 1  3546 Jan 20 10:19 clojure.java-time-1.2.0.pom
-rw-r--r-- 1    40 Jan 20 10:19 clojure.java-time-1.2.0.pom.sha1
-rw-r--r-- 1   218 Jan 20 10:19 _remote.repositories
&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgc5f23af&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgc5f23af&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;3.&lt;/span&gt; 写程序&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-3&quot;&gt;
&lt;p&gt;
接下来，官方指南教我们怎么写程序。
&lt;/p&gt;

&lt;p&gt;
在 &lt;code&gt;deps.edn&lt;/code&gt; 同一级文件夹下，创建一个 &lt;code&gt;src&lt;/code&gt; 文件夹，添加 &lt;code&gt;hello.clj&lt;/code&gt;
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-clojure&quot;&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;ns&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;hello&lt;/span&gt;
  &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;:require&lt;/span&gt; &lt;span style=&quot;color: #909183;&quot;&gt;[&lt;/span&gt;java-time.api &lt;span style=&quot;color: #110099;&quot;&gt;:as&lt;/span&gt; t&lt;span style=&quot;color: #909183;&quot;&gt;]&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;

&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;defn&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;time-str&lt;/span&gt;
  &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;Returns a string representation of a datetime in the local time zone.&quot;&lt;/span&gt;
  &lt;span style=&quot;color: #7388d6;&quot;&gt;[&lt;/span&gt;instant&lt;span style=&quot;color: #7388d6;&quot;&gt;]&lt;/span&gt;
  &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;t&lt;/span&gt;/&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;format&lt;/span&gt;
   &lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;t&lt;/span&gt;/with-zone &lt;span style=&quot;color: #709870;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;t&lt;/span&gt;/formatter &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;hh:mm a&quot;&lt;/span&gt;&lt;span style=&quot;color: #709870;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #709870;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;t&lt;/span&gt;/zone-id&lt;span style=&quot;color: #709870;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt;
   instant&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;

&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;defn&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;run&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;[&lt;/span&gt;opts&lt;span style=&quot;color: #7388d6;&quot;&gt;]&lt;/span&gt;
  &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;println&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;Hello world, the time is&quot;&lt;/span&gt; &lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;time-str &lt;span style=&quot;color: #709870;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;t&lt;/span&gt;/instant&lt;span style=&quot;color: #709870;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;

&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;defn&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;-main&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;[]&lt;/span&gt;
  &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;run &lt;span style=&quot;color: #909183;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;:name&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;Clojure&quot;&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
然后，运行：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-example&quot;&gt;# clj -X hello/run
Hello world, the time is 10:28 AM
&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-org4856731&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;org4856731&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;4.&lt;/span&gt; 使用本地代码库&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-4&quot;&gt;
&lt;p&gt;
我们也可以提取 &lt;code&gt;time-str&lt;/code&gt; 这个函数到另一个工程。这样可以重复使用共用代码。
&lt;/p&gt;

&lt;p&gt;
在上面那个工程文件夹同一级，创建 &lt;code&gt;time-lib&lt;/code&gt; 文件夹，添加一样的 &lt;code&gt;deps.edn&lt;/code&gt;
，然后在 &lt;code&gt;src&lt;/code&gt; 下添加 &lt;code&gt;hello-time.clj&lt;/code&gt; 文件：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-clojure&quot;&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;ns&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;hello-time&lt;/span&gt;
  &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;:require&lt;/span&gt; &lt;span style=&quot;color: #909183;&quot;&gt;[&lt;/span&gt;java-time.api &lt;span style=&quot;color: #110099;&quot;&gt;:as&lt;/span&gt; t&lt;span style=&quot;color: #909183;&quot;&gt;]&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;

&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;defn&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;now&lt;/span&gt;
  &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;Returns the current datetime&quot;&lt;/span&gt;
  &lt;span style=&quot;color: #7388d6;&quot;&gt;[]&lt;/span&gt;
  &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;t&lt;/span&gt;/instant&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;

&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;defn&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;time-str&lt;/span&gt;
  &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;Returns a string representation of a datetime in the local time zone.&quot;&lt;/span&gt;
  &lt;span style=&quot;color: #7388d6;&quot;&gt;[&lt;/span&gt;instant&lt;span style=&quot;color: #7388d6;&quot;&gt;]&lt;/span&gt;
  &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;t&lt;/span&gt;/&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;format&lt;/span&gt;
   &lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;t&lt;/span&gt;/with-zone &lt;span style=&quot;color: #709870;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;t&lt;/span&gt;/formatter &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;hh:mm a&quot;&lt;/span&gt;&lt;span style=&quot;color: #709870;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #709870;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;t&lt;/span&gt;/zone-id&lt;span style=&quot;color: #709870;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt;
   instant&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
修改 &lt;code&gt;hello-world&lt;/code&gt; 项目的 &lt;code&gt;deps.edn&lt;/code&gt;
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-clojure&quot;&gt;&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;:deps&lt;/span&gt;
 &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;time-lib&lt;/span&gt;/time-lib &lt;span style=&quot;color: #909183;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;local&lt;/span&gt;&lt;span style=&quot;color: #000000; background-color: #f8f8f8;&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;root&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;../time-lib&quot;&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
意思 &lt;code&gt;time-lib/time-lib&lt;/code&gt; 程序库在本文件夹的上一级文件夹下的 &lt;code&gt;time-lib&lt;/code&gt;
&lt;/p&gt;

&lt;p&gt;
&lt;code&gt;hello.clj&lt;/code&gt; 就可以简化如下：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-clojure&quot;&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;ns&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;hello&lt;/span&gt;
  &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;:require&lt;/span&gt; &lt;span style=&quot;color: #909183;&quot;&gt;[&lt;/span&gt;hello-time &lt;span style=&quot;color: #110099;&quot;&gt;:as&lt;/span&gt; ht&lt;span style=&quot;color: #909183;&quot;&gt;]&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;

&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;defn&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;run&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;[&lt;/span&gt;opts&lt;span style=&quot;color: #7388d6;&quot;&gt;]&lt;/span&gt;
  &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;println&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;Hello world, the time is&quot;&lt;/span&gt; &lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;ht&lt;/span&gt;/time-str &lt;span style=&quot;color: #709870;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;ht&lt;/span&gt;/now&lt;span style=&quot;color: #709870;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;

&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;defn&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;-main&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;[]&lt;/span&gt;
  &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;run &lt;span style=&quot;color: #909183;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;:name&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;Clojure&quot;&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
运行效果一样：
&lt;/p&gt;

&lt;pre class=&quot;example&quot; id=&quot;orga805411&quot;&gt;
# clj -X hello/run
Hello world, the time is 10:58 AM
&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orge0aa866&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orge0aa866&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;5.&lt;/span&gt; 使用 Github 库&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-5&quot;&gt;
&lt;p&gt;
接着，把刚才创建的 &lt;code&gt;time-lib&lt;/code&gt; 文件夹内容 push 到 github：&lt;a href=&quot;https://github.com/kimim/time-lib&quot;&gt;https://github.com/kimim/time-lib&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
创建tag，查看日志：
&lt;/p&gt;

&lt;pre class=&quot;example&quot; id=&quot;orgd2de2eb&quot;&gt;
# git tag -a &apos;0.0.1&apos; -m &apos;initial release&apos;

# git push --tags
Enumerating objects: 1, done.
Counting objects: 100% (1/1), done.
Writing objects: 100% (1/1), 160 bytes | 80.00 KiB/s, done.
Total 1 (delta 0), reused 0 (delta 0), pack-reused 0
To github.com:kimim/time-lib.git
 * [new tag]         0.0.1 -&amp;gt; 0.0.1

# git rev-parse --short 0.0.1^{commit}
6514c10
&lt;/pre&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-clojure&quot;&gt;&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;:deps&lt;/span&gt;
 &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;io.github.kimim&lt;/span&gt;/time-lib &lt;span style=&quot;color: #909183;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;git&lt;/span&gt;&lt;span style=&quot;color: #000000; background-color: #f8f8f8;&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;tag&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;0.0.1&quot;&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;git&lt;/span&gt;&lt;span style=&quot;color: #000000; background-color: #f8f8f8;&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;sha&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;6514c10&quot;&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
运行效果如下，clj 会去 clone github 库：
&lt;/p&gt;

&lt;pre class=&quot;example&quot; id=&quot;orgfd7c599&quot;&gt;
# clj -X hello/run
Checking out: https://github.com/kimim/time-lib.git at 6514c1022a78ace8548552b3db64f6efa58448e2
Downloading: clojure/java-time/clojure.java-time/1.2.0/clojure.java-time-1.2.0.pom from clojars
Downloading: clojure/java-time/clojure.java-time/1.2.0/clojure.java-time-1.2.0.jar from clojars
Hello world, the time is 03:23 AM
&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-org6f30566&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;org6f30566&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;6.&lt;/span&gt; 添加额外的 classpath&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-6&quot;&gt;
&lt;p&gt;
clj 可以用 &lt;code&gt;-A&lt;/code&gt; 选项添加 &lt;code&gt;deps.edn&lt;/code&gt; 中 &lt;code&gt;:alias&lt;/code&gt; 指定的库，比如：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-clojure&quot;&gt;&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;:deps&lt;/span&gt;
 &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;io.github.kimim&lt;/span&gt;/time-lib &lt;span style=&quot;color: #909183;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;git&lt;/span&gt;&lt;span style=&quot;color: #000000; background-color: #f8f8f8;&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;tag&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;0.0.1&quot;&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;git&lt;/span&gt;&lt;span style=&quot;color: #000000; background-color: #f8f8f8;&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;sha&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;6514c10&quot;&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;
 &lt;span style=&quot;color: #110099;&quot;&gt;:aliases&lt;/span&gt;
 &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;:test&lt;/span&gt; &lt;span style=&quot;color: #909183;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;:extra-paths&lt;/span&gt; &lt;span style=&quot;color: #709870;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;test&quot;&lt;/span&gt;&lt;span style=&quot;color: #709870;&quot;&gt;]&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;}&lt;/span&gt;
  &lt;span style=&quot;color: #110099;&quot;&gt;:bench&lt;/span&gt; &lt;span style=&quot;color: #909183;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;:extra-deps&lt;/span&gt; &lt;span style=&quot;color: #709870;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;criterium&lt;/span&gt;/criterium &lt;span style=&quot;color: #907373;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;mvn&lt;/span&gt;&lt;span style=&quot;color: #000000; background-color: #f8f8f8;&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;version&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;0.4.4&quot;&lt;/span&gt;&lt;span style=&quot;color: #907373;&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color: #709870;&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
通过一下命令行参数，就可以在 classpath 中添加 test 文件夹，criterium 库：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-shell&quot;&gt;clj -A:bench:test
&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-org848f1c8&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;org848f1c8&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;7.&lt;/span&gt; Sean Corfield 的 clj-new&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-7&quot;&gt;
&lt;p&gt;
大神 Sean Corfield 扩展了很多 clj 的功能：
&lt;a href=&quot;https://github.com/seancorfield/clj-new&quot;&gt;https://github.com/seancorfield/clj-new&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
添加以下 &lt;code&gt;alias&lt;/code&gt; ，就可以运行模块内的 &lt;code&gt;-main&lt;/code&gt; 函数、特定函数、测试、编译打包。
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-clojure&quot;&gt; &lt;span style=&quot;color: #110099;&quot;&gt;:aliases&lt;/span&gt;
 &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;:run-m&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;:main-opts&lt;/span&gt; &lt;span style=&quot;color: #909183;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;-m&quot;&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;hello&quot;&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;]&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;
  &lt;span style=&quot;color: #110099;&quot;&gt;:run-x&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;:ns-default&lt;/span&gt; hello
          &lt;span style=&quot;color: #110099;&quot;&gt;:exec-fn&lt;/span&gt; run
          &lt;span style=&quot;color: #110099;&quot;&gt;:exec-args&lt;/span&gt; &lt;span style=&quot;color: #909183;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;:name&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;Clojure&quot;&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;
  &lt;span style=&quot;color: #110099;&quot;&gt;:build&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;:deps&lt;/span&gt; &lt;span style=&quot;color: #909183;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;io.github.seancorfield&lt;/span&gt;/build-clj
                 &lt;span style=&quot;color: #709870;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;git&lt;/span&gt;&lt;span style=&quot;color: #000000; background-color: #f8f8f8;&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;tag&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;v0.4.0&quot;&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;git&lt;/span&gt;&lt;span style=&quot;color: #000000; background-color: #f8f8f8;&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;sha&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;54e39ae&quot;&lt;/span&gt;&lt;span style=&quot;color: #709870;&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;}&lt;/span&gt;
          &lt;span style=&quot;color: #110099;&quot;&gt;:ns-default&lt;/span&gt; build&lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;
  &lt;span style=&quot;color: #110099;&quot;&gt;:test&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;:extra-paths&lt;/span&gt; &lt;span style=&quot;color: #909183;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;test&quot;&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;]&lt;/span&gt;
         &lt;span style=&quot;color: #110099;&quot;&gt;:extra-deps&lt;/span&gt; &lt;span style=&quot;color: #909183;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;org.clojure&lt;/span&gt;/test.check &lt;span style=&quot;color: #709870;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;mvn&lt;/span&gt;&lt;span style=&quot;color: #000000; background-color: #f8f8f8;&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;version&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;1.1.0&quot;&lt;/span&gt;&lt;span style=&quot;color: #709870;&quot;&gt;}&lt;/span&gt;
                      &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;io.github.cognitect-labs&lt;/span&gt;/test-runner
                      &lt;span style=&quot;color: #709870;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;git&lt;/span&gt;&lt;span style=&quot;color: #000000; background-color: #f8f8f8;&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;tag&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;v0.5.0&quot;&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;git&lt;/span&gt;&lt;span style=&quot;color: #000000; background-color: #f8f8f8;&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;sha&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;48c3c67&quot;&lt;/span&gt;&lt;span style=&quot;color: #709870;&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-example&quot;&gt;# clj -M:run-m
Hello world, the time is 03:50 AM

# clj -X:run-x
Hello world, the time is 03:50 AM

# clj -T:build test

Running task for: test

Running tests in #{&quot;test&quot;}

Testing user

Ran 0 tests containing 0 assertions.
0 failures, 0 errors.

# clj -T:build ci

Running task for: test

Running tests in #{&quot;test&quot;}

Testing user

Ran 0 tests containing 0 assertions.
0 failures, 0 errors.

Cleaning target...

Writing pom.xml...
Skipping coordinate: {:git/tag 0.0.1, :git/sha 6514c1022a78ace8548552b3db64f6efa58448e2, :git/url https://github.com/kimim/time-lib.git, :deps/manifest :deps, :deps/root /home/learn/.gitlibs/libs/io.github.kimim/time-lib/6514c1022a78ace8548552b3db64f6efa58448e2, :parents #{[]}, :paths [/home/learn/.gitlibs/libs/io.github.kimim/time-lib/6514c1022a78ace8548552b3db64f6efa58448e2/src]}
Copying src, resources...
Compiling hello...
Building uberjar target/hello-0.1.0-SNAPSHOT.jar...
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
当然，为了使用 &lt;code&gt;build&lt;/code&gt; ，还需要在 &lt;code&gt;deps.edn&lt;/code&gt; 同一层级添加一个 &lt;code&gt;build.clj&lt;/code&gt; 文件：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-clojure&quot;&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;ns&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;build&lt;/span&gt;
  &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;:refer-clojure&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;:exclude&lt;/span&gt; &lt;span style=&quot;color: #909183;&quot;&gt;[&lt;/span&gt;test&lt;span style=&quot;color: #909183;&quot;&gt;]&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;
  &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;:require&lt;/span&gt; &lt;span style=&quot;color: #909183;&quot;&gt;[&lt;/span&gt;org.corfield.build &lt;span style=&quot;color: #110099;&quot;&gt;:as&lt;/span&gt; bb&lt;span style=&quot;color: #909183;&quot;&gt;]&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;

&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;def&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;lib&lt;/span&gt; &apos;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;net.clojars.kimim&lt;/span&gt;/hello&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;def&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;version&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;0.1.0-SNAPSHOT&quot;&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;def&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;main&lt;/span&gt; &apos;hello&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;

&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;defn&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;test&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;Run the tests.&quot;&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;[&lt;/span&gt;opts&lt;span style=&quot;color: #7388d6;&quot;&gt;]&lt;/span&gt;
  &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;bb&lt;/span&gt;/&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;run-tests&lt;/span&gt; opts&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;

&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;defn&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;ci&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;Run the CI pipeline of tests (and build the uberjar).&quot;&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;[&lt;/span&gt;opts&lt;span style=&quot;color: #7388d6;&quot;&gt;]&lt;/span&gt;
  &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;-&amp;gt;&lt;/span&gt; opts
      &lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;assoc&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;:lib&lt;/span&gt; lib &lt;span style=&quot;color: #110099;&quot;&gt;:version&lt;/span&gt; version &lt;span style=&quot;color: #110099;&quot;&gt;:main&lt;/span&gt; main&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt;
      &lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;bb&lt;/span&gt;/&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;run-tests&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt;
      &lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;bb&lt;/span&gt;/clean&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt;
      &lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;bb&lt;/span&gt;/uber&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
大神也开发了 &lt;code&gt;clj-new&lt;/code&gt; 可以直接从模板生成工程文件：
&lt;/p&gt;

&lt;p&gt;
安装 &lt;code&gt;clj-new&lt;/code&gt;
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-example&quot;&gt;# clojure -Ttools install com.github.seancorfield/clj-new &apos;{:git/tag &quot;v1.2.399&quot;}&apos; :as clj-new
Cloning: https://github.com/clojure/tools.tools.git
...
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
从模板生成 app
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-example&quot;&gt;clojure -Tclj-new app :name myname/myapp
Downloading: org/clojure/tools.deps.alpha/0.12.1109/tools.deps.alpha-0.12.1109.pom from central
...
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
运行：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-example&quot;&gt;cd myapp/
# ls
CHANGELOG.md  LICENSE  README.md  build.clj  deps.edn  doc  pom.xml  resources  src  test

# clj -M:run-m
Hello, World!

# clj -X:run-x
Hello, Clojure!
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
测试
&lt;/p&gt;

&lt;pre class=&quot;example&quot; id=&quot;orgc2ae592&quot;&gt;
clj -T:build test
Checking out: https://github.com/seancorfield/build-clj.git at 0ffdb4c0f2cd7ef484458502b926fbe63efe540b
Checking out: https://github.com/clojure/tools.build.git at ba1a2bf421838802e7bdefc541b41f57582e53b6
Checking out: https://github.com/seancorfield/build-uber-log4j2-handler.git at 55fb6f63ea3cc5344e67e87d2322570d4dddd3d5
Downloading: org/clojure/tools.deps.alpha/0.14.1178/tools.deps.alpha-0.14.1178.pom from central
Downloading: org/clojure/tools.namespace/1.3.0/tools.namespace-1.3.0.pom from central
...

Running task for: test
Downloading: org/clojure/test.check/1.1.1/test.check-1.1.1.pom from central
Downloading: org/clojure/test.check/1.1.1/test.check-1.1.1.jar from central

Running tests in #{&quot;test&quot;}

Testing myname.myapp-test

FAIL in (a-test) (myapp_test.clj:7)
FIXME, I fail.
expected: (= 0 1)
  actual: (not (= 0 1))

Ran 1 tests containing 1 assertions.
1 failures, 0 errors.
Execution error (ExceptionInfo) at org.corfield.build/run-task (build.clj:324).
Task failed for: test

Full report at:
/tmp/clojure-12133550799243732811.edn
&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines C.165 在客制化处使用 using</title>
   <link href="http://kimi.im/2023-01-20-cppcoreguidelines-c165"/>
   <updated>2023-01-20T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-c165</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;Use using for customization points&amp;rdquo;
&lt;/p&gt;


&lt;p&gt;
理由
&lt;/p&gt;

&lt;p&gt;
使用别处名字空间的函数对象和函数来客制化一个通用的函数。
&lt;/p&gt;


&lt;p&gt;
例子
&lt;/p&gt;

&lt;p&gt;
考虑 swap 函数。在标准库中是一个通用函数，能够交换任何类型的对象。然而，我们可能想要定义一个特别的 swap 函数。比如在交换两个 vector 时，通用
swap 函数会把 vector 的元素都复制一遍，这里，如果我们想要一个不复制元素的 swap 函数，就需要客制化一个 swap。
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot; id=&quot;orgd68c890&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;namespace&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;N&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;struct&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;X&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;m_x&lt;/span&gt; &lt;span style=&quot;color: #909183;&quot;&gt;{&lt;/span&gt;0&lt;span style=&quot;color: #909183;&quot;&gt;}&lt;/span&gt;;
    &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;X&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;x&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt; : m_x&lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;x&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #909183;&quot;&gt;{}&lt;/span&gt;;
&lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;;
&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;swap&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;X&lt;/span&gt;&amp;amp; &lt;span style=&quot;color: #000000;&quot;&gt;x1&lt;/span&gt;, &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;X&lt;/span&gt;&amp;amp; &lt;span style=&quot;color: #000000;&quot;&gt;x2&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;optimized swap for N::X&lt;/span&gt;
&lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;temp&lt;/span&gt;;
    temp = x1.m_x + 1;
    x1.m_x = x2.m_x + 1;
    x2.m_x = temp;
&lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;namespace&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;N&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;struct&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;X&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;m_x&lt;/span&gt; &lt;span style=&quot;color: #909183;&quot;&gt;{&lt;/span&gt;0&lt;span style=&quot;color: #909183;&quot;&gt;}&lt;/span&gt;;
    &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;X&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;x&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt; : m_x&lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;x&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #909183;&quot;&gt;{}&lt;/span&gt;;
&lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;;
&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;swap&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;X&lt;/span&gt;&amp;amp; &lt;span style=&quot;color: #000000;&quot;&gt;x1&lt;/span&gt;, &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;X&lt;/span&gt;&amp;amp; &lt;span style=&quot;color: #000000;&quot;&gt;x2&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;optimized swap for N::X&lt;/span&gt;
&lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;temp&lt;/span&gt;;
    temp = x1.m_x + 1;
    x1.m_x = x2.m_x + 1;
    x2.m_x = temp;
&lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;f1&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;N&lt;/span&gt;::&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;X&lt;/span&gt;&amp;amp; &lt;span style=&quot;color: #000000;&quot;&gt;a&lt;/span&gt;, &lt;span style=&quot;color: #110099;&quot;&gt;N&lt;/span&gt;::&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;X&lt;/span&gt;&amp;amp; &lt;span style=&quot;color: #000000;&quot;&gt;b&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #110099;&quot;&gt;std&lt;/span&gt;::swap&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;a, b&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;probably not what we wanted: calls std::swap()&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;

&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;main&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #110099;&quot;&gt;N&lt;/span&gt;::&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;X&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;a&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;1&lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;, &lt;span style=&quot;color: #000000;&quot;&gt;b&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;100&lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;;
    f1&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;a, b&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
    cout &amp;lt;&amp;lt; a.m_x &amp;lt;&amp;lt; endl &amp;lt;&amp;lt; b.m_x;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;pre class=&quot;example&quot;&gt;
100
1
&lt;/pre&gt;



&lt;p&gt;
在 &lt;code&gt;f1()&lt;/code&gt; 中，我们调用了 &lt;code&gt;std::swap()&lt;/code&gt; ，然而这个 swap 是 std 名字空间的标准函数。很遗憾，这个不是我们想要的函数，如何才能考虑 N::X 的情况呢？
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;namespace&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;N&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;struct&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;X&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;m_x&lt;/span&gt; &lt;span style=&quot;color: #909183;&quot;&gt;{&lt;/span&gt;0&lt;span style=&quot;color: #909183;&quot;&gt;}&lt;/span&gt;;
    &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;X&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;x&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt; : m_x&lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;x&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #909183;&quot;&gt;{}&lt;/span&gt;;
&lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;;
&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;swap&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;X&lt;/span&gt;&amp;amp; &lt;span style=&quot;color: #000000;&quot;&gt;x1&lt;/span&gt;, &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;X&lt;/span&gt;&amp;amp; &lt;span style=&quot;color: #000000;&quot;&gt;x2&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;optimized swap for N::X&lt;/span&gt;
&lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;temp&lt;/span&gt;;
    temp = x1.m_x + 1;
    x1.m_x = x2.m_x + 1;
    x2.m_x = temp;
&lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;f1&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;N&lt;/span&gt;::&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;X&lt;/span&gt;&amp;amp; &lt;span style=&quot;color: #000000;&quot;&gt;a&lt;/span&gt;, &lt;span style=&quot;color: #110099;&quot;&gt;N&lt;/span&gt;::&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;X&lt;/span&gt;&amp;amp; &lt;span style=&quot;color: #000000;&quot;&gt;b&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    swap&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;a, b&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;calls N::swap&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;

&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;main&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #110099;&quot;&gt;N&lt;/span&gt;::&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;X&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;a&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;1&lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;, &lt;span style=&quot;color: #000000;&quot;&gt;b&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;100&lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;;
    f1&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;a, b&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
    cout &amp;lt;&amp;lt; a.m_x &amp;lt;&amp;lt; endl &amp;lt;&amp;lt; b.m_x;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;pre class=&quot;example&quot;&gt;
101
2
&lt;/pre&gt;



&lt;p&gt;
但是，以上可能并不是我们希望要的泛型代码。这里，我们可能希望是这样：如果有自定义的函数，我们就用自定义函数，如果没有，则用通用函数。为了实现这个想法，我们就要把通用函数包含进来。
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;namespace&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;N&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;struct&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;X&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;m_x&lt;/span&gt; &lt;span style=&quot;color: #909183;&quot;&gt;{&lt;/span&gt;0&lt;span style=&quot;color: #909183;&quot;&gt;}&lt;/span&gt;;
    &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;X&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;x&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt; : m_x&lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;x&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #909183;&quot;&gt;{}&lt;/span&gt;;
&lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;;
&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;swap&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;X&lt;/span&gt;&amp;amp; &lt;span style=&quot;color: #000000;&quot;&gt;x1&lt;/span&gt;, &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;X&lt;/span&gt;&amp;amp; &lt;span style=&quot;color: #000000;&quot;&gt;x2&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;optimized swap for N::X&lt;/span&gt;
&lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;temp&lt;/span&gt;;
    temp = x1.m_x + 1;
    x1.m_x = x2.m_x + 1;
    x2.m_x = temp;
&lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;f1&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;N&lt;/span&gt;::&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;X&lt;/span&gt;&amp;amp; &lt;span style=&quot;color: #000000;&quot;&gt;a&lt;/span&gt;, &lt;span style=&quot;color: #110099;&quot;&gt;N&lt;/span&gt;::&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;X&lt;/span&gt;&amp;amp; &lt;span style=&quot;color: #000000;&quot;&gt;b&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;using&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;std&lt;/span&gt;::&lt;span style=&quot;color: #110099;&quot;&gt;swap&lt;/span&gt;;  &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;make std::swap available&lt;/span&gt;
    swap&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;a, b&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;        &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;calls N::swap if it exists, otherwise std::swap&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;

&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;main&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #110099;&quot;&gt;N&lt;/span&gt;::&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;X&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;a&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;1&lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;, &lt;span style=&quot;color: #000000;&quot;&gt;b&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;100&lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;;
    f1&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;a, b&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
    cout &amp;lt;&amp;lt; a.m_x &amp;lt;&amp;lt; endl &amp;lt;&amp;lt; b.m_x;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;pre class=&quot;example&quot;&gt;
101
2
&lt;/pre&gt;



&lt;p&gt;
以上代码，我们使得 std 中的 swap 函数可以被查询调用。如果没有客制化的
swap，我们就调用了 std 中的 swap 函数。
&lt;/p&gt;


&lt;p&gt;
强化
&lt;/p&gt;

&lt;p&gt;
很难说，除了一些已知的客制化点，比如 swap 的情况。
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines C.164 避免隐式的转换操作</title>
   <link href="http://kimi.im/2023-01-19-cppcoreguidelines-c164"/>
   <updated>2023-01-19T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-c164</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
C.164: Avoid implicit conversion operators
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;理由&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
隐式类型转换有时候是必不可少的（如 &lt;code&gt;double&lt;/code&gt; 转成 &lt;code&gt;int&lt;/code&gt; ），但是也经常会导致意想不到的结果（如 &lt;code&gt;String&lt;/code&gt; 转成 &lt;code&gt;C&lt;/code&gt; 风格的 &lt;code&gt;string&lt;/code&gt; ）。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;注意&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
尽量使用显示的类型转换，除非是特殊情况才使用隐式转换。更不要因为方便而选择隐式转换。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;例子&lt;/b&gt;
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-bad src-C++&quot; id=&quot;orgbba506c&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;struct&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;S1&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;string&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;s&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;S1&quot;&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ...&lt;/span&gt;
    operator &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;char&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; s.&lt;span style=&quot;color: #3a5fcd; font-weight: bold; font-style: italic;&quot;&gt;data&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;()&lt;/span&gt;; &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;  &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// BAD, likely to cause surprises&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;struct&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;S2&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;string&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;s&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;S2&quot;&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ...&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;explicit&lt;/span&gt; operator &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;char&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; s.&lt;span style=&quot;color: #3a5fcd; font-weight: bold; font-style: italic;&quot;&gt;data&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;()&lt;/span&gt;; &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;
&lt;/pre&gt;
&lt;/div&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-bad src-C++&quot;&gt;$$s1&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;-&lt;/span&gt;and&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;-&lt;/span&gt;s2$$
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;S1&lt;/span&gt; s1, &lt;span style=&quot;color: #110099;&quot;&gt;S2&lt;/span&gt; s2&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;char&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;*&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;x1&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;s1&lt;/span&gt;;     &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// OK, but can cause surprises in many contexts&lt;/span&gt;
    cout &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; x1 &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; endl;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;//char* x2 = s2;     // error (and that&apos;s usually a good thing)&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;char&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;*&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;x3&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;static_cast&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;char&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;s2&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// we can be explicit (on your head be it)&lt;/span&gt;
    cout &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; x3 &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; endl;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;main&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;S1&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;s1&lt;/span&gt;;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;S2&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;s2&lt;/span&gt;;
    &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;s1, s2&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;pre class=&quot;example&quot;&gt;
S1
S2
&lt;/pre&gt;


&lt;p&gt;
因为转换操作符添加了 &lt;code&gt;explicit&lt;/code&gt; ，所以需要进行显式的转换。
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-bad src-C++&quot;&gt;$$s1&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;-&lt;/span&gt;and&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;-&lt;/span&gt;s2$$
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;S1&lt;/span&gt; s1, &lt;span style=&quot;color: #110099;&quot;&gt;S2&lt;/span&gt; s2&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;char&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;*&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;x2&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;s2&lt;/span&gt;;     &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// error (and that&apos;s usually a good thing)&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;main&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;S1&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;s1&lt;/span&gt;;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;S2&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;s2&lt;/span&gt;;
    &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;s1, s2&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;pre class=&quot;example&quot; id=&quot;orgb961480&quot;&gt;
C-src-gvvjq1.cpp: In function &apos;void f(S1, S2)&apos;:
C-src-gvvjq1.cpp:23:16: error: cannot convert &apos;S2&apos; to &apos;char*&apos; in initialization
   23 |     char* x2 = s2;
      |                ^~
      |                |
      |                S2
&lt;/pre&gt;


&lt;p&gt;
不然编译器就会报错，说无法进行转换。
&lt;/p&gt;


&lt;p&gt;
隐式类型转换会引起意想不到的结果和隐藏的数据损坏。而且还很难发现。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;例子&lt;/b&gt;
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-C++&quot;&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;S1&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;ff&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{}&lt;/span&gt;;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;char&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;*&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;g&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;ff&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
&lt;code&gt;ff()&lt;/code&gt; 返回的字符串在使用内部指针之前可能就已经被销毁。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;强化&lt;/b&gt;
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;标注使用隐式类型转换的操作。&lt;/li&gt;
&lt;/ul&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines C.163 只重载大体相似的操作符</title>
   <link href="http://kimi.im/2023-01-17-cppcoreguidelines-c163"/>
   <updated>2023-01-17T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-c163</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
C.163: Overload only for operations that are roughly equivalent
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;理由&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
逻辑上相似的操作函数，使用不同的参数类型，却用了不同的名字，容易让人费解。在使用泛型编程的时候，容易出错。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;例子&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
考虑：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;open_gate&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Gate&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;g&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// remove obstacle from garage exit lane&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;fopen&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;char&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;*&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;name&lt;/span&gt;, &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;char&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;*&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;mode&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// open file&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
这两个函数完全不同且不相关，所以名字也不一样。
&lt;/p&gt;

&lt;p&gt;
相反的：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-bad src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;open&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Gate&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;g&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// remove obstacle from garage exit lane&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;open&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;char&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;*&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;name&lt;/span&gt;, &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;char&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;*&lt;/span&gt; mode &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;r&quot;&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// open file&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
这两个函数也是完全不同不想关的，但是名字却取的一样，这样很容易令人误解。好在类型系统会捕捉相关的错误。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;注意&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
一定要小心一些常用的名字，比如 &lt;code&gt;open&lt;/code&gt;, &lt;code&gt;move&lt;/code&gt;, &lt;code&gt;+&lt;/code&gt;, &lt;code&gt;==&lt;/code&gt;.
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines C.162 重载大致相似的函数</title>
   <link href="http://kimi.im/2023-01-16-cppcoreguidelines-c162"/>
   <updated>2023-01-16T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-c162</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
C.162: Overload operations that are roughly equivalent
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;理由&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
逻辑上相似的操作函数，使用不同的参数类型，却用了不同的名字，容易让人费解。我们就要在函数名上硬编码参数类型，从而就无法实现泛型编程了。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;例子&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
考虑：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;print&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;a&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;print&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;a&lt;/span&gt;, &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;base&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;print&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;string&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
这几个函数的作用都是打印出传给它的参数。
&lt;/p&gt;

&lt;p&gt;
相反的：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;print_int&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;a&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;print_based&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;a&lt;/span&gt;, &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;base&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;print_string&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;string&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
这几个函数也是打印出参数，但是在函数名上硬编码了参数类型，就无法支持泛型代码。
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines C.161 对称操作符用非成员函数实现</title>
   <link href="http://kimi.im/2023-01-15-cppcoreguidelines-c161"/>
   <updated>2023-01-15T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-c161</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
C.161: Use non-member functions for symmetric operators
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;理由&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
如果你使用成员函数，就得定义两个。不然的话，就用非成员函数，对于 &lt;code&gt;==&lt;/code&gt;, &lt;code&gt;a
= b&lt;/code&gt;, &lt;code&gt;b = a&lt;/code&gt; 这类操作，就只要定义一次就好了。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;例子&lt;/b&gt;
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;bool&lt;/span&gt; operator&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;==&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Point&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;a&lt;/span&gt;, &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Point&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;b&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; a.&lt;span style=&quot;color: #110099; font-style: italic;&quot;&gt;x&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;==&lt;/span&gt; b.&lt;span style=&quot;color: #110099; font-style: italic;&quot;&gt;x&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; a.&lt;span style=&quot;color: #110099; font-style: italic;&quot;&gt;y&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;==&lt;/span&gt; b.&lt;span style=&quot;color: #110099; font-style: italic;&quot;&gt;y&lt;/span&gt;; &lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;
&lt;b&gt;强化&lt;/b&gt;
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;标记操作符函数是成员函数的情况。&lt;/li&gt;
&lt;/ul&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines C.160 操作符函数要模仿习惯用法</title>
   <link href="http://kimi.im/2023-01-14-cppcoreguidelines-c160"/>
   <updated>2023-01-14T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-c160</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
C.160: Define operators primarily to mimic conventional usage
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;理由&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
这样做就不会让人觉得奇怪。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;例子&lt;/b&gt;
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;X&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;public&lt;/span&gt;:
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ...&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;X&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt; operator&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;X&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// member function defining assignment&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;friend&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;bool&lt;/span&gt; operator&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;==&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;X&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt;, &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;X&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// == needs access to representation&lt;/span&gt;
                                                &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// after a = b we have a == b&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ...&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
此处，我们维护了习惯语义：拷贝之后，进行比较的话，结果应该是相等的。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;例子&lt;/b&gt;
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-bad src-C++&quot;&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;X&lt;/span&gt; operator&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;X&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;a&lt;/span&gt;, &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;X&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;b&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; a.&lt;span style=&quot;color: #110099; font-style: italic;&quot;&gt;v&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;-&lt;/span&gt; b.&lt;span style=&quot;color: #110099; font-style: italic;&quot;&gt;v&lt;/span&gt;; &lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// bad: makes + subtract&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;
&lt;b&gt;注意&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
非成员的操作符要么是友元的，要么与操作对象一起定义在相同的名字空间。二元操作符应当将操作对象同等对待。
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>单词本：ostracism</title>
   <link href="http://kimi.im/2023-01-14-egnlish-ostracism"/>
   <updated>2023-01-14T00:00:00+00:00</updated>
   <id>http://kimi.im/egnlish-ostracism</id>
   <content type="html">&lt;p&gt;
上周，脑神经科学家 Friederike Fabritius 的书 《The Brain-Friendly
Workplace》，讲到要提升 oxytocin 创建和谐工作环境的时候讲到：
&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;
Maslow&amp;rsquo;s famous hierarchy of needs gets it wrong: The human need for
belonging should sit at the base of the pyramid, even before food,
shelter and physical safety. People think about their relationships
constantly, and they fear &lt;b&gt;ostracism&lt;/b&gt; more than almost anything else.
&lt;/p&gt;

&lt;p&gt;
马斯洛的需求层级理论是有问题的：人类的归属需求是需求金字塔的最基础。人们会一直考虑自己与他人的关系，最害怕的就是被人驱逐。
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;
这里提到一个词 ostracism，它的意思是“放逐”，“流放”的意思。
&lt;/p&gt;

&lt;p&gt;
故事要从古希腊讲起，公元前594年有个叫庇西特拉图（Peisistratus）的人，通过政治联盟，成为僭主，大权在握。之后是通过，雅典执政官克里斯提尼（Cleisthenes）的领导，推翻了庇西特拉图的统治。他为了避免同样的事情再次发生，于是发明了所谓的陶片投票驱逐方法（Ostracism）。大概就是每年召集6000个人，分别在陶片上协商自己认为有太大影响力、可能破坏联邦稳定的人士，通过投票计票，选出那个人，将他驱逐出境，10年后才能回来。但是这个驱逐跟流放（excile）还是有一些区别。被放逐的人依然拥有自己在老家的财产，社会地位也不影响，只是让他去外面消停一阵。
&lt;/p&gt;

&lt;p&gt;
当时投票用的陶片叫做 ostrakon，意思是陶片或贝壳，所以有些人称这个
ostracism 为陶片驱逐法，或贝壳驱逐法。但是根据考古发现，投票用的还是以陶片为主。
&lt;/p&gt;

&lt;p&gt;
驱逐的动词形式是 ostracize，比如：
&lt;/p&gt;

&lt;p&gt;
she was declared a witch and ostracized by the villagers. 村民认为她是巫婆，把她驱逐出去。
&lt;/p&gt;

&lt;p&gt;
另外，oyster 牡蛎这个词应该也是 ostrakon 转变过来的。其他牡蛎相关的词还有：
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;ostraceous 牡蛎味的，比如：An ostraceous aroma drifted into the room
from the kitchen. 牡蛎的香味从厨房飘进房间。&lt;/li&gt;
&lt;li&gt;ostraconophobia, 之前介绍过 &lt;a href=&quot;./2021-04-27-english-Kakorrhaphiophobia.html&quot;&gt;Kakorrhaphiophobia 失败恐惧症&lt;/a&gt;，
&lt;a href=&quot;./2016-09-05-english-onion.html&quot;&gt;Alliumphobia 大蒜恐惧症&lt;/a&gt; phobia 往往是一种心理恐惧症。所以，
ostraconophobia 是牡蛎贝壳恐惧症。Ostraconophobia is the irrational
fear of shellfish. Someone experiencing this disorder may experience
a great deal of anxiety when in the presence of a shellfish.&lt;/li&gt;
&lt;li&gt;ostreiculture, 牡蛎养殖。ostreiculturist, 牡蛎养殖户。&lt;/li&gt;
&lt;li&gt;ostreophagist, 以牡蛎为食的人。因为 phagia，phagist 在希腊语是吃的意思吧。比如 zoophagy 食肉者、xylophagy 木食者。&lt;/li&gt;
&lt;li&gt;ostreotoxism, 牡蛎中毒。toxin 是毒素的意思。ostreotoxism 指的是吃了受污染的牡蛎而中毒。&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
最后，我们回到Friederike Fabritius 的书 《The Brain-Friendly
Workplace》，她还提到，我们的行为习惯会收到四种激素的影响，比如：
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;多巴胺（dopamine）会使人寻求刺激、有能量和好奇心、讨厌琐碎细节、容易厌烦。&lt;/li&gt;
&lt;li&gt;血清素（Serotonin）主导的时候，会让人喜欢细节、喜欢结构、寻求安全、舒适、寻求习以为常的方式、更可靠、更忠诚。&lt;/li&gt;
&lt;li&gt;睾酮素（Testosterone）主导人们的神经的时候，人们会做一些有风险的挑战、系统化思考、直言不讳、需求强烈，希望按照规则一步一步解决问题。&lt;/li&gt;
&lt;li&gt;雌性激素或催产素（Estrogen/oxytocin）主导的时候，会更注重感觉，关系，信任，包容，会多角度思考、多方位考量问题。&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
不同人在不同的地点不同的时间，会有不同的激素主导自己，所以，作者提出，在工作环境中要努力营造一种具有包容性的环境，兼顾不同人的激素情况，就是一种对大脑友好的工作环境（brain-friendly workplace）。
&lt;/p&gt;

&lt;p&gt;
最后，希望新的一年，大家都能找到一个 brain-friendly workplace，发挥自己的特长，获得成功的喜悦。
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines C.153 首选虚函数，其次类型转换</title>
   <link href="http://kimi.im/2023-01-10-cppcoreguidelines-c153"/>
   <updated>2023-01-10T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-c153</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
C.153: Prefer virtual function to casting
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;理由&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
虚函数更安全，而类型转换则容易出错。虚函数调用能达到最深层次的派生类的函数，而类型转换只能到达转换到的类型，而且会给出错误结果，（尤其是当继承层级在代码维护的时候修改过了时候）。
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines C.152 不要把派生类的数组指针赋值给基类指针</title>
   <link href="http://kimi.im/2023-01-09-cppcoreguidelines-c152"/>
   <updated>2023-01-09T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-c152</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
C.152: Never assign a pointer to an array of derived class objects to
a pointer to its base
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;理由&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
对基类指针的下标访问，会访问到无效对象，甚至可能是内存数据破坏。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;例子&lt;/b&gt;
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-bad src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;struct&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;B&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;x&lt;/span&gt;; &lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;struct&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;D&lt;/span&gt; : &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;B&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;y&lt;/span&gt;; &lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;use&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;B&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;*&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;b&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt; cout &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; b&lt;span style=&quot;color: #7388d6;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;]&lt;/span&gt;.&lt;span style=&quot;color: #110099; font-style: italic;&quot;&gt;x&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot; &quot;&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; b&lt;span style=&quot;color: #7388d6;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;]&lt;/span&gt;.&lt;span style=&quot;color: #110099; font-style: italic;&quot;&gt;x&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot; &quot;&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; b&lt;span style=&quot;color: #7388d6;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;2&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;]&lt;/span&gt;.&lt;span style=&quot;color: #110099; font-style: italic;&quot;&gt;x&lt;/span&gt;;&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;main&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;D&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;a&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;[]&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;1&lt;/span&gt;, &lt;span style=&quot;color: #110099;&quot;&gt;2&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;}&lt;/span&gt;, &lt;span style=&quot;color: #909183;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;3&lt;/span&gt;, &lt;span style=&quot;color: #110099;&quot;&gt;4&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;}&lt;/span&gt;, &lt;span style=&quot;color: #909183;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;5&lt;/span&gt;, &lt;span style=&quot;color: #110099;&quot;&gt;6&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;;
    cout &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; a&lt;span style=&quot;color: #7388d6;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;]&lt;/span&gt;.&lt;span style=&quot;color: #110099; font-style: italic;&quot;&gt;x&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot; &quot;&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; a&lt;span style=&quot;color: #7388d6;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;]&lt;/span&gt;.&lt;span style=&quot;color: #110099; font-style: italic;&quot;&gt;y&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; endl;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;B&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;*&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;p&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;a&lt;/span&gt;;     &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// bad: a decays to &amp;amp;a[0] which is converted to a B*&lt;/span&gt;
    p&lt;span style=&quot;color: #7388d6;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;]&lt;/span&gt;.&lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;x&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;7&lt;/span&gt;;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// overwrite a[0].y&lt;/span&gt;
    cout &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; a&lt;span style=&quot;color: #7388d6;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;]&lt;/span&gt;.&lt;span style=&quot;color: #110099; font-style: italic;&quot;&gt;x&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot; &quot;&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; a&lt;span style=&quot;color: #7388d6;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;]&lt;/span&gt;.&lt;span style=&quot;color: #110099; font-style: italic;&quot;&gt;y&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; endl;
    &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;use&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;a&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;       &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// bad: a decays to &amp;amp;a[0] which is converted to a B*&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;pre class=&quot;example&quot;&gt;
1 2
1 7
1 7 3
&lt;/pre&gt;


&lt;p&gt;
上面运行结果，第二行&lt;code&gt;a[0].y&lt;/code&gt;被前一行语句给覆盖成了 &lt;code&gt;7&lt;/code&gt; 。 &lt;code&gt;use&lt;/code&gt; 函数打印出&lt;code&gt;a[0]&lt;/code&gt;的 &lt;code&gt;x&lt;/code&gt; 与 &lt;code&gt;y&lt;/code&gt; ，以及&lt;code&gt;a[1]&lt;/code&gt;的 &lt;code&gt;x&lt;/code&gt; 。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;强化&lt;/b&gt;
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;标记所有派生类数组指针赋值给基类指针的情况&lt;/li&gt;
&lt;li&gt;以 &lt;code&gt;span&lt;/code&gt; 而非指针的方式传递数组，装入 &lt;code&gt;span&lt;/code&gt; 的时候不要进行派生类到基类转换&lt;/li&gt;
&lt;/ul&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines C.151 用 make_shared() 创建 shared_ptr</title>
   <link href="http://kimi.im/2023-01-08-cppcoreguidelines-c151"/>
   <updated>2023-01-08T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-c151</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
C.151: Use &lt;code&gt;make_shared()&lt;/code&gt; to construct objects owned by &lt;code&gt;shared_ptr&lt;/code&gt;&amp;rsquo;s
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;理由&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
用&lt;code&gt;make_shared()&lt;/code&gt;代码看起来更简洁。同时也能避免中间步骤分配引用计数。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;例子&lt;/b&gt;
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-C++&quot;&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;shared_ptr&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;X&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;p1&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;X&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;2&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// bad&lt;/span&gt;
&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;auto&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;p&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;make_shared&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;X&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;2&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// good&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
&lt;code&gt;make_shared()&lt;/code&gt; 那句只提到了一次 &lt;code&gt;X&lt;/code&gt; ，所以更精简，速度更快。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;强化&lt;/b&gt;
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;（简单）对使用 new 创建&lt;code&gt;shared_ptr&lt;/code&gt;的情况提出报警。&lt;/li&gt;
&lt;/ul&gt;
</content>
 </entry>
 
 <entry>
   <title>单词本：arbitrage</title>
   <link href="http://kimi.im/2023-01-08-english-arbitrage"/>
   <updated>2023-01-08T00:00:00+00:00</updated>
   <id>http://kimi.im/english-arbitrage</id>
   <content type="html">&lt;p&gt;
英国社会活动家 Erica Stanford 写的一本书叫做：&amp;ldquo;Crypto Wars Faked
Deaths, Missing Billions and Industry Disruption&amp;rdquo;，里面写道：
&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;
PlusToken’s organizers attracted people fascinated by the new
buzzwords associated with cryptocurrencies, like &amp;ldquo;decentralized&amp;rdquo; and
&amp;ldquo;blockchain,&amp;rdquo; to lavish conferences. The organizers stated that they
had developed an AI bot designed for &amp;ldquo;&lt;b&gt;arbitrage&lt;/b&gt; trading&amp;rdquo; that would
make money from price fluctuations in Bitcoin and various other
cryptocurrencies.
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;
2018 年的加密货币很火的时候，有个叫 PlusToken 的组织，号称可以通过人工智能进行套利交易，以6%到18%的月收益率，吸引了无数加密货币投资者。结果在 2019 年，背后的组织者卷款跑路，留下一句：sorry we have run.
&lt;/p&gt;

&lt;p&gt;
好在，最后犯罪集团被抓捕归案了：
&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;
该案系公安机关侦破的首起以比特币等数字货币为交易媒介的网络传销案，涉及参与人员200余万人，层级关系多达3000余层，涉案数字货币总值逾400亿元。
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;
回到本文重点！我们今天学习 arbitrage。这个词呢，跟之前学过的 &lt;a href=&quot;./2022-11-03-english-triage&quot;&gt;triage&lt;/a&gt;，
&lt;a href=&quot;./2023-01-07-english-sabotage&quot;&gt;sabotage&lt;/a&gt; 一样，都是从法语里来的。意思是“套利”。
&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;
套利，也叫价差交易，套利指的是在买入或卖出某种电子交易合约的同时，卖出或买入相关的另一种合约。套利交易是指利用相关市场或相关电子合同之间的价差变化，在相关市场或相关电子合同上进行交易方向相反的交易，以期望价差发生变化而获利的交易行为。
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;
这个词是从法语里引入的，本意是仲裁、裁判、公断的意思。其动词为
arbitrer，比如arbitrer un litige 仲裁诉讼，arbitrer un match 给比赛做裁判。大概因为仲裁、裁判都涉及到快速的做出决策，所以 arbitrage 到了英语里就成了快速地作出决定，从而利用价差交易套利。
&lt;/p&gt;

&lt;p&gt;
做套利交易的人就是 arbitrageur，即套利交易获利者，比如：
&lt;/p&gt;

&lt;p&gt;
The arbitrageur has no interest in the long-term future of the
company. 套利交易获利者对公司未来的长期利益不感兴趣。
&lt;/p&gt;

&lt;p&gt;
法语里的动词 arbitrer 对应的英文其实是 arbitrate，即仲裁，例如：
&lt;/p&gt;

&lt;p&gt;
I&amp;rsquo;ve been asked to arbitrate between the opposing sides. 他们让我给对抗双方做仲裁。
&lt;/p&gt;

&lt;p&gt;
作出仲裁的人就是 arbitrator，即仲裁者：
&lt;/p&gt;

&lt;p&gt;
The independent arbitrator has the approval of both sides in the
dispute. 仲裁者获得了争端双方的一致认可。
&lt;/p&gt;

&lt;p&gt;
仲裁这个行为，由 arbitrate 派生来，即 arbitration 仲裁。
&lt;/p&gt;

&lt;p&gt;
但是，如果仲裁者胡乱仲裁，就成了 arbitrary 任意的、武断的、专横的、专制的。如：
&lt;/p&gt;

&lt;p&gt;
Did you have a reason for choosing your destination or was it
arbitrary? 你的选择有理由吗？还是随意作出的决定？
&lt;/p&gt;

&lt;p&gt;
arbitrary 的名词形式是 arbitrariness，比如：
&lt;/p&gt;

&lt;p&gt;
There is nothing we can do about the arbitrariness of illness. 面对疾病的肆虐，我们无能为力！
&lt;/p&gt;

&lt;p&gt;
好了，最后，希望新冠的强弩之末，大家都要好好的。
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines C.150 使用 make_unique() 构建 unique_ptr</title>
   <link href="http://kimi.im/2023-01-07-cppcoreguidelines-c150"/>
   <updated>2023-01-07T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-c150</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
C.150: Use &lt;code&gt;make_unique()&lt;/code&gt; to construct objects owned by &lt;code&gt;unique_ptr&lt;/code&gt;&amp;rsquo;s
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;理由&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
用&lt;code&gt;make_unique&lt;/code&gt;进行对象构造，语句简介，在使用复杂表达式的时候能确保异常安全。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;例子&lt;/b&gt;
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-C++&quot;&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;unique_ptr&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Foo&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;p&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Foo&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;7&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// OK: but repetitive&lt;/span&gt;

&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;auto&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;q&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;make_unique&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Foo&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;7&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;      &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// Better: no repetition of Foo&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;
&lt;b&gt;强化&lt;/b&gt;
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;（简单）如果&lt;code&gt;unique_ptr&lt;/code&gt;是通过 &lt;code&gt;new&lt;/code&gt; ，而不是通过&lt;code&gt;make_unique&lt;/code&gt;构造，警告。&lt;/li&gt;
&lt;/ul&gt;
</content>
 </entry>
 
 <entry>
   <title>单词本：sabotage</title>
   <link href="http://kimi.im/2023-01-07-english-sabotage"/>
   <updated>2023-01-07T00:00:00+00:00</updated>
   <id>http://kimi.im/english-sabotage</id>
   <content type="html">&lt;p&gt;
最近看工业信息安全资料，读到这段：
&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;
Stuxnet attack managed to silently &lt;b&gt;sabotage&lt;/b&gt; centrifuges in a
uranium-enrichment plant by reading and writing code blocks on PLCs
from a compromised engineering workstation.
&lt;/p&gt;

&lt;p&gt;
2010 年震网攻击通过破防的工作站，修改 PLC 的代码块，偷偷的蓄意毁坏伊朗的一个铀浓缩厂的离心机。
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;
这里有一个单词 sabotage，跟之前介绍的 &lt;a href=&quot;./2022-11-03-english-triage&quot;&gt;triage&lt;/a&gt; 的样子很像，也都是 -age
结尾的，也都是来自法语。
&lt;/p&gt;

&lt;p&gt;
这个词的意思是 1）damage or destroy equipment, weapons, or buildings
in order to prevent the success of an enemy or competitor，通过蓄意破坏设施、武器、建筑从而阻止敌人、竞争者。 2）to intentionally prevent
the success of a plan or action，阻挠某个行动或计划。
&lt;/p&gt;

&lt;p&gt;
我饶有兴致地查了下 sabot 的意思：
&lt;/p&gt;

&lt;p&gt;
sabot is a kind of simple shoe, shaped and hollowed out from a single
block of wood, traditionally worn by French and Breton peasants. There
are two kinds of sabots: one is shaped and hollowed from a single
piece of wood (called klompen by the Dutch), and the other is a heavy
leather shoe with a wooden sole.
&lt;/p&gt;

&lt;p&gt;
大致来说，sabot 是法国农民穿的木鞋。一种是以整块木头雕刻的，一种是木鞋底的皮鞋。顺便提一下，bot 在古法语里就是 boot（靴子）的意思。
&lt;/p&gt;

&lt;p&gt;
最早的时候，sabotage 其实是一种相对温和的怠工行为：
&lt;/p&gt;

&lt;p&gt;
SABOTAGE [chapter heading] The title we have prefixed seems to mean &amp;ldquo;scamping work.&amp;rdquo; It is a device which, we are told, has been adopted by certain French workpeople as a substitute for striking. The workman, in other words, purposes to remain on and to do his work badly, so as to annoy his employer&amp;rsquo;s customers and cause loss to his employer. [The Liberty Review, January 1907]
&lt;/p&gt;

&lt;p&gt;
因为老板给的待遇不好，所以法国的工人们消极怠工，穿着 sabot 制造出噪音，干扰客户，给老板造成损失。
&lt;/p&gt;

&lt;p&gt;
后来不知道怎么的，sabotage 就成了蓄意破坏 malicious damaging or
destruction。
&lt;/p&gt;

&lt;p&gt;
所以，saboteur 就是搞破坏的人，破坏分子。法语里还有 la saboteuse 女破坏分子，但是似乎没有引入英语。例如：
&lt;/p&gt;

&lt;p&gt;
These networks are exceedingly easy to detect and, with poor design
and architecture added into the mix, can be highly susceptible to
eavesdropping and masquerade attacks by the curious and &lt;b&gt;saboteurs&lt;/b&gt;
alike.
&lt;/p&gt;

&lt;p&gt;
此外，saboteur 还是一种人格类型：
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;Saboteurs tend to be loners, not because they don’t like other
people, but because they find it difficult to trust others.&lt;/li&gt;
&lt;li&gt;They are constantly afraid of being taken advantage of or betrayed.&lt;/li&gt;
&lt;li&gt;Saboteurs are often negative people who are always looking for the
worst in every situation.&lt;/li&gt;
&lt;li&gt;They are quick to point out all of the faults in others and love to
gossip about them behind their backs.&lt;/li&gt;
&lt;/ul&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines C.149 new 对象的时候，用 unique_ptr 或 shared_ptr，避免忘记删除对象</title>
   <link href="http://kimi.im/2023-01-06-cppcoreguidelines-c149"/>
   <updated>2023-01-06T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-c149</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
C.149: Use &lt;code&gt;unique_ptr&lt;/code&gt; or &lt;code&gt;shared_ptr&lt;/code&gt; to avoid forgetting to delete
objects created using new
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;理由&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
避免资源泄漏。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;例子&lt;/b&gt;
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-bad src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;use&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;i&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;auto&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;p&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;7&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;;           &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// bad: initialize local pointers with new&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;auto&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;q&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;make_unique&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;9&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ok: guarantee the release of the memory-allocated for 9&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;0&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt; i&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt;;              &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// maybe return and leak&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;delete&lt;/span&gt; p;                       &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// too late&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Flower&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
  &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;public&lt;/span&gt;:
    &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;Flower&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;id&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;:&lt;span style=&quot;color: #110099; font-style: italic;&quot;&gt;m_id&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;id&lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt; cout &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;new flower &quot;&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; m_id &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;\n&quot;&lt;/span&gt;; &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;~&lt;/span&gt;Flower&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt; cout &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;delete flower &quot;&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; m_id &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;\n&quot;&lt;/span&gt;; &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;
  &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;private&lt;/span&gt;:
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;m_id&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;use&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;i&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;auto&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;p&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Flower&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;7&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// bad: initialize local pointers with new&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;auto&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;q&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;make_unique&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Flower&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;9&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ok: guarantee the release of the memory-allocated for 9&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;0&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt; i&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt;;              &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// maybe return and leak&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;delete&lt;/span&gt; p;                       &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// too late&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;main&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;use&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
    &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;use&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;42&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;pre class=&quot;example&quot;&gt;
new flower 7
new flower 9
delete flower 7
delete flower 9
new flower 7
new flower 9
delete flower 9
&lt;/pre&gt;


&lt;p&gt;
以上代码，如果提前返回了，&lt;code&gt;flower 7&lt;/code&gt;就没有被删除，内存泄漏！
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;强化&lt;/b&gt;
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;标记使用原始指针接受 &lt;code&gt;new&lt;/code&gt; 返回的结果&lt;/li&gt;
&lt;li&gt;标记对局部变量进行 &lt;code&gt;delete&lt;/code&gt; 的操作&lt;/li&gt;
&lt;/ul&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines C.148 用 dynamic_cast 转换指针时，无法找到要转换的类型时，不会抛出异常，可以进行分支判断</title>
   <link href="http://kimi.im/2023-01-05-cppcoreguidelines-c148"/>
   <updated>2023-01-05T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-c148</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
C.148: Use &lt;code&gt;dynamic_cast&lt;/code&gt; to a pointer type when failure to find the
required class is considered a valid alternative
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;理由&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
&lt;code&gt;dynamic_cast&lt;/code&gt; 允许对转换结果的指针进行测试，是否指向有效的多态对象。因为无法找到合适的类型只会返回一个空值，所以可以在运行时进行测试判断。这样就能在写代码的时候进行判断，根据结果选择不同的执行路径。
&lt;/p&gt;

&lt;p&gt;
这里与&lt;a href=&quot;./2023-01-04-cppcoreguidelines-c147&quot;&gt;C.147&lt;/a&gt;不同。C.147 会抛出异常，无法进行条件判断。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;例子&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
以下例子 &lt;code&gt;add&lt;/code&gt; 函数会把形状放到形状保管器里。不同形状还会添加到形状视图中。先对形状进行动态类型转换，根据转换结果装入不同的视图。
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;add&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Shape&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;*&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;item&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// Ownership is always taken&lt;/span&gt;
    owned_shapes.&lt;span style=&quot;color: #3a5fcd; font-weight: bold; font-style: italic;&quot;&gt;emplace_back&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;item&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;

    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// Check the Geometric_attributes and add the shape to none/one/some/all of the views&lt;/span&gt;

    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;auto&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;even&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;dynamic_cast&lt;/span&gt;&lt;span style=&quot;color: #909183; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Even_sided&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color: #909183; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;item&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;
    &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;
        view_of_evens.&lt;span style=&quot;color: #3a5fcd; font-weight: bold; font-style: italic;&quot;&gt;emplace_back&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;even&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt;;
    &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;

    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;auto&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;trisym&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;dynamic_cast&lt;/span&gt;&lt;span style=&quot;color: #909183; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Trilaterally_symmetrical&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color: #909183; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;item&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;
    &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;
        view_of_trisyms.&lt;span style=&quot;color: #3a5fcd; font-weight: bold; font-style: italic;&quot;&gt;emplace_back&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;trisym&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt;;
    &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;
&lt;b&gt;注意&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
进行动态类型转换的时候，如果无法找到对应的类型，就会返回一个空值，如果对空值进行取值访问就会导致未定义行为。所以必须考虑空值的情况，进行判断测试。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;强化&lt;/b&gt;
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;（复杂）只有对动态类型转换的结果进行空值判断后才能取值，不然抛出警告。&lt;/li&gt;
&lt;/ul&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines C.147 用 dynamic_cast 转换引用的时候，如果无法转换，就会认为出错了，抛出异常</title>
   <link href="http://kimi.im/2023-01-04-cppcoreguidelines-c147"/>
   <updated>2023-01-04T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-c147</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;


&lt;p&gt;
C.147: Use &lt;code&gt;dynamic_cast&lt;/code&gt; to a reference type when failure to find the
required class is considered an error
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;理由&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
把一个对象转换成引用，表明你希望最终得到一个有效的对象，所以类型转换必须成功。如果失败，&lt;code&gt;dynamic_cast&lt;/code&gt;就应该抛出一个异常。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;例子&lt;/b&gt;
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-C++&quot; id=&quot;org6480c93&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Base&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
  &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;public&lt;/span&gt;:
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;virtual&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;string&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold; font-style: italic;&quot;&gt;to_string&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;
        &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;Derived&quot;&lt;/span&gt;;
    &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Derived&lt;/span&gt; : &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Base&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
  &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;public&lt;/span&gt;:
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;string&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold; font-style: italic;&quot;&gt;to_string&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;
        &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;Derived&quot;&lt;/span&gt;;
    &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;

&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;std&lt;/span&gt;::&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;string&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Base&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;b&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;dynamic_cast&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Derived&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;b&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;.&lt;span style=&quot;color: #3a5fcd; font-weight: bold; font-style: italic;&quot;&gt;to_string&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
以下代码，在 &lt;code&gt;f&lt;/code&gt; 函数中， &lt;code&gt;d&lt;/code&gt; 被成功转换成了 &lt;code&gt;Derived&lt;/code&gt; 本身，所以正确执行。
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-C++&quot;&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;$$classes$$&lt;/span&gt;
int &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;main&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Derived&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;d&lt;/span&gt;;
    cout &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;d&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;pre class=&quot;example&quot;&gt;
Derived
&lt;/pre&gt;


&lt;p&gt;
以下代码，因为无法将 &lt;code&gt;Base&lt;/code&gt; 转换成 &lt;code&gt;Derived&lt;/code&gt; ，所以抛出异常 &lt;code&gt;std::bad_cast&lt;/code&gt;
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-C++&quot;&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;$$classes$$&lt;/span&gt;
int &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;main&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Base&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;b&lt;/span&gt;;
    cout &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;b&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;pre class=&quot;example&quot; id=&quot;org4f17f7b&quot;&gt;
terminate called after throwing an instance of &apos;std::bad_cast&apos;
&lt;/pre&gt;
</content>
 </entry>
 
 <entry>
   <title>Curiously Recurring Template Pattern</title>
   <link href="http://kimi.im/2023-01-03-cpp-crtp"/>
   <updated>2023-01-03T00:00:00+00:00</updated>
   <id>http://kimi.im/cpp-crtp</id>
   <content type="html">&lt;p&gt;
之前，读到 CPP Core Guideline C.146，提到，如果觉得使用动态类型转换
&lt;code&gt;dynamic_cast&lt;/code&gt; 的开销太大，可以使用 CRTP 通过静态方法确保成功地向下进行类型转换。
&lt;/p&gt;

&lt;p&gt;
所谓的 CRTP 就是 Curiously Recurring Template Pattern 的缩写，即“奇怪的递归模板模式”。这个模式是 &lt;a href=&quot;https://dl.acm.org/doi/10.5555/229227.229229&quot;&gt;James O. Coplien 在 1995 年提出来的&lt;/a&gt;。
&lt;/p&gt;

&lt;p&gt;
简单来说，CRTP 由两个要素组成：
&lt;/p&gt;
&lt;ol class=&quot;org-ol&quot;&gt;
&lt;li&gt;从一个模板类继承&lt;/li&gt;
&lt;li&gt;使用派生的类本身它基类的模板参数&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;
像这样：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;template&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;typename&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Flower&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Rosemary&lt;/span&gt; : &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Flower&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Rosemary&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
这样一来，在基类 Flower 中，就可以把对象类型静态转换成 Rosemary 或
Lilac 来使用了。使用 CRTP 可以通过基类静态地提供接口：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;template&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;typename&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Flower&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
  &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;public&lt;/span&gt;:
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;blossom&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;
        &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt;&amp;amp; &lt;span style=&quot;color: #000000;&quot;&gt;derived&lt;/span&gt; = &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;static_cast&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt;&amp;amp;&lt;span style=&quot;color: #909183;&quot;&gt;&amp;gt;(&lt;/span&gt;*&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;this&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt;;
        derived.blossom&lt;span style=&quot;color: #909183;&quot;&gt;()&lt;/span&gt;;
    &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Rosemary&lt;/span&gt; : &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Flower&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Rosemary&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
  &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;public&lt;/span&gt;:
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;blossom&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;
        cout &amp;lt;&amp;lt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;---purple flowers\n&quot;&lt;/span&gt;;
    &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Lilac&lt;/span&gt; : &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Flower&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Lilac&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
  &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;public&lt;/span&gt;:
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;blossom&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;
        cout &amp;lt;&amp;lt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;---white flowers\n&quot;&lt;/span&gt;;
    &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;template&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;typename&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;grow_flower&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Flower&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;&amp;gt;&lt;/span&gt;&amp;amp; &lt;span style=&quot;color: #000000;&quot;&gt;flower&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    flower.blossom&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;

&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;main&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Rosemary&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;r&lt;/span&gt;;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Lilac&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;l&lt;/span&gt;;
    grow_flower&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;r&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
    grow_flower&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;l&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;pre class=&quot;example&quot;&gt;
---purple flowers
---white flowers
&lt;/pre&gt;


&lt;p&gt;
注意，这里我们用了静态类型转换（ &lt;code&gt;static_cast&lt;/code&gt; ），没有用到动态类型转换，因为派生类的类型已经在继承基类的时候作为模板参数提供了，编译器已经静态地生成了相应的基类。所以静态类型转换就够了。
&lt;/p&gt;


&lt;p&gt;
但是，CRTP 使用不当也会产生错误。比如，一些代码中，我们不小心在写
Lilac 类的时候，给基类 Flower 的模板参数写成 Rosemary 了。这时候，就不能正确输出结果了。
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;template&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;typename&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Flower&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
  &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;public&lt;/span&gt;:
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;blossom&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;
        &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt;&amp;amp; &lt;span style=&quot;color: #000000;&quot;&gt;derived&lt;/span&gt; = &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;static_cast&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt;&amp;amp;&lt;span style=&quot;color: #909183;&quot;&gt;&amp;gt;(&lt;/span&gt;*&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;this&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt;;
        derived.blossom&lt;span style=&quot;color: #909183;&quot;&gt;()&lt;/span&gt;;
    &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Rosemary&lt;/span&gt; : &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Flower&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Rosemary&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
  &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;public&lt;/span&gt;:
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;blossom&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;
        cout &amp;lt;&amp;lt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;---&quot;&lt;/span&gt; &amp;lt;&amp;lt; m_color &amp;lt;&amp;lt;&lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot; flowers\n&quot;&lt;/span&gt;;
    &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;
  &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;private&lt;/span&gt;:
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;string&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;m_color&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;purple&quot;&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Lilac&lt;/span&gt; : &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Flower&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Rosemary&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;&amp;lt;-- BUG&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
  &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;public&lt;/span&gt;:
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;blossom&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;
        cout &amp;lt;&amp;lt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;---white flowers\n&quot;&lt;/span&gt;;
    &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;template&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;typename&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;grow_flower&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Flower&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;&amp;gt;&lt;/span&gt;&amp;amp; &lt;span style=&quot;color: #000000;&quot;&gt;flower&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    flower.blossom&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;

&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;main&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Rosemary&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;r&lt;/span&gt;;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Lilac&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;l&lt;/span&gt;;
    grow_flower&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;r&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
    grow_flower&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;l&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
如果我们把基类的构造函数设置成 private，并把子类声明成 friend，就可以让编译器捕捉到错误。
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;template&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;typename&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Flower&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
  &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;public&lt;/span&gt;:
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;blossom&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;
        &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt;&amp;amp; &lt;span style=&quot;color: #000000;&quot;&gt;derived&lt;/span&gt; = &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;static_cast&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt;&amp;amp;&lt;span style=&quot;color: #909183;&quot;&gt;&amp;gt;(&lt;/span&gt;*&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;this&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt;;
        derived.blossom&lt;span style=&quot;color: #909183;&quot;&gt;()&lt;/span&gt;;
    &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;
  &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;private&lt;/span&gt;:          &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;add this&lt;/span&gt;
    &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;Flower&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(){}&lt;/span&gt;      &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;add this&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;friend&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt;;       &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;add this&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Rosemary&lt;/span&gt; : &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Flower&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Rosemary&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
  &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;public&lt;/span&gt;:
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;blossom&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;
        cout &amp;lt;&amp;lt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;---&quot;&lt;/span&gt; &amp;lt;&amp;lt; m_color &amp;lt;&amp;lt;&lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot; flowers\n&quot;&lt;/span&gt;;
    &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;
  &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;private&lt;/span&gt;:
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;string&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;m_color&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;purple&quot;&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Lilac&lt;/span&gt; : &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Flower&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Rosemary&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;&amp;lt;-- BUG&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
  &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;public&lt;/span&gt;:
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;blossom&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;
        cout &amp;lt;&amp;lt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;---white flowers\n&quot;&lt;/span&gt;;
    &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;template&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;typename&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;grow_flower&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Flower&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;&amp;gt;&lt;/span&gt;&amp;amp; &lt;span style=&quot;color: #000000;&quot;&gt;flower&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    flower.blossom&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;

&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;main&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Rosemary&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;r&lt;/span&gt;;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Lilac&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;l&lt;/span&gt;;
    grow_flower&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;r&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
    grow_flower&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;l&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;pre class=&quot;example&quot; id=&quot;org7575b3e&quot;&gt;
C-src-kKkt1f.cpp:50:11: error: use of deleted function &apos;Lilac::Lilac()&apos;
   50 |     Lilac l;
      |           ^
C-src-kKkt1f.cpp:34:7: note: &apos;Lilac::Lilac()&apos; is implicitly deleted because the default definition would be ill-formed:
   34 | class Lilac : public Flower&amp;lt;Rosemary&amp;gt; // &amp;lt;-- BUG
      |       ^~~~~
C-src-kKkt1f.cpp:34:7: error: &apos;Flower&amp;lt;T&amp;gt;::Flower() [with T = Rosemary]&apos; is private within this context
C-src-kKkt1f.cpp:20:5: note: declared private here
   20 |     Flower(){}
      |     ^~~~~~
&lt;/pre&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines C.146 不可避免要在类的继承层级之间切换时，使用 dynamic_cast</title>
   <link href="http://kimi.im/2023-01-03-cppcoreguidelines-c146"/>
   <updated>2023-01-03T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-c146</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
C.146: Use &lt;code&gt;dynamic_cast&lt;/code&gt; where class hierarchy navigation is
unavoidable
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;理由&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
运行时会检查 &lt;code&gt;dynamic_cast&lt;/code&gt;
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;例子&lt;/b&gt;
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;struct&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;B&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// an interface&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;virtual&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold; font-style: italic;&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;cout &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;B::f()\n&quot;&lt;/span&gt;; &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;virtual&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold; font-style: italic;&quot;&gt;g&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;cout &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;B::g()\n&quot;&lt;/span&gt;; &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;virtual&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;~&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;B&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{}&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;struct&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;D&lt;/span&gt; : &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;B&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// a wider interface&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold; font-style: italic;&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;override&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;cout &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;D::f()\n&quot;&lt;/span&gt;; &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;virtual&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold; font-style: italic;&quot;&gt;h&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt; cout &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;D::h()\n&quot;&lt;/span&gt;; &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;user&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;B&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;*&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;pb&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;D&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;*&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;pd&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;dynamic_cast&lt;/span&gt;&lt;span style=&quot;color: #909183; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;D&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color: #909183; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;pb&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;
        &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ... use D&apos;s interface ...&lt;/span&gt;
        pd&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #3a5fcd; font-weight: bold; font-style: italic;&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;()&lt;/span&gt;;
        pd&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #3a5fcd; font-weight: bold; font-style: italic;&quot;&gt;h&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;()&lt;/span&gt;;
    &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;else&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;
        &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ... make do with B&apos;s interface ...&lt;/span&gt;
        pb&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #3a5fcd; font-weight: bold; font-style: italic;&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;()&lt;/span&gt;;
        pb&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #3a5fcd; font-weight: bold; font-style: italic;&quot;&gt;g&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;()&lt;/span&gt;;
    &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;main&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;B&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;b&lt;/span&gt;;
    &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;user&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt;b&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;D&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;d&lt;/span&gt;;
    &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;user&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt;d&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;pre class=&quot;example&quot;&gt;
B::f()
B::g()
D::f()
D::h()
&lt;/pre&gt;



&lt;p&gt;
使用其他的类型转换方法会违反类型安全要求，导致程序访问 &lt;code&gt;Z&lt;/code&gt; 的一个变量的时候，实际上访问了 &lt;code&gt;X&lt;/code&gt; 的变量。
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-bad src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;user2&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;B&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;*&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;pb&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// bad&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;D&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;*&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;pd&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;static_cast&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;D&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;pb&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// I know that pb really points to a D; trust me&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ... use D&apos;s interface ...&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;user3&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;B&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;*&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;pb&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// unsafe&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;some_condition&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;
        &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;D&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;*&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;pd&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;static_cast&lt;/span&gt;&lt;span style=&quot;color: #909183; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;D&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color: #909183; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;pb&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt;;
        &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// I know that pb really points to a D; trust me&lt;/span&gt;
        &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ... use D&apos;s interface ...&lt;/span&gt;
    &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;else&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;
        &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ... make do with B&apos;s interface ...&lt;/span&gt;
    &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;B&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;b&lt;/span&gt;;
    &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;user&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt;b&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// OK&lt;/span&gt;
    &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;user2&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt;b&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;  &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// bad error&lt;/span&gt;
    &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;user3&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt;b&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;  &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// OK *if* the programmer got the some_condition check right&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;
&lt;b&gt;注意&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
像其他的类型转换方法一样，人们也过度使用了&lt;code&gt;dynamic_cast&lt;/code&gt;。建议首先考虑是否可以用虚函数实现。建议尽可能的利用类型层级的静态多态方法，没有运行时额外开销，且相对方便。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;注意&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
有些地方使用 &lt;code&gt;typeid&lt;/code&gt; 可能比&lt;code&gt;dynamyc_cast&lt;/code&gt;更恰当。&lt;code&gt;dynamic_cast&lt;/code&gt;为 “是某一类”这种操作，用来发现一个对象的最佳接口；而 &lt;code&gt;typeid&lt;/code&gt;是 “给我这个类的确切类型” 这样的操作，用来发现一个对象的实际类型。后者是更简单的操作，速度应该更快。并且也更容易实现。而前者则较难正确实现。
&lt;/p&gt;


&lt;p&gt;
考虑以下情况：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;struct&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;B&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;char&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;*&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;name&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;B&quot;&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// if pb1-&amp;gt;id() == pb2-&amp;gt;id() *pb1 is the same type as *pb2&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;virtual&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;char&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;*&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold; font-style: italic;&quot;&gt;id&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; name; &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ...&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;struct&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;D&lt;/span&gt; : &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;B&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;char&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;*&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;name&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;D&quot;&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;char&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;*&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold; font-style: italic;&quot;&gt;id&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;override&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; name; &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ...&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;use&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;B&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;*&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;pb1&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;B&lt;/span&gt;;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;B&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;*&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;pb2&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;D&lt;/span&gt;;

    cout &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; pb1&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #3a5fcd; font-weight: bold; font-style: italic;&quot;&gt;id&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt;; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &quot;B&quot;&lt;/span&gt;
    cout &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; pb2&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #3a5fcd; font-weight: bold; font-style: italic;&quot;&gt;id&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt;; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &quot;D&quot;&lt;/span&gt;

    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;pb1&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #3a5fcd; font-weight: bold; font-style: italic;&quot;&gt;id&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;==&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;D&quot;&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;         &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// looks innocent&lt;/span&gt;
        &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;D&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;*&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;pd&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;static_cast&lt;/span&gt;&lt;span style=&quot;color: #909183; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;D&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color: #909183; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;pb1&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt;;
        &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ...&lt;/span&gt;
    &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ...&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;main&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;use&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;pre class=&quot;example&quot;&gt;
BD
&lt;/pre&gt;



&lt;p&gt;
&lt;code&gt;pb2-&amp;gt;id()&lt;/code&gt; 的返回值实际上不同的实现可能有不同的结果。我们添加这个函数是为了警告自己设计 RTTI 的危险。这段代码可能能按照预期正确执行很多年，但是在新的机器、新的编译器或新的连接器上运行失败。
&lt;/p&gt;

&lt;p&gt;
如果你自己实现 RTTI，请小心！
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;例外&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
如果在你的实现中发现&lt;code&gt;dynamic_cast&lt;/code&gt;运行非常慢，你可能要用一个变通的方案了。不过任何无法静态的处理的变通方案都会引入显式的类型转换，导致错误。你实际上是构建了自己的一个特殊的&lt;code&gt;dynamic_cast&lt;/code&gt;。所以，首先确保你的
&lt;code&gt;dynamic_cast&lt;/code&gt; 是不是像你想的那么慢（有很多关于&lt;code&gt;dynamic_cast&lt;/code&gt;速度慢传言）；再者你使用&lt;code&gt;dynamic_cast&lt;/code&gt;的地方性能是否很关键。
&lt;/p&gt;

&lt;p&gt;
我们也认为目前&lt;code&gt;dynamic_cast&lt;/code&gt;的实现有些慢。比如在某些条件下，其实是可以以更快的时间执行的。然而，因为兼容性的考虑，即使大家都认为值得优化一下，也很难修改。
&lt;/p&gt;

&lt;p&gt;
在极少的情况下，如果你发现&lt;code&gt;dynamic_cast&lt;/code&gt;的运行开销很明显，你可以通过静态方法确保成功地向下类型转换（比如小心使用 CRTP - Curiously Recurring
Template Pattern。从模板类继承一个新类，以继承类作为基类的模板参数）。因为没有使用虚继承，可以策略性的考虑使用&lt;code&gt;static_cast&lt;/code&gt;（请提供清晰的注释和声明，确保有人会注意，因为类型系统无法验证正确性）。尽管如此，在我们的经验里，这种“我知道我在做什么”的情况仍然是大部分 bug 的源头。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;例外&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
考虑：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;template&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;typename&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;B&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Dx&lt;/span&gt; : &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;B&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ...&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;
&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;
&lt;b&gt;强化&lt;/b&gt;
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;标注所有使用&lt;code&gt;static_cast&lt;/code&gt;进行向下类型转换的情况，包括 C 风格的静态转换。&lt;/li&gt;
&lt;li&gt;此规则是类型安全的注意事项。&lt;/li&gt;
&lt;/ul&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines C.145 通过指针或引用访问多态对象</title>
   <link href="http://kimi.im/2023-01-02-cppcoreguidelines-c145"/>
   <updated>2023-01-02T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-c145</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
C.145: Access polymorphic objects through pointers and references
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;理由&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
如果你有一个提供虚函数的类，你一般不知道哪个派生类提供这个函数。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;例子&lt;/b&gt;
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;struct&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;B&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;a&lt;/span&gt;;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;virtual&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold; font-style: italic;&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;
        cout &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;B::f()\n&quot;&lt;/span&gt;;
        &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;0&lt;/span&gt;;
    &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;virtual&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;~&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;B&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;default&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;struct&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;D&lt;/span&gt; : &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;B&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;b&lt;/span&gt;;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold; font-style: italic;&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;override&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;
        cout &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;D::f()\n&quot;&lt;/span&gt;;
        &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;0&lt;/span&gt;;
    &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;use&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;B&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;b&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    b.&lt;span style=&quot;color: #3a5fcd; font-weight: bold; font-style: italic;&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt;;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;D&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;d&lt;/span&gt;;
    d.&lt;span style=&quot;color: #3a5fcd; font-weight: bold; font-style: italic;&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt;;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;B&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;b2&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;d&lt;/span&gt;;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// slice&lt;/span&gt;
    b2.&lt;span style=&quot;color: #3a5fcd; font-weight: bold; font-style: italic;&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt;;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;B&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;b3&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;b&lt;/span&gt;;
    b3.&lt;span style=&quot;color: #3a5fcd; font-weight: bold; font-style: italic;&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;use2&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;D&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;d&lt;/span&gt;;
    &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;use&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;d&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// slice&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;main&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;use2&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
B::f()
D::f()
B::f()
B::f()
&lt;/p&gt;

&lt;p&gt;
上面例子， &lt;code&gt;d&lt;/code&gt; 都被切片（ slice ）了。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;例外&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
你也可以在定义范围内安全的访问有变量名的多态对象。这种操作没有切片。
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;use3&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;D&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;d&lt;/span&gt;;
    d.&lt;span style=&quot;color: #3a5fcd; font-weight: bold; font-style: italic;&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt;;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// OK&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;
&lt;b&gt;强化&lt;/b&gt;
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;标注所有存在切片（ slicing ）的情况。&lt;/li&gt;
&lt;/ul&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines C.140 不要提供不同的默认参数给虚函数和重写的函数</title>
   <link href="http://kimi.im/2023-01-01-cppcoreguidelines-c140"/>
   <updated>2023-01-01T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-c140</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
C.140: Do not provide different default arguments for a virtual
function and an overrider
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;理由&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
容易引起误解：一个重写（ override ）的函数没有继承默认参数。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;例子&lt;/b&gt;
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-bad src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Base&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
  &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;public&lt;/span&gt;:
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;virtual&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold; font-style: italic;&quot;&gt;multiply&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;value&lt;/span&gt;, &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; factor &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;2&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;0&lt;/span&gt;;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;virtual&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;~&lt;/span&gt;Base&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;default&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Derived&lt;/span&gt; : &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Base&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
  &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;public&lt;/span&gt;:
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold; font-style: italic;&quot;&gt;multiply&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;value&lt;/span&gt;, &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; factor &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;10&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;override&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; value &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;*&lt;/span&gt; factor; &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;main&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Derived&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;d&lt;/span&gt;;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Base&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;b&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;d&lt;/span&gt;;

    cout &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; b.&lt;span style=&quot;color: #3a5fcd; font-weight: bold; font-style: italic;&quot;&gt;multiply&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;10&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; endl;  &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// these two calls will call the same function but&lt;/span&gt;
    cout &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; d.&lt;span style=&quot;color: #3a5fcd; font-weight: bold; font-style: italic;&quot;&gt;multiply&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;10&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; endl;  &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// with different arguments and so different results&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;pre class=&quot;example&quot;&gt;
20
100
&lt;/pre&gt;



&lt;p&gt;
&lt;b&gt;强化&lt;/b&gt;
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;标注基类和派生类声明的虚函数的默认参数不同的情况&lt;/li&gt;
&lt;/ul&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines C.139 少用 final</title>
   <link href="http://kimi.im/2022-12-29-cppcoreguidelines-c139"/>
   <updated>2022-12-29T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-c139</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
C.139: Use &lt;code&gt;final&lt;/code&gt; on classes sparingly
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;理由&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
通过 &lt;code&gt;final&lt;/code&gt; 类限制继承层级没有什么太多逻辑上的理由，还会破坏继承层级的可扩展性。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;例子&lt;/b&gt;
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-bad src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Widget&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;/* ... */&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;

&lt;span style=&quot;color: #3F7F5F;&quot;&gt;// nobody will ever want to improve My_widget (or so you thought)&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;My_widget&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;final&lt;/span&gt; : &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Widget&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;/* ... */&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;My_improved_widget&lt;/span&gt; : &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;My_widget&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;/* ... */&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;
&lt;span style=&quot;color: #3F7F5F;&quot;&gt;// error: can&apos;t do that&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;pre class=&quot;example&quot; id=&quot;orge2a1078&quot;&gt;
error: cannot derive from &apos;final&apos; base &apos;main()::My_widget&apos; in derived type &apos;main()::My_improved_widget&apos;
   16 | class My_improved_widget : public My_widget { /* ... */ };
      |       ^~~~~~~~~~~~~~~~~~
&lt;/pre&gt;

&lt;p&gt;
一开始你可能觉得不需要扩展优化&lt;code&gt;My_widget&lt;/code&gt;，但是等到后来需要扩展的时候，就会报错。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;注意&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
并非所有的类都用来做基类。比如大部分的标准库的类。如 &lt;code&gt;std::vector&lt;/code&gt; ,
&lt;code&gt;std::string&lt;/code&gt; 就不是用来派生子类的。这条规则也适用于那些有虚函数、用来做接口的类层级。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;注意&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
把单个的虚函数限制为 &lt;code&gt;final&lt;/code&gt; 也容易出错，因为人们很容易忽视 &lt;code&gt;final&lt;/code&gt; 的存在，然后发现出错了。当然，编译器可以捕捉这类错误，所以你也不能在派生类中重新什么或重新打开一个 &lt;code&gt;final&lt;/code&gt; 成员函数。
&lt;/p&gt;

&lt;p&gt;
号称 &lt;code&gt;final&lt;/code&gt; 能提升性能也缺少根据。通常是基于其他编程语言的经验推导出来的。
&lt;/p&gt;

&lt;p&gt;
当然有时候使用 &lt;code&gt;final&lt;/code&gt; 也有逻辑上和性能上的重要原因。一个例子是对编译器和分析语言工具来说性能关键的 AST 继承层级。新的派生类不会时不时的出现，而且新的派生类只能通过库的实现者来添加。然而，误用 &lt;code&gt;final&lt;/code&gt; 的例子还是会更多一些。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;强化&lt;/b&gt;
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;标注用了 &lt;code&gt;final&lt;/code&gt; 的类&lt;/li&gt;
&lt;/ul&gt;
</content>
 </entry>
 
 <entry>
   <title>单词本：anaphora</title>
   <link href="http://kimi.im/2022-12-29-english-anaphora"/>
   <updated>2022-12-29T00:00:00+00:00</updated>
   <id>http://kimi.im/english-anaphora</id>
   <content type="html">&lt;p&gt;
在看一个演讲技术的书，其中提到：
&lt;/p&gt;

&lt;p&gt;
Martin Luther King, Jr. used a public-speaking device called anaphora,
repeating the same word or words at the beginning of successive
clauses or sentences. &amp;ldquo;I have a dream&amp;#x2026;&amp;rdquo; is repeated in eight
successive sentences.
&lt;/p&gt;

&lt;p&gt;
马丁路德金使用一种重复的修辞手法，首语重复 anaphora: the repetition of
a word or phrase at the beginning of successive clauses.
&lt;/p&gt;

&lt;p&gt;
就是在每一个句子前，重复前面用过的词语或句子，达到感情强调、气势磅礴、声音和谐的目的。
&lt;/p&gt;

&lt;p&gt;
希腊语里 ana- 前缀是向后的意思，-phora 是传递的意思。合起来就是向后传递，向后延伸。也就是前面的句子词语在后面重复。
&lt;/p&gt;

&lt;p&gt;
再比如丘吉尔的演讲。不断重复出现 we shall，就是一种 anaphora 首语重复修辞：
&lt;/p&gt;

&lt;p&gt;
&lt;i&gt;We shall&lt;/i&gt; go on to the end, &lt;i&gt;we shall&lt;/i&gt; fight in France, &lt;i&gt;we shall&lt;/i&gt; fight on
the seas and oceans, &lt;i&gt;we shall&lt;/i&gt; fight with growing confidence and
growing strength in the air, &lt;i&gt;we shall&lt;/i&gt; defend on the beaches, &lt;i&gt;we shall&lt;/i&gt;
fight on the landing grounds, &lt;i&gt;we shall&lt;/i&gt; fight in the fields and in the
streets, &lt;i&gt;we shall&lt;/i&gt; fight in the hills.
&lt;/p&gt;

&lt;p&gt;
在上面这个例子里，we shall 就是一个 anaphor（首语重复词）。
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines C.138 通过 using 在派生类中重载基类的函数</title>
   <link href="http://kimi.im/2022-12-28-cppcoreguidelines-c138"/>
   <updated>2022-12-28T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-c138</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
C.138: Create an overload set for a derived class and its bases with
&lt;code&gt;using&lt;/code&gt;
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;理由&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
不使用 &lt;code&gt;using&lt;/code&gt; 的话，派生类的成员函数会覆盖从基类继承来的所有重载函数。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;例子&lt;/b&gt;
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-bad src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;#include&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&amp;lt;iostream&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;B&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;public&lt;/span&gt;:
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;virtual&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold; font-style: italic;&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;i&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;std&lt;/span&gt;::cout &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;f(int): &quot;&lt;/span&gt;; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; i; &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;virtual&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;double&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold; font-style: italic;&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;double&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;d&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;std&lt;/span&gt;::cout &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;f(double): &quot;&lt;/span&gt;; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; d; &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;virtual&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;~&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;B&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;default&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;D&lt;/span&gt;: &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;B&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;public&lt;/span&gt;:
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold; font-style: italic;&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;i&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;override&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;std&lt;/span&gt;::cout &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;f(int): &quot;&lt;/span&gt;; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; i &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;+&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;1&lt;/span&gt;; &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;main&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;D&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;d&lt;/span&gt;;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;std&lt;/span&gt;::cout &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; d.&lt;span style=&quot;color: #3a5fcd; font-weight: bold; font-style: italic;&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;2&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;&apos;\n&apos;&lt;/span&gt;;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// prints &quot;f(int): 3&quot;&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;std&lt;/span&gt;::cout &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; d.&lt;span style=&quot;color: #3a5fcd; font-weight: bold; font-style: italic;&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;2.3&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;&apos;\n&apos;&lt;/span&gt;; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// prints &quot;f(int): 3&quot;&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;pre class=&quot;example&quot;&gt;
f(int): 3
f(int): 3
&lt;/pre&gt;




&lt;p&gt;
&lt;b&gt;例子&lt;/b&gt;
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;#include&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&amp;lt;iostream&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;B&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;public&lt;/span&gt;:
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;virtual&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold; font-style: italic;&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;i&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;std&lt;/span&gt;::cout &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;f(int): &quot;&lt;/span&gt;; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; i; &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;virtual&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;double&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold; font-style: italic;&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;double&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;d&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;std&lt;/span&gt;::cout &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;f(double): &quot;&lt;/span&gt;; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; d; &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;virtual&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;~&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;B&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;default&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;D&lt;/span&gt;: &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;B&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;public&lt;/span&gt;:
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold; font-style: italic;&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;i&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;override&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;std&lt;/span&gt;::cout &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;f(int): &quot;&lt;/span&gt;; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; i &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;+&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;1&lt;/span&gt;; &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;using&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;B&lt;/span&gt;::f; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// exposes f(double)&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;main&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;D&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;d&lt;/span&gt;;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;std&lt;/span&gt;::cout &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; d.&lt;span style=&quot;color: #3a5fcd; font-weight: bold; font-style: italic;&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;2&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;&apos;\n&apos;&lt;/span&gt;;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// prints &quot;f(int): 3&quot;&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;std&lt;/span&gt;::cout &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; d.&lt;span style=&quot;color: #3a5fcd; font-weight: bold; font-style: italic;&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;2.3&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;&apos;\n&apos;&lt;/span&gt;; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// prints &quot;f(double): 3&quot;&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;pre class=&quot;example&quot;&gt;
f(int): 3
f(double): 2.3
&lt;/pre&gt;



&lt;p&gt;
&lt;b&gt;注意&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
这个问题会影响到虚的以及非虚的成员函数。
&lt;/p&gt;

&lt;p&gt;
对于变参数模板类，C++17提供了一个带可变参数形式的 &lt;code&gt;using&lt;/code&gt; 声明：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;#include&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&amp;lt;iostream&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;B1&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;public&lt;/span&gt;:
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;virtual&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; operator&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;x&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;
        &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;std&lt;/span&gt;::cout &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;B1( &quot;&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; x &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot; )&quot;&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;std&lt;/span&gt;::endl;
    &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;virtual&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;~&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;B1&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;default&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;B2&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;public&lt;/span&gt;:
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;virtual&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; operator&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;double&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;x&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;
        &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;std&lt;/span&gt;::cout &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;B2( &quot;&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; x &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot; )&quot;&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;std&lt;/span&gt;::endl;
    &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;virtual&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;~&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;B2&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;default&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;template&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class...&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Ts&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;struct&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Overloader&lt;/span&gt; : &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Ts&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;...&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;using&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Ts&lt;/span&gt;::operator&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;...&lt;/span&gt;; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// exposes operator() from every base&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; operator&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;std&lt;/span&gt;::cout &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;Overloader()\n&quot;&lt;/span&gt;; &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;main&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Overloader&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;B1&lt;/span&gt;, &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;B2&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;d&lt;/span&gt;;
    &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;d&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;42&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
    &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;d&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;42.1&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
    &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;d&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;pre class=&quot;example&quot;&gt;
B1( 42 )
B2( 42.1 )
Overloader()
&lt;/pre&gt;



&lt;p&gt;
&lt;b&gt;强化&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
诊断名字覆盖（name hiding）的情况
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines C.137 使用虚基类避免过于通用的基类</title>
   <link href="http://kimi.im/2022-12-23-cppcoreguidelines-c137"/>
   <updated>2022-12-23T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-c137</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
C.137: Use &lt;code&gt;virtual&lt;/code&gt; bases to avoid overly general base classes
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;理由&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
虚函数可以实现数据共享和接口分离。从而避免把所有共享数据放进一个最基础的基类。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;例子&lt;/b&gt;
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;struct&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Interface&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;virtual&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold; font-style: italic;&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt;;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;virtual&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold; font-style: italic;&quot;&gt;g&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt;;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ... no data here ...&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Utility&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;  &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// with data&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold; font-style: italic;&quot;&gt;utility1&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt;;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;virtual&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold; font-style: italic;&quot;&gt;utility2&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt;;    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// customization point&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;public&lt;/span&gt;:
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;x&lt;/span&gt;;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;y&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Derive1&lt;/span&gt; : &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Interface&lt;/span&gt;, &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;virtual&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;protected&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Utility&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// override Interface functions&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// Maybe override Utility virtual functions&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ...&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Derive2&lt;/span&gt; : &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Interface&lt;/span&gt;, &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;virtual&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;protected&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Utility&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// override Interface functions&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// Maybe override Utility virtual functions&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ...&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
如果很多派生类共享某些明显的实现细节，可以抽取出实用功能（ &lt;code&gt;Utility&lt;/code&gt; ）。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;注意&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
显然，这个例子太理论化了。但是很难找到更小的现实例子。 &lt;code&gt;Interface&lt;/code&gt; 是接口层级的根节点， &lt;code&gt;Utility&lt;/code&gt; 是实现层级的根节点。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;注意&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
更好的方案可以是线性化的继承层级。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;强化&lt;/b&gt;
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;标注混合了接口和实现继承层级的地方&lt;/li&gt;
&lt;/ul&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines C.136 用多重继承表达属性实现的集合</title>
   <link href="http://kimi.im/2022-12-21-cppcoreguidelines-c136"/>
   <updated>2022-12-21T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-c136</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
C.136: Use multiple inheritance to represent the union of
implementation attributes
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;理由&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
某些形式的混合类有状态，并且基于这些状态操作运行。如果这些操作是虚的，则需要使用继承。如果不是虚的，则使用继承能够避免样板代码和转发。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;例子&lt;/b&gt;
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;iostream&lt;/span&gt; : &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;istream&lt;/span&gt;, &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;ostream&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// very simplified&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ...&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
&lt;code&gt;istream&lt;/code&gt; 提供输入操作接口（以及一些数据）， &lt;code&gt;ostream&lt;/code&gt; 提供输出操作接口（以及一些数据）。 &lt;code&gt;iostream&lt;/code&gt; 提供 &lt;code&gt;istream&lt;/code&gt; 和 &lt;code&gt;ostream&lt;/code&gt; 接口的集合以及输入输出之间的同步。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;注意&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
这是很少使用的方法，因为基于单根节点的继承层级也能实现一样的效果。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;例子&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
有时候，一个“属性的实现”更像一个混合类（ mixin ），通过注入成员来确定实现的某些行为，来确定需要实现的某些策略。比如 &lt;code&gt;std::enable_shared_from_this&lt;/code&gt;
或基于&lt;code&gt;boost.intrusive&lt;/code&gt;的 &lt;code&gt;list_base_hook&lt;/code&gt; 以及&lt;code&gt;intrusive_ref_counter&lt;/code&gt;。
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines C.135 使用多重继承来表达多重不同的接口</title>
   <link href="http://kimi.im/2022-12-20-cppcoreguidelines-c135"/>
   <updated>2022-12-20T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-c135</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
C.135: Use multiple inheritance to represent multiple distinct
interfaces
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;理由&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
并非所有的类要支持所有的接口。也并非所有的调用处都必须处理所有的操作。因此，可以通过派生类将一组庞大的接口拆分成不同的行为侧面。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;例子&lt;/b&gt;
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-bad src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;iostream&lt;/span&gt; : &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;istream&lt;/span&gt;, &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;ostream&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// very simplified&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ...&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;
&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;
&lt;code&gt;istream&lt;/code&gt; 提供输入操作的接口， &lt;code&gt;ostream&lt;/code&gt; 提供输出操作的接口。 &lt;code&gt;iostream&lt;/code&gt; 提供 &lt;code&gt;istream&lt;/code&gt; 和 &lt;code&gt;ostream&lt;/code&gt; 操作的合集，以及输入输出需要的同步操作。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;注意&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
这是经常用到继承的地方，因为某个实现需要多个不同的接口，而这些接口又很难通过单一根节点的继承层级来实现。
&lt;/p&gt;

&lt;p&gt;
这些接口通常都是抽象类。
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines C.134 确保非const的成员数据有同级别的访问层级</title>
   <link href="http://kimi.im/2022-12-19-cppcoreguidelines-c134"/>
   <updated>2022-12-19T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-c134</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
C.134: Ensure all non-&lt;code&gt;const&lt;/code&gt; data members have the same access level
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;理由&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
避免逻辑混淆导致错误。如果非 &lt;code&gt;const&lt;/code&gt; 成员数据的访问层级不一样，我们就不太懂这个类型到底要做什么。这个类型维护一个不变式约束？还是只不过是一组值的集合？
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;讨论&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
核心问题是：哪些代码负责维护变量的有意义和正确的值？
&lt;/p&gt;

&lt;p&gt;
有两种不同的成员数据：
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;A：不参与对象的不变式约束的成员数据，任何数据值的组合都是合法的。&lt;/li&gt;
&lt;li&gt;B：参与对象的不变式约束的成员数据。只有某些值的组合是有意义的。（不然就不叫不变式）。因此，任何访问这些变量的代码都要知道其中的隐含的不变式约束和语义。而且代码需要知道并实现什么样的规则能保证值是正确的。&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
A 类数据成员只要 &lt;code&gt;public&lt;/code&gt; 就可以了（或者，少数情况下，你只想要派生类能看到，设置成 &lt;code&gt;protected&lt;/code&gt; ）。他们不需要封装。系统中所有代码都可以访问并进行操作。
&lt;/p&gt;

&lt;p&gt;
B 类数据应该是 &lt;code&gt;private&lt;/code&gt; 或 &lt;code&gt;const&lt;/code&gt; 。因为对它们来说，封装很重要。如果他们不是 &lt;code&gt;private&lt;/code&gt; ，不是 &lt;code&gt;const&lt;/code&gt; ，意味着对象不能控制自己的状态：该类外部，其他不受限制的代码需要知道类的不变式约束，并参与维护。如果数据成员是公开的，那么所有调用到该类的地方都需要维护类的约束；如果数据成员是
&lt;code&gt;protected&lt;/code&gt; ，那么当前以及未来派生类的所有代码要参与维护。这样就会使得代码很脆弱、互相紧耦合，很快会成为代码维护的噩梦。任何不经意地把数据成员得值设置成无效的或不对的组合的时候，就会破坏对象的不变式，导致后续的使用出问题。
&lt;/p&gt;


&lt;p&gt;
大部分类要么全是 A 要么全是 B：
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;全&lt;code&gt;public&lt;/code&gt;:如果你在编写一组没有不变式关系的变量的聚合的时候，所有变量应该是公开 &lt;code&gt;public&lt;/code&gt; 的。&lt;/li&gt;
&lt;li&gt;全&lt;code&gt;private&lt;/code&gt;:如果你写的某个类维护某种不变式关系，那么所有非 &lt;code&gt;const&lt;/code&gt; 的变量都应该是 &lt;code&gt;private&lt;/code&gt; ，需要封装起来。&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;
&lt;b&gt;例外&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
偶尔的，某些类会混合 A 和 B。通常是为了调试。一个封装的对象可能有一些非 &lt;code&gt;const&lt;/code&gt; 的调试数据。这些数据不算类的不变式，所以属于 A 类。这些数据也不是对象的部分值或有意义的状态。这种情况，A 类部分的数据就当作公开数据处理（或者 &lt;code&gt;protected&lt;/code&gt; ，如果只想在派生类中访问）。B 类部分的数据仍然作为 B 类数据对待，要么是 &lt;code&gt;private&lt;/code&gt; 要么是 &lt;code&gt;const&lt;/code&gt; 。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;强化&lt;/b&gt;
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;标注非 &lt;code&gt;const&lt;/code&gt; 数据成员有不同的访问层级的类&lt;/li&gt;
&lt;/ul&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines C.133 避免使用 protected 数据</title>
   <link href="http://kimi.im/2022-12-18-cppcoreguidelines-c133"/>
   <updated>2022-12-18T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-c133</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
C.133: Avoid &lt;code&gt;protected&lt;/code&gt; data
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;理由&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
&lt;code&gt;protected&lt;/code&gt; 数据是复杂和错误的源泉。 &lt;code&gt;protected&lt;/code&gt; 数据把类的不变式约束弄得更复杂。 &lt;code&gt;protected&lt;/code&gt; 数据违反了“不要把数据放在基类”的指导方针，往往会导致需要处理虚继承关系。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;例子&lt;/b&gt;
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-bad src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Shape&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;public&lt;/span&gt;:
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ... interface functions ...&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;protected&lt;/span&gt;:
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// data for use in derived classes:&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Color&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;fill_color&lt;/span&gt;;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Color&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;edge_color&lt;/span&gt;;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Style&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;st&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
这样，就要求每个 &lt;code&gt;Shape&lt;/code&gt; 的继承类都要能正确处理 &lt;code&gt;protected&lt;/code&gt; 的数据。尽管这种做法很流行，但是会导致维护困难。在大的类层级结构中，维护使用
&lt;code&gt;protected&lt;/code&gt; 数据的一致性很困难，因为在大量的类中隐藏着大量的代码要修改。能够接触这些数据的类也是开放的：任何人都可以继承一个新类，去操作这些
&lt;code&gt;protected&lt;/code&gt; 数据。我们往往对所有的类进行检查，所以修改这些类变得很困难。没有任何不变式约束这些 &lt;code&gt;protected&lt;/code&gt; 数据，更像是一组全局变量。 &lt;code&gt;protected&lt;/code&gt;
数据事实上成了很大一片代码的全局变量。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;注意&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
&lt;code&gt;protected&lt;/code&gt; 数据经常看起来能够通过继承提供很多优化。然而，事实上，你经常得到的是无原则的修改和错误。请使用 &lt;code&gt;private&lt;/code&gt; 私有数据，并强化不变式约束。另一个更好的改进方法，就是使用接口，不要添加数据。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;注意&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
&lt;code&gt;protected&lt;/code&gt; 成员函数没问题。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;强化&lt;/b&gt;
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;标注使用了 &lt;code&gt;protected&lt;/code&gt; 数据的类&lt;/li&gt;
&lt;/ul&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines C.132 不要不明所以的将一个函数设置为虚的</title>
   <link href="http://kimi.im/2022-12-17-cppcoreguidelines-c132"/>
   <updated>2022-12-17T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-c132</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
C.132: Don&amp;rsquo;t make a function &lt;code&gt;virtual&lt;/code&gt; without reason
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;理由&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
多余的虚函数，会增加运行时间和对象内存大小。虚函数是能够被重载，这就在继承类中打开大门迎接错误了。虚函数确保在模板化的层级中代码可复用。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;例子&lt;/b&gt;
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-bad src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;template&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Vector&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;public&lt;/span&gt;:
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ...&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;virtual&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold; font-style: italic;&quot;&gt;size&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; sz; &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// bad: what good could a derived class do?&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;private&lt;/span&gt;:
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;*&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;elem&lt;/span&gt;;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// the elements&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;sz&lt;/span&gt;;    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// number of elements&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
你根本不会通过基类使用这种 “ vector ”的继承类。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;强化&lt;/b&gt;
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;标记某个类有虚函数，却不会有继承类&lt;/li&gt;
&lt;li&gt;标记某个类的所有成员函数都是虚的，并有对应的实现。&lt;/li&gt;
&lt;/ul&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines C.131 避免使用细枝末节的 getter 和 setter</title>
   <link href="http://kimi.im/2022-12-16-cppcoreguidelines-c131"/>
   <updated>2022-12-16T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-c131</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
C.131: Avoid trivial getters and setters
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;理由&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
繁琐细枝末节的 getter 和 setter 不增加语义价值；数据要么就直接 public
就好了。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;例子&lt;/b&gt;
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-bad src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Point&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// Bad: verbose&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;x&lt;/span&gt;;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;y&lt;/span&gt;;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;public&lt;/span&gt;:
    &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;Point&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;xx&lt;/span&gt;, &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;yy&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; : &lt;span style=&quot;color: #110099; font-style: italic;&quot;&gt;x&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;xx&lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;, &lt;span style=&quot;color: #110099; font-style: italic;&quot;&gt;y&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;yy&lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold; font-style: italic;&quot;&gt;get_x&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; x; &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold; font-style: italic;&quot;&gt;set_x&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;xx&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;x&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; xx; &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold; font-style: italic;&quot;&gt;get_y&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; y; &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold; font-style: italic;&quot;&gt;set_y&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;yy&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;y&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; yy; &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// no behavioral member functions&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
考虑将这个类改成 struct，这样，就成了没有行为的一组变量，所有数据都公开，没有成员函数。
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;struct&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Point&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;x&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;y&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;
&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;
注意，我们可以在成员变量上添加默认初始值。&lt;a href=&quot;http://kimi.im/2022-10-18-cppcoreguidelines-c49&quot;&gt;C.49&lt;/a&gt; 在构造函数中进行初始化操作，不要进行赋值。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;注意&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
此规则的关键是getter/setter的语义是否重要。虽然很难定义是否重要，但是可以考虑如果将getter/setter改成公开的数据是否导致任何语法上的差异。不重要的语义就是如果转换内部类型和接口类型，依然能保持类的不变式，那就是语义不重要。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;强化&lt;/b&gt;
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;标注有多个 get 和 set 成员函数只是访问成员数据，而不增加语义的类。&lt;/li&gt;
&lt;/ul&gt;
</content>
 </entry>
 
 <entry>
   <title>单词本：mercenary</title>
   <link href="http://kimi.im/2022-12-15-english-mercenary"/>
   <updated>2022-12-15T00:00:00+00:00</updated>
   <id>http://kimi.im/english-mercenary</id>
   <content type="html">&lt;p&gt;
在看关键基础设施的网络攻击方面的书，看到：
&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;
Cyber Crime and Cyber Terrorism are no longer isolated to organized
syndicates and terrorist groups, but are now services available for
hire. A fully weaponized attack against critical infrastructures at
any level no longer needs to be military, because it can be
&lt;b&gt;mercenary&lt;/b&gt; - bought as a service, online.
&lt;/p&gt;

&lt;p&gt;
网络犯罪和网络恐怖主义，已经不局限于某些有组织的财团和恐怖组织了，现在已经是某种可以雇佣的服务。一次针对关键基础设施的完全武装网络攻击，已经不再是军事行动，也可能是雇佣军 - 通过在线购买的服务。
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;
这里有一个词 mercenary，意思是雇佣军，唯利是图的。
&lt;/p&gt;

&lt;p&gt;
有没有觉得和 mercury 很像？mercury 是水银的意思，就是那个剧毒的汞。
&lt;/p&gt;

&lt;p&gt;
但是其实水银是难得的常温液态的金属，所以又意味着很灵活。mercury 的形容词形式 mercurial 除了“水银的”之外，还有“雄辩机智的；活泼善变的”意思。正所谓智者乐水，液态的金属，不就是高级的智者么。
&lt;/p&gt;

&lt;p&gt;
其实，追根溯源，mercury 源自拉丁语 Mercurius，就是畜牧、小偷、商业、交通、旅游和体育之神墨丘利。罗马的神和世俗其实是紧密联系的。mercatus 就是交易、买卖的意思，市场 market 就是从 marcatus 演变来的。法语为
marché，德语为 Markt。
&lt;/p&gt;

&lt;p&gt;
水星也来源于罗马神话墨丘利（Mercŭrĭus）。他行走敏捷，精力充沛，多才多艺，在奥林匹斯山上担任诸神的使者和传译，作为沟通之神的他拥有过人的智慧和交流能力，所以也被称为商业之神。由于水星在天上运行的速度很快，所以用了他的名字而命名。他在希腊神话中有另外一个名字，叫做赫尔墨斯，也就是那个很贵很贵很贵的箱包品牌爱马仕，Hermès，因为 H 在法语里不发音，所以就音译为爱玛仕。
&lt;/p&gt;

&lt;p&gt;
Mercure, première planète du système solaire, la plus proche du
Soleil. Merkur ist innerster Planet des Sonnensystems, nach dem
römischen Gott benannt.
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines C.130 多态类的深拷贝，建议使用虚clone函数，而不要用公开的拷贝构造赋值函数</title>
   <link href="http://kimi.im/2022-12-14-cppcoreguidelines-c130"/>
   <updated>2022-12-14T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-c130</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
C.130: For making deep copies of polymorphic classes prefer a virtual
clone function instead of public copy construction/assignment
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;理由&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
不建议进行多态类的拷贝，因为这样会导致切片问题（slicing problem），参考
&lt;a href=&quot;http://kimi.im/2022-11-04-cppcoreguidelines-c67&quot;&gt;C.67&lt;/a&gt;。如果你确实需要拷贝语义，请进行深拷贝：提供一个虚的 clone 函数，该函数对继承链末端的类型进行实际拷贝，并返回一个指向新对象的所有权指针（owing pointer），并且在继承类返回共变式（ covariant ）继承类型。
&lt;/p&gt;

&lt;p&gt;
&lt;b&gt;例子&lt;/b&gt;
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;B&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;public&lt;/span&gt;:
    &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;B&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;default&lt;/span&gt;;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;virtual&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;~&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;B&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;default&lt;/span&gt;;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;virtual&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;gsl&lt;/span&gt;::&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;owner&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;B&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold; font-style: italic;&quot;&gt;clone&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;0&lt;/span&gt;;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;protected&lt;/span&gt;:
     &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;B&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;B&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;default&lt;/span&gt;;
     &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;B&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt; operator&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;B&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;default&lt;/span&gt;;
     &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;B&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;B&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;default&lt;/span&gt;;
     &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;B&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt; operator&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;B&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;default&lt;/span&gt;;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ...&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;D&lt;/span&gt; : &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;B&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;public&lt;/span&gt;:
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;gsl&lt;/span&gt;::&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;owner&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;D&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold; font-style: italic;&quot;&gt;clone&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;override&lt;/span&gt;
    &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;
        &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;D&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;this&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;}&lt;/span&gt;;
    &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
一般来说，建议使用智能指针表示所有权（参考R.20）。但是，根据语言规则，共变式（ covariant ）返回类型不能是智能指针：当 &lt;code&gt;B::clone&lt;/code&gt; 返回
&lt;code&gt;unique_ptr&amp;lt;B&amp;gt;&lt;/code&gt; 的时候&lt;code&gt;D::clone&lt;/code&gt;不能返回&lt;code&gt;unique_ptr&amp;lt;D&amp;gt;&lt;/code&gt;。因此，要么你在所有的重载函数中，始终如一地返回&lt;code&gt;unique_ptr&amp;lt;B&amp;gt;&lt;/code&gt;，要么使用 Guidelines
Support Library 中的&lt;code&gt;owner&amp;lt;&amp;gt;&lt;/code&gt;工具。
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>单词本：fait accompli</title>
   <link href="http://kimi.im/2022-12-14-english-fait-accompli"/>
   <updated>2022-12-14T00:00:00+00:00</updated>
   <id>http://kimi.im/english-fait-accompli</id>
   <content type="html">&lt;p&gt;
昨天看基础设施安全相关的书，提到工业控制系统比普通企业系统的信息安全落后很久，写道：
&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;
These systems are extremely vulnerable, and can be considered a decade
or more behind typical enterprise systems in terms of cyber security
maturity. This means that, once breached, the result is most likely a
&lt;b&gt;fait accompli&lt;/b&gt;.
&lt;/p&gt;

&lt;p&gt;
这些系统非常脆弱，从信息安全成熟度来说，已经落后企业系统好几代了。这意味着，一旦被入侵，结果极可能就是一个既成事实。
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;
这里有一个词组 fait accompli，其实是从法语里面来的，fait 是行动的意思，
accompli，就是 accomplished，完成了。合在一起表示已经完成的实事，就是实事一定、既成事实的意思，就是 a decision that has already been made
or something that has already been accomplished or completed.
&lt;/p&gt;

&lt;p&gt;
再看看几个例子：
&lt;/p&gt;

&lt;p&gt;
The decision by the CEO to close 50 of the company&amp;rsquo;s stores came as a
fait accompli to the rest of the management team, who were powerless
to stop it. 对管理层来说，公司 CEO 决定关闭 50 个店铺已经是不可挽回的既成事实。
&lt;/p&gt;

&lt;p&gt;
Failing this class is not a fait accompli — you have the ability to
study and bring up your grade! 这次考试失败并不是实事已定，你还可以继续努力学习，提升你的成绩！
&lt;/p&gt;


&lt;p&gt;
再看看几个法语例子：
&lt;/p&gt;

&lt;p&gt;
Tout à coup, ils viennent d&amp;rsquo;accepter au fond le fait accompli. 突然，他们接受了即成实事的好处。
&lt;/p&gt;

&lt;p&gt;
Le fait accompli a une puissance irrésistible. 既成的事实有不可否认的效力。
&lt;/p&gt;


&lt;p&gt;
德语好像没有从法语里学过去这个 fait accompli，所以德语表达为
vollendete Tatsachen 完成的实事，比如：
&lt;/p&gt;

&lt;p&gt;
Im Gegenteil, sie haben uns viele Male belogen, Entscheidungen hinter
unserem Rücken getroffen und stellten uns vor vollendete Tatsachen. 相反的，他们多次欺骗我们，在我们背后达成决定，仅仅展示既成事实给我们。
&lt;/p&gt;

&lt;p&gt;
Das Fatale an diesem Projektstart war, dass sowohl der Projektleiter
als auch der Auftraggeber vor vollendete Tatsachen gestellt wurden. 此项目的启动的致命问题是项目经理与客户都面临了一些既成事实。
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines C.129 设计类层级时，请区分实现继承与接口继承</title>
   <link href="http://kimi.im/2022-12-13-cppcoreguidelines-c129"/>
   <updated>2022-12-13T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-c129</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
C.129: When designing a class hierarchy, distinguish between
implementation inheritance and interface inheritance
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;理由&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
在接口中实现细节会使得接口变得脆弱。脆弱意味着每次修改实现，都需要重新编译。基类中的数据导致基类的实现变得复杂、代码重复。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;注意&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
定义：
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;接口继承，指的是利用继承的方法，分离接口的实现，允许增加继承类，而不影响使用基类的用户。&lt;/li&gt;
&lt;li&gt;实现继承，指的是利用继承的方法，简化实现新功能的过程，通过使用已经实现的有用的操作，创建相关的新操作。（有时候称之为 “programming by
difference”，差异化编程）。&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
一个纯接口类就是一组纯虚函数。详见 &lt;a href=&quot;http://kimi.im/2022-03-31-cppcoreguidelines-i25&quot;&gt;I.25&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
早期的 OOP （1980、 1990 年代），习惯不太好，实现继承和接口继承经常混在一起。现在在老的代码、老风格培训材料中，这种混淆也很常见。
&lt;/p&gt;

&lt;p&gt;
随着以下维度的增长，确保实现继承和接口继承清晰分开变得越来越重要：
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;继承层级的增长（比如大量的继承类）&lt;/li&gt;
&lt;li&gt;继承层级使用的时间增长（数十年）&lt;/li&gt;
&lt;li&gt;使用继承层级的组织数量增长（往往很难发布基类的实现更新）&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;
&lt;b&gt;例子&lt;/b&gt;
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-bad src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Shape&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// BAD, mixed interface and implementation&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;public&lt;/span&gt;:
    &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;Shape&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt;;
    &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;Shape&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Point&lt;/span&gt; ce &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #909183;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;0&lt;/span&gt;, &lt;span style=&quot;color: #110099;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;}&lt;/span&gt;, &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Color&lt;/span&gt; co &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; none&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;: &lt;span style=&quot;color: #110099; font-style: italic;&quot;&gt;cent&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;ce&lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;, &lt;span style=&quot;color: #110099; font-style: italic;&quot;&gt;col&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;co&lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;/* ... */&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;

    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Point&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold; font-style: italic;&quot;&gt;center&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; cent; &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Color&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold; font-style: italic;&quot;&gt;color&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; col; &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;

    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;virtual&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold; font-style: italic;&quot;&gt;rotate&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;0&lt;/span&gt;;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;virtual&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold; font-style: italic;&quot;&gt;move&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Point&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;p&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;cent&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; p; &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;redraw&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;()&lt;/span&gt;; &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;

    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;virtual&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold; font-style: italic;&quot;&gt;redraw&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt;;

    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ...&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;private&lt;/span&gt;:
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Point&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;cent&lt;/span&gt;;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Color&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;col&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Circle&lt;/span&gt; : &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Shape&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;public&lt;/span&gt;:
    &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;Circle&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Point&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;c&lt;/span&gt;, &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;r&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; : &lt;span style=&quot;color: #110099; font-style: italic;&quot;&gt;Shape&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;c&lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;, &lt;span style=&quot;color: #110099; font-style: italic;&quot;&gt;rad&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;r&lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;/* ... */&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;

    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ...&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;private&lt;/span&gt;:
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;rad&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Triangle&lt;/span&gt; : &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Shape&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;public&lt;/span&gt;:
    &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;Triangle&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Point&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;p1&lt;/span&gt;, &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Point&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;p2&lt;/span&gt;, &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Point&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;p3&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// calculate center&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ...&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
存在的问题：
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;随着继承层级增长， &lt;code&gt;Shape&lt;/code&gt; 上会添加越来越多的数据，构造函数变得越来越难编写和维护&lt;/li&gt;
&lt;li&gt;为什么要计算三角形的中心？我们可能永远也不会用到。&lt;/li&gt;
&lt;li&gt;在 &lt;code&gt;Shape&lt;/code&gt; 中添加新的数据成员（绘制风格或 &lt;code&gt;canvas&lt;/code&gt; 绘图板），所有从
&lt;code&gt;Shape&lt;/code&gt; 继承的类，所有使用了 &lt;code&gt;Shape&lt;/code&gt; 的代码都要重新评审，修改或重编译。&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
&lt;code&gt;Shape::move()&lt;/code&gt; 的实现实现继承的一个例子。我们定义&lt;code&gt;move()&lt;/code&gt;一次，然后所有继承类都能使用。在基类的这种成员函数中，数据越多，共享越多，实现越轻松，但是继承层级就越不稳定。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;例子&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
&lt;code&gt;Shape&lt;/code&gt; 的继承层级可以通过接口继承重写：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Shape&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;  &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// pure interface&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;public&lt;/span&gt;:
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;virtual&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Point&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold; font-style: italic;&quot;&gt;center&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;0&lt;/span&gt;;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;virtual&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Color&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold; font-style: italic;&quot;&gt;color&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;0&lt;/span&gt;;

    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;virtual&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold; font-style: italic;&quot;&gt;rotate&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;0&lt;/span&gt;;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;virtual&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold; font-style: italic;&quot;&gt;move&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Point&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;p&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;0&lt;/span&gt;;

    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;virtual&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold; font-style: italic;&quot;&gt;redraw&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;0&lt;/span&gt;;

    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ...&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
注意，纯接口通常不需要构造函数，因为没有东西需要构造。
&lt;/p&gt;


&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Circle&lt;/span&gt; : &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Shape&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;public&lt;/span&gt;:
    &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;Circle&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Point&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;c&lt;/span&gt;, &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;r&lt;/span&gt;, &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Color&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;c&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; : &lt;span style=&quot;color: #110099; font-style: italic;&quot;&gt;cent&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;c&lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;, &lt;span style=&quot;color: #110099; font-style: italic;&quot;&gt;rad&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;r&lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;, &lt;span style=&quot;color: #110099; font-style: italic;&quot;&gt;col&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;c&lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;/* ... */&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;

    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Point&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold; font-style: italic;&quot;&gt;center&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;override&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; cent; &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Color&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold; font-style: italic;&quot;&gt;color&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;override&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; col; &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;

    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ...&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;private&lt;/span&gt;:
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Point&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;cent&lt;/span&gt;;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;rad&lt;/span&gt;;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Color&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;col&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
这样，接口变得更稳定。但是成员函数的实现工作就更多了。比如每一个继承类都要实现一个 &lt;code&gt;center&lt;/code&gt; 函数。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;例子&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
双重继承
&lt;/p&gt;

&lt;p&gt;
我们如何从继承层级中获得稳定性，同时又获得可重用性呢？一个流行的方法是双重层级。可以通过多种方法实现。这里，我们使用多继承实现。
&lt;/p&gt;

&lt;p&gt;
首先，我们设计一个接口类层级：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Shape&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// pure interface&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;public&lt;/span&gt;:
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;virtual&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Point&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold; font-style: italic;&quot;&gt;center&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;0&lt;/span&gt;;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;virtual&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Color&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold; font-style: italic;&quot;&gt;color&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;0&lt;/span&gt;;

    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;virtual&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold; font-style: italic;&quot;&gt;rotate&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;0&lt;/span&gt;;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;virtual&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold; font-style: italic;&quot;&gt;move&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Point&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;p&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;0&lt;/span&gt;;

    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;virtual&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold; font-style: italic;&quot;&gt;redraw&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;0&lt;/span&gt;;

    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ...&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Circle&lt;/span&gt; : &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;virtual&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Shape&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// pure interface&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;public&lt;/span&gt;:
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;virtual&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold; font-style: italic;&quot;&gt;radius&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;0&lt;/span&gt;;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ...&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
要利用接口，我们必须提供实现类（此处，用 Impl 名字空间的同名类）：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Impl&lt;/span&gt;::&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Shape&lt;/span&gt; : &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;virtual&lt;/span&gt; ::&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Shape&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// implementation&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;public&lt;/span&gt;:
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// constructors, destructor&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ...&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Point&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold; font-style: italic;&quot;&gt;center&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;override&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;/* ... */&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Color&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold; font-style: italic;&quot;&gt;color&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;override&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;/* ... */&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;

    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold; font-style: italic;&quot;&gt;rotate&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;override&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;/* ... */&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold; font-style: italic;&quot;&gt;move&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Point&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;p&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;override&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;/* ... */&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;

    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold; font-style: italic;&quot;&gt;redraw&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;override&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;/* ... */&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;

    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ...&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
这里 Shape 这个例子不太好实现，但是只是作为一个简单的例子，作为展示。
&lt;/p&gt;


&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Impl&lt;/span&gt;::&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Circle&lt;/span&gt; : &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;virtual&lt;/span&gt; ::&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Circle&lt;/span&gt;, &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Impl&lt;/span&gt;::&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Shape&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
&lt;span style=&quot;color: #3F7F5F;&quot;&gt;// implementation&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;public&lt;/span&gt;:
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// constructors, destructor&lt;/span&gt;

    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold; font-style: italic;&quot;&gt;radius&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;override&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;/* ... */&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ...&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
现在，我们可以扩展继承层级，添加一个 Smiley 类 （:-))：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Smiley&lt;/span&gt; : &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;virtual&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Circle&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// pure interface&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;public&lt;/span&gt;:
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ...&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Impl&lt;/span&gt;::&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Smiley&lt;/span&gt; : &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;virtual&lt;/span&gt; ::&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Smiley&lt;/span&gt;, &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Impl&lt;/span&gt;::&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Circle&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// implementation&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;public&lt;/span&gt;:
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// constructors, destructor&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ...&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
这里有两个层级：
&lt;/p&gt;

&lt;pre class=&quot;example&quot;&gt;
    interface: Smiley -&amp;gt; Circle -&amp;gt; Shape
    implementation: Impl::Smiley -&amp;gt; Impl::Circle -&amp;gt; Impl::Shape
&lt;/pre&gt;

&lt;p&gt;
因为每个实现都继承了接口又继承了实现基类，所以我们的到了一个晶格（ DAG ）：
&lt;/p&gt;

&lt;pre class=&quot;example&quot;&gt;
Smiley     -&amp;gt;         Circle     -&amp;gt;  Shape
  ^                     ^               ^
  |                     |               |
Impl::Smiley -&amp;gt; Impl::Circle -&amp;gt; Impl::Shape
&lt;/pre&gt;

&lt;p&gt;
如前所述，这只是构建双重层级的一个方法。
&lt;/p&gt;


&lt;p&gt;
然后，我们就可以直接使用实现的层级了，而不用通过抽象接口。
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;work_with_shape&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Shape&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;user&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Impl&lt;/span&gt;::&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Smiley&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;my_smiley&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;/* args */&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// create concrete shape&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ...&lt;/span&gt;
    my_smiley.&lt;span style=&quot;color: #3a5fcd; font-weight: bold; font-style: italic;&quot;&gt;some_member&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt;;        &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// use implementation class directly&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ...&lt;/span&gt;
    &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;work_with_shape&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;my_smiley&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;     &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// use implementation through abstract interface&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ...&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
这个方法的好处是，当实现的类中有抽象接口所不提供的成员时，或直接使用成员能够提供更好的优化时（如果实现的成员函数为 final ），比较有用。
&lt;/p&gt;


&lt;p&gt;
注意
&lt;/p&gt;

&lt;p&gt;
另一个相关的技术是接口和实现的分离，即 &lt;a href=&quot;http://kimi.im/2022-04-02-cppcoreguidelines-i27&quot;&gt;Pimpl&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;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;标注将继承类类型转换为基类，而且基类有数据和虚函数的地方。（除了在继承类中调用基类函数的地方）&lt;/li&gt;
&lt;/ul&gt;
</content>
 </entry>
 
 <entry>
   <title>Zip Slip 漏洞</title>
   <link href="http://kimi.im/2022-12-10-zip-slip"/>
   <updated>2022-12-10T00:00:00+00:00</updated>
   <id>http://kimi.im/zip-slip</id>
   <content type="html">&lt;p&gt;
zip、7zip、winrar 之类工具应该是 PC 时代，人人都需要的装机软件了。他们的主要功能就是把一堆文件，打包成一个文件包，然后共享给别人，别人用一个反向的过程把文件包里的文件提取出来使用。程序在打包的同时会通过压缩算法，减少文件数据大小。而且因为压缩成了一个文件，传送也更方便，速度也更快。
&lt;/p&gt;

&lt;p&gt;
但是，就是这么一个简单的小小的压缩解压过程，也有大漏洞。其中一个就是
Zip Slip。我试着翻译为“压缩脱落”。
&lt;/p&gt;

&lt;p&gt;
其实 Zip Slip 漏洞已经发现好多年了，是 Snyk Security 团队最早在2018年6
月5日公布的。而且这个漏洞在各大开发语言项目中都有存在，包括 JavaScript、
Java、Ruby、.NET、Go 等。
&lt;/p&gt;

&lt;p&gt;
Zip Slip 是 Directory Traversal（路径遍历）漏洞的一种形式。黑客通过这个漏洞把一个可执行文件保存到被攻击机器的任意位置，然后通过远程执行，或者让用户不小心执行这个文件，破坏系统、获取控制权、访问系统数据。
&lt;/p&gt;

&lt;p&gt;
黑客利用 Zip Slip 漏洞，分三步开展攻击：
&lt;/p&gt;
&lt;ol class=&quot;org-ol&quot;&gt;
&lt;li&gt;利用特殊工具，篡改压缩包，添加一个特殊解压路径的恶意程序&lt;/li&gt;
&lt;li&gt;利用压缩包接收方的含有漏洞的加压程序/代码，把恶意程序解压到特定的系统路径&lt;/li&gt;
&lt;li&gt;执行恶意程序：自动执行、定时任务执行、或者远程执行&lt;/li&gt;
&lt;/ol&gt;


&lt;p&gt;
一般来说，我们创建压缩包的时候，都是把某个文件夹里的文件打包在一起。比如以下文件内容：
&lt;/p&gt;

&lt;pre class=&quot;example&quot; id=&quot;orgbb16b44&quot;&gt;
-rw-r--r-- 1 Aug 20 22:32 Makefile
-rw-r--r-- 1 Aug 20 21:15 Makefile.in
drwxr-xr-x 1 Jun  9 20:47 modules
drwxr-xr-x 1 Aug 20 21:15 msdos
drwxr-xr-x 1 Aug 20 22:39 native-lisp
drwxr-xr-x 1 Aug 20 22:32 nextstep
drwxr-xr-x 1 Aug 20 22:33 nt
drwxr-xr-x 1 Aug 20 22:32 oldXMenu
-rw-r--r-- 1 Jun  9 20:47 README
drwxr-xr-x 1 Aug 21 06:48 src
drwxr-xr-x 1 Aug 20 22:32 test
&lt;/pre&gt;

&lt;p&gt;
但是，黑客可以利用工具把解压到特定路径的恶意程序放进压缩包里，比如：
&lt;/p&gt;

&lt;pre class=&quot;example&quot; id=&quot;org6de4304&quot;&gt;
-rw-r--r-- 1 Aug 20 22:31 ../../../../../../../../tmp/evil.sh
-rw-r--r-- 1 Aug 20 22:32 Makefile
-rw-r--r-- 1 Aug 20 21:15 Makefile.in
drwxr-xr-x 1 Jun  9 20:47 modules
drwxr-xr-x 1 Aug 20 21:15 msdos
drwxr-xr-x 1 Aug 20 22:39 native-lisp
drwxr-xr-x 1 Aug 20 22:32 nextstep
drwxr-xr-x 1 Aug 20 22:33 nt
drwxr-xr-x 1 Aug 20 22:32 oldXMenu
-rw-r--r-- 1 Jun  9 20:47 README
drwxr-xr-x 1 Aug 21 06:48 src
drwxr-xr-x 1 Aug 20 22:32 test
&lt;/pre&gt;

&lt;p&gt;
在漏洞发现之前，大部分解压程序都是不检查压缩包里文件名是否合法。这样，解压的过程，就会把 evil.sh 解压缩到这个地方：
&lt;code&gt;/../../../../../../../../tmp/evil.sh&lt;/code&gt; 根据路径访问规则， &lt;code&gt;..&lt;/code&gt; 表示上层文件夹，如果上层文件夹是根文件夹，就保持在根文件夹。这样，这个恶意程序就被解压到了 &lt;code&gt;/tmp/evil.sh&lt;/code&gt;
&lt;/p&gt;

&lt;p&gt;
这样，黑客就在系统中安装了恶意代码，等着触发执行了。
&lt;/p&gt;

&lt;p&gt;
下面来看看各种语言中的漏洞代码：
&lt;/p&gt;

&lt;p&gt;
JAVA：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-java&quot;&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Enumeration&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;ZipEntry&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;entries&lt;/span&gt; &amp;#8203;=&amp;#8203; zip&amp;#8203;.&amp;#8203;getEntries&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;while&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;entries&amp;#8203;.&amp;#8203;hasMoreElements&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;ZipEntry&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;e&lt;/span&gt; &amp;#8203;=&amp;#8203; entries.nextElement&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt;;
&amp;#8680;  File f = &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;File&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;destinationDir, e.getName&lt;span style=&quot;color: #909183;&quot;&gt;()&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;InputStream&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;input&lt;/span&gt; &amp;#8203;=&amp;#8203; zip&amp;#8203;.&amp;#8203;getInputStream&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;e&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
    IOUtils&amp;#8203;.&amp;#8203;copy&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;input, write&lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;f&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
JavaScript
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-javascript&quot;&gt;&amp;#8203;self.on&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #2A00FF;&quot;&gt;&apos;entry&apos;&lt;/span&gt;, &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;function&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;entry&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;
    &amp;#8203;entry.pipe&lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;Writer&lt;span style=&quot;color: #709870;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #907373;&quot;&gt;{&lt;/span&gt;
&amp;#8680;      path: path.join&lt;span style=&quot;color: #6276ba;&quot;&gt;(&lt;/span&gt;opts.path,entry.path&lt;span style=&quot;color: #6276ba;&quot;&gt;)&lt;/span&gt;
    &amp;#8203;&lt;span style=&quot;color: #907373;&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color: #709870;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
.NET
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-csharp&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;static&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;WriteToDirectory&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;IArchiveEntry&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;entry&lt;/span&gt;,
                                    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;string&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;destDirectory&lt;/span&gt;,
                                    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;ExtractionOptions&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;options&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;){&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;string&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;file&lt;/span&gt; = Path.&lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;GetFileName&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;entry.Key&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
&amp;#8680;  &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;string&lt;/span&gt; destFileName = Path.&lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;Combine&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;destDirectory, file&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
    entry.&lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;WriteToFile&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;destFileName, options&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
GO
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-go&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;func&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;rarFormat&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;Read&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;input&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;io.Reader&lt;/span&gt;, &lt;span style=&quot;color: #000000;&quot;&gt;dest&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;string&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #000000;&quot;&gt;rr&lt;/span&gt; := rardecode.&lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;NewReader&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;input, &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;&quot;&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;for&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;
        &lt;span style=&quot;color: #000000;&quot;&gt;header&lt;/span&gt; := rr.&lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;Next&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;()&lt;/span&gt;
&amp;#8680;          &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;writeNewFile&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;filepath.&lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;Join&lt;/span&gt;&lt;span style=&quot;color: #709870;&quot;&gt;(&lt;/span&gt;dest, &amp;#8203;header.Name&amp;#8203;&lt;span style=&quot;color: #709870;&quot;&gt;)&lt;/span&gt;, rr, header.&lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;Mode&lt;/span&gt;&lt;span style=&quot;color: #709870;&quot;&gt;()&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt;
    &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
要修复漏洞，其实也很简单，就是在拼接文件路径的时候，检查一下路径是否合法。具体代码就不一一介绍了。
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines C.128 必须指定虚函数为 virtual, override 或 final</title>
   <link href="http://kimi.im/2022-12-10-cppcoreguidelines-c128"/>
   <updated>2022-12-10T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-c128</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
C.128: Virtual functions should specify exactly one of &lt;code&gt;virtual&lt;/code&gt;,
&lt;code&gt;override&lt;/code&gt;, or &lt;code&gt;final&lt;/code&gt;
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;理由&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
更好的可读性。更快的检测到错误。明确指定是&lt;code&gt;virtual&lt;/code&gt;, &lt;code&gt;override&lt;/code&gt;或 &lt;code&gt;final&lt;/code&gt;,
可以更清楚的说明代码意图，让编译器捕捉到基类和继承类之间的类型不匹配错误。然而，添加两个以上这三个关键字就多余了，也容易导致错误。
&lt;/p&gt;

&lt;p&gt;
简单的说：
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;&lt;code&gt;virtual&lt;/code&gt; 只意味着“这是一个新的虚函数”&lt;/li&gt;
&lt;li&gt;&lt;code&gt;override&lt;/code&gt; 只意味着“这是不是一个 &lt;code&gt;final&lt;/code&gt; 的重载”&lt;/li&gt;
&lt;li&gt;&lt;code&gt;final&lt;/code&gt; 只意味着“这是一个 &lt;code&gt;final&lt;/code&gt; 的重载”&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;
&lt;b&gt;例子&lt;/b&gt;
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-bad src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;struct&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;B&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold; font-style: italic;&quot;&gt;f1&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;virtual&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold; font-style: italic;&quot;&gt;f2&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt;;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;virtual&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold; font-style: italic;&quot;&gt;f3&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ...&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;struct&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;D&lt;/span&gt; : &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;B&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold; font-style: italic;&quot;&gt;f1&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;        &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// bad (hope for a warning): D::f1() hides B::f1()&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold; font-style: italic;&quot;&gt;f2&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt;;  &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// bad (but conventional and valid): no explicit override&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold; font-style: italic;&quot;&gt;f3&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;double&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;     &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// bad (hope for a warning): D::f3() hides B::f3()&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ...&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;
&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;
&lt;b&gt;例子&lt;/b&gt;
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;struct&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Better&lt;/span&gt; : &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;B&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold; font-style: italic;&quot;&gt;f1&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;override&lt;/span&gt;;        &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// error (caught): Better::f1() hides B::f1()&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold; font-style: italic;&quot;&gt;f2&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;override&lt;/span&gt;;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold; font-style: italic;&quot;&gt;f3&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;double&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;override&lt;/span&gt;;     &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// error (caught): Better::f3() hides B::f3()&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ...&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;
&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;
&lt;b&gt;讨论&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
我们想避免某些类型的错误：
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;隐式的虚函数：程序员想设计一个函数为隐式的虚函数，事实上也是虚函数（但是读代码的人分辩不出来）；或者程序员计划设计一个隐式的虚函数，但是其实上不是虚函数（比如因为某些席位的参数列表不匹配）；或者程序员不想把一个函数设计成虚函数，但是其实上是虚函数（因为该函数刚好和基类的虚函数签名一致）。&lt;/li&gt;
&lt;li&gt;隐式的重载：程序员计划设计一个函数是重载函数，事实上也是一个重载函数（但是读代码的人看不出来）；或者程序员计划设计一个函数为重载函数，但是其实上不是（比如，因为某些细微的参数列表不匹配）；或者程序员不想把一个函数设计成重载函数，但是其实上是一个重载（因为刚好该函数与基类的虚函数签名一致，注意，不论该函数是声明为虚函数还是非虚函数，这个问题都可能出现。因为程序员可能计划创建一个新的虚函数或者一个新的非虚函数）。&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;
&lt;b&gt;注意&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
当一个类被声明为 &lt;code&gt;final&lt;/code&gt; 的时候，不管你把一个虚函数设置为 &lt;code&gt;override&lt;/code&gt; 或
&lt;code&gt;final&lt;/code&gt; 无关紧要了。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;注意&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
减少使用 &lt;code&gt;final&lt;/code&gt; 函数，因为 &lt;code&gt;final&lt;/code&gt; 不会使得代码更好，只是防止被重载。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;强化&lt;/b&gt;
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;比较基类和派生类中的虚函数名字，标记用了同一个名字，却不是重载的情况&lt;/li&gt;
&lt;li&gt;标记没有用 &lt;code&gt;override&lt;/code&gt; 或 &lt;code&gt;final&lt;/code&gt; 的重载函数&lt;/li&gt;
&lt;li&gt;标记使用了一个以上&lt;code&gt;virtual&lt;/code&gt;, &lt;code&gt;override&lt;/code&gt;和 &lt;code&gt;final&lt;/code&gt; 的函数声明&lt;/li&gt;
&lt;/ul&gt;
</content>
 </entry>
 
 <entry>
   <title>单词本：vandalism</title>
   <link href="http://kimi.im/2022-12-10-english-vandalism"/>
   <updated>2022-12-10T00:00:00+00:00</updated>
   <id>http://kimi.im/english-vandalism</id>
   <content type="html">&lt;p&gt;
最近从事信息安全相关的工作，所以时不时的，要参考下相关标准。安全，相对的就是破坏行为了。比如通信系统安全标准 IEC 52351-1 中写道：
&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;
In particular, although access measures which permit only authorized
personnel into substations have been implemented primarily for safety
reasons, electronic monitoring of these safety measures can also help
to prevent some deliberate attacks, such as &lt;b&gt;vandalism&lt;/b&gt; and theft.
&lt;/p&gt;

&lt;p&gt;
虽然主要是因为安全的原因，发电厂会设置访问控制措施确保只有有权限的相关人员才可以进入。这些电子监控安全设施也能组织一些蓄意攻击时间，比如故意破坏和偷盗。
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;
这里有一个词 vandalism，意思是故意破坏财产的行为。
&lt;/p&gt;

&lt;p&gt;
故事要从 1500 多年前说起。那时候日耳曼民族有个叫汪达尔（Vandal）的部落。公元 455 年，在他们的国王根塞里克（Genseric）的率领下，攻占了洗劫了罗马城。基于这一历史事件，vandal 就和破坏行为联系在了一起。18 世纪一名叫
Henry Gregoire 的法国主教根据 vandal 创造了 vandalisme 一词表示破坏行为。英语 vandalism 就是从法语 vandalisme 转变过来的。
&lt;/p&gt;

&lt;p&gt;
其实还有比 Vandal 人更强的部族，那就是匈奴人，就是被我们汉朝驱赶掉的匈奴人，跑到欧洲北部，把 Vandal 人驱赶到了迦太基（Carthage），也就是现在北非的突尼斯（Tunisia）。所以其实 Vandal 这个词在词源上就有 wanderer
漫游者的意思。 不过根据史学家介绍 Vandal 人是跟教皇利奥一世协商过，只是打劫财富，并没有破坏罗马城建筑。
&lt;/p&gt;

&lt;p&gt;
Vandal 人的报复很快就到来。在 Ganseric 国王死后不久的 533 年，罗马人占领北非，夺回被抢走的财富，驱逐的 Vandal 人。
&lt;/p&gt;

&lt;p&gt;
还有一个动词派生词 vandalize，就是肆意毁坏的意思。
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines C.127 有虚函数的类应该也要有虚的或保护的析构函数</title>
   <link href="http://kimi.im/2022-12-09-cppcoreguidelines-c127"/>
   <updated>2022-12-09T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-c127</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
C.127: A class with a virtual function should have a virtual or protected destructor
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;理由&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
类如果有虚函数，那么我们经常是通过其基类类型的指针间接访问使用这个类。最后用户必须调用 &lt;code&gt;delete&lt;/code&gt; 删除其基类类型的指针。而且，我们通常会通过其基类的智能指针使用该类。因此，基类的析构函数应该是公开的虚函数。
&lt;/p&gt;

&lt;p&gt;
不常见的情况是，如果不允许通过基类的指针删除对象，可以将析构函数设置为保护的非虚函数。see &lt;a href=&quot;http://kimi.im/2022-09-02-cppcoreguidelines-c35&quot;&gt;C.35&lt;/a&gt;
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;例子&lt;/b&gt;
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-bad src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;struct&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;B&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;virtual&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold; font-style: italic;&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;0&lt;/span&gt;;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ... no user-written destructor, defaults to public non-virtual ...&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;

&lt;span style=&quot;color: #3F7F5F;&quot;&gt;// bad: derived from a class without a virtual destructor&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;struct&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;D&lt;/span&gt; : &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;B&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;string&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;s&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;default&quot;&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ...&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;use&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;unique_ptr&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;B&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;p&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;make_unique&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;D&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt;;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ...&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// undefined behavior, might call B::~B only and leak the string&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;
&lt;b&gt;注意&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
很多人不遵循本条建议，他们计划只通过共享指针&lt;code&gt;shared_ptr&lt;/code&gt;使用这些类，如
&lt;code&gt;std::shared_ptr&amp;lt;B&amp;gt; p = std::make_shared&amp;lt;D&amp;gt;(args)&lt;/code&gt; 。因为共享指针会处理好删除操作，所以不会导致不恰当的使用基类的 &lt;code&gt;delete&lt;/code&gt; 而造成的内存泄漏。人们习惯了这个操作，会产生一种不会出错的假象。但是这条指南很重要。如果有人使用&lt;code&gt;make_unique&lt;/code&gt;分配内存怎么办？这样会有不安全的行为。除非 &lt;code&gt;B&lt;/code&gt; 的作者确保别人不会误用 &lt;code&gt;B&lt;/code&gt; ，比如将所有的构造函数设置为 &lt;code&gt;private&lt;/code&gt; ，并提供一个工厂函数，确保通过&lt;code&gt;make_shared&lt;/code&gt;分配资源。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;强化&lt;/b&gt;
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;类如果有虚函数，则应该有一个析构函数，要么是公开的虚函数，要么是保护的非虚函数。&lt;/li&gt;
&lt;li&gt;标记这类情况：删除一个类对象的时候用了 &lt;code&gt;delete&lt;/code&gt; 而这个类有虚函数，但是没有虚析构函数。&lt;/li&gt;
&lt;/ul&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines C.126 抽象类一般不需要编写构造函数</title>
   <link href="http://kimi.im/2022-12-08-cppcoreguidelines-c126"/>
   <updated>2022-12-08T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-c126</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
C.126: An abstract class typically doesn&amp;rsquo;t need a user-written
constructor
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;理由&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
抽象类没有数据需要构造函数进行初始化。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;例子&lt;/b&gt;
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Shape&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;public&lt;/span&gt;:
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// no user-written constructor needed in abstract base class&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;virtual&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Point&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold; font-style: italic;&quot;&gt;center&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;0&lt;/span&gt;;    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// pure virtual&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;virtual&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold; font-style: italic;&quot;&gt;move&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Point&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;to&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;0&lt;/span&gt;;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ... more pure virtual functions...&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;virtual&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;~&lt;/span&gt;Shape&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{}&lt;/span&gt;                 &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// destructor&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Circle&lt;/span&gt; : &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Shape&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;public&lt;/span&gt;:
    &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;Circle&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Point&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;p&lt;/span&gt;, &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;rad&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;           &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// constructor in derived class&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Point&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold; font-style: italic;&quot;&gt;center&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;override&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; x; &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;
&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;
&lt;b&gt;例外&lt;/b&gt;
&lt;/p&gt;

&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;某些情况下，基类的构造函数可能会有用，比如注册一个对象到某个地方，可能需要用到构造函数。&lt;/li&gt;
&lt;li&gt;极其少见的情况：抽象类要保留一些数据，给继承类共享（统计数据、 &lt;code&gt;debug&lt;/code&gt;
信息等）。这种类一般会有构造函数。但是请注意，这种类也倾向与要求虚继承。&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;
&lt;b&gt;强化&lt;/b&gt;
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;标记有构造函数的抽象类。&lt;/li&gt;
&lt;/ul&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines C.122 如果接口和实现要彻底分开，请使用抽象类作为接口</title>
   <link href="http://kimi.im/2022-12-07-cppcoreguidelines-c122"/>
   <updated>2022-12-07T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-c122</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
C.122: Use abstract classes as interfaces when complete separation of
interface and implementation is needed
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;理由&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
表达应用二进制接口范围。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;例子&lt;/b&gt;
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;struct&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Device&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;virtual&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;~&lt;/span&gt;Device&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;default&lt;/span&gt;;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;virtual&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold; font-style: italic;&quot;&gt;write&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;span&lt;/span&gt;&lt;span style=&quot;color: #909183; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;char&lt;/span&gt;&lt;span style=&quot;color: #909183; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;outbuf&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;0&lt;/span&gt;;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;virtual&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold; font-style: italic;&quot;&gt;read&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;span&lt;/span&gt;&lt;span style=&quot;color: #909183; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;char&lt;/span&gt;&lt;span style=&quot;color: #909183; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;inbuf&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;0&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;D1&lt;/span&gt; : &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Device&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ... data ...&lt;/span&gt;

    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold; font-style: italic;&quot;&gt;write&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;span&lt;/span&gt;&lt;span style=&quot;color: #909183; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;char&lt;/span&gt;&lt;span style=&quot;color: #909183; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;outbuf&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;override&lt;/span&gt;;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold; font-style: italic;&quot;&gt;read&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;span&lt;/span&gt;&lt;span style=&quot;color: #909183; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;char&lt;/span&gt;&lt;span style=&quot;color: #909183; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;inbuf&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;override&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;D2&lt;/span&gt; : &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Device&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ... different data ...&lt;/span&gt;

    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold; font-style: italic;&quot;&gt;write&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;span&lt;/span&gt;&lt;span style=&quot;color: #909183; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;char&lt;/span&gt;&lt;span style=&quot;color: #909183; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;outbuf&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;override&lt;/span&gt;;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold; font-style: italic;&quot;&gt;read&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;span&lt;/span&gt;&lt;span style=&quot;color: #909183; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;char&lt;/span&gt;&lt;span style=&quot;color: #909183; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;inbuf&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;override&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;
&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;
用户可以通过 &lt;code&gt;Device&lt;/code&gt; 的接口无差别的使用 &lt;code&gt;D1&lt;/code&gt; 或 &lt;code&gt;D2&lt;/code&gt; 。进一步，如果我们更新了 &lt;code&gt;D1&lt;/code&gt; 和 &lt;code&gt;D2&lt;/code&gt; ，变得二进制不兼容，我们依然可以确保使用 &lt;code&gt;Device&lt;/code&gt; 访问所有接口。
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines C.121 如果基类用来表示接口，请将其设为纯抽象类</title>
   <link href="http://kimi.im/2022-12-06-cppcoreguidelines-c121"/>
   <updated>2022-12-06T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-c121</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
C.121: If a base class is used as an interface, make it a pure
abstract class
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;理由&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
一个类如果不含有数据，会更加稳定。接口一般应该由公开的纯虚函数+一个默认或空的虚析构函数组成。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;例子&lt;/b&gt;
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;My_interface&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;public&lt;/span&gt;:
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ...only pure virtual functions here ...&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;virtual&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;~&lt;/span&gt;My_interface&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{}&lt;/span&gt;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// or =default&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;
&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;
&lt;b&gt;例子&lt;/b&gt;
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-bad src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Goof&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;public&lt;/span&gt;:
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ...only pure virtual functions here ...&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// no virtual destructor&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Derived&lt;/span&gt; : &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Goof&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;string&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;s&lt;/span&gt;;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ...&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;use&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;unique_ptr&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Goof&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;p&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Derived&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;here we go&quot;&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;;
    &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;p.&lt;span style=&quot;color: #3a5fcd; font-weight: bold; font-style: italic;&quot;&gt;get&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;()&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// use Derived through the Goof interface&lt;/span&gt;
    &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;g&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;p.&lt;span style=&quot;color: #3a5fcd; font-weight: bold; font-style: italic;&quot;&gt;get&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;()&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// use Derived through the Goof interface&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// leak&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
&lt;code&gt;Derived&lt;/code&gt; 对象通过 &lt;code&gt;Goof&lt;/code&gt; 的接口函数进行析构，因此它的字符串内存泄漏，因为
&lt;code&gt;Goof&lt;/code&gt; 的析构函数并不会处理 &lt;code&gt;Derived&lt;/code&gt; 的字符串析构。如果 &lt;code&gt;Goof&lt;/code&gt; 有一个虚的析构函数，就可以确保 &lt;code&gt;Derived&lt;/code&gt; 的析构正常。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;强化&lt;/b&gt;
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;（警告）如果某个类中有成员数据，又有一个不是从基类继承的可重载的虚函数（非 &lt;code&gt;final&lt;/code&gt; ）&lt;/li&gt;
&lt;/ul&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines C.120 用类层级表示具有层级继承结构的概念</title>
   <link href="http://kimi.im/2022-12-05-cppcoreguidelines-c120"/>
   <updated>2022-12-05T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-c120</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
C.120: Use class hierarchies to represent concepts with inherent
hierarchical structure (only)
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;理由&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
在代码中直接表达设计思想，更容易理解和维护。请确保基类所表达的思想，保持在继承类中一致，并且没有其他更好的方式表达这种紧耦合的继承。
&lt;/p&gt;

&lt;p&gt;
如果使用成员数据可以实现相同的目的，就不要使用继承。这种情况下，通常在继承类中，会重载基类的虚函数，或访问受保护的基类成员数据。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;例子&lt;/b&gt;
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;DrawableUIElement&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;public&lt;/span&gt;:
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;virtual&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold; font-style: italic;&quot;&gt;render&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;0&lt;/span&gt;;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ...&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;AbstractButton&lt;/span&gt; : &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;DrawableUIElement&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;public&lt;/span&gt;:
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;virtual&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold; font-style: italic;&quot;&gt;onClick&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;0&lt;/span&gt;;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ...&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;PushButton&lt;/span&gt; : &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;AbstractButton&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold; font-style: italic;&quot;&gt;render&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;override&lt;/span&gt;;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold; font-style: italic;&quot;&gt;onClick&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;override&lt;/span&gt;;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ...&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Checkbox&lt;/span&gt; : &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;AbstractButton&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
&lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ...&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;
&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;
&lt;b&gt;例子&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
不要用类继承层级来表达非层级领域的概念。
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-bad src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;template&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;typename&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Container&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;public&lt;/span&gt;:
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// list operations:&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;virtual&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold; font-style: italic;&quot;&gt;get&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;0&lt;/span&gt;;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;virtual&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold; font-style: italic;&quot;&gt;put&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;0&lt;/span&gt;;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;virtual&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold; font-style: italic;&quot;&gt;insert&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Position&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;0&lt;/span&gt;;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ...&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// vector operations:&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;virtual&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt; operator&lt;span style=&quot;color: #7388d6;&quot;&gt;[]&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;0&lt;/span&gt;;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;virtual&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold; font-style: italic;&quot;&gt;sort&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;0&lt;/span&gt;;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ...&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// tree operations:&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;virtual&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold; font-style: italic;&quot;&gt;balance&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;0&lt;/span&gt;;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ...&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
此处，很多继承类无法很好实现这些接口函数。因此基类成了实现过程的负担。更进一步， &lt;code&gt;Container&lt;/code&gt; 的用户无法依靠成员函数高效地执行某些操作。还可能会抛出异常。因此用户要依靠运行时检查或者干脆不使用这些过于通用的接口，转而利用运行时类型查询来调用特定的接口（比如&lt;code&gt;dynamic_cast&lt;/code&gt;）。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;强化&lt;/b&gt;
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;查看是否存在这种情况：类有很多成员，并且这些成员函数什么也不做，只是抛出异常。&lt;/li&gt;
&lt;li&gt;标记非公开的基类 B 的子类 D 没有重载 B 中的虚函数或者会访问 B 中的保护成员。并且 B 不是以下类型：空类，D 的模板参数，D 的模板实例化。&lt;/li&gt;
&lt;/ul&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines C.109 如何一个资源句柄有指针的语义，提供 * 和 -> 操作</title>
   <link href="http://kimi.im/2022-12-04-cppcoreguidelines-c109"/>
   <updated>2022-12-04T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-c109</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
C.109: If a resource handle has pointer semantics, provide &lt;code&gt;*&lt;/code&gt; and &lt;code&gt;-&amp;gt;&lt;/code&gt;
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;理由&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
这些操作是指针应该提供的。这样符合用户熟悉的习惯。
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines C.104 赋予容器一个默认构造函数构造一个空容器</title>
   <link href="http://kimi.im/2022-12-03-cppcoreguidelines-c104"/>
   <updated>2022-12-03T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-c104</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
C.104: Give a container a default constructor that sets it to empty
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;理由&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
这样做可以使得容器更正规。更符合用户熟悉的习惯。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;例子&lt;/b&gt;
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-C++&quot;&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;vector&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Sorted_sequence&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;string&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;vs&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;100&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// 100 Sorted_sequences each with the value &quot;&quot;&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;
</content>
 </entry>
 
 <entry>
   <title>单词本：expunge</title>
   <link href="http://kimi.im/2022-12-03-english-expunge"/>
   <updated>2022-12-03T00:00:00+00:00</updated>
   <id>http://kimi.im/english-expunge</id>
   <content type="html">&lt;p&gt;
昨天看美国NIST的一个关于基础设施安全的文档，写道：
&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;
Through careful monitoring, however, asset owners can either prevent
or identify and &lt;b&gt;expunge&lt;/b&gt; many attacks before they cause irrevocable
damage.
&lt;/p&gt;

&lt;p&gt;
尽管监控的很好，然而很多资产所有者不能在黑客攻击产生不可挽回的损坏之前，阻止织或识别排除黑客攻击。
&lt;/p&gt;
&lt;/blockquote&gt;


&lt;p&gt;
这里有一个长得挺奇怪的单词 expunge，从记忆、清单中抹去、除去、删去的意思。比如：
&lt;/p&gt;

&lt;p&gt;
what happened just before the accident was expunged from his memory. 事故之前发生了什么事情，他都不记得了，都从他记忆中抹去了。
&lt;/p&gt;

&lt;p&gt;
这个词来自拉丁语 expungere，ex- 是 out，出去；pungere 是刺孔、刺穿。合起来就是刺穿出去，或戳着挑出去？
&lt;/p&gt;

&lt;p&gt;
这令我想到了德语中的 der Punkt，就是英语里 point “小点”的意思：
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;grüne Punkte in den Augen 绿色小点在眼中&lt;/li&gt;
&lt;li&gt;das Schiff war nur noch ein kleiner Punkt in der Ferne 小船在窗子中只是一个小小的点&lt;/li&gt;
&lt;li&gt;zwischen den Punkten A und B AB两点之间&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
其实 Punkt 跟 Point 都是来自拉丁语 pungere 的过去分词 punctus/punctum，在德语里转身一变成了 Punkt，在英语里又一变成了 Point。
&lt;/p&gt;

&lt;p&gt;
医学术语沿用了拉丁语比较多，所以 punctum 是色斑的意思，直接用了拉丁语。
&lt;/p&gt;

&lt;p&gt;
时间如果在点上的话，是不是就是很准？所以 punctual 的意思是“准时的，精准的”。再延伸下有 punctually 准时地，punctuality 准时性。对应的德语就是 punktlich，punktlichkeit。法语里又转身一变成了 ponctuel，比如 je
suis ponctuel à un rendez-vous.
&lt;/p&gt;

&lt;p&gt;
另外，标点符号 punctuation，也是小小的点。法语 ponctuation，德语 das
Interpunktion 似乎比英语法语多了个 Inter-，标点符号么，就是在句子中间用的。
&lt;/p&gt;

&lt;p&gt;
那么，既然拉丁语里 pungere 是刺孔的意思，英语里对应的就是 puncture 小孔、刺伤、刺穿、戳破。形容词形式 puncturable 可刺穿的。
&lt;/p&gt;

&lt;p&gt;
英语里 acu- 前缀表示用小针的，所以 acupuncture 就是咱们中国的针灸疗法，对……施行针刺疗法。acupuncturist 就是针灸师。德语的拼写规则会把k发音的c
写成k，所以die Akupunktur 是德语针灸之意。
&lt;/p&gt;

&lt;p&gt;
英语 com- 前缀是together、一起的意思。compunctious，难道是针刺在一起的意思？其实是内疚的、后悔的意思。就好象很多针刺在心里的感觉，一定不太睡得着，很后悔。
&lt;/p&gt;

&lt;p&gt;
最后，辣的感觉就好象舌尖上一点一点的刺痛，所以 pungent 就是辛辣的、刺激性的意思。名词刺激性为 pungency。
&lt;/p&gt;

&lt;p&gt;
这几个单词的关系大概是这样：
&lt;/p&gt;

&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
&lt;!-- Do not edit this file with editors other than diagrams.net --&gt;
&lt;!DOCTYPE svg PUBLIC &quot;-//W3C//DTD SVG 1.1//EN&quot; &quot;http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd&quot;&gt;
&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; xmlns:xlink=&quot;http://www.w3.org/1999/xlink&quot; version=&quot;1.1&quot; width=&quot;671px&quot; height=&quot;453px&quot; viewBox=&quot;-0.5 -0.5 671 453&quot; content=&quot;&amp;lt;mxfile host=&amp;quot;Electron&amp;quot; modified=&amp;quot;2022-12-03T01:38:27.363Z&amp;quot; agent=&amp;quot;5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) draw.io/20.2.3 Chrome/102.0.5005.167 Electron/19.0.11 Safari/537.36&amp;quot; etag=&amp;quot;XdDkm5pL3AITTGMkZ0vU&amp;quot; version=&amp;quot;20.2.3&amp;quot; type=&amp;quot;device&amp;quot;&amp;gt;&amp;lt;diagram id=&amp;quot;95FAv2xy68WByyqJvQK_&amp;quot; name=&amp;quot;Page-1&amp;quot;&amp;gt;7Zpdb6M4FIZ/jS9nBTaflyEhuyvNSKOttDu9ZMAD3jo4ImaS7K9fG5wAMaQdqY1R2psWzrET+33s48MhAC03h9+rZFt8YRmmAFrZAaAVgDAMoPgrDcfW4AZBa8grkrUmuzM8kP+wMlrKWpMM7wYNOWOUk+3QmLKyxCkf2JKqYvthsx+MDr91m+RYMzykCdWt/5CMF601gH5n/wOTvOCn6aHWsUlObdVEdkWSsX3PhGKAlhVjvL3aHJaYSulOsrT91hPe87gqXPKXdPDdv7hj8d23Gv39GH0lK//z4yfbUYPjx9OEK1aXGZadLIAiVvGC5axM6GfGtsJoC+O/mPOjQpXUnAlTwTdUecV4quM31b+5eex7Voe+a3VUd+04cKbR6OanTDtWVym+Nim1TJIqx/xKO/dMQSxezDZYjEf0qzBNOPk5HEeillF+btdJLS6U2r+g/HlZdMrLyT+o25KV4l/0ijB+c2eOw0YmeajP/ZnQWn3Tti5zXGEdE6Ui+Eg6+4Jw/LBNmunvRfgbaq8+EVccH66rqE/61MFTy0RFTwep+30vFilT0QtDjvVGMjm6TIyIuUCPiq+OvlfiKpdXGRaX1te6fOJXQoz9vIpJlarVLYV6DVEddygqdHVRbXhLVW33xsGgHwp6keHtg4H7wmDgGI0F3geOYTvPKA7/A8ewnW8UR/CBY9guNJpI2jfGYSyRfCkO2zLJwx1LJJ94vdNzpMaRGE0wYTjMhdBILnTTBNObkG8z9ywSjaTmN84iw/cSmP0XRoLAZCDwx1ZyyuuETkQCStJixMVkJ1lUm/f6d2zT6z+YFJzw4xXNnzAZeYBtdZd9wRKBhb63DOvvzU7/cEp/Tlg5KfC4MxOjg9afJcdVw6lpNC8A2gYITQOQ/d9HKnha68/ngtDkEQDRB5DLhhOb6kbPrtZEjJJ13pEDQnqS71QvAhuOPfCyhGmZjj22XkBP0npa3M5JdrOrEJ9zeSWvbfxstaEmb8o2jYKEyWfLeQlo+7MTEI3t/ByPvbtoHelxdqpaF7veM60q1N8HgTgAUQzCSF0sEIh9EC5A4IB4DaIlCJYgdkEgvAsQeyBag8Dq2lxqLuTiQ2F3vGJPeMkoq7pD9Aeh9MIkcve8FLcplmmkMEjxSZrQhXJsSJbRqTrL8FR+DXqntzwneiMFg3AEHnozeHqpCsQhCKFk0xHqM1uDxXqszd3DQ/7zB+5t4emFsoaHBwK34eFJJPcPxr4oYAamuehln96G8UFggyjobSrd5cq/gf6S5W6QIXdmyPTCUUPBkvFOcoEg0ss/d4PD8S7OJWiah15IAjGSSYI6hZYgik6WlUwzghBEUOYSMurp78PuFhUyfQoh/amvIeTLg0jy8EHkvYNTSANjOqYh/XlxDIwn99BC/33F3YDxZgdGfw6VGBaWZPP+Dhtn5BH2lXiI2+7X1Y2v9wt1FP8P&amp;lt;/diagram&amp;gt;&amp;lt;/mxfile&amp;gt;&quot; style=&quot;background-color: rgb(255, 255, 255);&quot;&gt;&lt;defs/&gt;&lt;g&gt;&lt;path d=&quot;M 124.44 354.17 L 196.37 307.6&quot; fill=&quot;none&quot; stroke=&quot;rgb(0, 0, 0)&quot; stroke-miterlimit=&quot;10&quot; pointer-events=&quot;stroke&quot;/&gt;&lt;path d=&quot;M 200.78 304.75 L 196.8 311.49 L 196.37 307.6 L 193 305.62 Z&quot; fill=&quot;rgb(0, 0, 0)&quot; stroke=&quot;rgb(0, 0, 0)&quot; stroke-miterlimit=&quot;10&quot; pointer-events=&quot;all&quot;/&gt;&lt;path d=&quot;M 94.71 350.18 L 61.64 226.15&quot; fill=&quot;none&quot; stroke=&quot;rgb(0, 0, 0)&quot; stroke-miterlimit=&quot;10&quot; pointer-events=&quot;stroke&quot;/&gt;&lt;path d=&quot;M 60.29 221.08 L 65.47 226.94 L 61.64 226.15 L 58.71 228.75 Z&quot; fill=&quot;rgb(0, 0, 0)&quot; stroke=&quot;rgb(0, 0, 0)&quot; stroke-miterlimit=&quot;10&quot; pointer-events=&quot;all&quot;/&gt;&lt;ellipse cx=&quot;100&quot; cy=&quot;370&quot; rx=&quot;40&quot; ry=&quot;20&quot; fill=&quot;rgb(255, 255, 255)&quot; stroke=&quot;rgb(0, 0, 0)&quot; pointer-events=&quot;all&quot;/&gt;&lt;g transform=&quot;translate(-0.5 -0.5)&quot;&gt;&lt;switch&gt;&lt;foreignObject pointer-events=&quot;none&quot; width=&quot;100%&quot; height=&quot;100%&quot; requiredFeatures=&quot;http://www.w3.org/TR/SVG11/feature#Extensibility&quot; style=&quot;overflow: visible; text-align: left;&quot;&gt;&lt;div xmlns=&quot;http://www.w3.org/1999/xhtml&quot; style=&quot;display: flex; align-items: unsafe center; justify-content: unsafe center; width: 78px; height: 1px; padding-top: 370px; margin-left: 61px;&quot;&gt;&lt;div data-drawio-colors=&quot;color: rgb(0, 0, 0); &quot; style=&quot;box-sizing: border-box; font-size: 0px; text-align: center;&quot;&gt;&lt;div style=&quot;display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;&quot;&gt;pungere&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/foreignObject&gt;&lt;text x=&quot;100&quot; y=&quot;374&quot; fill=&quot;rgb(0, 0, 0)&quot; font-family=&quot;Helvetica&quot; font-size=&quot;12px&quot; text-anchor=&quot;middle&quot;&gt;pungere&lt;/text&gt;&lt;/switch&gt;&lt;/g&gt;&lt;rect x=&quot;350&quot; y=&quot;170&quot; width=&quot;120&quot; height=&quot;40&quot; rx=&quot;8.8&quot; ry=&quot;8.8&quot; fill=&quot;rgb(255, 255, 255)&quot; stroke=&quot;rgb(0, 0, 0)&quot; pointer-events=&quot;all&quot;/&gt;&lt;g transform=&quot;translate(-0.5 -0.5)&quot;&gt;&lt;switch&gt;&lt;foreignObject pointer-events=&quot;none&quot; width=&quot;100%&quot; height=&quot;100%&quot; requiredFeatures=&quot;http://www.w3.org/TR/SVG11/feature#Extensibility&quot; style=&quot;overflow: visible; text-align: left;&quot;&gt;&lt;div xmlns=&quot;http://www.w3.org/1999/xhtml&quot; style=&quot;display: flex; align-items: unsafe center; justify-content: unsafe center; width: 118px; height: 1px; padding-top: 190px; margin-left: 351px;&quot;&gt;&lt;div data-drawio-colors=&quot;color: rgb(0, 0, 0); &quot; style=&quot;box-sizing: border-box; font-size: 0px; text-align: center;&quot;&gt;&lt;div style=&quot;display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;&quot;&gt;point&lt;br /&gt;der Punkt&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/foreignObject&gt;&lt;text x=&quot;410&quot; y=&quot;194&quot; fill=&quot;rgb(0, 0, 0)&quot; font-family=&quot;Helvetica&quot; font-size=&quot;12px&quot; text-anchor=&quot;middle&quot;&gt;point...&lt;/text&gt;&lt;/switch&gt;&lt;/g&gt;&lt;path d=&quot;M 250.58 272.85 L 345.11 194.08&quot; fill=&quot;none&quot; stroke=&quot;rgb(0, 0, 0)&quot; stroke-miterlimit=&quot;10&quot; pointer-events=&quot;stroke&quot;/&gt;&lt;path d=&quot;M 349.14 190.72 L 346 197.89 L 345.11 194.08 L 341.52 192.51 Z&quot; fill=&quot;rgb(0, 0, 0)&quot; stroke=&quot;rgb(0, 0, 0)&quot; stroke-miterlimit=&quot;10&quot; pointer-events=&quot;all&quot;/&gt;&lt;path d=&quot;M 267.95 283.68 L 343.72 271.05&quot; fill=&quot;none&quot; stroke=&quot;rgb(0, 0, 0)&quot; stroke-miterlimit=&quot;10&quot; pointer-events=&quot;stroke&quot;/&gt;&lt;path d=&quot;M 348.9 270.18 L 342.57 274.79 L 343.72 271.05 L 341.42 267.88 Z&quot; fill=&quot;rgb(0, 0, 0)&quot; stroke=&quot;rgb(0, 0, 0)&quot; stroke-miterlimit=&quot;10&quot; pointer-events=&quot;all&quot;/&gt;&lt;path d=&quot;M 258.28 304.14 L 344.3 347.15&quot; fill=&quot;none&quot; stroke=&quot;rgb(0, 0, 0)&quot; stroke-miterlimit=&quot;10&quot; pointer-events=&quot;stroke&quot;/&gt;&lt;path d=&quot;M 349 349.5 L 341.17 349.5 L 344.3 347.15 L 344.3 343.24 Z&quot; fill=&quot;rgb(0, 0, 0)&quot; stroke=&quot;rgb(0, 0, 0)&quot; stroke-miterlimit=&quot;10&quot; pointer-events=&quot;all&quot;/&gt;&lt;path d=&quot;M 245.76 308.38 L 345.86 425.17&quot; fill=&quot;none&quot; stroke=&quot;rgb(0, 0, 0)&quot; stroke-miterlimit=&quot;10&quot; pointer-events=&quot;stroke&quot;/&gt;&lt;path d=&quot;M 349.27 429.15 L 342.06 426.11 L 345.86 425.17 L 347.37 421.56 Z&quot; fill=&quot;rgb(0, 0, 0)&quot; stroke=&quot;rgb(0, 0, 0)&quot; stroke-miterlimit=&quot;10&quot; pointer-events=&quot;all&quot;/&gt;&lt;path d=&quot;M 226.93 270.06 L 210.97 166.29&quot; fill=&quot;none&quot; stroke=&quot;rgb(0, 0, 0)&quot; stroke-miterlimit=&quot;10&quot; pointer-events=&quot;stroke&quot;/&gt;&lt;path d=&quot;M 210.17 161.1 L 214.69 167.49 L 210.97 166.29 L 207.78 168.56 Z&quot; fill=&quot;rgb(0, 0, 0)&quot; stroke=&quot;rgb(0, 0, 0)&quot; stroke-miterlimit=&quot;10&quot; pointer-events=&quot;all&quot;/&gt;&lt;ellipse cx=&quot;230&quot; cy=&quot;290&quot; rx=&quot;40&quot; ry=&quot;20&quot; fill=&quot;rgb(255, 255, 255)&quot; stroke=&quot;rgb(0, 0, 0)&quot; pointer-events=&quot;all&quot;/&gt;&lt;g transform=&quot;translate(-0.5 -0.5)&quot;&gt;&lt;switch&gt;&lt;foreignObject pointer-events=&quot;none&quot; width=&quot;100%&quot; height=&quot;100%&quot; requiredFeatures=&quot;http://www.w3.org/TR/SVG11/feature#Extensibility&quot; style=&quot;overflow: visible; text-align: left;&quot;&gt;&lt;div xmlns=&quot;http://www.w3.org/1999/xhtml&quot; style=&quot;display: flex; align-items: unsafe center; justify-content: unsafe center; width: 78px; height: 1px; padding-top: 290px; margin-left: 191px;&quot;&gt;&lt;div data-drawio-colors=&quot;color: rgb(0, 0, 0); &quot; style=&quot;box-sizing: border-box; font-size: 0px; text-align: center;&quot;&gt;&lt;div style=&quot;display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;&quot;&gt;punktus&lt;br /&gt;punkta&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/foreignObject&gt;&lt;text x=&quot;230&quot; y=&quot;294&quot; fill=&quot;rgb(0, 0, 0)&quot; font-family=&quot;Helvetica&quot; font-size=&quot;12px&quot; text-anchor=&quot;middle&quot;&gt;punktus...&lt;/text&gt;&lt;/switch&gt;&lt;/g&gt;&lt;rect x=&quot;350&quot; y=&quot;250&quot; width=&quot;120&quot; height=&quot;40&quot; rx=&quot;8.8&quot; ry=&quot;8.8&quot; fill=&quot;rgb(255, 255, 255)&quot; stroke=&quot;rgb(0, 0, 0)&quot; pointer-events=&quot;all&quot;/&gt;&lt;g transform=&quot;translate(-0.5 -0.5)&quot;&gt;&lt;switch&gt;&lt;foreignObject pointer-events=&quot;none&quot; width=&quot;100%&quot; height=&quot;100%&quot; requiredFeatures=&quot;http://www.w3.org/TR/SVG11/feature#Extensibility&quot; style=&quot;overflow: visible; text-align: left;&quot;&gt;&lt;div xmlns=&quot;http://www.w3.org/1999/xhtml&quot; style=&quot;display: flex; align-items: unsafe center; justify-content: unsafe center; width: 118px; height: 1px; padding-top: 270px; margin-left: 351px;&quot;&gt;&lt;div data-drawio-colors=&quot;color: rgb(0, 0, 0); &quot; style=&quot;box-sizing: border-box; font-size: 0px; text-align: center;&quot;&gt;&lt;div style=&quot;display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;&quot;&gt;punktum&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/foreignObject&gt;&lt;text x=&quot;410&quot; y=&quot;274&quot; fill=&quot;rgb(0, 0, 0)&quot; font-family=&quot;Helvetica&quot; font-size=&quot;12px&quot; text-anchor=&quot;middle&quot;&gt;punktum&lt;/text&gt;&lt;/switch&gt;&lt;/g&gt;&lt;path d=&quot;M 470 350 L 543.63 350&quot; fill=&quot;none&quot; stroke=&quot;rgb(0, 0, 0)&quot; stroke-miterlimit=&quot;10&quot; pointer-events=&quot;stroke&quot;/&gt;&lt;path d=&quot;M 548.88 350 L 541.88 353.5 L 543.63 350 L 541.88 346.5 Z&quot; fill=&quot;rgb(0, 0, 0)&quot; stroke=&quot;rgb(0, 0, 0)&quot; stroke-miterlimit=&quot;10&quot; pointer-events=&quot;all&quot;/&gt;&lt;rect x=&quot;350&quot; y=&quot;330&quot; width=&quot;120&quot; height=&quot;40&quot; rx=&quot;8.8&quot; ry=&quot;8.8&quot; fill=&quot;rgb(255, 255, 255)&quot; stroke=&quot;rgb(0, 0, 0)&quot; pointer-events=&quot;all&quot;/&gt;&lt;g transform=&quot;translate(-0.5 -0.5)&quot;&gt;&lt;switch&gt;&lt;foreignObject pointer-events=&quot;none&quot; width=&quot;100%&quot; height=&quot;100%&quot; requiredFeatures=&quot;http://www.w3.org/TR/SVG11/feature#Extensibility&quot; style=&quot;overflow: visible; text-align: left;&quot;&gt;&lt;div xmlns=&quot;http://www.w3.org/1999/xhtml&quot; style=&quot;display: flex; align-items: unsafe center; justify-content: unsafe center; width: 118px; height: 1px; padding-top: 350px; margin-left: 351px;&quot;&gt;&lt;div data-drawio-colors=&quot;color: rgb(0, 0, 0); &quot; style=&quot;box-sizing: border-box; font-size: 0px; text-align: center;&quot;&gt;&lt;div style=&quot;display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;&quot;&gt;punctual&lt;br /&gt;punktlich&lt;br /&gt;ponctuel&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/foreignObject&gt;&lt;text x=&quot;410&quot; y=&quot;354&quot; fill=&quot;rgb(0, 0, 0)&quot; font-family=&quot;Helvetica&quot; font-size=&quot;12px&quot; text-anchor=&quot;middle&quot;&gt;punctual...&lt;/text&gt;&lt;/switch&gt;&lt;/g&gt;&lt;rect x=&quot;550&quot; y=&quot;330&quot; width=&quot;120&quot; height=&quot;40&quot; rx=&quot;8.8&quot; ry=&quot;8.8&quot; fill=&quot;rgb(255, 255, 255)&quot; stroke=&quot;rgb(0, 0, 0)&quot; pointer-events=&quot;all&quot;/&gt;&lt;g transform=&quot;translate(-0.5 -0.5)&quot;&gt;&lt;switch&gt;&lt;foreignObject pointer-events=&quot;none&quot; width=&quot;100%&quot; height=&quot;100%&quot; requiredFeatures=&quot;http://www.w3.org/TR/SVG11/feature#Extensibility&quot; style=&quot;overflow: visible; text-align: left;&quot;&gt;&lt;div xmlns=&quot;http://www.w3.org/1999/xhtml&quot; style=&quot;display: flex; align-items: unsafe center; justify-content: unsafe center; width: 118px; height: 1px; padding-top: 350px; margin-left: 551px;&quot;&gt;&lt;div data-drawio-colors=&quot;color: rgb(0, 0, 0); &quot; style=&quot;box-sizing: border-box; font-size: 0px; text-align: center;&quot;&gt;&lt;div style=&quot;display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;&quot;&gt;punctuality&lt;br /&gt;punktlichkeit&lt;br /&gt;ponctualité&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/foreignObject&gt;&lt;text x=&quot;610&quot; y=&quot;354&quot; fill=&quot;rgb(0, 0, 0)&quot; font-family=&quot;Helvetica&quot; font-size=&quot;12px&quot; text-anchor=&quot;middle&quot;&gt;punctuality...&lt;/text&gt;&lt;/switch&gt;&lt;/g&gt;&lt;rect x=&quot;350&quot; y=&quot;410&quot; width=&quot;120&quot; height=&quot;40&quot; rx=&quot;8.8&quot; ry=&quot;8.8&quot; fill=&quot;rgb(255, 255, 255)&quot; stroke=&quot;rgb(0, 0, 0)&quot; pointer-events=&quot;all&quot;/&gt;&lt;g transform=&quot;translate(-0.5 -0.5)&quot;&gt;&lt;switch&gt;&lt;foreignObject pointer-events=&quot;none&quot; width=&quot;100%&quot; height=&quot;100%&quot; requiredFeatures=&quot;http://www.w3.org/TR/SVG11/feature#Extensibility&quot; style=&quot;overflow: visible; text-align: left;&quot;&gt;&lt;div xmlns=&quot;http://www.w3.org/1999/xhtml&quot; style=&quot;display: flex; align-items: unsafe center; justify-content: unsafe center; width: 118px; height: 1px; padding-top: 430px; margin-left: 351px;&quot;&gt;&lt;div data-drawio-colors=&quot;color: rgb(0, 0, 0); &quot; style=&quot;box-sizing: border-box; font-size: 0px; text-align: center;&quot;&gt;&lt;div style=&quot;display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;&quot;&gt;punctuation&lt;br /&gt;ponctuation&lt;br /&gt;das Interpunktion&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/foreignObject&gt;&lt;text x=&quot;410&quot; y=&quot;434&quot; fill=&quot;rgb(0, 0, 0)&quot; font-family=&quot;Helvetica&quot; font-size=&quot;12px&quot; text-anchor=&quot;middle&quot;&gt;punctuation...&lt;/text&gt;&lt;/switch&gt;&lt;/g&gt;&lt;path d=&quot;M 187.14 120 L 134.79 74.19&quot; fill=&quot;none&quot; stroke=&quot;rgb(0, 0, 0)&quot; stroke-miterlimit=&quot;10&quot; pointer-events=&quot;stroke&quot;/&gt;&lt;path d=&quot;M 130.84 70.74 L 138.41 72.71 L 134.79 74.19 L 133.8 77.98 Z&quot; fill=&quot;rgb(0, 0, 0)&quot; stroke=&quot;rgb(0, 0, 0)&quot; stroke-miterlimit=&quot;10&quot; pointer-events=&quot;all&quot;/&gt;&lt;path d=&quot;M 232.86 120 L 285.21 74.19&quot; fill=&quot;none&quot; stroke=&quot;rgb(0, 0, 0)&quot; stroke-miterlimit=&quot;10&quot; pointer-events=&quot;stroke&quot;/&gt;&lt;path d=&quot;M 289.16 70.74 L 286.2 77.98 L 285.21 74.19 L 281.59 72.71 Z&quot; fill=&quot;rgb(0, 0, 0)&quot; stroke=&quot;rgb(0, 0, 0)&quot; stroke-miterlimit=&quot;10&quot; pointer-events=&quot;all&quot;/&gt;&lt;rect x=&quot;150&quot; y=&quot;120&quot; width=&quot;120&quot; height=&quot;40&quot; rx=&quot;8.8&quot; ry=&quot;8.8&quot; fill=&quot;rgb(255, 255, 255)&quot; stroke=&quot;rgb(0, 0, 0)&quot; pointer-events=&quot;all&quot;/&gt;&lt;g transform=&quot;translate(-0.5 -0.5)&quot;&gt;&lt;switch&gt;&lt;foreignObject pointer-events=&quot;none&quot; width=&quot;100%&quot; height=&quot;100%&quot; requiredFeatures=&quot;http://www.w3.org/TR/SVG11/feature#Extensibility&quot; style=&quot;overflow: visible; text-align: left;&quot;&gt;&lt;div xmlns=&quot;http://www.w3.org/1999/xhtml&quot; style=&quot;display: flex; align-items: unsafe center; justify-content: unsafe center; width: 118px; height: 1px; padding-top: 140px; margin-left: 151px;&quot;&gt;&lt;div data-drawio-colors=&quot;color: rgb(0, 0, 0); &quot; style=&quot;box-sizing: border-box; font-size: 0px; text-align: center;&quot;&gt;&lt;div style=&quot;display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;&quot;&gt;puncture&lt;br /&gt;puncturable&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/foreignObject&gt;&lt;text x=&quot;210&quot; y=&quot;144&quot; fill=&quot;rgb(0, 0, 0)&quot; font-family=&quot;Helvetica&quot; font-size=&quot;12px&quot; text-anchor=&quot;middle&quot;&gt;puncture...&lt;/text&gt;&lt;/switch&gt;&lt;/g&gt;&lt;rect x=&quot;230&quot; y=&quot;30&quot; width=&quot;120&quot; height=&quot;40&quot; rx=&quot;8.8&quot; ry=&quot;8.8&quot; fill=&quot;rgb(255, 255, 255)&quot; stroke=&quot;rgb(0, 0, 0)&quot; pointer-events=&quot;all&quot;/&gt;&lt;g transform=&quot;translate(-0.5 -0.5)&quot;&gt;&lt;switch&gt;&lt;foreignObject pointer-events=&quot;none&quot; width=&quot;100%&quot; height=&quot;100%&quot; requiredFeatures=&quot;http://www.w3.org/TR/SVG11/feature#Extensibility&quot; style=&quot;overflow: visible; text-align: left;&quot;&gt;&lt;div xmlns=&quot;http://www.w3.org/1999/xhtml&quot; style=&quot;display: flex; align-items: unsafe center; justify-content: unsafe center; width: 118px; height: 1px; padding-top: 50px; margin-left: 231px;&quot;&gt;&lt;div data-drawio-colors=&quot;color: rgb(0, 0, 0); &quot; style=&quot;box-sizing: border-box; font-size: 0px; text-align: center;&quot;&gt;&lt;div style=&quot;display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;&quot;&gt;acupuncture&lt;br /&gt;acupuncturist&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/foreignObject&gt;&lt;text x=&quot;290&quot; y=&quot;54&quot; fill=&quot;rgb(0, 0, 0)&quot; font-family=&quot;Helvetica&quot; font-size=&quot;12px&quot; text-anchor=&quot;middle&quot;&gt;acupuncture...&lt;/text&gt;&lt;/switch&gt;&lt;/g&gt;&lt;rect x=&quot;70&quot; y=&quot;30&quot; width=&quot;120&quot; height=&quot;40&quot; rx=&quot;8.8&quot; ry=&quot;8.8&quot; fill=&quot;rgb(255, 255, 255)&quot; stroke=&quot;rgb(0, 0, 0)&quot; pointer-events=&quot;all&quot;/&gt;&lt;g transform=&quot;translate(-0.5 -0.5)&quot;&gt;&lt;switch&gt;&lt;foreignObject pointer-events=&quot;none&quot; width=&quot;100%&quot; height=&quot;100%&quot; requiredFeatures=&quot;http://www.w3.org/TR/SVG11/feature#Extensibility&quot; style=&quot;overflow: visible; text-align: left;&quot;&gt;&lt;div xmlns=&quot;http://www.w3.org/1999/xhtml&quot; style=&quot;display: flex; align-items: unsafe center; justify-content: unsafe center; width: 118px; height: 1px; padding-top: 50px; margin-left: 71px;&quot;&gt;&lt;div data-drawio-colors=&quot;color: rgb(0, 0, 0); &quot; style=&quot;box-sizing: border-box; font-size: 0px; text-align: center;&quot;&gt;&lt;div style=&quot;display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;&quot;&gt;compunctious&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/foreignObject&gt;&lt;text x=&quot;130&quot; y=&quot;54&quot; fill=&quot;rgb(0, 0, 0)&quot; font-family=&quot;Helvetica&quot; font-size=&quot;12px&quot; text-anchor=&quot;middle&quot;&gt;compunctious&lt;/text&gt;&lt;/switch&gt;&lt;/g&gt;&lt;rect x=&quot;0&quot; y=&quot;180&quot; width=&quot;120&quot; height=&quot;40&quot; rx=&quot;8.8&quot; ry=&quot;8.8&quot; fill=&quot;rgb(255, 255, 255)&quot; stroke=&quot;rgb(0, 0, 0)&quot; pointer-events=&quot;all&quot;/&gt;&lt;g transform=&quot;translate(-0.5 -0.5)&quot;&gt;&lt;switch&gt;&lt;foreignObject pointer-events=&quot;none&quot; width=&quot;100%&quot; height=&quot;100%&quot; requiredFeatures=&quot;http://www.w3.org/TR/SVG11/feature#Extensibility&quot; style=&quot;overflow: visible; text-align: left;&quot;&gt;&lt;div xmlns=&quot;http://www.w3.org/1999/xhtml&quot; style=&quot;display: flex; align-items: unsafe center; justify-content: unsafe center; width: 118px; height: 1px; padding-top: 200px; margin-left: 1px;&quot;&gt;&lt;div data-drawio-colors=&quot;color: rgb(0, 0, 0); &quot; style=&quot;box-sizing: border-box; font-size: 0px; text-align: center;&quot;&gt;&lt;div style=&quot;display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;&quot;&gt;pungent&lt;br /&gt;pungency&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/foreignObject&gt;&lt;text x=&quot;60&quot; y=&quot;204&quot; fill=&quot;rgb(0, 0, 0)&quot; font-family=&quot;Helvetica&quot; font-size=&quot;12px&quot; text-anchor=&quot;middle&quot;&gt;pungent...&lt;/text&gt;&lt;/switch&gt;&lt;/g&gt;&lt;rect x=&quot;15&quot; y=&quot;150&quot; width=&quot;90&quot; height=&quot;30&quot; fill=&quot;none&quot; stroke=&quot;none&quot; pointer-events=&quot;all&quot;/&gt;&lt;g transform=&quot;translate(-0.5 -0.5)&quot;&gt;&lt;switch&gt;&lt;foreignObject pointer-events=&quot;none&quot; width=&quot;100%&quot; height=&quot;100%&quot; requiredFeatures=&quot;http://www.w3.org/TR/SVG11/feature#Extensibility&quot; style=&quot;overflow: visible; text-align: left;&quot;&gt;&lt;div xmlns=&quot;http://www.w3.org/1999/xhtml&quot; style=&quot;display: flex; align-items: unsafe center; justify-content: unsafe center; width: 88px; height: 1px; padding-top: 165px; margin-left: 16px;&quot;&gt;&lt;div data-drawio-colors=&quot;color: rgb(0, 0, 0); &quot; style=&quot;box-sizing: border-box; font-size: 0px; text-align: center;&quot;&gt;&lt;div style=&quot;display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;&quot;&gt;辛辣的，刺激的&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/foreignObject&gt;&lt;text x=&quot;60&quot; y=&quot;169&quot; fill=&quot;rgb(0, 0, 0)&quot; font-family=&quot;Helvetica&quot; font-size=&quot;12px&quot; text-anchor=&quot;middle&quot;&gt;辛辣的，刺激的&lt;/text&gt;&lt;/switch&gt;&lt;/g&gt;&lt;rect x=&quot;270&quot; y=&quot;120&quot; width=&quot;90&quot; height=&quot;30&quot; fill=&quot;none&quot; stroke=&quot;none&quot; pointer-events=&quot;all&quot;/&gt;&lt;g transform=&quot;translate(-0.5 -0.5)&quot;&gt;&lt;switch&gt;&lt;foreignObject pointer-events=&quot;none&quot; width=&quot;100%&quot; height=&quot;100%&quot; requiredFeatures=&quot;http://www.w3.org/TR/SVG11/feature#Extensibility&quot; style=&quot;overflow: visible; text-align: left;&quot;&gt;&lt;div xmlns=&quot;http://www.w3.org/1999/xhtml&quot; style=&quot;display: flex; align-items: unsafe center; justify-content: unsafe center; width: 88px; height: 1px; padding-top: 135px; margin-left: 271px;&quot;&gt;&lt;div data-drawio-colors=&quot;color: rgb(0, 0, 0); &quot; style=&quot;box-sizing: border-box; font-size: 0px; text-align: center;&quot;&gt;&lt;div style=&quot;display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;&quot;&gt;针刺，可针刺的&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/foreignObject&gt;&lt;text x=&quot;315&quot; y=&quot;139&quot; fill=&quot;rgb(0, 0, 0)&quot; font-family=&quot;Helvetica&quot; font-size=&quot;12px&quot; text-anchor=&quot;middle&quot;&gt;针刺，可针刺的&lt;/text&gt;&lt;/switch&gt;&lt;/g&gt;&lt;rect x=&quot;90&quot; y=&quot;0&quot; width=&quot;90&quot; height=&quot;30&quot; fill=&quot;none&quot; stroke=&quot;none&quot; pointer-events=&quot;all&quot;/&gt;&lt;g transform=&quot;translate(-0.5 -0.5)&quot;&gt;&lt;switch&gt;&lt;foreignObject pointer-events=&quot;none&quot; width=&quot;100%&quot; height=&quot;100%&quot; requiredFeatures=&quot;http://www.w3.org/TR/SVG11/feature#Extensibility&quot; style=&quot;overflow: visible; text-align: left;&quot;&gt;&lt;div xmlns=&quot;http://www.w3.org/1999/xhtml&quot; style=&quot;display: flex; align-items: unsafe center; justify-content: unsafe center; width: 88px; height: 1px; padding-top: 15px; margin-left: 91px;&quot;&gt;&lt;div data-drawio-colors=&quot;color: rgb(0, 0, 0); &quot; style=&quot;box-sizing: border-box; font-size: 0px; text-align: center;&quot;&gt;&lt;div style=&quot;display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;&quot;&gt;内疚的&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/foreignObject&gt;&lt;text x=&quot;135&quot; y=&quot;19&quot; fill=&quot;rgb(0, 0, 0)&quot; font-family=&quot;Helvetica&quot; font-size=&quot;12px&quot; text-anchor=&quot;middle&quot;&gt;内疚的&lt;/text&gt;&lt;/switch&gt;&lt;/g&gt;&lt;rect x=&quot;250&quot; y=&quot;0&quot; width=&quot;90&quot; height=&quot;30&quot; fill=&quot;none&quot; stroke=&quot;none&quot; pointer-events=&quot;all&quot;/&gt;&lt;g transform=&quot;translate(-0.5 -0.5)&quot;&gt;&lt;switch&gt;&lt;foreignObject pointer-events=&quot;none&quot; width=&quot;100%&quot; height=&quot;100%&quot; requiredFeatures=&quot;http://www.w3.org/TR/SVG11/feature#Extensibility&quot; style=&quot;overflow: visible; text-align: left;&quot;&gt;&lt;div xmlns=&quot;http://www.w3.org/1999/xhtml&quot; style=&quot;display: flex; align-items: unsafe center; justify-content: unsafe center; width: 88px; height: 1px; padding-top: 15px; margin-left: 251px;&quot;&gt;&lt;div data-drawio-colors=&quot;color: rgb(0, 0, 0); &quot; style=&quot;box-sizing: border-box; font-size: 0px; text-align: center;&quot;&gt;&lt;div style=&quot;display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;&quot;&gt;针灸，针灸师&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/foreignObject&gt;&lt;text x=&quot;295&quot; y=&quot;19&quot; fill=&quot;rgb(0, 0, 0)&quot; font-family=&quot;Helvetica&quot; font-size=&quot;12px&quot; text-anchor=&quot;middle&quot;&gt;针灸，针灸师&lt;/text&gt;&lt;/switch&gt;&lt;/g&gt;&lt;rect x=&quot;365&quot; y=&quot;140&quot; width=&quot;90&quot; height=&quot;30&quot; fill=&quot;none&quot; stroke=&quot;none&quot; pointer-events=&quot;all&quot;/&gt;&lt;g transform=&quot;translate(-0.5 -0.5)&quot;&gt;&lt;switch&gt;&lt;foreignObject pointer-events=&quot;none&quot; width=&quot;100%&quot; height=&quot;100%&quot; requiredFeatures=&quot;http://www.w3.org/TR/SVG11/feature#Extensibility&quot; style=&quot;overflow: visible; text-align: left;&quot;&gt;&lt;div xmlns=&quot;http://www.w3.org/1999/xhtml&quot; style=&quot;display: flex; align-items: unsafe center; justify-content: unsafe center; width: 88px; height: 1px; padding-top: 155px; margin-left: 366px;&quot;&gt;&lt;div data-drawio-colors=&quot;color: rgb(0, 0, 0); &quot; style=&quot;box-sizing: border-box; font-size: 0px; text-align: center;&quot;&gt;&lt;div style=&quot;display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;&quot;&gt;小点&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/foreignObject&gt;&lt;text x=&quot;410&quot; y=&quot;159&quot; fill=&quot;rgb(0, 0, 0)&quot; font-family=&quot;Helvetica&quot; font-size=&quot;12px&quot; text-anchor=&quot;middle&quot;&gt;小点&lt;/text&gt;&lt;/switch&gt;&lt;/g&gt;&lt;rect x=&quot;365&quot; y=&quot;220&quot; width=&quot;90&quot; height=&quot;30&quot; fill=&quot;none&quot; stroke=&quot;none&quot; pointer-events=&quot;all&quot;/&gt;&lt;g transform=&quot;translate(-0.5 -0.5)&quot;&gt;&lt;switch&gt;&lt;foreignObject pointer-events=&quot;none&quot; width=&quot;100%&quot; height=&quot;100%&quot; requiredFeatures=&quot;http://www.w3.org/TR/SVG11/feature#Extensibility&quot; style=&quot;overflow: visible; text-align: left;&quot;&gt;&lt;div xmlns=&quot;http://www.w3.org/1999/xhtml&quot; style=&quot;display: flex; align-items: unsafe center; justify-content: unsafe center; width: 88px; height: 1px; padding-top: 235px; margin-left: 366px;&quot;&gt;&lt;div data-drawio-colors=&quot;color: rgb(0, 0, 0); &quot; style=&quot;box-sizing: border-box; font-size: 0px; text-align: center;&quot;&gt;&lt;div style=&quot;display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;&quot;&gt;「医」色斑&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/foreignObject&gt;&lt;text x=&quot;410&quot; y=&quot;239&quot; fill=&quot;rgb(0, 0, 0)&quot; font-family=&quot;Helvetica&quot; font-size=&quot;12px&quot; text-anchor=&quot;middle&quot;&gt;「医」色斑&lt;/text&gt;&lt;/switch&gt;&lt;/g&gt;&lt;rect x=&quot;365&quot; y=&quot;300&quot; width=&quot;90&quot; height=&quot;30&quot; fill=&quot;none&quot; stroke=&quot;none&quot; pointer-events=&quot;all&quot;/&gt;&lt;g transform=&quot;translate(-0.5 -0.5)&quot;&gt;&lt;switch&gt;&lt;foreignObject pointer-events=&quot;none&quot; width=&quot;100%&quot; height=&quot;100%&quot; requiredFeatures=&quot;http://www.w3.org/TR/SVG11/feature#Extensibility&quot; style=&quot;overflow: visible; text-align: left;&quot;&gt;&lt;div xmlns=&quot;http://www.w3.org/1999/xhtml&quot; style=&quot;display: flex; align-items: unsafe center; justify-content: unsafe center; width: 88px; height: 1px; padding-top: 315px; margin-left: 366px;&quot;&gt;&lt;div data-drawio-colors=&quot;color: rgb(0, 0, 0); &quot; style=&quot;box-sizing: border-box; font-size: 0px; text-align: center;&quot;&gt;&lt;div style=&quot;display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;&quot;&gt;准时的&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/foreignObject&gt;&lt;text x=&quot;410&quot; y=&quot;319&quot; fill=&quot;rgb(0, 0, 0)&quot; font-family=&quot;Helvetica&quot; font-size=&quot;12px&quot; text-anchor=&quot;middle&quot;&gt;准时的&lt;/text&gt;&lt;/switch&gt;&lt;/g&gt;&lt;rect x=&quot;565&quot; y=&quot;300&quot; width=&quot;90&quot; height=&quot;30&quot; fill=&quot;none&quot; stroke=&quot;none&quot; pointer-events=&quot;all&quot;/&gt;&lt;g transform=&quot;translate(-0.5 -0.5)&quot;&gt;&lt;switch&gt;&lt;foreignObject pointer-events=&quot;none&quot; width=&quot;100%&quot; height=&quot;100%&quot; requiredFeatures=&quot;http://www.w3.org/TR/SVG11/feature#Extensibility&quot; style=&quot;overflow: visible; text-align: left;&quot;&gt;&lt;div xmlns=&quot;http://www.w3.org/1999/xhtml&quot; style=&quot;display: flex; align-items: unsafe center; justify-content: unsafe center; width: 88px; height: 1px; padding-top: 315px; margin-left: 566px;&quot;&gt;&lt;div data-drawio-colors=&quot;color: rgb(0, 0, 0); &quot; style=&quot;box-sizing: border-box; font-size: 0px; text-align: center;&quot;&gt;&lt;div style=&quot;display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;&quot;&gt;准时性&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/foreignObject&gt;&lt;text x=&quot;610&quot; y=&quot;319&quot; fill=&quot;rgb(0, 0, 0)&quot; font-family=&quot;Helvetica&quot; font-size=&quot;12px&quot; text-anchor=&quot;middle&quot;&gt;准时性&lt;/text&gt;&lt;/switch&gt;&lt;/g&gt;&lt;rect x=&quot;365&quot; y=&quot;380&quot; width=&quot;90&quot; height=&quot;30&quot; fill=&quot;none&quot; stroke=&quot;none&quot; pointer-events=&quot;all&quot;/&gt;&lt;g transform=&quot;translate(-0.5 -0.5)&quot;&gt;&lt;switch&gt;&lt;foreignObject pointer-events=&quot;none&quot; width=&quot;100%&quot; height=&quot;100%&quot; requiredFeatures=&quot;http://www.w3.org/TR/SVG11/feature#Extensibility&quot; style=&quot;overflow: visible; text-align: left;&quot;&gt;&lt;div xmlns=&quot;http://www.w3.org/1999/xhtml&quot; style=&quot;display: flex; align-items: unsafe center; justify-content: unsafe center; width: 88px; height: 1px; padding-top: 395px; margin-left: 366px;&quot;&gt;&lt;div data-drawio-colors=&quot;color: rgb(0, 0, 0); &quot; style=&quot;box-sizing: border-box; font-size: 0px; text-align: center;&quot;&gt;&lt;div style=&quot;display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;&quot;&gt;标点&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/foreignObject&gt;&lt;text x=&quot;410&quot; y=&quot;399&quot; fill=&quot;rgb(0, 0, 0)&quot; font-family=&quot;Helvetica&quot; font-size=&quot;12px&quot; text-anchor=&quot;middle&quot;&gt;标点&lt;/text&gt;&lt;/switch&gt;&lt;/g&gt;&lt;/g&gt;&lt;switch&gt;&lt;g requiredFeatures=&quot;http://www.w3.org/TR/SVG11/feature#Extensibility&quot;/&gt;&lt;a transform=&quot;translate(0,-5)&quot; xlink:href=&quot;https://www.diagrams.net/doc/faq/svg-export-text-problems&quot; target=&quot;_blank&quot;&gt;&lt;text text-anchor=&quot;middle&quot; font-size=&quot;10px&quot; x=&quot;50%&quot; y=&quot;100%&quot;&gt;Text is not SVG - cannot display&lt;/text&gt;&lt;/a&gt;&lt;/switch&gt;&lt;/svg&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines C.103 赋予容器初始化列表构造函数</title>
   <link href="http://kimi.im/2022-11-28-cppcoreguidelines-c103"/>
   <updated>2022-11-28T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-c103</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
C.103: Give a container an initializer list constructor
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;理由&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
用户期望能够用一组值初始化一个容器。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;例子&lt;/b&gt;
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-C++&quot;&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Sorted_vector&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;sv&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;1&lt;/span&gt;, &lt;span style=&quot;color: #110099;&quot;&gt;3&lt;/span&gt;, &lt;span style=&quot;color: #110099;&quot;&gt;-1&lt;/span&gt;, &lt;span style=&quot;color: #110099;&quot;&gt;7&lt;/span&gt;, &lt;span style=&quot;color: #110099;&quot;&gt;0&lt;/span&gt;, &lt;span style=&quot;color: #110099;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// Sorted_vector sorts elements as needed&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines C.102 赋予容器移动操作</title>
   <link href="http://kimi.im/2022-11-27-cppcoreguidelines-c102"/>
   <updated>2022-11-27T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-c102</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
C.102: Give a container move operations
&lt;/p&gt;

&lt;p&gt;
&lt;b&gt;理由&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
容器很容易变得很大，如果没有移动构造函数和复制构造函数，移动容器对象会变得很耗计算资源。因此，人们倾向于使用指针操作容器，但是这样就会遇到内存管理的问题。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;例子&lt;/b&gt;
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-C++&quot;&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Sorted_vector&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;read_sorted&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;istream&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;is&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;vector&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;v&lt;/span&gt;;
    cin &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;gt;&amp;gt;&lt;/span&gt; v;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// assume we have a read operation for vectors&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Sorted_vector&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;sv&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;v&lt;/span&gt;;  &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// sorts&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; sv;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
我们应该允许用户认为返回一个符合标准的容器是很节省资源的。只有我们定义的容器类实现了移动构造函数，才能为用户提供这种保证。
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>单词本：surreptitious</title>
   <link href="http://kimi.im/2022-11-27-english-surreptitious"/>
   <updated>2022-11-27T00:00:00+00:00</updated>
   <id>http://kimi.im/english-surreptitious</id>
   <content type="html">&lt;p&gt;
在信息安全领域，有所谓的数据签名的概念。跟我们日常的名字签名类似，用于防止数据篡改。通过计算一段数据的校验值，并基于这个校验值进行私钥签名，同时提供公钥证书。就可以通过证书中的公钥验证签名是否有效，进一步验证校验值是否匹配。这样就可以检测到是否有人偷偷篡改了数据：
&lt;/p&gt;

&lt;p&gt;
&lt;b&gt;Surreptitious&lt;/b&gt; or accidental changes to the data will change this hash
value and thereby alert the security system that someone has tampered
with the data.
&lt;/p&gt;

&lt;p&gt;
如果发现证书验证的校验值是否和实际再一次计算的校验值不匹配，信息安全系统就会发出警告消息。
&lt;/p&gt;

&lt;p&gt;
上面一段话中用到了 surreptitious [ˌsʌrəpˈtɪʃəs]，是个形容词，意思是神神密密、鬼鬼祟祟。
&lt;/p&gt;

&lt;p&gt;
这个词源自拉丁语 surrepticius，进一步来自 surripere 的过去分词
surreptus。surripere 是 sub + rapere 的组合。sub- 是低下的意思，rapere
是抓住的意思。合起来就是隐藏在下面抓住，也就是偷偷抓住的意思。那么
surrepticius 就是偷偷摸摸拿的意思，带有一些些的动作意味。所以，
surreptitious 往往都是用来形容动作的，而不用来形容东西。
&lt;/p&gt;

&lt;p&gt;
I was very surreptitious in how I organized the surprise party: she
never knew! 我很隐秘的组织了惊喜派对：她绝不会知道。
&lt;/p&gt;

&lt;p&gt;
法语写作 surreptice，是个书面。比如著名的笛卡尔写过：
&lt;/p&gt;

&lt;p&gt;
Cette lettre [des prélats de l&amp;rsquo;assemblée du clergé] n&amp;rsquo;approuve pas la
doctrine des casuistes; c&amp;rsquo;en est assez pour être traitée de fausse et
de subreptice, quelque authentique qu&amp;rsquo;elle soit. 神职人员此信不赞同诡辩家的主张；无论多正宗，此足以称之为伪造与鬼祟。
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines C.101 赋予容器一种数值语义</title>
   <link href="http://kimi.im/2022-11-26-cppcoreguidelines-c101"/>
   <updated>2022-11-26T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-c101</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
C.101: Give a container value semantics
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;理由&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
相比不规则对象，规则的对象更容易想象和推理。人们更熟悉规则对象。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;注意&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
如果符合意义，请通过概念定义容器的运行规则。尤其是要确保，在比较容器对象的时候，和容器的副本相比较，结果应该为 &lt;code&gt;true&lt;/code&gt; 。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;例子&lt;/b&gt;
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Sorted_vector&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;string&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;v&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Sorted_vector&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;string&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;v2&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;v&lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;v &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;!=&lt;/span&gt; v2&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;
        cout &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;Behavior against reason and logic.\n&quot;&lt;/span&gt;;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ...&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;
</content>
 </entry>
 
 <entry>
   <title>单词本：streamline</title>
   <link href="http://kimi.im/2022-11-26-english-streamline"/>
   <updated>2022-11-26T00:00:00+00:00</updated>
   <id>http://kimi.im/english-streamline</id>
   <content type="html">&lt;p&gt;
今天介绍一个商业热词 streamline。
&lt;/p&gt;

&lt;p&gt;
我是在 TÜV SÜD 的一份解析工业控制系统安全标准的白皮书中看到的：
&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;
Today&amp;rsquo;s so-called smart factories are actively leveraging the
potential of interconnected systems to &lt;b&gt;streamline&lt;/b&gt; production, increase
output and reduce waste, while also increasing production flexibility.
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;
目前，所谓的智能工厂就是不断的提升互联系统的潜力，优化生产、提高产量、减少浪费，同时提高生产的灵活性。
&lt;/p&gt;


&lt;p&gt;
这个例子中， streamline 的意思是：“精简（工商企业、组织、流程等）使效率更高”，是作为动词使用的。
&lt;/p&gt;

&lt;p&gt;
实际上，这个词的本来的意思是液体流动产生的顺畅的线条。
&lt;/p&gt;

&lt;p&gt;
作为动词就是设计出类似液体流动的线条，从而看起来更优美，流体动力学更高效。比如 streamline furniture， 涉及出有顺畅线条的家居。streamline a
car&amp;rsquo;s design，设计出流线型的汽车，从而减少空气阻力。正因为这种流线设计可以减少阻力，所以就进一步引伸到企业、组织和流程，就是调整业务流程，从而使业务流转效率更高。这也就是前面例子介绍的 streamline production。
&lt;/p&gt;

&lt;p&gt;
当然，streamline 也能做形容词，意思是顺畅的，流畅的，流线型的。
&lt;/p&gt;

&lt;p&gt;
今天你 streamline 了你的学习方法吗？
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines C.100 参考 STL 实现容器类</title>
   <link href="http://kimi.im/2022-11-25-cppcoreguidelines-c100"/>
   <updated>2022-11-25T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-c100</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
C.100: Follow the STL when defining a container
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;理由&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
大部分C++程序员熟悉 STL 容器。STL 容器的设计考虑很周全。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;注意&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
当然也有其他非常考虑周全的设计风格，偶尔也有理由不遵循标准库设计风格。但是如果没有做过充分的分析，遵循标准库的设计风格还是一种最简单最容易的方法。
&lt;/p&gt;


&lt;p&gt;
尤其是&lt;code&gt;std::vector&lt;/code&gt;和 &lt;code&gt;std::map&lt;/code&gt; 提供相对简单有用的模型。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;例子&lt;/b&gt;
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-C++&quot;&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;// simplified (e.g., no allocators):&lt;/span&gt;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;template&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;typename&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Sorted_vector&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;using&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;value_type&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt;;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ... iterator types ...&lt;/span&gt;

    &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;Sorted_vector&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;default&lt;/span&gt;;
    &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;Sorted_vector&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;initializer_list&lt;/span&gt;&lt;span style=&quot;color: #909183; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt;&lt;span style=&quot;color: #909183; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// initializer-list constructor: sort and store&lt;/span&gt;
    &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;Sorted_vector&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Sorted_vector&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;default&lt;/span&gt;;
    &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;Sorted_vector&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Sorted_vector&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;default&lt;/span&gt;;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Sorted_vector&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt; operator&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Sorted_vector&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;default&lt;/span&gt;;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// copy assignment&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Sorted_vector&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt; operator&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Sorted_vector&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;default&lt;/span&gt;;        &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// move assignment&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;~&lt;/span&gt;Sorted_vector&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;default&lt;/span&gt;;

    &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;Sorted_vector&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;std&lt;/span&gt;::&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;vector&lt;/span&gt;&lt;span style=&quot;color: #909183; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt;&lt;span style=&quot;color: #909183; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;v&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// store and sort&lt;/span&gt;
    &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;Sorted_vector&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;std&lt;/span&gt;::&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;vector&lt;/span&gt;&lt;span style=&quot;color: #909183; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt;&lt;span style=&quot;color: #909183; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;v&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;        &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// sort and &quot;steal representation&quot;&lt;/span&gt;

    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt; operator&lt;span style=&quot;color: #7388d6;&quot;&gt;[]&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;i&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; rep&lt;span style=&quot;color: #909183;&quot;&gt;[&lt;/span&gt;i&lt;span style=&quot;color: #909183;&quot;&gt;]&lt;/span&gt;; &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// no non-const direct access to preserve order&lt;/span&gt;

    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold; font-style: italic;&quot;&gt;push_back&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// insert in the right place (not necessarily at back)&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold; font-style: italic;&quot;&gt;push_back&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;        &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// insert in the right place (not necessarily at back)&lt;/span&gt;

    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ... cbegin(), cend() ...&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;private&lt;/span&gt;:
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;std&lt;/span&gt;::&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;vector&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;rep&lt;/span&gt;;  &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// use a std::vector to hold elements&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;template&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;typename&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;bool&lt;/span&gt; operator&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;==&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Sorted_vector&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt;, &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Sorted_vector&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;template&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;typename&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;bool&lt;/span&gt; operator&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;!=&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Sorted_vector&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt;, &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Sorted_vector&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;
&lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ...&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
这里遵循的 STL 的风格，但是没有实现所有的接口。一般来说，对于特定容器提供足够的功能接口就可以了。关键是要定义约定俗成的构造、复制、析构、迭代器函数，并遵循特定容器的工作机制。以此为基础，这个容器也可以根据需要扩展。此处，添加了从&lt;code&gt;std::vector&lt;/code&gt;进行构造的特殊构造函数。
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines C.90 用构造函数和赋值函数，不要用 memset 和 memcpy</title>
   <link href="http://kimi.im/2022-11-24-cppcoreguidelines-c90"/>
   <updated>2022-11-24T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-c90</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
C.90: Rely on constructors and assignment operators, not &lt;code&gt;memset&lt;/code&gt; and
&lt;code&gt;memcpy&lt;/code&gt;
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;理由&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
在标准C++机制中，创建一个实例的方法是调用实例类的构造函数。参考 &lt;a href=&quot;2022-09-15-cppcoreguidelines-c41.html#ID-BEBBD42E-4E3D-4D99-A79F-82D3718AE24D&quot;&gt;C.41&lt;/a&gt;
构造函数应该创建一个完全初始化的对象，而不需要额外的初始化工作如
&lt;code&gt;memcpy&lt;/code&gt; 等操作。一个类型还会提供拷贝构造函数和/或拷贝赋值函数，实现类型的拷贝，从而保留类型的不变式约束。使用 &lt;code&gt;memcpy&lt;/code&gt; 拷贝可拷贝的复杂类型会导致未定义的行为。经常会导致类切片（ slicing ）和数据损坏（data
corruption）。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;例子&lt;/b&gt;
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;struct&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;base&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;virtual&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold; font-style: italic;&quot;&gt;update&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;0&lt;/span&gt;;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;std&lt;/span&gt;::&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;shared_ptr&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;sp&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;struct&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;derived&lt;/span&gt; : &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;base&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold; font-style: italic;&quot;&gt;update&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;override&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{}&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;
&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;
&lt;b&gt;例子&lt;/b&gt;
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-bad src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;init&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;derived&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;a&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;memset&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt;a, &lt;span style=&quot;color: #110099;&quot;&gt;0&lt;/span&gt;, &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;sizeof&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;derived&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
这种初始化方式会导致类型不安全，覆盖虚函数表。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;例子&lt;/b&gt;
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-bad src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;copy&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;derived&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;a&lt;/span&gt;, &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;derived&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;b&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;memcpy&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt;a, &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt;b, &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;sizeof&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;derived&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
以上操作也是会导致类型不安全，覆盖虚函数表。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;强化&lt;/b&gt;
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;标记传递复杂类型给 &lt;code&gt;memset&lt;/code&gt; 或 &lt;code&gt;memcpy&lt;/code&gt; 的操作&lt;/li&gt;
&lt;/ul&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines C.89 Hash 函数不可抛出异常</title>
   <link href="http://kimi.im/2022-11-23-cppcoreguidelines-c89"/>
   <updated>2022-11-23T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-c89</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
C.89: Make a &lt;code&gt;hash&lt;/code&gt; &lt;code&gt;noexcept&lt;/code&gt;
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;理由&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
以哈希索引的容器类会间接用到哈希函数，一般的设计不会预期如此简单的操作会抛出异常。这也是标准库所要求的。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;例子&lt;/b&gt;
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;template&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;lt;&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;struct&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;hash&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;My_type&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;  &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// thoroughly bad hash specialization&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;using&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;result_type&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;size_t&lt;/span&gt;;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;using&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;argument_type&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;My_type&lt;/span&gt;;

    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;size_t&lt;/span&gt; operator&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;My_type&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;x&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt;
    &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;
        &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;size_t&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;xs&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; x.&lt;span style=&quot;color: #110099; font-style: italic;&quot;&gt;s&lt;/span&gt;.&lt;span style=&quot;color: #3a5fcd; font-weight: bold; font-style: italic;&quot;&gt;size&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;()&lt;/span&gt;;
        &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;xs &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;4&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;throw&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Bad_My_type&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;{}&lt;/span&gt;;
        &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &quot;Nobody expects the Spanish inquisition!&quot;&lt;/span&gt;
        &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;hash&lt;/span&gt;&lt;span style=&quot;color: #909183; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;size_t&lt;/span&gt;&lt;span style=&quot;color: #909183; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;()(&lt;/span&gt;x.&lt;span style=&quot;color: #110099; font-style: italic;&quot;&gt;s&lt;/span&gt;.&lt;span style=&quot;color: #3a5fcd; font-weight: bold; font-style: italic;&quot;&gt;size&lt;/span&gt;&lt;span style=&quot;color: #709870;&quot;&gt;()&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt; ^ &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;trim&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;x.&lt;span style=&quot;color: #110099; font-style: italic;&quot;&gt;s&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt;;
    &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;


&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;main&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;unordered_map&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;My_type&lt;/span&gt;, &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;m&lt;/span&gt;;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;My_type&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;mt&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;asdfg&quot;&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;;
    &lt;span style=&quot;color: #000000;&quot;&gt;m&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;[&lt;/span&gt;mt&lt;span style=&quot;color: #7388d6;&quot;&gt;]&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;7&lt;/span&gt;;
    cout &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; m&lt;span style=&quot;color: #7388d6;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;My_type&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;asdfg&quot;&lt;/span&gt; &lt;span style=&quot;color: #909183;&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;]&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;&apos;\n&apos;&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
如果你必须要定义哈希函数，可以简单的跟标准库的哈希值进行异或。这比假专家的小聪明方法效果更好。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;强化&lt;/b&gt;
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;标记抛出异常的哈希&lt;/li&gt;
&lt;/ul&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines C.87 注意基类的 == 操作</title>
   <link href="http://kimi.im/2022-11-22-cppcoreguidelines-c87"/>
   <updated>2022-11-22T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-c87</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
C.87: Beware of &lt;code&gt;==&lt;/code&gt; on base classes
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;理由&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
在类层级中，我们很难写出万无一失的有用的&lt;code&gt;==&lt;/code&gt;操作。
&lt;/p&gt;

&lt;p&gt;
&lt;b&gt;例子&lt;/b&gt;
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-bad src-C++&quot; id=&quot;org1f7d280&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;B&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;string&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;name&lt;/span&gt;;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;number&lt;/span&gt;;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;public&lt;/span&gt;:
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;virtual&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;bool&lt;/span&gt; operator&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;==&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;B&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;a&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt;
    &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;
         &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; name &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;==&lt;/span&gt; a.&lt;span style=&quot;color: #110099; font-style: italic;&quot;&gt;name&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; number &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;==&lt;/span&gt; a.&lt;span style=&quot;color: #110099; font-style: italic;&quot;&gt;number&lt;/span&gt;;
    &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ...&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
&lt;code&gt;B&lt;/code&gt; 的比较操作会接受第二个参数的类型转换，但是其自身不做类型转换。
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;B&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;string&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;name&lt;/span&gt;;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;number&lt;/span&gt;;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;public&lt;/span&gt;:
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;virtual&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;bool&lt;/span&gt; operator&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;==&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;B&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;a&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt;
    &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;
         &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; name &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;==&lt;/span&gt; a.&lt;span style=&quot;color: #110099; font-style: italic;&quot;&gt;name&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; number &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;==&lt;/span&gt; a.&lt;span style=&quot;color: #110099; font-style: italic;&quot;&gt;number&lt;/span&gt;;
    &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ...&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;D&lt;/span&gt; : &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;B&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;char&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;character&lt;/span&gt;;
  &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;public&lt;/span&gt;:
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;virtual&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;bool&lt;/span&gt; operator&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;==&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;D&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;a&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt;
        &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;
            &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;B&lt;/span&gt;::&lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;operator&lt;/span&gt;&lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;==&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;a&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; character &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;==&lt;/span&gt; a.&lt;span style=&quot;color: #110099; font-style: italic;&quot;&gt;character&lt;/span&gt;;
        &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ...&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;main&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;B&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;b&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;B&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt;;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;D&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;d&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;D&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt;;
    cout &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;b &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;==&lt;/span&gt; d&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; endl;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// return b.name == d.name &amp;amp;&amp;amp; b.number == d.number;&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// compares name and number, ignores d&apos;s character&lt;/span&gt;
    cout &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;d &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;==&lt;/span&gt; b&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; endl;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// return d.name == b.name &amp;amp;&amp;amp; d.number == b.number;&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// compares name and number, ignores d&apos;s character&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;D&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;d2&lt;/span&gt;;
    cout &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;d &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;==&lt;/span&gt; d2&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; endl;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// return d.name == d2.name &amp;amp;&amp;amp; d.number == d2.number&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;//        &amp;amp;&amp;amp; d.character == d2.character&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// compares name, number, and character&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;B&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;b2&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;d2&lt;/span&gt;;
    cout &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;b2 &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;==&lt;/span&gt; d&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; endl;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// return b2.name == d.name &amp;amp;&amp;amp; d2.number == d.number;&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// compares name and number, ignores d2&apos;s and d&apos;s character&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;pre class=&quot;example&quot;&gt;
1
1
0
0
&lt;/pre&gt;



&lt;p&gt;
当然也有办法可以让&lt;code&gt;==&lt;/code&gt;在类层级中工作，但是不太具有扩展性。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;注意&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
此规则应用与其他各种比较操作。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;强化&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
标记&lt;code&gt;virtual operator==()&lt;/code&gt;以及其他各种比较操作符。 &lt;code&gt;!=&lt;/code&gt;, &lt;code&gt;&amp;lt;&lt;/code&gt;  &lt;code&gt;&amp;lt;=&lt;/code&gt;, &lt;code&gt;&amp;gt;&lt;/code&gt;, &lt;code&gt;&amp;gt;=&lt;/code&gt;, &lt;code&gt;&amp;lt;=&amp;gt;&lt;/code&gt;.
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines C.86 == 操作应该是对称的，且 noexcept</title>
   <link href="http://kimi.im/2022-11-21-cppcoreguidelines-c86"/>
   <updated>2022-11-21T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-c86</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
C.86: Make &lt;code&gt;==&lt;/code&gt; symmetric with respect to operand types and &lt;code&gt;noexcept&lt;/code&gt;
&lt;/p&gt;

&lt;p&gt;
&lt;b&gt;理由&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
相等操作符的两个操作量非对称处理的话，会让人很惊讶。如果还有类型转化的话，会容易引起错误。
&lt;/p&gt;

&lt;p&gt;
&lt;code&gt;==&lt;/code&gt; 操作是基础的操作。程序员在使用过程中应该不用担心会出现错误。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;例子&lt;/b&gt;
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;struct&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;X&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;string&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;name&lt;/span&gt;;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;number&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;bool&lt;/span&gt; operator&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;==&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;X&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;a&lt;/span&gt;, &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;X&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;b&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;noexcept&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; a.&lt;span style=&quot;color: #110099; font-style: italic;&quot;&gt;name&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;==&lt;/span&gt; b.&lt;span style=&quot;color: #110099; font-style: italic;&quot;&gt;name&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; a.&lt;span style=&quot;color: #110099; font-style: italic;&quot;&gt;number&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;==&lt;/span&gt; b.&lt;span style=&quot;color: #110099; font-style: italic;&quot;&gt;number&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;
&lt;b&gt;例子&lt;/b&gt;
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-bad src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;B&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;string&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;name&lt;/span&gt;;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;number&lt;/span&gt;;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;bool&lt;/span&gt; operator&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;==&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;B&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;a&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;
        &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; name &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;==&lt;/span&gt; a.&lt;span style=&quot;color: #110099; font-style: italic;&quot;&gt;name&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; number &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;==&lt;/span&gt; a.&lt;span style=&quot;color: #110099; font-style: italic;&quot;&gt;number&lt;/span&gt;;
    &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ...&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;
&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;
&lt;code&gt;B&lt;/code&gt; 的比较操作符接受的第二个计算对象可能会进行类型转换，但是 &lt;code&gt;B&lt;/code&gt; 本身不会。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;注意&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
如果一个类有异常值，比如 &lt;code&gt;double&lt;/code&gt; 类型的 &lt;code&gt;NaN&lt;/code&gt; ，有的人会让这种与异常值比较的操作抛出异常。另外一种办法是让异常值的比较结果为相等，而任何其他值与异常值比较的结果为不相等。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;注意&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
此规则可以应用与所有通常的比较操作符：&lt;code&gt;!=&lt;/code&gt; , &lt;code&gt;&amp;lt;&lt;/code&gt; , &lt;code&gt;&amp;lt;=&lt;/code&gt; , &lt;code&gt;&amp;gt;&lt;/code&gt;和 &lt;code&gt;&amp;gt;=&lt;/code&gt; 。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;强化&lt;/b&gt;
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;标记计算对象类型不同的&lt;code&gt;operator==()&lt;/code&gt;操作符。其他的也一样： &lt;code&gt;!=&lt;/code&gt; , &lt;code&gt;&amp;lt;&lt;/code&gt; ,
&lt;code&gt;&amp;lt;=&lt;/code&gt; , &lt;code&gt;&amp;gt;&lt;/code&gt; 和&lt;code&gt;&amp;gt;=&lt;/code&gt;。&lt;/li&gt;
&lt;li&gt;标记是成员函数的&lt;code&gt;operator==()&lt;/code&gt;操作，其他也一样。&lt;/li&gt;
&lt;/ul&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines C.85 swap 函数应是 noexcept 的</title>
   <link href="http://kimi.im/2022-11-18-cppcoreguidelines-c85"/>
   <updated>2022-11-18T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-c85</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
C.85: Make &lt;code&gt;swap&lt;/code&gt; &lt;code&gt;noexcept&lt;/code&gt;
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;理由&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
&lt;code&gt;swap&lt;/code&gt; 函数不能运行失败。 &lt;code&gt;swap&lt;/code&gt; 如以异常情况退出，是一种错误的设计，程序最好应该直接终止。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;强化&lt;/b&gt;
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;（简单）当一个类有 &lt;code&gt;swap&lt;/code&gt; 成员函数，该函数应该声明为 &lt;code&gt;noexcept&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines C.84 swap 函数不可运行失败</title>
   <link href="http://kimi.im/2022-11-16-cppcoreguidelines-c84"/>
   <updated>2022-11-16T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-c84</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
C.84: A swap function must not fail
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;理由&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
&lt;code&gt;swap&lt;/code&gt; 的使用很广泛，一般我们假定它是不会运行失败的。如果 &lt;code&gt;swap&lt;/code&gt; 会运行失败，程序就很难写正确了。对于 &lt;code&gt;swap&lt;/code&gt; 会运行失败的那种类型，标准库容器和算法也不能为之正确工作了。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;例子&lt;/b&gt;
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-bad src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;swap&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;My_vector&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;x&lt;/span&gt;, &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;My_vector&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;y&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;auto&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;tmp&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;x&lt;/span&gt;;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// copy elements&lt;/span&gt;
    &lt;span style=&quot;color: #000000;&quot;&gt;x&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; y;
    &lt;span style=&quot;color: #000000;&quot;&gt;y&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; tmp;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
这里不仅运行慢，而且如果 &lt;code&gt;tmp&lt;/code&gt; 中有内存分配的话， &lt;code&gt;swap&lt;/code&gt; 还可能抛出异常，这样就会导致 &lt;code&gt;STL&lt;/code&gt; 算法运行失败。
&lt;/p&gt;


&lt;p&gt;
强化
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;（简单）当一个类有 &lt;code&gt;swap&lt;/code&gt; 成员函数时，应该声明为 &lt;code&gt;noexcept&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines C.83 对于值类型，考虑提供 noexcept 的 swap 函数</title>
   <link href="http://kimi.im/2022-11-14-cppcoreguidelines-c83"/>
   <updated>2022-11-14T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-c83</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
C.83: For value-like types, consider providing a noexcept swap function
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;理由&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
&lt;code&gt;swap&lt;/code&gt; 可用来方便的实现多种常用操作，比如快速地移动对象，赋值操作。 &lt;code&gt;swap&lt;/code&gt;
能够确保功能的确定性，减少代码调用错误。
&lt;/p&gt;

&lt;p&gt;
在拷贝构造函数中考虑使用 &lt;code&gt;swap&lt;/code&gt; 实现赋值操作。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;例子&lt;/b&gt;
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Foo&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;public&lt;/span&gt;:
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold; font-style: italic;&quot;&gt;swap&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Foo&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;rhs&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;noexcept&lt;/span&gt;
    &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;
        m1.&lt;span style=&quot;color: #3a5fcd; font-weight: bold; font-style: italic;&quot;&gt;swap&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;rhs.&lt;span style=&quot;color: #110099; font-style: italic;&quot;&gt;m1&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt;;
        &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;std&lt;/span&gt;::&lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;swap&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;m2, rhs.&lt;span style=&quot;color: #110099; font-style: italic;&quot;&gt;m2&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt;;
    &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;private&lt;/span&gt;:
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Bar&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;m1&lt;/span&gt;;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;m2&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
在你自定义类的名字空间下实现一个非成员的 &lt;code&gt;swap&lt;/code&gt; 函数可以方便函数调用使用。
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;swap&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Foo&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;a&lt;/span&gt;, &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Foo&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;b&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    a.&lt;span style=&quot;color: #3a5fcd; font-weight: bold; font-style: italic;&quot;&gt;swap&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;b&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
&lt;b&gt;强化&lt;/b&gt;
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;可拷贝类型须提供一个 &lt;code&gt;swap&lt;/code&gt; 成员函数或外部的 &lt;code&gt;swap&lt;/code&gt; 函数重载&lt;/li&gt;
&lt;li&gt;（简单）当一个类有 &lt;code&gt;swap&lt;/code&gt; 成员函数时，应该声明为 &lt;code&gt;noexcept&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines C.82 不要在构造/析构函数中调用虚函数</title>
   <link href="http://kimi.im/2022-11-13-cppcoreguidelines-c82"/>
   <updated>2022-11-13T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-c82</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
C.82: Don’t call virtual functions in constructors and destructors
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;理由&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
构造函数和析构函数中调用的函数应该是当前正在构造的对象的函数，而不应该是继承类中需要重载的虚函数。不然会让人很难理解。
&lt;/p&gt;

&lt;p&gt;
更差的情况，在构造或析构函数中，直接或间接调用还没实现的纯虚函数会产生未定义的行为。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;例子&lt;/b&gt;
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-bad src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Base&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;public&lt;/span&gt;:
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;virtual&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold; font-style: italic;&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;0&lt;/span&gt;;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// not implemented&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;virtual&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold; font-style: italic;&quot;&gt;g&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt;;       &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// implemented with Base version&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;virtual&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold; font-style: italic;&quot;&gt;h&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt;;       &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// implemented with Base version&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;virtual&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;~&lt;/span&gt;Base&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt;;        &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// implemented with Base version&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Derived&lt;/span&gt; : &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Base&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;public&lt;/span&gt;:
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold; font-style: italic;&quot;&gt;g&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;override&lt;/span&gt;;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// provide Derived implementation&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold; font-style: italic;&quot;&gt;h&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;final&lt;/span&gt;;      &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// provide Derived implementation&lt;/span&gt;

    &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;Derived&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt;
    &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;
        &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// BAD: attempt to call an unimplemented virtual function&lt;/span&gt;
        &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;()&lt;/span&gt;;

        &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// BAD: will call Derived::g, not dispatch further virtually&lt;/span&gt;
        &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;g&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;()&lt;/span&gt;;

        &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// GOOD: explicitly state intent to call only the visible version&lt;/span&gt;
        &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Derived&lt;/span&gt;::&lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;g&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;()&lt;/span&gt;;

        &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ok, no qualification needed, h is final&lt;/span&gt;
        &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;h&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;()&lt;/span&gt;;
    &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;
&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;
&lt;b&gt;注意&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
调用一个明确限定了从属于哪个类的函数，就算这个函数是个虚函数，也已经不是虚调用了。
&lt;/p&gt;

&lt;p&gt;
请查看&lt;a href=&quot;2022-10-20-cppcoreguidelines-c50.html#ID-AFC7B930-59F8-418B-AF59-06530F03AC9F&quot;&gt;C.50工厂函数&lt;/a&gt;，如何调用继承类的函数而不会导致未定义行为结果。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;注意&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
在构造函数和析构函数中调用虚函数没有什么内在错误。语义上来说这种调用是类型安全的。但是，经验表明这种调用不太需要、容易混淆维护者、成为信手的错误之源。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;强化&lt;/b&gt;
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;标记在构造和析构函数中调用虚函数的情况&lt;/li&gt;
&lt;/ul&gt;
</content>
 </entry>
 
 <entry>
   <title>单词本：obsolescence & adolescence</title>
   <link href="http://kimi.im/2022-11-13-english-obsolescence-and-adolescence"/>
   <updated>2022-11-13T00:00:00+00:00</updated>
   <id>http://kimi.im/english-obsolescence-and-adolescence</id>
   <content type="html">&lt;p&gt;
最近学习安全协议，看到这一段：
&lt;/p&gt;

&lt;p&gt;
There have been three versions of IPsec. All new systems should
implement IPsec-v3, as it has many enhancements not found in the
previous versions. However, IPsec-v2 is still implemented in numerous
current systems, despite the fact that it is &lt;b&gt;obsolete&lt;/b&gt;.
&lt;/p&gt;

&lt;p&gt;
IPSec 总共有三个版本。最新版本是 IPSec-v3，新的系统要支持这个版本。因为这个版本实现了很多新的增强功能。然而，尽管 IPSec-v2 已经淘汰了，目前很多系统依然只实现了 IPSec-v2。
&lt;/p&gt;

&lt;p&gt;
这里有一个词 obsolete，这个是计算机科学中经常用到的单词。当新的系统版本里实现了一个接口的新版本，或者新的替代方案的时候，我们就说老的接口已经 obsolete。对于 obsolete 淘汰了的接口，我们不建议在新的开发系统中继续使用，而是建议使用新的替代接口。其他，比如某个软件功能我们不再支持维护开发了，我们就把这个功能标注为 obsolete。
&lt;/p&gt;

&lt;p&gt;
这个 obsolete 其实源自拉丁语 ob + soletus。soletus 是 solere 的过去分词，就是产生习惯了的意思。而 ob 是相反的意思，反习惯了，就是不习惯了，就是淘汰了么。
&lt;/p&gt;

&lt;p&gt;
obsolete 的名词形式就是 obsolescence，陈旧、淘汰、过时的名词。比如：
computers are infamous for their rapid obsolescence。（计算机因其快速过时而臭名昭著）。
&lt;/p&gt;

&lt;p&gt;
这个 obsolescence 又和另一个词 adolescence 很像。adolescence 是青春期的意思。它的形容词形式是 adolescent，青春期的、不成熟的、青少年。比如
The adolescent brain develops at a rate unseen since early childhood –
making girls and boys hypersensitive to influences in their
environments. 青春期的大脑以儿童时期以来罕见的速度发展，导致男孩女孩对影响他们的环境超级敏感。
&lt;/p&gt;

&lt;p&gt;
这个 adolescence 源自 adolscentia, ad + alescere 就是生长成熟的意思。
alere 就是滋养的意思。
&lt;/p&gt;

&lt;p&gt;
可以看到，虽然 obsolescence 和 adolescence 看起来很像，但是词源还是很不一样的！
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines C.81 如果不想要默认行为，用 =delete 去掉</title>
   <link href="http://kimi.im/2022-11-10-cppcoreguidelines-c81"/>
   <updated>2022-11-10T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-c81</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
C.81: Use &lt;code&gt;=delete&lt;/code&gt; when you want to disable default behaviour (without
wanting an alternative)
&lt;/p&gt;

&lt;p&gt;
&lt;b&gt;理由&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
某些情况，不需要默认操作。
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Immortal&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;public&lt;/span&gt;:
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;~&lt;/span&gt;Immortal&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;delete&lt;/span&gt;;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// do not allow destruction&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ...&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;use&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Immortal&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;ugh&lt;/span&gt;;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// error: ugh cannot be destroyed&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Immortal&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;*&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;p&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Immortal&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;{}&lt;/span&gt;;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;delete&lt;/span&gt; p;       &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// error: cannot destroy *p&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;main&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;use&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;pre class=&quot;example&quot; id=&quot;org4f40140&quot;&gt;
C-src-xCgZfR.cpp: In function &apos;void use()&apos;:
C-src-xCgZfR.cpp:18:14: error: use of deleted function &apos;Immortal::~Immortal()&apos;
   18 |     Immortal ugh;   // error: ugh cannot be destroyed
      |              ^~~
C-src-xCgZfR.cpp:12:5: note: declared here
   12 |     ~Immortal() = delete;   // do not allow destruction
      |     ^
C-src-xCgZfR.cpp:20:12: error: use of deleted function &apos;Immortal::~Immortal()&apos;
   20 |     delete p;       // error: cannot destroy *p
      |            ^
C-src-xCgZfR.cpp:12:5: note: declared here
   12 |     ~Immortal() = delete;   // do not allow destruction
      |     ^
&lt;/pre&gt;


&lt;p&gt;
&lt;b&gt;例子&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
你可以移动&lt;code&gt;unique_ptr&lt;/code&gt;但不能拷贝它。要实现这种要求，可以将左值拷贝函数删掉。
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;template&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt;, &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;D&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;default_delete&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;unique_ptr&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;public&lt;/span&gt;:
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ...&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;constexpr&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;unique_ptr&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;noexcept&lt;/span&gt;;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;explicit&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;unique_ptr&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;pointer&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;p&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;noexcept&lt;/span&gt;;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ...&lt;/span&gt;
    &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;unique_ptr&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;unique_ptr&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;u&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;noexcept&lt;/span&gt;;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// move constructor&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ...&lt;/span&gt;
    &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;unique_ptr&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;unique_ptr&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;delete&lt;/span&gt;; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// disable copy from lvalue&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ...&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;

&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;unique_ptr&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;make&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// make &quot;something&quot; and return it by moving&lt;/span&gt;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;unique_ptr&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;pi&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{}&lt;/span&gt;;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;auto&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;pi2&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;pi&lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;;      &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// error: no move constructor from lvalue&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;auto&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;pi3&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;make&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;()&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;;  &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// OK, move: the result of make() is an rvalue&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
注意：删除的函数须是 &lt;code&gt;public&lt;/code&gt; 的。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;强化&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
删除/禁用某些默认操作必须是基于某个明确的目的。我们可以假设删除了默认操作的类是有问题，只有当程序员明确指出是有意为之，我们才允许。
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines C.80 如果要明确使用默认机制，请添加 =default</title>
   <link href="http://kimi.im/2022-11-08-cppcoreguidelines-c80"/>
   <updated>2022-11-08T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-c80</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
C.80: Use &lt;code&gt;=default&lt;/code&gt; if you have to be explicit about using the default
semantics
&lt;/p&gt;

&lt;p&gt;
&lt;b&gt;理由&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
编译器生成的默认操作，通常比自己手工实现的效果要好。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;例子&lt;/b&gt;
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Tracer&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;string&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;message&lt;/span&gt;;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;public&lt;/span&gt;:
    &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;Tracer&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;string&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;m&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;
        : &lt;span style=&quot;color: #110099; font-style: italic;&quot;&gt;message&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;m&lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;
        cout &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;entering &quot;&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; message &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;&apos;\n&apos;&lt;/span&gt;;
    &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;~&lt;/span&gt;Tracer&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;
        cout &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;exiting &quot;&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; message &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;&apos;\n&apos;&lt;/span&gt;;
    &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;

    &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;Tracer&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Tracer&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;default&lt;/span&gt;;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Tracer&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt; operator&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Tracer&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;default&lt;/span&gt;;
    &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;Tracer&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Tracer&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;default&lt;/span&gt;;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Tracer&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt; operator&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Tracer&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;default&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;main&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Tracer&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;t&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;hi&quot;&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Tracer&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;k&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;lo&quot;&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;;
    &lt;span style=&quot;color: #000000;&quot;&gt;t&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; k;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;pre class=&quot;example&quot;&gt;
entering hi
entering lo
exiting lo
exiting lo
&lt;/pre&gt;


&lt;p&gt;
因为我们定义了析构函数，所以我们必须定义复制和移动操作。用上 &lt;code&gt;= default&lt;/code&gt;
是最好最简单的办法。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;例子&lt;/b&gt;
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Tracer2&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;string&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;message&lt;/span&gt;;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;public&lt;/span&gt;:
    &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;Tracer2&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;string&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;m&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;
        : &lt;span style=&quot;color: #110099; font-style: italic;&quot;&gt;message&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;m&lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;
        cout &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;entering &quot;&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; message &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;&apos;\n&apos;&lt;/span&gt;;
    &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;~&lt;/span&gt;Tracer2&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;
        cout &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;exiting &quot;&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; message &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;&apos;\n&apos;&lt;/span&gt;;
    &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;
    &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;Tracer2&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Tracer2&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;a&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; : &lt;span style=&quot;color: #110099; font-style: italic;&quot;&gt;message&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;a.&lt;span style=&quot;color: #110099; font-style: italic;&quot;&gt;message&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{}&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Tracer2&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt; operator&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Tracer2&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;a&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;
        &lt;span style=&quot;color: #000000;&quot;&gt;message&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; a.&lt;span style=&quot;color: #110099; font-style: italic;&quot;&gt;message&lt;/span&gt;;
        &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;this&lt;/span&gt;;
    &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;
    &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;Tracer2&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Tracer2&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;a&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; :&lt;span style=&quot;color: #110099; font-style: italic;&quot;&gt;message&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;a.&lt;span style=&quot;color: #110099; font-style: italic;&quot;&gt;message&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{}&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Tracer2&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt; operator&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Tracer2&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;a&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;
        &lt;span style=&quot;color: #000000;&quot;&gt;message&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; a.&lt;span style=&quot;color: #110099; font-style: italic;&quot;&gt;message&lt;/span&gt;;
        &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;this&lt;/span&gt;;
    &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;main&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Tracer2&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;t2&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;bonjour&quot;&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;;    
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Tracer2&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;k2&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;halo&quot;&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;;
    &lt;span style=&quot;color: #000000;&quot;&gt;t2&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; k2;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;pre class=&quot;example&quot;&gt;
entering bonjour
entering halo
exiting halo
exiting halo
&lt;/pre&gt;



&lt;p&gt;
手工编写拷贝和移动操作，又繁琐又麻烦，并且容易出错。还是交给编译器去处理吧。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;强化&lt;/b&gt;
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;（一般）除非和编译器生成的操作一样，不然不要自己手动编写，画蛇添足。&lt;/li&gt;
&lt;/ul&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines C.67 一个多态类应该隐藏公开的赋值和移动操作</title>
   <link href="http://kimi.im/2022-11-04-cppcoreguidelines-c67"/>
   <updated>2022-11-04T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-c67</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
C.67: A polymorphic class should suppress public copy/move
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;理由&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
多态类定义或继承了至少一个虚函数。多态类很可能被当成基类用。这样的基类就可以代表多个多态子类，就能实现多态行为。如果多态类对象如果不小心以值传参，编译器会隐式地调用拷贝构造函数和赋值操作。我们可能会遇到对象切片（ slicing ）的风险：继承类对象的部分数据被当作基类对象的数据使用。于是，多态行为就失效了。
&lt;/p&gt;

&lt;p&gt;
如果类中没有数据，请将拷贝和移动函数设置为&lt;code&gt;= delete&lt;/code&gt;。如果有数据，则将他们设置为 &lt;code&gt;protected&lt;/code&gt; 。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;例子&lt;/b&gt;
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-bad src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;B&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// BAD: polymorphic base class doesn&apos;t suppress copying&lt;/span&gt;
  &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;public&lt;/span&gt;:
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;virtual&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;char&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold; font-style: italic;&quot;&gt;m&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;&apos;B&apos;&lt;/span&gt;; &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ... nothing about copy operations, so uses default ...&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;D&lt;/span&gt; : &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;B&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
  &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;public&lt;/span&gt;:
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;char&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold; font-style: italic;&quot;&gt;m&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;override&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;&apos;D&apos;&lt;/span&gt;; &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ...&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;B&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;b&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;auto&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;b2&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;b&lt;/span&gt;; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// oops, slices the object; b2.m() will return &apos;B&apos;&lt;/span&gt;
    cout &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;b2.m() = &quot;&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; b2.&lt;span style=&quot;color: #3a5fcd; font-weight: bold; font-style: italic;&quot;&gt;m&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;\n&quot;&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;main&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;D&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;d&lt;/span&gt;;
    cout &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;d.m() = &quot;&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; d.&lt;span style=&quot;color: #3a5fcd; font-weight: bold; font-style: italic;&quot;&gt;m&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;\n&quot;&lt;/span&gt;;
    &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;d&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;pre class=&quot;example&quot;&gt;
d.m() = D
b2.m() = B
&lt;/pre&gt;


&lt;p&gt;
在&lt;code&gt;f()&lt;/code&gt;中，~D~ 类型的对象 &lt;code&gt;d&lt;/code&gt; 被当成了 &lt;code&gt;B&lt;/code&gt; 类型的对象使用了！
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;例子&lt;/b&gt;
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;B&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// GOOD: polymorphic class suppresses copying&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;public&lt;/span&gt;:
    &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;B&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;default&lt;/span&gt;;
    &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;B&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;B&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;delete&lt;/span&gt;;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;B&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt; operator&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;B&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;delete&lt;/span&gt;;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;virtual&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;char&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold; font-style: italic;&quot;&gt;m&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;&apos;B&apos;&lt;/span&gt;; &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ...&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;D&lt;/span&gt; : &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;B&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;public&lt;/span&gt;:
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;char&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold; font-style: italic;&quot;&gt;m&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;override&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;&apos;D&apos;&lt;/span&gt;; &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ...&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;B&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;b&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;auto&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;b2&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;b&lt;/span&gt;; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ok, compiler will detect inadvertent copying, and protest&lt;/span&gt;
    cout &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;b2.m() = &quot;&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; b2.&lt;span style=&quot;color: #3a5fcd; font-weight: bold; font-style: italic;&quot;&gt;m&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;\n&quot;&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;main&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;D&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;d&lt;/span&gt;;
    cout &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;d.m() = &quot;&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; d.&lt;span style=&quot;color: #3a5fcd; font-weight: bold; font-style: italic;&quot;&gt;m&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;\n&quot;&lt;/span&gt;;
    &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;d&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;pre class=&quot;example&quot; id=&quot;org00559ee&quot;&gt;
C-src-s0pxn3.cpp: In function &apos;void f(B&amp;amp;)&apos;:
C-src-s0pxn3.cpp:27:15: error: use of deleted function &apos;B::B(const B&amp;amp;)&apos;
   27 |     auto b2 = b; // ok, compiler will detect inadvertent copying, and protest
      |               ^
C-src-s0pxn3.cpp:13:5: note: declared here
   13 |     B(const B&amp;amp;) = delete;
      |     ^

&lt;/pre&gt;

&lt;p&gt;
这时候，编译器给出警告，基类 &lt;code&gt;B&lt;/code&gt; 的拷贝构造函数没有定义！
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;注意&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
如果你需要多态对象的深度副本，请使用&lt;code&gt;clone()&lt;/code&gt;函数。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;例外&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
表示异常的对象的类既要多态，又要能够赋值拷贝构造。
&lt;/p&gt;

&lt;p&gt;
&lt;b&gt;强化&lt;/b&gt;
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;标记有公开拷贝构造函数的多态类&lt;/li&gt;
&lt;li&gt;标记有赋值构造函数的多态类&lt;/li&gt;
&lt;/ul&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines C.66 移动操作应是 noexcept</title>
   <link href="http://kimi.im/2022-11-03-cppcoreguidelines-c66"/>
   <updated>2022-11-03T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-c66</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;


&lt;p&gt;
C.66: Make move operations &lt;code&gt;noexcept&lt;/code&gt;
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;理由&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
在移动操作过程中抛出异常，违反了大多数人的常理。在标准库和语言工具中使用时，一个不抛出异常的移动操作效率会更高。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;例子&lt;/b&gt;
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;template&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;typename&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Vector&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
  &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;public&lt;/span&gt;:
    &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;Vector&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Vector&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;a&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;noexcept&lt;/span&gt;
        :&lt;span style=&quot;color: #110099; font-style: italic;&quot;&gt;elem&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;a.&lt;span style=&quot;color: #110099; font-style: italic;&quot;&gt;elem&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;, &lt;span style=&quot;color: #110099; font-style: italic;&quot;&gt;sz&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;a.&lt;span style=&quot;color: #110099; font-style: italic;&quot;&gt;sz&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;
        &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;
            a.&lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;sz&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;0&lt;/span&gt;; a.&lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;elem&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #110099; font-weight: bold;&quot;&gt;nullptr&lt;/span&gt;;
        &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Vector&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt; operator&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Vector&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;a&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;noexcept&lt;/span&gt;
        &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;
            &lt;span style=&quot;color: #000000;&quot;&gt;elem&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; a.&lt;span style=&quot;color: #110099; font-style: italic;&quot;&gt;elem&lt;/span&gt;; &lt;span style=&quot;color: #000000;&quot;&gt;sz&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; a.&lt;span style=&quot;color: #110099; font-style: italic;&quot;&gt;sz&lt;/span&gt;; a.&lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;sz&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;0&lt;/span&gt;; a.&lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;elem&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #110099; font-weight: bold;&quot;&gt;nullptr&lt;/span&gt;;
        &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ...&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;private&lt;/span&gt;:
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;*&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;elem&lt;/span&gt;;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;sz&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;
&lt;/pre&gt;
&lt;/div&gt;



&lt;p&gt;
&lt;b&gt;例子&lt;/b&gt;
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-bad src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;template&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;typename&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Vector2&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;public&lt;/span&gt;:
    &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;Vector2&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Vector2&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;a&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;this&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; a; &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;             &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// just use the copy&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Vector2&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt; operator&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Vector2&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;a&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;this&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; a; &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;  &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// just use the copy&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ...&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;private&lt;/span&gt;:
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;*&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;elem&lt;/span&gt;;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;sz&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
&lt;code&gt;Vector2&lt;/code&gt; 不仅效率不高，而且因为 &lt;code&gt;vector&lt;/code&gt; 的复制/拷贝操作需要分配内存，会抛出异常。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;强化&lt;/b&gt;
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;（简单）移动操作应该标记为 &lt;code&gt;noexcept&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
</content>
 </entry>
 
 <entry>
   <title>单词本：triage</title>
   <link href="http://kimi.im/2022-11-03-english-triage"/>
   <updated>2022-11-03T00:00:00+00:00</updated>
   <id>http://kimi.im/english-triage</id>
   <content type="html">&lt;p&gt;
最近的工作重点是工业信息安全，所以呢，大量阅读安全相关的标准文献是免不了的。工业控制系统方面最主要的安全标准是 IEC 62443 Security for
industrial automation and control systems。在2-4分册介绍安全破坏分类分级：
&lt;/p&gt;

&lt;p&gt;
&lt;b&gt;Triage&lt;/b&gt; activities are often used by asset owners to evaluate security
compromises and identify those that are significant enough to be
considered incidents.
&lt;/p&gt;

&lt;p&gt;
翻译：资产拥有者经常使用破坏损坏鉴定活动来评估安全损害程度，鉴别哪些损坏属于安全事故。
&lt;/p&gt;

&lt;p&gt;
这里用到个词 triage “伤残鉴定”，一般，我们看到 age 结尾的动词，就可以想当然的认为是法语里来的。发音规则跟英语就会很不一样，这个词的发音是
[ˈtriːɑːʒ]。还有个词 arbitrage [ˈɑːbɪtrɑːʒ] “套利”也是法语里来的。
&lt;/p&gt;

&lt;p&gt;
triage 是法语动词 trier [trije] (特里爷) 的名词化，而 trier 的意思是
to sort out, to select，挑选，选择。
&lt;/p&gt;

&lt;p&gt;
比如 trier des lentilles 挑选扁豆
&lt;/p&gt;

&lt;p&gt;
trier sur le volet 精心挑选，字面意思是通过百叶窗挑选，也就是层层选择咯。
&lt;/p&gt;

&lt;p&gt;
trier les candidats 挑选候选人，选拔候选人。
&lt;/p&gt;

&lt;p&gt;
triage 最早在第一次世界大战的时候用在评估战场伤员的受伤级别的。所以在安全标准中引伸了来表示评估信息安全破坏级别。
&lt;/p&gt;

&lt;p&gt;
似乎，法语里来的不少词语都是更战斗相关的。比如 materiel 是 material 的法语形式，表示战略物资、军备。personnel 是 personnel 是 person 的法语形式，表示军队全员。
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>单词本：dexterous</title>
   <link href="http://kimi.im/2022-11-02-english-dexterous"/>
   <updated>2022-11-02T00:00:00+00:00</updated>
   <id>http://kimi.im/english-dexterous</id>
   <content type="html">&lt;p&gt;
虽然用了10多年的Emacs，但是还是没有完全掌握。所以，又看了一遍Mastering
Emacs。在介绍一个能在另一个窗口翻页的快捷键的时候，作者提到有两个方法，一个方法是 Ctrl+Alt+- Ctrl+Alt+v，另一个是按住 Ctrl+Alt+Shift+v。他认为后一个快捷键方法比较繁琐，他说：
&lt;/p&gt;

&lt;p&gt;
The latter command requires a particularly &lt;b&gt;dexterous&lt;/b&gt; finger
maneuver. 后面那个快捷键命令需要特别 &lt;b&gt;灵巧的&lt;/b&gt; 手指去操作。
&lt;/p&gt;

&lt;p&gt;
这里用到一个词 dexterous，我看到有的地方也写成 dextrous。它的意思是手指灵巧的、敏捷的。就像前面介绍的那个快捷键，需要四个手指同时开工才能出发，有点像拉小提琴时候的手指操作了。
&lt;/p&gt;

&lt;p&gt;
这个 dexterous 是从拉丁语 dexter 演变过来的。dexter 的意思是在右边，因为一般人们右手比较灵巧，所以就延伸出来灵巧的意思。还有一个词
ambidextrous 是双手灵巧的意思，因为双手灵巧，又延伸出怀有贰心之意。
ambi- 在拉丁语里是 both，两者皆有的意思。
&lt;/p&gt;

&lt;p&gt;
dexterous 的名词形式 dextrity 指的是用手操作的灵巧技能。
&lt;/p&gt;

&lt;p&gt;
还有一个单词 deft 是轻便、手快、移动快的意思。看起来好像和 dexter 有一些渊源，无从知晓了。
&lt;/p&gt;

&lt;p&gt;
英语里右边是 right。right 也有正确之意，难道是因为右手是正常人使用的，所以是对的、正确的？我老家温州乐清那块地方左手叫奇手，右手叫正手，也有这个意味吧。
&lt;/p&gt;

&lt;p&gt;
德语右边是 recht，也有对的、正确的、合适的之意。和英语的 right 一脉相承的。
&lt;/p&gt;

&lt;p&gt;
法语里右边是 droit，这个倒是和 dexter 有那么一些相似。这样看来，法语的拉丁味比英语和德语要浓一些呀。
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines C.65 确保可以安全的自己赋值给自己</title>
   <link href="http://kimi.im/2022-10-31-cppcoreguidelines-c65"/>
   <updated>2022-10-31T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-c65</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
C.65: Make move assignment safe for self-assignment
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;理由&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
如果&lt;code&gt;x = x&lt;/code&gt;会改变 &lt;code&gt;x&lt;/code&gt; 的值，人们会觉得震惊，会引起出错。虽然，人们通常不会直接通过移动（ move ）来写自赋值操作，但是有些情况会使用移动操作。比如&lt;code&gt;std::swap&lt;/code&gt;是通过移动操作实现的，如果你在处理&lt;code&gt;swap(a, b)&lt;/code&gt;的时候，不小心让 &lt;code&gt;a&lt;/code&gt; 和 &lt;code&gt;b&lt;/code&gt; 指向了同一个对象。这时候，错误的自移动操作会导致很难发现的严重故障。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;例子&lt;/b&gt;
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Foo&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;string&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;s&lt;/span&gt;;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;i&lt;/span&gt;;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;public&lt;/span&gt;:
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Foo&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt; operator&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Foo&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;a&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ...&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;

&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Foo&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Foo&lt;/span&gt;::&lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;operator&lt;/span&gt;&lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Foo&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;a&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;noexcept&lt;/span&gt;  &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// OK, but there is a cost&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;this&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;==&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt;a&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;this&lt;/span&gt;;  &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// this line is redundant&lt;/span&gt;
    &lt;span style=&quot;color: #000000;&quot;&gt;s&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;std&lt;/span&gt;::&lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;move&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;a.&lt;span style=&quot;color: #110099; font-style: italic;&quot;&gt;s&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
    &lt;span style=&quot;color: #000000;&quot;&gt;i&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; a.&lt;span style=&quot;color: #110099; font-style: italic;&quot;&gt;i&lt;/span&gt;;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;this&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
这一行语句&lt;code&gt;if (this == &amp;amp;a) return *this;&lt;/code&gt;并没太大作用，反而会使得程序变慢。
&lt;/p&gt;

&lt;p&gt;
&lt;b&gt;注意&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
ISO 标准只保障标准库容器的状态是“有效的状态，但不明确指定是什么状态”。显然，在十多年的实验和产品使用过程中，不是什么大问题。这条指南更强调完全的安全。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;例子&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
这个例子展示了不需要进行测试的情况下，移动一个指针。可以认为是 move 操作的一个实现方法：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-C++&quot;&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;// move from other.ptr to this-&amp;gt;ptr&lt;/span&gt;
&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;*&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;temp&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; other.&lt;span style=&quot;color: #110099; font-style: italic;&quot;&gt;ptr&lt;/span&gt;;
other.&lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;ptr&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #110099; font-weight: bold;&quot;&gt;nullptr&lt;/span&gt;;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;delete&lt;/span&gt; ptr;
&lt;span style=&quot;color: #000000;&quot;&gt;ptr&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; temp;
&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;
&lt;b&gt;强化&lt;/b&gt;
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;（适度）在自赋值的情况下，移动赋值操作不能删除对象的指针成员，或把它设置成 &lt;code&gt;nullptr&lt;/code&gt; 。&lt;/li&gt;
&lt;li&gt;（不是强制的）查看标准库容器类型的使用方法，包括 &lt;code&gt;string&lt;/code&gt; 。确保在普通的使用过程中是安全的。&lt;/li&gt;
&lt;/ul&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines C.64 移动操作应该移动，并确保留下的数据状态有效</title>
   <link href="http://kimi.im/2022-10-30-cppcoreguidelines-c64"/>
   <updated>2022-10-30T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-c64</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
C.64: A move operation should move and leave its source in a valid state
&lt;/p&gt;

&lt;p&gt;
&lt;b&gt;理由&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
在&lt;code&gt;y = std::move(x)&lt;/code&gt;操作后， &lt;code&gt;y&lt;/code&gt; 的值应该变成 &lt;code&gt;x&lt;/code&gt; 的值， &lt;code&gt;x&lt;/code&gt; 应该保持一个有效的状态。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;例子&lt;/b&gt;
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;X&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// OK: value semantics&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;public&lt;/span&gt;:
    &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;X&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt;;
    &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;X&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;X&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;a&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;noexcept&lt;/span&gt;;  &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// move X&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;X&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt; operator&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;X&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;a&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;noexcept&lt;/span&gt;; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// move-assign X&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold; font-style: italic;&quot;&gt;modify&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt;;     &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// change the value of X&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ...&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;~&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;X&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;delete&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;[]&lt;/span&gt; p; &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;private&lt;/span&gt;:
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;*&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;p&lt;/span&gt;;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;sz&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;

&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;X&lt;/span&gt;::&lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;X&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;X&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;a&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;noexcept&lt;/span&gt;
    :&lt;span style=&quot;color: #110099; font-style: italic;&quot;&gt;p&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;a.&lt;span style=&quot;color: #110099; font-style: italic;&quot;&gt;p&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;, &lt;span style=&quot;color: #110099; font-style: italic;&quot;&gt;sz&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;a.&lt;span style=&quot;color: #110099; font-style: italic;&quot;&gt;sz&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;  &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// steal representation&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    a.&lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;p&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #110099; font-weight: bold;&quot;&gt;nullptr&lt;/span&gt;;     &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// set to &quot;empty&quot;&lt;/span&gt;
    a.&lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;sz&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;0&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;use&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;X&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;x&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;{}&lt;/span&gt;;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ...&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;X&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;y&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;std&lt;/span&gt;::&lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;move&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;x&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
    &lt;span style=&quot;color: #000000;&quot;&gt;x&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;X&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;{}&lt;/span&gt;;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// OK&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// OK: x can be destroyed&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;
&lt;b&gt;注意&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
理想情况下，被移动掉数据的对象，它的值应该是默认数据值。如果你不想这样，你得有一个充足的理由。但是，并不是所有类型都有一个默认值，而且有些类型恢复默认值的系统开销会比较高。所以，标准只要求销毁掉被移动的对象。通常，我们可以很容易很轻松的做的更好：标准库还假设，我们可以继续给被移动掉的对象赋值。请确保，被移动掉的对象保持一个有效的状态。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;注意&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
请确保这么操作是合法的：&lt;code&gt;x = std::move(y); y = z;&lt;/code&gt;除非有很强烈的特殊理由违反本指南。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;强化&lt;/b&gt;
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;检查对成员赋值的移动操作。如果有默认的构造函数，请比较成员赋值与默认构造函数中的初始化。&lt;/li&gt;
&lt;/ul&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines C.63 移动赋值操做不能是虚的，接收 && 参数，返回引用变量</title>
   <link href="http://kimi.im/2022-10-29-cppcoreguidelines-c63"/>
   <updated>2022-10-29T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-c63</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
C.63: Make move assignment non-&lt;code&gt;virtual&lt;/code&gt;, take the parameter by &lt;code&gt;&amp;amp;&amp;amp;&lt;/code&gt;, and return by non-&lt;code&gt;const&amp;amp;&lt;/code&gt;
&lt;/p&gt;

&lt;p&gt;
&lt;b&gt;理由&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
简单又高效。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;强化&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
这样操作就和拷贝赋值操作对齐了。
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;（简单）赋值操作不能是虚函数，此处有恶龙出没！&lt;/li&gt;
&lt;li&gt;（简单）赋值操作应该返回&lt;code&gt;T&amp;amp;&lt;/code&gt;，从而可以串联起来调用。不要返回&lt;code&gt;const T&amp;amp;&lt;/code&gt;，这样的话，串联操作、把对象放入容器的操作就会收到影响。&lt;/li&gt;
&lt;li&gt;（中等难度）移动操作应该（隐式或显式）地调用其基类和成员变量的移动操作。&lt;/li&gt;
&lt;/ul&gt;
</content>
 </entry>
 
 <entry>
   <title>单词本：serendipity</title>
   <link href="http://kimi.im/2022-10-29-english-serendipity"/>
   <updated>2022-10-29T00:00:00+00:00</updated>
   <id>http://kimi.im/english-serendipity</id>
   <content type="html">&lt;p&gt;
最近看的一本书中读到：
&lt;/p&gt;

&lt;p&gt;
Paul Kenny describes at GlaxoSmithKline: From a scientific point of
view, a lot of the research organization is rather &lt;b&gt;serendipity&lt;/b&gt; led:
you invest in research, you may have a direction, but often that
direction will change as a result of information you find.
&lt;/p&gt;

&lt;p&gt;
英国最大制药公司 GlaxoSmithKline(GSK) 的保尔·肯尼说：从科学角度来看，很多研究组织是以 &lt;b&gt;机缘巧合&lt;/b&gt; 为导向的：你投资研究，你可能有个方向，但是经常因为新的发现调整方向。
&lt;/p&gt;

&lt;p&gt;
这里有个有趣的词语 serendipity 机缘巧合的。说起这个词的来历啊，不得不提最近面临国家破产的斯里兰卡。
&lt;/p&gt;

&lt;p&gt;
斯里兰卡这个国家的名字是这么写的 Sri Lanka。在僧伽罗语（Sinhala）里面，
Sri 是一个敬语，大概就是高贵的、伟大的意思。Lanka 是国家、土地或岛屿的意思。所以合在一起就是高贵的国家的意思。斯里兰卡的全称是 Democratic
Socialist Republic of Sri Lanka，即斯里兰卡社会主义共和国。
&lt;/p&gt;

&lt;p&gt;
但是在英国殖民时期，英国人称斯里兰卡为 Ceylon，所以，在以前斯里兰卡也叫锡兰，这也是锡兰红茶 Ceylon Black Tea 的来历了。
&lt;/p&gt;

&lt;p&gt;
如果我们再看向中东波斯，斯里兰卡也是一个伊斯兰教国家，在波斯语里，
Ceylon 又写成 Serendip（塞伦迪普）。这个 Serendip 又是从 Serendib 演变而来。而 Serendib 又是梵文 Siṃhaladvīpa 的变体。Siṃhaladvīpa 的意思是狮子居住的小岛。在斯里兰卡的一个小岛就叫 Serendib（沙芮迪岛）。
&lt;/p&gt;

&lt;p&gt;
那么，回到 serendipity，这个词如果直接翻译，我觉得可以叫锡兰般的传奇。为什么这么说呢？
&lt;/p&gt;

&lt;p&gt;
这要追溯到 1557 年意大利人 Michele Tramezzino 在威尼斯发表的故事
Peregrinaggio di tre giovani figliuoli del re di Serendippo，翻译成英语就是 Tree Princes of Serendip，翻译成中文就是锡兰国三王子的故事。
&lt;/p&gt;

&lt;p&gt;
这个故事讲锡兰国王让他的三个聪明可爱的王子去外国学习，他们仨经过一个沙漠，从骆驼的足迹，就判断出骆驼跛足、独眼、驮着黄油和蜂蜜，还背着个怀孕女人。当他们遇到个找骆驼的人，就把这个判断告诉他，结果被那人怀疑是偷骆驼得人，把三个王子逮到当地国王那里去问罪。
&lt;/p&gt;

&lt;p&gt;
三个王子告诉波斯国王 Beramo：因为骆驼有一个脚印很浅，所以判断有一只跛足；因为吃草只吃一边，所以判断独眼；因为做过的路上左边有蚂蚁，右边有蜜蜂所以判断左边驮着黄油，右边驮着蜂蜜。更神奇的是他们发现附近还有尿尿，用手指沾了闻了下，觉得是个女人。而且女人还要用一只手撑着地才能站起来，所以判断她怀孕了。
&lt;/p&gt;

&lt;p&gt;
当然，故事的结局是，骆驼找到了，国王奖赏三个王子，还聘请他们做顾问。
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines C.62 拷贝赋值操作要能安全的自赋值</title>
   <link href="http://kimi.im/2022-10-28-cppcoreguidelines-c62"/>
   <updated>2022-10-28T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-c62</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
C.62: Make copy assignment safe for self-assignment
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;理由&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
如果&lt;code&gt;x = x&lt;/code&gt;这样的操作会改变 &lt;code&gt;x&lt;/code&gt; 的值，那么人们会感到惊讶，也可能导致大的错误，比如内存泄漏。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;例子&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
标准库的容器能够优雅高效的处理自赋值情况：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-C++&quot;&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;std&lt;/span&gt;::&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;vector&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;v&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;3&lt;/span&gt;, &lt;span style=&quot;color: #110099;&quot;&gt;1&lt;/span&gt;, &lt;span style=&quot;color: #110099;&quot;&gt;4&lt;/span&gt;, &lt;span style=&quot;color: #110099;&quot;&gt;1&lt;/span&gt;, &lt;span style=&quot;color: #110099;&quot;&gt;5&lt;/span&gt;, &lt;span style=&quot;color: #110099;&quot;&gt;9&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;
&lt;span style=&quot;color: #000000;&quot;&gt;v&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; v;
&lt;span style=&quot;color: #3F7F5F;&quot;&gt;// the value of v is still {3, 1, 4, 1, 5, 9}&lt;/span&gt;
&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;std&lt;/span&gt;::&lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;for_each&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;v.&lt;span style=&quot;color: #3a5fcd; font-weight: bold; font-style: italic;&quot;&gt;cbegin&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt;, v.&lt;span style=&quot;color: #3a5fcd; font-weight: bold; font-style: italic;&quot;&gt;cend&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt;, &lt;span style=&quot;color: #7388d6;&quot;&gt;[](&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;n&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;){&lt;/span&gt;cout &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; n &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot; &quot;&lt;/span&gt;;&lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;
&lt;/pre&gt;
&lt;/div&gt;

&lt;pre class=&quot;example&quot;&gt;
3 1 4 1 5 9
&lt;/pre&gt;


&lt;p&gt;
&lt;b&gt;注意&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
默认赋值操作的正确执行是基于其成员能够正确处理自赋值情况。
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;struct&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Bar&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;vector&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;pair&lt;/span&gt;&lt;span style=&quot;color: #909183; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt;, &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #909183; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;v&lt;/span&gt;;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;map&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;string&lt;/span&gt;, &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;m&lt;/span&gt;;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;string&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;s&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;

&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Bar&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;b&lt;/span&gt;;
&lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ...&lt;/span&gt;
&lt;span style=&quot;color: #000000;&quot;&gt;b&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; b;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// correct and efficient&lt;/span&gt;
cout &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; b.&lt;span style=&quot;color: #110099; font-style: italic;&quot;&gt;v&lt;/span&gt;.&lt;span style=&quot;color: #3a5fcd; font-weight: bold; font-style: italic;&quot;&gt;size&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;;
&lt;/pre&gt;
&lt;/div&gt;

&lt;pre class=&quot;example&quot;&gt;
0
&lt;/pre&gt;



&lt;p&gt;
&lt;b&gt;注意&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
你可以显式地测试自赋值情况，但是更快更优雅的方式是免去测试是否自赋值的情况。
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Foo&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;string&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;s&lt;/span&gt;;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;i&lt;/span&gt;;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;public&lt;/span&gt;:
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Foo&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt; operator&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Foo&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;a&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ...&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;

&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Foo&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Foo&lt;/span&gt;::&lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;operator&lt;/span&gt;&lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Foo&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;a&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// OK, but there is a cost&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;this&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;==&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt;a&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;this&lt;/span&gt;;
    &lt;span style=&quot;color: #000000;&quot;&gt;s&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; a.&lt;span style=&quot;color: #110099; font-style: italic;&quot;&gt;s&lt;/span&gt;;
    &lt;span style=&quot;color: #000000;&quot;&gt;i&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; a.&lt;span style=&quot;color: #110099; font-style: italic;&quot;&gt;i&lt;/span&gt;;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;this&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
以上做法很安全，且看起来很高效。但是如果我们进行几百万次的自赋值操作会怎么样？以上例子中的判断是不是对象自己这个操作会重复几百万次。尽管编译器可能会根据实际情况进行优化。可以考虑用以下方式实现：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-C++&quot;&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Foo&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Foo&lt;/span&gt;::&lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;operator&lt;/span&gt;&lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Foo&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;a&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// simpler, and probably much better&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #000000;&quot;&gt;s&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; a.&lt;span style=&quot;color: #110099; font-style: italic;&quot;&gt;s&lt;/span&gt;;
    &lt;span style=&quot;color: #000000;&quot;&gt;i&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; a.&lt;span style=&quot;color: #110099; font-style: italic;&quot;&gt;i&lt;/span&gt;;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;this&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
&lt;code&gt;std::string&lt;/code&gt; 像 &lt;code&gt;int&lt;/code&gt; 类型一样，可以安全应对自赋值操作。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;强化&lt;/b&gt;
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;（简单）自赋值操作的实现中不需要有&lt;code&gt;if (this == &amp;amp;a) return *this&lt;/code&gt;这样的操作。&lt;/li&gt;
&lt;/ul&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines C.61 赋值拷贝操作须拷贝</title>
   <link href="http://kimi.im/2022-10-27-cppcoreguidelines-c61"/>
   <updated>2022-10-27T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-c61</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
C.61: A copy operation should copy
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;理由&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
这条指南讲的是一般人们使用时所假定的语义。在进行&lt;code&gt;x = y&lt;/code&gt;操作后，我们得到结果 &lt;code&gt;x == y&lt;/code&gt;
&lt;/p&gt;

&lt;p&gt;
在赋值拷贝操作之后， &lt;code&gt;x&lt;/code&gt; 和 &lt;code&gt;y&lt;/code&gt; 应该是独立的对象（值类型，非指针的内置类型和标准库类型的工作方式），或者， &lt;code&gt;x&lt;/code&gt; 和 &lt;code&gt;y&lt;/code&gt; 指向一个共享的对象（指针类型，指针的工作方式）。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;例子&lt;/b&gt;
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;using&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt;;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;using&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Bad&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt;;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;X&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// OK: value semantics&lt;/span&gt;
  &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;public&lt;/span&gt;:
    &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;X&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{}&lt;/span&gt;;
    &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;X&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;X&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;     &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// copy X&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold; font-style: italic;&quot;&gt;copy&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;*&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;src&lt;/span&gt;, &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;*&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;src_end&lt;/span&gt;, &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;*&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;dst&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{}&lt;/span&gt;;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold; font-style: italic;&quot;&gt;modify&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{}&lt;/span&gt;;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// change the value of X&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ...&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;~&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;X&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;delete&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;[]&lt;/span&gt; p; &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;friend&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;bool&lt;/span&gt; operator&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;==&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;X&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;a&lt;/span&gt;, &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;X&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;b&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
  &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;private&lt;/span&gt;:
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;*&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;p&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;{}&lt;/span&gt;;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;sz&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;{}&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;bool&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;equal&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;*&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;a0&lt;/span&gt;, &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;*&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;a1&lt;/span&gt;, &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;*&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;b0&lt;/span&gt;, &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;*&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;b1&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;true&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;


&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;bool&lt;/span&gt; operator&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;==&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;X&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;a&lt;/span&gt;, &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;X&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;b&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; a.&lt;span style=&quot;color: #110099; font-style: italic;&quot;&gt;sz&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;==&lt;/span&gt; b.&lt;span style=&quot;color: #110099; font-style: italic;&quot;&gt;sz&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;equal&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;a.&lt;span style=&quot;color: #110099; font-style: italic;&quot;&gt;p&lt;/span&gt;, a.&lt;span style=&quot;color: #110099; font-style: italic;&quot;&gt;p&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;+&lt;/span&gt; a.&lt;span style=&quot;color: #110099; font-style: italic;&quot;&gt;sz&lt;/span&gt;, b.&lt;span style=&quot;color: #110099; font-style: italic;&quot;&gt;p&lt;/span&gt;, b.&lt;span style=&quot;color: #110099; font-style: italic;&quot;&gt;p&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;+&lt;/span&gt; b.&lt;span style=&quot;color: #110099; font-style: italic;&quot;&gt;sz&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;

&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;X&lt;/span&gt;::&lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;X&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;X&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;a&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
    :&lt;span style=&quot;color: #110099; font-style: italic;&quot;&gt;p&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;[&lt;/span&gt;a.&lt;span style=&quot;color: #110099; font-style: italic;&quot;&gt;sz&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;]&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;, &lt;span style=&quot;color: #110099; font-style: italic;&quot;&gt;sz&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;a.&lt;span style=&quot;color: #110099; font-style: italic;&quot;&gt;sz&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;copy&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;a.&lt;span style=&quot;color: #110099; font-style: italic;&quot;&gt;p&lt;/span&gt;, a.&lt;span style=&quot;color: #110099; font-style: italic;&quot;&gt;p&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;+&lt;/span&gt; sz, p&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;main&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;X&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;x&lt;/span&gt;;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;X&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;y&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;x&lt;/span&gt;;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;x &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;!=&lt;/span&gt; y&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;throw&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Bad&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;{}&lt;/span&gt;;
    x.&lt;span style=&quot;color: #3a5fcd; font-weight: bold; font-style: italic;&quot;&gt;modify&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt;;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;x &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;==&lt;/span&gt; y&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;throw&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Bad&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;{}&lt;/span&gt;;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// assume value semantics&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;
&lt;b&gt;例子&lt;/b&gt;
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;X2&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;  &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// OK: pointer semantics&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;public&lt;/span&gt;:
    &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;X2&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt;;
    &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;X2&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;X2&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;default&lt;/span&gt;; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// shallow copy&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;~&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;X2&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;default&lt;/span&gt;;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold; font-style: italic;&quot;&gt;modify&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt;;          &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// change the pointed-to value&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ...&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;private&lt;/span&gt;:
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;*&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;p&lt;/span&gt;;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;sz&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;bool&lt;/span&gt; operator&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;==&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;X2&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;a&lt;/span&gt;, &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;X2&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;b&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; a.&lt;span style=&quot;color: #110099; font-style: italic;&quot;&gt;sz&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;==&lt;/span&gt; b.&lt;span style=&quot;color: #110099; font-style: italic;&quot;&gt;sz&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; a.&lt;span style=&quot;color: #110099; font-style: italic;&quot;&gt;p&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;==&lt;/span&gt; b.&lt;span style=&quot;color: #110099; font-style: italic;&quot;&gt;p&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;

&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;X2&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;x&lt;/span&gt;;
&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;X2&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;y&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;x&lt;/span&gt;;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;x &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;!=&lt;/span&gt; y&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;throw&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Bad&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;{}&lt;/span&gt;;
x.&lt;span style=&quot;color: #3a5fcd; font-weight: bold; font-style: italic;&quot;&gt;modify&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;x &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;!=&lt;/span&gt; y&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;throw&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Bad&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;{}&lt;/span&gt;;  &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// assume pointer semantics&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;
&lt;b&gt;注意&lt;/b&gt;
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;尽量选择值类型，除非你要实现智能指针类型。值类型更简单，更容易分析，标准库也主要接收值类型的数据。&lt;/li&gt;
&lt;/ul&gt;
</content>
 </entry>
 
 <entry>
   <title>单词本：drive sb. nuts</title>
   <link href="http://kimi.im/2022-10-27-english-drive-sb-nuts"/>
   <updated>2022-10-27T00:00:00+00:00</updated>
   <id>http://kimi.im/english-drive-sb-nuts</id>
   <content type="html">&lt;p&gt;
昨天跟意大利和柬埔寨的两位女同事开会。讨论了大概一个小时，米兰的那位女士说：“my headphone is driving me nuts.” 一开始，我以为她的意思是耳机驱动不好使，听不到声音。后来她解释说，开了一天会，戴了一天的耳机，脑壳疼。是啊，在跨过公司工作不容易，尤其是世界各地都有人参加的项目。基本上就是天天电话视频会议讨论了。好在我去年买了个Bose的耳机，罩住耳朵很舒适。
&lt;/p&gt;

&lt;p&gt;
所以，本文的主题就是这个表达组合：drive sb. nuts。它的意思是令某人崩溃、发疯、烦恼。其他类似的表达组合还有 drive sb. crazy 令某人发疯；drive
sb. bonkers 令某人疯狂；drive sb. bananas 令某人抓狂；drive sb. up the
wall 把某人逼疯。这种英语口语的表达方式挺有趣的。
&lt;/p&gt;

&lt;p&gt;
再来看看例句：
&lt;/p&gt;

&lt;p&gt;
A week on vacation with my relatives is enough to drive me nuts. 跟亲戚一起度假一周就能把我避疯。
&lt;/p&gt;

&lt;p&gt;
That loud beeping noise is driving me nuts. 哔哔声逼我发疯。
&lt;/p&gt;

&lt;p&gt;
也可以这样说 That loud beeping noise is driving me bonkers! That loud
beeping noise is driving me bananas! That loud beeping noise is
driving me up the wall!
&lt;/p&gt;

&lt;p&gt;
那至于 drive sb. nuts 最早从哪里来的呢？大概在100多年前的时候，nut 也代指人的脑袋。核桃仁和大脑很像，是吧。后来，nut 意思变为脑子有毛病，行为不正常。比如有人行为怪异，就称之为 nuts 或 off their nut。灵魂离开头脑，就是一种失心疯的状态。很多小朋友在青春期就会出现这种症状，因为那个时候，大脑里 48% 的神经都会蜕化，然后重新生长，随意就会变得很容易激怒，很没理性，很难对付。
&lt;/p&gt;

&lt;p&gt;
后来 在 1921 年的一份 Indiana Daily Times 中，有个讨论，就是男人和女人，谁开车更细心。有个记者问一个交通警察女司机怎么样，报纸是这样描述的：“He(交警) threw up his hands and backed away. ‘They drive me nuts,’ he
groaned.” 交警举起双手，往后退，说：她们让我发疯！
&lt;/p&gt;

&lt;p&gt;
语言真是很家常的东西，nut 坚果可以表示发疯生气。而豆子却能形容精神饱满如 I am full of beans today. 我今天精神饱满！
&lt;/p&gt;

&lt;p&gt;
还有个土豆，可以形容电视迷：couch potato （请点击查看 &lt;a href=&quot;./2021-05-27-english-aficionado.html&quot;&gt;单词本：
aficionado&lt;/a&gt;）
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines C.60 拷贝赋值/复制赋值不可为虚，且以 const& 为参数，以 非 const& 为结果</title>
   <link href="http://kimi.im/2022-10-25-cppcoreguidelines-c60"/>
   <updated>2022-10-25T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-c60</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
C.60: Make copy assignment non-&lt;code&gt;virtual&lt;/code&gt;, take the parameter by &lt;code&gt;const&amp;amp;&lt;/code&gt;,
and return by non-&lt;code&gt;const&amp;amp;&lt;/code&gt;
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;理由&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
如此操作，简单高效。如想针对右值进行优化，可提供一个重载的函数，接受一个&lt;code&gt;&amp;amp;&amp;amp;&lt;/code&gt;右值引用作为参数。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;例子&lt;/b&gt;
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Foo&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;public&lt;/span&gt;:
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Foo&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt; operator&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Foo&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;x&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;
    &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;
        &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// GOOD: no need to check for self-assignment (other than performance)&lt;/span&gt;
        &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;auto&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;tmp&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;x&lt;/span&gt;;
        &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;swap&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;tmp&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt;; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// see C.83&lt;/span&gt;
        &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;this&lt;/span&gt;;
    &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ...&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;

&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Foo&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;a&lt;/span&gt;;
&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Foo&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;b&lt;/span&gt;;
&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Foo&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;;

&lt;span style=&quot;color: #000000;&quot;&gt;a&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; b;    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// assign lvalue: copy&lt;/span&gt;
&lt;span style=&quot;color: #000000;&quot;&gt;a&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;;  &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// assign rvalue: potentially move&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;
&lt;b&gt;注意&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
&lt;code&gt;swap&lt;/code&gt; 实现技术提供有效保障。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;例子&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
但是，如果你想要避免临时副本，获取更好的性能。考虑一个简单的 &lt;code&gt;Vector&lt;/code&gt; 情况，包含元素比较多，且大小一样的 &lt;code&gt;Vector&lt;/code&gt; 之间赋值的情况就比较常见。这种情况，用 &lt;code&gt;swap&lt;/code&gt; 实现就会导致比较大的性能开销。
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;template&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;typename&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Vector&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;public&lt;/span&gt;:
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Vector&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt; operator&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Vector&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ...&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;private&lt;/span&gt;:
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;*&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;elem&lt;/span&gt;;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;sz&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;

&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Vector&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Vector&lt;/span&gt;::&lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;operator&lt;/span&gt;&lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Vector&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;a&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;a.&lt;span style=&quot;color: #110099; font-style: italic;&quot;&gt;sz&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt; sz&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;
        &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ... use the swap technique, it can&apos;t be bettered ...&lt;/span&gt;
        &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;this&lt;/span&gt;;
    &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ... copy sz elements from *a.elem to elem ...&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;a.&lt;span style=&quot;color: #3a5fcd; font-weight: bold; font-style: italic;&quot;&gt;sz&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt; sz&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;
        &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ... destroy the surplus elements in *this and adjust size ...&lt;/span&gt;
    &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;this&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
通过直接改写目标元素，我们不能像 swap 技术那样实现完备的保证，只能达到基础保证。所以需要注意自己给自己赋值这种情况。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;其他选项&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
如果你需要一个虚的赋值操作符，但是明白可能有深层次的问题，那可以不叫它为&lt;code&gt;operator=&lt;/code&gt;，而取名为 &lt;code&gt;virtual void assign(const Foo&amp;amp;)&lt;/code&gt;
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;强化&lt;/b&gt;
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;（简单）赋值操作符必须不能是 &lt;code&gt;virtual&lt;/code&gt; 的。小心恶龙出没。&lt;/li&gt;
&lt;li&gt;（简单）赋值操作符要返回&lt;code&gt;T&amp;amp;&lt;/code&gt;，从而可以串接起来使用。不要用 &lt;code&gt;const T&amp;amp;&lt;/code&gt;
，这样会影响代码编排，无法把对象放入容器。&lt;/li&gt;
&lt;li&gt;（中等难度）赋值操作符应该（隐式或显示）地调用基类和成员的赋值操作符。查看析构函数确定类型是否有指针语义或值语义。&lt;/li&gt;
&lt;/ul&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines C.52 用继承的构造函数为子类导入构造函数，从而无需重复初始化成员变量</title>
   <link href="http://kimi.im/2022-10-24-cppcoreguidelines-c52"/>
   <updated>2022-10-24T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-c52</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
C.52: Use inheriting constructors to import constructors into a derived class that does not need further explicit initialization
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;理由&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
如果在继承类中需要用到基类的构造函数，重新实现这些构造函数会比较繁琐、容易出错。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;例子&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
&lt;code&gt;std::vector&lt;/code&gt; 有一堆诡异的构造函数，所以，如果我要继承一个自己的向量类，我不需要重新实现这些构造函数。
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Rec&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ... data and lots of nice constructors ...&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Oper&lt;/span&gt; : &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Rec&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;using&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Rec&lt;/span&gt;::Rec;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ... no data members ...&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ... lots of nice utility functions ...&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;
&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;
&lt;b&gt;例子&lt;/b&gt;
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-bad src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;struct&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Rec2&lt;/span&gt; : &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Rec&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;x&lt;/span&gt;;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;using&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Rec&lt;/span&gt;::Rec;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;

&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Rec2&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;r&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;foo&quot;&lt;/span&gt;, &lt;span style=&quot;color: #110099;&quot;&gt;7&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;val&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; r.&lt;span style=&quot;color: #110099; font-style: italic;&quot;&gt;x&lt;/span&gt;;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// uninitialized&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;
&lt;b&gt;强化&lt;/b&gt;
&lt;/p&gt;

&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;确保继承类中的每个成员都初始化过。&lt;/li&gt;
&lt;/ul&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines C.51 把类里通用的构造部分放到一个共用构造函数里</title>
   <link href="http://kimi.im/2022-10-21-cppcoreguidelines-c51"/>
   <updated>2022-10-21T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-c51</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
C.51: Use delegating constructors to represent common actions for all constructors of a class
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;理由&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
避免重复和不小心编写导致的差异。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;例子&lt;/b&gt;
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-bad src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Date&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// BAD: repetitive&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;d&lt;/span&gt;;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Month&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;m&lt;/span&gt;;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;y&lt;/span&gt;;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;public&lt;/span&gt;:
    &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;Date&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;dd&lt;/span&gt;, &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Month&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;mm&lt;/span&gt;, &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;year&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;yy&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;
        :&lt;span style=&quot;color: #110099; font-style: italic;&quot;&gt;d&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;dd&lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;, &lt;span style=&quot;color: #110099; font-style: italic;&quot;&gt;m&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;mm&lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;, &lt;span style=&quot;color: #110099; font-style: italic;&quot;&gt;y&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;yy&lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;
        &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;!&lt;/span&gt;&lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;valid&lt;/span&gt;&lt;span style=&quot;color: #709870;&quot;&gt;(&lt;/span&gt;d, m, y&lt;span style=&quot;color: #709870;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;throw&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Bad_date&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;{}&lt;/span&gt;; &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;

    &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;Date&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;dd&lt;/span&gt;, &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Month&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;mm&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;
        :&lt;span style=&quot;color: #110099; font-style: italic;&quot;&gt;d&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;dd&lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;, m&lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;mm&lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt; &lt;span style=&quot;color: #110099; font-style: italic;&quot;&gt;y&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;current_year&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;()&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;
        &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;!&lt;/span&gt;&lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;valid&lt;/span&gt;&lt;span style=&quot;color: #709870;&quot;&gt;(&lt;/span&gt;d, m, y&lt;span style=&quot;color: #709870;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;throw&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Bad_date&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;{}&lt;/span&gt;; &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ...&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
重复相同的动作繁琐又容易出错。
&lt;/p&gt;

&lt;p&gt;
&lt;b&gt;例子&lt;/b&gt;
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Date2&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;d&lt;/span&gt;;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Month&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;m&lt;/span&gt;;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;y&lt;/span&gt;;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;public&lt;/span&gt;:
    &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;Date2&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;dd&lt;/span&gt;, &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Month&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;mm&lt;/span&gt;, &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;year&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;yy&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;
        :&lt;span style=&quot;color: #110099; font-style: italic;&quot;&gt;d&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;dd&lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;, &lt;span style=&quot;color: #110099; font-style: italic;&quot;&gt;m&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;mm&lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;, &lt;span style=&quot;color: #110099; font-style: italic;&quot;&gt;y&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;yy&lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;
        &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;!&lt;/span&gt;&lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;valid&lt;/span&gt;&lt;span style=&quot;color: #709870;&quot;&gt;(&lt;/span&gt;d, m, y&lt;span style=&quot;color: #709870;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;throw&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Bad_date&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;{}&lt;/span&gt;; &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;

    &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;Date2&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;dd&lt;/span&gt;, &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Month&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;mm&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;
        :&lt;span style=&quot;color: #110099; font-style: italic;&quot;&gt;Date2&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;dd, mm, &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;current_year&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;()&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{}&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ...&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
&lt;b&gt;Data2&lt;/b&gt; 中第二个构造函数调用第一个构造函数做一些共用的初始化过程。
&lt;/p&gt;


&lt;p&gt;
如果重复动作只是简单的初始化，可以考虑类成员的默认初始化值。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;强化&lt;/b&gt;
&lt;/p&gt;

&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;查找构造函数体内相似的部分&lt;/li&gt;
&lt;/ul&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines C.50 如果初始化阶段需要一些虚行为，可以用工厂函数</title>
   <link href="http://kimi.im/2022-10-20-cppcoreguidelines-c50"/>
   <updated>2022-10-20T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-c50</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
C.50: Use a factory function if you need “virtual behavior” during initialization
&lt;/p&gt;

&lt;p&gt;
&lt;b&gt;理由&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
如果基类对象的某些状态依赖于继承它的子类对象，我们需要定义虚函数，从而减少误用没有完全构造完成的对象的机会窗口。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;注意&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
工厂函数的返回类型一般默认是&lt;code&gt;unique_ptr&lt;/code&gt;，如果某些被使用的地方是共享的，函数调用方可以把&lt;code&gt;unique_ptr&lt;/code&gt;移动为&lt;code&gt;shared_ptr&lt;/code&gt;。不过，如果编写工厂函数的人明确知道所有的使用方式都是共享使用，那也可以返回&lt;code&gt;shared_ptr&lt;/code&gt;并且用在函数中用&lt;code&gt;make_shared&lt;/code&gt;保留内存。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;例子&lt;/b&gt;
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-bad src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;B&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;public&lt;/span&gt;:
    &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;B&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt;
    &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;
        &lt;span style=&quot;color: #3F7F5F;&quot;&gt;/* ... */&lt;/span&gt;
        &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;()&lt;/span&gt;; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// BAD: C.82: Don&apos;t call virtual functions in constructors and destructors&lt;/span&gt;
        &lt;span style=&quot;color: #3F7F5F;&quot;&gt;/* ... */&lt;/span&gt;
    &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;

    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;virtual&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold; font-style: italic;&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;0&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;
&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;
&lt;b&gt;例子&lt;/b&gt;
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;B&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;protected&lt;/span&gt;:
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Token&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{}&lt;/span&gt;;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;public&lt;/span&gt;:
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;explicit&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;B&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Token&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;/* ... */&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;  &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// create an imperfectly initialized object&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;virtual&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold; font-style: italic;&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;0&lt;/span&gt;;

    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;template&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;static&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;shared_ptr&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;create&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt;    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// interface for creating shared objects&lt;/span&gt;
    &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;
        &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;auto&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;p&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; make_shared&lt;span style=&quot;color: #909183; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;T&lt;/span&gt;&lt;span style=&quot;color: #909183; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;typename&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt;::&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Token&lt;/span&gt;&lt;span style=&quot;color: #709870;&quot;&gt;{}&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt;;
        p&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #3a5fcd; font-weight: bold; font-style: italic;&quot;&gt;post_initialize&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;()&lt;/span&gt;;
        &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; p;
    &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;protected&lt;/span&gt;:
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;virtual&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold; font-style: italic;&quot;&gt;post_initialize&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// called right after construction&lt;/span&gt;
        &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;/* ... */&lt;/span&gt; &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;()&lt;/span&gt;; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;/* ... */&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// GOOD: virtual dispatch is safe&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;D&lt;/span&gt; : &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;B&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;                 &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// some derived class&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;protected&lt;/span&gt;:
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Token&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{}&lt;/span&gt;;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;public&lt;/span&gt;:
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;explicit&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;D&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Token&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; : &lt;span style=&quot;color: #110099; font-style: italic;&quot;&gt;B&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;B&lt;/span&gt;::&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Token&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;{}&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{}&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold; font-style: italic;&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;override&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt; cout &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;D::f()\n&quot;&lt;/span&gt;; &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;protected&lt;/span&gt;:
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;template&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;friend&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;shared_ptr&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;B&lt;/span&gt;::&lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;create&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;main&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;shared_ptr&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;D&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;p&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;D&lt;/span&gt;::&lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;create&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #3a5fcd; font-weight: bold; font-style: italic; text-decoration: underline;&quot;&gt;D&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt;;  &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// creating a D object&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;pre class=&quot;example&quot;&gt;
D::f()
&lt;/pre&gt;


&lt;p&gt;
&lt;code&gt;make_shared&lt;/code&gt; 要求构造函数必须是 &lt;code&gt;public&lt;/code&gt; 的。因为需要一个 &lt;code&gt;protected&lt;/code&gt; 的
&lt;code&gt;Token&lt;/code&gt; ，构造函数不能公开调用，所以我们要避免没完全构建的对象逃到野外（可被访问）。通过提供工厂函数&lt;code&gt;create()&lt;/code&gt;我们可以很方便的在自由存储区中构建对象。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;注意&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
按照惯例，工厂函数在自由存储区中分配对象，而不是在栈或上层对象内分配内存。
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines C.49 在构造函数中进行初始化操作，不要进行赋值操作</title>
   <link href="http://kimi.im/2022-10-18-cppcoreguidelines-c49"/>
   <updated>2022-10-18T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-c49</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
C.49: Prefer initialization to assignment in constructors
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;理由&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
所谓初始化，就是要设置初始值，而不是进行赋值。初始化操作更优雅，效率更高。可以防止值确定之前被误用之类的错误。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;例子&lt;/b&gt;
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;A&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// Good&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;string&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;s1&lt;/span&gt;;
  &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;public&lt;/span&gt;:
    &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;A&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;czstring&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;p&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; : &lt;span style=&quot;color: #110099; font-style: italic;&quot;&gt;s1&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;p&lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// GOOD: directly construct (and the C-string is explicitly named)&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ...&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;
&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;
&lt;b&gt;例子&lt;/b&gt;
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-bad src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;B&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// BAD&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;string&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;s1&lt;/span&gt;;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;public&lt;/span&gt;:
    &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;B&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;char&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;*&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;p&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;s1&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; p; &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// BAD: default constructor followed by assignment&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ...&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;C&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// UGLY, aka very bad&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;*&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;p&lt;/span&gt;;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;public&lt;/span&gt;:
    &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;C&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt; cout &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;*&lt;/span&gt;p; &lt;span style=&quot;color: #000000;&quot;&gt;p&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;10&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;}&lt;/span&gt;; &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// accidental use before initialized&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ...&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
&lt;b&gt;例子&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
这里我们不用&lt;code&gt;const char* s&lt;/code&gt;我们用C++17中的&lt;code&gt;std::string_view&lt;/code&gt;或
&lt;code&gt;gsl::span&amp;lt;char&amp;gt;&lt;/code&gt; 做函数的参数。
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;D&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// Good&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;string&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;s1&lt;/span&gt;;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;public&lt;/span&gt;:
    &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;D&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;string_view&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;v&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; : &lt;span style=&quot;color: #110099; font-style: italic;&quot;&gt;s1&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;v&lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// GOOD: directly construct&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ...&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;
&lt;/pre&gt;
&lt;/div&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines C.48 对于初始化为常量的成员，用类内成员初始化方法</title>
   <link href="http://kimi.im/2022-10-17-cppcoreguidelines-c48"/>
   <updated>2022-10-17T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-c48</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
C.48: Prefer default member initializers to member initializers in
constructors for constant initializers
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;理由&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
这样可以明确表示：所有构造函数中都用一样的值初始化成员变量。可以避免重复，减少代码维护时候遇到的问题，使得代码更短更高效。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;例子&lt;/b&gt;
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-bad src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;X&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// BAD&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;public&lt;/span&gt;:
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;i&lt;/span&gt;;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;string&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;s&lt;/span&gt;;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;j&lt;/span&gt;;
    &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;X&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt; :&lt;span style=&quot;color: #110099; font-style: italic;&quot;&gt;i&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;666&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;, &lt;span style=&quot;color: #110099; font-style: italic;&quot;&gt;s&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;qqq&quot;&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// j is uninitialized&lt;/span&gt;
    &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;X&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;ii&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; :&lt;span style=&quot;color: #110099; font-style: italic;&quot;&gt;i&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;ii&lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{}&lt;/span&gt;         &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// s is &quot;&quot; and j is uninitialized&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ...&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;
&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;X&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;x1&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;{}&lt;/span&gt;;
cout &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; x1.&lt;span style=&quot;color: #110099; font-style: italic;&quot;&gt;i&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;\t&quot;&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; x1.&lt;span style=&quot;color: #110099; font-style: italic;&quot;&gt;s&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;\t&quot;&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; x1.&lt;span style=&quot;color: #110099; font-style: italic;&quot;&gt;j&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; endl;
&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;X&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;x2&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;11&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;
cout &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; x2.&lt;span style=&quot;color: #110099; font-style: italic;&quot;&gt;i&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;\t&quot;&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; x2.&lt;span style=&quot;color: #110099; font-style: italic;&quot;&gt;s&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;\t&quot;&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; x2.&lt;span style=&quot;color: #110099; font-style: italic;&quot;&gt;j&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; endl;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
666	qqq	66
11		24
&lt;/p&gt;

&lt;p&gt;
后期维护代码的人怎么会知道你是故意不把 &lt;code&gt;j&lt;/code&gt; 初始化，还是因为其他什么原因？是有意给 &lt;code&gt;s&lt;/code&gt; 赋值一个默认的空字符串吗？那 &lt;code&gt;qqq&lt;/code&gt; 是不是一个 &lt;code&gt;bug&lt;/code&gt; ？像 &lt;code&gt;j&lt;/code&gt; 这样的没初始化的变量往往是后期修改代码的时候增加了变量，变量虽然增加了，却忘记把它添加到初始化列表里。
&lt;/p&gt;

&lt;p&gt;
&lt;b&gt;例子&lt;/b&gt;
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;X2&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;public&lt;/span&gt;:
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;i&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;666&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;string&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;s&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;qqq&quot;&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;j&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;;
    &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;X2&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;default&lt;/span&gt;;        &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// all members are initialized to their defaults&lt;/span&gt;
    &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;X2&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;ii&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; :&lt;span style=&quot;color: #110099; font-style: italic;&quot;&gt;i&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;ii&lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{}&lt;/span&gt;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// s and j initialized to their defaults&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ...&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;
&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;X2&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;x&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;111&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;
cout &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; x.&lt;span style=&quot;color: #110099; font-style: italic;&quot;&gt;i&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;, &quot;&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; x.&lt;span style=&quot;color: #110099; font-style: italic;&quot;&gt;s&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;, &quot;&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; x.&lt;span style=&quot;color: #110099; font-style: italic;&quot;&gt;j&lt;/span&gt;;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
111, qqq, 0
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;其他选项&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
我们也可以通过设定构造函数的默认参数来明确默认的初始值。这在老代码中比较常见。但是这样做，会导致传递的参数过多，而且如果要增加一个新的构造函数，还要重复这些参数列表。
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-bad src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;X3&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// BAD: inexplicit, argument passing overhead&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;public&lt;/span&gt;:
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;i&lt;/span&gt;;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;string&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;s&lt;/span&gt;;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;j&lt;/span&gt;;
&lt;span style=&quot;color: #3F7F5F;&quot;&gt;//public:&lt;/span&gt;
    &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;X3&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; ii &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;666&lt;/span&gt;, &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;string&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt; ss &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;qqq&quot;&lt;/span&gt;, &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; jj &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;
        :&lt;span style=&quot;color: #110099; font-style: italic;&quot;&gt;i&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;ii&lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;, &lt;span style=&quot;color: #110099; font-style: italic;&quot;&gt;s&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;ss&lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;, &lt;span style=&quot;color: #110099; font-style: italic;&quot;&gt;j&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;jj&lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// all members are initialized to their defaults&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ...&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;
&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;X3&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;x&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;{}&lt;/span&gt;;
cout &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; x.&lt;span style=&quot;color: #110099; font-style: italic;&quot;&gt;i&lt;/span&gt;;
&lt;/pre&gt;
&lt;/div&gt;

&lt;pre class=&quot;example&quot;&gt;
666
&lt;/pre&gt;



&lt;p&gt;
&lt;b&gt;强化&lt;/b&gt;
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;（简单）每个构造函数都要能够通过执行构造函数体或者默认构造函数，初始化所有的成员变量。&lt;/li&gt;
&lt;li&gt;（简单）使用类内的成员变量初始值比构造函数的默认参数更好。&lt;/li&gt;
&lt;/ul&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines C.47 按照成员变量的声明顺序进行初始化</title>
   <link href="http://kimi.im/2022-10-14-cppcoreguidelines-c47"/>
   <updated>2022-10-14T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-c47</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
C.47: Define and initialize data members in the order of member declaration
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;理由&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
为了减少混乱和错误。不管你按什么顺序初始化成员变量，最终的初始化顺序都是按照声明的顺序进行初始化的。
&lt;/p&gt;

&lt;p&gt;
&lt;b&gt;例子&lt;/b&gt;
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-bad src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Foo&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;public&lt;/span&gt;:
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;m1&lt;/span&gt;;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;m2&lt;/span&gt;;
    &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;Foo&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;x&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; :&lt;span style=&quot;color: #110099; font-style: italic;&quot;&gt;m2&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;x&lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;, &lt;span style=&quot;color: #110099; font-style: italic;&quot;&gt;m1&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;++&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;x&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// BAD: misleading initializer order&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ...&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;

&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Foo&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;x&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// surprise: x.m1 == x.m2 == 2&lt;/span&gt;
&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;std&lt;/span&gt;::cout &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; x.&lt;span style=&quot;color: #110099; font-style: italic;&quot;&gt;m1&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot; &quot;&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; x.&lt;span style=&quot;color: #110099; font-style: italic;&quot;&gt;m2&lt;/span&gt;;
&lt;/pre&gt;
&lt;/div&gt;

&lt;pre class=&quot;example&quot;&gt;
2 2
&lt;/pre&gt;



&lt;p&gt;
&lt;b&gt;强化&lt;/b&gt;
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;（简单）成员初始化列表要和成员声明的顺序相同&lt;/li&gt;
&lt;/ul&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines C.46 默认的，声明单参数构造函数为显式的</title>
   <link href="http://kimi.im/2022-10-11-cppcoreguidelines-c46"/>
   <updated>2022-10-11T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-c46</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
C.46: By default, declare single-argument constructors explicit
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;理由&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
避免的诡异的类型转换。
&lt;/p&gt;

&lt;p&gt;
&lt;b&gt;例子&lt;/b&gt;
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-bad src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;String&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;public&lt;/span&gt;:
    &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;String&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// BAD&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ...&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;

&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;String&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;s&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;10&lt;/span&gt;;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// surprise: string of size 10&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
从 &lt;code&gt;int&lt;/code&gt; 型转成 &lt;code&gt;String&lt;/code&gt; 是一种很奇怪的隐式类型转换。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;例外&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
如果确实需要隐式地将构造函数参数类型转换成类类型，避免显式转换。
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Complex&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;public&lt;/span&gt;:
    &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;Complex&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;double&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;d&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// OK: we want a conversion from d to {d, 0}&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ...&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;

&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Complex&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;z&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;10.7&lt;/span&gt;;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// unsurprising conversion&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
从 &lt;code&gt;double&lt;/code&gt; 转成复数就比较合理。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;注意&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
复制和移动构造函数不能是显式的那种强硬的类型转换。复制和移动构造函数进行显式强硬的类型转换会导致值的传入和返回变得很复杂。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;强化&lt;/b&gt;
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;（简单）单参数构造函数要声明成显式的。大多数情况下，隐式的单参数构造函数不太写的好。所以如果单参数构造函数不在白名单中，就进行警告。&lt;/li&gt;
&lt;/ul&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines C.45 如果只是初始化数据成员变量，不需要定义默认构造函数，用类内成员初始式即可</title>
   <link href="http://kimi.im/2022-10-09-cppcoreguidelines-c45"/>
   <updated>2022-10-09T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-c45</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
C.45: Don&amp;rsquo;t define a default constructor that only initializes data
members; use default member initializers instead
&lt;/p&gt;

&lt;p&gt;
&lt;b&gt;理由&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
使用类内成员初始式（member initializer）可以让编译器自动生成函数。编译器生成的函数效率更好。
&lt;/p&gt;

&lt;p&gt;
&lt;b&gt;例子&lt;/b&gt;
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-bad src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;X1&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// BAD: doesn&apos;t use member initializers&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;string&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;s&lt;/span&gt;;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;i&lt;/span&gt;;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;public&lt;/span&gt;:
    &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;X1&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt; :&lt;span style=&quot;color: #110099; font-style: italic;&quot;&gt;s&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;default&quot;&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;, &lt;span style=&quot;color: #110099; font-style: italic;&quot;&gt;i&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ...&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;
&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;
&lt;b&gt;例子&lt;/b&gt;
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;X2&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;string&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;s&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;default&quot;&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;i&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;public&lt;/span&gt;:
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// use compiler-generated default constructor&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ...&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
强化
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;（简单）默认构造函数不只是用常量初始化成员变量&lt;/li&gt;
&lt;/ul&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines C.44 默认构造函数尽量简单且不要抛出异常</title>
   <link href="http://kimi.im/2022-10-08-cppcoreguidelines-c44"/>
   <updated>2022-10-08T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-c44</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
C.44: Prefer default constructors to be simple and non-throwing
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;理由&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
没有无需额外的、会报错的操作，就能设定默认值，可以简化错误处理的过程和移动操作的推演。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;例子&lt;/b&gt;
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-bad src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;template&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;typename&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: #3F7F5F;&quot;&gt;// elem points to space-elem element allocated using new&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Vector0&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;public&lt;/span&gt;:
    &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;Vector0&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt; :&lt;span style=&quot;color: #110099; font-style: italic;&quot;&gt;Vector0&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{}&lt;/span&gt;
    &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;Vector0&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;n&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; :&lt;span style=&quot;color: #110099; font-style: italic;&quot;&gt;elem&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;[&lt;/span&gt;n&lt;span style=&quot;color: #909183;&quot;&gt;]&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;, &lt;span style=&quot;color: #110099; font-style: italic;&quot;&gt;space&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;elem &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;+&lt;/span&gt; n&lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;, &lt;span style=&quot;color: #110099; font-style: italic;&quot;&gt;last&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;elem&lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{}&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ...&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;private&lt;/span&gt;:
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;own&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;elem&lt;/span&gt;;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;*&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;space&lt;/span&gt;;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;*&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;last&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
这个类定义看起来挺不错，但是给 &lt;code&gt;Vector0&lt;/code&gt; 设定空值的时候，也可能由于内存分配的问题导致出错。另外，用&lt;code&gt;{new T[0], 0, 0}&lt;/code&gt;这样的方式来表示默认的
&lt;code&gt;Vector&lt;/code&gt; 看起来很浪费。比如，&lt;code&gt;Vector0&amp;lt;int&amp;gt; v[100]&lt;/code&gt;会导致 100 次内存分配。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;例子&lt;/b&gt;
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;template&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;typename&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: #3F7F5F;&quot;&gt;// elem is nullptr or elem points to space-elem element allocated using new&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Vector1&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;public&lt;/span&gt;:
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// sets the representation to {nullptr, nullptr, nullptr}; doesn&apos;t throw&lt;/span&gt;
    &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;Vector1&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;noexcept&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{}&lt;/span&gt;
    &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;Vector1&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;n&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; :&lt;span style=&quot;color: #110099; font-style: italic;&quot;&gt;elem&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;[&lt;/span&gt;n&lt;span style=&quot;color: #909183;&quot;&gt;]&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;, &lt;span style=&quot;color: #110099; font-style: italic;&quot;&gt;space&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;elem &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;+&lt;/span&gt; n&lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;, &lt;span style=&quot;color: #110099; font-style: italic;&quot;&gt;last&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;elem&lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{}&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ...&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;private&lt;/span&gt;:
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;own&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;elem&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{}&lt;/span&gt;;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;*&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;space&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{}&lt;/span&gt;;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;*&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;last&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{}&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
用&lt;code&gt;{nullptr, nullptr, nullptr}&lt;/code&gt;表示&lt;code&gt;Vector1{}&lt;/code&gt;更节省资源，而且这种特殊情况意味着运行时检查，防止出错。如果检测到错误，把 &lt;code&gt;Vector1&lt;/code&gt; 设定为空比较简单。
&lt;/p&gt;


&lt;p&gt;
强化
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;标记会抛出异常的构造函数&lt;/li&gt;
&lt;/ul&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines C.43 可拷贝的类要有默认的构造函数</title>
   <link href="http://kimi.im/2022-09-28-cppcoreguidelines-c43"/>
   <updated>2022-09-28T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-c43</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
C.43: Ensure that a copyable class has a default constructor
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;理由&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
可拷贝的类有默认构造函数就能确保：如果一个具体类是可拷贝的，它也就满足其他的“半正则”条件。
&lt;/p&gt;

&lt;p&gt;
很多语言和库工具依赖默认构造函数初始化其元素。比如&lt;code&gt;T a[10]&lt;/code&gt;和
&lt;code&gt;std::vector&amp;lt;T&amp;gt; v(10)&lt;/code&gt; 。如果类是可拷贝的，有了默认构造函数，就能简化数据的移动操作。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;例子&lt;/b&gt;
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-bad src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Date&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// BAD: no default constructor&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;public&lt;/span&gt;:
    &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;Date&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;dd&lt;/span&gt;, &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;mm&lt;/span&gt;, &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;yyyy&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ...&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;

&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;vector&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Date&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;vd1&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;1000&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// default Date needed here&lt;/span&gt;
&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;vector&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Date&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;vd2&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;1000&lt;/span&gt;, &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Date&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Month&lt;/span&gt;::October, &lt;span style=&quot;color: #110099;&quot;&gt;7&lt;/span&gt;, &lt;span style=&quot;color: #110099;&quot;&gt;1885&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// alternative&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;
没有用户自定义的构造函数的时候，编译器才会自动生成一个默认构造函数。所以上面代码中，&lt;code&gt;vector vd1&lt;/code&gt;是没法被初始化的，因为 &lt;code&gt;Date&lt;/code&gt; 中已经定义了一个构造函数，编译器就不会生成默认的构造函数。没有默认构造函数，代码写起来容易变得复杂。如果可以，尽量使用默认构造函数。
&lt;/p&gt;

&lt;p&gt;
对于日期类来说，定义一个顺其自然的默认日期比较困难。宇宙大爆炸对于大部分人来说太久远了。而 0 年 0 月 0 日，在大部分的日历系统中又是不存在的。这就好像把浮点数设置成 NaN 一样。
&lt;/p&gt;

&lt;p&gt;
不过，大部分的日期类都有某个“起始日期”。比如最流行的 1970年 1 月1日。所以把这个日期作为默认日期就很容易了。
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Date&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;public&lt;/span&gt;:
    &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;Date&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;dd&lt;/span&gt;, &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;mm&lt;/span&gt;, &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;yyyy&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
    &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;Date&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;default&lt;/span&gt;; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// [See also](#Rc-default)&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ...&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;private&lt;/span&gt;:
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;dd&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;1&lt;/span&gt;;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;mm&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;1&lt;/span&gt;;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;yyyy&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;1970&lt;/span&gt;;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ...&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;

&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;vector&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Date&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;vd1&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;1000&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;
&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;
&lt;b&gt;注意&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
一个类里所有的成员都有默认构造函数，这个类也隐式地获得了一个构造函数。
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;struct&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;X&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;string&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;s&lt;/span&gt;;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;vector&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;v&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;

&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;X&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;x&lt;/span&gt;; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// means the empty string and the empty vector&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
注意，内置类型没有默认构造函数，其默认值可能是个随机数。
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;#include&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&amp;lt;iostream&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;#include&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&amp;lt;string&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;using&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;namespace&lt;/span&gt; std;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;struct&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;X&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;string&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;s&lt;/span&gt;;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;i&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;X&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;x&lt;/span&gt;;    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// x.s is initialized to the empty string; x.i is uninitialized&lt;/span&gt;

    cout &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; x.&lt;span style=&quot;color: #110099; font-style: italic;&quot;&gt;s&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;&apos; &apos;&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; x.&lt;span style=&quot;color: #110099; font-style: italic;&quot;&gt;i&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;&apos;\n&apos;&lt;/span&gt;;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;++&lt;/span&gt;x.&lt;span style=&quot;color: #110099; font-style: italic;&quot;&gt;i&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;main&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;pre class=&quot;example&quot;&gt;
-901376320
&lt;/pre&gt;


&lt;p&gt;
以上代码中，&lt;code&gt;x.s&lt;/code&gt;初始化为空字符串。而&lt;code&gt;x.i&lt;/code&gt;则是未初始化的一个数值。
&lt;/p&gt;

&lt;p&gt;
静态分配的内置类型对象的默认值是 0，而局部的内置变量则不会初始化。注意，你的编译器可能会给局部内置变量设定一个初始值。但是当你进行优化编译的时候，就不设置了。所以，以上代码看起来可以工作，是基于未定义的行为，所以并不可靠。假设你需要进行初始化，那么请明确定义初始化过程。
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;#include&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&amp;lt;iostream&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;#include&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&amp;lt;string&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;using&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;namespace&lt;/span&gt; std;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;struct&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;X&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;string&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;s&lt;/span&gt;;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;i&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{}&lt;/span&gt;;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// default initialize (to 0)&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;X&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;x&lt;/span&gt;;    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// x.s is initialized to the empty string; x.i is uninitialized&lt;/span&gt;

    cout &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; x.&lt;span style=&quot;color: #110099; font-style: italic;&quot;&gt;s&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;&apos; &apos;&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; x.&lt;span style=&quot;color: #110099; font-style: italic;&quot;&gt;i&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;&apos;\n&apos;&lt;/span&gt;;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;++&lt;/span&gt;x.&lt;span style=&quot;color: #110099; font-style: italic;&quot;&gt;i&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;main&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt;;

&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;pre class=&quot;example&quot;&gt;
0
&lt;/pre&gt;



&lt;p&gt;
&lt;b&gt;注意&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
没有合理的默认构造函数的类，通常也不能拷贝，因此，这些类不在本指南建议范围内。
&lt;/p&gt;

&lt;p&gt;
比如，一个基类如果不能拷贝的话，那么就不需要一个默认构造函数。
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-C++&quot;&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;// Shape is an abstract base class, not a copyable type.&lt;/span&gt;
&lt;span style=&quot;color: #3F7F5F;&quot;&gt;// It might or might not need a default constructor.&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;struct&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Shape&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;virtual&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold; font-style: italic;&quot;&gt;draw&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;0&lt;/span&gt;;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;virtual&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold; font-style: italic;&quot;&gt;rotate&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;0&lt;/span&gt;;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// =delete copy/move functions&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ...&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;
&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;
一个类如果在构建的过程中，需要接受一个调用者提供的资源的话，一般不能有默认构造函数。这种类，不在本指南建议范围，因为这些类通常不可拷贝。
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-C++&quot;&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;// std::lock_guard is not a copyable type.&lt;/span&gt;
&lt;span style=&quot;color: #3F7F5F;&quot;&gt;// It does not have a default constructor.&lt;/span&gt;
&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;lock_guard&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;g&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;mx&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;  &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// guard the mutex mx&lt;/span&gt;
&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;lock_guard&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;g2&lt;/span&gt;;      &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// error: guarding nothing&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;
一个类如果有某个“特殊状态”，就必须单独由某个成员函数，或由额外过程来处理状态变化。不管是否能拷贝，这种类型很自然的会用某个特殊状态作为默认构造值。
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-C++&quot;&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;// std::ofstream is not a copyable type.&lt;/span&gt;
&lt;span style=&quot;color: #3F7F5F;&quot;&gt;// It does happen to have a default constructor&lt;/span&gt;
&lt;span style=&quot;color: #3F7F5F;&quot;&gt;// that goes along with a special &quot;not open&quot; state.&lt;/span&gt;
&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;ofstream&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;out&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;Foobar&quot;&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;
&lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ...&lt;/span&gt;
out &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;log&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;time, transaction&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;
&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;
类似的，特殊状态类型是可拷贝的。比如可拷贝的智能指针就有个特殊状态
&amp;ldquo;==nullptr&amp;rdquo;，必须用这个特殊状态作为其默认构造值。
&lt;/p&gt;

&lt;p&gt;
不管怎么样，最好有一个默认构造函数，将类的默认值初始化为一些有意义的状态，如&lt;code&gt;std::string&lt;/code&gt;的 &lt;code&gt;&quot;&quot;&lt;/code&gt; ，&lt;code&gt;std::vector&lt;/code&gt;的 &lt;code&gt;{}&lt;/code&gt;
&lt;/p&gt;


&lt;p&gt;
强化
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;标注用&lt;code&gt;=&lt;/code&gt;的可拷贝类，却没有默认构造函数&lt;/li&gt;
&lt;li&gt;标注用&lt;code&gt;==&lt;/code&gt;可比较的类，却不能拷贝&lt;/li&gt;
&lt;/ul&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines C.42 如果构造函数不能构造一个有效对象，抛出一个例外</title>
   <link href="http://kimi.im/2022-09-19-cppcoreguidelines-c42"/>
   <updated>2022-09-19T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-c42</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
C.42: If a constructor cannot construct a valid object, throw an exception
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;理由&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
放任无效对象一直存在，会导致麻烦的问题。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;例子&lt;/b&gt;
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;X2&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;FILE&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;*&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;f&lt;/span&gt;;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ...&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;public&lt;/span&gt;:
    &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;X2&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;string&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;name&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;
        :&lt;span style=&quot;color: #110099; font-style: italic;&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;fopen&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;name.&lt;span style=&quot;color: #3a5fcd; font-weight: bold; font-style: italic;&quot;&gt;c_str&lt;/span&gt;&lt;span style=&quot;color: #709870;&quot;&gt;()&lt;/span&gt;, &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;r&quot;&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;
    &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;
        &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;!&lt;/span&gt;f&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;throw&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;runtime_error&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;could not open&quot;&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;+&lt;/span&gt; name&lt;span style=&quot;color: #909183;&quot;&gt;}&lt;/span&gt;;
        &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ...&lt;/span&gt;
    &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;

    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold; font-style: italic;&quot;&gt;read&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt;;      &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// read from f&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ...&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;X2&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;file&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;Zeno&quot;&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// throws if file isn&apos;t open&lt;/span&gt;
    file.&lt;span style=&quot;color: #3a5fcd; font-weight: bold; font-style: italic;&quot;&gt;read&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt;;      &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// fine&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ...&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;
&lt;b&gt;例子&lt;/b&gt;
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-bad src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;X3&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;     &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// bad: the constructor leaves a non-valid object behind&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;FILE&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;*&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;f&lt;/span&gt;;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// call is_valid() before any other function&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;bool&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;valid&lt;/span&gt;;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ...&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;public&lt;/span&gt;:
    &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;X3&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;string&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;name&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;
        :&lt;span style=&quot;color: #110099; font-style: italic;&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;fopen&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;name.&lt;span style=&quot;color: #3a5fcd; font-weight: bold; font-style: italic;&quot;&gt;c_str&lt;/span&gt;&lt;span style=&quot;color: #709870;&quot;&gt;()&lt;/span&gt;, &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;r&quot;&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;, &lt;span style=&quot;color: #110099; font-style: italic;&quot;&gt;valid&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;false&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;
    &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;
        &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;f&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;valid&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;true&lt;/span&gt;;
        &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ...&lt;/span&gt;
    &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;

    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;bool&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold; font-style: italic;&quot;&gt;is_valid&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; valid; &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold; font-style: italic;&quot;&gt;read&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt;;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// read from f&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ...&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;X3&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;file&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;Heraclides&quot;&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;;
    file.&lt;span style=&quot;color: #3a5fcd; font-weight: bold; font-style: italic;&quot;&gt;read&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt;;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// crash or bad read!&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ...&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;file.&lt;span style=&quot;color: #3a5fcd; font-weight: bold; font-style: italic;&quot;&gt;is_valid&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;()&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;
        file.&lt;span style=&quot;color: #3a5fcd; font-weight: bold; font-style: italic;&quot;&gt;read&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;()&lt;/span&gt;;
        &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ...&lt;/span&gt;
    &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;else&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;
        &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ... handle error ...&lt;/span&gt;
    &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ...&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
&lt;b&gt;注意&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
对于变量来说，不管是在栈上的还是某个对象的成员，都没法直接通过函数调用获取错误信息。如果有无效的对象，然后要倚靠用户使用前自己去调用
&lt;code&gt;is_invalid()&lt;/code&gt; 这样的函数进行有效性检查，很麻烦、容易出错、效率不高。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;例外&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
在某些领域，比如飞机控制等硬实时系统中，为了实时性，异常出错没有额外的工具支持，所以就必须使用&lt;code&gt;is_valid()&lt;/code&gt;这样的技巧。这种情况下，及时的调用&lt;code&gt;is_valid()&lt;/code&gt;来模拟 RAII。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;其他选项&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
如果你有想法使用“构造后初始化”或“两级初始化”方法，请赶紧抹杀掉。如果你真的要这么做，请试试工厂函数方法。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;注意&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
有人为了避免代码重复，用&lt;code&gt;init()&lt;/code&gt;函数，而不在构造函数中进行初始化。把构造过程交给成员的默认初始化会更好。还有人觉得应该延迟到对象使用的时候再初始化，这种情况的解决办法是不要声明变量，知道要用的时候再声明并初始化。
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines C.41 构造函数须创建初始化完全的对象</title>
   <link href="http://kimi.im/2022-09-15-cppcoreguidelines-c41"/>
   <updated>2022-09-15T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-c41</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
C.41: A constructor should create a fully initialized object
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;理由&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
构造函数在类中建立一种特定约束的不变式。必须允许类的用户认为构造好的对象就能正常地使用。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;例子&lt;/b&gt;
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-bad src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;X1&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;FILE&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;*&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;f&lt;/span&gt;;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// call init() before any other function&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ...&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;public&lt;/span&gt;:
    &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;X1&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{}&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold; font-style: italic;&quot;&gt;init&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt;;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// initialize f&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold; font-style: italic;&quot;&gt;read&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt;;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// read from f&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ...&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;X1&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;file&lt;/span&gt;;
    file.&lt;span style=&quot;color: #3a5fcd; font-weight: bold; font-style: italic;&quot;&gt;read&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt;;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// crash or bad read!&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ...&lt;/span&gt;
    file.&lt;span style=&quot;color: #3a5fcd; font-weight: bold; font-style: italic;&quot;&gt;init&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt;;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// too late&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ...&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
以上代码中，我们构造了 &lt;code&gt;X1&lt;/code&gt; 之后还需要调用它的 &lt;code&gt;init&lt;/code&gt; 函数才完成其成员的初始化，在这之前调用其他函数就出错了。
&lt;/p&gt;

&lt;p&gt;
请注意，编译器不会解析代码注释。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;例外&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
如果某个对象不能很方便地通过构造函数初始化，就请使用工厂函数。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;强化&lt;/b&gt;
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;（简单）每一个构造函数都要能够完全初始化每一个成员变量（直接，间接调用其他构造函数，或默认构造函数）。&lt;/li&gt;
&lt;li&gt;如果构造函数有 &lt;code&gt;Ensures&lt;/code&gt; 合约，注意其是否包含一个后置条件。&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;
&lt;b&gt;注意&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
如果构造函数需要一个资源来创建一个有效的对象。那么这个资源必须由析构函数释放。构造函数获取资源，析构函数释放资源就是所谓的 RAII（Resource
Acquisition Is Initialization）。
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines C.40 如果类中有固定结构，为其定义一个构造函数</title>
   <link href="http://kimi.im/2022-09-14-cppcoreguidelines-c40"/>
   <updated>2022-09-14T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-c40</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
C.40: Define a constructor if a class has an invariant
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;理由&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
构造函数的目的就是为了建立类中数据的不变式约束条件。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;例如&lt;/b&gt;
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Date&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;  &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// a Date represents a valid date&lt;/span&gt;
              &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// in the January 1, 1900 to December 31, 2100 range&lt;/span&gt;
    &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;Date&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;dd&lt;/span&gt;, &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;mm&lt;/span&gt;, &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;yy&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;
        :&lt;span style=&quot;color: #110099; font-style: italic;&quot;&gt;d&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;dd&lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;, &lt;span style=&quot;color: #110099; font-style: italic;&quot;&gt;m&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;mm&lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;, &lt;span style=&quot;color: #110099; font-style: italic;&quot;&gt;y&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;yy&lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;
    &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;
        &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;!&lt;/span&gt;&lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;is_valid&lt;/span&gt;&lt;span style=&quot;color: #709870;&quot;&gt;(&lt;/span&gt;d, m, y&lt;span style=&quot;color: #709870;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;throw&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Bad_date&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;{}&lt;/span&gt;;  &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// enforce invariant&lt;/span&gt;
    &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ...&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;private&lt;/span&gt;:
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;d&lt;/span&gt;, &lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;m&lt;/span&gt;, &lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;y&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
最好通过构造函数来表达某种固定约束。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;注意&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
就算类中没有固定约束，为了使用方便，也会用到构造函数。
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;struct&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Rec&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;string&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;s&lt;/span&gt;;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;i&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;;
    &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;Rec&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;string&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;ss&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; : &lt;span style=&quot;color: #110099; font-style: italic;&quot;&gt;s&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;ss&lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{}&lt;/span&gt;
    &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;Rec&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;ii&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; :&lt;span style=&quot;color: #110099; font-style: italic;&quot;&gt;i&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;ii&lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{}&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;

&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Rec&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;r1&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;7&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;
&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Rec&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;r2&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;Foo bar&quot;&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;
&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;
&lt;b&gt;注意&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
很多情况下，C++11 的初始化列表，可以减少构造函数。
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;struct&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Rec2&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;string&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;s&lt;/span&gt;;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;i&lt;/span&gt;;
    &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;Rec2&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;string&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;ss&lt;/span&gt;, &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; ii &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; :&lt;span style=&quot;color: #110099; font-style: italic;&quot;&gt;s&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;ss&lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;, &lt;span style=&quot;color: #110099; font-style: italic;&quot;&gt;i&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;ii&lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{}&lt;/span&gt;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// redundant&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;

&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Rec2&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;r1&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;Foo&quot;&lt;/span&gt;, &lt;span style=&quot;color: #110099;&quot;&gt;7&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;
&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Rec2&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;r2&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;Bar&quot;&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;
&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;
&lt;code&gt;Rec2&lt;/code&gt; 的构造函数就是多余的了。这个构造函数中 &lt;code&gt;ii&lt;/code&gt; 的默认值，最好在成员定义的时候进行初始化。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;强化&lt;/b&gt;
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;标记那些有自定义的复制操作，却没有构造函数的类。自定义的复制造作意味着类中有某种固定结构。&lt;/li&gt;
&lt;/ul&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines C.37 把析构函数标注为 noexcept</title>
   <link href="http://kimi.im/2022-09-13-cppcoreguidelines-c37"/>
   <updated>2022-09-13T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-c37</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
C.37: Make destructors &lt;code&gt;noexcept&lt;/code&gt;
&lt;/p&gt;

&lt;p&gt;
&lt;b&gt;理由&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
析构函数不能运行失败。析构函数如果尝试抛出异常，是设计上的一种错误。这时候最好直接终止程序。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;注意&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
如果类的所以成员的析构函数都是 &lt;code&gt;noexcept&lt;/code&gt; ，那么该类的析构函数（用户定义或编译器生成）也隐式地声明为 &lt;code&gt;noexcept&lt;/code&gt; 。通过把析构函数标记为 &lt;code&gt;noexcept&lt;/code&gt;
，就可以避免析构函数隐式的变成非 &lt;code&gt;noexcept&lt;/code&gt; 。因为如果类的成员的析构函数不是 &lt;code&gt;noexcept&lt;/code&gt; 的，就会导致该类的析构函数不再是 &lt;code&gt;noexcept&lt;/code&gt; 。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;例子&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
并非所有的析构函数都是默认 &lt;code&gt;noexcept&lt;/code&gt; 的。类的某个成员的析构函数会抛出异常，就会影响整个类层级。
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-bad src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;struct&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;X&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Details&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;x&lt;/span&gt;;  &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// happens to have a throwing destructor&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ...&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;~&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;X&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// implicitly noexcept(false); aka can throw&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
因此，如果不确定，就把析构函数声明为 noexcept。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;注意&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
为何不把所有析构函数都声明为 &lt;code&gt;noexcept&lt;/code&gt; ？因为这样会看起来很杂乱。也就是说，能默认就默认，不要添加多余的代码。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;强化&lt;/b&gt;
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;（简单）将析构函数标记为 &lt;code&gt;noexcept&lt;/code&gt; ，如果函数可能会抛出异常。&lt;/li&gt;
&lt;/ul&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines C.36 析构函数不许执行失败抛出异常</title>
   <link href="http://kimi.im/2022-09-08-cppcoreguidelines-c36"/>
   <updated>2022-09-08T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-c36</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
C.36: A destructor must not fail
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;理由&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
如果析构函数会执行失败，我们就不知道怎么写出不出错的代码了。标准库要求所有跟它配合的类不能有出错时抛出异常的析构函数。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;例子&lt;/b&gt;
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;X&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;public&lt;/span&gt;:
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;~&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;X&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;noexcept&lt;/span&gt;;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ...&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;

&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;X&lt;/span&gt;::&lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;~&lt;/span&gt;&lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;X&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;noexcept&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ...&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;cannot_release_a_resource&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;terminate&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt;;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ...&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;
&lt;b&gt;注意&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
很多人尝试析构函数出错的防呆策略，但是都失败了。这其中有一个技术实践问题：比如，如果一个套接字无法关闭，会发生什么？编写析构函数的人不知道什么时候会调用，不能通过抛出异常来“拒绝执行”。如果套接字的“关闭/释放”操作不支持重试，问题会更麻烦。如果可能的话，尽量考虑在资源关闭或清理过程中出现的错误为一种基础设计错误，直接终止程序。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;注意&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
声明析构函数为 &lt;code&gt;noexcept&lt;/code&gt; 。这样可以确保要么正常结束，要么终止整个程序。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;注意&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
如果资源无法释放，但是程序不能终止，那么就把故障通知到系统的其他部分。比如修改某个全局状态，期待某些地方会注意到这个错误，对故障进行处理。请注意，这个技术是一种特殊的处理过程，非常容易出错。比如“我的连接无法关闭”这个例子。连接出错，可能是因为连接的另一个端点有问题，代码很难同时处理连接两端的故障。析构函数必须能够传递某个消息给系统中处理这部分错误的管理任务。让其考虑如何关闭连接，恢复网络的正常工作。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;注意&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
如果析构函数使用了执行会失败的操作，那么函数要能捕捉到异常，某些情况下要确保能成功完成执行。（比如使用抛出异常操作的某些不同的清理机制）。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;强化&lt;/b&gt;
&lt;/p&gt;

&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;（简单）析构函数必须声明为 &lt;code&gt;noexcept&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines C.35 基类的析构函数须为public且virtual，或protected且非virtual</title>
   <link href="http://kimi.im/2022-09-02-cppcoreguidelines-c35"/>
   <updated>2022-09-02T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-c35</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
C.35: A base class destructor should be either public and virtual, or
protected and non-virtual
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;理由&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
为了避免未定义的行为。如果析构函数为 &lt;code&gt;public&lt;/code&gt; ，则调用处的代码就可以通过基类对象的指针释放继承类对象。如果基类的析构函数不是 &lt;code&gt;virtual&lt;/code&gt; ，这样操作的结果是未定义的。
&lt;/p&gt;

&lt;p&gt;
如果基类的析构函数添加了 &lt;code&gt;protected&lt;/code&gt; 修饰符，则调用处的代码无法通过继承类对象的基类的指针指向的析构函数销毁释放该对象。此时，基类的析构函数不必是 &lt;code&gt;virtual&lt;/code&gt; 的，但必须是 &lt;code&gt;protected&lt;/code&gt; ，不能是 &lt;code&gt;private&lt;/code&gt; 。因为继承类中可以在其析构函数内调用基类的析构函数。
&lt;/p&gt;

&lt;p&gt;
一般来说，编写基类的程序员不需要知道析构过程中需要哪些具体操作，继承类必须处理好析构过程。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;例子&lt;/b&gt;
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-bad src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;struct&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Base&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// BAD: implicitly has a public non-virtual destructor&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;virtual&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold; font-style: italic;&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt;;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &amp;#27492;&amp;#22788;&amp;#26377;&amp;#19968;&amp;#20010;&amp;#38544;&amp;#34255;&amp;#30340; public &amp;#19988;&amp;#38750; virtual &amp;#30340;&amp;#26512;&amp;#26500;&amp;#20989;&amp;#25968;&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;struct&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;D&lt;/span&gt; : &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Base&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;string&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;s&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;a resource needing cleanup&quot;&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;~&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;D&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;/* ... do some cleanup ... */&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ...&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;use&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;unique_ptr&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Base&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;p&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;make_unique&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;D&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt;;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ...&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// p&apos;s destruction calls ~Base(), not ~D(),&lt;/span&gt;
  &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// which leaks D::s and possibly more&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;
&lt;b&gt;注意&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
虚函数定义了一个接口，使用的时候，只需关注接口就可以了，不需要了解继承类的具体实现。如果析构函数是基类的接口，那么就要允许安全的进行释放销毁操作。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;注意&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
析构函数不能为 &lt;code&gt;private&lt;/code&gt; ，不然会导致该对象无法使用：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-bad src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;X&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;~&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;X&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt;;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// private destructor&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ...&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;use&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;X&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;a&lt;/span&gt;;                        &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// error: cannot destroy&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;auto&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;p&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;make_unique&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;X&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt;;  &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// error: cannot destroy&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;
&lt;b&gt;例外&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
以下情况你可能需要&lt;code&gt;protected virtual&lt;/code&gt;析构函数：一个继承的对象可以通过基类指针释放另一对象。但是很少使用。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;强化&lt;/b&gt;
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;一个类如果有虚函数，则必须定义 &lt;code&gt;public&lt;/code&gt; 且 &lt;code&gt;virtual&lt;/code&gt; 的析构函数，或者
&lt;code&gt;protected&lt;/code&gt; 且非 &lt;code&gt;virtual&lt;/code&gt; 的析构函数。&lt;/li&gt;
&lt;li&gt;如果类公开继承了一个基类，则基类必须有 &lt;code&gt;public&lt;/code&gt; 且 &lt;code&gt;virtual&lt;/code&gt; ，或
&lt;code&gt;protected&lt;/code&gt; 且非 &lt;code&gt;virtual&lt;/code&gt; 的析构函数。&lt;/li&gt;
&lt;/ul&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines C.33 如果类拥有指针成员的所有权，则须定义析构函数</title>
   <link href="http://kimi.im/2022-09-01-cppcoreguidelines-c33"/>
   <updated>2022-09-01T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-c33</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
C.33: If a class has an owning pointer member, define a destructor
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;理由&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
在对象析构的时候，必须删除其所拥有的对象。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;例子&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
指针成员代表着一个资源。不建议这样使用&lt;code&gt;T*&lt;/code&gt;，但是在早期代码里，这种用法很常见。考虑到&lt;code&gt;T*&lt;/code&gt;可能占有资源，以下代码就可能有问题了。
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-bad src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;template&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;typename&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Smart_ptr&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;*&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;p&lt;/span&gt;;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// BAD: vague about ownership of *p&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ...&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;public&lt;/span&gt;:
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ... no user-defined default operations ...&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;use&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Smart_ptr&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;p1&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// error: p2.p leaked (if not nullptr and not owned by some other code)&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;auto&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;p2&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;p1&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
注意，如果你定义了析构函数，那么你要么定义所有的默认操作，要么删除所有的默认操作：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-bad src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;template&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;typename&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Smart_ptr2&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;*&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;p&lt;/span&gt;;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// BAD: vague about ownership of *p&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ...&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;public&lt;/span&gt;:
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ... no user-defined copy operations ...&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;~&lt;/span&gt;Smart_ptr2&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;delete&lt;/span&gt; p; &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;  &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// p is an owner!&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;use&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Smart_ptr2&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;p1&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;auto&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;p2&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;p1&lt;/span&gt;;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// error: double deletion&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
默认的复制操作只会浅浅地将&lt;code&gt;p1.p&lt;/code&gt;复制到&lt;code&gt;p2.p&lt;/code&gt;，从而导致重复释放&lt;code&gt;p1.p&lt;/code&gt;。注意以下代码中的所有权关系：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;template&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;typename&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Smart_ptr3&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;owner&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;p&lt;/span&gt;;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// OK: explicit about ownership of *p&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ...&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;public&lt;/span&gt;:
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ...&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ... copy and move operations ...&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;~&lt;/span&gt;Smart_ptr3&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;delete&lt;/span&gt; p; &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;use&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Smart_ptr3&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;p1&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;auto&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;p2&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;p1&lt;/span&gt;;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// OK: no double deletion&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;
&lt;b&gt;注意&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
通常来说，获得一个析构函数的最简单的方法是用智能指针（ &lt;code&gt;std::unique_ptr&lt;/code&gt;
）替代原始指针，然后让编译器去隐式的分配合适的析构方法。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;注意&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
为何不要求所有的指针都必须是“智能指针”？因为强求的话，有时候会导致大量的代码变更，而且可能影响 ABI。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;强化&lt;/b&gt;
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;类中如果有指针成员数据，就要仔细检查下是否有问题&lt;/li&gt;
&lt;li&gt;类中如果有&lt;code&gt;owner&amp;lt;T*&amp;gt;&lt;/code&gt;就必须定义其默认操作函数&lt;/li&gt;
&lt;/ul&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines C.32 考虑类是否可以拥有其成员原始指针和引用</title>
   <link href="http://kimi.im/2022-08-31-cppcoreguidelines-c32"/>
   <updated>2022-08-31T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-c32</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
C.32: If a class has a raw pointer (&lt;code&gt;T*&lt;/code&gt;) or reference (&lt;code&gt;T&amp;amp;&lt;/code&gt;), consider
whether it might be owning
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;理由&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
很多代码里的所有权信息是不明确的。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;例子&lt;/b&gt;
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;legacy_class&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;foo&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;*&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;m_owning&lt;/span&gt;;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// Bad: change to unique_ptr&amp;lt;T&amp;gt; or owner&amp;lt;T*&amp;gt;&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;bar&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;*&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;m_observer&lt;/span&gt;; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// OK: keep&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
这里，&lt;code&gt;m_owning&lt;/code&gt;成员变量是由&lt;code&gt;legacy_class&lt;/code&gt;类所有的，所以要改成
&lt;code&gt;unique_ptr&amp;lt;T&amp;gt;&lt;/code&gt; 或&lt;code&gt;owner&amp;lt;T*&amp;gt;&lt;/code&gt;。而&lt;code&gt;m_observer&lt;/code&gt;则是引用了外部的变量，所以可以保留这么写。
&lt;/p&gt;

&lt;p&gt;
&lt;b&gt;注意&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
在新写的代码里，明确表明哪些指针是类所有，哪些指针是类外面的变量。类不能保有引用的所有权。
&lt;/p&gt;

&lt;p&gt;
&lt;b&gt;强化&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
查看原始成员指针和成员引用，是否初始化的时候分配了内存。
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines C.31 类获取的所有资源必须在析构函数中释放</title>
   <link href="http://kimi.im/2022-08-21-cppcoreguidelines-c31"/>
   <updated>2022-08-21T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-c31</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
C.31: All resources acquired by a class must be released by the
class&amp;rsquo;s destructor
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;理由&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
防止资源泄漏
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;注意&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
对于有默认运算符的类，资源可以自动申请释放。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;例子&lt;/b&gt;
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;X&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;ifstream&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;f&lt;/span&gt;;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// might own a file&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ... no default operations defined or =deleted ...&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
类 X 的输入流 &lt;code&gt;ifstream&lt;/code&gt; 会在 X 的析构过程中，隐式地关闭其打开的文件。
&lt;/p&gt;



&lt;p&gt;
&lt;b&gt;例子&lt;/b&gt;
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-bad src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;X2&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;     &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// bad&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;FILE&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;*&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;f&lt;/span&gt;;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// might own a file&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ... no default operations defined or =deleted ...&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
X2 可能会泄露文件句柄（file handle）的内存。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;注意&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
如果套接字不能关闭怎么办？
&lt;/p&gt;

&lt;p&gt;
析构函数、关闭、清理操作不可以失败。
&lt;/p&gt;

&lt;p&gt;
但是如果确实失败了会怎么样？析构函数的开发者不知道什么时候会调用到这个函数，不能通过抛出异常而拒绝后续操作。而且很多关闭/释放操作不能重试。目前来说，没有通用的解决方案。如果行得通，可以认为关闭/清理操作失败的话，本身就是一种设计错误，直接结束程序。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;注意&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
类里面可以有指向不是该类的对象所管理的资源，这些资源通常以指针或引用的方式间接访问。很明显，这些对象不可以在类的析构函数中释放。比如：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-C++&quot;&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Preprocessor&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;pp&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;/* ... */&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;
&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Parser&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;p&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt; pp, &lt;span style=&quot;color: #3F7F5F;&quot;&gt;/* ... */&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;
&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Type_checker&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;tc&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt; p, &lt;span style=&quot;color: #3F7F5F;&quot;&gt;/* ... */&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
这里， &lt;code&gt;p&lt;/code&gt; 指向的 &lt;code&gt;pp&lt;/code&gt; 不是 &lt;code&gt;p&lt;/code&gt; 管理的对象。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;强化&lt;/b&gt;
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;（简单）如果类中的指针或引用指向的变量属于这个类，那么类的析构函数中也要释放这些资源。&lt;/li&gt;
&lt;li&gt;（复杂）如果类中有显式的所有权描述语句（比如在构造函数中描述），那么指针和引用成员变量就属于此类。&lt;/li&gt;
&lt;/ul&gt;
</content>
 </entry>
 
 <entry>
   <title>单词本：whatnot</title>
   <link href="http://kimi.im/2022-08-21-english-whatnot"/>
   <updated>2022-08-21T00:00:00+00:00</updated>
   <id>http://kimi.im/english-whatnot</id>
   <content type="html">&lt;p&gt;
最近工作紧张，白天上班晚上开会。都没时间轻松的写点东西了。
&lt;/p&gt;

&lt;p&gt;
最近看论文，看到这个单词，拆开来看，好像都认识。合在一起好像也应该认识。
&lt;/p&gt;

&lt;p&gt;
whatnot 只的不是不是什么，而是不知道是什么的什么，就是不可名状的东西，杂七杂八的东西。
&lt;/p&gt;

&lt;p&gt;
举个例子：a whatnot tree 不知名的树
&lt;/p&gt;

&lt;p&gt;
如果 whatnot 和 and 连用： and whatnot，就是说还有其他差不多的东西。如：
Art pictures were of people sitting in a diner at night and
whatnot. 美术图画都是大家在晚上坐在一起吃饭等差不多的主题。
&lt;/p&gt;

&lt;p&gt;
whatnot 还有个意思是放古董、装饰物件的架子。大概因为这种架子上放的往往都是些不可名状的东西。一般会分好几层，上面敞开式，下面带抽屉。
&lt;/p&gt;

&lt;p&gt;
在法语里，这种架子叫做 étagère。
&lt;/p&gt;

&lt;p&gt;
最近美国最大的独立直播购物平台在 D 轮融资募集了 2.6 亿美元，估值达到
37 亿美元。这个平台就取名叫 Whatnot。
&lt;/p&gt;

&lt;p&gt;
Whatnot 最初是一个标准化且不太活跃的转售平台，起初只专注于验证一种收藏品：Funko Pops 玩具小人。新冠疫情蔓延后，被困在家里的用户，开始直播购物，Whatnot 因此得到迅速增长。它从 Funko Pops 发展到各种其他收藏品，包括 Pokémon 卡片、别针、复古服装和运动鞋等。它采用了盲盒卡片的方法，用户购买未开封的口袋妖怪或运动卡盒，其他人观看他们现场开箱内容。
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines C.30 如果某个类需销毁某特定对象，请定义析构函数</title>
   <link href="http://kimi.im/2022-08-15-cppcoreguidelines-c30"/>
   <updated>2022-08-15T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-c30</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
C.30: Define a destructor if a class needs an explicit action at object destruction
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;理由&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
在对象生命周期结束的时候，会隐式地调用析构函数。如果默认析构函数够用了，就用默认的析构函数。如果类的析构函数还会处理一些不在其成员变量的析构函数中处理的逻辑，才需要手工定义一个析构函数。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;例子&lt;/b&gt;
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;#include&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&amp;lt;iostream&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;using&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;namespace&lt;/span&gt; std;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;template&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;typename&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;A&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;struct&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;final_action&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// slightly simplified&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;A&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;act&lt;/span&gt;;
    &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;final_action&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;A&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;a&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; : &lt;span style=&quot;color: #110099; font-style: italic;&quot;&gt;act&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;a&lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{}&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;~&lt;/span&gt;final_action&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;act&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;()&lt;/span&gt;; &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;template&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;typename&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;A&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;final_action&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;A&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;finally&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;A&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;act&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// deduce action type&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;final_action&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;A&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;act&lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;test&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;auto&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;act&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;finally&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;[]&lt;/span&gt; &lt;span style=&quot;color: #909183;&quot;&gt;{&lt;/span&gt; cout &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;Exit test\n&quot;&lt;/span&gt;; &lt;span style=&quot;color: #909183;&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// establish exit action&lt;/span&gt;
    cout &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;testing...&quot;&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; endl;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;true&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt;; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// act done here&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// act done here&lt;/span&gt;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;main&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;test&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;pre class=&quot;example&quot;&gt;
testing...
Exit test
&lt;/pre&gt;


&lt;p&gt;
&lt;code&gt;final_action&lt;/code&gt; 的主要目的就是在对象析构的时候，执行一个 &lt;code&gt;lambda&lt;/code&gt; 函数。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;注意&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
一般有 2 种类需要自定义的析构函数
&lt;/p&gt;
&lt;ol class=&quot;org-ol&quot;&gt;
&lt;li&gt;类中有资源无法用自带析构函数的类表示的情况，所谓自带析构函数是指
&lt;code&gt;vector&lt;/code&gt; 、 &lt;code&gt;transaction&lt;/code&gt; 等类。&lt;/li&gt;
&lt;li&gt;类的主要目的是在析构的时候执行某些动作，如一个 &lt;code&gt;tracer&lt;/code&gt; （追踪类）、以及以上例子的&lt;code&gt;final_action&lt;/code&gt;类。&lt;/li&gt;
&lt;/ol&gt;


&lt;p&gt;
&lt;b&gt;例子&lt;/b&gt;
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Foo&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// bad; use the default destructor&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;public&lt;/span&gt;:
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ...&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;~&lt;/span&gt;Foo&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;s&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;&quot;&lt;/span&gt;; &lt;span style=&quot;color: #000000;&quot;&gt;i&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;0&lt;/span&gt;; vi.&lt;span style=&quot;color: #3a5fcd; font-weight: bold; font-style: italic;&quot;&gt;clear&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;()&lt;/span&gt;; &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;  &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// clean up&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;private&lt;/span&gt;:
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;string&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;s&lt;/span&gt;;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;i&lt;/span&gt;;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;vector&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;vi&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
以上代码中，成员对象的默认析构函数已经够用了，无需再手工进行销毁。这样效率低、且容易出错。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;注意&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
如果需要默认析构函数，但是被抑制了（当我们定义了移动构造函数，就不会隐式生成默认析构函数）。这时候，可以用&lt;code&gt;= default&lt;/code&gt;表示我们需要一个默认析构函数。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;强化&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
找到含有可能隐式资源（implicit resource）的类。隐式资源如指针、引用。那么我们需要为其定义一个特定的析构函数。
&lt;/p&gt;

&lt;p&gt;
找到定义了析构函数（多余的）的类，而其成员数据都有析构函数。那么，我们不需要在自定义一个析构函数。
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines C.22 保持一致的默认操作函数</title>
   <link href="http://kimi.im/2022-08-10-cppcoreguidelines-c22"/>
   <updated>2022-08-10T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-c22</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
C.22: Make default operations consistent
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;理由&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
默认操作函数，是一组概念上匹配的操作函数集。其语义是相关联的。如果拷贝/移动构造函数、拷贝/移动赋值函数的逻辑行为不一致，会让用户很抓狂。如果构造和析构函数对资源的操作方式不一致，用户也会觉得很惊讶。如果拷贝和移动操作、构造和析构操作不对应，用户也会很惊讶。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;例子&lt;/b&gt;
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-bad src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Silly&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// BAD: Inconsistent copy operations&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Impl&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;
        &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ...&lt;/span&gt;
    &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;shared_ptr&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Impl&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;p&lt;/span&gt;;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;public&lt;/span&gt;:
    &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;Silly&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Silly&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;a&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; : &lt;span style=&quot;color: #110099; font-style: italic;&quot;&gt;p&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;make_shared&lt;/span&gt;&lt;span style=&quot;color: #909183; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Impl&lt;/span&gt;&lt;span style=&quot;color: #909183; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;()&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;p&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;*&lt;/span&gt;a.&lt;span style=&quot;color: #110099; font-style: italic;&quot;&gt;p&lt;/span&gt;; &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// deep copy&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Silly&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt; operator&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Silly&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;a&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;p&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; a.&lt;span style=&quot;color: #110099; font-style: italic;&quot;&gt;p&lt;/span&gt;; &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// shallow copy&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ...&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
以上，构造函数和拷贝构造函数的操作不一致，一个是深复制，一个是浅复制。这会导致误解，产生 bug 。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;强化&lt;/b&gt;
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;（复杂）拷贝/移动构造函数与对应的拷贝/移动赋值函数要在成员变量的同一层级进行读写操作。&lt;/li&gt;
&lt;li&gt;（复杂）任何在拷贝/移动构造函数中改写的成员变量要在其他构造函数中初始化。&lt;/li&gt;
&lt;li&gt;（复杂）如果拷贝/移动构造函数对一个成员变量进行深复制，析构函数也应该修改此成员变量。&lt;/li&gt;
&lt;li&gt;（复杂）如果析构函数要修改一个成员变量，这个变量必须是在其他拷贝/移动构造或赋值函数中修改过。&lt;/li&gt;
&lt;/ul&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines C.21 复制、移动和析构函数要同时定义或同时删除</title>
   <link href="http://kimi.im/2022-08-08-cppcoreguidelines-c21"/>
   <updated>2022-08-08T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-c21</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
C.21: If you define or &lt;code&gt;=delete&lt;/code&gt; any copy, move, or destructor function,
define or &lt;code&gt;=delete&lt;/code&gt; them all
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;理由&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
移动、复制、析构函数紧密相关，所以定义了其中任何一个，就要考虑是否需要定义其他函数。
&lt;/p&gt;

&lt;p&gt;
声明任何一个移动、复制、析构函数，就阻止编译器生成隐含的移动构造、移动赋值操作。即使是把其中一个函数声明成&lt;code&gt;= default&lt;/code&gt;或 &lt;code&gt;= delete&lt;/code&gt; ，也会产生一样的效果。
&lt;/p&gt;

&lt;p&gt;
声明移动构造、或移动赋值函数，就会隐含地导致复制构造函数、或复制赋值函数被定义为删除状态。所以，声明了其中任意一个函数，就要同时定义其他函数，以确保不会产生不想要的效果，比如把本可以移动的变成复制（开销更大）；使得一个类变成只能进行移动操作。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;例子&lt;/b&gt;
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-bad src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;struct&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;M2&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// bad: incomplete set of copy/move/destructor operations&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;public&lt;/span&gt;:
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ...&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ... no copy or move operations ...&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;~&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;M2&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;delete&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;[]&lt;/span&gt; rep; &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;private&lt;/span&gt;:
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;pair&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt;, &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;*&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;rep&lt;/span&gt;;  &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// zero-terminated set of pairs&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;use&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;M2&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;x&lt;/span&gt;;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;M2&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;y&lt;/span&gt;;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ...&lt;/span&gt;
    &lt;span style=&quot;color: #000000;&quot;&gt;x&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; y;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// the default assignment&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ...&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
在析构函数里，有一些额外操作，即删除成员指针指向的数据。这会导致默认复制和移动赋值操作出错（指针删除两次）。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;注意&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
此规则又叫“五”规则。即五个相关的函数要一起定义，或全都默认。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;注意&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
如果你想要某个函数为默认实现，请在函数后面写上&lt;code&gt;= default&lt;/code&gt;，标明你的目的。如果你不想要自动生成的默认函数，请添加&lt;code&gt;= delete&lt;/code&gt;。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;例子&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
如果需要声明一个构造函数，可以将它标记为 &lt;code&gt;virtual&lt;/code&gt; ，可以设置为默认定义的。
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;AbstractBase&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;public&lt;/span&gt;:
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;virtual&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold; font-style: italic;&quot;&gt;foo&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;0&lt;/span&gt;;  &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// at least one abstract method to make the class abstract    &lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;virtual&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;~&lt;/span&gt;AbstractBase&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;default&lt;/span&gt;;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ...&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
为避免多态类实例的数据被切片，导致数据不统一，请将复制和移动操作设置为
&lt;code&gt;protected&lt;/code&gt; 或&lt;code&gt;= delete&lt;/code&gt;，并增加一个 &lt;code&gt;clone&lt;/code&gt; 函数。
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;ClonableBase&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;public&lt;/span&gt;:
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;virtual&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;unique_ptr&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;ClonableBase&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold; font-style: italic;&quot;&gt;clone&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt;;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;virtual&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;~&lt;/span&gt;ClonableBase&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;default&lt;/span&gt;;
    &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;CloneableBase&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;default&lt;/span&gt;;
    &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;ClonableBase&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;ClonableBase&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;delete&lt;/span&gt;;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;ClonableBase&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt; operator&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;ClonableBase&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;delete&lt;/span&gt;;
    &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;ClonableBase&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;ClonableBase&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;delete&lt;/span&gt;;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;ClonableBase&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt; operator&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;ClonableBase&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;delete&lt;/span&gt;;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ... other constructors and functions ...&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
如果只定义移动操作或只定义复制操作，也可以实现一样的效果。但是最好还是按照以上例子，把代码写得清晰一些。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;注意&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
编译器通常会强化此规则，更理想的是能够针对违规提出警告。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;注意&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
以下情况已经不再支持：只有析构函数，然后想要有隐式的拷贝操作
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;注意&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
编写以下函数很容易出错。注意他们的参数类型：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;X&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;public&lt;/span&gt;:
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ...&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;virtual&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;~&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;X&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;default&lt;/span&gt;;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// destructor (virtual if X is meant to be a base class)&lt;/span&gt;
    &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;X&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;X&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;default&lt;/span&gt;;             &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// copy constructor&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;X&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt; operator&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;X&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;default&lt;/span&gt;;  &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// copy assignment&lt;/span&gt;
    &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;X&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;X&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;default&lt;/span&gt;;                  &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// move constructor&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;X&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt; operator&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;X&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;default&lt;/span&gt;;       &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// move assignment&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
一个小错误（比如拼写错误、忘记写 &lt;code&gt;const&lt;/code&gt; 、使用&lt;code&gt;&amp;amp;&lt;/code&gt;的地方用了&lt;code&gt;&amp;amp;&amp;amp;&lt;/code&gt;、忘记写某个特殊函数）都会导致错误和报警。为避免此类繁琐且易出错的工作，请考虑遵循“最小化原则”。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;强化&lt;/b&gt;
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;（简单）一个类要么定义了所有五个特殊函数（复制构造/复制赋值/移动构造
/移动赋值/析构），哪怕其中有标记为&lt;code&gt;= delete&lt;/code&gt;的；要么一个也不声明，由编译器隐式生成。&lt;/li&gt;
&lt;/ul&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines C.20 尽量不去修改类的默认操作</title>
   <link href="http://kimi.im/2022-08-07-cppcoreguidelines-c20"/>
   <updated>2022-08-07T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-c20</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
C.20: If you can avoid defining default operations, do
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;理由&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
简单，清晰，语义明确。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;例子&lt;/b&gt;
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;struct&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Named_map&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;public&lt;/span&gt;:
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ... no default operations declared ...&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;private&lt;/span&gt;:
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;string&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;name&lt;/span&gt;;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;map&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt;, &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;rep&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;

&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Named_map&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;nm&lt;/span&gt;;        &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// default construct&lt;/span&gt;
&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Named_map&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;nm2&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;nm&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;  &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// copy construct&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
因为&lt;code&gt;std::map&lt;/code&gt;和 &lt;code&gt;string&lt;/code&gt; 都有相应的默认构造和拷贝操作符，所以不需要额外处理。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;注意&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
这就是所谓的零规则（the rule of zero）
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;强化&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
好的静态代码分析工具能够检测到可能存在的改进点。比如一个类有指针和数组大小这样的成员数据对，还有析构函数删除指针指向的内存，静态代码分析工具可以提示此处用 &lt;code&gt;vector&lt;/code&gt; 是否更好。
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines C.12 类的成员数据不可为 const 或引用</title>
   <link href="http://kimi.im/2022-08-06-cppcoreguidelines-c12"/>
   <updated>2022-08-06T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-c12</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
C.12: Don&amp;rsquo;t make data members &lt;code&gt;const&lt;/code&gt; or references in a copyable or movable type
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;理由&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
这样做没啥用。导致该类型很难使用：不能复制，或因为种种原因，部分不能复制。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;例子&lt;/b&gt;
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-bad src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;bad&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;i&lt;/span&gt;;    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// bad&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;string&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt; &lt;span style=&quot;color: #110099; font-style: italic;&quot;&gt;s&lt;/span&gt;;      &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// bad&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ...&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
&lt;code&gt;const&lt;/code&gt; 和&lt;code&gt;&amp;amp;&lt;/code&gt;的成员数据导致这个类只能部分复制，即可以复制构造，不能复制赋值。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;注意&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
如果你需要让成员指向某些东西，不要用引用，可以用指针（原始指针；智能指针；如果不能为空，可以是&lt;code&gt;gsl::not_null&lt;/code&gt;）。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;强化&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
标记出有 &lt;code&gt;const&lt;/code&gt; 、 &lt;code&gt;&amp;amp;&lt;/code&gt; 或&lt;code&gt;&amp;amp;&amp;amp;&lt;/code&gt;修饰的成员数据。
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines C.11 编写常规的具体类型</title>
   <link href="http://kimi.im/2022-08-05-cppcoreguidelines-c11"/>
   <updated>2022-08-05T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-c11</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
C.11: Make concrete types regular
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;理由&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
常规类型更易理解、更容易进行逻辑分析。
&lt;/p&gt;

&lt;p&gt;
C++ 内置类型为常规类型，包括标准库里的类，比如 &lt;code&gt;string&lt;/code&gt; ， &lt;code&gt;vector&lt;/code&gt; ， &lt;code&gt;map&lt;/code&gt;
。可以定义没有赋值运算符和相等运算符的具体类，但是不常见。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;例子&lt;/b&gt;
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;struct&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Bundle&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;string&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;name&lt;/span&gt;;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;vector&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Record&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;vr&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;bool&lt;/span&gt; operator&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;==&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Bundle&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;a&lt;/span&gt;, &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Bundle&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;b&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; a.&lt;span style=&quot;color: #110099; font-style: italic;&quot;&gt;name&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;==&lt;/span&gt; b.&lt;span style=&quot;color: #110099; font-style: italic;&quot;&gt;name&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; a.&lt;span style=&quot;color: #110099; font-style: italic;&quot;&gt;vr&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;==&lt;/span&gt; b.&lt;span style=&quot;color: #110099; font-style: italic;&quot;&gt;vr&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;

&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Bundle&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;b1&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;my bundle&quot;&lt;/span&gt;, &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;r1, r2, r3&lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;
&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Bundle&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;b2&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;b1&lt;/span&gt;;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;!&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;b1 &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;==&lt;/span&gt; b2&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;error&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;impossible!&quot;&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;
b2.&lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;name&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;the other bundle&quot;&lt;/span&gt;;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;b1 &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;==&lt;/span&gt; b2&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;error&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;No!&quot;&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
如果具体类型是可复制的，最好为其添加相等运算符。这样确保&lt;code&gt;a = b&lt;/code&gt;操作之后，&lt;code&gt;a == b&lt;/code&gt;为真。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;注意&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
如果某些结构体打算和 C 代码共享，那么添加&lt;code&gt;operator==&lt;/code&gt;函数似乎就可行了。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;注意&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
某些资源的句柄（ handle ）通常不能克隆，比如互斥锁的&lt;code&gt;scoped_lock&lt;/code&gt;，虽然是具体类，但是通常不能复制。所以就不属于常规类型。这种类型往往只能移动。
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines C.10 具体类比层级继承好</title>
   <link href="http://kimi.im/2022-08-03-cppcoreguidelines-c10"/>
   <updated>2022-08-03T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-c10</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
C.10: Prefer concrete types over class hierarchies
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;理由&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
具体类比层级继承类更基础简单，有这些好处：容易设计、容易实现、容易使用、容易推导分析、轻巧、快速。如果要使用类层级，最好有充足的理由。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;例子&lt;/b&gt;
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Point1&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;x&lt;/span&gt;, &lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;y&lt;/span&gt;;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ... operations ...&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ... no virtual functions ...&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Point2&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;x&lt;/span&gt;, &lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;y&lt;/span&gt;;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ... operations, some virtual ...&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;virtual&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;~&lt;/span&gt;Point2&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;use&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Point1&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;p11&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;1&lt;/span&gt;, &lt;span style=&quot;color: #110099;&quot;&gt;2&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// make an object on the stack&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Point1&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;p12&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;p11&lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;;    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// a copy&lt;/span&gt;

    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;auto&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;p21&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;make_unique&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Point2&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;1&lt;/span&gt;, &lt;span style=&quot;color: #110099;&quot;&gt;2&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// make an object on the free store&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;auto&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;p22&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; p21&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #3a5fcd; font-weight: bold; font-style: italic;&quot;&gt;clone&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt;;                &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// make a copy&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ...&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
如果一个类位于类层级中，你需要通过对象的指针或引用去访问操作它。这意味着更多的内存开销、更多的内存分配和内存释放、更多的运行时开销、间接的数据访问。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;注意&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
具体类可以在栈中分配。可以是别的类的成员。
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines C.9 尽量隐藏成员数据</title>
   <link href="http://kimi.im/2022-08-02-cppcoreguidelines-c9"/>
   <updated>2022-08-02T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-c9</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
C.9: Minimize exposure of members
&lt;/p&gt;

&lt;p&gt;
&lt;b&gt;理由&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
数据封装。信息隐藏。避免意外访问。简化代码维护。
&lt;/p&gt;

&lt;p&gt;
&lt;b&gt;例子&lt;/b&gt;
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;template&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;typename&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt;, &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;typename&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;U&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;struct&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;pair&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;a&lt;/span&gt;;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;U&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;b&lt;/span&gt;;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ...&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
因为 &lt;code&gt;a&lt;/code&gt; 和 &lt;code&gt;b&lt;/code&gt; 是公开的，不管注释部分提供了什么接口， &lt;code&gt;pair&lt;/code&gt; 的用户都可以随意且独立地修改 &lt;code&gt;a&lt;/code&gt; 和 &lt;code&gt;b&lt;/code&gt; 的数据。在庞大的代码库中，我们难以轻松找到哪些代码修改了 &lt;code&gt;pair&lt;/code&gt; 的哪些成员数据。如果我们想强化成员变量之间的关系，最好是把它们设置成私有数据，然后通过构造函数和成员函数来强化他们之间的约束关系（不变体， invariant ）。
&lt;/p&gt;

&lt;p&gt;
在以下例子中， &lt;code&gt;meters&lt;/code&gt; 函数根据成员变量计算出以米为单位的距离数据。通过
&lt;code&gt;set_unit&lt;/code&gt; 设置距离单位信息。这样，就不用直接访问成员数据进行计算，确保了 &lt;code&gt;meters&lt;/code&gt; 返回的是正确的数值。想象一下，如果用户不知道 &lt;code&gt;magnitude&lt;/code&gt; 和
&lt;code&gt;unit&lt;/code&gt; 之间的关系，直接访问 &lt;code&gt;magnitude&lt;/code&gt; 就可能用错数据值了。
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Distance&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;public&lt;/span&gt;:
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ...&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;double&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold; font-style: italic;&quot;&gt;meters&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; magnitude&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;*&lt;/span&gt;unit; &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold; font-style: italic;&quot;&gt;set_unit&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;double&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;u&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;
    &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;
            &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ... check that u is a factor of 10 ...&lt;/span&gt;
            &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ... change magnitude appropriately ...&lt;/span&gt;
            &lt;span style=&quot;color: #000000;&quot;&gt;unit&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; u;
    &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ...&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;private&lt;/span&gt;:
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;double&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;magnitude&lt;/span&gt;;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;double&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;unit&lt;/span&gt;;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// 1 is meters, 1000 is kilometers,&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// 0.001 is millimeters, etc.&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;
&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;
&lt;b&gt;注意&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
如果哪些用户能直接访问哪些数据还不确定，那么就很难改进这个数据类型。
&lt;code&gt;public&lt;/code&gt; 和 &lt;code&gt;protected&lt;/code&gt; 成员数据就是这种情况。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;例子&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
类通常会提供两类接口给用户。一类接口是提供给继承此类的子类（ &lt;code&gt;protected&lt;/code&gt;
），另一类提供给普通用户（ &lt;code&gt;public&lt;/code&gt; ）。比如，继承的类可以直接跳过运行时检查，因为继承关系已经确保运行时的数据是正确了。
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Foo&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;public&lt;/span&gt;:
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold; font-style: italic;&quot;&gt;bar&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;x&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;check&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;x&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt;; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;do_bar&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;x&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt;; &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ...&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;protected&lt;/span&gt;:
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold; font-style: italic;&quot;&gt;do_bar&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;x&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// do some operation on the data&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ...&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;private&lt;/span&gt;:
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ... data ...&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Dir&lt;/span&gt; : &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Foo&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;//...&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold; font-style: italic;&quot;&gt;mem&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;x&lt;/span&gt;, &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;y&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;
    &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;
        &lt;span style=&quot;color: #3F7F5F;&quot;&gt;/* ... do something ... */&lt;/span&gt;
        &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;do_bar&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;x &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;+&lt;/span&gt; y&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt;;
        &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// OK: derived class can bypass check&lt;/span&gt;
    &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;user&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Foo&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;x&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;r1&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; x.&lt;span style=&quot;color: #3a5fcd; font-weight: bold; font-style: italic;&quot;&gt;bar&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;      &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// OK, will check&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;r2&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; x.&lt;span style=&quot;color: #3a5fcd; font-weight: bold; font-style: italic;&quot;&gt;do_bar&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;2&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// error: would bypass check&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ...&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;
&lt;b&gt;注意&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
尽量不要用 &lt;code&gt;protected&lt;/code&gt; 级别的数据
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;注意&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
按照以下顺序排列成员变量：
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;&lt;code&gt;public&lt;/code&gt;,&lt;/li&gt;
&lt;li&gt;&lt;code&gt;protected&lt;/code&gt;,&lt;/li&gt;
&lt;li&gt;&lt;code&gt;private&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;
&lt;b&gt;强化&lt;/b&gt;
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;标记 &lt;code&gt;protected&lt;/code&gt; 数据&lt;/li&gt;
&lt;li&gt;标记 &lt;code&gt;public&lt;/code&gt; 和 &lt;code&gt;private&lt;/code&gt; 数据混合在一起的地方&lt;/li&gt;
&lt;/ul&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines C.8 如果有不公开的成员，请使用 class，不要用 struct</title>
   <link href="http://kimi.im/2022-07-30-cppcoreguidelines-c8"/>
   <updated>2022-07-30T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-c8</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
C.8: Use &lt;code&gt;class&lt;/code&gt; rather than &lt;code&gt;struct&lt;/code&gt; if any member is non-public
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;理由&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
可读性更好。清晰的标明某些东西是隐藏的抽象的。即，只要数据结构中存在隐藏或抽象的数据，就用 &lt;code&gt;class&lt;/code&gt;
&lt;/p&gt;

&lt;p&gt;
&lt;b&gt;例子&lt;/b&gt;
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-bad src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;struct&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Date&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;d&lt;/span&gt;, &lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;m&lt;/span&gt;;

    &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;Date&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;i&lt;/span&gt;, &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Month&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;m&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ... lots of functions ...&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;private&lt;/span&gt;:
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;y&lt;/span&gt;;  &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// year&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
此代码没有任何语法错误。但是从设计角度来看，错误多多。私有成员变量和其他变量在代码中的位置分离的很开。不同区域的数据有不同的访问级别。所有这些导致了可读性变差、维护变得复杂。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;注意&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
首先把接口放在类定义靠前的位置
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;强化&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
声明为 &lt;code&gt;struct&lt;/code&gt; 的类如果有 &lt;code&gt;private&lt;/code&gt; 或 &lt;code&gt;protected&lt;/code&gt; 成员，则标记警告
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines C.7 不要定义类和枚举的同时声明变量</title>
   <link href="http://kimi.im/2022-07-29-cppcoreguidelines-c7"/>
   <updated>2022-07-29T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-c7</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
C.7: Don&amp;rsquo;t define a &lt;code&gt;class&lt;/code&gt; or &lt;code&gt;enum&lt;/code&gt; and declare a variable of its type
in the same statement
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;理由&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
类型的定义和变量的声明放在一起容易令人费解。这种处理也没什么必要性。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;例子&lt;/b&gt;
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-bad src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;struct&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Data&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;/*...*/&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;data&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;/*...*/&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;
&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;
&lt;b&gt;例子&lt;/b&gt;
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;struct&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Data&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;/*...*/&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;
&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Data&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;data&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;/*...*/&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;
&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;
&lt;b&gt;强化&lt;/b&gt;
&lt;/p&gt;

&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;标记警告：类和枚举定义结尾处的&lt;code&gt;}&lt;/code&gt;后面不是 &lt;code&gt;;&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;标记警告：类和枚举定义结尾处的&lt;code&gt;}&lt;/code&gt;后面的&lt;code&gt;;&lt;/code&gt;忘写了&lt;/li&gt;
&lt;/ul&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines C.5 类的帮助函数跟类放在相同的名字空间里</title>
   <link href="http://kimi.im/2022-07-28-cppcoreguidelines-c5"/>
   <updated>2022-07-28T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-c5</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
C.5: Place helper functions in the same namespace as the class they support
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;理由&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
帮助函数（Helper Function）虽然不需要直接访问类的内部数据，但也是类的有用接口。帮助函数和类放在一个名字空间里，可以强化他们的关系，查找函数时，可以根据参数类型获取提示信息。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;例子&lt;/b&gt;
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;namespace&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Chrono&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// here we keep time-related services&lt;/span&gt;

    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Time&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;/* ... */&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Date&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;/* ... */&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;;

    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// helper functions:&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;bool&lt;/span&gt; operator&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;==&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Date&lt;/span&gt;, &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Date&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Date&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;next_weekday&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Date&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ...&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
&lt;b&gt;注意&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
此规则尤其适用于重载的操作符函数。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;强化&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
标注那些参数类型都限定在同一个名字空间的全局函数。
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>单词本：belligerently</title>
   <link href="http://kimi.im/2022-07-28-english-belligerently"/>
   <updated>2022-07-28T00:00:00+00:00</updated>
   <id>http://kimi.im/english-belligerently</id>
   <content type="html">&lt;p&gt;
昨天读了美国人写的一篇文章。文章主要是说自己国家产业竞争力不断下滑的问题。其中写到这么一句：
&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;
People often blame the economic policies of &amp;ldquo;the other side&amp;rdquo; or they
belligerently snipe at foreign competition.
&lt;/p&gt;

&lt;p&gt;
人们经常“另一边”的经济策略，或者挑衅性地抨击外国竞争。
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;
对我来说，这里有两个词是比较新的一个是 belligerently 还有一个是 snipe。
&lt;/p&gt;

&lt;p&gt;
snipe 有多个意思，作为名词，是鹬，沙锥鸟；烟屁股，香烟头；可鄙的人。作为动词是狙击、暗伤、诽谤、抨击的意思。
&lt;/p&gt;

&lt;p&gt;
本文的重点是 belligerently 这个词，意思是好战地、挑衅地。
&lt;/p&gt;

&lt;p&gt;
它的形容词形式是 belligerent。belli 战争 + ger 带来 + ent 具有…性质的，关于…的 → 带来战争 → 交战的、好战的。
&lt;/p&gt;

&lt;p&gt;
如果我们知道拉丁语里 bellum/belli 是战争的意思，就很好理解这些词语了：
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;bellicose&lt;/li&gt;
&lt;li&gt;antebellum&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
bellicose 的意思是好斗的，比如 bellicose nation 好斗的民族。
&lt;/p&gt;

&lt;p&gt;
antebellum 其实整个都是拉丁语，ante- 是之前的意思，也就是战前。尤其指美国内战前的历史。
&lt;/p&gt;

&lt;p&gt;
另外，我还想到一个词 bully 就是之前在校园霸凌新闻中常见的霸凌。如 he
was bullied by the old boys at school. 应该和 bellum 没什么关系，但是意思上有那么一点相似。
&lt;/p&gt;

&lt;p&gt;
另外，可能跟以下几个词区分下：
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;bell 铃铛&lt;/li&gt;
&lt;li&gt;belly 肚皮&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
总结一下：
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;snipe 鹬，沙锥鸟；烟屁股，香烟头；可鄙的人；狙击、暗伤、诽谤、抨击。&lt;/li&gt;
&lt;li&gt;belligerent 交战的、好战的。&lt;/li&gt;
&lt;li&gt;belligerently 好战地、挑衅地。&lt;/li&gt;
&lt;li&gt;bellicose 好斗的&lt;/li&gt;
&lt;li&gt;antebellum 战前&lt;/li&gt;
&lt;li&gt;bully 霸凌、欺凌&lt;/li&gt;
&lt;/ul&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines C.4 成员函数直接访问类的内部数据</title>
   <link href="http://kimi.im/2022-07-26-cppcoreguidelines-c4"/>
   <updated>2022-07-26T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-c4</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
C.4: Make a function a member only if it needs direct access to the
representation of a class
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;理由&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
非成员函数比成员函数耦合度更低。修改对象内部状态的函数越少越好。这类函数越少，对象内部数据结构变化了，需要修改的地方也越少。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;例子&lt;/b&gt;
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Date&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ... relatively small interface ...&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;

&lt;span style=&quot;color: #3F7F5F;&quot;&gt;// helper functions:&lt;/span&gt;
&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Date&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;next_weekday&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Date&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;bool&lt;/span&gt; operator&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;==&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Date&lt;/span&gt;, &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Date&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
&amp;ldquo;帮助函数&amp;rdquo;不需要访问 Date 的内部的数据。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;注意&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
等到C++支持函数的&lt;a href=&quot;http://kimi.im/2022-07-25-uniform-function-call&quot;&gt;统一调用格式&lt;/a&gt;的时候，这里描述的规则，会变得更恰当合适。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;例外&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
C++ 语言要求虚函数（ virtual ）必须是成员函数。然而，并非所有虚函数都直接访问对象数据。抽象类的成员函数，很少会去访问成员变量。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;例外&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
C++ 语言要求以下操作符函数为成员函数： &lt;code&gt;=&lt;/code&gt;, &lt;code&gt;()&lt;/code&gt;, &lt;code&gt;[]&lt;/code&gt;, &lt;code&gt;-&amp;gt;&lt;/code&gt;
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;例外&lt;/b&gt;
&lt;/p&gt;


&lt;p&gt;
重载的一组成员函数，不一定都会访问私有数据。比如：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Foobar&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;public&lt;/span&gt;:
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold; font-style: italic;&quot;&gt;foo&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;long&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;x&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;/* manipulate private data */&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold; font-style: italic;&quot;&gt;foo&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;double&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;x&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;foo&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;std&lt;/span&gt;::&lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;lround&lt;/span&gt;&lt;span style=&quot;color: #709870;&quot;&gt;(&lt;/span&gt;x&lt;span style=&quot;color: #709870;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt;; &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ...&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;private&lt;/span&gt;:
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ...&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;
&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;
&lt;b&gt;例外&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
同样的，有时候为了统一方便，一组函数链在一起使用：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-C++&quot;&gt;x.&lt;span style=&quot;color: #3a5fcd; font-weight: bold; font-style: italic;&quot;&gt;scale&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;0.5&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;.&lt;span style=&quot;color: #3a5fcd; font-weight: bold; font-style: italic;&quot;&gt;rotate&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;45&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;.&lt;span style=&quot;color: #3a5fcd; font-weight: bold; font-style: italic;&quot;&gt;set_color&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Color&lt;/span&gt;::red&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
这里，有些函数不一定会访问到私有数据。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;强化&lt;/b&gt;
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;找到非虚函数，但是却不会直接触碰到私有数据。&lt;/li&gt;
&lt;li&gt;忽略虚函数&lt;/li&gt;
&lt;li&gt;忽略一组重载的函数，至少其中一个会访问到私有数据&lt;/li&gt;
&lt;li&gt;忽略返回 &lt;code&gt;this&lt;/code&gt; 指针的函数&lt;/li&gt;
&lt;/ul&gt;
</content>
 </entry>
 
 <entry>
   <title>C++ 函数的统一调用格式</title>
   <link href="http://kimi.im/2022-07-25-uniform-function-call"/>
   <updated>2022-07-25T00:00:00+00:00</updated>
   <id>http://kimi.im/uniform-function-call</id>
   <content type="html">&lt;p&gt;
函数的统一调用格式（Unified Call Syntax）是 C++ 标准委员会提议的一个新的函数调用格式（WG21-P0251R0）&lt;sup&gt;&lt;a id=&quot;fnr.1&quot; class=&quot;footref&quot; href=&quot;#fn.1&quot; role=&quot;doc-backlink&quot;&gt;1&lt;/a&gt;&lt;/sup&gt;。
&lt;/p&gt;

&lt;p&gt;
假设我们以这样的方式调用一个函数 &lt;code&gt;f(x, y)&lt;/code&gt; ，而这个函数并没有定义，C++
就会尝试以 &lt;code&gt;x.f(y)&lt;/code&gt; 的方式调用一个成员函数。但是相反的情况不成立。即调用
&lt;code&gt;x.f(x)&lt;/code&gt; 的时候，找不到成员函数 &lt;code&gt;f&lt;/code&gt; ，而去调用 &lt;code&gt;f(x, y)&lt;/code&gt; 。
&lt;/p&gt;

&lt;p&gt;
P0251R0 提议中的两个例子：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;namespace&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;N&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;struct&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Y&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;k&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;()&lt;/span&gt;;
&lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;;
&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;h&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Y&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;struct&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;X&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;k&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;

&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;h&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;X&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;struct&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;S&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;X&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;x&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;
        g&lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;x&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt;; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;invoke S::g(X): (*this).g(x)&lt;/span&gt;
        h&lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;x&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt;; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;invoke ::h(X)&lt;/span&gt;
        k&lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;x&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt;; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;invoke X::k(): x.k() - &amp;#32479;&amp;#19968;&amp;#35843;&amp;#29992;&amp;#26684;&amp;#24335;&lt;/span&gt;
        ::k&lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;x&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt;; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;error: there is no global k&lt;/span&gt;
    &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;g&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;X&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;f2&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;N&lt;/span&gt;::&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Y&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;y&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;
            g&lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;y&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt;; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;invoke S::g(N::Y): (*this).g(y)&lt;/span&gt;
            h&lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;y&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt;; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;invoke S::h(N::Y); N.h() found by ADL&lt;/span&gt;
            k&lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;y&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt;; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;invoke N::Y::k(): y.k() - &amp;#32479;&amp;#19968;&amp;#35843;&amp;#29992;&amp;#26684;&amp;#24335;&lt;/span&gt;
            &lt;span style=&quot;color: #110099;&quot;&gt;N&lt;/span&gt;::k&lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;y&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt;; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;error: there is no k in namespace N&lt;/span&gt;
    &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;g&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;N&lt;/span&gt;::y&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;
&lt;/pre&gt;
&lt;/div&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;struct&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;A&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;virtual&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;h&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt;;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;static&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;k&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;A&lt;/span&gt;&amp;amp;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;struct&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;B&lt;/span&gt; : &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;A&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;
&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;B&lt;/span&gt;&amp;amp; &lt;span style=&quot;color: #000000;&quot;&gt;b&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    b.h&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt;; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;OK (as ever)&lt;/span&gt;
    h&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;b&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;OK: b.h(); - &amp;#32479;&amp;#19968;&amp;#35843;&amp;#29992;&amp;#26684;&amp;#24335;&lt;/span&gt;
    b.k&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt;; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;error (as ever)&lt;/span&gt;
    k&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;b&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;error: Try b.k(), but k() requires an argument&lt;/span&gt;
    &lt;span style=&quot;color: #110099;&quot;&gt;A&lt;/span&gt;::h&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;b&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;error: Qualified name, so no transformation to b.h()&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;&amp;#29992;&amp;#19978;&amp;#38480;&amp;#23450;&amp;#21517;&amp;#30340;&amp;#26102;&amp;#20505;&amp;#65292;&amp;#19981;&amp;#36827;&amp;#34892;&amp;#32479;&amp;#19968;&amp;#35843;&amp;#29992;&amp;#26684;&amp;#24335;&amp;#36716;&amp;#25442;&lt;/span&gt;
    &lt;span style=&quot;color: #110099;&quot;&gt;A&lt;/span&gt;::k&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;b&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;OK (as ever)&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;footnotes&quot;&gt;
&lt;h2 class=&quot;footnotes&quot;&gt;Footnotes: &lt;/h2&gt;
&lt;div id=&quot;text-footnotes&quot;&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.1&quot; class=&quot;footnum&quot; href=&quot;#fnr.1&quot; role=&quot;doc-backlink&quot;&gt;1&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot; role=&quot;doc-footnote&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0251r0.pdf&quot;&gt;https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0251r0.pdf&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;


&lt;/div&gt;
&lt;/div&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines C.3 用类区别接口与实现</title>
   <link href="http://kimi.im/2022-07-24-cppcoreguidelines-c3"/>
   <updated>2022-07-24T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-c3</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
C.3: Represent the distinction between an interface and an
implementation using a class
&lt;/p&gt;

&lt;p&gt;
&lt;b&gt;理由&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
明确区分接口和实现，提升代码可读性，简化维护复杂度。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;例子&lt;/b&gt;
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Date&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;public&lt;/span&gt;:
    &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;Date&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt;;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// validate that {yy, mm, dd} is a valid date and initialize&lt;/span&gt;
    &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;Date&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;yy&lt;/span&gt;, &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Month&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;mm&lt;/span&gt;, &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;char&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;dd&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;

    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold; font-style: italic;&quot;&gt;day&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt;;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Month&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold; font-style: italic;&quot;&gt;month&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt;;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ...&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;private&lt;/span&gt;:
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ... some representation ...&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
Date 类提供了对象初始化和数据访问的外部接口，类内部的数据结构可以有不同的实现。这样，更改内部实现，不需要用户修改代码。（可能需要重新编译）。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;注意&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
通过类的定义区分外部接口和内部实现不是唯一的方法。
&lt;/p&gt;

&lt;p&gt;
其他方法，还可以在名字空间声明一组相关的函数；抽象的基类；函数模板等。
&lt;/p&gt;

&lt;p&gt;
关键是把接口和实现区分开来。
&lt;/p&gt;

&lt;p&gt;
理想情况，接口比内部实现更稳定，不太变更。
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines C.2 如果数据结构里面有一些不变要素，用 class，如果成员变量可以互相独立修改，用 struct</title>
   <link href="http://kimi.im/2022-07-23-cppcoreguidelines-c2"/>
   <updated>2022-07-23T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-c2</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
C.2: Use class if the &lt;code&gt;class&lt;/code&gt; has an invariant; use &lt;code&gt;struct&lt;/code&gt; if the data
members can vary independently
&lt;/p&gt;

&lt;p&gt;
&lt;b&gt;理由&lt;/b&gt;
&lt;/p&gt;


&lt;p&gt;
代码更容易阅读。更容易理解。 &lt;code&gt;class&lt;/code&gt; 提醒程序员，里面用了些不变要素（ invariant ）。保持这种惯例，大有裨益。
&lt;/p&gt;

&lt;p&gt;
&lt;b&gt;注意&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
不变要素（ invariant ）指的是一个对象内部成员之间的一些逻辑约束。这些约束必须通过构造函数建立。在调用公开的成员函数的过程中，也会保持这种逻辑约束。这种不变要素可以通过注释等方式声明。也可以通过 &lt;code&gt;Expects&lt;/code&gt; 更正式地声明。
&lt;/p&gt;

&lt;p&gt;
如果所有成员数据都可以互相独立修改，那就无法维持不变要素了。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;例子&lt;/b&gt;
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;struct&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Pair&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;  &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// the members can vary independently&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;string&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;name&lt;/span&gt;;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;volume&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
然而：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Date&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;public&lt;/span&gt;:
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// validate that {yy, mm, dd} is a valid date and initialize&lt;/span&gt;
    &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;Date&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;yy&lt;/span&gt;, &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Month&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;mm&lt;/span&gt;, &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;char&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;dd&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ...&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;private&lt;/span&gt;:
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;y&lt;/span&gt;;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Month&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;m&lt;/span&gt;;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;char&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;d&lt;/span&gt;;    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// day&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;
&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;
&lt;b&gt;注意&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
如果类里面有私有数据，用户不通过构造函数就无法完全初始化此对象。所以，类的开发者要提供构造函数。这就意味着开发者需要定义一些不变要素。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;强化&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
检查可能有问题的地方：所有成员数据是私有的 &lt;code&gt;struct&lt;/code&gt; ，或者所有成员都公开的 &lt;code&gt;class&lt;/code&gt;
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>什么是 SCADA？</title>
   <link href="http://kimi.im/2022-07-21-what-is-scada-system"/>
   <updated>2022-07-21T00:00:00+00:00</updated>
   <id>http://kimi.im/what-is-scada-system</id>
   <content type="html">&lt;p&gt;
什么是 SCADA 系统？
&lt;/p&gt;

&lt;p&gt;
SCADA 是 &lt;b&gt;&lt;font color=&quot;red&quot;&gt;S&lt;/font&gt;&lt;/b&gt;upervisory
&lt;b&gt;&lt;font color=&quot;red&quot;&gt;C&lt;/font&gt;&lt;/b&gt;ontrol
&lt;b&gt;&lt;font color=&quot;red&quot;&gt;A&lt;/font&gt;&lt;/b&gt;nd &lt;b&gt;&lt;font
color=&quot;red&quot;&gt;D&lt;/font&gt;&lt;/b&gt;ata &lt;b&gt;&lt;font
color=&quot;red&quot;&gt;A&lt;/font&gt;&lt;/b&gt;cquisition 的缩写。
&lt;/p&gt;

&lt;p&gt;
SCADA 系统由硬件、软件组成。通常用来监测（Monitor）和控制（Control）本地或远程的工厂、网络和设备。
&lt;/p&gt;

&lt;p&gt;
SCADA 收集处理生产过程的实时数据，通过 HMI（Human Machine Interface）直接操作设备，本地存储工艺数据和工作事件，发送数据到服务器集中使用。
&lt;/p&gt;

&lt;p&gt;
SCADA 应用范围很广。包括电厂、水务、油气管道、食品饮料工厂、楼宇自动化、数据中心、生产车间、风电、水电、光伏等新能源电厂等。
&lt;/p&gt;


&lt;p&gt;
SCADA 有哪些子系统？
&lt;/p&gt;

&lt;p&gt;
在设备现场侧，RTU（Remote Terminal Unit）/PLC（Programmable Logic
Controller）与设备仪器通信。这些设备包括泵机（Pump）、马达（Motor）、电机（Drive）、传感器（Sensor）等。RTU/PLC 获取设备数据，控制设备执行，并转发数据到 SCADA。SCADA 发起指令，RTU/PLC 转发到相应的设备。
&lt;/p&gt;

&lt;p&gt;
SCADA 服务器对下和RTU/PLC通信，运行 HMI 后端服务，响应用户请求，存储处理数据，处理日志，生成趋势、警报报告。
&lt;/p&gt;

&lt;p&gt;
SCADA 面板主机展现 HMI，提供UI交互界面，展示警报异常情况。
&lt;/p&gt;


&lt;p&gt;
那么企业在选择 SCADA 系统的时候，需要考虑哪些因素呢？
&lt;/p&gt;

&lt;ol class=&quot;org-ol&quot;&gt;
&lt;li&gt;灵活可扩展的系统架构。灵活可扩展的 SCADA 能够可以根据实际安装使用需要，灵活配置主机、服务器、网络性能；根据工厂升级需要，无缝升级。&lt;/li&gt;
&lt;li&gt;远程监测控制。可以部署在控制机房，也可以部署到远程车间。&lt;/li&gt;
&lt;li&gt;多源数据采集。能够支持多种工业通信协议，连接不同系统。&lt;/li&gt;
&lt;li&gt;高性能的 HMI。UI 界面使用过程中，快速响应用户操作，不影响工作效率。&lt;/li&gt;
&lt;li&gt;支持高级的报警管理，能够过滤次要报警，能够在繁杂的信息中发现重要故障。&lt;/li&gt;
&lt;li&gt;与信息系统集成。传输结构化的数据到信息系统，支持实时快速的业务决策。&lt;/li&gt;
&lt;li&gt;支持移动终端。提供随时随地的访问。&lt;/li&gt;
&lt;li&gt;边缘计算大数据分析。在不同层级提供预测性分析。&lt;/li&gt;
&lt;li&gt;高效率配置。提供快速、自动、安全的配置安装工具。&lt;/li&gt;
&lt;li&gt;安全稳定。支持主流的安全技术和策略，运行稳定可靠。&lt;/li&gt;
&lt;/ol&gt;
</content>
 </entry>
 
 <entry>
   <title>什么是 RPA？</title>
   <link href="http://kimi.im/2022-07-21-what-is-rpa"/>
   <updated>2022-07-21T00:00:00+00:00</updated>
   <id>http://kimi.im/what-is-rpa</id>
   <content type="html">&lt;p&gt;
最近参观了某集团的财务共享中心，人气最旺的是 RPA（Robotic Process
Automation）机房。一台台无人值守的机器人被安全的锁在玻璃柜子里，日夜不停的处理着一个个流程请求。
&lt;/p&gt;

&lt;p&gt;
为了搞明白什么是 RPA，本文根据收集到的一些资料，梳理 RPA 的概念，工作原理和发展趋势。
&lt;/p&gt;

&lt;p&gt;
首先，我们要弄明白，什么是 RPA。
&lt;/p&gt;

&lt;p&gt;
范·德·阿斯特（van der Aalst）等人 (&lt;a href=&quot;#citeproc_bib_item_2&quot;&gt;Van der Aalst, Bichler, and Heinzl 2018&lt;/a&gt;) 定义 RPA 是一组能够通过用户图形界面操作电脑系统内其他应用软件的工具。奥维尔（Allweyer）
(&lt;a href=&quot;#citeproc_bib_item_1&quot;&gt;Allwyer 2016&lt;/a&gt;) 认为 RPA 是一种软件程序能够支持人们处理某些任务，甚至完全取代人工操作。
&lt;/p&gt;

&lt;p&gt;
RPA 的全称是 Robotic Process Automation。Robotic 跟 Robot（机器人）有一些些区别。Robotic 是 Robot 的形容词形式，意思是像机器人，类似机器人，呆板机械的。Process 指的是做事情的步骤和流程。Automation 则是自动化之意。所以，RPA 不是机器人。它是类似机器人那样机械呆板工作的软件工具。这个软件和其他软件系统通信，提取数据，处理数据，然后把数据传给其他应用软件。它可以部分或完全实现自动化的业务流程处理。
&lt;/p&gt;

&lt;p&gt;
因为 RPA 是一个软件，所以一般称之为 bot，而不是 robot。
&lt;/p&gt;

&lt;p&gt;
那么从类别来分，RPA 又分为两种：
&lt;/p&gt;
&lt;ol class=&quot;org-ol&quot;&gt;
&lt;li&gt;Desktop RPA，桌面RPA，又叫 RDA（Robotic Desktop Automation）&lt;/li&gt;
&lt;li&gt;RPA 平台&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;
桌面 RPA 其实就是完全“录制”业务操作人员的鼠标、键盘操作过程，自动重复的执行这些操作。
&lt;/p&gt;

&lt;p&gt;
而第二种 RPA 平台，则是运行在后端服务器上，直接访问各个信息系统的数据接口，自动运行设定的任务。也就是说，它不通过用户界面去和其他应用程序交互，而是直接通过数据通信或者数据库访问其他应用程序的数据，处理完成后，又直接访问另外程序的接口或数据库，写入结果。
&lt;/p&gt;

&lt;p&gt;
为了阐述两种 RPA 的区别，我们以成本分析汇总为例，描述他们不同的工作模式。
&lt;/p&gt;

&lt;p&gt;
桌面 RPA 的工作过程是打开 ERP，模拟鼠标点击，找到相关的表单，提取表单数据，导出到 Excel，再通过 Excel 公式，汇总数据，再导出另一份 Excel，导入到报表系统中。
&lt;/p&gt;

&lt;p&gt;
而 RPA 平台，则是根据写好的脚本在后台执行任务。脚本指令可以是
ReadCosts，Calculate，WriteSummary 等。
&lt;/p&gt;

&lt;p&gt;
显然， RPA 平台执行效率更高、更稳定、不易出错。而且，还可能更省电。因为桌面 RPA 需要配置多台 PC，可能还要点亮多个显示器。而 RPA 平台在后台服务器执行，根本不需要显示器显示界面。
&lt;/p&gt;

&lt;p&gt;
对于一个设计良好的 RPA 系统，应该具备以下基本能力：
&lt;/p&gt;
&lt;ol class=&quot;org-ol&quot;&gt;
&lt;li&gt;模块化。模块化指的是它的功能是分成一个个互相相对独立的组件，通过组件的组合，设计更大的功能。就好像乐高玩具，散开来是一个个不同形状的积木块，组合起来就可以搭出千奇百怪的形象。模块化的好处是每个模块可以相对独立的设计、开发、测试、验证。从而确保整体的质量。&lt;/li&gt;
&lt;li&gt;字符串处理功能。所有 RPA 都会设计字符串处理。必须有字符的搜索、过滤、拼接、识别等功能。&lt;/li&gt;
&lt;li&gt;变量处理功能。RPA 会计算一些临时数据，临时存储，在后续步骤中使用。有时候，这些数据还要进行加密保存。所以也会需要加密解谜算法库。&lt;/li&gt;
&lt;li&gt;条件分支判断。根据应用程序中抓取的数据，进行逻辑分支判断执行。有时候还需要进行循环连续处理。&lt;/li&gt;
&lt;li&gt;错误异常处理。在流程处理过程中，总是会遇到异常情况，RPA 要能及时发现异常，发出报警，要求工作人员进行干预。&lt;/li&gt;
&lt;li&gt;开发测试配套。RPA 的开发过程中，需要工程师不断调整优化执行策略，一个完善易用的开发测试配套工具是必须的。&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;
我记得几年前，在某集团研究院工作的时候，帮助下属子公司做过一些类似 RPA
平台的工作。当时他们的财务人员每个月月底都很忙，要计算生产成本，但是计算过程中，有些车间的物料、废品率等信息又没及时提交。导致计算出来的成本不精确。然后，财务人员又要一个一个去联系车间，填报数据，再重复出报表。本身出报表的过程就很繁琐，这样一来二去，财务人员就经常需要月底加班。
&lt;/p&gt;

&lt;p&gt;
那么，我做的事情是什么呢？我帮他们实现了一个自动生产报表的Web服务。只要提供数据格式和计算规则，Web服务就直接能够计算出报表。还能根据规则，指出哪些数据是有问题的，需要复核。这样，就把财务数据处理的手工工作从5
个小时，缩减到5分钟。如果和 ERP 数据对接更好的话，还能进一步提升效率。
&lt;/p&gt;

&lt;p&gt;
其实，我这个实现的Web服务，就是一个简陋版的 RPA 平台么。除了实现这个系统，我还简化程序编写逻辑，指导财务人员写代码，这样，他们可以根据自己的需要，直接开发各种财务处理 APP。这可能就是低代码系统的初级版本了。
&lt;/p&gt;

&lt;p&gt;
至于 RPA 的未来发展趋势。我觉得桌面 RPA 是一个过度态。当上下游应用之间的数据接口足够标准开放的时候，就不需要桌面 RPA 这种初级的 bot 了。通过
RPA 平台就能快速、准确、高效的完成流程处理、数据对接。
&lt;/p&gt;

&lt;p&gt;
但是，企业应用环境存在异构性，总是会有那么一些软件，互相之间无法配合。桌面 RPA 依然会有一定的市场空间。
&lt;/p&gt;

&lt;p&gt;
所以，在未来企业流程信息化中，主要还是会应用 RPA 平台，在后端服务器自动处理流程。再加上低代码开发，业务人员可以快速开发一个新 bot，加载到平台中运行。在辅助上 NLP 自然语言理解，ML 机器学习，OCR 光学字符识别，让
RPA 平台自动去发掘潜在的自动处理过程。这样，应该算是 RPA 的最终形态了吧。
&lt;/p&gt;

&lt;b&gt;参考文献&lt;/b&gt;&lt;p&gt;
&lt;style&gt;.csl-entry{text-indent: -1.5em; margin-left: 1.5em;}&lt;/style&gt;&lt;div class=&quot;csl-bib-body&quot;&gt;
  &lt;div class=&quot;csl-entry&quot;&gt;&lt;a id=&quot;citeproc_bib_item_1&quot;&gt;&lt;/a&gt;Allwyer, T. 2016. “Robotics Process Automation - New Perspectives for Process Automation.”&lt;/div&gt;
  &lt;div class=&quot;csl-entry&quot;&gt;&lt;a id=&quot;citeproc_bib_item_2&quot;&gt;&lt;/a&gt;Van der Aalst, WMP, M Bichler, and A Heinzl. 2018. “Robotic Process Automation.” &lt;i&gt;Bus Inf Sys Eng&lt;/i&gt;.&lt;/div&gt;
&lt;/div&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines C.1 把相关数据整理到数据结构中（struct/class）</title>
   <link href="http://kimi.im/2022-07-21-cppcoreguidelines-c1"/>
   <updated>2022-07-21T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-c1</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
C.1: Organize related data into structures (structs or classes)
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;理由&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
更容易理解。相关的数据，也要体现在代码中。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;例子&lt;/b&gt;
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-bad src-C++&quot;&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;// BAD: unnecessary implicit relationships&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;draw&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;x&lt;/span&gt;, &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;y&lt;/span&gt;, &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;x2&lt;/span&gt;, &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;y2&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;
&lt;/pre&gt;
&lt;/div&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-C++&quot;&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;// better&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;draw&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Point&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;from&lt;/span&gt;, &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Point&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;to&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
&lt;b&gt;注意&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
没有虚函数的简单类，不会导致多余的空间和时间开销。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;注意&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
从开发语言角度来看， &lt;code&gt;class&lt;/code&gt; 和 &lt;code&gt;struct&lt;/code&gt; 只是成员默认的可见性不一样。
&lt;code&gt;class&lt;/code&gt; 的成员默认为 &lt;code&gt;private&lt;/code&gt; ，而 &lt;code&gt;struct&lt;/code&gt; 的成员默认是 &lt;code&gt;public&lt;/code&gt; 。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;强化&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
比较难。但是可以考虑那些放在一起用的数据，是否属于同一个结构？
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines F.56 避免不必要的嵌套条件判断</title>
   <link href="http://kimi.im/2022-07-20-cppcoreguidelines-f56"/>
   <updated>2022-07-20T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-f56</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
F.56: Avoid unnecessary condition nesting
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;理由&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
浅层嵌套的代码更容易理解；代码意图更清晰。尽量把代码放在逻辑判断的最外层。不到万不得已，不用多层嵌套逻辑判断。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;例子&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
利用保卫语句（ guard-clause ），让代码早返回或早退出。
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-bad src-C++&quot;&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;// Bad: Deep nesting&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;foo&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    ...
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;x&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;
        &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;computeImportantThings&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;x&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt;;
    &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;

&lt;span style=&quot;color: #3F7F5F;&quot;&gt;// Bad: Still a redundant else.&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;foo&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    ...
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;!&lt;/span&gt;x&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;
        &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt;;
    &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;else&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;
        &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;computeImportantThings&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;x&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt;;
    &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;
&lt;b&gt;例子&lt;/b&gt;
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-C++&quot;&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;// Good: Early return, no redundant else&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;foo&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    ...
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;!&lt;/span&gt;x&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;
        &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt;;

    &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;computeImportantThings&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;x&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;
&lt;b&gt;例子&lt;/b&gt;
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-bad src-C++&quot;&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;// Bad: Unnecessary nesting of conditions&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;foo&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    ...
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;x&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;
        &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;y&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #909183;&quot;&gt;{&lt;/span&gt;
            &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;computeImportantThings&lt;/span&gt;&lt;span style=&quot;color: #709870;&quot;&gt;(&lt;/span&gt;x&lt;span style=&quot;color: #709870;&quot;&gt;)&lt;/span&gt;;
        &lt;span style=&quot;color: #909183;&quot;&gt;}&lt;/span&gt;
    &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;
&lt;b&gt;例子&lt;/b&gt;
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-C++&quot;&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;// Good: Merge conditions + return early&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;foo&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    ...
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;!&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;x &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; y&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;
        &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt;;

    &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;computeImportantThings&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;x&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;
&lt;b&gt;强化&lt;/b&gt;
&lt;/p&gt;

&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;标记多余的 else。&lt;/li&gt;
&lt;li&gt;标记函数体只是简单的通过条件语句包含了代码块。&lt;/li&gt;
&lt;/ul&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines F.55 规避 va_arg</title>
   <link href="http://kimi.im/2022-07-19-cppcoreguidelines-f55"/>
   <updated>2022-07-19T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-f55</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
F.55: Don’t use &lt;code&gt;va_arg&lt;/code&gt; arguments
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;理由&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
从&lt;code&gt;va_arg&lt;/code&gt;读取参数的时候，我们假设实际参数类型是正确设置的。传递变长参数的时候，我们假定函数会正确解析参数类型。但是两种假定都不一定可靠。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;例子&lt;/b&gt;
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-bad src-C++&quot;&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;// -*- compile-command: &quot;g++ -std=c++20 code.cpp &amp;amp;&amp;amp; ./a&quot;; -*-&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;#include&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&amp;lt;iostream&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;#include&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&amp;lt;gsl/gsl&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;#include&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&amp;lt;cstdarg&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;using&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;namespace&lt;/span&gt; std;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;using&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;namespace&lt;/span&gt; gsl;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;sum&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;cnt&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;...&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;result&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;0&lt;/span&gt;;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;va_list&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;list&lt;/span&gt;;
    &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;va_start&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;list, cnt&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;while&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;cnt &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;
        &lt;span style=&quot;color: #000000;&quot;&gt;cnt&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;--&lt;/span&gt;;
        &lt;span style=&quot;color: #000000;&quot;&gt;result&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;+=&lt;/span&gt; &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;va_arg&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;list, &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt;; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// BAD, assumes it will be passed ints&lt;/span&gt;
    &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;
    &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;va_end&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;list&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; result;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;main&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    cout &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;sum&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;2&lt;/span&gt;, &lt;span style=&quot;color: #110099;&quot;&gt;3&lt;/span&gt;, &lt;span style=&quot;color: #110099;&quot;&gt;2&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; endl; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ok&lt;/span&gt;
    cout &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;sum&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;2&lt;/span&gt;, &lt;span style=&quot;color: #110099;&quot;&gt;3.14159&lt;/span&gt;, &lt;span style=&quot;color: #110099;&quot;&gt;2.71828&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; endl; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// BAD, undefined&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;pre class=&quot;example&quot;&gt;
5
-2050589186
&lt;/pre&gt;



&lt;p&gt;
如果用C++17的折叠表达式（fold expression)对 &lt;code&gt;Args&lt;/code&gt; 进行折叠展开，就比较灵活了：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-C++&quot;&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;// -*- compile-command: &quot;g++ -std=c++20 code.cpp &amp;amp;&amp;amp; ./a&quot;; -*-&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;#include&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&amp;lt;iostream&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;#include&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&amp;lt;gsl/gsl&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;using&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;namespace&lt;/span&gt; std;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;using&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;namespace&lt;/span&gt; gsl;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;template&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;...&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Args&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;auto&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;sum&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Args&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;...&lt;/span&gt; args&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// GOOD, and much more flexible&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;...&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;+&lt;/span&gt; args&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// note: C++17 &quot;fold expression&quot;&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;main&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    cout &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;sum&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;3&lt;/span&gt;, &lt;span style=&quot;color: #110099;&quot;&gt;2&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; endl; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ok: 5&lt;/span&gt;
    cout &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;sum&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;3.14159&lt;/span&gt;, &lt;span style=&quot;color: #110099;&quot;&gt;2.71828&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; endl; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ok: ~5.85987&lt;/span&gt;
    cout &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;sum&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;1&lt;/span&gt;, &lt;span style=&quot;color: #110099;&quot;&gt;2&lt;/span&gt;, &lt;span style=&quot;color: #110099;&quot;&gt;3&lt;/span&gt;, &lt;span style=&quot;color: #110099;&quot;&gt;4.8&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; endl;
    cout &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;sum&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;string&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;hello&quot;&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt;, &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;string&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot; &quot;&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt;, &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;string&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;world&quot;&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;pre class=&quot;example&quot;&gt;
5
5.85987
10.8
hello world
&lt;/pre&gt;



&lt;p&gt;
&lt;b&gt;其他方法&lt;/b&gt;
&lt;/p&gt;

&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;重载（ overloading ）&lt;/li&gt;
&lt;li&gt;可变参数模板（variadic templates）&lt;/li&gt;
&lt;li&gt;变体参数（variant arguments）&lt;/li&gt;
&lt;li&gt;初始化列表（initializer_list）&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;
&lt;b&gt;注意&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
声明一个&lt;code&gt;...&lt;/code&gt;参数，表示接收所有参数，就可以避免写明实际多少参数，减少不必要的函数重载。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;强化&lt;/b&gt;
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;如果代码中使用了&lt;code&gt;va_list&lt;/code&gt;, &lt;code&gt;va_start&lt;/code&gt;, &lt;code&gt;va_arg&lt;/code&gt;,对其进行诊断。&lt;/li&gt;
&lt;li&gt;如果以&lt;code&gt;va_arg&lt;/code&gt;的形式传递多个参数给函数，但是没指明什么类型，考虑是否可以通过重载明确参数类型。&lt;/li&gt;
&lt;/ul&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines F.54 如果要在 lambda 里捕获 this 或成员变量，不要用 [=]</title>
   <link href="http://kimi.im/2022-07-18-cppcoreguidelines-f54"/>
   <updated>2022-07-18T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-f54</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
F.54: When writing a &lt;code&gt;lambda&lt;/code&gt; that captures &lt;code&gt;this&lt;/code&gt; or any class data
member, don&amp;rsquo;t use &lt;code&gt;[=]&lt;/code&gt; default capture
&lt;/p&gt;

&lt;p&gt;
&lt;b&gt;理由&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
违反此规则，会产生混乱不清的代码。在成员函数里用&lt;code&gt;[=]&lt;/code&gt;捕获变量，看起来好像没问题。但是其实这种方式也会捕获到隐藏的 &lt;code&gt;this&lt;/code&gt; 指针。而通过 &lt;code&gt;this&lt;/code&gt; 指针是可以修改对象成员变量的。如果你通过 &lt;code&gt;this&lt;/code&gt; 修改了对象成员变量，就相当于是进行了引用捕获。所以写代码的时候最好更明确一些。
&lt;/p&gt;

&lt;p&gt;
&lt;b&gt;例子&lt;/b&gt;
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-C++&quot;&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;// -*- compile-command: &quot;g++ -std=c++20 code.cpp &amp;amp;&amp;amp; ./a&quot;; -*-&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;#include&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&amp;lt;iostream&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;#include&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&amp;lt;gsl/gsl&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;using&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;namespace&lt;/span&gt; std;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;using&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;namespace&lt;/span&gt; gsl;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;My_class&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;x&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;0&lt;/span&gt;;

    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold; font-style: italic;&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt;
    &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;
        &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;i&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;0&lt;/span&gt;;
        &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ...&lt;/span&gt;

        &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;auto&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;lambda&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #909183;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;]&lt;/span&gt; &lt;span style=&quot;color: #909183;&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;use&lt;/span&gt;&lt;span style=&quot;color: #709870;&quot;&gt;(&lt;/span&gt;i, x&lt;span style=&quot;color: #709870;&quot;&gt;)&lt;/span&gt;; &lt;span style=&quot;color: #909183;&quot;&gt;}&lt;/span&gt;;
        &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// BAD: &quot;looks like&quot; copy/value capture&lt;/span&gt;
        &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// [&amp;amp;] has identical semantics and copies the this pointer&lt;/span&gt;
        &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// under the current rules&lt;/span&gt;
        &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// [=,this] and [&amp;amp;,this] are not much better, and confusing&lt;/span&gt;

        &lt;span style=&quot;color: #000000;&quot;&gt;x&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;42&lt;/span&gt;;
        &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;lambda&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;()&lt;/span&gt;; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// calls use(0, 42);&lt;/span&gt;
        &lt;span style=&quot;color: #000000;&quot;&gt;x&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;43&lt;/span&gt;;
        &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;lambda&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;()&lt;/span&gt;; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// calls use(0, 43);&lt;/span&gt;

        &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ...&lt;/span&gt;

        &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;auto&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;lambda2&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #909183;&quot;&gt;[&lt;/span&gt;i, &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;this&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;]&lt;/span&gt; &lt;span style=&quot;color: #909183;&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;use&lt;/span&gt;&lt;span style=&quot;color: #709870;&quot;&gt;(&lt;/span&gt;i, x&lt;span style=&quot;color: #709870;&quot;&gt;)&lt;/span&gt;; &lt;span style=&quot;color: #909183;&quot;&gt;}&lt;/span&gt;;
        &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ok, most explicit and least confusing&lt;/span&gt;

        &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ...&lt;/span&gt;
    &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;
&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;
&lt;b&gt;注意&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
如果想要捕获成员数据的副本，可以考虑C++17的 &lt;code&gt;[*this]&lt;/code&gt; 
&lt;/p&gt;

&lt;p&gt;
&lt;b&gt;强化&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
如果 &lt;code&gt;lambda&lt;/code&gt; 用了默认捕获，且可能会捕获到 &lt;code&gt;this&lt;/code&gt; 指针。给代码打上一个警告标记。
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines F.60 如果参数可以是空的话， T* 比 T& 更合适</title>
   <link href="http://kimi.im/2022-07-12-cppcoreguidelines-f60"/>
   <updated>2022-07-12T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-f60</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
F.60: Prefer &lt;code&gt;T*&lt;/code&gt; over &lt;code&gt;T&amp;amp;&lt;/code&gt; when &amp;ldquo;no argument&amp;rdquo; is a valid option
&lt;/p&gt;

&lt;p&gt;
&lt;b&gt;理由&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
指针（T*）可以是 &lt;code&gt;nullptr&lt;/code&gt; 而引用（T&amp;amp;）不可以。没有空引用这一说。有时
&lt;code&gt;nullptr&lt;/code&gt; 是有效参数，表示“无对象”。除了这种情况，最好都用引用。因为用引用代码更好更简单。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;例子&lt;/b&gt;
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;#include&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&amp;lt;gsl/gsl&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;using&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;namespace&lt;/span&gt; gsl;
&lt;span style=&quot;color: #3F7F5F;&quot;&gt;// zstring is a char*; that is a C-style string&lt;/span&gt;
&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;string&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;zstring_to_string&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;zstring&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;lt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;p&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// p might be nullptr; remember to check&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;!&lt;/span&gt;p&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;string&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;{}&lt;/span&gt;;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;string&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;p&lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;print&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;vector&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;r&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// r refers to a vector&amp;lt;int&amp;gt;; no check needed&lt;/span&gt;
    &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;for_each&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;begin&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;r&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt;, &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;end&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;r&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt;, &lt;span style=&quot;color: #909183;&quot;&gt;[](&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;x&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;){&lt;/span&gt;cout &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; x;&lt;span style=&quot;color: #909183;&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;main&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;auto&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;ss&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;zstring&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;lt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;abc&quot;&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
    cout &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;zstring_to_string&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;ss&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; endl;
    &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;print&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;vector&lt;/span&gt;&lt;span style=&quot;color: #909183; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #909183; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;{}&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
    &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;print&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;vector&lt;/span&gt;&lt;span style=&quot;color: #909183; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #909183; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;1&lt;/span&gt;,&lt;span style=&quot;color: #110099;&quot;&gt;2&lt;/span&gt;,&lt;span style=&quot;color: #110099;&quot;&gt;3&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;0&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;pre class=&quot;example&quot;&gt;
abc
123
&lt;/pre&gt;



&lt;p&gt;
&lt;b&gt;注意&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
可以在C++编造出一个空指针 &lt;code&gt;nullptr&lt;/code&gt; 的引用。这种错误很少见。
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;*&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;p&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #110099; font-weight: bold;&quot;&gt;nullptr&lt;/span&gt;;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;pp&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;*&lt;/span&gt;p;
cout &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; p;
&lt;/pre&gt;
&lt;/div&gt;

&lt;pre class=&quot;example&quot;&gt;
0
&lt;/pre&gt;


&lt;p&gt;
如果你更喜欢指针操作（&lt;code&gt;-&amp;gt;&lt;/code&gt;和 &lt;code&gt;*&lt;/code&gt; ），&lt;code&gt;not_null&amp;lt;T*&amp;gt;&lt;/code&gt;可以提供类似&lt;code&gt;T&amp;amp;&lt;/code&gt;那样的保障。
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>什么是 SOA</title>
   <link href="http://kimi.im/2022-07-11-what-is-soa"/>
   <updated>2022-07-11T00:00:00+00:00</updated>
   <id>http://kimi.im/what-is-soa</id>
   <content type="html">&lt;p&gt;
面向服务架构（SOA）是一种架构设计模式，包含多个服务，而服务之间互相配合提供一系列功能。
&lt;/p&gt;

&lt;p&gt;
服务的最基本机制就是“问/答”（Request/Response）形式。我提出问题，你给我答案。对“我”来说，“你”就是服务的提供方。SOA 应用的基本形式就是应用程序向不同的服务提出请求，得到答案，根据这些答案，组合成一个想要的结果。
&lt;/p&gt;

&lt;p&gt;
SOA的底层逻辑是为了实现松耦合（Loose Coupling）。松耦合系统中的各个模块互相独立，每个服务对于其他服务来说，就好像是一个黑盒子。使用服务的时候，只要关心提供的服务是什么，而不用关心内部的工作机制。
&lt;/p&gt;

&lt;p&gt;
在程序开发中，这种松耦合的黑盒子，最原始的实现方式就是写一个函数。把经常重复使用的代码段，封装成一个个的函数，取一个有意义的函数名，就可以在不同地方调用。
&lt;/p&gt;

&lt;p&gt;
比如，已知三角形的三条边长度，就可以通过海伦-秦九韶公式计算三角形的面积。如果不写成函数的话，就要这样算：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;-*- compile-command: &quot;g++ -std=c++20 code.cpp &amp;amp;&amp;amp; ./a&quot;; -*-&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;#include&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #2A00FF;&quot;&gt;iostream&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;#include&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #2A00FF;&quot;&gt;cmath&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;using&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;namespace&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;std&lt;/span&gt;;
&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;main&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;double&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;a&lt;/span&gt; = 10;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;double&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;b&lt;/span&gt; = 15;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;double&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;c&lt;/span&gt; = 18;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;double&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;p&lt;/span&gt; = &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;a + b + c&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; / 2;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;double&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;S&lt;/span&gt; = sqrt&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;p-a&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt;*&lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;p-b&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt;*&lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;p-c&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt;*p&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
    cout &amp;lt;&amp;lt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;&amp;#19977;&amp;#35282;&amp;#24418;&amp;#19977;&amp;#26465;&amp;#36793;&amp;#20026;&amp;#65306;&quot;&lt;/span&gt; &amp;lt;&amp;lt; a &amp;lt;&amp;lt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;, &quot;&lt;/span&gt; &amp;lt;&amp;lt; b &amp;lt;&amp;lt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;, &quot;&lt;/span&gt; &amp;lt;&amp;lt; c &amp;lt;&amp;lt; endl;
    cout &amp;lt;&amp;lt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;&amp;#19977;&amp;#35282;&amp;#24418;&amp;#30340;&amp;#38754;&amp;#31215;&amp;#20026;&amp;#65306;&quot;&lt;/span&gt; &amp;lt;&amp;lt; S &amp;lt;&amp;lt; endl;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;pre class=&quot;example&quot;&gt;
三角形三条边为：10, 15, 18
三角形的面积为：74.9996
&lt;/pre&gt;


&lt;p&gt;
如果把计算面积的过程写成函数，就可以多次函数，不易出错，代码更精简。
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;-*- compile-command: &quot;g++ -std=c++20 code.cpp &amp;amp;&amp;amp; ./a&quot;; -*-&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;#include&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #2A00FF;&quot;&gt;iostream&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;#include&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #2A00FF;&quot;&gt;cmath&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;using&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;namespace&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;std&lt;/span&gt;;
&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;double&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;area&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;double&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;a&lt;/span&gt;, &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;double&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;b&lt;/span&gt;, &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;double&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;c&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;double&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;p&lt;/span&gt; = &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;a + b + c&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; / 2;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;double&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;S&lt;/span&gt; = sqrt&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;p-a&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt;*&lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;p-b&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt;*&lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;p-c&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt;*p&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
    cout &amp;lt;&amp;lt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;&amp;#19977;&amp;#35282;&amp;#24418;&amp;#19977;&amp;#26465;&amp;#36793;&amp;#20026;&amp;#65306;&quot;&lt;/span&gt; &amp;lt;&amp;lt; a &amp;lt;&amp;lt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;, &quot;&lt;/span&gt; &amp;lt;&amp;lt; b &amp;lt;&amp;lt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;, &quot;&lt;/span&gt; &amp;lt;&amp;lt; c &amp;lt;&amp;lt; endl;
    cout &amp;lt;&amp;lt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;&amp;#19977;&amp;#35282;&amp;#24418;&amp;#30340;&amp;#38754;&amp;#31215;&amp;#20026;&amp;#65306;&quot;&lt;/span&gt; &amp;lt;&amp;lt; S &amp;lt;&amp;lt; endl;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; S;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;main&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    area&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;11, 12, 13&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
    area&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;11, 12, 14&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;pre class=&quot;example&quot;&gt;
三角形三条边为：11, 12, 13
三角形的面积为：61.4817
三角形三条边为：11, 12, 14
三角形的面积为：63.7059
&lt;/pre&gt;


&lt;p&gt;
但是，用函数封装服务，并不灵活，如果函数逻辑修改了，所有用到的代码都得重新编译一遍。所以，人们又想出来编译模块、动态库等方法。
&lt;/p&gt;

&lt;p&gt;
然而服务和模块、程序库的区别在于服务与服务之间是互相独立的，通过网络调用的方式进行通信。不同的服务可以运行在不同平台上，用不同的开发语言开发。
&lt;/p&gt;

&lt;p&gt;
这就好像电动汽车里的动力电池。模块就好像是电池模组，服务就好像是电池
Pack。电池模组是整个电池Pack的组成单元，无法独立运作，而电池Pack就是一个完整的产品，能够为电动汽车提供强劲动力。
&lt;/p&gt;

&lt;p&gt;
尽管服务之间是互相独立的，但是服务之间的通信方式必须统一，这种统一的通信机制，就是企业服务总线（Enterprise Service Bus，ESB）。ESB 的通信方式有 SOAP、REST、RPC 等。其中 SOAP 就是服务间通过 HTTP+XML 的形式完成数据交换，REST 就是HTTP+JSON 的形式，RPC 是基于 Socket 的形式。Apache
CXF 框架就是 SOAP+REST 框架，Dubbo 是 RPC 框架，而 SpringCloud 是遵守
REST 规范的微服务生态系统。
&lt;/p&gt;

&lt;p&gt;
为了找到特定的服务，SOA ESB 还需要提供服务注册和服务发现功能，新的服务通过服务注册到系统，应用程序就可以通过服务发现找到需要的服务，调用接口实现功能。
&lt;/p&gt;

&lt;p&gt;
总结下 SOA 的优势：
&lt;/p&gt;
&lt;ol class=&quot;org-ol&quot;&gt;
&lt;li&gt;重用性。服务和服务之间是松耦合的，所以每个服务可以用于不同的应用场景而不会互相干扰。&lt;/li&gt;
&lt;li&gt;多平台。服务之间松耦合，只要服务之间ESB通讯的接口明确，服务内部的实现就可以更具实际情况选择，可以是不同的操作系统，不同的开发语言。&lt;/li&gt;
&lt;li&gt;易维护。部分服务可以临时停下来维护，整个应用可以持续运行。&lt;/li&gt;
&lt;li&gt;可靠性。服务之间互相独立，某个服务出问题不会影响其他服务。&lt;/li&gt;
&lt;li&gt;易测试。每个服务可以单独进行测试，确保了整个系统有比较好的运行基础。&lt;/li&gt;
&lt;li&gt;开发快。因为很多服务可以重用，开发一个新应用只要调用已有的服务。&lt;/li&gt;
&lt;/ol&gt;


&lt;p&gt;
SOA 也有一些缺点：
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;因为太多的服务调用，可能带来一些性能损耗&lt;/li&gt;
&lt;li&gt;每个服务需要明确的文件定义，有些繁琐&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;
另外，既然要了解 SOA，还得过一下所谓的 SOA 宣言：
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;Business value over technical strategy &lt;br /&gt;
业务价值高于技术策略&lt;/li&gt;
&lt;li&gt;Strategic goals over project-specific benefits &lt;br /&gt;
战略目标高于项目收益&lt;/li&gt;
&lt;li&gt;Intrinsic interoperability over custom integration &lt;br /&gt;
固有的互操作高于相应客户的集成&lt;/li&gt;
&lt;li&gt;Shared services over purpose-specific implementations &lt;br /&gt;
共享的服务高于非标实现&lt;/li&gt;
&lt;li&gt;Flexibility over optimization &lt;br /&gt;
灵活性高于性能调优&lt;/li&gt;
&lt;li&gt;Evolutionary refinement over pursuit of initial perfection &lt;br /&gt;
持续改进高于一开始就追求完美&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
总结一下：
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;SOA 是基于服务和 ESB 的应用开发架构&lt;/li&gt;
&lt;li&gt;遵循三个原则：松耦合、迟绑定和服务发现&lt;/li&gt;
&lt;li&gt;SOA有高重用性、多平台开发、易维护、高可靠、易测试、开发快等优势&lt;/li&gt;
&lt;li&gt;SOA的缺点是性能损耗、实现略复杂&lt;/li&gt;
&lt;/ul&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines F.53 如果不在 lambda 内局部使用，包括返回、存入堆、传给其他线程，则不要在 lambda 中捕获引用</title>
   <link href="http://kimi.im/2022-07-11-cppcoreguidelines-f53"/>
   <updated>2022-07-11T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-f53</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
F.53: Avoid capturing by reference in lambdas that will be used
non-locally, including returned, stored on the heap, or passed to
another thread
&lt;/p&gt;

&lt;p&gt;
&lt;b&gt;理由&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
局部的指针和引用，不可以超出其范围而存在。 &lt;code&gt;lambda&lt;/code&gt; 的通过引用捕获只是在另一个地方存放指向局部对象的引用，不可以超出其范围而存在。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;例子&lt;/b&gt;
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-bad src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;local&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;42&lt;/span&gt;;

&lt;span style=&quot;color: #3F7F5F;&quot;&gt;// Want a reference to local.&lt;/span&gt;
&lt;span style=&quot;color: #3F7F5F;&quot;&gt;// Note, that after program exits this scope,&lt;/span&gt;
&lt;span style=&quot;color: #3F7F5F;&quot;&gt;// local no longer exists, therefore&lt;/span&gt;
&lt;span style=&quot;color: #3F7F5F;&quot;&gt;// process() call will have undefined behavior!&lt;/span&gt;
thread_pool.&lt;span style=&quot;color: #3a5fcd; font-weight: bold; font-style: italic;&quot;&gt;queue_work&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;]&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;process&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;local&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt;; &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;
&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;
&lt;b&gt;例子&lt;/b&gt;
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;local&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;42&lt;/span&gt;;
&lt;span style=&quot;color: #3F7F5F;&quot;&gt;// Want a copy of local.&lt;/span&gt;
&lt;span style=&quot;color: #3F7F5F;&quot;&gt;// Since a copy of local is made, it will&lt;/span&gt;
&lt;span style=&quot;color: #3F7F5F;&quot;&gt;// always be available for the call.&lt;/span&gt;
thread_pool.&lt;span style=&quot;color: #3a5fcd; font-weight: bold; font-style: italic;&quot;&gt;queue_work&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;]&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;process&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;local&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt;; &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;
&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;
&lt;b&gt;注意&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
如果一定要捕获一个非局部的指针，可以考虑用&lt;code&gt;unique_ptr&lt;/code&gt;，这样就确保了同步和生存周期问题。如果一定要捕获 &lt;code&gt;this&lt;/code&gt; 指针，可以使用&lt;code&gt;[*this]&lt;/code&gt;捕获，这样会产生整个对象的一个副本。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;强化&lt;/b&gt;
&lt;/p&gt;

&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;（简单）如果 &lt;code&gt;lambda&lt;/code&gt; 的捕获列表里有局部的变量的引用，则产生一个警告。&lt;/li&gt;
&lt;li&gt;（复杂）如果捕获列表里有指向局部变量的引用，且该 &lt;code&gt;lambda&lt;/code&gt; 又会传递给一个不是常值的，且不是本地的地方，则高亮标记。&lt;/li&gt;
&lt;/ul&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines F.52 在 lambda 中捕获引用，可局部使用，或传给 STL 算法</title>
   <link href="http://kimi.im/2022-07-11-cppcoreguidelines-f52"/>
   <updated>2022-07-11T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-f52</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
F.52: Prefer capturing by reference in lambdas that will be used locally, including passed to algorithms
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;理由&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
为了保障效率和正确，一般会在 &lt;code&gt;lambda&lt;/code&gt; 中以引用的形式捕获变量，在 &lt;code&gt;lambda&lt;/code&gt;
内局部使用。尤其是编写和调用并行算法时，因为在函数返回时会 &lt;code&gt;join&lt;/code&gt; ，捕获了的变量可以在局部进行使用。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;讨论&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
效率性方面，因为对大部分类型来说，引用传参比值传参效率高。
&lt;/p&gt;

&lt;p&gt;
正确性方面，因为不少函数调用会修改对象，产生一些副作用，值传参无法做到。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;注意&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
&lt;code&gt;lambda&lt;/code&gt; 不能以 &lt;code&gt;const&lt;/code&gt; 引用的方式捕获外部变量。所以也就无法避免在 &lt;code&gt;lambda&lt;/code&gt;
内会产生副作用。
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-C++&quot;&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;// -*- compile-command: &quot;g++ -std=c++20 code.cpp &amp;amp;&amp;amp; ./a&quot;; -*-&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;#include&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&amp;lt;iostream&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;#include&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&amp;lt;gsl/gsl&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;using&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;namespace&lt;/span&gt; std;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;using&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;namespace&lt;/span&gt; gsl;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;main&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;age&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;10&lt;/span&gt;;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;auto&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;update&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;]()&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt; cout &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;update: &quot;&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;++&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;age&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; endl; &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;;
    &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;update&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt;;
    cout &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;now:    &quot;&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; age &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; endl;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;pre class=&quot;example&quot;&gt;
update: 11
now:    11
&lt;/pre&gt;



&lt;p&gt;
以下我们假设 message 是一个很大的网络消息对象，需要传递给迭代算法。如果每次调用都以复制的方式传递，效率不高，且不一定可行，因为消息对象不一定提供复制构造函数。
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-C++&quot;&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;std&lt;/span&gt;::&lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;for_each&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;begin&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;sockets&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;, &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;end&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;sockets&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;, &lt;span style=&quot;color: #7388d6;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt;message&lt;span style=&quot;color: #7388d6;&quot;&gt;](&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;auto&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;socket&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;
&lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;
    socket.&lt;span style=&quot;color: #3a5fcd; font-weight: bold; font-style: italic;&quot;&gt;send&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;message&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt;;
&lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;
&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;
&lt;b&gt;例子&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
以下是一个三个阶段执行的并行流水线。每个阶段对象封装了一个工作线程和一个队列。其析构函数会自动等待队列为空才执行。
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;send_packets&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;buffers&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;bufs&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;stage&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;encryptor&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;[](&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;buffer&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;b&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #909183;&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;encrypt&lt;/span&gt;&lt;span style=&quot;color: #709870;&quot;&gt;(&lt;/span&gt;b&lt;span style=&quot;color: #709870;&quot;&gt;)&lt;/span&gt;; &lt;span style=&quot;color: #909183;&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;stage&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;compressor&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;](&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;buffer&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;b&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #909183;&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;compress&lt;/span&gt;&lt;span style=&quot;color: #709870;&quot;&gt;(&lt;/span&gt;b&lt;span style=&quot;color: #709870;&quot;&gt;)&lt;/span&gt;; encryptor.&lt;span style=&quot;color: #3a5fcd; font-weight: bold; font-style: italic;&quot;&gt;process&lt;/span&gt;&lt;span style=&quot;color: #709870;&quot;&gt;(&lt;/span&gt;b&lt;span style=&quot;color: #709870;&quot;&gt;)&lt;/span&gt;; &lt;span style=&quot;color: #909183;&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;stage&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;decorator&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;](&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;buffer&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;b&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #909183;&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;decorate&lt;/span&gt;&lt;span style=&quot;color: #709870;&quot;&gt;(&lt;/span&gt;b&lt;span style=&quot;color: #709870;&quot;&gt;)&lt;/span&gt;; compressor.&lt;span style=&quot;color: #3a5fcd; font-weight: bold; font-style: italic;&quot;&gt;process&lt;/span&gt;&lt;span style=&quot;color: #709870;&quot;&gt;(&lt;/span&gt;b&lt;span style=&quot;color: #709870;&quot;&gt;)&lt;/span&gt;; &lt;span style=&quot;color: #909183;&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;for&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;auto&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt; b : bufs&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt; decorator.&lt;span style=&quot;color: #3a5fcd; font-weight: bold; font-style: italic;&quot;&gt;process&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;b&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt;; &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;  &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// automatically blocks waiting for pipeline to finish&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;
&lt;b&gt;强化&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
警告：如果 &lt;code&gt;lambda&lt;/code&gt; 捕获了外部变量的引用，但是在函数作用域外使用。
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>EUROMAP 77：注塑机和 MES 之间的标准通信</title>
   <link href="http://kimi.im/2022-07-09-euromap77"/>
   <updated>2022-07-09T00:00:00+00:00</updated>
   <id>http://kimi.im/euromap77</id>
   <content type="html">&lt;p&gt;
注塑机又名注射成型机或注射机。其主要工作原理了就是把塑料原料加热融化施加高压注射到模具里面，冷却后，就做成塑料制品了。
&lt;/p&gt;

&lt;p&gt;
注塑机是塑料机械的重要分支，产值占比约为 40%，是中国塑料机械行业产量最大、产值最高、出口最多的第一大类产品。
&lt;/p&gt;

&lt;p&gt;
注塑机结构复杂，主要由注射装置（推动熔融塑料进入模具并防止逆流）、合模装置（提供锁模力并实现模具的开合）、驱动装置（全电动、液压、电液混合）和控制系统四部分构成，工作过程包括合模、注射、保压、冷却塑化、开模、脱模等。注塑机生产的塑料产品可应用于汽车、家用电器、3C 产品、饮料包装、建材等领域。
&lt;/p&gt;

&lt;p&gt;
注塑机可根据物料塑化方式、注射与合模装置排列方式、锁模力大小、动力来源四种分类方法进行分类。
&lt;/p&gt;

&lt;p&gt;
注塑机按照物料塑化方式分类，有螺杆式注塑机、柱塞式注塑机。
&lt;/p&gt;

&lt;p&gt;
按照注射合模装置排列方式分类，有卧式注塑机、立式注塑机、角式注塑机。
&lt;/p&gt;

&lt;p&gt;
按照锁模力大小分类，有锁模力大于5000kN的大型注塑机、介于1000-5000kN的中型注塑机、小于1000kN的小型注塑机。
&lt;/p&gt;

&lt;p&gt;
按照动力来源，分为老式手动、液压、气动、电动。
&lt;/p&gt;

&lt;p&gt;
欧洲的塑料与橡胶机械行业发展比较早，有个叫欧洲的塑料与橡胶机械协会
EUROMAP成立在1964年就成立了。协会成员的产品覆盖了全球范围40%的产量。为了推进产品的标准化，成员企业的技术人员共同参与制定塑料工业行业设备互联互通的标准信息模型与接口，目前发布了大量塑料工业的连接标准：
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;EUROMAP 67：注塑机与机械臂通信协议&lt;/li&gt;
&lt;li&gt;EUROMAP 77：注塑机与生产执行系统（MES）间的通信协议&lt;/li&gt;
&lt;li&gt;EUROMAP 79：注塑机与机器人通信协议&lt;/li&gt;
&lt;li&gt;EUROMAP 82.1：注塑机和温度控制设备通信协议&lt;/li&gt;
&lt;li&gt;EUROMAP 82.2：注塑机和热流道设备（Hot Runner Device）通信协议&lt;/li&gt;
&lt;li&gt;EUROMAP 82.3：注塑机和液态硅胶喷射计量系统（Liquid Silicone Rubber
Dosing System）通信协议&lt;/li&gt;
&lt;li&gt;EUROMAP 83：基于 OPC UA 的，塑料与橡胶行业机器通用类型的定义&lt;/li&gt;
&lt;li&gt;EUROMAP 84：挤出机（Extrusion）信息模型&lt;/li&gt;
&lt;li&gt;EUROMAP 90：能源管理协议&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
可以看出，目前 EUROMAP 的通信协议标准有一些是电气形式的，有一些已经采用了工业4.0的标准。这正反应了注塑机行业向大型化、电动化、智能化方向发展的趋势。注塑机作为高端制造业的重要组成部分，为实现高效、精确、节能的目标，智能化将成为注塑机发展的新方向。当前，设备单元的自动控制、参数的闭环控制、过程联运在线反馈控制等电子与计算机技术已在注塑机上得到了广泛应用，未来开放式、模块化控制技术等将会在注塑机上得到更多应用。
&lt;/p&gt;

&lt;p&gt;
就拿 EUROMAP 67 来说，它仅仅定义了注塑机和机械臂之间通信的电气。这种方式有很多限制：信号数量少、缺少扩展性、不灵活。
&lt;/p&gt;

&lt;div align=&quot;center&quot;&gt;
&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;
&lt;!-- Created with Inkscape (http://www.inkscape.org/) --&gt;

&lt;svg
   width=&quot;171.46556mm&quot;
   height=&quot;129.59605mm&quot;
   viewBox=&quot;0 0 171.46556 129.59605&quot;
   version=&quot;1.1&quot;
   id=&quot;svg5476&quot;
   inkscape:version=&quot;1.1.2 (b8e25be833, 2022-02-05)&quot;
   sodipodi:docname=&quot;euromap77.svg&quot;
   xmlns:inkscape=&quot;http://www.inkscape.org/namespaces/inkscape&quot;
   xmlns:sodipodi=&quot;http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd&quot;
   xmlns=&quot;http://www.w3.org/2000/svg&quot;
   xmlns:svg=&quot;http://www.w3.org/2000/svg&quot;&gt;
  &lt;sodipodi:namedview
     id=&quot;namedview5478&quot;
     pagecolor=&quot;#ffffff&quot;
     bordercolor=&quot;#666666&quot;
     borderopacity=&quot;1.0&quot;
     inkscape:pageshadow=&quot;2&quot;
     inkscape:pageopacity=&quot;0.0&quot;
     inkscape:pagecheckerboard=&quot;0&quot;
     inkscape:document-units=&quot;mm&quot;
     showgrid=&quot;false&quot;
     fit-margin-top=&quot;0&quot;
     fit-margin-left=&quot;0&quot;
     fit-margin-right=&quot;0&quot;
     fit-margin-bottom=&quot;0&quot;
     inkscape:zoom=&quot;3.6748804&quot;
     inkscape:cx=&quot;324.09218&quot;
     inkscape:cy=&quot;244.90593&quot;
     inkscape:window-width=&quot;3840&quot;
     inkscape:window-height=&quot;2080&quot;
     inkscape:window-x=&quot;-11&quot;
     inkscape:window-y=&quot;-11&quot;
     inkscape:window-maximized=&quot;1&quot;
     inkscape:current-layer=&quot;g116&quot; /&gt;
  &lt;defs
     id=&quot;defs5473&quot;&gt;
    &lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath120&quot;&gt;
      &lt;path
         d=&quot;M 0,0 H 595.32 V 842.04 H 0 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path118&quot; /&gt;
    &lt;/clipPath&gt;
    &lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath130&quot;&gt;
      &lt;path
         d=&quot;M 0,0 H 1070.99 V 813.75 H 0 Z&quot;
         id=&quot;path128&quot; /&gt;
    &lt;/clipPath&gt;
    &lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath144&quot;&gt;
      &lt;path
         d=&quot;M 1.5959e-5,-6.1035e-5 H 1071 V 813.74994 H 1.5959e-5 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path142&quot; /&gt;
    &lt;/clipPath&gt;
    &lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath162&quot;&gt;
      &lt;path
         d=&quot;M 1.5959e-5,-6.1035e-5 H 1071 V 813.74994 H 1.5959e-5 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path160&quot; /&gt;
    &lt;/clipPath&gt;
    &lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath182&quot;&gt;
      &lt;path
         d=&quot;M 1.5959e-5,-6.1035e-5 H 1071 V 813.74994 H 1.5959e-5 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path180&quot; /&gt;
    &lt;/clipPath&gt;
    &lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath204&quot;&gt;
      &lt;path
         d=&quot;M 1.5959e-5,-6.1035e-5 H 1071 V 813.74994 H 1.5959e-5 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path202&quot; /&gt;
    &lt;/clipPath&gt;
    &lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath224&quot;&gt;
      &lt;path
         d=&quot;M 1.5959e-5,-6.1035e-5 H 1071 V 813.74994 H 1.5959e-5 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path222&quot; /&gt;
    &lt;/clipPath&gt;
    &lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath246&quot;&gt;
      &lt;path
         d=&quot;M 1.5959e-5,-6.1035e-5 H 1071 V 813.74994 H 1.5959e-5 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path244&quot; /&gt;
    &lt;/clipPath&gt;
    &lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath266&quot;&gt;
      &lt;path
         d=&quot;M 1.5959e-5,-6.1035e-5 H 1071 V 813.74994 H 1.5959e-5 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path264&quot; /&gt;
    &lt;/clipPath&gt;
    &lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath288&quot;&gt;
      &lt;path
         d=&quot;M 1.5959e-5,-6.1035e-5 H 1071 V 813.74994 H 1.5959e-5 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path286&quot; /&gt;
    &lt;/clipPath&gt;
    &lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath308&quot;&gt;
      &lt;path
         d=&quot;M 1.5959e-5,-6.1035e-5 H 1071 V 813.74994 H 1.5959e-5 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path306&quot; /&gt;
    &lt;/clipPath&gt;
    &lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath330&quot;&gt;
      &lt;path
         d=&quot;M 1.5959e-5,-6.1035e-5 H 1071 V 813.74994 H 1.5959e-5 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path328&quot; /&gt;
    &lt;/clipPath&gt;
    &lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath350&quot;&gt;
      &lt;path
         d=&quot;M 1.5959e-5,-6.1035e-5 H 1071 V 813.74994 H 1.5959e-5 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path348&quot; /&gt;
    &lt;/clipPath&gt;
    &lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath372&quot;&gt;
      &lt;path
         d=&quot;M 1.5959e-5,-6.1035e-5 H 1071 V 813.74994 H 1.5959e-5 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path370&quot; /&gt;
    &lt;/clipPath&gt;
    &lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath392&quot;&gt;
      &lt;path
         d=&quot;M 1.5959e-5,-6.1035e-5 H 1071 V 813.74994 H 1.5959e-5 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path390&quot; /&gt;
    &lt;/clipPath&gt;
    &lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath414&quot;&gt;
      &lt;path
         d=&quot;M 1.5959e-5,-6.1035e-5 H 1071 V 813.74994 H 1.5959e-5 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path412&quot; /&gt;
    &lt;/clipPath&gt;
    &lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath434&quot;&gt;
      &lt;path
         d=&quot;M 1.5959e-5,-6.1035e-5 H 1071 V 813.74994 H 1.5959e-5 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path432&quot; /&gt;
    &lt;/clipPath&gt;
    &lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath456&quot;&gt;
      &lt;path
         d=&quot;M 1.5959e-5,-6.1035e-5 H 1071 V 813.74994 H 1.5959e-5 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path454&quot; /&gt;
    &lt;/clipPath&gt;
    &lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath476&quot;&gt;
      &lt;path
         d=&quot;M 1.5959e-5,-6.1035e-5 H 1071 V 813.74994 H 1.5959e-5 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path474&quot; /&gt;
    &lt;/clipPath&gt;
    &lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath498&quot;&gt;
      &lt;path
         d=&quot;M 1.5959e-5,-6.1035e-5 H 1071 V 813.74994 H 1.5959e-5 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path496&quot; /&gt;
    &lt;/clipPath&gt;
    &lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath518&quot;&gt;
      &lt;path
         d=&quot;M 1.5959e-5,-6.1035e-5 H 1071 V 813.74994 H 1.5959e-5 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path516&quot; /&gt;
    &lt;/clipPath&gt;
    &lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath536&quot;&gt;
      &lt;path
         d=&quot;M 1.5959e-5,-6.1035e-5 H 1071 V 813.74994 H 1.5959e-5 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path534&quot; /&gt;
    &lt;/clipPath&gt;
    &lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath560&quot;&gt;
      &lt;path
         d=&quot;M 1.5959e-5,-6.1035e-5 H 1071 V 813.74994 H 1.5959e-5 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path558&quot; /&gt;
    &lt;/clipPath&gt;
    &lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath578&quot;&gt;
      &lt;path
         d=&quot;M 1.5959e-5,-6.1035e-5 H 1071 V 813.74994 H 1.5959e-5 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path576&quot; /&gt;
    &lt;/clipPath&gt;
    &lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath602&quot;&gt;
      &lt;path
         d=&quot;M 1.5959e-5,-6.1035e-5 H 1071 V 813.74994 H 1.5959e-5 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path600&quot; /&gt;
    &lt;/clipPath&gt;
    &lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath618&quot;&gt;
      &lt;path
         d=&quot;M 1.5959e-5,-6.1035e-5 H 1071 V 813.74994 H 1.5959e-5 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path616&quot; /&gt;
    &lt;/clipPath&gt;
    &lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath636&quot;&gt;
      &lt;path
         d=&quot;M 1.5959e-5,-6.1035e-5 H 1071 V 813.74994 H 1.5959e-5 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path634&quot; /&gt;
    &lt;/clipPath&gt;
    &lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath656&quot;&gt;
      &lt;path
         d=&quot;M 1.5959e-5,-6.1035e-5 H 1071 V 813.74994 H 1.5959e-5 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path654&quot; /&gt;
    &lt;/clipPath&gt;
    &lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath672&quot;&gt;
      &lt;path
         d=&quot;M 1.5959e-5,-6.1035e-5 H 1071 V 813.74994 H 1.5959e-5 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path670&quot; /&gt;
    &lt;/clipPath&gt;
    &lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath688&quot;&gt;
      &lt;path
         d=&quot;M 1.5959e-5,-6.1035e-5 H 1071 V 813.74994 H 1.5959e-5 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path686&quot; /&gt;
    &lt;/clipPath&gt;
    &lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath704&quot;&gt;
      &lt;path
         d=&quot;M 1.5959e-5,-6.1035e-5 H 1071 V 813.74994 H 1.5959e-5 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path702&quot; /&gt;
    &lt;/clipPath&gt;
    &lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath744&quot;&gt;
      &lt;path
         d=&quot;M 1.5959e-5,-6.1035e-5 H 1071 V 813.74994 H 1.5959e-5 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path742&quot; /&gt;
    &lt;/clipPath&gt;
    &lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath760&quot;&gt;
      &lt;path
         d=&quot;M 1.5959e-5,-6.1035e-5 H 1071 V 813.74994 H 1.5959e-5 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path758&quot; /&gt;
    &lt;/clipPath&gt;
    &lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath780&quot;&gt;
      &lt;path
         d=&quot;M 1.5959e-5,-6.1035e-5 H 1071 V 813.74994 H 1.5959e-5 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path778&quot; /&gt;
    &lt;/clipPath&gt;
    &lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath796&quot;&gt;
      &lt;path
         d=&quot;M 1.5959e-5,-6.1035e-5 H 1071 V 813.74994 H 1.5959e-5 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path794&quot; /&gt;
    &lt;/clipPath&gt;
    &lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath814&quot;&gt;
      &lt;path
         d=&quot;M 1.5959e-5,-6.1035e-5 H 1071 V 813.74994 H 1.5959e-5 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path812&quot; /&gt;
    &lt;/clipPath&gt;
    &lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath846&quot;&gt;
      &lt;path
         d=&quot;M 1.5959e-5,-6.1035e-5 H 1071 V 813.74994 H 1.5959e-5 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path844&quot; /&gt;
    &lt;/clipPath&gt;
    &lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath866&quot;&gt;
      &lt;path
         d=&quot;M 1.5959e-5,-6.1035e-5 H 1071 V 813.74994 H 1.5959e-5 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path864&quot; /&gt;
    &lt;/clipPath&gt;
    &lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath888&quot;&gt;
      &lt;path
         d=&quot;M 1.5959e-5,-6.1035e-5 H 1071 V 813.74994 H 1.5959e-5 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path886&quot; /&gt;
    &lt;/clipPath&gt;
    &lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath910&quot;&gt;
      &lt;path
         d=&quot;M 1.5959e-5,-6.1035e-5 H 1071 V 813.74994 H 1.5959e-5 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path908&quot; /&gt;
    &lt;/clipPath&gt;
    &lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath928&quot;&gt;
      &lt;path
         d=&quot;M 1.5959e-5,-6.1035e-5 H 1071 V 813.74994 H 1.5959e-5 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path926&quot; /&gt;
    &lt;/clipPath&gt;
  &lt;/defs&gt;
  &lt;g
     inkscape:label=&quot;Layer 1&quot;
     inkscape:groupmode=&quot;layer&quot;
     id=&quot;layer1&quot;
     transform=&quot;translate(-70.822156,17.707628)&quot;&gt;
    &lt;g
       id=&quot;g116&quot;
       clip-path=&quot;url(#clipPath120)&quot;
       transform=&quot;matrix(0.35277777,0,0,-0.35277777,45.520404,250.14658)&quot;&gt;
      &lt;g
         id=&quot;g122&quot;
         transform=&quot;matrix(6.7632,0,0,5.1153,71.21,391.48)&quot;&gt;
        &lt;g
           id=&quot;g124&quot;
           transform=&quot;scale(0.067227,0.088479)&quot;&gt;
          &lt;g
             id=&quot;g126&quot;
             clip-path=&quot;url(#clipPath130)&quot;&gt;
            &lt;path
               d=&quot;m 272.48,803.63 c 0,0 0,0 0,0 h 133.23 c 0.07,0 0.12,-0.06 0.12,-0.13 v -28.34 c 0,-0.07 -0.05,-0.12 -0.12,-0.12 H 272.48 c -0.06,0 -0.12,0.05 -0.12,0.12 v 28.34 c 0,0.07 0.06,0.12 0.12,0.13 z&quot;
               style=&quot;fill:#4979c0;fill-opacity:0.25098;fill-rule:evenodd;stroke:none&quot;
               id=&quot;path132&quot; /&gt;
            &lt;path
               d=&quot;m 263.48,784.16 h 133.23 v 28.346 H 263.48 Z&quot;
               style=&quot;fill:#e8eef7;fill-opacity:1;fill-rule:evenodd;stroke:none&quot;
               id=&quot;path134&quot; /&gt;
            &lt;path
               d=&quot;m 263.48,784.16 h 133.23 v 28.346 H 263.48 Z&quot;
               style=&quot;fill:none;stroke:#000000;stroke-width:0.24;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
               id=&quot;path136&quot; /&gt;
            &lt;g
               id=&quot;g138&quot;&gt;
              &lt;g
                 id=&quot;g140&quot;
                 clip-path=&quot;url(#clipPath144)&quot;&gt;
                &lt;text
                   transform=&quot;matrix(1,0,0,-1,289.17,795.32)&quot;
                   style=&quot;font-style:italic;font-variant:normal;font-weight:normal;font-size:9.775px;font-family:Arial;-inkscape-font-specification:Arial-ItalicMT;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
                   id=&quot;text148&quot;&gt;&lt;tspan
                     x=&quot;0 5.2491751 8.240325 14.985075 20.234249 25.47365 31.465725 38.96315 44.212326 46.450802 52.442875 56.939377 59.930527 65.903053 71.171776 76.420952&quot;
                     y=&quot;0&quot;
                     sodipodi:role=&quot;line&quot;
                     id=&quot;tspan146&quot;&gt;0:BaseObjectType&lt;/tspan&gt;&lt;/text&gt;
              &lt;/g&gt;
            &lt;/g&gt;
            &lt;path
               d=&quot;m 272.48,750.66 c 0,0 0,0 0,0 h 133.23 c 0.07,0 0.12,-0.05 0.12,-0.12 V 722.2 c 0,-0.07 -0.05,-0.12 -0.12,-0.12 H 272.48 c -0.06,0 -0.12,0.05 -0.12,0.12 v 28.34 c 0,0.07 0.06,0.12 0.12,0.12 z&quot;
               style=&quot;fill:#4979c0;fill-opacity:0.25098;fill-rule:evenodd;stroke:none&quot;
               id=&quot;path150&quot; /&gt;
            &lt;path
               d=&quot;m 263.48,731.2 h 133.23 v 28.346 H 263.48 Z&quot;
               style=&quot;fill:#e8eef7;fill-opacity:1;fill-rule:evenodd;stroke:none&quot;
               id=&quot;path152&quot; /&gt;
            &lt;path
               d=&quot;m 263.48,731.2 h 133.23 v 28.346 H 263.48 Z&quot;
               style=&quot;fill:none;stroke:#000000;stroke-width:0.24;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
               id=&quot;path154&quot; /&gt;
            &lt;g
               id=&quot;g156&quot;&gt;
              &lt;g
                 id=&quot;g158&quot;
                 clip-path=&quot;url(#clipPath162)&quot;&gt;
                &lt;text
                   transform=&quot;matrix(1,0,0,-1,273.6,742.3)&quot;
                   style=&quot;font-style:italic;font-variant:normal;font-weight:normal;font-size:9.75px;font-family:Arial;-inkscape-font-specification:Arial-ItalicMT;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
                   id=&quot;text166&quot;&gt;&lt;tspan
                     x=&quot;0 2.9932499 11.232 19.470751 24.716249 32.955002 39.692249 46.429501 52.416 54.668251 60.654751 62.907001 68.893501 71.8965 74.889748 80.135246 85.371002 91.357498 97.344002 101.8485 107.835&quot;
                     y=&quot;0&quot;
                     sodipodi:role=&quot;line&quot;
                     id=&quot;tspan164&quot;&gt;IMM_MES_InterfaceType&lt;/tspan&gt;&lt;/text&gt;
              &lt;/g&gt;
            &lt;/g&gt;
            &lt;path
               d=&quot;m 330.1,770.24 v -10.7&quot;
               style=&quot;fill:none;stroke:#000000;stroke-width:0.24;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
               id=&quot;path168&quot; /&gt;
            &lt;path
               d=&quot;m 330.1,777.2 -3.48,-6.96 h 6.96 l -3.48,6.96 m 0,6.96 -3.48,-6.96 h 6.96 z&quot;
               style=&quot;fill:none;stroke:#000000;stroke-width:0.24;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
               id=&quot;path170&quot; /&gt;
            &lt;path
               d=&quot;m 357.03,678.23 h 158.4 v 28.346 h -158.4 z&quot;
               style=&quot;fill:#e8eef7;fill-opacity:1;fill-rule:evenodd;stroke:none&quot;
               id=&quot;path172&quot; /&gt;
            &lt;path
               d=&quot;m 357.03,678.23 h 158.4 v 28.346 h -158.4 z&quot;
               style=&quot;fill:none;stroke:#000000;stroke-width:0.24;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
               id=&quot;path174&quot; /&gt;
            &lt;g
               id=&quot;g176&quot;&gt;
              &lt;g
                 id=&quot;g178&quot;
                 clip-path=&quot;url(#clipPath182)&quot;&gt;
                &lt;text
                   transform=&quot;matrix(1,0,0,-1,392.6,689.3)&quot;
                   style=&quot;font-variant:normal;font-weight:normal;font-size:9.775px;font-family:Arial;-inkscape-font-specification:ArialMT;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
                   id=&quot;text186&quot;&gt;&lt;tspan
                     x=&quot;0 8.240325 14.2324 18.728901 24.720976 26.95945 32.208626 37.457802 40.448952 46.441025 48.689274 54.681351 57.682274 65.9226 71.914673 74.162926 76.401398 82.393478&quot;
                     y=&quot;0&quot;
                     sodipodi:role=&quot;line&quot;
                     id=&quot;tspan184&quot;&gt;MachineInformation&lt;/tspan&gt;&lt;/text&gt;
              &lt;/g&gt;
            &lt;/g&gt;
            &lt;path
               d=&quot;m 330.1,731.2 v -38.79 h 26.93&quot;
               style=&quot;fill:none;stroke:#000000;stroke-width:0.24;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
               id=&quot;path188&quot; /&gt;
            &lt;path
               d=&quot;m 352.89,694.48 v -4.14&quot;
               style=&quot;fill:none;stroke:#000000;stroke-width:0.24;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
               id=&quot;path190&quot; /&gt;
            &lt;path
               d=&quot;m 553.71,697.7 c 0,0 0,0 0,0 h 186.84 c 0.06,0 0.12,-0.06 0.12,-0.12 v -28.35 c 0,-0.06 -0.06,-0.12 -0.12,-0.12 H 553.71 c -0.07,0 -0.12,0.06 -0.12,0.12 v 28.35 c 0,0.06 0.05,0.12 0.12,0.12 z&quot;
               style=&quot;fill:#4979c0;fill-opacity:0.25098;fill-rule:evenodd;stroke:none&quot;
               id=&quot;path192&quot; /&gt;
            &lt;path
               d=&quot;m 544.71,678.23 h 186.84 v 28.346 H 544.71 Z&quot;
               style=&quot;fill:#e8eef7;fill-opacity:1;fill-rule:evenodd;stroke:none&quot;
               id=&quot;path194&quot; /&gt;
            &lt;path
               d=&quot;m 544.71,678.23 h 186.84 v 28.346 H 544.71 Z&quot;
               style=&quot;fill:none;stroke:#000000;stroke-width:0.24;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
               id=&quot;path196&quot; /&gt;
            &lt;g
               id=&quot;g198&quot;&gt;
              &lt;g
                 id=&quot;g200&quot;
                 clip-path=&quot;url(#clipPath204)&quot;&gt;
                &lt;text
                   transform=&quot;matrix(1,0,0,-1,579.35,689.3)&quot;
                   style=&quot;font-style:italic;font-variant:normal;font-weight:normal;font-size:9.775px;font-family:Arial;-inkscape-font-specification:Arial-ItalicMT;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
                   id=&quot;text208&quot;&gt;&lt;tspan
                     x=&quot;0 5.2491751 8.240325 16.48065 22.472725 26.969225 32.9613 35.199776 40.448952 46.441025 48.689274 54.681351 56.9296 62.921677 65.9226 74.162926 80.154999 82.403252 84.641724 90.633797 95.882973 101.8555 107.12422 112.3734&quot;
                     y=&quot;0&quot;
                     sodipodi:role=&quot;line&quot;
                     id=&quot;tspan206&quot;&gt;3:MachineInformationType&lt;/tspan&gt;&lt;/text&gt;
              &lt;/g&gt;
            &lt;/g&gt;
            &lt;path
               d=&quot;m 515.42,692.41 h 18.94&quot;
               style=&quot;fill:none;stroke:#000000;stroke-width:0.24;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
               id=&quot;path210&quot; /&gt;
            &lt;path
               d=&quot;m 539.19,692.41 -5.52,2.76 v -5.52 z m 5.52,0 -5.52,2.76 v -5.52 z&quot;
               style=&quot;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none&quot;
               id=&quot;path212&quot; /&gt;
            &lt;path
               d=&quot;m 357.03,637.69 h 158.4 v 28.346 h -158.4 z&quot;
               style=&quot;fill:#e8eef7;fill-opacity:1;fill-rule:evenodd;stroke:none&quot;
               id=&quot;path214&quot; /&gt;
            &lt;path
               d=&quot;m 357.03,637.69 h 158.4 v 28.346 h -158.4 z&quot;
               style=&quot;fill:none;stroke:#000000;stroke-width:0.24;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
               id=&quot;path216&quot; /&gt;
            &lt;g
               id=&quot;g218&quot;&gt;
              &lt;g
                 id=&quot;g220&quot;
                 clip-path=&quot;url(#clipPath224)&quot;&gt;
                &lt;text
                   transform=&quot;matrix(1,0,0,-1,387.85,648.7)&quot;
                   style=&quot;font-variant:normal;font-weight:normal;font-size:9.75px;font-family:Arial;-inkscape-font-specification:ArialMT;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
                   id=&quot;text228&quot;&gt;&lt;tspan
                     x=&quot;0 8.2679996 14.28375 18.807751 24.8235 27.066 32.340752 37.615501 45.132751 50.407501 56.423248 59.4165 61.659 66.933746 72.208504 75.952499 81.227249 84.220497 86.462997 91.737747&quot;
                     y=&quot;0&quot;
                     sodipodi:role=&quot;line&quot;
                     id=&quot;tspan226&quot;&gt;MachineConfiguration&lt;/tspan&gt;&lt;/text&gt;
              &lt;/g&gt;
            &lt;/g&gt;
            &lt;path
               d=&quot;m 330.1,731.2 v -79.34 h 26.93&quot;
               style=&quot;fill:none;stroke:#000000;stroke-width:0.24;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
               id=&quot;path230&quot; /&gt;
            &lt;path
               d=&quot;m 352.89,653.93 v -4.14&quot;
               style=&quot;fill:none;stroke:#000000;stroke-width:0.24;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
               id=&quot;path232&quot; /&gt;
            &lt;path
               d=&quot;m 553.71,657.16 c 0,0 0,0 0,0 h 186.84 c 0.06,0 0.12,-0.06 0.12,-0.12 v -28.35 c 0,-0.07 -0.06,-0.12 -0.12,-0.12 H 553.71 c -0.07,0 -0.12,0.05 -0.12,0.12 v 28.35 c 0,0.06 0.05,0.12 0.12,0.12 z&quot;
               style=&quot;fill:#4979c0;fill-opacity:0.25098;fill-rule:evenodd;stroke:none&quot;
               id=&quot;path234&quot; /&gt;
            &lt;path
               d=&quot;m 544.71,637.69 h 186.84 v 28.346 H 544.71 Z&quot;
               style=&quot;fill:#e8eef7;fill-opacity:1;fill-rule:evenodd;stroke:none&quot;
               id=&quot;path236&quot; /&gt;
            &lt;path
               d=&quot;m 544.71,637.69 h 186.84 v 28.346 H 544.71 Z&quot;
               style=&quot;fill:none;stroke:#000000;stroke-width:0.24;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
               id=&quot;path238&quot; /&gt;
            &lt;g
               id=&quot;g240&quot;&gt;
              &lt;g
                 id=&quot;g242&quot;
                 clip-path=&quot;url(#clipPath246)&quot;&gt;
                &lt;text
                   transform=&quot;matrix(1,0,0,-1,574.6,648.7)&quot;
                   style=&quot;font-style:italic;font-variant:normal;font-weight:normal;font-size:9.75px;font-family:Arial;-inkscape-font-specification:Arial-ItalicMT;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
                   id=&quot;text250&quot;&gt;&lt;tspan
                     x=&quot;0 5.2747502 8.2679996 16.535999 22.55175 27.07575 33.091499 35.334 40.608749 46.6245 53.400749 59.4165 64.691254 67.684502 69.927002 75.201752 80.476501 84.220497 89.495247 92.488503 94.731003 100.00575 106.0215 112.03725 117.30225 122.577&quot;
                     y=&quot;0&quot;
                     sodipodi:role=&quot;line&quot;
                     id=&quot;tspan248&quot;&gt;3:MachineConfigurationType&lt;/tspan&gt;&lt;/text&gt;
              &lt;/g&gt;
            &lt;/g&gt;
            &lt;path
               d=&quot;m 515.42,651.86 h 18.94&quot;
               style=&quot;fill:none;stroke:#000000;stroke-width:0.24;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
               id=&quot;path252&quot; /&gt;
            &lt;path
               d=&quot;m 539.19,651.86 -5.52,2.76 v -5.52 z m 5.52,0 -5.52,2.76 v -5.52 z&quot;
               style=&quot;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none&quot;
               id=&quot;path254&quot; /&gt;
            &lt;path
               d=&quot;m 357.03,597.07 h 158.4 v 28.346 h -158.4 z&quot;
               style=&quot;fill:#e8eef7;fill-opacity:1;fill-rule:evenodd;stroke:none&quot;
               id=&quot;path256&quot; /&gt;
            &lt;path
               d=&quot;m 357.03,597.07 h 158.4 v 28.346 h -158.4 z&quot;
               style=&quot;fill:none;stroke:#000000;stroke-width:0.24;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
               id=&quot;path258&quot; /&gt;
            &lt;g
               id=&quot;g260&quot;&gt;
              &lt;g
                 id=&quot;g262&quot;
                 clip-path=&quot;url(#clipPath266)&quot;&gt;
                &lt;text
                   transform=&quot;matrix(1,0,0,-1,377.02,608.05)&quot;
                   style=&quot;font-variant:normal;font-weight:normal;font-size:9.75px;font-family:Arial;-inkscape-font-specification:ArialMT;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
                   id=&quot;text270&quot;&gt;&lt;tspan
                     x=&quot;0 8.2387505 14.22525 18.72975 24.716249 26.95875 32.20425 37.449749 46.439251 52.435501 59.172749 66.660751 71.90625 77.892754 80.144997 82.387497 88.374001 93.619499 97.363503 102.609 105.60225 107.84475 113.09025&quot;
                     y=&quot;0&quot;
                     sodipodi:role=&quot;line&quot;
                     id=&quot;tspan268&quot;&gt;MachineMESConfiguration&lt;/tspan&gt;&lt;/text&gt;
              &lt;/g&gt;
            &lt;/g&gt;
            &lt;path
               d=&quot;M 330.1,731.2 V 611.25 h 26.93&quot;
               style=&quot;fill:none;stroke:#000000;stroke-width:0.24;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
               id=&quot;path272&quot; /&gt;
            &lt;path
               d=&quot;m 352.89,613.32 v -4.14&quot;
               style=&quot;fill:none;stroke:#000000;stroke-width:0.24;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
               id=&quot;path274&quot; /&gt;
            &lt;path
               d=&quot;m 553.71,616.54 c 0,0 0,0 0,0 h 186.84 c 0.06,0 0.12,-0.06 0.12,-0.12 v -28.35 c 0,-0.06 -0.06,-0.12 -0.12,-0.12 H 553.71 c -0.07,0 -0.12,0.06 -0.12,0.12 v 28.35 c 0,0.06 0.05,0.12 0.12,0.12 z&quot;
               style=&quot;fill:#4979c0;fill-opacity:0.25098;fill-rule:evenodd;stroke:none&quot;
               id=&quot;path276&quot; /&gt;
            &lt;path
               d=&quot;m 544.71,597.07 h 186.84 v 28.346 H 544.71 Z&quot;
               style=&quot;fill:#e8eef7;fill-opacity:1;fill-rule:evenodd;stroke:none&quot;
               id=&quot;path278&quot; /&gt;
            &lt;path
               d=&quot;m 544.71,597.07 h 186.84 v 28.346 H 544.71 Z&quot;
               style=&quot;fill:none;stroke:#000000;stroke-width:0.24;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
               id=&quot;path280&quot; /&gt;
            &lt;g
               id=&quot;g282&quot;&gt;
              &lt;g
                 id=&quot;g284&quot;
                 clip-path=&quot;url(#clipPath288)&quot;&gt;
                &lt;text
                   transform=&quot;matrix(1,0,0,-1,563.78,608.05)&quot;
                   style=&quot;font-style:italic;font-variant:normal;font-weight:normal;font-size:9.75px;font-family:Arial;-inkscape-font-specification:Arial-ItalicMT;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
                   id=&quot;text292&quot;&gt;&lt;tspan
                     x=&quot;0 5.2455001 8.2387505 16.477501 22.464001 26.9685 32.955002 35.197498 40.443001 46.429501 54.668251 61.405499 67.401749 74.889748 80.135246 86.12175 89.114998 91.357498 96.602997 101.8485 105.5925 110.838 113.83125 116.07375 121.31925 127.30575 133.29225 138.528 143.7735&quot;
                     y=&quot;0&quot;
                     sodipodi:role=&quot;line&quot;
                     id=&quot;tspan290&quot;&gt;3:MachineMESConfigurationType&lt;/tspan&gt;&lt;/text&gt;
              &lt;/g&gt;
            &lt;/g&gt;
            &lt;path
               d=&quot;m 515.42,611.25 h 18.94&quot;
               style=&quot;fill:none;stroke:#000000;stroke-width:0.24;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
               id=&quot;path294&quot; /&gt;
            &lt;path
               d=&quot;m 539.19,611.25 -5.52,2.76 v -5.52 z m 5.52,0 -5.52,2.76 v -5.52 z&quot;
               style=&quot;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none&quot;
               id=&quot;path296&quot; /&gt;
            &lt;path
               d=&quot;m 357.03,556.45 h 158.4 v 28.346 h -158.4 z&quot;
               style=&quot;fill:#e8eef7;fill-opacity:1;fill-rule:evenodd;stroke:none&quot;
               id=&quot;path298&quot; /&gt;
            &lt;path
               d=&quot;m 357.03,556.45 h 158.4 v 28.346 h -158.4 z&quot;
               style=&quot;fill:none;stroke:#000000;stroke-width:0.24;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
               id=&quot;path300&quot; /&gt;
            &lt;g
               id=&quot;g302&quot;&gt;
              &lt;g
                 id=&quot;g304&quot;
                 clip-path=&quot;url(#clipPath308)&quot;&gt;
                &lt;text
                   transform=&quot;matrix(1,0,0,-1,403.45,567.4)&quot;
                   style=&quot;font-variant:normal;font-weight:normal;font-size:9.75px;font-family:Arial;-inkscape-font-specification:ArialMT;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
                   id=&quot;text312&quot;&gt;&lt;tspan
                     x=&quot;0 8.2387505 14.22525 18.72975 24.716249 26.95875 32.20425 37.449749 44.187 47.180248 52.425751 55.418999 61.405499&quot;
                     y=&quot;0&quot;
                     sodipodi:role=&quot;line&quot;
                     id=&quot;tspan310&quot;&gt;MachineStatus&lt;/tspan&gt;&lt;/text&gt;
              &lt;/g&gt;
            &lt;/g&gt;
            &lt;path
               d=&quot;M 330.1,731.2 V 570.63 h 26.93&quot;
               style=&quot;fill:none;stroke:#000000;stroke-width:0.24;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
               id=&quot;path314&quot; /&gt;
            &lt;path
               d=&quot;m 352.89,572.7 v -4.14&quot;
               style=&quot;fill:none;stroke:#000000;stroke-width:0.24;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
               id=&quot;path316&quot; /&gt;
            &lt;path
               d=&quot;m 553.71,575.92 c 0,0 0,0 0,0 h 186.84 c 0.06,0 0.12,-0.05 0.12,-0.12 v -28.35 c 0,-0.06 -0.06,-0.12 -0.12,-0.12 H 553.71 c -0.07,0 -0.12,0.06 -0.12,0.12 v 28.35 c 0,0.07 0.05,0.12 0.12,0.12 z&quot;
               style=&quot;fill:#4979c0;fill-opacity:0.25098;fill-rule:evenodd;stroke:none&quot;
               id=&quot;path318&quot; /&gt;
            &lt;path
               d=&quot;m 544.71,556.45 h 186.84 v 28.346 H 544.71 Z&quot;
               style=&quot;fill:#e8eef7;fill-opacity:1;fill-rule:evenodd;stroke:none&quot;
               id=&quot;path320&quot; /&gt;
            &lt;path
               d=&quot;m 544.71,556.45 h 186.84 v 28.346 H 544.71 Z&quot;
               style=&quot;fill:none;stroke:#000000;stroke-width:0.24;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
               id=&quot;path322&quot; /&gt;
            &lt;g
               id=&quot;g324&quot;&gt;
              &lt;g
                 id=&quot;g326&quot;
                 clip-path=&quot;url(#clipPath330)&quot;&gt;
                &lt;text
                   transform=&quot;matrix(1,0,0,-1,590.17,567.4)&quot;
                   style=&quot;font-style:italic;font-variant:normal;font-weight:normal;font-size:9.75px;font-family:Arial;-inkscape-font-specification:Arial-ItalicMT;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
                   id=&quot;text334&quot;&gt;&lt;tspan
                     x=&quot;0 5.2747502 8.2875004 16.5555 22.571251 27.095249 33.111 35.373001 40.647751 46.663502 52.688999 55.701752 61.717499 63.98925 70.004997 74.528999 80.544746 85.809753 91.8255&quot;
                     y=&quot;0&quot;
                     sodipodi:role=&quot;line&quot;
                     id=&quot;tspan332&quot;&gt;3:MachineStatusType&lt;/tspan&gt;&lt;/text&gt;
              &lt;/g&gt;
            &lt;/g&gt;
            &lt;path
               d=&quot;m 515.42,570.63 h 18.94&quot;
               style=&quot;fill:none;stroke:#000000;stroke-width:0.24;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
               id=&quot;path336&quot; /&gt;
            &lt;path
               d=&quot;m 539.19,570.63 -5.52,2.76 v -5.52 z m 5.52,0 -5.52,2.76 v -5.52 z&quot;
               style=&quot;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none&quot;
               id=&quot;path338&quot; /&gt;
            &lt;path
               d=&quot;m 357.03,515.33 h 158.4 v 28.346 h -158.4 z&quot;
               style=&quot;fill:#e8eef7;fill-opacity:1;fill-rule:evenodd;stroke:none&quot;
               id=&quot;path340&quot; /&gt;
            &lt;path
               d=&quot;m 357.03,515.33 h 158.4 v 28.346 h -158.4 z&quot;
               style=&quot;fill:none;stroke:#000000;stroke-width:0.24;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
               id=&quot;path342&quot; /&gt;
            &lt;g
               id=&quot;g344&quot;&gt;
              &lt;g
                 id=&quot;g346&quot;
                 clip-path=&quot;url(#clipPath350)&quot;&gt;
                &lt;text
                   transform=&quot;matrix(1,0,0,-1,392.6,526.25)&quot;
                   style=&quot;font-variant:normal;font-weight:normal;font-size:9.775px;font-family:Arial;-inkscape-font-specification:ArialMT;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
                   id=&quot;text354&quot;&gt;&lt;tspan
                     x=&quot;0 8.240325 14.2324 18.728901 24.720976 26.95945 32.208626 37.457802 46.450802 52.452648 59.197399 65.942146 68.933296 74.182472 77.173622 82.422798&quot;
                     y=&quot;0&quot;
                     sodipodi:role=&quot;line&quot;
                     id=&quot;tspan352&quot;&gt;MachineMESStatus&lt;/tspan&gt;&lt;/text&gt;
              &lt;/g&gt;
            &lt;/g&gt;
            &lt;path
               d=&quot;M 330.1,731.2 V 529.51 h 26.93&quot;
               style=&quot;fill:none;stroke:#000000;stroke-width:0.24;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
               id=&quot;path356&quot; /&gt;
            &lt;path
               d=&quot;m 352.89,531.58 v -4.14&quot;
               style=&quot;fill:none;stroke:#000000;stroke-width:0.24;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
               id=&quot;path358&quot; /&gt;
            &lt;path
               d=&quot;m 553.71,534.8 c 0,0 0,0 0,0 h 186.84 c 0.06,0 0.12,-0.05 0.12,-0.12 v -28.35 c 0,-0.06 -0.06,-0.12 -0.12,-0.12 H 553.71 c -0.07,0 -0.12,0.06 -0.12,0.12 v 28.35 c 0,0.07 0.05,0.12 0.12,0.12 z&quot;
               style=&quot;fill:#4979c0;fill-opacity:0.25098;fill-rule:evenodd;stroke:none&quot;
               id=&quot;path360&quot; /&gt;
            &lt;path
               d=&quot;m 544.71,515.33 h 186.84 v 28.346 H 544.71 Z&quot;
               style=&quot;fill:#e8eef7;fill-opacity:1;fill-rule:evenodd;stroke:none&quot;
               id=&quot;path362&quot; /&gt;
            &lt;path
               d=&quot;m 544.71,515.33 h 186.84 v 28.346 H 544.71 Z&quot;
               style=&quot;fill:none;stroke:#000000;stroke-width:0.24;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
               id=&quot;path364&quot; /&gt;
            &lt;g
               id=&quot;g366&quot;&gt;
              &lt;g
                 id=&quot;g368&quot;
                 clip-path=&quot;url(#clipPath372)&quot;&gt;
                &lt;text
                   transform=&quot;matrix(1,0,0,-1,579.35,526.25)&quot;
                   style=&quot;font-style:italic;font-variant:normal;font-weight:normal;font-size:9.775px;font-family:Arial;-inkscape-font-specification:Arial-ItalicMT;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
                   id=&quot;text376&quot;&gt;&lt;tspan
                     x=&quot;0 5.2491751 8.240325 16.48065 22.472725 26.969225 32.9613 35.199776 40.448952 46.441025 54.681351 61.426102 67.427948 74.172699 77.163849 82.413025 85.404175 91.396248 95.892754 101.86527 107.134 112.38318&quot;
                     y=&quot;0&quot;
                     sodipodi:role=&quot;line&quot;
                     id=&quot;tspan374&quot;&gt;3:MachineMESStatusType&lt;/tspan&gt;&lt;/text&gt;
              &lt;/g&gt;
            &lt;/g&gt;
            &lt;path
               d=&quot;m 515.42,529.51 h 18.94&quot;
               style=&quot;fill:none;stroke:#000000;stroke-width:0.24;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
               id=&quot;path378&quot; /&gt;
            &lt;path
               d=&quot;m 539.19,529.51 -5.52,2.76 v -5.52 z m 5.52,0 -5.52,2.76 v -5.52 z&quot;
               style=&quot;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none&quot;
               id=&quot;path380&quot; /&gt;
            &lt;path
               d=&quot;m 358.79,390.14 h 158.4 v 28.346 h -158.4 z&quot;
               style=&quot;fill:#e8eef7;fill-opacity:1;fill-rule:evenodd;stroke:none&quot;
               id=&quot;path382&quot; /&gt;
            &lt;path
               d=&quot;m 358.79,390.14 h 158.4 v 28.346 h -158.4 z&quot;
               style=&quot;fill:none;stroke:#000000;stroke-width:0.24;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
               id=&quot;path384&quot; /&gt;
            &lt;g
               id=&quot;g386&quot;&gt;
              &lt;g
                 id=&quot;g388&quot;
                 clip-path=&quot;url(#clipPath392)&quot;&gt;
                &lt;text
                   transform=&quot;matrix(1,0,0,-1,408.25,400.92)&quot;
                   style=&quot;font-variant:normal;font-weight:normal;font-size:9.75px;font-family:Arial;-inkscape-font-specification:ArialMT;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
                   id=&quot;text396&quot;&gt;&lt;tspan
                     x=&quot;0 2.9932499 8.2679996 10.5105 15.78525 21.050249 24.043501 26.285999 31.560749 37.5765 44.352749 50.3685 52.611 54.863251&quot;
                     y=&quot;0&quot;
                     sodipodi:role=&quot;line&quot;
                     id=&quot;tspan394&quot;&gt;InjectionUnits&lt;/tspan&gt;&lt;/text&gt;
              &lt;/g&gt;
            &lt;/g&gt;
            &lt;path
               d=&quot;M 330.1,731.2 V 404.32 h 28.69&quot;
               style=&quot;fill:none;stroke:#000000;stroke-width:0.24;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
               id=&quot;path398&quot; /&gt;
            &lt;path
               d=&quot;m 354.65,406.39 v -4.14&quot;
               style=&quot;fill:none;stroke:#000000;stroke-width:0.24;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
               id=&quot;path400&quot; /&gt;
            &lt;path
               d=&quot;m 555.38,409.61 c 0,0 0,0 0,0 h 186.83 c 0.07,0 0.12,-0.05 0.12,-0.12 v -28.35 c 0,-0.06 -0.05,-0.12 -0.12,-0.12 H 555.38 c -0.07,0 -0.12,0.06 -0.12,0.12 v 28.35 c 0,0.07 0.05,0.12 0.12,0.12 z&quot;
               style=&quot;fill:#4979c0;fill-opacity:0.25098;fill-rule:evenodd;stroke:none&quot;
               id=&quot;path402&quot; /&gt;
            &lt;path
               d=&quot;m 546.38,390.14 h 186.84 v 28.346 H 546.38 Z&quot;
               style=&quot;fill:#e8eef7;fill-opacity:1;fill-rule:evenodd;stroke:none&quot;
               id=&quot;path404&quot; /&gt;
            &lt;path
               d=&quot;m 546.38,390.14 h 186.84 v 28.346 H 546.38 Z&quot;
               style=&quot;fill:none;stroke:#000000;stroke-width:0.24;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
               id=&quot;path406&quot; /&gt;
            &lt;g
               id=&quot;g408&quot;&gt;
              &lt;g
                 id=&quot;g410&quot;
                 clip-path=&quot;url(#clipPath414)&quot;&gt;
                &lt;text
                   transform=&quot;matrix(1,0,0,-1,599.1,400.92)&quot;
                   style=&quot;font-style:italic;font-variant:normal;font-weight:normal;font-size:9.75px;font-family:Arial;-inkscape-font-specification:Arial-ItalicMT;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
                   id=&quot;text418&quot;&gt;&lt;tspan
                     x=&quot;0 2.9932499 8.2387505 10.48125 15.72675 20.9625 23.95575 26.19825 31.44375 37.430248 44.17725 50.16375 52.40625 54.658501 59.894249 65.880753 71.116501 76.362&quot;
                     y=&quot;0&quot;
                     sodipodi:role=&quot;line&quot;
                     id=&quot;tspan416&quot;&gt;InjectionUnitsType&lt;/tspan&gt;&lt;/text&gt;
              &lt;/g&gt;
            &lt;/g&gt;
            &lt;path
               d=&quot;m 517.18,404.32 h 18.85&quot;
               style=&quot;fill:none;stroke:#000000;stroke-width:0.24;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
               id=&quot;path420&quot; /&gt;
            &lt;path
               d=&quot;m 540.86,404.32 -5.52,2.76 v -5.52 z m 5.52,0 -5.52,2.76 v -5.52 z&quot;
               style=&quot;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none&quot;
               id=&quot;path422&quot; /&gt;
            &lt;path
               d=&quot;m 357.03,432.66 h 158.4 v 28.346 h -158.4 z&quot;
               style=&quot;fill:#e8eef7;fill-opacity:1;fill-rule:evenodd;stroke:none&quot;
               id=&quot;path424&quot; /&gt;
            &lt;path
               d=&quot;m 357.03,432.66 h 158.4 v 28.346 h -158.4 z&quot;
               style=&quot;fill:none;stroke:#000000;stroke-width:0.24;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
               id=&quot;path426&quot; /&gt;
            &lt;g
               id=&quot;g428&quot;&gt;
              &lt;g
                 id=&quot;g430&quot;
                 clip-path=&quot;url(#clipPath434)&quot;&gt;
                &lt;text
                   transform=&quot;matrix(1,0,0,-1,420.4,443.5)&quot;
                   style=&quot;font-variant:normal;font-weight:normal;font-size:9.775px;font-family:Arial;-inkscape-font-specification:ArialMT;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
                   id=&quot;text438&quot;&gt;&lt;tspan
                     x=&quot;0 8.240325 14.2324 19.481575 21.720051 26.969225&quot;
                     y=&quot;0&quot;
                     sodipodi:role=&quot;line&quot;
                     id=&quot;tspan436&quot;&gt;Moulds&lt;/tspan&gt;&lt;/text&gt;
              &lt;/g&gt;
            &lt;/g&gt;
            &lt;path
               d=&quot;M 330.1,731.2 V 446.84 h 26.93&quot;
               style=&quot;fill:none;stroke:#000000;stroke-width:0.24;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
               id=&quot;path440&quot; /&gt;
            &lt;path
               d=&quot;m 352.89,448.91 v -4.14&quot;
               style=&quot;fill:none;stroke:#000000;stroke-width:0.24;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
               id=&quot;path442&quot; /&gt;
            &lt;path
               d=&quot;m 553.71,452.13 c 0,0 0,0 0,0 h 186.84 c 0.06,0 0.12,-0.05 0.12,-0.12 v -28.35 c 0,-0.06 -0.06,-0.12 -0.12,-0.12 H 553.71 c -0.07,0 -0.12,0.06 -0.12,0.12 v 28.35 c 0,0.07 0.05,0.12 0.12,0.12 z&quot;
               style=&quot;fill:#4979c0;fill-opacity:0.25098;fill-rule:evenodd;stroke:none&quot;
               id=&quot;path444&quot; /&gt;
            &lt;path
               d=&quot;m 544.71,432.66 h 186.84 v 28.346 H 544.71 Z&quot;
               style=&quot;fill:#e8eef7;fill-opacity:1;fill-rule:evenodd;stroke:none&quot;
               id=&quot;path446&quot; /&gt;
            &lt;path
               d=&quot;m 544.71,432.66 h 186.84 v 28.346 H 544.71 Z&quot;
               style=&quot;fill:none;stroke:#000000;stroke-width:0.24;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
               id=&quot;path448&quot; /&gt;
            &lt;g
               id=&quot;g450&quot;&gt;
              &lt;g
                 id=&quot;g452&quot;
                 clip-path=&quot;url(#clipPath456)&quot;&gt;
                &lt;text
                   transform=&quot;matrix(1,0,0,-1,607.15,443.5)&quot;
                   style=&quot;font-style:italic;font-variant:normal;font-weight:normal;font-size:9.775px;font-family:Arial;-inkscape-font-specification:Arial-ItalicMT;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
                   id=&quot;text460&quot;&gt;&lt;tspan
                     x=&quot;0 5.2491751 8.240325 16.48065 22.472725 27.721901 29.960375 35.209549 40.448952 46.421474 51.690201 56.939377&quot;
                     y=&quot;0&quot;
                     sodipodi:role=&quot;line&quot;
                     id=&quot;tspan458&quot;&gt;3:MouldsType&lt;/tspan&gt;&lt;/text&gt;
              &lt;/g&gt;
            &lt;/g&gt;
            &lt;path
               d=&quot;m 515.42,446.84 h 18.94&quot;
               style=&quot;fill:none;stroke:#000000;stroke-width:0.24;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
               id=&quot;path462&quot; /&gt;
            &lt;path
               d=&quot;m 539.19,446.84 -5.52,2.76 v -5.52 z m 5.52,0 -5.52,2.76 v -5.52 z&quot;
               style=&quot;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none&quot;
               id=&quot;path464&quot; /&gt;
            &lt;path
               d=&quot;m 357.03,475.18 h 158.4 v 28.346 h -158.4 z&quot;
               style=&quot;fill:#e8eef7;fill-opacity:1;fill-rule:evenodd;stroke:none&quot;
               id=&quot;path466&quot; /&gt;
            &lt;path
               d=&quot;m 357.03,475.18 h 158.4 v 28.346 h -158.4 z&quot;
               style=&quot;fill:none;stroke:#000000;stroke-width:0.24;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
               id=&quot;path468&quot; /&gt;
            &lt;g
               id=&quot;g470&quot;&gt;
              &lt;g
                 id=&quot;g472&quot;
                 clip-path=&quot;url(#clipPath476)&quot;&gt;
                &lt;text
                   transform=&quot;matrix(1,0,0,-1,410.95,486.05)&quot;
                   style=&quot;font-variant:normal;font-weight:normal;font-size:9.75px;font-family:Arial;-inkscape-font-specification:ArialMT;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
                   id=&quot;text480&quot;&gt;&lt;tspan
                     x=&quot;0 6.7372499 11.98275 19.470751 24.716249 28.460251 35.207249 41.193748 43.436249 46.429501&quot;
                     y=&quot;0&quot;
                     sodipodi:role=&quot;line&quot;
                     id=&quot;tspan478&quot;&gt;PowerUnits&lt;/tspan&gt;&lt;/text&gt;
              &lt;/g&gt;
            &lt;/g&gt;
            &lt;path
               d=&quot;M 330.1,731.2 V 489.36 h 26.93&quot;
               style=&quot;fill:none;stroke:#000000;stroke-width:0.24;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
               id=&quot;path482&quot; /&gt;
            &lt;path
               d=&quot;m 352.89,491.43 v -4.14&quot;
               style=&quot;fill:none;stroke:#000000;stroke-width:0.24;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
               id=&quot;path484&quot; /&gt;
            &lt;path
               d=&quot;m 553.71,494.65 c 0,0 0,0 0,0 h 186.84 c 0.06,0 0.12,-0.06 0.12,-0.12 v -28.35 c 0,-0.06 -0.06,-0.12 -0.12,-0.12 H 553.71 c -0.07,0 -0.12,0.06 -0.12,0.12 v 28.35 c 0,0.06 0.05,0.12 0.12,0.12 z&quot;
               style=&quot;fill:#4979c0;fill-opacity:0.25098;fill-rule:evenodd;stroke:none&quot;
               id=&quot;path486&quot; /&gt;
            &lt;path
               d=&quot;m 544.71,475.18 h 186.84 v 28.346 H 544.71 Z&quot;
               style=&quot;fill:#e8eef7;fill-opacity:1;fill-rule:evenodd;stroke:none&quot;
               id=&quot;path488&quot; /&gt;
            &lt;path
               d=&quot;m 544.71,475.18 h 186.84 v 28.346 H 544.71 Z&quot;
               style=&quot;fill:none;stroke:#000000;stroke-width:0.24;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
               id=&quot;path490&quot; /&gt;
            &lt;g
               id=&quot;g492&quot;&gt;
              &lt;g
                 id=&quot;g494&quot;
                 clip-path=&quot;url(#clipPath498)&quot;&gt;
                &lt;text
                   transform=&quot;matrix(1,0,0,-1,597.7,486.05)&quot;
                   style=&quot;font-style:italic;font-variant:normal;font-weight:normal;font-size:9.75px;font-family:Arial;-inkscape-font-specification:Arial-ItalicMT;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
                   id=&quot;text502&quot;&gt;&lt;tspan
                     x=&quot;0 5.2455001 8.2387505 14.976 20.2215 27.709499 32.955002 36.699001 44.187 49.432499 51.674999 54.668251 59.172749 65.159248 70.394997 76.3815&quot;
                     y=&quot;0&quot;
                     sodipodi:role=&quot;line&quot;
                     id=&quot;tspan500&quot;&gt;3:PowerUnitsType&lt;/tspan&gt;&lt;/text&gt;
              &lt;/g&gt;
            &lt;/g&gt;
            &lt;path
               d=&quot;m 515.42,489.36 h 18.94&quot;
               style=&quot;fill:none;stroke:#000000;stroke-width:0.24;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
               id=&quot;path504&quot; /&gt;
            &lt;path
               d=&quot;m 539.19,489.36 -5.52,2.76 v -5.52 z m 5.52,0 -5.52,2.76 v -5.52 z&quot;
               style=&quot;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none&quot;
               id=&quot;path506&quot; /&gt;
            &lt;path
               d=&quot;m 358.79,233.27 h 158.4 v 28.346 h -158.4 z&quot;
               style=&quot;fill:#e8eef7;fill-opacity:1;fill-rule:evenodd;stroke:none&quot;
               id=&quot;path508&quot; /&gt;
            &lt;path
               d=&quot;m 358.79,233.27 h 158.4 v 28.346 h -158.4 z&quot;
               style=&quot;fill:none;stroke:#000000;stroke-width:0.24;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
               id=&quot;path510&quot; /&gt;
            &lt;g
               id=&quot;g512&quot;&gt;
              &lt;g
                 id=&quot;g514&quot;
                 clip-path=&quot;url(#clipPath518)&quot;&gt;
                &lt;text
                   transform=&quot;matrix(1,0,0,-1,427.73,243.92)&quot;
                   style=&quot;font-variant:normal;font-weight:normal;font-size:9.775px;font-family:Arial;-inkscape-font-specification:ArialMT;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
                   id=&quot;text522&quot;&gt;&lt;tspan
                     x=&quot;0 5.2393999 10.488575 15.73775&quot;
                     y=&quot;0&quot;
                     sodipodi:role=&quot;line&quot;
                     id=&quot;tspan520&quot;&gt;Jobs&lt;/tspan&gt;&lt;/text&gt;
              &lt;/g&gt;
            &lt;/g&gt;
            &lt;path
               d=&quot;m 555.38,252.73 c 0,0 0,0 0,0 h 186.83 c 0.07,0 0.12,-0.05 0.12,-0.12 v -28.34 c 0,-0.07 -0.05,-0.12 -0.12,-0.12 H 555.38 c -0.07,0 -0.12,0.05 -0.12,0.12 v 28.34 c 0,0.07 0.05,0.12 0.12,0.12 z&quot;
               style=&quot;fill:#4979c0;fill-opacity:0.25098;fill-rule:evenodd;stroke:none&quot;
               id=&quot;path524&quot; /&gt;
            &lt;path
               d=&quot;m 546.38,233.27 h 186.84 v 28.346 H 546.38 Z&quot;
               style=&quot;fill:#e8eef7;fill-opacity:1;fill-rule:evenodd;stroke:none&quot;
               id=&quot;path526&quot; /&gt;
            &lt;path
               d=&quot;m 546.38,233.27 h 186.84 v 28.346 H 546.38 Z&quot;
               style=&quot;fill:none;stroke:#000000;stroke-width:0.24;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
               id=&quot;path528&quot; /&gt;
            &lt;g
               id=&quot;g530&quot;&gt;
              &lt;g
                 id=&quot;g532&quot;
                 clip-path=&quot;url(#clipPath536)&quot;&gt;
                &lt;text
                   transform=&quot;matrix(1,0,0,-1,614.38,243.92)&quot;
                   style=&quot;font-style:italic;font-variant:normal;font-weight:normal;font-size:9.775px;font-family:Arial;-inkscape-font-specification:Arial-ItalicMT;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
                   id=&quot;text540&quot;&gt;&lt;tspan
                     x=&quot;0 5.2491751 8.240325 13.479725 18.728901 24.720976 29.217476 35.189999 40.458725 46.450802&quot;
                     y=&quot;0&quot;
                     sodipodi:role=&quot;line&quot;
                     id=&quot;tspan538&quot;&gt;3:JobsType&lt;/tspan&gt;&lt;/text&gt;
              &lt;/g&gt;
            &lt;/g&gt;
            &lt;path
               d=&quot;m 517.18,247.44 h 18.85&quot;
               style=&quot;fill:none;stroke:#000000;stroke-width:0.24;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
               id=&quot;path542&quot; /&gt;
            &lt;path
               d=&quot;m 540.86,247.44 -5.52,2.76 v -5.52 z m 5.52,0 -5.52,2.76 v -5.52 z&quot;
               style=&quot;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none&quot;
               id=&quot;path544&quot; /&gt;
            &lt;path
               d=&quot;M 330.1,731.2 V 247.44 h 28.69&quot;
               style=&quot;fill:none;stroke:#000000;stroke-width:0.24;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
               id=&quot;path546&quot; /&gt;
            &lt;path
               d=&quot;m 354.65,249.51 v -4.14&quot;
               style=&quot;fill:none;stroke:#000000;stroke-width:0.24;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
               id=&quot;path548&quot; /&gt;
            &lt;path
               d=&quot;m 358.79,188.88 h 158.4 v 28.346 h -158.4 z&quot;
               style=&quot;fill:#e8eef7;fill-opacity:1;fill-rule:evenodd;stroke:none&quot;
               id=&quot;path550&quot; /&gt;
            &lt;path
               d=&quot;m 358.79,188.88 h 158.4 v 28.346 h -158.4 z&quot;
               style=&quot;fill:none;stroke:#000000;stroke-width:0.24;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
               id=&quot;path552&quot; /&gt;
            &lt;g
               id=&quot;g554&quot;&gt;
              &lt;g
                 id=&quot;g556&quot;
                 clip-path=&quot;url(#clipPath560)&quot;&gt;
                &lt;text
                   transform=&quot;matrix(1,0,0,-1,367.92,199.5)&quot;
                   style=&quot;font-variant:normal;font-weight:normal;font-size:9.775px;font-family:Arial;-inkscape-font-specification:ArialMT;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
                   id=&quot;text564&quot;&gt;&lt;tspan
                     x=&quot;0 6.74475 9.7456751 15.73775 20.986925 26.979 31.4755 34.466648 36.705124 41.9543 47.946377 54.700901 60.692974 62.941223 68.933296 74.172699 79.421875 82.413025 90.653351 95.902527 101.8946 107.14378 112.39295 118.38503 126.62535 131.87453 137.86659&quot;
                     y=&quot;0&quot;
                     sodipodi:role=&quot;line&quot;
                     id=&quot;tspan562&quot;&gt;ProductionDatasetManagement&lt;/tspan&gt;&lt;/text&gt;
              &lt;/g&gt;
            &lt;/g&gt;
            &lt;path
               d=&quot;m 555.38,208.35 c 0,0 0,0 0,0 h 186.83 c 0.07,0 0.12,-0.05 0.12,-0.12 v -28.35 c 0,-0.06 -0.05,-0.12 -0.12,-0.12 H 555.38 c -0.07,0 -0.12,0.06 -0.12,0.12 v 28.35 c 0,0.07 0.05,0.12 0.12,0.12 z&quot;
               style=&quot;fill:#4979c0;fill-opacity:0.25098;fill-rule:evenodd;stroke:none&quot;
               id=&quot;path566&quot; /&gt;
            &lt;path
               d=&quot;m 546.38,188.88 h 186.84 v 28.346 H 546.38 Z&quot;
               style=&quot;fill:#e8eef7;fill-opacity:1;fill-rule:evenodd;stroke:none&quot;
               id=&quot;path568&quot; /&gt;
            &lt;path
               d=&quot;m 546.38,188.88 h 186.84 v 28.346 H 546.38 Z&quot;
               style=&quot;fill:none;stroke:#000000;stroke-width:0.24;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
               id=&quot;path570&quot; /&gt;
            &lt;g
               id=&quot;g572&quot;&gt;
              &lt;g
                 id=&quot;g574&quot;
                 clip-path=&quot;url(#clipPath578)&quot;&gt;
                &lt;text
                   transform=&quot;matrix(1,0,0,-1,554.58,199.5)&quot;
                   style=&quot;font-style:italic;font-variant:normal;font-weight:normal;font-size:9.775px;font-family:Arial;-inkscape-font-specification:Arial-ItalicMT;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
                   id=&quot;text582&quot;&gt;&lt;tspan
                     x=&quot;0 5.2491751 8.240325 15.004625 18.00555 23.997625 29.246799 35.238876 39.735374 42.726524 44.965 50.214176 56.206249 62.980324 68.972397 71.963547 77.212723 82.452126 87.701302 90.692451 98.962097 104.21127 110.20335 115.45252 121.4446 126.69377 134.96342 140.95551 146.20468 149.19583 155.16835 159.69417 165.68625&quot;
                     y=&quot;0&quot;
                     sodipodi:role=&quot;line&quot;
                     id=&quot;tspan580&quot;&gt;3:ProductionDatasetManagementType&lt;/tspan&gt;&lt;/text&gt;
              &lt;/g&gt;
            &lt;/g&gt;
            &lt;path
               d=&quot;m 517.18,203.06 h 18.85&quot;
               style=&quot;fill:none;stroke:#000000;stroke-width:0.24;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
               id=&quot;path584&quot; /&gt;
            &lt;path
               d=&quot;m 540.86,203.06 -5.52,2.76 v -5.52 z m 5.52,0 -5.52,2.76 v -5.52 z&quot;
               style=&quot;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none&quot;
               id=&quot;path586&quot; /&gt;
            &lt;path
               d=&quot;M 330.1,731.2 V 203.06 h 28.69&quot;
               style=&quot;fill:none;stroke:#000000;stroke-width:0.24;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
               id=&quot;path588&quot; /&gt;
            &lt;path
               d=&quot;m 354.65,205.13 v -4.14&quot;
               style=&quot;fill:none;stroke:#000000;stroke-width:0.24;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
               id=&quot;path590&quot; /&gt;
            &lt;path
               d=&quot;m 726.95,343.82 c 3.13,0 5.67,2.54 5.67,5.67 v 17.01 c 0,3.13 -2.54,5.67 -5.67,5.67 h -87.88 c -3.13,0 -5.66,-2.54 -5.66,-5.67 v -17.01 c 0,-3.13 2.53,-5.67 5.66,-5.67 z&quot;
               style=&quot;fill:#e8eef7;fill-opacity:1;fill-rule:evenodd;stroke:none&quot;
               id=&quot;path592&quot; /&gt;
            &lt;path
               d=&quot;m 726.95,343.82 c 3.13,0 5.67,2.54 5.67,5.67 v 17.01 c 0,3.13 -2.54,5.67 -5.67,5.67 h -87.88 c -3.13,0 -5.66,-2.54 -5.66,-5.67 v -17.01 c 0,-3.13 2.53,-5.67 5.66,-5.67 z&quot;
               style=&quot;fill:none;stroke:#000000;stroke-width:0.24;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
               id=&quot;path594&quot; /&gt;
            &lt;g
               id=&quot;g596&quot;&gt;
              &lt;g
                 id=&quot;g598&quot;
                 clip-path=&quot;url(#clipPath602)&quot;&gt;
                &lt;text
                   transform=&quot;matrix(1,0,0,-1,650.4,354.57)&quot;
                   style=&quot;font-variant:normal;font-weight:normal;font-size:9.775px;font-family:Arial;-inkscape-font-specification:ArialMT;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
                   id=&quot;text606&quot;&gt;&lt;tspan
                     x=&quot;0 5.2491751 8.240325 15.727975 20.97715 26.969225 32.218399 38.96315 44.212326 47.95615 52.452648 54.691124 60.683201&quot;
                     y=&quot;0&quot;
                     sodipodi:role=&quot;line&quot;
                     id=&quot;tspan604&quot;&gt;0:NodeVersion&lt;/tspan&gt;&lt;/text&gt;
              &lt;/g&gt;
            &lt;/g&gt;
            &lt;path
               d=&quot;m 633.41,307.71 h 99.213 v 28.346 H 633.41 Z&quot;
               style=&quot;fill:#e8eef7;fill-opacity:1;fill-rule:evenodd;stroke:none&quot;
               id=&quot;path608&quot; /&gt;
            &lt;path
               d=&quot;m 633.41,307.71 h 99.213 v 28.346 H 633.41 Z&quot;
               style=&quot;fill:none;stroke:#000000;stroke-width:0.24;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
               id=&quot;path610&quot; /&gt;
            &lt;g
               id=&quot;g612&quot;&gt;
              &lt;g
                 id=&quot;g614&quot;
                 clip-path=&quot;url(#clipPath618)&quot;&gt;
                &lt;text
                   transform=&quot;matrix(1,0,0,-1,642.05,318.42)&quot;
                   style=&quot;font-variant:normal;font-weight:normal;font-size:9.75px;font-family:Arial;-inkscape-font-specification:ArialMT;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
                   id=&quot;text622&quot;&gt;&lt;tspan
                     x=&quot;0 2.9932499 8.2387505 10.48125 15.72675 20.9625 23.95575 26.19825 31.44375 37.430248 44.17725 50.16375 52.40625 54.658501 60.645 66.6315 73.378502 77.122498&quot;
                     y=&quot;0&quot;
                     sodipodi:role=&quot;line&quot;
                     id=&quot;tspan620&quot;&gt;InjectionUnit_&amp;lt;Nr&amp;gt;&lt;/tspan&gt;&lt;/text&gt;
              &lt;/g&gt;
            &lt;/g&gt;
            &lt;path
               d=&quot;m 764.29,327.18 c 0,0 0,0 0,0 h 90.27 c 0.06,0 0.12,-0.06 0.12,-0.12 v -28.35 c 0,-0.06 -0.06,-0.12 -0.12,-0.12 h -90.27 c -0.06,0 -0.12,0.06 -0.12,0.12 v 28.35 c 0,0.06 0.06,0.12 0.12,0.12 z&quot;
               style=&quot;fill:#4979c0;fill-opacity:0.25098;fill-rule:evenodd;stroke:none&quot;
               id=&quot;path624&quot; /&gt;
            &lt;path
               d=&quot;m 755.29,307.71 h 90.261 v 28.346 H 755.29 Z&quot;
               style=&quot;fill:#e8eef7;fill-opacity:1;fill-rule:evenodd;stroke:none&quot;
               id=&quot;path626&quot; /&gt;
            &lt;path
               d=&quot;m 755.29,307.71 h 90.261 v 28.346 H 755.29 Z&quot;
               style=&quot;fill:none;stroke:#000000;stroke-width:0.24;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
               id=&quot;path628&quot; /&gt;
            &lt;g
               id=&quot;g630&quot;&gt;
              &lt;g
                 id=&quot;g632&quot;
                 clip-path=&quot;url(#clipPath636)&quot;&gt;
                &lt;text
                   transform=&quot;matrix(1,0,0,-1,762.32,318.42)&quot;
                   style=&quot;font-style:italic;font-variant:normal;font-weight:normal;font-size:9.75px;font-family:Arial;-inkscape-font-specification:Arial-ItalicMT;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
                   id=&quot;text640&quot;&gt;&lt;tspan
                     x=&quot;0 2.9932499 8.2679996 10.5105 15.78525 21.050249 24.043501 26.285999 31.560749 37.5765 44.352749 50.3685 52.611 54.863251 61.629749 66.153748 72.169502&quot;
                     y=&quot;0&quot;
                     sodipodi:role=&quot;line&quot;
                     id=&quot;tspan638&quot;&gt;InjectionUnitType&lt;/tspan&gt;&lt;/text&gt;
              &lt;/g&gt;
            &lt;/g&gt;
            &lt;path
               d=&quot;m 732.62,321.89 h 12.32&quot;
               style=&quot;fill:none;stroke:#000000;stroke-width:0.24;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
               id=&quot;path642&quot; /&gt;
            &lt;path
               d=&quot;m 749.77,321.89 -5.52,2.76 v -5.52 z m 5.52,0 -5.52,2.76 v -5.52 z&quot;
               style=&quot;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none&quot;
               id=&quot;path644&quot; /&gt;
            &lt;path
               d=&quot;m 909.78,260.35 c 3.13,0 5.67,2.53 5.67,5.67 v 17 c 0,3.13 -2.54,5.67 -5.67,5.67 H 818.1 c -3.13,0 -5.66,-2.54 -5.66,-5.67 v -17 c 0,-3.14 2.53,-5.67 5.66,-5.67 z&quot;
               style=&quot;fill:#e8eef7;fill-opacity:1;fill-rule:evenodd;stroke:none&quot;
               id=&quot;path646&quot; /&gt;
            &lt;path
               d=&quot;m 909.78,260.35 c 3.13,0 5.67,2.53 5.67,5.67 v 17 c 0,3.13 -2.54,5.67 -5.67,5.67 H 818.1 c -3.13,0 -5.66,-2.54 -5.66,-5.67 v -17 c 0,-3.14 2.53,-5.67 5.66,-5.67 z&quot;
               style=&quot;fill:none;stroke:#000000;stroke-width:0.24;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
               id=&quot;path648&quot; /&gt;
            &lt;g
               id=&quot;g650&quot;&gt;
              &lt;g
                 id=&quot;g652&quot;
                 clip-path=&quot;url(#clipPath656)&quot;&gt;
                &lt;text
                   transform=&quot;matrix(1,0,0,-1,852.32,271.02)&quot;
                   style=&quot;font-variant:normal;font-weight:normal;font-size:9.775px;font-family:Arial;-inkscape-font-specification:ArialMT;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
                   id=&quot;text660&quot;&gt;&lt;tspan
                     x=&quot;0 2.9911499 8.240325 14.2324 19.481575&quot;
                     y=&quot;0&quot;
                     sodipodi:role=&quot;line&quot;
                     id=&quot;tspan658&quot;&gt;Index&lt;/tspan&gt;&lt;/text&gt;
              &lt;/g&gt;
            &lt;/g&gt;
            &lt;path
               d=&quot;m 909.78,224.91 c 3.13,0 5.67,2.54 5.67,5.67 v 17.01 c 0,3.13 -2.54,5.67 -5.67,5.67 H 818.1 c -3.13,0 -5.66,-2.54 -5.66,-5.67 v -17.01 c 0,-3.13 2.53,-5.67 5.66,-5.67 z&quot;
               style=&quot;fill:#e8eef7;fill-opacity:1;fill-rule:evenodd;stroke:none&quot;
               id=&quot;path662&quot; /&gt;
            &lt;path
               d=&quot;m 909.78,224.91 c 3.13,0 5.67,2.54 5.67,5.67 v 17.01 c 0,3.13 -2.54,5.67 -5.67,5.67 H 818.1 c -3.13,0 -5.66,-2.54 -5.66,-5.67 v -17.01 c 0,-3.13 2.53,-5.67 5.66,-5.67 z&quot;
               style=&quot;fill:none;stroke:#000000;stroke-width:0.24;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
               id=&quot;path664&quot; /&gt;
            &lt;g
               id=&quot;g666&quot;&gt;
              &lt;g
                 id=&quot;g668&quot;
                 clip-path=&quot;url(#clipPath672)&quot;&gt;
                &lt;text
                   transform=&quot;matrix(1,0,0,-1,847.03,235.55)&quot;
                   style=&quot;font-variant:normal;font-weight:normal;font-size:9.75px;font-family:Arial;-inkscape-font-specification:ArialMT;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
                   id=&quot;text676&quot;&gt;&lt;tspan
                     x=&quot;0 6.7665 12.04125 15.80475 18.82725 24.843 27.105 29.376751&quot;
                     y=&quot;0&quot;
                     sodipodi:role=&quot;line&quot;
                     id=&quot;tspan674&quot;&gt;BarrelId&lt;/tspan&gt;&lt;/text&gt;
              &lt;/g&gt;
            &lt;/g&gt;
            &lt;path
               d=&quot;m 909.78,189.48 c 3.13,0 5.67,2.54 5.67,5.67 v 17.01 c 0,3.13 -2.54,5.67 -5.67,5.67 H 818.1 c -3.13,0 -5.66,-2.54 -5.66,-5.67 v -17.01 c 0,-3.13 2.53,-5.67 5.66,-5.67 z&quot;
               style=&quot;fill:#e8eef7;fill-opacity:1;fill-rule:evenodd;stroke:none&quot;
               id=&quot;path678&quot; /&gt;
            &lt;path
               d=&quot;m 909.78,189.48 c 3.13,0 5.67,2.54 5.67,5.67 v 17.01 c 0,3.13 -2.54,5.67 -5.67,5.67 H 818.1 c -3.13,0 -5.66,-2.54 -5.66,-5.67 v -17.01 c 0,-3.13 2.53,-5.67 5.66,-5.67 z&quot;
               style=&quot;fill:none;stroke:#000000;stroke-width:0.24;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
               id=&quot;path680&quot; /&gt;
            &lt;g
               id=&quot;g682&quot;&gt;
              &lt;g
                 id=&quot;g684&quot;
                 clip-path=&quot;url(#clipPath688)&quot;&gt;
                &lt;text
                   transform=&quot;matrix(1,0,0,-1,843.42,200.07)&quot;
                   style=&quot;font-variant:normal;font-weight:normal;font-size:9.75px;font-family:Arial;-inkscape-font-specification:ArialMT;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
                   id=&quot;text692&quot;&gt;&lt;tspan
                     x=&quot;0 2.9932499 7.4977498 14.235 17.979 23.224501 28.460251 33.70575 39.692249&quot;
                     y=&quot;0&quot;
                     sodipodi:role=&quot;line&quot;
                     id=&quot;tspan690&quot;&gt;IsPresent&lt;/tspan&gt;&lt;/text&gt;
              &lt;/g&gt;
            &lt;/g&gt;
            &lt;path
               d=&quot;m 909.78,154.05 c 3.13,0 5.67,2.53 5.67,5.67 v 17 c 0,3.13 -2.54,5.67 -5.67,5.67 H 818.1 c -3.13,0 -5.66,-2.54 -5.66,-5.67 v -17 c 0,-3.14 2.53,-5.67 5.66,-5.67 z&quot;
               style=&quot;fill:#e8eef7;fill-opacity:1;fill-rule:evenodd;stroke:none&quot;
               id=&quot;path694&quot; /&gt;
            &lt;path
               d=&quot;m 909.78,154.05 c 3.13,0 5.67,2.53 5.67,5.67 v 17 c 0,3.13 -2.54,5.67 -5.67,5.67 H 818.1 c -3.13,0 -5.66,-2.54 -5.66,-5.67 v -17 c 0,-3.14 2.53,-5.67 5.66,-5.67 z&quot;
               style=&quot;fill:none;stroke:#000000;stroke-width:0.24;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
               id=&quot;path696&quot; /&gt;
            &lt;g
               id=&quot;g698&quot;&gt;
              &lt;g
                 id=&quot;g700&quot;
                 clip-path=&quot;url(#clipPath704)&quot;&gt;
                &lt;text
                   transform=&quot;matrix(1,0,0,-1,836.45,164.62)&quot;
                   style=&quot;font-variant:normal;font-weight:normal;font-size:9.75px;font-family:Arial;-inkscape-font-specification:ArialMT;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
                   id=&quot;text708&quot;&gt;&lt;tspan
                     x=&quot;0 3.0127499 8.2875004 15.054 18.0765 24.092251 29.367001 35.382751 39.90675 42.919498 45.181499 50.456249&quot;
                     y=&quot;0&quot;
                     sodipodi:role=&quot;line&quot;
                     id=&quot;tspan706&quot;&gt;InProduction&lt;/tspan&gt;&lt;/text&gt;
              &lt;/g&gt;
            &lt;/g&gt;
            &lt;path
               d=&quot;m 608.66,390.14 v -32.15 h 24.75&quot;
               style=&quot;fill:none;stroke:#000000;stroke-width:0.24;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
               id=&quot;path710&quot; /&gt;
            &lt;path
               d=&quot;m 627.2,360.06 v -4.14 m 2.07,4.14 v -4.14&quot;
               style=&quot;fill:none;stroke:#000000;stroke-width:0.24;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
               id=&quot;path712&quot; /&gt;
            &lt;path
               d=&quot;m 608.66,390.14 v -68.26 h 24.75&quot;
               style=&quot;fill:none;stroke:#000000;stroke-width:0.24;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
               id=&quot;path714&quot; /&gt;
            &lt;path
               d=&quot;m 629.27,323.95 v -4.14&quot;
               style=&quot;fill:none;stroke:#000000;stroke-width:0.24;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
               id=&quot;path716&quot; /&gt;
            &lt;path
               d=&quot;m 800.43,307.71 v -33.19 h 12.01&quot;
               style=&quot;fill:none;stroke:#000000;stroke-width:0.24;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
               id=&quot;path718&quot; /&gt;
            &lt;path
               d=&quot;m 806.23,276.59 v -4.14 m 2.07,4.14 v -4.14&quot;
               style=&quot;fill:none;stroke:#000000;stroke-width:0.24;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
               id=&quot;path720&quot; /&gt;
            &lt;path
               d=&quot;m 800.43,307.71 v -68.62 h 12.01&quot;
               style=&quot;fill:none;stroke:#000000;stroke-width:0.24;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
               id=&quot;path722&quot; /&gt;
            &lt;path
               d=&quot;m 806.23,241.16 v -4.14 m 2.07,4.14 v -4.14&quot;
               style=&quot;fill:none;stroke:#000000;stroke-width:0.24;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
               id=&quot;path724&quot; /&gt;
            &lt;path
               d=&quot;M 800.43,307.71 V 203.65 h 12.01&quot;
               style=&quot;fill:none;stroke:#000000;stroke-width:0.24;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
               id=&quot;path726&quot; /&gt;
            &lt;path
               d=&quot;m 806.23,205.72 v -4.14 m 2.07,4.14 v -4.14&quot;
               style=&quot;fill:none;stroke:#000000;stroke-width:0.24;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
               id=&quot;path728&quot; /&gt;
            &lt;path
               d=&quot;M 800.43,307.71 V 168.22 h 12.01&quot;
               style=&quot;fill:none;stroke:#000000;stroke-width:0.24;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
               id=&quot;path730&quot; /&gt;
            &lt;path
               d=&quot;m 806.23,170.29 v -4.14 m 2.07,4.14 v -4.14&quot;
               style=&quot;fill:none;stroke:#000000;stroke-width:0.24;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
               id=&quot;path732&quot; /&gt;
            &lt;path
               d=&quot;m 909.78,117.49 c 3.13,0 5.67,2.54 5.67,5.67 v 17.01 c 0,3.13 -2.54,5.67 -5.67,5.67 H 818.1 c -3.13,0 -5.66,-2.54 -5.66,-5.67 v -17.01 c 0,-3.13 2.53,-5.67 5.66,-5.67 z&quot;
               style=&quot;fill:#e8eef7;fill-opacity:1;fill-rule:evenodd;stroke:none&quot;
               id=&quot;path734&quot; /&gt;
            &lt;path
               d=&quot;m 909.78,117.49 c 3.13,0 5.67,2.54 5.67,5.67 v 17.01 c 0,3.13 -2.54,5.67 -5.67,5.67 H 818.1 c -3.13,0 -5.66,-2.54 -5.66,-5.67 v -17.01 c 0,-3.13 2.53,-5.67 5.66,-5.67 z&quot;
               style=&quot;fill:none;stroke:#000000;stroke-width:0.24;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
               id=&quot;path736&quot; /&gt;
            &lt;g
               id=&quot;g738&quot;&gt;
              &lt;g
                 id=&quot;g740&quot;
                 clip-path=&quot;url(#clipPath744)&quot;&gt;
                &lt;text
                   transform=&quot;matrix(1,0,0,-1,846.48,128.02)&quot;
                   style=&quot;font-variant:normal;font-weight:normal;font-size:9.75px;font-family:Arial;-inkscape-font-specification:ArialMT;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
                   id=&quot;text748&quot;&gt;&lt;tspan
                     x=&quot;0 6.7372499 11.973 14.976 20.2215 27.709499 30.702749&quot;
                     y=&quot;0&quot;
                     sodipodi:role=&quot;line&quot;
                     id=&quot;tspan746&quot;&gt;ScrewId&lt;/tspan&gt;&lt;/text&gt;
              &lt;/g&gt;
            &lt;/g&gt;
            &lt;path
               d=&quot;m 909.78,80.943 c 3.13,0 5.67,2.538 5.67,5.669 v 17.008 c 0,3.13 -2.54,5.67 -5.67,5.67 H 818.1 c -3.13,0 -5.66,-2.54 -5.66,-5.67 V 86.612 c 0,-3.131 2.53,-5.669 5.66,-5.669 z&quot;
               style=&quot;fill:#e8eef7;fill-opacity:1;fill-rule:evenodd;stroke:none&quot;
               id=&quot;path750&quot; /&gt;
            &lt;path
               d=&quot;m 909.78,80.943 c 3.13,0 5.67,2.538 5.67,5.669 v 17.008 c 0,3.13 -2.54,5.67 -5.67,5.67 H 818.1 c -3.13,0 -5.66,-2.54 -5.66,-5.67 V 86.612 c 0,-3.131 2.53,-5.669 5.66,-5.669 z&quot;
               style=&quot;fill:none;stroke:#000000;stroke-width:0.24;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
               id=&quot;path752&quot; /&gt;
            &lt;g
               id=&quot;g754&quot;&gt;
              &lt;g
                 id=&quot;g756&quot;
                 clip-path=&quot;url(#clipPath760)&quot;&gt;
                &lt;text
                   transform=&quot;matrix(1,0,0,-1,830.35,91.45)&quot;
                   style=&quot;font-variant:normal;font-weight:normal;font-size:9.75px;font-family:Arial;-inkscape-font-specification:ArialMT;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
                   id=&quot;text764&quot;&gt;&lt;tspan
                     x=&quot;0 6.7372499 11.973 14.976 20.2215 27.709499 35.197498 37.439999 42.685501 50.924252 56.910751 59.162998 65.149498&quot;
                     y=&quot;0&quot;
                     sodipodi:role=&quot;line&quot;
                     id=&quot;tspan762&quot;&gt;ScrewDiameter&lt;/tspan&gt;&lt;/text&gt;
              &lt;/g&gt;
            &lt;/g&gt;
            &lt;path
               d=&quot;M 800.43,307.71 V 131.67 h 12.01&quot;
               style=&quot;fill:none;stroke:#000000;stroke-width:0.24;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
               id=&quot;path766&quot; /&gt;
            &lt;path
               d=&quot;m 806.23,133.74 v -4.14 m 2.07,4.14 v -4.14&quot;
               style=&quot;fill:none;stroke:#000000;stroke-width:0.24;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
               id=&quot;path768&quot; /&gt;
            &lt;path
               d=&quot;m 909.78,46.628 c 3.13,0 5.67,2.539 5.67,5.67 v 17.008 c 0,3.131 -2.54,5.669 -5.67,5.669 H 818.1 c -3.13,0 -5.66,-2.538 -5.66,-5.669 V 52.298 c 0,-3.131 2.53,-5.67 5.66,-5.67 z&quot;
               style=&quot;fill:#e8eef7;fill-opacity:1;fill-rule:evenodd;stroke:none&quot;
               id=&quot;path770&quot; /&gt;
            &lt;path
               d=&quot;m 909.78,46.628 c 3.13,0 5.67,2.539 5.67,5.67 v 17.008 c 0,3.131 -2.54,5.669 -5.67,5.669 H 818.1 c -3.13,0 -5.66,-2.538 -5.66,-5.669 V 52.298 c 0,-3.131 2.53,-5.67 5.66,-5.67 z&quot;
               style=&quot;fill:none;stroke:#000000;stroke-width:0.24;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
               id=&quot;path772&quot; /&gt;
            &lt;g
               id=&quot;g774&quot;&gt;
              &lt;g
                 id=&quot;g776&quot;
                 clip-path=&quot;url(#clipPath780)&quot;&gt;
                &lt;text
                   transform=&quot;matrix(1,0,0,-1,833.7,57.1)&quot;
                   style=&quot;font-variant:normal;font-weight:normal;font-size:9.75px;font-family:Arial;-inkscape-font-specification:ArialMT;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
                   id=&quot;text784&quot;&gt;&lt;tspan
                     x=&quot;0 6.7372499 11.973 14.976 20.2215 27.709499 34.446751 39.692249 41.93475 47.921249 56.16&quot;
                     y=&quot;0&quot;
                     sodipodi:role=&quot;line&quot;
                     id=&quot;tspan782&quot;&gt;ScrewVolume&lt;/tspan&gt;&lt;/text&gt;
              &lt;/g&gt;
            &lt;/g&gt;
            &lt;path
               d=&quot;M 812.44,10.076 H 915.46 V 38.422 H 812.44 Z&quot;
               style=&quot;fill:#e8eef7;fill-opacity:1;fill-rule:evenodd;stroke:none&quot;
               id=&quot;path786&quot; /&gt;
            &lt;path
               d=&quot;M 812.44,10.076 H 915.46 V 38.422 H 812.44 Z&quot;
               style=&quot;fill:none;stroke:#000000;stroke-width:0.24;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
               id=&quot;path788&quot; /&gt;
            &lt;g
               id=&quot;g790&quot;&gt;
              &lt;g
                 id=&quot;g792&quot;
                 clip-path=&quot;url(#clipPath796)&quot;&gt;
                &lt;text
                   transform=&quot;matrix(1,0,0,-1,822,20.525)&quot;
                   style=&quot;font-variant:normal;font-weight:normal;font-size:9.775px;font-family:Arial;-inkscape-font-specification:ArialMT;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
                   id=&quot;text800&quot;&gt;&lt;tspan
                     x=&quot;0 5.9725251 11.993925 20.234249 25.483425 30.732599 34.476425 39.725601 42.716751 47.965923 51.709751 56.958923 62.93145 68.95285 74.202026 80.194099&quot;
                     y=&quot;0&quot;
                     sodipodi:role=&quot;line&quot;
                     id=&quot;tspan798&quot;&gt;TemperatureZones&lt;/tspan&gt;&lt;/text&gt;
              &lt;/g&gt;
            &lt;/g&gt;
            &lt;path
               d=&quot;m 945.71,29.543 c 0,0 0,0 0,0 h 124.3 c 0.07,0 0.12,-0.054 0.12,-0.12 V 1.0764 c 0,-0.0663 -0.05,-0.11998 -0.12,-0.11998 h -124.3 c -0.06,0 -0.12,0.05368 -0.12,0.11998 V 29.423 c 0,0.066 0.06,0.12 0.12,0.12 z&quot;
               style=&quot;fill:#4979c0;fill-opacity:0.25098;fill-rule:evenodd;stroke:none&quot;
               id=&quot;path802&quot; /&gt;
            &lt;path
               d=&quot;m 936.71,10.076 h 124.3 v 28.346 h -124.3 z&quot;
               style=&quot;fill:#e8eef7;fill-opacity:1;fill-rule:evenodd;stroke:none&quot;
               id=&quot;path804&quot; /&gt;
            &lt;path
               d=&quot;m 936.71,10.076 h 124.3 v 28.346 h -124.3 z&quot;
               style=&quot;fill:none;stroke:#000000;stroke-width:0.24;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
               id=&quot;path806&quot; /&gt;
            &lt;g
               id=&quot;g808&quot;&gt;
              &lt;g
                 id=&quot;g810&quot;
                 clip-path=&quot;url(#clipPath814)&quot;&gt;
                &lt;text
                   transform=&quot;matrix(1,0,0,-1,941.72,20.525)&quot;
                   style=&quot;font-style:italic;font-variant:normal;font-weight:normal;font-size:9.775px;font-family:Arial;-inkscape-font-specification:Arial-ItalicMT;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
                   id=&quot;text818&quot;&gt;&lt;tspan
                     x=&quot;0 5.2491751 8.240325 14.21285 20.234249 28.474575 33.723751 39.715824 42.716751 47.965923 50.957073 56.94915 59.950073 65.199249 71.944 77.193176 82.442352 88.434425 93.673828 99.646347 104.17217 110.16425&quot;
                     y=&quot;0&quot;
                     sodipodi:role=&quot;line&quot;
                     id=&quot;tspan816&quot;&gt;3:TemperatureZonesType&lt;/tspan&gt;&lt;/text&gt;
              &lt;/g&gt;
            &lt;/g&gt;
            &lt;path
               d=&quot;m 915.45,24.25 h 10.91&quot;
               style=&quot;fill:none;stroke:#000000;stroke-width:0.24;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
               id=&quot;path820&quot; /&gt;
            &lt;path
               d=&quot;m 931.19,24.25 -5.52,2.76 v -5.52 z m 5.52,0 -5.52,2.76 v -5.52 z&quot;
               style=&quot;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none&quot;
               id=&quot;path822&quot; /&gt;
            &lt;path
               d=&quot;M 800.43,307.71 V 24.25 h 12.01&quot;
               style=&quot;fill:none;stroke:#000000;stroke-width:0.24;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
               id=&quot;path824&quot; /&gt;
            &lt;path
               d=&quot;M 808.3,26.32 V 22.18&quot;
               style=&quot;fill:none;stroke:#000000;stroke-width:0.24;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
               id=&quot;path826&quot; /&gt;
            &lt;path
               d=&quot;M 800.43,307.71 V 95.116 h 12.01&quot;
               style=&quot;fill:none;stroke:#000000;stroke-width:0.24;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
               id=&quot;path828&quot; /&gt;
            &lt;path
               d=&quot;m 806.23,97.186 v -4.14 m 2.07,4.14 v -4.14&quot;
               style=&quot;fill:none;stroke:#000000;stroke-width:0.24;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
               id=&quot;path830&quot; /&gt;
            &lt;path
               d=&quot;M 800.43,307.71 V 60.802 h 12.01&quot;
               style=&quot;fill:none;stroke:#000000;stroke-width:0.24;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
               id=&quot;path832&quot; /&gt;
            &lt;path
               d=&quot;m 806.23,62.872 v -4.14 m 2.07,4.14 v -4.14&quot;
               style=&quot;fill:none;stroke:#000000;stroke-width:0.24;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
               id=&quot;path834&quot; /&gt;
            &lt;path
               d=&quot;m 1.245,784.16 h 152.68 v 28.346 H 1.245 Z&quot;
               style=&quot;fill:#e8eef7;fill-opacity:1;fill-rule:evenodd;stroke:none&quot;
               id=&quot;path836&quot; /&gt;
            &lt;path
               d=&quot;m 1.245,784.16 h 152.68 v 28.346 H 1.245 Z&quot;
               style=&quot;fill:none;stroke:#000000;stroke-width:0.24;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
               id=&quot;path838&quot; /&gt;
            &lt;g
               id=&quot;g840&quot;&gt;
              &lt;g
                 id=&quot;g842&quot;
                 clip-path=&quot;url(#clipPath846)&quot;&gt;
                &lt;text
                   transform=&quot;matrix(1,0,0,-1,50.675,795.32)&quot;
                   style=&quot;font-variant:normal;font-weight:normal;font-size:9.775px;font-family:Arial;-inkscape-font-specification:ArialMT;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
                   id=&quot;text850&quot;&gt;&lt;tspan
                     x=&quot;0 5.2491751 8.240325 15.727975 20.97715 26.216551 28.455025 32.951527 38.9436 45.688351 50.937527&quot;
                     y=&quot;0&quot;
                     sodipodi:role=&quot;line&quot;
                     id=&quot;tspan848&quot;&gt;2:DeviceSet&lt;/tspan&gt;&lt;/text&gt;
              &lt;/g&gt;
            &lt;/g&gt;
            &lt;path
               d=&quot;M 26.692,784.16 V 745.37 H 41.16&quot;
               style=&quot;fill:none;stroke:#000000;stroke-width:0.24;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
               id=&quot;path852&quot; /&gt;
            &lt;path
               d=&quot;M 37.02,747.44 V 743.3&quot;
               style=&quot;fill:none;stroke:#000000;stroke-width:0.24;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
               id=&quot;path854&quot; /&gt;
            &lt;path
               d=&quot;m 41.16,731.2 h 201.06 v 28.346 H 41.16 Z&quot;
               style=&quot;fill:#e8eef7;fill-opacity:1;fill-rule:evenodd;stroke:none&quot;
               id=&quot;path856&quot; /&gt;
            &lt;path
               d=&quot;m 41.16,731.2 h 201.06 v 28.346 H 41.16 Z&quot;
               style=&quot;fill:none;stroke:#000000;stroke-width:0.24;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
               id=&quot;path858&quot; /&gt;
            &lt;g
               id=&quot;g860&quot;&gt;
              &lt;g
                 id=&quot;g862&quot;
                 clip-path=&quot;url(#clipPath866)&quot;&gt;
                &lt;text
                   transform=&quot;matrix(1,0,0,-1,54.75,742.3)&quot;
                   style=&quot;font-variant:normal;font-weight:normal;font-size:9.75px;font-family:Arial;-inkscape-font-specification:ArialMT;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
                   id=&quot;text870&quot;&gt;&lt;tspan
                     x=&quot;0 2.9932499 11.232 19.470751 24.716249 30.702749 38.941502 44.928001 50.1735 55.418999 58.412251 64.39875 68.903252 71.8965 77.141998 80.886002 86.1315 89.875504 95.121002 101.1075 107.094 113.83125 119.07675 122.07975 124.32225 130.30875 132.55125 139.29825 145.28474 153.5235 158.769 164.75549 167.7585&quot;
                     y=&quot;0&quot;
                     sodipodi:role=&quot;line&quot;
                     id=&quot;tspan868&quot;&gt;IMM_&amp;lt;Manufacturer&amp;gt;_&amp;lt;SerialNumber&amp;gt;&lt;/tspan&gt;&lt;/text&gt;
              &lt;/g&gt;
            &lt;/g&gt;
            &lt;path
               d=&quot;m 242.22,745.37 h 10.91&quot;
               style=&quot;fill:none;stroke:#000000;stroke-width:0.24;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
               id=&quot;path872&quot; /&gt;
            &lt;path
               d=&quot;m 257.96,745.37 -5.52,2.76 v -5.52 z m 5.52,0 -5.52,2.76 v -5.52 z&quot;
               style=&quot;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none&quot;
               id=&quot;path874&quot; /&gt;
            &lt;path
               d=&quot;m 806.39,750.66 c 0,0 0,0 0,0 h 145.98 c 0.07,0 0.12,-0.05 0.12,-0.12 V 722.2 c 0,-0.07 -0.05,-0.12 -0.12,-0.12 H 806.39 c -0.07,0 -0.12,0.05 -0.12,0.12 v 28.34 c 0,0.07 0.05,0.12 0.12,0.12 z&quot;
               style=&quot;fill:#4979c0;fill-opacity:0.25098;fill-rule:evenodd;stroke:none&quot;
               id=&quot;path876&quot; /&gt;
            &lt;path
               d=&quot;m 797.39,731.2 h 145.98 v 28.346 H 797.39 Z&quot;
               style=&quot;fill:#e8eef7;fill-opacity:1;fill-rule:evenodd;stroke:none&quot;
               id=&quot;path878&quot; /&gt;
            &lt;path
               d=&quot;m 797.39,731.2 h 145.98 v 28.346 H 797.39 Z&quot;
               style=&quot;fill:none;stroke:#000000;stroke-width:0.24;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
               id=&quot;path880&quot; /&gt;
            &lt;g
               id=&quot;g882&quot;&gt;
              &lt;g
                 id=&quot;g884&quot;
                 clip-path=&quot;url(#clipPath888)&quot;&gt;
                &lt;text
                   transform=&quot;matrix(1,0,0,-1,823.7,742.3)&quot;
                   style=&quot;font-style:italic;font-variant:normal;font-weight:normal;font-size:9.75px;font-family:Arial;-inkscape-font-specification:Arial-ItalicMT;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
                   id=&quot;text892&quot;&gt;&lt;tspan
                     x=&quot;0 5.2455001 8.2387505 14.22525 19.470751 24.716249 30.702749 35.94825 41.93475 46.439251 53.20575 58.441502 63.687 69.6735 71.925751 78.692253 83.196747 89.18325&quot;
                     y=&quot;0&quot;
                     sodipodi:role=&quot;line&quot;
                     id=&quot;tspan890&quot;&gt;3:LogbookEventType&lt;/tspan&gt;&lt;/text&gt;
              &lt;/g&gt;
            &lt;/g&gt;
            &lt;path
               d=&quot;m 396.71,745.37 h 369.5 v -35.14 h 26.35&quot;
               style=&quot;fill:none;stroke:#000000;stroke-width:0.24;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
               id=&quot;path894&quot; /&gt;
            &lt;path
               d=&quot;m 791.87,712.99 5.52,-2.76 -5.52,-2.76 z&quot;
               style=&quot;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none&quot;
               id=&quot;path896&quot; /&gt;
            &lt;path
               d=&quot;m 806.39,715.53 c 0,0 0,0 0,0 h 145.98 c 0.07,0 0.12,-0.06 0.12,-0.12 v -28.35 c 0,-0.07 -0.05,-0.12 -0.12,-0.12 H 806.39 c -0.07,0 -0.12,0.05 -0.12,0.12 v 28.35 c 0,0.06 0.05,0.12 0.12,0.12 z&quot;
               style=&quot;fill:#4979c0;fill-opacity:0.25098;fill-rule:evenodd;stroke:none&quot;
               id=&quot;path898&quot; /&gt;
            &lt;path
               d=&quot;m 797.39,696.06 h 145.98 v 28.346 H 797.39 Z&quot;
               style=&quot;fill:#e8eef7;fill-opacity:1;fill-rule:evenodd;stroke:none&quot;
               id=&quot;path900&quot; /&gt;
            &lt;path
               d=&quot;m 797.39,696.06 h 145.98 v 28.346 H 797.39 Z&quot;
               style=&quot;fill:none;stroke:#000000;stroke-width:0.24;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
               id=&quot;path902&quot; /&gt;
            &lt;g
               id=&quot;g904&quot;&gt;
              &lt;g
                 id=&quot;g906&quot;
                 clip-path=&quot;url(#clipPath910)&quot;&gt;
                &lt;text
                   transform=&quot;matrix(1,0,0,-1,804.53,707.12)&quot;
                   style=&quot;font-style:italic;font-variant:normal;font-weight:normal;font-size:9.75px;font-family:Arial;-inkscape-font-specification:Arial-ItalicMT;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
                   id=&quot;text914&quot;&gt;&lt;tspan
                     x=&quot;0 5.2747502 8.2679996 15.78525 20.30925 25.574249 27.81675 33.091499 39.858002 45.873749 48.876751 54.892502 63.1605 68.435249 71.428497 76.703247 80.44725 84.971252 91.737747 97.002747 102.2775 108.29325 110.5455 117.312 121.836 127.85175&quot;
                     y=&quot;0&quot;
                     sodipodi:role=&quot;line&quot;
                     id=&quot;tspan912&quot;&gt;3:CycleParametersEventType&lt;/tspan&gt;&lt;/text&gt;
              &lt;/g&gt;
            &lt;/g&gt;
            &lt;path
               d=&quot;M 396.71,745.37 H 792.56&quot;
               style=&quot;fill:none;stroke:#000000;stroke-width:0.24;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
               id=&quot;path916&quot; /&gt;
            &lt;path
               d=&quot;m 791.87,748.13 5.52,-2.76 -5.52,-2.76 z&quot;
               style=&quot;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none&quot;
               id=&quot;path918&quot; /&gt;
            &lt;path
               d=&quot;m 568.14,740.57 h 57.812 v 9.5998 H 568.14 Z&quot;
               style=&quot;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none&quot;
               id=&quot;path920&quot; /&gt;
            &lt;g
               id=&quot;g922&quot;&gt;
              &lt;g
                 id=&quot;g924&quot;
                 clip-path=&quot;url(#clipPath928)&quot;&gt;
                &lt;text
                   transform=&quot;matrix(1,0,0,-1,568.55,742.9)&quot;
                   style=&quot;font-variant:normal;font-weight:normal;font-size:8.25px;font-family:Arial;-inkscape-font-specification:ArialMT;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
                   id=&quot;text932&quot;&gt;&lt;tspan
                     x=&quot;0 5.9977498 10.494 14.99025 19.4865 22.481251 26.977501 29.22975 32.983501 37.4715 42.718498 46.472252 50.968498 55.464748&quot;
                     y=&quot;0&quot;
                     sodipodi:role=&quot;line&quot;
                     id=&quot;tspan930&quot;&gt;GeneratesEvent&lt;/tspan&gt;&lt;/text&gt;
              &lt;/g&gt;
            &lt;/g&gt;
          &lt;/g&gt;
        &lt;/g&gt;
      &lt;/g&gt;
    &lt;/g&gt;
  &lt;/g&gt;
&lt;/svg&gt;
&lt;/div&gt;

&lt;p&gt;
而 EUROMAP 77、83、84等标准已经采用了基于 OPC UA 的工业4.0通信标准。
EUROMAP 77 定义了注塑机和生产执行系统之间的通信协议。如图所示，标准的注塑机类型包含了：
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;定义了注塑机的基本信息：厂家信息、模型号、序列号&lt;/li&gt;
&lt;li&gt;机器配置信息&lt;/li&gt;
&lt;li&gt;机器与MES之间的配置信息&lt;/li&gt;
&lt;li&gt;机器MES状态&lt;/li&gt;
&lt;li&gt;能量单元&lt;/li&gt;
&lt;li&gt;模具的当前配置、状态信息&lt;/li&gt;
&lt;li&gt;注塑单元&lt;/li&gt;
&lt;li&gt;生产任务管理：机器运行的生产任务、生产周期配置参数、生产方法、MES和注塑机的数据通信&lt;/li&gt;
&lt;li&gt;数据集管理：注塑机存储的配置信息（dataset），包括时间、温度、压力等&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
有了标准的通信协议，右定义了通信模型数据，这样注塑机就能和MES系统双向顺畅通讯，实现了生产车间的纵行集成。这样，我们就可以通过这些数据的呈现、汇集、分析的接口，实现很多功能：
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;基于网页瘦客户端的数据展示应用，用户可以可以在iPhone、iPad等移动设备上访问注塑机的生产状态，随时掌握设备的状态&lt;/li&gt;
&lt;li&gt;实现提供综合能源全面监测管理&lt;/li&gt;
&lt;li&gt;获取实时生产质量数据，形成 SPC 报表&lt;/li&gt;
&lt;li&gt;了解产线设备的 OEE&lt;/li&gt;
&lt;li&gt;复杂灵活的订单排产计划&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
因为 EUROMAP 定义了塑料行业设备的数据元模型，更可以实现工业物联网，汇总设备的位置、状态、能耗、产能、运维等信息，支持柔性生产、预测性维护、能耗优化、生产质量预测等基于大数据的分析决策。
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines F.51 首选默认参数，其次函数重载</title>
   <link href="http://kimi.im/2022-07-09-cppcoreguidelines-f51"/>
   <updated>2022-07-09T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-f51</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
F.51: Where there is a choice, prefer default arguments over overloading
&lt;/p&gt;

&lt;p&gt;
&lt;b&gt;理由&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
默认参数方式，提供了简单唯一的接口，实现函数变体。相反，为了确保重载的函数实现了相同的机制，我们还需要额外的精力去进行检查。而且，使用默认参数能够避免重复的代码出现在多个地方。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;注意&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
如果使用函数重载的目的是为了实现一组函数的多个变体，使得它们能够接受相同参数，那么使用默认参数就比较合理。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;例子&lt;/b&gt;
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;print&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;string&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;s&lt;/span&gt;, &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;format&lt;/span&gt; f &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{}&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
比函数重载简洁：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-bad src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;print&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;string&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;s&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;  &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// use default format&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;print&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;string&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;s&lt;/span&gt;, &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;format&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
然而，当一组函数针对不同参数的类型，提供相同语义操作，那就没其他选择了，只能进行函数重载了。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;例子&lt;/b&gt;
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;print&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;char&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;print&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;print&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;zstring&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
see also: 虚函数的默认参数
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;强化&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
对以下情况进行警告：一组重载函数的声明前面部分都很相似。（比如 &lt;code&gt;f(int),
f(int, const string&amp;amp;), f(int, const string&amp;amp;, double)&lt;/code&gt; ）
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Siemens Xcelerator</title>
   <link href="http://kimi.im/2022-07-07-siemens-xcelerator.org"/>
   <updated>2022-07-07T00:00:00+00:00</updated>
   <id>http://kimi.im/siemens-xcelerator.org</id>
   <content type="html">&lt;p&gt;
2022年6月29日，西门子启动了名为“Siemens Xcelerator”的开放数字业务平台。不知道他们会怎么翻译中文名称，我看不如管它叫“西门子x加速器”。加速器的目标是整合生态合作伙伴能力，为工业、建筑、电网、交通等领域的客户提升数字化转型和创造价值。
&lt;/p&gt;

&lt;p&gt;
根据西门子官网显示，这个开放数字业务平台，其实是糅合了西门子的物联网设备和云边平台基础，有服务接口 API 和应用市场（marketplace）。这样西门子自己的各个业务部门，合作伙伴开发者就可以利用设备提供的数据，调用应用
API，开发SaaS应用，发布到应用市场，给客户订阅使用。不知道跟西门子的
MindSphere 什么关系？好像是新瓶装旧酒啊。或者，MindSphere 是
Xcelerator 平台下的一个工业行业细分领域吧。
&lt;/p&gt;

&lt;p&gt;
同时，西门子宣布收购 Brightly Software，并和 NVIDIA 建立战略合作。
&lt;/p&gt;

&lt;p&gt;
Brightly Software，“明亮地软件”是美国的一家企业设备资产管理解决方案公司，提供计算机辅助运维管理软件（Computerized Maintenance Management
System, CMMS）软件、企业资产管理软件（Enterprise Asset Management,
EAM）、策略资产管理（Strategic Asset Management）、物联网远程监测（IoT
Remote Monitoring）等软件服务。目前，该企业管理着 1.2 万个客户的，价值
3210亿美元的 50000 万个设备。
&lt;/p&gt;

&lt;p&gt;
跟 NVIDIA 的合作主要围绕工业元宇宙和数字孪生。NVIDIA 的 Omniverse 是一个基于 GPU 实时仿真的 3D 设计协作软件，可以构建工业、能源、流程的数字孪生模型。
&lt;/p&gt;

&lt;p&gt;
从西门子x加速器的开发者页面可以看到，目前提供的开发接口有
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;生产线设备数据访问接口&lt;/li&gt;
&lt;li&gt;设备管理接口&lt;/li&gt;
&lt;li&gt;设备运行状况监测接口&lt;/li&gt;
&lt;li&gt;设备工作状况分析接口&lt;/li&gt;
&lt;li&gt;西门子充电装运营管理接口&lt;/li&gt;
&lt;li&gt;生产线设备数字孪生查询展示接口&lt;/li&gt;
&lt;li&gt;生产工艺过程数据分析接口&lt;/li&gt;
&lt;li&gt;资产利用率优化管理接口&lt;/li&gt;
&lt;li&gt;物联网时序数据接口&lt;/li&gt;
&lt;li&gt;楼宇资产数据管理接口&lt;/li&gt;
&lt;li&gt;生产工具定位、异常监测接口&lt;/li&gt;
&lt;li&gt;AI模型管理接口&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
应用市场也上线了不少西门子和合作伙伴开发的SaaS服务：
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;Knorr-Bremse公司开发的火车空调制冷通风系统（HVAC）管理服务&lt;/li&gt;
&lt;li&gt;西门子自己开发的 CloudFIMs 能源优化管理服务&lt;/li&gt;
&lt;li&gt;Building X 信息物理数字孪生楼宇应用服务&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
不知到西门子在下一盘什么样的大棋，要是能摸索出工业物联网平台的正确发展道路，那也算是给摸不着头脑的工业互联网行业带来一缕曙光了。
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines F.50 当不能用函数实现的时候（使用局部变量，写局部函数），使用 lambda</title>
   <link href="http://kimi.im/2022-07-07-cppcoreguidelines-f50"/>
   <updated>2022-07-07T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-f50</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
F.50: Use a &lt;code&gt;lambda&lt;/code&gt; when a function won&amp;rsquo;t do (to capture local
variables, or to write a local function)
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;理由&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
函数不能捕获局部变量，也不能在局部范围定义变量。如果需要此类操作，尽可能使用 &lt;code&gt;lambda&lt;/code&gt; ，不然就写个函数对象。不过 &lt;code&gt;lambda&lt;/code&gt; 和函数对象不能重载。如果需要重载，还是得写个函数（ &lt;code&gt;lambda&lt;/code&gt; 重载很麻烦）。如果两种方式都可以，就用函数吧。尽量使用最简单的工具。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;例子&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
如果函数的参数可以是 &lt;code&gt;int&lt;/code&gt; 也可以是 &lt;code&gt;string&lt;/code&gt; ，那么就用函数重载方法。
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;string&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
如果需要捕获局部的状态变量，并在程序语句中使用，那么自然就用 &lt;code&gt;lambda&lt;/code&gt; 了。
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;using&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;work&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt;;
&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;vector&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;work&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;lots_of_work&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;vector&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;work&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;1&lt;/span&gt;,&lt;span style=&quot;color: #110099;&quot;&gt;2&lt;/span&gt;,&lt;span style=&quot;color: #110099;&quot;&gt;3&lt;/span&gt;,&lt;span style=&quot;color: #110099;&quot;&gt;4&lt;/span&gt;,&lt;span style=&quot;color: #110099;&quot;&gt;5&lt;/span&gt;,&lt;span style=&quot;color: #110099;&quot;&gt;6&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;main&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;vector&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;work&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;v&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;lots_of_work&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt;;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;for&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;tasknum&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;0&lt;/span&gt;; tasknum &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt; max; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;++&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;tasknum&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;
        pool.&lt;span style=&quot;color: #3a5fcd; font-weight: bold; font-style: italic;&quot;&gt;run&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #709870;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt;, &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt;v&lt;span style=&quot;color: #709870;&quot;&gt;]&lt;/span&gt; &lt;span style=&quot;color: #709870;&quot;&gt;{&lt;/span&gt;
            &lt;span style=&quot;color: #3F7F5F;&quot;&gt;/*&lt;/span&gt;
&lt;span style=&quot;color: #3F7F5F;&quot;&gt;              ...&lt;/span&gt;
&lt;span style=&quot;color: #3F7F5F;&quot;&gt;              ... process 1 / max - th of v, the tasknum - th chunk&lt;/span&gt;
&lt;span style=&quot;color: #3F7F5F;&quot;&gt;              ...&lt;/span&gt;
&lt;span style=&quot;color: #3F7F5F;&quot;&gt;            */&lt;/span&gt;
        &lt;span style=&quot;color: #709870;&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt;;
    &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;
    pool.&lt;span style=&quot;color: #3a5fcd; font-weight: bold; font-style: italic;&quot;&gt;join&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;
&lt;b&gt;例外&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
用泛型 &lt;code&gt;lambda&lt;/code&gt; 可以写出简洁的函数模板，所以有时候用起来比普通函数模板编写效率更高。不过，不久以后普通函数也能有 &lt;code&gt;Concept&lt;/code&gt; 参数的时候， 泛型
&lt;code&gt;lambda&lt;/code&gt; 就无此优势了。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;强化&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
在全局范围内出现把非泛型 &lt;code&gt;lambda&lt;/code&gt; 赋值给变量的情况（如： &lt;code&gt;auto x = [](int
i) { ...; };)&lt;/code&gt; 应该给予警告。这时候应该用普通函数。
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines F.49 不要返回 const T</title>
   <link href="http://kimi.im/2022-07-06-cppcoreguidelines-f49"/>
   <updated>2022-07-06T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-f49</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
F.49: Don’t return &lt;code&gt;const T&lt;/code&gt;
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;理由&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
返回值类型不建议标记成 &lt;code&gt;const&lt;/code&gt; 。把返回值标记为 &lt;code&gt;const&lt;/code&gt; 已经是一个过失的写法了，还会对移动语义造成影响。
&lt;/p&gt;

&lt;p&gt;
&lt;b&gt;例子&lt;/b&gt;
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-bad src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;vector&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;fct&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;;    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// bad: that &quot;const&quot; is more trouble than it is worth&lt;/span&gt;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;g&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;vector&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;vx&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ...&lt;/span&gt;
    &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;fct&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; vx;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// prevented by the &quot;const&quot;&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ...&lt;/span&gt;
    &lt;span style=&quot;color: #000000;&quot;&gt;vx&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;fct&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt;; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// expensive copy: move semantics suppressed by the &quot;const&quot;&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ...&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
争论的焦点是这样的。认为返回值类型应该是 &lt;code&gt;const&lt;/code&gt; 的那帮人，他们觉得这样可以避免不小心赋值给临时变量。而认为不应该加 &lt;code&gt;const&lt;/code&gt; 的一帮人则认为加了
&lt;code&gt;const&lt;/code&gt; 会影响移动语义。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;强化&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
找到返回 &lt;code&gt;const&lt;/code&gt; 的函数。建议去掉 &lt;code&gt;const&lt;/code&gt; ，返回非 &lt;code&gt;const&lt;/code&gt; 值。
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines F.48 不要这样写 return std::move(local)</title>
   <link href="http://kimi.im/2022-07-06-cppcoreguidelines-f48"/>
   <updated>2022-07-06T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-f48</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
F.48: Don’t &lt;code&gt;return std::move(local)&lt;/code&gt;
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;理由&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
因为C++有复制省略机制，在返回值的时候就不需要&lt;code&gt;std::move&lt;/code&gt;了。
&lt;/p&gt;

&lt;p&gt;
在返回语句中，如果返回的是一个自动存储区的非 &lt;code&gt;volatile&lt;/code&gt; 对象；并且该对象不是函数参数，不是 &lt;code&gt;catch&lt;/code&gt; 语句的参数；并且对象类型和返回值的类型一样（不考虑 &lt;code&gt;const&lt;/code&gt; 和 &lt;code&gt;volatile&lt;/code&gt; 修饰符）。那么编译器就会使用复制省略机制，避免复制构造一个新的对象。这种机制叫“有名称的返回值优化（Named Return
Value Optimization，简称 NRVO）”。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;例子&lt;/b&gt;
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-bad src-C++&quot;&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;// -*- compile-command: &quot;g++ -std=c++20 code.cpp &amp;amp;&amp;amp; ./a&quot;; -*-&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;#include&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&amp;lt;iostream&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;#include&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&amp;lt;gsl/gsl&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;using&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;namespace&lt;/span&gt; std;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;using&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;namespace&lt;/span&gt; gsl;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;struct&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;S&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;m_i&lt;/span&gt;;
    &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;S&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;i&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; : &lt;span style=&quot;color: #110099; font-style: italic;&quot;&gt;m_i&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;i&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{}&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;
&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;ostream&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt; operator&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;ostream&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;o&lt;/span&gt;, &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;S&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;s&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    o &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; s.&lt;span style=&quot;color: #110099; font-style: italic;&quot;&gt;m_i&lt;/span&gt;;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; o;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;S&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
  &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;S&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;result&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;11&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;;
  &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;std&lt;/span&gt;::&lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;move&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;result&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;main&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    cout &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt;;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;0&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;pre class=&quot;example&quot;&gt;
11
&lt;/pre&gt;


&lt;p&gt;
&lt;b&gt;例子&lt;/b&gt;
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-C++&quot;&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;// -*- compile-command: &quot;g++ -std=c++20 code.cpp &amp;amp;&amp;amp; ./a&quot;; -*-&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;#include&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&amp;lt;iostream&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;#include&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&amp;lt;gsl/gsl&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;using&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;namespace&lt;/span&gt; std;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;using&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;namespace&lt;/span&gt; gsl;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;struct&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;S&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;m_i&lt;/span&gt;;
    &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;S&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;i&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; : &lt;span style=&quot;color: #110099; font-style: italic;&quot;&gt;m_i&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;i&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{}&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;
&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;ostream&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt; operator&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;ostream&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;o&lt;/span&gt;, &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;S&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;s&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    o &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; s.&lt;span style=&quot;color: #110099; font-style: italic;&quot;&gt;m_i&lt;/span&gt;;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; o;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;S&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
  &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;S&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;result&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;11&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;;
  &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; result;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;main&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    cout &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt;;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;0&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;pre class=&quot;example&quot;&gt;
address of result: 0x381ffff70c
11
&lt;/pre&gt;



&lt;p&gt;
&lt;b&gt;强化&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
最好通过工具确保合理的返回表达式
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines F.47 赋值操作符返回 T&</title>
   <link href="http://kimi.im/2022-07-05-cppcoreguidelines-f47"/>
   <updated>2022-07-05T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-f47</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
F.47: Return &lt;code&gt;T&amp;amp;&lt;/code&gt; from assignment operators
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;理由&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
&lt;code&gt;operator=(const T&amp;amp;)&lt;/code&gt; 操作符重载的通常操作是先进行赋值，然后再返回一个非
&lt;code&gt;const&lt;/code&gt; 的&lt;code&gt;*this&lt;/code&gt;。这样就和标准库类型保持一致。并遵循“像 int 那样执行”的原则。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;注意&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
在过去，有些指南说赋值操作符要返回&lt;code&gt;const T&amp;amp;&lt;/code&gt;。主要是为了避免这种形式的代码&lt;code&gt;(a = b) = c&lt;/code&gt;。不过这种代码不太常见，所以没必要因此而与标准类型不一致。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;例子&lt;/b&gt;
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-C++&quot;&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;// -*- compile-command: &quot;g++ -std=c++20 code.cpp &amp;amp;&amp;amp; ./a&quot;; -*-&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;#include&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&amp;lt;iostream&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;#include&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&amp;lt;gsl/gsl&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;using&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;namespace&lt;/span&gt; std;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;using&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;namespace&lt;/span&gt; gsl;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Foo&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;public&lt;/span&gt;:
    &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;Foo&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;default&lt;/span&gt;;
    &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;Foo&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;v&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; : &lt;span style=&quot;color: #110099; font-style: italic;&quot;&gt;foo_val&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;v&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{}&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Foo&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt; operator&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Foo&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;rhs&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;
    &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;
        &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// Copy members.&lt;/span&gt;
        &lt;span style=&quot;color: #000000;&quot;&gt;foo_val&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; rhs.&lt;span style=&quot;color: #110099; font-style: italic;&quot;&gt;foo_val&lt;/span&gt;;
        &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;this&lt;/span&gt;;
    &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;foo_val&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;0&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;main&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Foo&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;rhs&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;10&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Foo&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;n&lt;/span&gt;;
    cout &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; n.&lt;span style=&quot;color: #110099; font-style: italic;&quot;&gt;foo_val&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; endl;
    cout &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;n&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; rhs&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;.&lt;span style=&quot;color: #110099; font-style: italic;&quot;&gt;foo_val&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; endl;
    cout &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; n.&lt;span style=&quot;color: #110099; font-style: italic;&quot;&gt;foo_val&lt;/span&gt;;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;0&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;pre class=&quot;example&quot;&gt;
0
10
10
&lt;/pre&gt;



&lt;p&gt;
&lt;b&gt;强化&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
应该用工具检查任何赋值操作符的返回值类型和数值
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines F.46 main() 的返回值类型是 int</title>
   <link href="http://kimi.im/2022-07-04-cppcoreguidelines-f46"/>
   <updated>2022-07-04T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-f46</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
F.46: int is the return type for &lt;code&gt;main()&lt;/code&gt;
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;理由&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
这个是一个编程语言规则，把 &lt;code&gt;main&lt;/code&gt; 声明成 &lt;code&gt;void&lt;/code&gt; 可能会跟某些系统不兼容。
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-bad src-C++&quot;&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;// -*- compile-command: &quot;g++ -std=c++20 code.cpp &amp;amp;&amp;amp; ./a&quot;; -*-&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;main&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;/* ... */&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;  &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// bad, not C++&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;pre class=&quot;example&quot;&gt;
error: &apos;::main&apos; must return &apos;int&apos;
&lt;/pre&gt;


&lt;p&gt;
返回值类型改成 &lt;code&gt;int&lt;/code&gt; ，编译器就不会报错了。
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-C++&quot;&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;// -*- compile-command: &quot;g++ -std=c++20 code.cpp &amp;amp;&amp;amp; ./a&quot;; -*-&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;#include&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&amp;lt;iostream&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;main&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;std&lt;/span&gt;::cout &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;This is the way to do it\n&quot;&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;pre class=&quot;example&quot;&gt;
This is the way to do it
&lt;/pre&gt;



&lt;p&gt;
&lt;b&gt;注意&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
我们之所以提一遍这个规则，是因为总是有人坚持以错误的方式写代码。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;强化&lt;/b&gt;
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;编译器会报错&lt;/li&gt;
&lt;li&gt;如果编译器不报错，让代码检查工具标记错误&lt;/li&gt;
&lt;/ul&gt;
</content>
 </entry>
 
 <entry>
   <title>单词本：hedonism</title>
   <link href="http://kimi.im/2022-07-02-english-hedonism"/>
   <updated>2022-07-02T00:00:00+00:00</updated>
   <id>http://kimi.im/english-hedonism</id>
   <content type="html">&lt;p&gt;
前几天热衷于拉丁语的时候，学到了 &lt;a href=&quot;http://kimi.im/2022-06-07-latin-carpe-diem&quot;&gt;carpe diem&lt;/a&gt;，抓住今天，及时行乐。这次学的词和 carpe diem 很相关：hedonism 享乐主义、快乐主义。
&lt;/p&gt;

&lt;p&gt;
在看管理学激励理论的时候，看到这句：
&lt;/p&gt;

&lt;p&gt;
Hedonism, one of the first motivation theories, assumes that people
are motivated to satisfy mainly their own needs (seek pleasure, avoid
pain).
&lt;/p&gt;

&lt;p&gt;
享乐主义激励理论认为人们为了满足他们自己的寻求快乐、避免痛苦的需求，而积极工作。
&lt;/p&gt;

&lt;p&gt;
Hedonism is a school of thought that argues that the pursuit of
pleasure and intrinsic goods are the primary or most important goals
of human life.
&lt;/p&gt;

&lt;p&gt;
享乐主义的词根 Hedone 其实是古希腊的欢愉女神的名字“赫多涅”（Ἡδονή，
Hêdonê）。赫多涅是爱神厄洛斯（Eros）与灵魂女神普绪喀（Psyche）之女。她代表快乐、愉悦和享受。在罗马被叫做沃路普塔斯（Voluptas），有时候也叫沃路皮亚（Volupia）。
&lt;/p&gt;

&lt;p&gt;
所以呢，延伸开来，hedonic 享乐的， hedonist 享乐主义者，hedonistic 享乐主义者的。
&lt;/p&gt;

&lt;p&gt;
Hedonic consumption is consumption of products by individuals for
experiencing happiness after satisfying basic needs of food, clothing
and shelter. 享乐式消费，是指除了满足基本的衣食住行需求之外，还要追求幸福感的消费方式。
&lt;/p&gt;

&lt;p&gt;
You seem to paint a lot of the students as shallow, narcissistic
hedonists. 你似乎把很多学生画成肤浅、自恋的享乐主义者。
&lt;/p&gt;

&lt;p&gt;
For Epicurus, a hedonistic life is one free from bodily and mental
pains. 对与伊比鸠鲁（古希腊杰出唯物主义和无神论者）来说，享乐主义者的生活就是远离身体和精神的痛苦。
&lt;/p&gt;

&lt;p&gt;
Hedone 女神到了罗马，成了 Volupas 女神，似乎就变的更世俗了。所以，
voluptuous 形容性感撩人、体态丰腴，也指松软舒适的东西。
&lt;/p&gt;

&lt;p&gt;
The show&amp;rsquo;s creative team put her in costumes that emphasized her
voluptuousness. 节目创意组给她穿的服装凸显了她的体态丰腴。
&lt;/p&gt;

&lt;p&gt;
I sank into the bed&amp;rsquo;s voluptuous warmth. 我躺在温暖松软的床上。
&lt;/p&gt;

&lt;p&gt;
She swayed her hips voluptuously. 她摇摆着性感的臀部。
&lt;/p&gt;


&lt;p&gt;
最后，总结一下：
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;Hedone 赫多涅，古希腊的欢愉女神&lt;/li&gt;
&lt;li&gt;hedonism 享乐主义&lt;/li&gt;
&lt;li&gt;hedonic 享乐的&lt;/li&gt;
&lt;li&gt;hedonist 享乐主义者&lt;/li&gt;
&lt;li&gt;hedonistic 享乐主义者的&lt;/li&gt;
&lt;li&gt;Voluptas 沃路普塔斯，古罗马的欢愉女神，也叫 Volupia&lt;/li&gt;
&lt;li&gt;voluptuous 体态性感的&lt;/li&gt;
&lt;li&gt;voluptuousness 丰腴的体态&lt;/li&gt;
&lt;li&gt;carpe diem 及时行乐&lt;/li&gt;
&lt;/ul&gt;
</content>
 </entry>
 
 <entry>
   <title>ABB基于5G的工业机器人测试床</title>
   <link href="http://kimi.im/2022-06-30-abb-5g-acia-robot-testbed"/>
   <updated>2022-06-30T00:00:00+00:00</updated>
   <id>http://kimi.im/abb-5g-acia-robot-testbed</id>
   <content type="html">&lt;p&gt;
欧盟早在 2016 年就发布了“5G Action Plan”，并在 2018 年启动了5G 规模试验。2018 年 4 月，欧盟成立工业互联与自动化 5G 联盟（5G- ACIA），联盟集合了 OT 龙头企业、ICT 龙头企业、学术界等完整的生态系统，共同推进对工业需求的理解并向 3GPP 标准导入，同时探讨 5G 用于工业领域所涉及的话题，包括组网架构、运营模式、频谱需求等。
&lt;/p&gt;

&lt;p&gt;
ABB与爱立信合作，作为欧盟5G-SMART项目的一部分，在瑞典Kista的爱立信智能工厂建立了5G测试床，该平台重点关注如何通过5G优化机器人。
&lt;/p&gt;

&lt;p&gt;
2022年的汉诺威展上，ABB和爱立信一起展示了他们合作的5G工业机器人测试床。整体架构如下：
&lt;/p&gt;

&lt;div align=&quot;center&quot;&gt;
&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
&lt;!-- Do not edit this file with editors other than diagrams.net --&gt;
&lt;!DOCTYPE svg PUBLIC &quot;-//W3C//DTD SVG 1.1//EN&quot; &quot;http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd&quot;&gt;
&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; xmlns:xlink=&quot;http://www.w3.org/1999/xlink&quot; version=&quot;1.1&quot; width=&quot;568px&quot; height=&quot;386px&quot; viewBox=&quot;-0.5 -0.5 568 386&quot; content=&quot;&amp;lt;mxfile host=&amp;quot;Electron&amp;quot; modified=&amp;quot;2022-06-30T11:39:56.054Z&amp;quot; agent=&amp;quot;5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) draw.io/19.0.3 Chrome/102.0.5005.63 Electron/19.0.3 Safari/537.36&amp;quot; etag=&amp;quot;RFcZWL6Q7G0h8JiwyGE_&amp;quot; version=&amp;quot;19.0.3&amp;quot; type=&amp;quot;device&amp;quot;&amp;gt;&amp;lt;diagram id=&amp;quot;OziqYN5tDepf8uxfZ_4h&amp;quot; name=&amp;quot;Page-1&amp;quot;&amp;gt;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&amp;lt;/diagram&amp;gt;&amp;lt;/mxfile&amp;gt;&quot; style=&quot;background-color: rgb(255, 255, 255);&quot;&gt;&lt;defs&gt;&lt;style type=&quot;text/css&quot;&gt;@import url(https://fonts.googleapis.com/css?family=Architects+Daughter);&amp;#xa;&lt;/style&gt;&lt;/defs&gt;&lt;g&gt;&lt;path d=&quot;M 303 0 L 383 0 L 383 80 L 303 80 Z&quot; fill=&quot;none&quot; stroke=&quot;none&quot; pointer-events=&quot;all&quot;/&gt;&lt;path d=&quot;M 332.97 17.83 L 322.68 10.01 L 324.07 8.19 L 334.35 16.01 Z M 352.35 17.8 L 350.96 15.98 L 361.24 8.17 L 362.63 9.99 Z M 345.29 63.83 L 348.71 63.83 L 348.71 60.41 L 345.29 60.41 Z M 337.29 63.83 L 340.71 63.83 L 340.71 60.41 L 337.29 60.41 Z M 345.29 55.83 L 348.71 55.83 L 348.71 52.41 L 345.29 52.41 Z M 337.29 55.83 L 340.71 55.83 L 340.71 52.41 L 337.29 52.41 Z M 361.24 35.42 L 350.96 27.6 L 352.35 25.78 L 362.63 33.6 Z M 354.43 23.83 L 370.43 23.83 L 370.43 21.55 L 354.43 21.55 Z M 332.97 25.81 L 334.35 27.63 L 324.07 35.45 L 322.68 33.63 Z M 316.71 23.83 L 332.71 23.83 L 332.71 21.55 L 316.71 21.55 Z M 354.43 69.17 L 354.43 61.03 C 367.64 62.19 372.44 64.38 372.7 65.32 C 372.17 66.5 365.83 68.37 354.43 69.17 Z M 352.14 69.31 C 349.36 69.46 346.32 69.55 343 69.55 C 339.68 69.55 336.64 69.46 333.86 69.31 L 333.86 47.83 L 352.14 47.83 Z M 331.57 58.78 C 324.74 59.35 317.27 60.42 313.49 62.4 C 315.18 48.81 327.07 38.42 341.86 37.91 L 341.86 45.55 L 331.57 45.55 Z M 331.57 69.17 C 320.1 68.37 313.75 66.49 313.29 65.35 C 313.52 64.42 318.32 62.22 331.57 61.08 Z M 338.43 21.55 C 338.43 19.03 340.48 16.98 343 16.98 C 345.52 16.98 347.57 19.03 347.57 21.55 C 347.57 24.07 345.52 26.12 343 26.12 C 340.48 26.12 338.43 24.07 338.43 21.55 Z M 372.38 62.32 C 368.57 60.38 361.22 59.32 354.43 58.73 L 354.43 45.55 L 344.14 45.55 L 344.14 37.91 C 358.2 38.45 370.16 48.95 372.38 62.32 Z M 375 65.29 L 375 65.29 C 374.19 49.28 360.46 36.2 344.14 35.62 L 344.14 28.3 C 347.38 27.76 349.86 24.94 349.86 21.55 C 349.85 17.76 346.78 14.7 343 14.69 C 339.22 14.7 336.15 17.76 336.14 21.55 C 336.14 24.94 338.62 27.76 341.86 28.3 L 341.86 35.62 C 324.9 36.17 311.44 48.85 311 64.95 L 311.04 64.95 C 311.01 65.08 311 65.21 311 65.35 C 311 71.76 341.69 71.83 343 71.83 C 344.31 71.83 375 71.76 375 65.35 C 375 65.33 375 65.31 375 65.29 Z&quot; fill=&quot;rgb(0, 0, 0)&quot; stroke=&quot;none&quot; pointer-events=&quot;all&quot;/&gt;&lt;path d=&quot;M 246.76 215 L 264.5 148.2 L 282.24 215&quot; fill=&quot;none&quot; stroke=&quot;#000000&quot; stroke-width=&quot;1.61&quot; stroke-linejoin=&quot;round&quot; stroke-miterlimit=&quot;10&quot; pointer-events=&quot;all&quot;/&gt;&lt;path d=&quot;M 281.43 210.55 L 251.6 197.19 L 274.98 188.28 L 256.84 179.37 L 270.14 170.87 L 260.87 163.18&quot; fill=&quot;none&quot; stroke=&quot;#000000&quot; stroke-width=&quot;1.61&quot; stroke-linejoin=&quot;round&quot; stroke-miterlimit=&quot;10&quot; pointer-events=&quot;all&quot;/&gt;&lt;rect x=&quot;243&quot; y=&quot;135&quot; width=&quot;0&quot; height=&quot;0&quot; fill=&quot;none&quot; stroke=&quot;#000000&quot; stroke-width=&quot;1.61&quot; pointer-events=&quot;all&quot;/&gt;&lt;ellipse cx=&quot;264.5&quot; cy=&quot;149.82&quot; rx=&quot;3.224596925384327&quot; ry=&quot;3.2388663967611335&quot; fill=&quot;#cccccc&quot; stroke=&quot;#000000&quot; stroke-width=&quot;1.61&quot; pointer-events=&quot;all&quot;/&gt;&lt;path d=&quot;M 269.98 144.31 L 271.11 142.94 C 274.8 146.71 274.8 152.76 271.11 156.54 L 269.98 155.24 C 272.8 152.15 272.8 147.41 269.98 144.31 Z M 274.01 140.26 L 275.14 139.13 C 280.87 145.09 280.87 154.54 275.14 160.51 L 274.01 159.37 C 279.13 154.04 279.13 145.6 274.01 140.26 Z M 278.04 136.21 L 279.17 135 C 283.5 138.69 286 144.11 286 149.82 C 286 155.52 283.5 160.94 279.17 164.64 L 278.04 163.42 C 282.16 160.12 284.56 155.11 284.56 149.82 C 284.56 144.52 282.16 139.52 278.04 136.21 Z M 259.02 144.31 L 257.89 142.94 C 254.2 146.71 254.2 152.76 257.89 156.54 L 259.02 155.24 C 256.2 152.15 256.2 147.41 259.02 144.31 Z M 254.99 140.26 L 253.86 139.13 C 248.13 145.09 248.13 154.54 253.86 160.51 L 254.99 159.37 C 249.87 154.04 249.87 145.6 254.99 140.26 Z M 250.96 136.21 L 249.83 135 C 245.5 138.69 243 144.11 243 149.82 C 243 155.52 245.5 160.94 249.83 164.64 L 250.96 163.42 C 246.84 160.12 244.44 155.11 244.44 149.82 C 244.44 144.52 246.84 139.52 250.96 136.21 Z&quot; fill=&quot;#cccccc&quot; stroke=&quot;#000000&quot; stroke-width=&quot;1.61&quot; stroke-miterlimit=&quot;10&quot; pointer-events=&quot;all&quot;/&gt;&lt;path d=&quot;M 12.93 117 C -0.43 99.22 -0.43 74.78 12.93 57 L 113.2 57 C 126.56 74.78 126.56 99.22 113.2 117 Z&quot; fill=&quot;rgb(255, 255, 255)&quot; stroke=&quot;rgb(0, 0, 0)&quot; stroke-miterlimit=&quot;10&quot; pointer-events=&quot;all&quot;/&gt;&lt;ellipse cx=&quot;27.97&quot; cy=&quot;127&quot; rx=&quot;10.026051946001422&quot; ry=&quot;10&quot; fill=&quot;rgb(255, 255, 255)&quot; stroke=&quot;rgb(0, 0, 0)&quot; pointer-events=&quot;all&quot;/&gt;&lt;ellipse cx=&quot;98.16&quot; cy=&quot;127&quot; rx=&quot;10.026051946001422&quot; ry=&quot;10&quot; fill=&quot;rgb(255, 255, 255)&quot; stroke=&quot;rgb(0, 0, 0)&quot; pointer-events=&quot;all&quot;/&gt;&lt;rect x=&quot;69.7&quot; y=&quot;220&quot; width=&quot;51.87&quot; height=&quot;15.2&quot; rx=&quot;7.6&quot; ry=&quot;7.6&quot; fill=&quot;rgb(255, 255, 255)&quot; stroke=&quot;rgb(0, 0, 0)&quot; pointer-events=&quot;none&quot;/&gt;&lt;path d=&quot;M 41.28 271.98 L 41.28 271.98 Q 69.7 271.98 69.7 322.36 Q 69.7 372.75 41.28 372.75 L 41.28 372.75 Z&quot; fill=&quot;rgb(255, 255, 255)&quot; stroke=&quot;rgb(0, 0, 0)&quot; stroke-miterlimit=&quot;10&quot; transform=&quot;rotate(-90,55.49,322.36)&quot; pointer-events=&quot;none&quot;/&gt;&lt;path d=&quot;M 122.57 254.41 C 122.57 260.58 119.84 266.28 115.42 269.35 C 111 272.42 105.57 272.38 101.17 269.26 C 96.78 266.14 94.1 260.41 94.15 254.24 L 98.27 254.29 C 98.24 258.67 100.14 262.74 103.26 264.96 C 106.38 267.17 110.24 267.2 113.38 265.02 C 116.51 262.84 118.45 258.79 118.45 254.41 Z&quot; fill=&quot;rgb(255, 255, 255)&quot; stroke=&quot;rgb(0, 0, 0)&quot; stroke-miterlimit=&quot;10&quot; transform=&quot;rotate(-180,108.36,254.41)&quot; pointer-events=&quot;none&quot;/&gt;&lt;rect x=&quot;-7&quot; y=&quot;271.98&quot; width=&quot;92.37&quot; height=&quot;33.12&quot; rx=&quot;16.56&quot; ry=&quot;16.56&quot; fill=&quot;rgb(255, 255, 255)&quot; stroke=&quot;rgb(0, 0, 0)&quot; transform=&quot;rotate(60,39.18,288.54)&quot; pointer-events=&quot;none&quot;/&gt;&lt;ellipse cx=&quot;54.6&quot; cy=&quot;316.21&quot; rx=&quot;7.10500187392636&quot; ry=&quot;7.10500187392636&quot; fill=&quot;rgb(255, 255, 255)&quot; stroke=&quot;rgb(0, 0, 0)&quot; pointer-events=&quot;none&quot;/&gt;&lt;rect x=&quot;8.52&quot; y=&quot;233.06&quot; width=&quot;78.16&quot; height=&quot;20.57&quot; rx=&quot;10.29&quot; ry=&quot;10.29&quot; fill=&quot;rgb(255, 255, 255)&quot; stroke=&quot;rgb(0, 0, 0)&quot; transform=&quot;rotate(-30,47.6,243.35)&quot; pointer-events=&quot;none&quot;/&gt;&lt;rect x=&quot;223&quot; y=&quot;340&quot; width=&quot;45&quot; height=&quot;35&quot; rx=&quot;5.25&quot; ry=&quot;5.25&quot; fill=&quot;rgb(255, 255, 255)&quot; stroke=&quot;rgb(0, 0, 0)&quot; pointer-events=&quot;none&quot;/&gt;&lt;rect x=&quot;283&quot; y=&quot;340&quot; width=&quot;45&quot; height=&quot;35&quot; rx=&quot;5.25&quot; ry=&quot;5.25&quot; fill=&quot;rgb(255, 255, 255)&quot; stroke=&quot;rgb(0, 0, 0)&quot; pointer-events=&quot;none&quot;/&gt;&lt;path d=&quot;M 245.5 340 L 308 340&quot; fill=&quot;none&quot; stroke=&quot;rgb(0, 0, 0)&quot; stroke-miterlimit=&quot;10&quot; pointer-events=&quot;none&quot;/&gt;&lt;path d=&quot;M 268 365 C 268 353.95 271.36 345 275.5 345 C 279.64 345 283 353.95 283 365&quot; fill=&quot;none&quot; stroke=&quot;rgb(0, 0, 0)&quot; stroke-miterlimit=&quot;10&quot; pointer-events=&quot;none&quot;/&gt;&lt;path d=&quot;M 428.26 230 C 416.28 227.65 407.31 217.53 406.31 205.24 C 405.01 197.33 407.3 189.24 412.55 183.21 C 417.8 177.19 425.45 173.87 433.39 174.17 C 438.04 165.51 448.03 161.27 457.42 163.98 C 456.7 148.94 466.87 135.58 481.45 132.43 C 494.41 130 507.23 137.29 511.89 149.74 C 521.67 143.95 534.04 145.34 542.33 153.14 C 550.63 160.25 554.54 171.29 552.59 182.1 C 561.14 186.48 566.31 195.57 565.72 205.24 C 566.1 217.56 557.28 228.2 545.22 230 Z M 545.22 227.41 C 555.65 225.26 563.15 216 563.16 205.24 C 563.72 195.87 558.5 187.11 550.02 183.24 C 551.95 172.7 548.31 161.91 540.41 154.76 C 532.15 147.42 520 146.68 510.93 152.98 C 506.58 139.78 493.43 132.06 480.33 135.02 C 466.84 139.56 458.26 152.93 459.66 167.22 C 450.23 163.28 439.4 167.47 434.99 176.76 C 428.78 175.81 422.48 177.69 417.53 181.99 C 412.58 186.28 409.4 192.63 408.72 199.58 C 407.32 212.55 415.69 224.55 428.26 227.57 Z&quot; fill=&quot;#000000&quot; stroke=&quot;none&quot; pointer-events=&quot;none&quot;/&gt;&lt;g transform=&quot;translate(-0.5 -0.5)&quot;&gt;&lt;switch&gt;&lt;foreignObject pointer-events=&quot;none&quot; width=&quot;100%&quot; height=&quot;100%&quot; requiredFeatures=&quot;http://www.w3.org/TR/SVG11/feature#Extensibility&quot; style=&quot;overflow: visible; text-align: left;&quot;&gt;&lt;div xmlns=&quot;http://www.w3.org/1999/xhtml&quot; style=&quot;display: flex; align-items: unsafe center; justify-content: unsafe center; width: 58px; height: 1px; padding-top: 40px; margin-left: 384px;&quot;&gt;&lt;div data-drawio-colors=&quot;color: rgb(0, 0, 0); &quot; style=&quot;box-sizing: border-box; font-size: 0px; text-align: center;&quot;&gt;&lt;div style=&quot;display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: none; white-space: normal; overflow-wrap: normal;&quot;&gt;5G Core&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/foreignObject&gt;&lt;text x=&quot;413&quot; y=&quot;44&quot; fill=&quot;rgb(0, 0, 0)&quot; font-family=&quot;Helvetica&quot; font-size=&quot;12px&quot; text-anchor=&quot;middle&quot;&gt;5G Core&lt;/text&gt;&lt;/switch&gt;&lt;/g&gt;&lt;g transform=&quot;translate(-0.5 -0.5)&quot;&gt;&lt;switch&gt;&lt;foreignObject pointer-events=&quot;none&quot; width=&quot;100%&quot; height=&quot;100%&quot; requiredFeatures=&quot;http://www.w3.org/TR/SVG11/feature#Extensibility&quot; style=&quot;overflow: visible; text-align: left;&quot;&gt;&lt;div xmlns=&quot;http://www.w3.org/1999/xhtml&quot; style=&quot;display: flex; align-items: unsafe center; justify-content: unsafe center; width: 58px; height: 1px; padding-top: 230px; margin-left: 236px;&quot;&gt;&lt;div data-drawio-colors=&quot;color: rgb(0, 0, 0); &quot; style=&quot;box-sizing: border-box; font-size: 0px; text-align: center;&quot;&gt;&lt;div style=&quot;display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: none; white-space: normal; overflow-wrap: normal;&quot;&gt;5G RAN&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/foreignObject&gt;&lt;text x=&quot;265&quot; y=&quot;234&quot; fill=&quot;rgb(0, 0, 0)&quot; font-family=&quot;Helvetica&quot; font-size=&quot;12px&quot; text-anchor=&quot;middle&quot;&gt;5G RAN&lt;/text&gt;&lt;/switch&gt;&lt;/g&gt;&lt;path d=&quot;M 465.06 184.07 C 465.11 182.97 466 182.12 467.07 182.12 L 512.94 182.12 C 514.01 182.12 514.9 182.97 514.95 184.07 L 515 195.88 C 515 196.43 514.78 196.96 514.39 197.35 C 514 197.73 513.48 197.94 512.94 197.93 L 467.07 197.93 C 466.54 197.93 466.02 197.71 465.65 197.33 C 465.27 196.94 465.06 196.42 465.06 195.88 Z M 471.1 194.18 C 471.1 193.19 470.31 192.38 469.33 192.38 C 468.36 192.38 467.57 193.19 467.57 194.18 C 467.57 195.17 468.36 195.98 469.33 195.98 C 470.31 195.98 471.1 195.17 471.1 194.18 Z M 501.31 194.03 C 501 194.03 500.75 194.28 500.75 194.59 C 500.75 194.9 501 195.16 501.31 195.16 L 511.37 195.16 C 511.68 195.16 511.93 194.9 511.93 194.59 C 511.93 194.28 511.68 194.03 511.37 194.03 Z M 501.31 192.08 C 501 192.08 500.75 192.33 500.75 192.64 C 500.75 192.95 501 193.21 501.31 193.21 L 511.37 193.21 C 511.68 193.21 511.93 192.95 511.93 192.64 C 511.93 192.33 511.68 192.08 511.37 192.08 Z M 501.31 190.07 C 501 190.07 500.75 190.33 500.75 190.64 C 500.75 190.95 501 191.2 501.31 191.2 L 511.37 191.2 C 511.68 191.2 511.93 190.95 511.93 190.64 C 511.93 190.33 511.68 190.07 511.37 190.07 Z M 465 166.95 C 465.05 165.86 465.94 165 467.01 165 L 512.88 165 C 513.95 165 514.84 165.86 514.89 166.95 L 514.94 178.76 C 514.94 179.31 514.73 179.84 514.34 180.23 C 513.95 180.62 513.42 180.83 512.88 180.81 L 467.01 180.81 C 465.9 180.81 465 179.89 465 178.76 Z M 471.04 177.06 C 471.04 176.42 470.71 175.83 470.16 175.51 C 469.62 175.19 468.94 175.19 468.4 175.51 C 467.85 175.83 467.52 176.42 467.52 177.06 C 467.52 177.71 467.85 178.3 468.4 178.62 C 468.94 178.94 469.62 178.94 470.16 178.62 C 470.71 178.3 471.04 177.71 471.04 177.06 Z M 501.25 176.91 C 500.94 176.91 500.7 177.16 500.7 177.48 C 500.7 177.79 500.94 178.04 501.25 178.04 L 511.32 178.04 C 511.63 178.04 511.87 177.79 511.87 177.48 C 511.87 177.16 511.63 176.91 511.32 176.91 Z M 501.25 174.96 C 500.94 174.96 500.7 175.21 500.7 175.52 C 500.7 175.84 500.94 176.09 501.25 176.09 L 511.32 176.09 C 511.63 176.09 511.87 175.84 511.87 175.52 C 511.87 175.21 511.63 174.96 511.32 174.96 Z M 501.25 172.96 C 500.94 172.96 500.7 173.21 500.7 173.52 C 500.7 173.83 500.94 174.09 501.25 174.09 L 511.32 174.09 C 511.63 174.09 511.87 173.83 511.87 173.52 C 511.87 173.21 511.63 172.96 511.32 172.96 Z M 465.06 201.12 C 465.11 200.03 466 199.17 467.07 199.17 L 512.94 199.17 C 514.01 199.17 514.9 200.03 514.95 201.12 L 515 212.93 C 515 213.48 514.78 214.01 514.39 214.4 C 514 214.79 513.48 215 512.94 214.98 L 467.07 214.98 C 466.54 214.98 466.02 214.77 465.65 214.38 C 465.27 214 465.06 213.48 465.06 212.93 Z M 471.1 211.24 C 471.1 210.24 470.31 209.44 469.33 209.44 C 468.36 209.44 467.57 210.24 467.57 211.24 C 467.57 212.23 468.36 213.03 469.33 213.03 C 470.31 213.03 471.1 212.23 471.1 211.24 Z M 501.31 211.08 C 501 211.08 500.75 211.34 500.75 211.65 C 500.75 211.96 501 212.21 501.31 212.21 L 511.37 212.21 C 511.68 212.21 511.93 211.96 511.93 211.65 C 511.93 211.34 511.68 211.08 511.37 211.08 Z M 501.31 209.13 C 501 209.13 500.75 209.38 500.75 209.7 C 500.75 210.01 501 210.26 501.31 210.26 L 511.37 210.26 C 511.68 210.26 511.93 210.01 511.93 209.7 C 511.93 209.38 511.68 209.13 511.37 209.13 Z M 501.31 207.13 C 501 207.13 500.75 207.38 500.75 207.69 C 500.75 208.01 501 208.26 501.31 208.26 L 511.37 208.26 C 511.68 208.26 511.93 208.01 511.93 207.69 C 511.93 207.38 511.68 207.13 511.37 207.13 Z&quot; fill=&quot;#4d4d4d&quot; stroke=&quot;none&quot; pointer-events=&quot;none&quot;/&gt;&lt;path d=&quot;M 223 160 L 143 100&quot; fill=&quot;none&quot; stroke=&quot;rgb(0, 0, 0)&quot; stroke-miterlimit=&quot;10&quot; stroke-dasharray=&quot;3 3&quot; pointer-events=&quot;none&quot;/&gt;&lt;path d=&quot;M 223 200 L 133 290&quot; fill=&quot;none&quot; stroke=&quot;rgb(0, 0, 0)&quot; stroke-miterlimit=&quot;10&quot; stroke-dasharray=&quot;3 3&quot; pointer-events=&quot;none&quot;/&gt;&lt;path d=&quot;M 273 250 L 273 320&quot; fill=&quot;none&quot; stroke=&quot;rgb(0, 0, 0)&quot; stroke-miterlimit=&quot;10&quot; stroke-dasharray=&quot;3 3&quot; pointer-events=&quot;none&quot;/&gt;&lt;path d=&quot;M 343 80 L 303 130&quot; fill=&quot;none&quot; stroke=&quot;rgb(0, 0, 0)&quot; stroke-miterlimit=&quot;10&quot; stroke-dasharray=&quot;3 3&quot; pointer-events=&quot;none&quot;/&gt;&lt;path d=&quot;M 373 90 L 435.65 165.3&quot; fill=&quot;none&quot; stroke=&quot;rgb(0, 0, 0)&quot; stroke-miterlimit=&quot;10&quot; stroke-dasharray=&quot;3 3&quot; pointer-events=&quot;none&quot;/&gt;&lt;/g&gt;&lt;switch&gt;&lt;g requiredFeatures=&quot;http://www.w3.org/TR/SVG11/feature#Extensibility&quot;/&gt;&lt;a transform=&quot;translate(0,-5)&quot; xlink:href=&quot;https://www.diagrams.net/doc/faq/svg-export-text-problems&quot; target=&quot;_blank&quot;&gt;&lt;text text-anchor=&quot;middle&quot; font-size=&quot;10px&quot; x=&quot;50%&quot; y=&quot;100%&quot;&gt;Text is not SVG - cannot display&lt;/text&gt;&lt;/a&gt;&lt;/switch&gt;&lt;/svg&gt;
&lt;/div&gt;

&lt;p&gt;
2个协作双臂机器人和一个移动小车通过私有5G网络连接到本地边缘服务器。所有机器人的控制器都迁移到边缘服务器。也就是说机器人只负责采集位置、位移数据，边缘控制器执行控制逻辑反馈控制指令给机器人执行操作。
&lt;/p&gt;

&lt;p&gt;
同时工厂操作员通过5G 联网的 AR 眼镜查看机器人工作情况。
&lt;/p&gt;

&lt;p&gt;
测试床的目的：
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;通过5G接收的机器视觉数据到边缘云，生成SLAM，再下发到机器人指引机器臂进行抓取、移动、放置动作&lt;/li&gt;
&lt;li&gt;针对机器人应用场景，验证5G网络和边缘云的可行性&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
5G和边缘云结合的优势：
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;简化机器人本体的硬件、精简机器人的体积，相当于机器人大脑迁移到了边缘云&lt;/li&gt;
&lt;li&gt;减少工厂的数据线，可以更灵活地调整生产线布局&lt;/li&gt;
&lt;/ul&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines F.45 不要返回 T&&</title>
   <link href="http://kimi.im/2022-06-26-cppcoreguidelines-f45"/>
   <updated>2022-06-26T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-f45</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
F.45: Don’t return a &lt;code&gt;T&amp;amp;&amp;amp;&lt;/code&gt;
&lt;/p&gt;

&lt;p&gt;
&lt;b&gt;理由&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
返回&lt;code&gt;T&amp;amp;&amp;amp;&lt;/code&gt;意味着返回已经销毁的临时对象。&lt;code&gt;&amp;amp;&amp;amp;&lt;/code&gt; 就好比是吸附临时对象的磁铁。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;例子&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
当你返回一个右值引用时，它的作用域范围在返回语句前已经结束了！
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-bad src-C++&quot;&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;auto&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;x&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;max&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;0&lt;/span&gt;, &lt;span style=&quot;color: #110099;&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// OK, so far&lt;/span&gt;
&lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;foo&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;x&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;                 &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// Undefined behavior&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
这种用法经常导致 bug，编译器也会报错。函数开发人员应该避免这种陷阱。
&lt;/p&gt;

&lt;p&gt;
安全生命周期开发要求及时发现这种问题。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;例子&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
临时返回的右值引用，可以再次转交给调用的函数。但是不能向上返回给上一层函数内使用。对于引用或完美传递（perfect forwarding）方式传入的参数，又要返回值的，可以用 &lt;code&gt;auto&lt;/code&gt; 推演返回类型（注意不是&lt;code&gt;auto&amp;amp;&amp;amp;&lt;/code&gt;）
&lt;/p&gt;

&lt;p&gt;
假设 &lt;code&gt;F&lt;/code&gt; 通过值返回：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-bad src-C++&quot;&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;// -*- compile-command: &quot;g++ -std=c++20 code.cpp &amp;amp;&amp;amp; ./a&quot;; -*-&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;#include&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&amp;lt;iostream&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;#include&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&amp;lt;gsl/gsl&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;using&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;namespace&lt;/span&gt; std;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;using&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;namespace&lt;/span&gt; gsl;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;template&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;F&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;auto&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;wrapper&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;F&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    cout &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;typeid&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;f&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;.&lt;span style=&quot;color: #3a5fcd; font-weight: bold; font-style: italic;&quot;&gt;name&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt;; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// or whatever instrumentation&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt;;               &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// BAD: returns a reference to a temporary&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;func&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;100&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;main&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;wrapper&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;func&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;  &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// no way to get return value&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;0&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
以下写法更好一些：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-C++&quot;&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;// -*- compile-command: &quot;g++ -std=c++20 code.cpp &amp;amp;&amp;amp; ./a&quot;; -*-&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;#include&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&amp;lt;iostream&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;#include&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&amp;lt;gsl/gsl&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;using&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;namespace&lt;/span&gt; std;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;using&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;namespace&lt;/span&gt; gsl;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;template&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;F&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;auto&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;wrapper&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;F&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    cout &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;typeid&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;f&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;.&lt;span style=&quot;color: #3a5fcd; font-weight: bold; font-style: italic;&quot;&gt;name&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; endl; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// or whatever instrumentation&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt;;          &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// OK&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;func&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;100&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;main&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    cout &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;wrapper&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;func&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;0&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;pre class=&quot;example&quot;&gt;
PFivE
100
&lt;/pre&gt;



&lt;p&gt;
&lt;b&gt;例外&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
&lt;code&gt;std::move&lt;/code&gt; 与&lt;code&gt;std::forward&lt;/code&gt;确实返回&lt;code&gt;&amp;amp;&amp;amp;&lt;/code&gt;，不过只是一次类型转换，用于在临时对象还没有被销毁前，将其引用传递出去。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;强化&lt;/b&gt;
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;除了&lt;code&gt;std::move&lt;/code&gt;与 &lt;code&gt;std::forward&lt;/code&gt; 之外，返回&lt;code&gt;&amp;amp;&amp;amp;&lt;/code&gt;的都要标记警告。&lt;/li&gt;
&lt;/ul&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines F.44 在不需要复制且无需返回空对象的时候返回引用 T&</title>
   <link href="http://kimi.im/2022-06-25-cppcoreguidelines-f44"/>
   <updated>2022-06-25T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-f44</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
F.44: Return a &lt;code&gt;T&amp;amp;&lt;/code&gt; when copy is undesirable and “returning no object” isn’t needed
&lt;/p&gt;

&lt;p&gt;
&lt;b&gt;理由&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
编程语言会确保&lt;code&gt;T&amp;amp;&lt;/code&gt;一定指向某个对象。所以不需要测试&lt;code&gt;T&amp;amp;&lt;/code&gt;的值是否为 &lt;code&gt;nullptr&lt;/code&gt;
&lt;/p&gt;

&lt;p&gt;
返回引用不转移所有权。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;例子&lt;/b&gt;
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-C++&quot;&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;// -*- compile-command: &quot;g++ -std=c++20 code.cpp &amp;amp;&amp;amp; ./a&quot;; -*-&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;#include&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&amp;lt;iostream&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;#include&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&amp;lt;array&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;#include&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&amp;lt;gsl/gsl&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;using&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;namespace&lt;/span&gt; std;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;using&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;namespace&lt;/span&gt; gsl;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;wheel&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;float&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;pressure&lt;/span&gt;;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;public&lt;/span&gt;:
    &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;wheel&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;float&lt;/span&gt; p &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;100&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;: &lt;span style=&quot;color: #110099; font-style: italic;&quot;&gt;pressure&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;p&lt;span style=&quot;color: #7388d6;&quot;&gt;){}&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;friend&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;ostream&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt; operator&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;ostream&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;o&lt;/span&gt;, &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;wheel&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;w&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;

&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;ostream&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt; operator&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;ostream&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;o&lt;/span&gt;, &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;wheel&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;w&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    o &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;wheel&apos;s pressure is &quot;&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; w.&lt;span style=&quot;color: #110099; font-style: italic;&quot;&gt;pressure&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; endl;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Car&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;array&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;wheel&lt;/span&gt;, &lt;span style=&quot;color: #110099;&quot;&gt;4&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;w&lt;/span&gt;;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ...&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;public&lt;/span&gt;:
    &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;Car&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(){}&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;wheel&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold; font-style: italic;&quot;&gt;get_wheel&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;i&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;Expects&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;i &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt; w.&lt;span style=&quot;color: #3a5fcd; font-weight: bold; font-style: italic;&quot;&gt;size&lt;/span&gt;&lt;span style=&quot;color: #709870;&quot;&gt;()&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt;; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; w&lt;span style=&quot;color: #909183;&quot;&gt;[&lt;/span&gt;i&lt;span style=&quot;color: #909183;&quot;&gt;]&lt;/span&gt;; &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ...&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;use&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Car&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;c&lt;/span&gt;;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;wheel&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;w0&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; c.&lt;span style=&quot;color: #3a5fcd; font-weight: bold; font-style: italic;&quot;&gt;get_wheel&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// w0 has the same lifetime as c&lt;/span&gt;
    cout &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; w0;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;main&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;use&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt;;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;0&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;pre class=&quot;example&quot;&gt;
wheel&apos;s pressure is 100
&lt;/pre&gt;



&lt;p&gt;
&lt;b&gt;强化&lt;/b&gt;
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;注意函数返回值是引用的话，函数是不可能返回 &lt;code&gt;nullptr&lt;/code&gt; 的&lt;/li&gt;
&lt;/ul&gt;
</content>
 </entry>
 
 <entry>
   <title>单词本：in situ</title>
   <link href="http://kimi.im/2022-06-25-latin-in-situ"/>
   <updated>2022-06-25T00:00:00+00:00</updated>
   <id>http://kimi.im/latin-in-situ</id>
   <content type="html">&lt;p&gt;
之前好像提过我最近的工作内容。阅读大量论文、专利和技术文档。然后，画各种关系图。再参加各个技术讨论会，就着架构图跟全球各地的同事们讨论下一步系统开发方案。
&lt;/p&gt;

&lt;p&gt;
前几天看一个专利，刚好最近经常一起开会的一个德国同事还是发明人之一。大概是讲一个能够远程采集工业现场仪器仪表数据，存到数据库服务器，然后可以让设备维护人员远程通过移动设备进行点检。专利有这样一段描述：
&lt;/p&gt;

&lt;p&gt;
Often, such manuals are not available directly in-situ but rather
located centrally with an external servicing service. To date, this
problem has been solved by virtue of an expert in a central external
servicing service supplying information which is required for
servicing or maintenance to the servicing personnel in-situ by
telephone. This communication path between the expert and the
servicing personnel in-situ can result in time delays on account of
interrupted information channels or even misunderstandings through the
wrong questions being asked or the wrong responses being given.
&lt;/p&gt;

&lt;p&gt;
考虑到，最近我很入迷拉丁语。所以很快发现这个词 in situ。这个词的意思是某人某物在某事当时发生的现场不曾动过。这样，上面那段专利描述就清楚了。
&lt;/p&gt;

&lt;p&gt;
such manuals are not available directly in-situ but rather located
centrally 这些手册并不直接在事发现场，而是在中心图书馆。
&lt;/p&gt;

&lt;p&gt;
this problem has been solved by virtue of an expert in a central
external servicing service supplying information which is required for
servicing or maintenance to the servicing personnel in-situ by
telephone. 这个问题的解决办法是外部服务专家及时给现场人员提供电话支持。
&lt;/p&gt;

&lt;p&gt;
This communication path between the expert and the servicing personnel
in-situ can result in time delays 专家和现场服务人员的通讯质量可能有时延。
&lt;/p&gt;

&lt;p&gt;
再看写栗子：
&lt;/p&gt;

&lt;p&gt;
Shareholders are likely to want a new chief executive in situ sooner
rather than later. 股东更想要一个新的 CEO 尽快就职。
&lt;/p&gt;

&lt;p&gt;
The archaeologists were able to date the vase because it was found in
situ. 考古学家可以很快鉴定花瓶的年份，因为这个花瓶就在其历史地层发现的。
&lt;/p&gt;

&lt;p&gt;
另外，好像 in situ 在外科医学方面用的比较多，大概是某个器官组织在其本来应该在的位置没有动的意思。
&lt;/p&gt;


&lt;p&gt;
嗯，学几个新单词并不是咱们看专利的主要动机。主要目的还是为了学会专利的八股文写法，多提交几个专利申请罢了。看了员工手册，成功国际专利申请，是可以领到一笔不小的奖金的。所以，我定了一个小小的目标：一年提交 3 个专利。今年的 3 idea 已经有了，剩下的，就是快快写出来交作业。
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines F.43 不要（直接或间接）返回指向局部对象的指针或引用</title>
   <link href="http://kimi.im/2022-06-24-cppcoreguidelines-f43"/>
   <updated>2022-06-24T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-f43</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
F.43: Never (directly or indirectly) return a pointer or a reference to a local object
&lt;/p&gt;

&lt;p&gt;
&lt;b&gt;理由&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
悬空指针（dangling pointer）会导致程序崩溃，数据破坏。
&lt;/p&gt;

&lt;p&gt;
&lt;b&gt;例子&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
虽然我们可以把函数内部的局部变量的地址返回出去，但是在函数执行完后，局部变量的内存已经被覆盖或者清空了。
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-bad src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;#include&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&amp;lt;gsl/gsl&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;using&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;namespace&lt;/span&gt; gsl;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;*&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;fx&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;9&lt;/span&gt;;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt;fx;  &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// BAD&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;g&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;*&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;p&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// looks innocent enough&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;gx&lt;/span&gt;;
    cout &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;*p == &quot;&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;*&lt;/span&gt;p &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;&apos;\n&apos;&lt;/span&gt;;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;p&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;999&lt;/span&gt;;
    cout &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;gx == &quot;&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; gx &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;&apos;\n&apos;&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;h&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;*&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;p&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt;;
    cout &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;*&lt;/span&gt;p;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;z&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;*&lt;/span&gt;p;  &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// read from abandoned stack frame (bad)&lt;/span&gt;
    &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;g&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;p&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;        &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// pass pointer to abandoned stack frame to function (bad)&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;main&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;h&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt;;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;0&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
这里，我们可能会得到如下结果：
&lt;/p&gt;

&lt;pre class=&quot;example&quot; id=&quot;org95a3e9f&quot;&gt;
*p == 999
gx == 999
&lt;/pre&gt;

&lt;p&gt;
原因可能是&lt;code&gt;g()&lt;/code&gt;重用了&lt;code&gt;f()&lt;/code&gt;函数不再使用的堆栈空间。所有&lt;code&gt;*p&lt;/code&gt;指向了 &lt;code&gt;gx&lt;/code&gt; 的堆栈空间。
&lt;/p&gt;

&lt;p&gt;
那么，我们再考虑下如下几种情况：
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;&lt;code&gt;fx&lt;/code&gt; 和 &lt;code&gt;gx&lt;/code&gt; 不是同一类型&lt;/li&gt;
&lt;li&gt;&lt;code&gt;fx&lt;/code&gt; 和 &lt;code&gt;gx&lt;/code&gt; 是同一类型的变体&lt;/li&gt;
&lt;li&gt;这个悬空指针在一组函数之间传来传去&lt;/li&gt;
&lt;li&gt;这个悬空指针被黑客发现了，会用来做什么事情&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
幸运的是，大部分现代编译器都会对简单的情况进行警告
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;注意&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
返回值是引用的话，也会出现一样的问题
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-bad src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;#include&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&amp;lt;gsl/gsl&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;using&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;namespace&lt;/span&gt; gsl;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;x&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;7&lt;/span&gt;;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ...&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; x;  &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// Bad: returns reference to object that is about to be destroyed&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;main&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    cout &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt;;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;0&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;pre class=&quot;example&quot;&gt;
7
&lt;/pre&gt;



&lt;p&gt;
&lt;b&gt;注意&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
静态局部变量的地址或引用返回不会出现此类问题。因为静态变量静态地分配了存储空间，指向他们的指针不会悬空。
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;#include&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&amp;lt;gsl/gsl&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;using&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;namespace&lt;/span&gt; gsl;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;static&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;x&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;7&lt;/span&gt;;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; x;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;*&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;g&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;static&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;x&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;7&lt;/span&gt;;
    cout &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt;x &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;&apos;\n&apos;&lt;/span&gt;;        
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt;x;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;main&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    cout &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;&apos;\n&apos;&lt;/span&gt;;
    cout &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;g&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;&apos;\n&apos;&lt;/span&gt;;
    cout &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;g&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;&apos;\n&apos;&lt;/span&gt;;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;0&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;pre class=&quot;example&quot;&gt;
7
0x100328004
7
0x100328004
0x100328004
&lt;/pre&gt;



&lt;p&gt;
&lt;b&gt;例子&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
有些局部变量指针悬空的情况不太明显
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-bad src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;#include&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&amp;lt;gsl/gsl&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;using&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;namespace&lt;/span&gt; gsl;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;*&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;glob&lt;/span&gt;;       &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// global variables are bad in so many ways&lt;/span&gt;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;template&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;steal&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;x&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #000000;&quot;&gt;glob&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;x&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt;;  &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// BAD&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;i&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;99&lt;/span&gt;;
    cout &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;address of i    = &quot;&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt;i &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; endl;
    &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;steal&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;]&lt;/span&gt; &lt;span style=&quot;color: #909183;&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt;i; &lt;span style=&quot;color: #909183;&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;main&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    cout &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;address of glob = &quot;&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; glob &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; endl;
    &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt;;
    cout &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;*&lt;/span&gt;glob &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;&apos;\n&apos;&lt;/span&gt;;
    cout &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;address of glob = &quot;&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; glob &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; endl;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;pre class=&quot;example&quot;&gt;
address of glob = 0x0
address of i    = 0x16ae6b2bc
99
address of glob = 0x16ae6b2bc
&lt;/pre&gt;


&lt;p&gt;
这里我们在函数&lt;code&gt;f()&lt;/code&gt;中把局部变量的引用赋值给了 &lt;code&gt;glob&lt;/code&gt; ，后续代码使用 &lt;code&gt;glob&lt;/code&gt;
会产生一些不确定的结果。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;注意&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
局部变量地址会通过返回、&lt;code&gt;T&amp;amp;&lt;/code&gt;入出参数、返回对象的成员、返回数组的元素等方式泄漏出来。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;注意&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
内层作用域的变量，也可能通过类似方式泄漏到外层作用域。
&lt;/p&gt;

&lt;p&gt;
此问题的另一个变体是将指针放在一个容器内，此容器的生存周期却比指针指向的对象的生存周期长。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;强化&lt;/b&gt;
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;编译器捕捉返回值为指向局部对象的引用和指针。&lt;/li&gt;
&lt;li&gt;静态代码分析确认用指针表示对象位置的情况。&lt;/li&gt;
&lt;/ul&gt;
</content>
 </entry>
 
 <entry>
   <title>单词本：primus inter pares</title>
   <link href="http://kimi.im/2022-06-24-latin-primus-inter-pares"/>
   <updated>2022-06-24T00:00:00+00:00</updated>
   <id>http://kimi.im/latin-primus-inter-pares</id>
   <content type="html">&lt;p&gt;
我所在的部门是公司的平台基础部门，自然是投入大量研发人员，开发出基础共性的产品，供其他业务部门组装使用。所以，我们也会召集别的业务部门的一些研发人员，组成一些特定技术领域的工作小组。一般来说，工作小组要有组长，有组织，有目标的工作。但是，这种技术工作小组又不是项目小组，所以不太会有很明确的目标。同时，研发人员也不好意思跳出来做组长。结果，我就看到，有个技术工作小组的人员名单中也没有指定组长，但是在名字后面的小括号里写着 primus inter pares。很显然，这是一个拉丁语，意思是 first among
peers，同僚里面资格最老的。窃以为，对技术工程师来说，这个称呼其实比
team manager 更高大上。
&lt;/p&gt;

&lt;p&gt;
举几个栗子：
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;the feudal king was &lt;b&gt;primus inter pares&lt;/b&gt; among his vassals. 封建国王是诸侯们的首席代表。&lt;/li&gt;
&lt;li&gt;In the ancient Roman Republic, the &lt;b&gt;primus inter pares&lt;/b&gt; of the Senate
was called the princeps senatus, first of the Senate. 在古罗马共和制，同僚里面资格最老的元老成为第一元老。&lt;/li&gt;
&lt;li&gt;A &amp;rsquo;&lt;b&gt;Primus Inter Pares&lt;/b&gt;&amp;rsquo; in EU Foreign Policy? – German Leadership in
the European Council during the Libyan and Ukrainian Crises 这是一篇论文的题目，欧洲外交政策，有能力促成欧盟各国达成共识的国家，就是同僚里资格最老的德国。&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Primus inter pares&lt;/b&gt;: A Comparison and Ranking of COVID-19 Vaccines 这是另一篇论文的题目，作者试图比较新冠疫苗找到最有效的，即一批疫苗里面资格最老的。&lt;/li&gt;
&lt;/ul&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines F.42 返回 T* 表示一个内存地址</title>
   <link href="http://kimi.im/2022-06-23-cppcoreguidelines-f42"/>
   <updated>2022-06-23T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-f42</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
F.42: Return a &lt;code&gt;T*&lt;/code&gt; to indicate a position (only)
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;理由&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
只有返回内存地址的情况下，可以使用指针。不可以用&lt;code&gt;T*&lt;/code&gt;返回所有权。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;例子&lt;/b&gt;
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-C++&quot;&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Node&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;*&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;find&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Node&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;*&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;t&lt;/span&gt;, &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;string&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;s&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;  &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// find s in a binary tree of Nodes&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;!&lt;/span&gt;t &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;||&lt;/span&gt; t&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #110099; font-style: italic;&quot;&gt;name&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;==&lt;/span&gt; s&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; t;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;auto&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;p&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;find&lt;/span&gt;&lt;span style=&quot;color: #709870;&quot;&gt;(&lt;/span&gt;t&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #110099; font-style: italic;&quot;&gt;left&lt;/span&gt;, s&lt;span style=&quot;color: #709870;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; p;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;auto&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;p&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;find&lt;/span&gt;&lt;span style=&quot;color: #709870;&quot;&gt;(&lt;/span&gt;t&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #110099; font-style: italic;&quot;&gt;right&lt;/span&gt;, s&lt;span style=&quot;color: #709870;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; p;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #110099; font-weight: bold;&quot;&gt;nullptr&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;
如果上面函数返回值不是 &lt;code&gt;nullptr&lt;/code&gt; 就表示一个节点字符串是 &lt;code&gt;s&lt;/code&gt; 的节点地址。重要的是，这里没有转移指针所指向的对象的所有权。
&lt;/p&gt;



&lt;p&gt;
&lt;b&gt;注意&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
位置信息也可以通过迭代器 &lt;code&gt;iterator&lt;/code&gt; ，索引 &lt;code&gt;index&lt;/code&gt; 和引用 &lt;code&gt;reference&lt;/code&gt; 传递。如果不考虑 &lt;code&gt;nullptr&lt;/code&gt; 或不修改对象数据，引用比指针更好。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;注意&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
返回的指针不能指向函数调用方作用域范围外的对象。see F43
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;强化&lt;/b&gt;
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;标记用 &lt;code&gt;delete&lt;/code&gt; ， &lt;code&gt;std::free()&lt;/code&gt; 操作&lt;code&gt;T*&lt;/code&gt;的代码，只有对象所有者才能删除对象。&lt;/li&gt;
&lt;li&gt;标记 &lt;code&gt;new&lt;/code&gt; 或 &lt;code&gt;malloc()&lt;/code&gt; 生成的对象赋值给&lt;code&gt;T*&lt;/code&gt;的代码，只有对象所有者负责删除对象。&lt;/li&gt;
&lt;/ul&gt;
</content>
 </entry>
 
 <entry>
   <title>单词本：pro forma</title>
   <link href="http://kimi.im/2022-06-23-latin-pro-forma"/>
   <updated>2022-06-23T00:00:00+00:00</updated>
   <id>http://kimi.im/latin-pro-forma</id>
   <content type="html">&lt;p&gt;
前不久，公司 CMD 的 PPT。公司进行了一系列的财务优化，比如项目评估选择、
NWC 优化，ROC 不断提升，全球市场占有率也稳居第一。
&lt;/p&gt;

&lt;p&gt;
PPT 中这些财务数据的标题叫做 2021 pro-forma。一看就知道这也是拉丁语。字面意思就是“for the sake of form”，即形式上预估的意思。说白了就是，排除财务上不确定因素、按照目前的经营效益进行预测估算。主要用来辅助制定财务、经营方面的决策，或者跟投资人、股东沟通企业近期的经营效益。当然了，作为公司员工，这些 pro forma 分析数据可以告诉我，我的年终奖大概在多少范围。
&lt;/p&gt;

&lt;p&gt;
在外贸行业，还有一种叫 pro forma invoice 的东西，预开发票。这个发票包含了货物基本信息，用来评估物流价格、关税价格等。等到实际发货了，需要正式开具发票替换。see：
&lt;/p&gt;

&lt;p&gt;
A pro forma invoice is a preliminary bill of sale sent to buyers in
advance of a shipment or delivery of goods. The invoice will typically
describe the purchased items and other important information, such as
the shipping weight and transport charges. A pro forma invoice
requires only enough information to allow customs to determine the
duties needed from a general examination of the included goods.
&lt;/p&gt;

&lt;p&gt;
在进行企业合并收购的时候，投行经常需要进行 pro-forma analysis，即预估分析。分析合并收购会带产生多少商誉、收购会增厚还是摊薄净利润等，从而辅助决策。
&lt;/p&gt;

&lt;p&gt;
pro forma forecasting 的几个方法：
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;percent of sales, 销售增长率。因为销售额和销售增长率是相关联的。&lt;/li&gt;
&lt;li&gt;straight line，直线拟合，假设在稳定市场情况下，年增长率上下浮动不大，那就可以大笔一挥，画出未来量三年的增长数据。&lt;/li&gt;
&lt;li&gt;moving average，移动平均。跟上面的假设类似，以前几年的财务数据做一个加权平均，预计未来的数据。&lt;/li&gt;
&lt;li&gt;simple linear regression，简单线性回归。根据历史数据，拟合函数方程式进行预估。&lt;/li&gt;
&lt;li&gt;multiple linear regression，多维线性回归。根据多个变量拟合曲线方程。&lt;/li&gt;
&lt;li&gt;delphi method，调研行业专家，统计他们对市场的预测进行预估。&lt;/li&gt;
&lt;li&gt;market research，市场分析研究。提出假设模型，验证假设，进行预估。&lt;/li&gt;
&lt;/ul&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines F.27 用 shapred_ptr<T> 共享所有权</title>
   <link href="http://kimi.im/2022-06-22-cppcoreguidelines-f27"/>
   <updated>2022-06-22T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-f27</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
F.27: Use a &lt;code&gt;shared_ptr&amp;lt;T&amp;gt;&lt;/code&gt; to share ownership
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;理由&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
&lt;code&gt;std::shared_ptr&lt;/code&gt; 是共享所有权的标准操作。即指针的最后一个所有者负责删除对象。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;例子&lt;/b&gt;
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;#include&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&amp;lt;iostream&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;#include&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&amp;lt;thread&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;#include&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&amp;lt;memory&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;using&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;namespace&lt;/span&gt; std;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Image&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
  &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;public&lt;/span&gt;:
    &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;Image&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;string&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;ims&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{}&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;~&lt;/span&gt;Image&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt; cout &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;~Image&quot;&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; endl; &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;enum&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;direction&lt;/span&gt; : &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #000000;&quot;&gt;top_left&lt;/span&gt;,
    &lt;span style=&quot;color: #000000;&quot;&gt;top_right&lt;/span&gt;,
    &lt;span style=&quot;color: #000000;&quot;&gt;bottom_left&lt;/span&gt;,
    &lt;span style=&quot;color: #000000;&quot;&gt;bottom_right&lt;/span&gt;,
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;shade&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;direction&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;d&lt;/span&gt;, &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;shared_ptr&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Image&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;im&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    cout &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;shade to &quot;&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; d &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; endl;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;main&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;shared_ptr&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Image&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;im&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Image&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;Image&quot;&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;std&lt;/span&gt;::&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;thread&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;t0&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;shade, top_left, im&lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;std&lt;/span&gt;::&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;thread&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;t1&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;shade, top_right, im&lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;std&lt;/span&gt;::&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;thread&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;t2&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;shade, bottom_left, im&lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;std&lt;/span&gt;::&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;thread&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;t3&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;shade, bottom_right, im&lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;;
    t0.&lt;span style=&quot;color: #3a5fcd; font-weight: bold; font-style: italic;&quot;&gt;join&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt;; t1.&lt;span style=&quot;color: #3a5fcd; font-weight: bold; font-style: italic;&quot;&gt;join&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt;; t2.&lt;span style=&quot;color: #3a5fcd; font-weight: bold; font-style: italic;&quot;&gt;join&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt;; t3.&lt;span style=&quot;color: #3a5fcd; font-weight: bold; font-style: italic;&quot;&gt;join&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;


&lt;span style=&quot;color: #3F7F5F;&quot;&gt;// detach threads&lt;/span&gt;
&lt;span style=&quot;color: #3F7F5F;&quot;&gt;// last thread to finish deletes the image&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;pre class=&quot;example&quot;&gt;
shade to 0
shade to 1
shade to 2
shade to 3
~Image
&lt;/pre&gt;



&lt;p&gt;
&lt;b&gt;注意&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
如果只有一个所有者的话，请使用&lt;code&gt;unique_ptr&lt;/code&gt;。 &lt;code&gt;shared_ptr&lt;/code&gt; 用于多个所有者共享所有权。
&lt;/p&gt;

&lt;p&gt;
过多使用&lt;code&gt;shared_ptr&lt;/code&gt;会造成性能影响。&lt;code&gt;shared_ptr&lt;/code&gt;用原子操作维护一个引用计数器，有一定性能开销。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;其他方案&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
让单独一个对象维护共享资源，当其他使用者完成工作后，由这个对象负责销毁资源。
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>单词本：soldiering</title>
   <link href="http://kimi.im/2022-06-19-english-soldiering"/>
   <updated>2022-06-19T00:00:00+00:00</updated>
   <id>http://kimi.im/english-soldiering</id>
   <content type="html">&lt;p&gt;
话说，第二次工业革命时期，科学技术发展突飞猛进，新技术新发明层出不穷，工厂生产规模不断发展。相应的，对现代科学管理提出了更高的要求。这一时期涌现了一批研究管理方法的学者。比如有精准分析工人作业动作的 Frank
Gilbreth，他把工人的标准操作分解为所谓 &lt;a href=&quot;http://kimi.im/2021-03-11-english-therblig&quot;&gt;Therblig&lt;/a&gt; 的 17 个动作，然后用秒表进行计时进行动作优化。
&lt;/p&gt;

&lt;p&gt;
照理说，把动作结构、优化、再组合，工人的工作效率应该很高才对。可是，事实正好相反，反而是，越来越多的工人们消极怠工。这时候，有个叫 Frederick
Winslow Taylor 的人跳出来，说要解决这个问题。他后来被成为科学管理之父。在钢铁厂工作的时候，泰勒发现很多工人通过破坏工具等方法，故意降低生产效率。他将这种蓄意的工人们消极怠工、摸鱼、磨洋工的行为称为 soldiering：
&lt;/p&gt;

&lt;p&gt;
Tayler witnessed many acts aimed at limiting or reducing production —
including having his tools destroyed — and it was he who coined the
term soldiering to describe this deliberate act. Working in the steel
industry, Taylor had observed the phenomenon of workers&amp;rsquo; purposely
operating well below their capacity, that is, soldiering. He
attributed soldiering to three causes &lt;sup&gt;&lt;a id=&quot;fnr.1&quot; class=&quot;footref&quot; href=&quot;#fn.1&quot; role=&quot;doc-backlink&quot;&gt;1&lt;/a&gt;&lt;/sup&gt;:
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;The almost universally held belief among workers that if they became more productive, fewer of them would be needed and jobs would be eliminated.&lt;/li&gt;
&lt;li&gt;Non-incentive wage systems encourage low productivity if the
employee will receive the same pay regardless of how much is
produced, assuming the employee can convince the employer that the
slow pace really is a good pace for the job. Employees take great
care never to work at a good pace for fear that this faster pace
would become the new standard. If employees are paid by the quantity
they produce, they fear that management will decrease their per-unit
pay if the quantity increases.&lt;/li&gt;
&lt;li&gt;Workers waste much of their effort by relying on rule-of-thumb
methods rather than on optimal work methods that can be determined
by scientific study of the task.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
他总结了工人之所以会 soldiering 的三个原因：
&lt;/p&gt;
&lt;ol class=&quot;org-ol&quot;&gt;
&lt;li&gt;工人普遍认为，工作太积极，活儿会干完，大家会失业。&lt;/li&gt;
&lt;li&gt;当时的薪酬系统不奖励工作效率的提升，工人担心太快地干活，会成为新的工作标准&lt;/li&gt;
&lt;li&gt;工作方法多以经验为主，没有进行科学的优化&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;
相应的，泰勒提出了科学管理的四个原则：
&lt;/p&gt;
&lt;ol class=&quot;org-ol&quot;&gt;
&lt;li&gt;针对生产任务，以科学分析的方法替代经验判断&lt;/li&gt;
&lt;li&gt;科学系统的选择培训员工而不是放任不管&lt;/li&gt;
&lt;li&gt;协调工人们使用科学的工作方法&lt;/li&gt;
&lt;li&gt;协调管理层和工人进行工作分配，互相支持，合理激励&lt;/li&gt;
&lt;/ol&gt;
&lt;div id=&quot;footnotes&quot;&gt;
&lt;h2 class=&quot;footnotes&quot;&gt;Footnotes: &lt;/h2&gt;
&lt;div id=&quot;text-footnotes&quot;&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.1&quot; class=&quot;footnum&quot; href=&quot;#fnr.1&quot; role=&quot;doc-backlink&quot;&gt;1&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot; role=&quot;doc-footnote&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;http://www.netmba.com/mgmt/scientific/&quot;&gt;http://www.netmba.com/mgmt/scientific/&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;


&lt;/div&gt;
&lt;/div&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines F.26 用 unique_ptr<T> 传递指针所有权</title>
   <link href="http://kimi.im/2022-06-18-cppcoreguidelines-f26"/>
   <updated>2022-06-18T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-f26</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
F.26: Use a &lt;code&gt;unique_ptr&amp;lt;T&amp;gt;&lt;/code&gt; to transfer ownership where a pointer is needed
&lt;/p&gt;

&lt;p&gt;
&lt;b&gt;理由&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
&lt;code&gt;unique_ptr&lt;/code&gt; 是安全传递指针的最轻量的方法。
&lt;/p&gt;

&lt;p&gt;
如果返回值是&lt;code&gt;shared_ptr&lt;/code&gt;请查看&lt;a href=&quot;https://kimi.im/2022-10-20-cppcoreguidelines-c50&quot;&gt;CppCoreGuidelines C.50如果初始化阶段需要一些虚行为，可以用工厂函数&lt;/a&gt;
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;例子&lt;/b&gt;
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-C++&quot;&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;// -*- compile-command: &quot;g++ -std=c++20 code.cpp &amp;amp;&amp;amp; ./a&quot;; -*-&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;#include&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&amp;lt;iostream&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;#include&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&amp;lt;sstream&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;#include&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&amp;lt;gsl/gsl&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;using&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;namespace&lt;/span&gt; std;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;using&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;namespace&lt;/span&gt; gsl;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;enum&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;shape_type&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;kCircle&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;0&lt;/span&gt;, &lt;span style=&quot;color: #000000;&quot;&gt;kTriangle&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Shape&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;public&lt;/span&gt;:
    &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;Shape&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;cout &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;Shape\n&quot;&lt;/span&gt;;&lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;virtual&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;~&lt;/span&gt;Shape&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;default&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Circle&lt;/span&gt;: &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Shape&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;public&lt;/span&gt;:
    &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;Circle&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;istream&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;is&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;){&lt;/span&gt;cout&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;Circle\n&quot;&lt;/span&gt;;&lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;~&lt;/span&gt;Circle&lt;span style=&quot;color: #7388d6;&quot;&gt;(){&lt;/span&gt;cout&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;~Circle\n&quot;&lt;/span&gt;;&lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Triangle&lt;/span&gt;: &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Shape&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;public&lt;/span&gt;:
    &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;Triangle&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;istream&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;is&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;){&lt;/span&gt;cout&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;Triangle\n&quot;&lt;/span&gt;;&lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;~&lt;/span&gt;Triangle&lt;span style=&quot;color: #7388d6;&quot;&gt;(){&lt;/span&gt;cout&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;~Triangle\n&quot;&lt;/span&gt;;&lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;shape_type&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;read_header&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;istream&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;is&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;shape&lt;/span&gt;;
    is &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;gt;&amp;gt;&lt;/span&gt; shape;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;shape_type&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;shape&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: #3F7F5F;&quot;&gt;// assemble shape from input stream&lt;/span&gt;
&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;unique_ptr&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Shape&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;get_shape&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;istream&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;is&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;auto&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;kind&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;read_header&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;is&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;switch&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;kind&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;case&lt;/span&gt; kCircle:
        &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;make_unique&lt;/span&gt;&lt;span style=&quot;color: #909183; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Circle&lt;/span&gt;&lt;span style=&quot;color: #909183; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;is&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt;;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;case&lt;/span&gt; kTriangle:
        &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;make_unique&lt;/span&gt;&lt;span style=&quot;color: #909183; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Triangle&lt;/span&gt;&lt;span style=&quot;color: #909183; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;is&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt;;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;default&lt;/span&gt;:
        &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #110099; font-weight: bold;&quot;&gt;nullptr&lt;/span&gt;;
    &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;main&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;stringstream&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;ss1&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;0 circle&quot;&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;;
    &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;get_shape&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;ss1&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &amp;#33258;&amp;#21160;&amp;#38144;&amp;#27585; Circle&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;stringstream&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;ss2&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;1 triangle&quot;&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;;
    &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;get_shape&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;ss2&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &amp;#33258;&amp;#21160;&amp;#38144;&amp;#27585; Triangle&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;0&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;pre class=&quot;example&quot;&gt;
Shape
Circle
~Circle
Shape
Triangle
~Triangle
&lt;/pre&gt;


&lt;p&gt;
不用&lt;code&gt;unique_ptr&lt;/code&gt;的话，就没法自动销毁两个对象，需要手动销毁：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-C++&quot;&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;// -*- compile-command: &quot;g++ -std=c++20 code.cpp &amp;amp;&amp;amp; ./a&quot;; -*-&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;#include&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&amp;lt;iostream&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;#include&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&amp;lt;sstream&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;#include&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&amp;lt;gsl/gsl&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;using&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;namespace&lt;/span&gt; std;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;using&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;namespace&lt;/span&gt; gsl;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;enum&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;shape_type&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;kCircle&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;0&lt;/span&gt;, &lt;span style=&quot;color: #000000;&quot;&gt;kTriangle&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Shape&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;public&lt;/span&gt;:
    &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;Shape&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;cout &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;Shape\n&quot;&lt;/span&gt;;&lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;virtual&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;~&lt;/span&gt;Shape&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;default&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Circle&lt;/span&gt;: &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Shape&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;public&lt;/span&gt;:
    &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;Circle&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;istream&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;is&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;){&lt;/span&gt;cout&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;Circle\n&quot;&lt;/span&gt;;&lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;~&lt;/span&gt;Circle&lt;span style=&quot;color: #7388d6;&quot;&gt;(){&lt;/span&gt;cout&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;~Circle\n&quot;&lt;/span&gt;;&lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Triangle&lt;/span&gt;: &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Shape&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;public&lt;/span&gt;:
    &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;Triangle&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;istream&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;is&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;){&lt;/span&gt;cout&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;Triangle\n&quot;&lt;/span&gt;;&lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;~&lt;/span&gt;Triangle&lt;span style=&quot;color: #7388d6;&quot;&gt;(){&lt;/span&gt;cout&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;~Triangle\n&quot;&lt;/span&gt;;&lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;shape_type&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;read_header&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;istream&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;is&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;shape&lt;/span&gt;;
    is &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;gt;&amp;gt;&lt;/span&gt; shape;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;shape_type&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;shape&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: #3F7F5F;&quot;&gt;// assemble shape from input stream&lt;/span&gt;
&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Shape&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;*&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;get_shape&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;istream&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;is&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;auto&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;kind&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;read_header&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;is&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;switch&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;kind&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;case&lt;/span&gt; kCircle:
        &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Circle&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;is&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt;;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;case&lt;/span&gt; kTriangle:
        &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Triangle&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;is&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt;;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;default&lt;/span&gt;:
        &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #110099; font-weight: bold;&quot;&gt;nullptr&lt;/span&gt;;
    &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;main&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;stringstream&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;ss1&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;0 circle&quot;&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;;
    &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;get_shape&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;ss1&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &amp;#27809;&amp;#26377;&amp;#33258;&amp;#21160;&amp;#38144;&amp;#27585; Circle&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;stringstream&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;ss2&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;1 triangle&quot;&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;auto&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;shape&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;get_shape&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;ss2&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;delete&lt;/span&gt; shape;    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &amp;#38144;&amp;#27585; Triangle&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;0&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;pre class=&quot;example&quot;&gt;
Shape
Circle
Shape
Triangle
~Triangle
&lt;/pre&gt;



&lt;p&gt;
&lt;b&gt;注意&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
如果需要运用类层级上基类的接口函数的话，你需要传递一个指针而不是对象。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;强化&lt;/b&gt;
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;（简单）如果函数返回一个局部的原始指针的话，需要进行警告。建议使用
&lt;code&gt;unique_ptr&lt;/code&gt; 或&lt;code&gt;shared_ptr&lt;/code&gt;。&lt;/li&gt;
&lt;/ul&gt;
</content>
 </entry>
 
 <entry>
   <title>单词本：quid pro quo</title>
   <link href="http://kimi.im/2022-06-18-latin-quid-pro-quo"/>
   <updated>2022-06-18T00:00:00+00:00</updated>
   <id>http://kimi.im/latin-quid-pro-quo</id>
   <content type="html">&lt;p&gt;
上半年学了一套拉丁语课程。之后，就很容易在阅读文章的时候遇到拉丁语单词。事实上，这些单词本来就藏在英语文章之中，只是以前没那么在意罢了。这个应该是我们大脑神经系统的一种机能吧。因为我们的大脑每天要处理大量的信息，信息处理的带宽是有限的，所以部分信息就会被过滤掉了。这就是认知过滤（cognitive filtration）。这也就导致了我们人类不同个体认识世界会出现一些差异，此谓认知偏差（cognitive bias）。只有不断的学习，获取尽量全面的知识，才可以全面认识世界。
&lt;/p&gt;

&lt;p&gt;
不扯远了。昨天在看工作包容性多样性（diversity in a organization），看到这个词组 quid pro quo。这个是在讲办公室性骚扰指出性骚扰有两种形式：
&lt;/p&gt;

&lt;p&gt;
Two forms of sexual harassment that can occur at work are &lt;b&gt;quid pro quo&lt;/b&gt;
and hostile environment.
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;Quid pro quo harassment refers to the exchange of rewards for sexual
favors or punishments for refusal to grant sexual favors.&lt;/li&gt;
&lt;li&gt;Harassment that creates a hostile environment refers to behaviors
that create an abusive work climate.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
第一种就是 Quid pro quo harassment，是指通过职务之便给予报酬或惩罚索取
XX。另一种，则是简单粗暴的调戏他人。
&lt;/p&gt;

&lt;p&gt;
前不久，SpaceX 的前空姐不就举报了 Musk：The attendant is reported to
have been a contract member of the SpaceX&amp;rsquo;s corporate fleet. She
alleged Musk offered to buy her a horse as &lt;b&gt;quid pro quo&lt;/b&gt; for an exotic
massage. &lt;sup&gt;&lt;a id=&quot;fnr.1&quot; class=&quot;footref&quot; href=&quot;#fn.1&quot; role=&quot;doc-backlink&quot;&gt;1&lt;/a&gt;&lt;/sup&gt; 富豪说给她买一匹马，作为报酬，换取一次XX按摩。
&lt;/p&gt;

&lt;p&gt;
If senior executives are allowed to engage in &lt;b&gt;quid pro quo&lt;/b&gt;
relationships without getting sued or fired, then that&amp;rsquo;s another
negative message. If true victims aren&amp;rsquo;t believed and true
perpetrators aren&amp;rsquo;t sanctioned with terminations or civil suits, then
the problem will continue. &lt;sup&gt;&lt;a id=&quot;fnr.2&quot; class=&quot;footref&quot; href=&quot;#fn.2&quot; role=&quot;doc-backlink&quot;&gt;2&lt;/a&gt;&lt;/sup&gt; 如果企业允许高管用报偿获取好处，而不被解雇，没人相信真正受害者，肇事者逍遥法外，那么问题会一直存在。
&lt;/p&gt;

&lt;p&gt;
quid-pro-quo 本意是 something for something，一物换一物。比如
U.S. rejects Russian &lt;b&gt;quid-pro-quo&lt;/b&gt; on Ukraine food exports. 俄罗斯以乌克兰粮食解封换取解除制裁遭到美国拒绝。。
&lt;/p&gt;
&lt;div id=&quot;footnotes&quot;&gt;
&lt;h2 class=&quot;footnotes&quot;&gt;Footnotes: &lt;/h2&gt;
&lt;div id=&quot;text-footnotes&quot;&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.1&quot; class=&quot;footnum&quot; href=&quot;#fnr.1&quot; role=&quot;doc-backlink&quot;&gt;1&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot; role=&quot;doc-footnote&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;https://www.rollingstone.com/culture/culture-news/elon-musk-space-x-flight-attendant-sexual-misconduct-settlement-1356164/&quot;&gt;https://www.rollingstone.com/culture/culture-news/elon-musk-space-x-flight-attendant-sexual-misconduct-settlement-1356164/&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.2&quot; class=&quot;footnum&quot; href=&quot;#fnr.2&quot; role=&quot;doc-backlink&quot;&gt;2&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot; role=&quot;doc-footnote&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;https://www.nbcnews.com/tech/tech-news/after-sexual-harassment-claims-uber-tesla-silicon-valley-prone-discrimination-n731236&quot;&gt;https://www.nbcnews.com/tech/tech-news/after-sexual-harassment-claims-uber-tesla-silicon-valley-prone-discrimination-n731236&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;


&lt;/div&gt;
&lt;/div&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines F.25 用 zstring 或 not_null<zstring> 表示 C 风格字符串</title>
   <link href="http://kimi.im/2022-06-17-cppcoreguidelines-f25"/>
   <updated>2022-06-17T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-f25</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
F.25: Use a &lt;code&gt;zstring&lt;/code&gt; or a &lt;code&gt;not_null&amp;lt;zstring&amp;gt;&lt;/code&gt; to designate a C-style string
&lt;/p&gt;

&lt;p&gt;
&lt;b&gt;理由&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
C 风格字符串很普遍。一般约定为以空字符结尾的字符串数组。我们必须区分 C
风格字符串、指向单个字符的指针还是指向字符串数组的指针。
&lt;/p&gt;

&lt;p&gt;
如果不需要 &lt;code&gt;null&lt;/code&gt; 结尾，可以用 &lt;code&gt;string_view&lt;/code&gt;
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;例子&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
考虑以下函数
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-bad src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;length&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;char&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;*&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;p&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
其他函数调用&lt;code&gt;length(s)&lt;/code&gt;的时候，是否需要先检查 &lt;code&gt;s&lt;/code&gt; 非空？还是在&lt;code&gt;length()&lt;/code&gt;的函数的代码实现里会去检查确保参数非空？
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-C++&quot;&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;// the implementor of length() must assume that p == nullptr is possible&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;length&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;zstring&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;p&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;

&lt;span style=&quot;color: #3F7F5F;&quot;&gt;// it is the caller&apos;s job to make sure p != nullptr&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;length&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;not_null&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;zstring&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;p&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
以上代码，前一个声明要求代码实现能够接受 p 是空指针的情况。第二个声明，则要求函数的调用方确保传进来的参数不能是空指针。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;注意&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
&lt;code&gt;zstring&lt;/code&gt; 不带所有权信息
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>单词本：ad hominem</title>
   <link href="http://kimi.im/2022-06-15-latin-ad-hominen"/>
   <updated>2022-06-15T00:00:00+00:00</updated>
   <id>http://kimi.im/latin-ad-hominen</id>
   <content type="html">&lt;p&gt;
早上看了下公众号的订阅数，已经突破 400 人了。也算是一个小小的里程碑了。希望分享文章对订户有用吧，也希望各位订户帮忙点赞、看一看、转一转。
&lt;/p&gt;

&lt;p&gt;
最近实在是迷上了拉丁语。正是因为内心总是关注，就会在看看书看文章的时候，不断遇到。
&lt;/p&gt;

&lt;p&gt;
比如今天的这个单词 ad hominem 就是在看沟通管理相关的书的时候看到的。书里列了几个导致无效沟通的问题，其中一个就是 ad hominem fallicy（人身攻击谬论）。十大谬论分别是：
&lt;/p&gt;
&lt;ol class=&quot;org-ol&quot;&gt;
&lt;li&gt;人身攻击（ad hominem），通过批评其来源而反驳某立场或论证&lt;/li&gt;
&lt;li&gt;稻草人（straw man），为了反驳对方立场，以夸大、错误表达等方式曲解其立场&lt;/li&gt;
&lt;li&gt;以愤怒争辩（argument from outrage），以愤怒代替证据作出判断&lt;/li&gt;
&lt;li&gt;威吓手段 （scare tactics），以威胁恐惧代替证据作出判断&lt;/li&gt;
&lt;li&gt;以偏概全 （hasty generalization），用轶闻趣事来证明或反驳普遍的因果联系&lt;/li&gt;
&lt;li&gt;群体思维（ groupthink fallacy），任凭群体对其的忠诚来干扰对问题的判断&lt;/li&gt;
&lt;li&gt;转移话题 （red herring），转移话题或放烟雾弹来转移注意力&lt;/li&gt;
&lt;li&gt;一厢情愿（relativist fallacy），用自己的思维推断别人的情况&lt;/li&gt;
&lt;li&gt;随波逐流 （ argument from popularity），以公众的一致意见代替证据&lt;/li&gt;
&lt;li&gt;因果误导（before-after fallacy），误认为先后相继发生的事情之间就有因果联系&lt;/li&gt;
&lt;/ol&gt;


&lt;p&gt;
很显然， ad hominem 是一个拉丁语，意思是&amp;ldquo;to the person、人身攻击、针对个人&amp;rdquo;。在英语里，一般用作形容词或副词。
&lt;/p&gt;

&lt;p&gt;
例句:
&lt;/p&gt;

&lt;p&gt;
This is an ad hominem response. 这是一个针对个人的回应。
&lt;/p&gt;

&lt;p&gt;
These points come from some of our best information sources, who
realize they&amp;rsquo;ll be attacked ad hominem. 这些观点来自我们最好的信息来源，他们担心他们会被人身攻击。
&lt;/p&gt;


&lt;p&gt;
ad hominem 案例：
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;如果一个人参加辩论捍卫素食主义者的权利，但自己不是素食者，他们的对手可能会使用 ad hominem fallicy 来诋毁他们的论点：“你昨晚晚餐吃肉了，你怎么能为素食主义争论？”&lt;/li&gt;
&lt;li&gt;During the 2016 presidential campaign, Donald Trump threw out one
abusive ad hominem attack after another about Hillary Clinton, such
as, &amp;ldquo;Now you tell me she looks presidential, folks. I look
presidential,&amp;rdquo; as if clothing were the important issue at hand. 特朗普竞选总统时，以希拉里的衣着不好看作为依据，说她不适合当总统。&lt;/li&gt;
&lt;li&gt;Ad feminam: Using female stereotypes to attack a viewpoint is an ad
feminam fallacy, for example, calling someone&amp;rsquo;s viewpoint irrational
because of pregnancy, menopause, or menstruation hormones. 针对女性的攻击，比如认为女性因为孕期、经期激素影响，会变得非理性这样的论断就是一种 ad hominem/ad feminam。&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;
总结一下：
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;ad hominem 针对个人的、人身攻击&lt;/li&gt;
&lt;li&gt;ad feminam 针对女性的攻击&lt;/li&gt;
&lt;/ul&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines F.24 用 span<T> 或 span_t<T> 表示半开序列</title>
   <link href="http://kimi.im/2022-06-12-cppcoreguidelines-f24"/>
   <updated>2022-06-12T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-f24</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&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;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;X&lt;/span&gt;* &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;find&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;span&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;X&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;r&lt;/span&gt;, &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;X&lt;/span&gt;&amp;amp; &lt;span style=&quot;color: #000000;&quot;&gt;v&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;find v in r&lt;/span&gt;

&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;vector&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;X&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;vec&lt;/span&gt;;
&lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;...&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;auto&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;p&lt;/span&gt; = find&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;vec.begin&lt;span style=&quot;color: #909183;&quot;&gt;()&lt;/span&gt;, vec.end&lt;span style=&quot;color: #909183;&quot;&gt;()&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;, X&lt;span style=&quot;color: #7388d6;&quot;&gt;{}&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;  &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;find X{} in vec&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
注意
&lt;/p&gt;

&lt;p&gt;
C++ 代码中，范围的使用很普遍。一般都是隐式的，很难确保正确使用。尤其是，
&lt;code&gt;(p, n)&lt;/code&gt; 表示一个数组 &lt;code&gt;[p:p+n)&lt;/code&gt; ，很难理清楚是要访问 &lt;code&gt;*p&lt;/code&gt; 后面有 &lt;code&gt;n&lt;/code&gt; 个元素。
&lt;code&gt;span&amp;lt;T&amp;gt;&lt;/code&gt; 和 &lt;code&gt;span_p&amp;lt;T&amp;gt;&lt;/code&gt; 表示一个范围 &lt;code&gt;[p:q)&lt;/code&gt; ，以 &lt;code&gt;p&lt;/code&gt; 开始，以预测条件为真结束。
&lt;/p&gt;

&lt;p&gt;
例子
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C++&quot;&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;span&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;s&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;range traversal (guaranteed correct)&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;for&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;x&lt;/span&gt; : s&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; cout &amp;lt;&amp;lt; x &amp;lt;&amp;lt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&apos; &apos;&lt;/span&gt;;
    cout &amp;lt;&amp;lt; endl;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;C-style traversal (potentially checked)&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;for&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;gsl&lt;/span&gt;::&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;index&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;i&lt;/span&gt; = 0; i &amp;lt; s.size&lt;span style=&quot;color: #909183;&quot;&gt;()&lt;/span&gt;; ++i&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; cout &amp;lt;&amp;lt; s&lt;span style=&quot;color: #7388d6;&quot;&gt;[&lt;/span&gt;i&lt;span style=&quot;color: #7388d6;&quot;&gt;]&lt;/span&gt; &amp;lt;&amp;lt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&apos; &apos;&lt;/span&gt;;
    cout &amp;lt;&amp;lt; endl;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;random access (potentially checked)&lt;/span&gt;
    s&lt;span style=&quot;color: #7388d6;&quot;&gt;[&lt;/span&gt;2&lt;span style=&quot;color: #7388d6;&quot;&gt;]&lt;/span&gt; = 9;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;//&lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;s[7] = 10; // terminate called without an active exception&lt;/span&gt;

    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;extract pointers (potentially checked)&lt;/span&gt;
    &lt;span style=&quot;color: #110099;&quot;&gt;std&lt;/span&gt;::sort&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&amp;amp;s&lt;span style=&quot;color: #909183;&quot;&gt;[&lt;/span&gt;0&lt;span style=&quot;color: #909183;&quot;&gt;]&lt;/span&gt;, &amp;amp;s&lt;span style=&quot;color: #909183;&quot;&gt;[&lt;/span&gt;s.size&lt;span style=&quot;color: #709870;&quot;&gt;()&lt;/span&gt; / 2&lt;span style=&quot;color: #909183;&quot;&gt;]&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;for&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;x&lt;/span&gt; : s&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; cout &amp;lt;&amp;lt; x &amp;lt;&amp;lt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&apos; &apos;&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;main&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;ss&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;[]&lt;/span&gt; = &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;4, 3, 2, 1, 2, 3&lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;;
    f&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;ss&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; 0;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;pre class=&quot;example&quot;&gt;
4 3 2 1 2 3
4 3 2 1 2 3
3 4 9 1 2 3
&lt;/pre&gt;


&lt;p&gt;
注意
&lt;/p&gt;

&lt;p&gt;
&lt;code&gt;span&amp;lt;T&amp;gt;&lt;/code&gt; 并不保留其元素值，非常轻量，所以可以以值传递。
&lt;/p&gt;

&lt;p&gt;
传递 &lt;code&gt;span&lt;/code&gt; 对象的效率跟传递两个指针对，或指针+数量一样。
&lt;/p&gt;

&lt;p&gt;
强化
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;（复杂）警告：访问指针参数的时候，其范围又由另外参数指定。建议使用 &lt;code&gt;span&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines F.23 用 not_null<T> 表示“null”是无效的</title>
   <link href="http://kimi.im/2022-06-08-cppcoreguidelines-f23"/>
   <updated>2022-06-08T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-f23</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
F.23: Use a &lt;code&gt;not_null&amp;lt;T&amp;gt;&lt;/code&gt; to indicate that “ null ” is not a valid value
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;理由&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
使得代码更清晰。函数的参数如果是&lt;code&gt;not_null&amp;lt;T&amp;gt;&lt;/code&gt;的话，就要求调用函数的地方去确保，传入的参数不是空的。类似的，函数返回值是&lt;code&gt;not_null&amp;lt;T&amp;gt;&lt;/code&gt;就是告诉函数的调用者，这个函数的返回值不会是空指针 &lt;code&gt;nullptr&lt;/code&gt; ，就不需要进行额外检查。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;例子&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
&lt;code&gt;not_null&amp;lt;T*&amp;gt;&lt;/code&gt; 告诉使用者，指针取值的时候，不需要检测是否为空指针 &lt;code&gt;nullptr&lt;/code&gt;
。另外，在调试的时候，&lt;code&gt;owner&amp;lt;T*&amp;gt;&lt;/code&gt;和 &lt;code&gt;not_null&amp;lt;T&amp;gt;&lt;/code&gt; 可以用来确保程序运行正确。
&lt;/p&gt;


&lt;p&gt;
如下函数：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-bad src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;length&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Record&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;*&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;p&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
当我调用&lt;code&gt;length(p)&lt;/code&gt;的时候，我首先要检查 &lt;code&gt;p&lt;/code&gt; 是否为空指针 &lt;code&gt;nullptr&lt;/code&gt; 。
&lt;code&gt;length()&lt;/code&gt; 的函数的实现是否需要检查 &lt;code&gt;p&lt;/code&gt; 是否为空指针 &lt;code&gt;nullptr&lt;/code&gt; 呢？
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-C++&quot;&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &amp;#35843;&amp;#29992;&amp;#32773;&amp;#30830;&amp;#20445; p != nullptr&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;length&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;not_null&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Record&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;p&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;

&lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &amp;#20989;&amp;#25968;&amp;#23454;&amp;#29616;&amp;#32773;&amp;#20445;&amp;#35777; p &amp;#21487;&amp;#20197;&amp;#26159;&amp;#31354;&amp;#25351;&amp;#38024;&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;length&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Record&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;*&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;p&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;
&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;
&lt;b&gt;注意&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
用&lt;code&gt;not_null&amp;lt;T*&amp;gt;&lt;/code&gt;强调这是个非空指针 &lt;code&gt;nullptr&lt;/code&gt; ；而用&lt;code&gt;T*&lt;/code&gt;则表示有可能是空指针。两者在内存中都以&lt;code&gt;T*&lt;/code&gt;的形式表达。所以没什么额外运行时开销。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;注意&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
&lt;code&gt;not_null&lt;/code&gt; 不仅可用于指针，也能用于&lt;code&gt;unique_ptr&lt;/code&gt;， &lt;code&gt;shared_ptr&lt;/code&gt; 以及其他指针类型。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;强化&lt;/b&gt;
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;（简单）警告：函数中不进行非空判断，直接对原始指针取值的情况。建议把指针声明成 &lt;code&gt;not_null&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;（简单）报错：原始指针有时候判断非空后取值，有时候直接取值。&lt;/li&gt;
&lt;li&gt;（简单）警告：函数中对&lt;code&gt;not_null&lt;/code&gt;指针进行非空测试。无此必要。&lt;/li&gt;
&lt;/ul&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines F.22 用 T* 或 owner<T*> 表示单个对象</title>
   <link href="http://kimi.im/2022-06-07-cppcoreguidelines-f22"/>
   <updated>2022-06-07T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-f22</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
F.22: Use &lt;code&gt;T*&lt;/code&gt; or &lt;code&gt;owner&amp;lt;T*&amp;gt;&lt;/code&gt; to designate a single object
&lt;/p&gt;

&lt;p&gt;
&lt;b&gt;理由&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
可读性好：使得指针的意义更清晰。可以更好的利用工具提供的支持优化代码。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;注意&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
传统 C 和 C++ 代码，用到很多&lt;code&gt;T*&lt;/code&gt;这样的指针：
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;表示一个（单独）对象（不会在函数中删除）&lt;/li&gt;
&lt;li&gt;指向自由存储区分配的对象（之后会删除）&lt;/li&gt;
&lt;li&gt;一个 &lt;code&gt;nullptr&lt;/code&gt; 指针&lt;/li&gt;
&lt;li&gt;表示一个 C 风格的字符串（空字符结尾的字符数组）&lt;/li&gt;
&lt;li&gt;表示一个数组，长度则是另外一个变量指定&lt;/li&gt;
&lt;li&gt;表示在数组中的一个位置&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
指针的使用场景太多，导致代码的意图越来越难理解。代码检测工具也很难提供支持。
&lt;/p&gt;

&lt;p&gt;
例子
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-bad src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;use&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;*&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;p&lt;/span&gt;, &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;n&lt;/span&gt;, &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;char&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;*&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;s&lt;/span&gt;, &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;*&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;q&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #000000;&quot;&gt;p&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;[&lt;/span&gt;n &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;-&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;]&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;666&lt;/span&gt;; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// Bad: we don&apos;t know if p points to n elements;&lt;/span&gt;
                    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// assume it does not or use span&amp;lt;int&amp;gt;&lt;/span&gt;
    cout &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; s;      &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// Bad: we don&apos;t know if that s points to a&lt;/span&gt;
                    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// zero-terminated array of char;&lt;/span&gt;
                    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// assume it does not or use zstring&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;delete&lt;/span&gt; q;       &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// Bad: we don&apos;t know if *q is allocated&lt;/span&gt;
                    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// on the free store;&lt;/span&gt;
                    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// assume it does not or use owner&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
改进后：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;use2&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;span&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;p&lt;/span&gt;, &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;zstring&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;s&lt;/span&gt;, &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;owner&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;q&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #000000;&quot;&gt;p&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;[&lt;/span&gt;p.&lt;span style=&quot;color: #3a5fcd; font-weight: bold; font-style: italic;&quot;&gt;size&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;-&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;]&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;666&lt;/span&gt;; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// OK, a range error can be caught&lt;/span&gt;
    cout &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; s; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// OK&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;delete&lt;/span&gt; q;  &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// OK&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;
&lt;b&gt;注意&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
&lt;code&gt;owner&amp;lt;T*&amp;gt;&lt;/code&gt; 表示所有权， &lt;code&gt;zstring&lt;/code&gt; 表示 C 风格的字符串。
&lt;/p&gt;

&lt;p&gt;
相关指南：&lt;a href=&quot;http://kimi.im/2022-03-26-cppcoreguidelines-i13&quot;&gt;I.13 不要以单独指针传递数组&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
强化
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;（简单）（约束）任何最终结果依然是指针的指针的运算操作。警告。&lt;/li&gt;
&lt;/ul&gt;
</content>
 </entry>
 
 <entry>
   <title>单词本：carpe diem</title>
   <link href="http://kimi.im/2022-06-07-latin-carpe-diem"/>
   <updated>2022-06-07T00:00:00+00:00</updated>
   <id>http://kimi.im/latin-carpe-diem</id>
   <content type="html">&lt;p&gt;
电影《死亡诗社》（Dead Poets Society）里的 Keeting 老师很喜欢说的一句拉丁语“Carpe Diem”，字面意思就是“抓住今天”，也就是“及时行乐”。
&lt;/p&gt;

&lt;p&gt;
Keating encourages the boys to lean in closer to listen for a message
from the grave.  Standing behind them, in a quiet, ghostly voice, he
whispers, “Carpe. Carpe diem. Seize the day, boys. Make your lives
extraordinary.” （Lifespan why we age and why we don&amp;rsquo;t have to）
&lt;/p&gt;

&lt;p&gt;
Carpe diem 源自古罗马诗人、批评家贺拉斯（Quintus Horatius Flaccus，前
65—前 8 ）在其 Odes（颂歌）中的一首诗：
&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;
Tu ne quaesieris (scire nefas) quem mihi, quem tibi
finem di dederint, Leuconoe, nec Babylonios
temptaris numeros. Ut melius quicquid erit pati!
Seu pluris hiemes seu tribuit Iuppiter ultimam,
quae nunc oppositis debilitat pumicibus mare
Tyrrhenum, sapias, vina liques et spatio brevi
spem longam reseces. Dum loquimur, fugerit invida
aetas: carpe diem, quam minimum credula postero.
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;
让我们试着翻译下：
&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;
你不要探寻（这是中犯罪）天神给你给我的终点，
Leuconoe，也不要去猜测巴比伦数字。不如接受命运任何的安排。不管 Jupiter 众神之王分配了多少个冬天，冬季使第勒尼安海跟石块一样，明智点，愿你有酒，愿你克制太长的愿望。在我们说话这会儿，珍贵的时间消逝：抓住当下，尽量不要相信还有明天。
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;
看起来很是消极。消极中，也有积极成份。抓住转瞬即逝的今天，好好利用时间，才不会消极后悔么。
&lt;/p&gt;

&lt;p&gt;
因为拉丁文有古老的气息，所以带有些神秘感。哈利波特里的咒语就是拉丁文。所以不少年轻人会拿carpe diem作为 QQ 签名，还有纹身。
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines F.21 如果要返回多个值，可以返回一个结构</title>
   <link href="http://kimi.im/2022-05-31-cppcoreguidelines-f21"/>
   <updated>2022-05-31T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-f21</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
F.21: To return multiple “ out ” values, prefer returning a struct
&lt;/p&gt;

&lt;p&gt;
&lt;b&gt;理由&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
函数结果通过返回值的方式返回，意义明确，代码更容易理解。C++ 里可以用类似 &lt;code&gt;tuple&lt;/code&gt; 的类型（包括&lt;code&gt;struct&lt;/code&gt;, &lt;code&gt;array&lt;/code&gt;, &lt;code&gt;tuple&lt;/code&gt;）返回多个值，还可以直接在调用处进行结构绑定（C++17）；最好使用定义了类型名的结构体，这样可以通过成员名能提供语义解释（推荐）。不命名的元组在泛型模板代码中用的比较多。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;例子&lt;/b&gt;
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-bad src-C++&quot;&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;// BAD: output-only parameter documented in a comment&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;f1&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;string&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;input&lt;/span&gt;, &lt;span style=&quot;color: #3F7F5F;&quot;&gt;/*output only*/&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;string&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;output_data&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ...&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;status&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;1&lt;/span&gt;;
    &lt;span style=&quot;color: #000000;&quot;&gt;output_data&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; input &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;+&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot; hello&quot;&lt;/span&gt;;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; status;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;main&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;auto&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;ss&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;string&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt;;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;if&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;f1&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;bonjour,&quot;&lt;/span&gt;, ss&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;
        cout &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; ss &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; endl;
    &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;pre class=&quot;example&quot;&gt;
bonjour, hello
&lt;/pre&gt;


&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-C++&quot;&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;// GOOD: self-documenting&lt;/span&gt;
&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;tuple&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt;, &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;string&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;f2&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;string&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;input&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ...&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;status&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;1&lt;/span&gt;;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;make_tuple&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;status, input &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;+&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot; hello&quot;&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;main&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;auto&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;tt&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;f2&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;bonjour,&quot;&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;if&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;get&lt;/span&gt;&lt;span style=&quot;color: #909183; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #909183; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;tt&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;
        cout &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;get&lt;/span&gt;&lt;span style=&quot;color: #909183; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;string&lt;/span&gt;&lt;span style=&quot;color: #909183; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;tt&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; endl;
    &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;pre class=&quot;example&quot;&gt;
bonjour, hello
&lt;/pre&gt;


&lt;p&gt;
C++98 标准库就已经在用这个方法返回值。比如下面代码中， &lt;code&gt;pair&lt;/code&gt; 其实就是有两个元素的 &lt;code&gt;tuple&lt;/code&gt; ：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-C++&quot;&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;// C++98&lt;/span&gt;
&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;set&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;string&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;my_set&lt;/span&gt;;
&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;pair&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;set&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;string&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;::&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;iterator&lt;/span&gt;, &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;bool&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;result&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; my_set.&lt;span style=&quot;color: #3a5fcd; font-weight: bold; font-style: italic;&quot;&gt;insert&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;Hello&quot;&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;result.&lt;span style=&quot;color: #110099; font-style: italic;&quot;&gt;second&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    cout &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; result.&lt;span style=&quot;color: #110099; font-style: italic;&quot;&gt;second&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; endl;          &lt;span style=&quot;color: #3F7F5F;&quot;&gt;//1&lt;/span&gt;
    cout &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;*&lt;/span&gt;result.&lt;span style=&quot;color: #110099; font-style: italic;&quot;&gt;first&lt;/span&gt;;                  &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// workaround&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;pre class=&quot;example&quot;&gt;
1
Hello
&lt;/pre&gt;


&lt;p&gt;
在C++11中，可以直接把结果填入多个局部变量：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-C++&quot;&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;set&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;string&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;my_set&lt;/span&gt;;
&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;set&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;string&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;::&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;iterator&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;iter&lt;/span&gt;;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;success&lt;/span&gt;;

&lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;tie&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;iter, success&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; my_set.&lt;span style=&quot;color: #3a5fcd; font-weight: bold; font-style: italic;&quot;&gt;insert&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;Hello&quot;&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;success&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt; cout &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;*&lt;/span&gt;iter;
&lt;/pre&gt;
&lt;/div&gt;

&lt;pre class=&quot;example&quot;&gt;
Hello
&lt;/pre&gt;


&lt;p&gt;
C++17 支持以“结构绑定”的方式直接初始化多个变量：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-C++&quot;&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;set&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;string&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;my_set&lt;/span&gt;;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;auto&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;[&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;iter&lt;/span&gt;, &lt;span style=&quot;color: #000000;&quot;&gt;success&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;]&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; my_set.&lt;span style=&quot;color: #3a5fcd; font-weight: bold; font-style: italic;&quot;&gt;insert&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;Hello&quot;&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;; success&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
    cout &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;*&lt;/span&gt;iter;
&lt;/pre&gt;
&lt;/div&gt;

&lt;pre class=&quot;example&quot;&gt;
Hello
&lt;/pre&gt;


&lt;p&gt;
结构体中的每个变量都有名字，更好理解。比如 &lt;code&gt;ranges::min_max_result&lt;/code&gt; ,
&lt;code&gt;from_chars_result&lt;/code&gt; 等。
&lt;/p&gt;

&lt;p&gt;
&lt;b&gt;例外&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
有时，我们要传一个对象给函数，让函数修改其状态。这时候，最好通过引用
&lt;code&gt;T&amp;amp;&lt;/code&gt; 传递对象。通常不需要显式的传一个 in-out 参数做为返回值。
&lt;/p&gt;

&lt;p&gt;
例子
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-C++&quot;&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;// much like std::operator&amp;gt;&amp;gt;()&lt;/span&gt;
&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;istream&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt; operator&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;istream&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;is&lt;/span&gt;, &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;string&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;s&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;for&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;string&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;s&lt;/span&gt;; cin &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;gt;&amp;gt;&lt;/span&gt; s; &lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// do something with line&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
这里， &lt;code&gt;s&lt;/code&gt; 和 &lt;code&gt;cin&lt;/code&gt; 都是作为输入输出参数传递。以非 &lt;code&gt;const&lt;/code&gt; 引用的方式传入
&lt;code&gt;cin&lt;/code&gt; ，其状态可以改变。以引用传递 &lt;code&gt;s&lt;/code&gt; 是避免重复分配内存资源。只有需要扩展 &lt;code&gt;s&lt;/code&gt; 的大小时，分配新内存。这个技术叫做“caller-allocated out”（“调用者分配输出”）模式。适用于 &lt;code&gt;string&lt;/code&gt; 和 &lt;code&gt;vector&lt;/code&gt; 等类型。
&lt;/p&gt;

&lt;p&gt;
对比的，如果全部值都要返回的话，要写成这样：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-bad src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;struct&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;get_string_result&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;istream&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt; &lt;span style=&quot;color: #110099; font-style: italic;&quot;&gt;in&lt;/span&gt;; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;string&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;s&lt;/span&gt;; &lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;

&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;get_string_result&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;get_string&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;istream&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;in&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;  &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// not recommended&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;string&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;s&lt;/span&gt;;
    in &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;gt;&amp;gt;&lt;/span&gt; s;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt; in, &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;move&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;s&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;for&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;auto&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;in&lt;/span&gt;, &lt;span style=&quot;color: #000000;&quot;&gt;s&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;]&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;get_string&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;cin&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;; in; &lt;span style=&quot;color: #000000;&quot;&gt;s&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;get_string&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;in&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;.&lt;span style=&quot;color: #110099; font-style: italic;&quot;&gt;s&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// do something with string&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
我们认为这样很不优雅，性能较差。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;注意&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
很多情况，返回一个自定义的类型比较有用，比如：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;struct&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Distance&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;value&lt;/span&gt;;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;unit&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;1&lt;/span&gt;;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// 1 means meters&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;

&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Distance&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;d1&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;measure&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;obj1&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;        &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// access d1.value and d1.unit&lt;/span&gt;
&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;auto&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;d2&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;measure&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;obj2&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;            &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// access d2.value and d2.unit&lt;/span&gt;
&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;auto&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;value&lt;/span&gt;, &lt;span style=&quot;color: #000000;&quot;&gt;unit&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;]&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;measure&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;obj3&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// access value and unit; somewhat redundant&lt;/span&gt;
                                    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// to people who know measure()&lt;/span&gt;
&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;auto&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;x&lt;/span&gt;, &lt;span style=&quot;color: #000000;&quot;&gt;y&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;]&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;measure&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;obj4&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;        &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// don&apos;t; it&apos;s likely to be confusing&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
当返回值是互相独立的数据实体的时候，可以用极度泛型的 &lt;code&gt;pair&lt;/code&gt; 和 &lt;code&gt;tuple&lt;/code&gt; 解构返回值。但不要用于封装得很好的抽象实体。
&lt;/p&gt;

&lt;p&gt;
另外，也可以用&lt;code&gt;optional&amp;lt;T&amp;gt;&lt;/code&gt;或 &lt;code&gt;expected&amp;lt;T, error_code&amp;gt;&lt;/code&gt; 来返回可能不同的类型值。尽量避免用 &lt;code&gt;pair&lt;/code&gt; 和 &lt;code&gt;tuple&lt;/code&gt; 。像&lt;code&gt;pair&amp;lt;T, bool&amp;gt;&lt;/code&gt;和 &lt;code&gt;pair&amp;lt;T,
error_code&amp;gt;&lt;/code&gt; 这种类型描述不够直观。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;注意&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
如果从局部组成的对象太大，不适合复制，可以考虑显式的 &lt;code&gt;move&lt;/code&gt; 移动操作，从而避免产生复制。
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-C++&quot;&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;pair&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;LargeObject&lt;/span&gt;, &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;LargeObject&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;string&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;input&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;LargeObject&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;large1&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;g&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;input&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;LargeObject&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;large2&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;h&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;input&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ...&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;move&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;large1&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt;, &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;move&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;large2&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// no copies&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
也可以这样写：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-C++&quot;&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;pair&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;LargeObject&lt;/span&gt;, &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;LargeObject&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;string&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;input&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ...&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;g&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;input&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt;, &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;h&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;input&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// no copies, no moves&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;
&lt;b&gt;强化&lt;/b&gt;
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;用返回值替换出参。出参指的是： 1 ）函数会改写； 2 ）函数修改参数的成员变量，且变量不是常量； 3 ）以非 &lt;code&gt;const&lt;/code&gt; 的形式传入。&lt;/li&gt;
&lt;li&gt;用结构体作为返回值类型，不要用 &lt;code&gt;pair&lt;/code&gt; 或 &lt;code&gt;tuple&lt;/code&gt; 。不过在泛型模板中，
&lt;code&gt;tuple&lt;/code&gt; 可能无法避免。&lt;/li&gt;
&lt;/ul&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines F.20 如果需要输出结果，值返回比出参更好</title>
   <link href="http://kimi.im/2022-05-30-cppcoreguidelines-f20"/>
   <updated>2022-05-30T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-f20</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
F.20: For “ out ” output values, prefer return values to output parameters
&lt;/p&gt;

&lt;p&gt;
&lt;b&gt;理由&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
返回值类型声明还有代码文档化的作用，即在代码中就能说明函数的输出值类型。然而，一个带&lt;code&gt;&amp;amp;&lt;/code&gt;符号的参数可以是一个入参，也同时可以是出参，这样就很容易造成误解了。
&lt;/p&gt;

&lt;p&gt;
此指南也适用于标准容器这类大对象，在返回结果的过程中，为了保证执行性能，标准容器类用了隐式的移动操作，减少了显式手动的内存管理代码。
&lt;/p&gt;

&lt;p&gt;
如果有多个值需要返回，可以用元组（ tupple ）或类似的多成员类型。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;例子&lt;/b&gt;
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-C++&quot;&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;// OK: return pointers to elements with the value x&lt;/span&gt;
&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;vector&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;find_all_ok&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;vector&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;v&lt;/span&gt;, &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;x&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;auto&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;rv&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;vector&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt;;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;for&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;vector&lt;/span&gt;&lt;span style=&quot;color: #909183; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #909183; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;::&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;const_iterator&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;it&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt;v.&lt;span style=&quot;color: #3a5fcd; font-weight: bold; font-style: italic;&quot;&gt;begin&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;()&lt;/span&gt;; it&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;!=&lt;/span&gt;v.&lt;span style=&quot;color: #3a5fcd; font-weight: bold; font-style: italic;&quot;&gt;end&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;()&lt;/span&gt;; &lt;span style=&quot;color: #000000;&quot;&gt;it&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;++&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;
        &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;*&lt;/span&gt;it &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;==&lt;/span&gt; x&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #909183;&quot;&gt;{&lt;/span&gt;
            rv.&lt;span style=&quot;color: #3a5fcd; font-weight: bold; font-style: italic;&quot;&gt;push_back&lt;/span&gt;&lt;span style=&quot;color: #709870;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;*&lt;/span&gt;it&lt;span style=&quot;color: #709870;&quot;&gt;)&lt;/span&gt;;
        &lt;span style=&quot;color: #909183;&quot;&gt;}&lt;/span&gt;
    &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; rv;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;main&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;auto&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;vv&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;vector&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;1&lt;/span&gt;,&lt;span style=&quot;color: #110099;&quot;&gt;2&lt;/span&gt;,&lt;span style=&quot;color: #110099;&quot;&gt;3&lt;/span&gt;,&lt;span style=&quot;color: #110099;&quot;&gt;4&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;auto&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;vvv&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;find_all_ok&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;vv, &lt;span style=&quot;color: #110099;&quot;&gt;3&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;for&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;i&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;0&lt;/span&gt;; i&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;vvv.&lt;span style=&quot;color: #3a5fcd; font-weight: bold; font-style: italic;&quot;&gt;size&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;()&lt;/span&gt;; &lt;span style=&quot;color: #000000;&quot;&gt;i&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;++&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;
        cout &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;*&lt;/span&gt;vvv&lt;span style=&quot;color: #909183;&quot;&gt;[&lt;/span&gt;i&lt;span style=&quot;color: #909183;&quot;&gt;]&lt;/span&gt;;
    &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;
    cout &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; endl;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;pre class=&quot;example&quot;&gt;
3
&lt;/pre&gt;


&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-bad src-C++&quot;&gt;
&lt;span style=&quot;color: #3F7F5F;&quot;&gt;// Bad: place pointers to elements with value x in-out&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;find_all_bad&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;vector&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;v&lt;/span&gt;, &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;vector&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;out&lt;/span&gt;, &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;x&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;for&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;vector&lt;/span&gt;&lt;span style=&quot;color: #909183; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #909183; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;::&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;const_iterator&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;it&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt;v.&lt;span style=&quot;color: #3a5fcd; font-weight: bold; font-style: italic;&quot;&gt;begin&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;()&lt;/span&gt;; it&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;!=&lt;/span&gt;v.&lt;span style=&quot;color: #3a5fcd; font-weight: bold; font-style: italic;&quot;&gt;end&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;()&lt;/span&gt;; &lt;span style=&quot;color: #000000;&quot;&gt;it&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;++&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;
        &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;*&lt;/span&gt;it &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;==&lt;/span&gt; x&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #909183;&quot;&gt;{&lt;/span&gt;
            out.&lt;span style=&quot;color: #3a5fcd; font-weight: bold; font-style: italic;&quot;&gt;push_back&lt;/span&gt;&lt;span style=&quot;color: #709870;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;*&lt;/span&gt;it&lt;span style=&quot;color: #709870;&quot;&gt;)&lt;/span&gt;;
        &lt;span style=&quot;color: #909183;&quot;&gt;}&lt;/span&gt;
    &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;main&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;auto&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;vv&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;vector&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;1&lt;/span&gt;,&lt;span style=&quot;color: #110099;&quot;&gt;2&lt;/span&gt;,&lt;span style=&quot;color: #110099;&quot;&gt;3&lt;/span&gt;,&lt;span style=&quot;color: #110099;&quot;&gt;4&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;auto&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;vvv&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;vector&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt;;
    &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;find_all_bad&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;vv, vvv, &lt;span style=&quot;color: #110099;&quot;&gt;3&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;for&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;i&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;0&lt;/span&gt;; i&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;vvv.&lt;span style=&quot;color: #3a5fcd; font-weight: bold; font-style: italic;&quot;&gt;size&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;()&lt;/span&gt;; &lt;span style=&quot;color: #000000;&quot;&gt;i&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;++&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;
        cout &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;*&lt;/span&gt;vvv&lt;span style=&quot;color: #909183;&quot;&gt;[&lt;/span&gt;i&lt;span style=&quot;color: #909183;&quot;&gt;]&lt;/span&gt;;
    &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;pre class=&quot;example&quot;&gt;
3
&lt;/pre&gt;



&lt;p&gt;
&lt;b&gt;注意&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
被移动的结构体中含有多个小对象的话，性能可能较差。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;例外&lt;/b&gt;
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;通过&lt;code&gt;unique_ptr&lt;/code&gt;或者&lt;code&gt;shared_ptr&lt;/code&gt;返回还没具体化的类型。所谓还没有具体化的类型指的是类层级结构中间的那些类型。&lt;/li&gt;
&lt;li&gt;如果某个类型的移动成本很高，比如&lt;code&gt;array&amp;lt;BigTrivial&amp;gt;&lt;/code&gt;，考虑在自由存储区分配内存，然后通过&lt;code&gt;unique_ptr&lt;/code&gt;返回一个句柄。或者通过一个读写引用参数作为出入参。&lt;/li&gt;
&lt;li&gt;如果要利用某个容器类持续保持一些列对象给多个函数进行处理的话，可以通过读写引用作为出入参传给各个函数。&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;
&lt;b&gt;例子&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
假设 &lt;code&gt;Matrix&lt;/code&gt; 类有移动操作：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-C++&quot;&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Matrix&lt;/span&gt; operator&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Matrix&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;a&lt;/span&gt;, &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Matrix&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;b&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Matrix&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;res&lt;/span&gt;;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ... fill res with the sum ...&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; res;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;

&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Matrix&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;x&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; m1 &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;+&lt;/span&gt; m2;  &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// move constructor&lt;/span&gt;

&lt;span style=&quot;color: #000000;&quot;&gt;y&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; m3 &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;+&lt;/span&gt; m3;         &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// move assignment&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;
&lt;b&gt;注意&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
返回值优化过程不处理赋值情况，但是会优化移动赋值的过程。
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;struct&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Package&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;      &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// exceptional case: expensive-to-move object&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;char&lt;/span&gt; &lt;span style=&quot;color: #110099; font-style: italic;&quot;&gt;header&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;16&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;]&lt;/span&gt;;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;char&lt;/span&gt; &lt;span style=&quot;color: #110099; font-style: italic;&quot;&gt;load&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;2024&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;-&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;16&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;]&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;

&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Package&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;fill&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;;       &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// Bad: large return value&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;fill&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Package&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;  &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// OK&lt;/span&gt;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;val&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;;            &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// OK&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;val&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;       &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// Bad: Is val reading its argument&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;
&lt;b&gt;注意&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
不建议返回 &lt;code&gt;const&lt;/code&gt; 值。返回 &lt;code&gt;const&lt;/code&gt; 值没啥价值，并且对移动操作有影响。
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-C++&quot;&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;// bad: that &quot;const&quot; is more trouble than it is worth&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;vector&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;fct&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;vector&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;1&lt;/span&gt;,&lt;span style=&quot;color: #110099;&quot;&gt;2&lt;/span&gt;,&lt;span style=&quot;color: #110099;&quot;&gt;3&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;g&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;vector&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;vx&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ...&lt;/span&gt;
    &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;fct&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; vx;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// prevented by the &quot;const&quot;&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ...&lt;/span&gt;
    &lt;span style=&quot;color: #000000;&quot;&gt;vx&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;fct&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt;; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// expensive copy: move semantics suppressed by the &quot;const&quot;&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ...&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
返回值设置成 &lt;code&gt;const&lt;/code&gt; 是为了避免不小心访问临时数据（很少发生）。添加
&lt;code&gt;const&lt;/code&gt; 阻止移动机制，从而导致性能变差（经常发生）。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;强化&lt;/b&gt;
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;非 &lt;code&gt;const&lt;/code&gt; 参数，改写之前没有读取操作，其实可以用低成本的返回值的方式。标注告警。&lt;/li&gt;
&lt;li&gt;返回一个常量值。去除 &lt;code&gt;const&lt;/code&gt; ，返回一个非 &lt;code&gt;const&lt;/code&gt; 值。&lt;/li&gt;
&lt;/ul&gt;
</content>
 </entry>
 
 <entry>
   <title>单词本：repercussion</title>
   <link href="http://kimi.im/2022-05-27-english-repercussion"/>
   <updated>2022-05-27T00:00:00+00:00</updated>
   <id>http://kimi.im/english-repercussion</id>
   <content type="html">&lt;p&gt;
最近的美国校园枪击案，华盛顿邮报写道：A gunshot wrecks all
selfcontrol, all curiosity in outcomes — including that of the shooter
— with the most fearful &lt;b&gt;repercussion&lt;/b&gt;.
&lt;/p&gt;

&lt;p&gt;
这里 repercussion 指的是某些不好的事情产生的持续不良的影响。这个词最早的意思应该是回声、反弹。
&lt;/p&gt;

&lt;p&gt;
拉丁语里，percusere 是敲击、打击的意思。比如： Baculo me percussit. 他用棍子打我。句子中 percussit 是 percusere 的第三人称形式。
&lt;/p&gt;

&lt;p&gt;
既然 percusere 是打击之意，那么 repercusere 就是打击的反弹，引伸意就是反响、反应。比如： Philosophia, praeterea, est tamquam speculum in
quod populorum cultus repercutitur. 这句话的意思是说哲学是一面镜子，反映了人民大众的文化。
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>聊一聊 Matter 协议</title>
   <link href="http://kimi.im/2022-05-25-about-matter"/>
   <updated>2022-05-25T00:00:00+00:00</updated>
   <id>http://kimi.im/about-matter</id>
   <content type="html">&lt;p&gt;
在智能家居物联网领域，最近有一个项目叫 Matter 协议栈，之前的名字叫
CHIP，即 Connected Home IP（连接的家居网络协议）。CHIP 这个项目名用了一段时间后，估计他们发现这个名字实在有些费解，因为在计算机领域 CHIP 主要指的是芯片。所以，现在改成 Matter，依然是个名词，但是它表示一种到处存在的东西。
&lt;/p&gt;

&lt;p&gt;
这个 Matter 协议标准的运营组织是 CSA，即 Connectivity Standards
Alliance，连接标准联盟。CSA 的前身是 Zigbee 联盟。Zigbee 联盟创立之初是为了建立一个以 Zigbee 通信协议为基础的无线家居自动化设备的物联网标准。随着时间推移，智慧能源、清洁能源、家庭娱乐系统等相关企业也加入到联盟中，所以就不能把通信协议仅限于 Zigbee 了。所以在 2021 年 5 月 11 日宣布，改名为 CSA &lt;sup&gt;&lt;a id=&quot;fnr.1&quot; class=&quot;footref&quot; href=&quot;#fn.1&quot; role=&quot;doc-backlink&quot;&gt;1&lt;/a&gt;&lt;/sup&gt;。同时，宣布 CHIP 项目改名为 Matter。
&lt;/p&gt;

&lt;p&gt;
Matter 项目背后的推手有不少重量级成员如 Apple、Google、Amazon、Samsung、
NXP 等智慧家居平台企业和芯片公司。这意味着，未来很有可能符合 Matter 标准的认证设备，都能无缝连接到 Apple HomePod、Google Home、Amazon Alexa
等智能音响。对于智能家居设备厂商来说，只要实现一个标准，就能打通任何智能家居平台。除了能节省研发成本，还能获得更大的市场份额。实在是非常值得期待的。
&lt;/p&gt;


&lt;p&gt;
Matter 的开发目标和原则：
&lt;/p&gt;
&lt;ol class=&quot;org-ol&quot;&gt;
&lt;li&gt;统一通用：基于经过市场验证的可行技术，建立一个新标准。&lt;/li&gt;
&lt;li&gt;互联互通：在用户授权的情况下，实现任意 Matter 认证设备之间的通讯。&lt;/li&gt;
&lt;li&gt;安全保障：沿用先进主流的信息安全通信措施和协议。&lt;/li&gt;
&lt;li&gt;用户可控：最终用户掌控访问设备的权限。&lt;/li&gt;
&lt;li&gt;整体容错：不会因为某个系统中某个链条环节导致系统故障。&lt;/li&gt;
&lt;li&gt;稳定可靠：标准规定了设备使用过程需要的一整套协议，包括安装部署、运行工作、系统管理等。&lt;/li&gt;
&lt;li&gt;精简高效：协议栈可以裁减运行在资源受限的嵌入式 MCU 上。&lt;/li&gt;
&lt;li&gt;普遍适用：基于 IP，支持低端设备，可以广泛采用。&lt;/li&gt;
&lt;li&gt;灵活部署：协议可以灵活调整，适配不同的工作环境。&lt;/li&gt;
&lt;li&gt;简单易用：简单、高效、集成，容易上手使用。&lt;/li&gt;
&lt;li&gt;开放开源：协议标准开放开源提供，不仅限于成员企业。&lt;/li&gt;
&lt;/ol&gt;


&lt;p&gt;
我们再看看 Matter 项目的架构设计。Matter 的开发目标是一个简单、统一的应用层连接标准。目的是让开发者能够建立一个可靠、安全的物联网生态系统，确保智慧家居和楼宇设备的互联互通兼容性。协议以 IP 为基础，兼容 Thread
和 WiFi。
&lt;/p&gt;

&lt;p&gt;
Matter 通信层架构如下：
&lt;/p&gt;

&lt;div align=&quot;center&quot;&gt;
&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; xmlns:xlink=&quot;http://www.w3.org/1999/xlink&quot; version=&quot;1.1&quot; width=&quot;561px&quot; height=&quot;241px&quot; viewBox=&quot;-0.5 -0.5 561 241&quot; content=&quot;&amp;lt;mxfile host=&amp;quot;Electron&amp;quot; modified=&amp;quot;2022-05-25T11:27:53.565Z&amp;quot; agent=&amp;quot;5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) draw.io/18.0.6 Chrome/100.0.4896.143 Electron/18.2.3 Safari/537.36&amp;quot; etag=&amp;quot;h8yIn4tf2BuMjQjysx3f&amp;quot; version=&amp;quot;18.0.6&amp;quot; type=&amp;quot;device&amp;quot; pages=&amp;quot;2&amp;quot;&amp;gt;&amp;lt;diagram id=&amp;quot;39v41MHP21HMX9VKEkff&amp;quot; name=&amp;quot;Communication&amp;quot;&amp;gt;zdjdbpswGAbgq+FwlbGBsNMSuqZqtEpkS0/d8C1GApy6ppBd/cwwIdSqtFVK7aPA6x/gsQMGjyRV903QA1vzHEoPo7zzyNLDGKMIq58+OQ6Jj0k4JHtR5Dqbgqz4DTpEOm2KHF5mFSXnpSwO83DH6xp2cpZRIXg7r/aLl/OjHugejCDb0dJMt0Uu2ZDGeDHlt1DsmT5yGJOhoKJjXX0hL4zmvD2LSOqRRHAuh62qS6Ds8UaWod3NO6Wn8xJQy39pkG4Xj228flrdNj85fe7Q3eb4JRp6eaVlo693TaUEoU9ZHkcGwZs6h74r5JHrlhUSsgPd9aWtGnmVMVmVas9Xm7pTEBK6d8/WPxmoyQO8AimOqsrYINJsp3mj99tpEMKxDjsbgDGjetz3p64nG7Whef6DamFQbZIH95xi0wnHn+kUG04/lvadgsA1p6+G0+rhNbIO9XZC4cD2H298EpxJLbN756AIMqE+dUL5vun0PclWmXUqHLhGhQ2qvllTUvtPPoJdwyIGVioZiBqkdawAuYYVGFjb4qawDxW7BhUaUBsmgObWqcIP3tjJxajMVXqM8JUfXgXuYRHbWOY6fVhXqVc/dXNH1/epdbTog8/Dy6GZi3YnnS43udTu9Cr+t+zsgwZJ/wA=&amp;lt;/diagram&amp;gt;&amp;lt;diagram id=&amp;quot;blqg3zwlRoOX25T0yOIX&amp;quot; name=&amp;quot;Stack&amp;quot;&amp;gt;zZbPj5wgFID/Go+bjDK/epzOzrQ9bNLWNj2/4hslVSD4XMf+9cUFxjF20/bQ6MXA9x4IHwhG7Fhd3xnQxZPKsIySVXaN2GOUJLv9zj570DkQr1jsSG5E5tkAUvETQ6KnjciwHiWSUiUJPYZcSYmcRgyMUe047aLK8Vs15DgBKYdySr+JjApH98lu4O9R5IV/82bPXKCCkOsnUheQqfYOsVPEjkYpcqXqesSydxe0uHbnV6K3cRmU9DcN3ogL/55fnrED/QCf4h9fz8WD7+UZysbP96B1KTiQUNKPm7rgwqhGZtj3t4rY27YQhKkG3kdbu/qWFVSVthbbou8ZDeH11SHHNxF2A6GqkExnU0KDrXfXBeuu2g4LsQkpxd0iBAZ+7fNbz4MfW/CK/kFXMtH1CASWhH2fkmk4NQYX5y5ezy1vPZH3QRIa4G6v3RweXkC9OIPJam6D8VThIdg7G6iEzJdnbTu7tc3EWoq8MYLsEA82cJLcdNp7jJItVL0W9+y/aZHLJZplyexmtxOzT1jX/Y16tyF/o/SzamiRSme/YeLd9JT8+AebXwzIWitD/SEK0uqv+vkvTe76P95Atjr8Sb3E7n5H2ekX&amp;lt;/diagram&amp;gt;&amp;lt;/mxfile&amp;gt;&quot; style=&quot;background-color: rgb(255, 255, 255);&quot;&gt;&lt;defs/&gt;&lt;g&gt;&lt;rect x=&quot;0&quot; y=&quot;0&quot; width=&quot;560&quot; height=&quot;60&quot; fill=&quot;rgb(255, 255, 255)&quot; stroke=&quot;rgb(0, 0, 0)&quot; pointer-events=&quot;all&quot;/&gt;&lt;g transform=&quot;translate(-0.5 -0.5)&quot;&gt;&lt;switch&gt;&lt;foreignObject pointer-events=&quot;none&quot; width=&quot;100%&quot; height=&quot;100%&quot; requiredFeatures=&quot;http://www.w3.org/TR/SVG11/feature#Extensibility&quot; style=&quot;overflow: visible; text-align: left;&quot;&gt;&lt;div xmlns=&quot;http://www.w3.org/1999/xhtml&quot; style=&quot;display: flex; align-items: unsafe center; justify-content: unsafe center; width: 558px; height: 1px; padding-top: 30px; margin-left: 1px;&quot;&gt;&lt;div data-drawio-colors=&quot;color: rgb(0, 0, 0); &quot; style=&quot;box-sizing: border-box; font-size: 0px; text-align: center;&quot;&gt;&lt;div style=&quot;display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;&quot;&gt;Matter&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/foreignObject&gt;&lt;text x=&quot;280&quot; y=&quot;34&quot; fill=&quot;rgb(0, 0, 0)&quot; font-family=&quot;Helvetica&quot; font-size=&quot;12px&quot; text-anchor=&quot;middle&quot;&gt;Matter&lt;/text&gt;&lt;/switch&gt;&lt;/g&gt;&lt;rect x=&quot;0&quot; y=&quot;60&quot; width=&quot;280&quot; height=&quot;60&quot; fill=&quot;rgb(255, 255, 255)&quot; stroke=&quot;rgb(0, 0, 0)&quot; pointer-events=&quot;all&quot;/&gt;&lt;g transform=&quot;translate(-0.5 -0.5)&quot;&gt;&lt;switch&gt;&lt;foreignObject pointer-events=&quot;none&quot; width=&quot;100%&quot; height=&quot;100%&quot; requiredFeatures=&quot;http://www.w3.org/TR/SVG11/feature#Extensibility&quot; style=&quot;overflow: visible; text-align: left;&quot;&gt;&lt;div xmlns=&quot;http://www.w3.org/1999/xhtml&quot; style=&quot;display: flex; align-items: unsafe center; justify-content: unsafe center; width: 278px; height: 1px; padding-top: 90px; margin-left: 1px;&quot;&gt;&lt;div data-drawio-colors=&quot;color: rgb(0, 0, 0); &quot; style=&quot;box-sizing: border-box; font-size: 0px; text-align: center;&quot;&gt;&lt;div style=&quot;display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;&quot;&gt;TCP&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/foreignObject&gt;&lt;text x=&quot;140&quot; y=&quot;94&quot; fill=&quot;rgb(0, 0, 0)&quot; font-family=&quot;Helvetica&quot; font-size=&quot;12px&quot; text-anchor=&quot;middle&quot;&gt;TCP&lt;/text&gt;&lt;/switch&gt;&lt;/g&gt;&lt;rect x=&quot;280&quot; y=&quot;60&quot; width=&quot;280&quot; height=&quot;60&quot; fill=&quot;rgb(255, 255, 255)&quot; stroke=&quot;rgb(0, 0, 0)&quot; pointer-events=&quot;all&quot;/&gt;&lt;g transform=&quot;translate(-0.5 -0.5)&quot;&gt;&lt;switch&gt;&lt;foreignObject pointer-events=&quot;none&quot; width=&quot;100%&quot; height=&quot;100%&quot; requiredFeatures=&quot;http://www.w3.org/TR/SVG11/feature#Extensibility&quot; style=&quot;overflow: visible; text-align: left;&quot;&gt;&lt;div xmlns=&quot;http://www.w3.org/1999/xhtml&quot; style=&quot;display: flex; align-items: unsafe center; justify-content: unsafe center; width: 278px; height: 1px; padding-top: 90px; margin-left: 281px;&quot;&gt;&lt;div data-drawio-colors=&quot;color: rgb(0, 0, 0); &quot; style=&quot;box-sizing: border-box; font-size: 0px; text-align: center;&quot;&gt;&lt;div style=&quot;display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;&quot;&gt;UDP&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/foreignObject&gt;&lt;text x=&quot;420&quot; y=&quot;94&quot; fill=&quot;rgb(0, 0, 0)&quot; font-family=&quot;Helvetica&quot; font-size=&quot;12px&quot; text-anchor=&quot;middle&quot;&gt;UDP&lt;/text&gt;&lt;/switch&gt;&lt;/g&gt;&lt;rect x=&quot;0&quot; y=&quot;120&quot; width=&quot;560&quot; height=&quot;60&quot; fill=&quot;rgb(255, 255, 255)&quot; stroke=&quot;rgb(0, 0, 0)&quot; pointer-events=&quot;all&quot;/&gt;&lt;g transform=&quot;translate(-0.5 -0.5)&quot;&gt;&lt;switch&gt;&lt;foreignObject pointer-events=&quot;none&quot; width=&quot;100%&quot; height=&quot;100%&quot; requiredFeatures=&quot;http://www.w3.org/TR/SVG11/feature#Extensibility&quot; style=&quot;overflow: visible; text-align: left;&quot;&gt;&lt;div xmlns=&quot;http://www.w3.org/1999/xhtml&quot; style=&quot;display: flex; align-items: unsafe center; justify-content: unsafe center; width: 558px; height: 1px; padding-top: 150px; margin-left: 1px;&quot;&gt;&lt;div data-drawio-colors=&quot;color: rgb(0, 0, 0); &quot; style=&quot;box-sizing: border-box; font-size: 0px; text-align: center;&quot;&gt;&lt;div style=&quot;display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;&quot;&gt;IPv6&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/foreignObject&gt;&lt;text x=&quot;280&quot; y=&quot;154&quot; fill=&quot;rgb(0, 0, 0)&quot; font-family=&quot;Helvetica&quot; font-size=&quot;12px&quot; text-anchor=&quot;middle&quot;&gt;IPv6&lt;/text&gt;&lt;/switch&gt;&lt;/g&gt;&lt;rect x=&quot;0&quot; y=&quot;180&quot; width=&quot;80&quot; height=&quot;60&quot; fill=&quot;rgb(255, 255, 255)&quot; stroke=&quot;rgb(0, 0, 0)&quot; pointer-events=&quot;all&quot;/&gt;&lt;g transform=&quot;translate(-0.5 -0.5)&quot;&gt;&lt;switch&gt;&lt;foreignObject pointer-events=&quot;none&quot; width=&quot;100%&quot; height=&quot;100%&quot; requiredFeatures=&quot;http://www.w3.org/TR/SVG11/feature#Extensibility&quot; style=&quot;overflow: visible; text-align: left;&quot;&gt;&lt;div xmlns=&quot;http://www.w3.org/1999/xhtml&quot; style=&quot;display: flex; align-items: unsafe center; justify-content: unsafe center; width: 78px; height: 1px; padding-top: 210px; margin-left: 1px;&quot;&gt;&lt;div data-drawio-colors=&quot;color: rgb(0, 0, 0); &quot; style=&quot;box-sizing: border-box; font-size: 0px; text-align: center;&quot;&gt;&lt;div style=&quot;display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;&quot;&gt;DSL&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/foreignObject&gt;&lt;text x=&quot;40&quot; y=&quot;214&quot; fill=&quot;rgb(0, 0, 0)&quot; font-family=&quot;Helvetica&quot; font-size=&quot;12px&quot; text-anchor=&quot;middle&quot;&gt;DSL&lt;/text&gt;&lt;/switch&gt;&lt;/g&gt;&lt;rect x=&quot;80&quot; y=&quot;180&quot; width=&quot;80&quot; height=&quot;60&quot; fill=&quot;rgb(255, 255, 255)&quot; stroke=&quot;rgb(0, 0, 0)&quot; pointer-events=&quot;all&quot;/&gt;&lt;g transform=&quot;translate(-0.5 -0.5)&quot;&gt;&lt;switch&gt;&lt;foreignObject pointer-events=&quot;none&quot; width=&quot;100%&quot; height=&quot;100%&quot; requiredFeatures=&quot;http://www.w3.org/TR/SVG11/feature#Extensibility&quot; style=&quot;overflow: visible; text-align: left;&quot;&gt;&lt;div xmlns=&quot;http://www.w3.org/1999/xhtml&quot; style=&quot;display: flex; align-items: unsafe center; justify-content: unsafe center; width: 78px; height: 1px; padding-top: 210px; margin-left: 81px;&quot;&gt;&lt;div data-drawio-colors=&quot;color: rgb(0, 0, 0); &quot; style=&quot;box-sizing: border-box; font-size: 0px; text-align: center;&quot;&gt;&lt;div style=&quot;display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;&quot;&gt;DOCSIS&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/foreignObject&gt;&lt;text x=&quot;120&quot; y=&quot;214&quot; fill=&quot;rgb(0, 0, 0)&quot; font-family=&quot;Helvetica&quot; font-size=&quot;12px&quot; text-anchor=&quot;middle&quot;&gt;DOCSIS&lt;/text&gt;&lt;/switch&gt;&lt;/g&gt;&lt;rect x=&quot;160&quot; y=&quot;180&quot; width=&quot;80&quot; height=&quot;60&quot; fill=&quot;rgb(255, 255, 255)&quot; stroke=&quot;rgb(0, 0, 0)&quot; pointer-events=&quot;all&quot;/&gt;&lt;g transform=&quot;translate(-0.5 -0.5)&quot;&gt;&lt;switch&gt;&lt;foreignObject pointer-events=&quot;none&quot; width=&quot;100%&quot; height=&quot;100%&quot; requiredFeatures=&quot;http://www.w3.org/TR/SVG11/feature#Extensibility&quot; style=&quot;overflow: visible; text-align: left;&quot;&gt;&lt;div xmlns=&quot;http://www.w3.org/1999/xhtml&quot; style=&quot;display: flex; align-items: unsafe center; justify-content: unsafe center; width: 78px; height: 1px; padding-top: 210px; margin-left: 161px;&quot;&gt;&lt;div data-drawio-colors=&quot;color: rgb(0, 0, 0); &quot; style=&quot;box-sizing: border-box; font-size: 0px; text-align: center;&quot;&gt;&lt;div style=&quot;display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;&quot;&gt;Cellular&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/foreignObject&gt;&lt;text x=&quot;200&quot; y=&quot;214&quot; fill=&quot;rgb(0, 0, 0)&quot; font-family=&quot;Helvetica&quot; font-size=&quot;12px&quot; text-anchor=&quot;middle&quot;&gt;Cellular&lt;/text&gt;&lt;/switch&gt;&lt;/g&gt;&lt;rect x=&quot;240&quot; y=&quot;180&quot; width=&quot;80&quot; height=&quot;60&quot; fill=&quot;rgb(255, 255, 255)&quot; stroke=&quot;rgb(0, 0, 0)&quot; pointer-events=&quot;all&quot;/&gt;&lt;g transform=&quot;translate(-0.5 -0.5)&quot;&gt;&lt;switch&gt;&lt;foreignObject pointer-events=&quot;none&quot; width=&quot;100%&quot; height=&quot;100%&quot; requiredFeatures=&quot;http://www.w3.org/TR/SVG11/feature#Extensibility&quot; style=&quot;overflow: visible; text-align: left;&quot;&gt;&lt;div xmlns=&quot;http://www.w3.org/1999/xhtml&quot; style=&quot;display: flex; align-items: unsafe center; justify-content: unsafe center; width: 78px; height: 1px; padding-top: 210px; margin-left: 241px;&quot;&gt;&lt;div data-drawio-colors=&quot;color: rgb(0, 0, 0); &quot; style=&quot;box-sizing: border-box; font-size: 0px; text-align: center;&quot;&gt;&lt;div style=&quot;display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;&quot;&gt;Ethernet&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/foreignObject&gt;&lt;text x=&quot;280&quot; y=&quot;214&quot; fill=&quot;rgb(0, 0, 0)&quot; font-family=&quot;Helvetica&quot; font-size=&quot;12px&quot; text-anchor=&quot;middle&quot;&gt;Ethernet&lt;/text&gt;&lt;/switch&gt;&lt;/g&gt;&lt;rect x=&quot;320&quot; y=&quot;180&quot; width=&quot;80&quot; height=&quot;60&quot; fill=&quot;rgb(255, 255, 255)&quot; stroke=&quot;rgb(0, 0, 0)&quot; pointer-events=&quot;all&quot;/&gt;&lt;g transform=&quot;translate(-0.5 -0.5)&quot;&gt;&lt;switch&gt;&lt;foreignObject pointer-events=&quot;none&quot; width=&quot;100%&quot; height=&quot;100%&quot; requiredFeatures=&quot;http://www.w3.org/TR/SVG11/feature#Extensibility&quot; style=&quot;overflow: visible; text-align: left;&quot;&gt;&lt;div xmlns=&quot;http://www.w3.org/1999/xhtml&quot; style=&quot;display: flex; align-items: unsafe center; justify-content: unsafe center; width: 78px; height: 1px; padding-top: 210px; margin-left: 321px;&quot;&gt;&lt;div data-drawio-colors=&quot;color: rgb(0, 0, 0); &quot; style=&quot;box-sizing: border-box; font-size: 0px; text-align: center;&quot;&gt;&lt;div style=&quot;display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;&quot;&gt;WiFi&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/foreignObject&gt;&lt;text x=&quot;360&quot; y=&quot;214&quot; fill=&quot;rgb(0, 0, 0)&quot; font-family=&quot;Helvetica&quot; font-size=&quot;12px&quot; text-anchor=&quot;middle&quot;&gt;WiFi&lt;/text&gt;&lt;/switch&gt;&lt;/g&gt;&lt;rect x=&quot;400&quot; y=&quot;180&quot; width=&quot;80&quot; height=&quot;30&quot; fill=&quot;rgb(255, 255, 255)&quot; stroke=&quot;rgb(0, 0, 0)&quot; pointer-events=&quot;all&quot;/&gt;&lt;g transform=&quot;translate(-0.5 -0.5)&quot;&gt;&lt;switch&gt;&lt;foreignObject pointer-events=&quot;none&quot; width=&quot;100%&quot; height=&quot;100%&quot; requiredFeatures=&quot;http://www.w3.org/TR/SVG11/feature#Extensibility&quot; style=&quot;overflow: visible; text-align: left;&quot;&gt;&lt;div xmlns=&quot;http://www.w3.org/1999/xhtml&quot; style=&quot;display: flex; align-items: unsafe center; justify-content: unsafe center; width: 78px; height: 1px; padding-top: 195px; margin-left: 401px;&quot;&gt;&lt;div data-drawio-colors=&quot;color: rgb(0, 0, 0); &quot; style=&quot;box-sizing: border-box; font-size: 0px; text-align: center;&quot;&gt;&lt;div style=&quot;display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;&quot;&gt;Thread&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/foreignObject&gt;&lt;text x=&quot;440&quot; y=&quot;199&quot; fill=&quot;rgb(0, 0, 0)&quot; font-family=&quot;Helvetica&quot; font-size=&quot;12px&quot; text-anchor=&quot;middle&quot;&gt;Thread&lt;/text&gt;&lt;/switch&gt;&lt;/g&gt;&lt;rect x=&quot;400&quot; y=&quot;210&quot; width=&quot;80&quot; height=&quot;30&quot; fill=&quot;rgb(255, 255, 255)&quot; stroke=&quot;rgb(0, 0, 0)&quot; pointer-events=&quot;all&quot;/&gt;&lt;g transform=&quot;translate(-0.5 -0.5)&quot;&gt;&lt;switch&gt;&lt;foreignObject pointer-events=&quot;none&quot; width=&quot;100%&quot; height=&quot;100%&quot; requiredFeatures=&quot;http://www.w3.org/TR/SVG11/feature#Extensibility&quot; style=&quot;overflow: visible; text-align: left;&quot;&gt;&lt;div xmlns=&quot;http://www.w3.org/1999/xhtml&quot; style=&quot;display: flex; align-items: unsafe center; justify-content: unsafe center; width: 78px; height: 1px; padding-top: 225px; margin-left: 401px;&quot;&gt;&lt;div data-drawio-colors=&quot;color: rgb(0, 0, 0); &quot; style=&quot;box-sizing: border-box; font-size: 0px; text-align: center;&quot;&gt;&lt;div style=&quot;display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;&quot;&gt;802.15.4&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/foreignObject&gt;&lt;text x=&quot;440&quot; y=&quot;229&quot; fill=&quot;rgb(0, 0, 0)&quot; font-family=&quot;Helvetica&quot; font-size=&quot;12px&quot; text-anchor=&quot;middle&quot;&gt;802.15.4&lt;/text&gt;&lt;/switch&gt;&lt;/g&gt;&lt;rect x=&quot;480&quot; y=&quot;180&quot; width=&quot;80&quot; height=&quot;30&quot; fill=&quot;rgb(255, 255, 255)&quot; stroke=&quot;rgb(0, 0, 0)&quot; pointer-events=&quot;all&quot;/&gt;&lt;g transform=&quot;translate(-0.5 -0.5)&quot;&gt;&lt;switch&gt;&lt;foreignObject pointer-events=&quot;none&quot; width=&quot;100%&quot; height=&quot;100%&quot; requiredFeatures=&quot;http://www.w3.org/TR/SVG11/feature#Extensibility&quot; style=&quot;overflow: visible; text-align: left;&quot;&gt;&lt;div xmlns=&quot;http://www.w3.org/1999/xhtml&quot; style=&quot;display: flex; align-items: unsafe center; justify-content: unsafe center; width: 78px; height: 1px; padding-top: 195px; margin-left: 481px;&quot;&gt;&lt;div data-drawio-colors=&quot;color: rgb(0, 0, 0); &quot; style=&quot;box-sizing: border-box; font-size: 0px; text-align: center;&quot;&gt;&lt;div style=&quot;display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;&quot;&gt;IPv6 for BLE&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/foreignObject&gt;&lt;text x=&quot;520&quot; y=&quot;199&quot; fill=&quot;rgb(0, 0, 0)&quot; font-family=&quot;Helvetica&quot; font-size=&quot;12px&quot; text-anchor=&quot;middle&quot;&gt;IPv6 for BLE&lt;/text&gt;&lt;/switch&gt;&lt;/g&gt;&lt;rect x=&quot;480&quot; y=&quot;210&quot; width=&quot;80&quot; height=&quot;30&quot; fill=&quot;rgb(255, 255, 255)&quot; stroke=&quot;rgb(0, 0, 0)&quot; pointer-events=&quot;all&quot;/&gt;&lt;g transform=&quot;translate(-0.5 -0.5)&quot;&gt;&lt;switch&gt;&lt;foreignObject pointer-events=&quot;none&quot; width=&quot;100%&quot; height=&quot;100%&quot; requiredFeatures=&quot;http://www.w3.org/TR/SVG11/feature#Extensibility&quot; style=&quot;overflow: visible; text-align: left;&quot;&gt;&lt;div xmlns=&quot;http://www.w3.org/1999/xhtml&quot; style=&quot;display: flex; align-items: unsafe center; justify-content: unsafe center; width: 78px; height: 1px; padding-top: 225px; margin-left: 481px;&quot;&gt;&lt;div data-drawio-colors=&quot;color: rgb(0, 0, 0); &quot; style=&quot;box-sizing: border-box; font-size: 0px; text-align: center;&quot;&gt;&lt;div style=&quot;display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;&quot;&gt;BLE&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/foreignObject&gt;&lt;text x=&quot;520&quot; y=&quot;229&quot; fill=&quot;rgb(0, 0, 0)&quot; font-family=&quot;Helvetica&quot; font-size=&quot;12px&quot; text-anchor=&quot;middle&quot;&gt;BLE&lt;/text&gt;&lt;/switch&gt;&lt;/g&gt;&lt;/g&gt;&lt;switch&gt;&lt;g requiredFeatures=&quot;http://www.w3.org/TR/SVG11/feature#Extensibility&quot;/&gt;&lt;a transform=&quot;translate(0,-5)&quot; xlink:href=&quot;https://www.diagrams.net/doc/faq/svg-export-text-problems&quot; target=&quot;_blank&quot;&gt;&lt;text text-anchor=&quot;middle&quot; font-size=&quot;10px&quot; x=&quot;50%&quot; y=&quot;100%&quot;&gt;Text is not SVG - cannot display&lt;/text&gt;&lt;/a&gt;&lt;/switch&gt;&lt;/svg&gt;
&lt;/div&gt;

&lt;p&gt;
Matter 应用层部署在支持 IPv6 的设备和控制器上。Matter 的核心通信采用
WiFi 和 Thread。设备设置过程使用低功耗蓝牙。
&lt;/p&gt;


&lt;p&gt;
Matter 应用架构如下：
&lt;/p&gt;

&lt;div align=&quot;center&quot;&gt;
&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; xmlns:xlink=&quot;http://www.w3.org/1999/xlink&quot; version=&quot;1.1&quot; width=&quot;561px&quot; height=&quot;421px&quot; viewBox=&quot;-0.5 -0.5 561 421&quot; content=&quot;&amp;lt;mxfile host=&amp;quot;Electron&amp;quot; modified=&amp;quot;2022-05-25T11:48:56.177Z&amp;quot; agent=&amp;quot;5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) draw.io/18.0.6 Chrome/100.0.4896.143 Electron/18.2.3 Safari/537.36&amp;quot; etag=&amp;quot;DyBx10NoecE2ZIAGQJNZ&amp;quot; version=&amp;quot;18.0.6&amp;quot; type=&amp;quot;device&amp;quot; pages=&amp;quot;2&amp;quot;&amp;gt;&amp;lt;diagram id=&amp;quot;39v41MHP21HMX9VKEkff&amp;quot; name=&amp;quot;Communication&amp;quot;&amp;gt;zdjdbpswGAbgq+FwlbGBsNMSuqZqtEpkS0/d8C1GApy6ppBd/cwwIdSqtFVK7aPA6x/gsQMGjyRV903QA1vzHEoPo7zzyNLDGKMIq58+OQ6Jj0k4JHtR5Dqbgqz4DTpEOm2KHF5mFSXnpSwO83DH6xp2cpZRIXg7r/aLl/OjHugejCDb0dJMt0Uu2ZDGeDHlt1DsmT5yGJOhoKJjXX0hL4zmvD2LSOqRRHAuh62qS6Ds8UaWod3NO6Wn8xJQy39pkG4Xj228flrdNj85fe7Q3eb4JRp6eaVlo693TaUEoU9ZHkcGwZs6h74r5JHrlhUSsgPd9aWtGnmVMVmVas9Xm7pTEBK6d8/WPxmoyQO8AimOqsrYINJsp3mj99tpEMKxDjsbgDGjetz3p64nG7Whef6DamFQbZIH95xi0wnHn+kUG04/lvadgsA1p6+G0+rhNbIO9XZC4cD2H298EpxJLbN756AIMqE+dUL5vun0PclWmXUqHLhGhQ2qvllTUvtPPoJdwyIGVioZiBqkdawAuYYVGFjb4qawDxW7BhUaUBsmgObWqcIP3tjJxajMVXqM8JUfXgXuYRHbWOY6fVhXqVc/dXNH1/epdbTog8/Dy6GZi3YnnS43udTu9Cr+t+zsgwZJ/wA=&amp;lt;/diagram&amp;gt;&amp;lt;diagram id=&amp;quot;blqg3zwlRoOX25T0yOIX&amp;quot; name=&amp;quot;Stack&amp;quot;&amp;gt;zZZBb5swFIB/DcdKYCe0O2Zpsu1QqRuddn4zL2ANbGQeJezX19QmBLGq22GCC9jfezb2Z4MJ+L48fzJQ5Q86xSJgYXoO+H3AGAtjZm896RyJGN86khmZejaCRP5GD0NPG5liPUkkrQuS1RQKrRQKmjAwRrfTtJMupk+tIMMZSAQUc/pDppQ7esduR/4ZZZb7J2/vuAuUMOT6idQ5pLq9QvwQ8L3RmlypPO+x6OUNWly74xvRy7gMKvqbBh/kSfzMTs/YQXUDX6Nf34/5je/lGYrGz3dXVYUUQFIrP27qBhdGNyrFvr8w4B/bXBImFYg+2trltyynsrC1yBZ9z2gIz28OObqIsDsIdYlkOpsyNIi9u26w7qrtuBDbISW/WoSBgV/77NLz6McWvKJ/0MVmuu6BwJJh4ydkGkGNwdW5izZLy9vM5H1RhAaE22sXh7tXUK/OIAuXNhjNFe4Ge0cDpVTZ+qzFi1vbzqwlKBojyQ5xZwMHJUxXeY8Bi6Hstbhr/07LTK3RLGeLm41nZh+wrvsT9WpD/kHpN93QKpUufsJEt/Ov5OM7Np8MqLrShvqPKCirv+znvza5m/94Atnq+Cf1Grv6H+WHFw==&amp;lt;/diagram&amp;gt;&amp;lt;/mxfile&amp;gt;&quot; style=&quot;background-color: rgb(255, 255, 255);&quot;&gt;&lt;defs/&gt;&lt;g&gt;&lt;rect x=&quot;0&quot; y=&quot;0&quot; width=&quot;560&quot; height=&quot;60&quot; fill=&quot;rgb(255, 255, 255)&quot; stroke=&quot;rgb(0, 0, 0)&quot; pointer-events=&quot;all&quot;/&gt;&lt;g transform=&quot;translate(-0.5 -0.5)&quot;&gt;&lt;switch&gt;&lt;foreignObject pointer-events=&quot;none&quot; width=&quot;100%&quot; height=&quot;100%&quot; requiredFeatures=&quot;http://www.w3.org/TR/SVG11/feature#Extensibility&quot; style=&quot;overflow: visible; text-align: left;&quot;&gt;&lt;div xmlns=&quot;http://www.w3.org/1999/xhtml&quot; style=&quot;display: flex; align-items: unsafe center; justify-content: unsafe center; width: 558px; height: 1px; padding-top: 30px; margin-left: 1px;&quot;&gt;&lt;div data-drawio-colors=&quot;color: rgb(0, 0, 0); &quot; style=&quot;box-sizing: border-box; font-size: 0px; text-align: center;&quot;&gt;&lt;div style=&quot;display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;&quot;&gt;Application&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/foreignObject&gt;&lt;text x=&quot;280&quot; y=&quot;34&quot; fill=&quot;rgb(0, 0, 0)&quot; font-family=&quot;Helvetica&quot; font-size=&quot;12px&quot; text-anchor=&quot;middle&quot;&gt;Application&lt;/text&gt;&lt;/switch&gt;&lt;/g&gt;&lt;rect x=&quot;0&quot; y=&quot;60&quot; width=&quot;560&quot; height=&quot;60&quot; fill=&quot;rgb(255, 255, 255)&quot; stroke=&quot;rgb(0, 0, 0)&quot; pointer-events=&quot;all&quot;/&gt;&lt;g transform=&quot;translate(-0.5 -0.5)&quot;&gt;&lt;switch&gt;&lt;foreignObject pointer-events=&quot;none&quot; width=&quot;100%&quot; height=&quot;100%&quot; requiredFeatures=&quot;http://www.w3.org/TR/SVG11/feature#Extensibility&quot; style=&quot;overflow: visible; text-align: left;&quot;&gt;&lt;div xmlns=&quot;http://www.w3.org/1999/xhtml&quot; style=&quot;display: flex; align-items: unsafe center; justify-content: unsafe center; width: 558px; height: 1px; padding-top: 90px; margin-left: 1px;&quot;&gt;&lt;div data-drawio-colors=&quot;color: rgb(0, 0, 0); &quot; style=&quot;box-sizing: border-box; font-size: 0px; text-align: center;&quot;&gt;&lt;div style=&quot;display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;&quot;&gt;Data Model Structure&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/foreignObject&gt;&lt;text x=&quot;280&quot; y=&quot;94&quot; fill=&quot;rgb(0, 0, 0)&quot; font-family=&quot;Helvetica&quot; font-size=&quot;12px&quot; text-anchor=&quot;middle&quot;&gt;Data Model Structure&lt;/text&gt;&lt;/switch&gt;&lt;/g&gt;&lt;rect x=&quot;0&quot; y=&quot;120&quot; width=&quot;560&quot; height=&quot;60&quot; fill=&quot;rgb(255, 255, 255)&quot; stroke=&quot;rgb(0, 0, 0)&quot; pointer-events=&quot;all&quot;/&gt;&lt;g transform=&quot;translate(-0.5 -0.5)&quot;&gt;&lt;switch&gt;&lt;foreignObject pointer-events=&quot;none&quot; width=&quot;100%&quot; height=&quot;100%&quot; requiredFeatures=&quot;http://www.w3.org/TR/SVG11/feature#Extensibility&quot; style=&quot;overflow: visible; text-align: left;&quot;&gt;&lt;div xmlns=&quot;http://www.w3.org/1999/xhtml&quot; style=&quot;display: flex; align-items: unsafe center; justify-content: unsafe center; width: 558px; height: 1px; padding-top: 150px; margin-left: 1px;&quot;&gt;&lt;div data-drawio-colors=&quot;color: rgb(0, 0, 0); &quot; style=&quot;box-sizing: border-box; font-size: 0px; text-align: center;&quot;&gt;&lt;div style=&quot;display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;&quot;&gt;Interaction Model Actions&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/foreignObject&gt;&lt;text x=&quot;280&quot; y=&quot;154&quot; fill=&quot;rgb(0, 0, 0)&quot; font-family=&quot;Helvetica&quot; font-size=&quot;12px&quot; text-anchor=&quot;middle&quot;&gt;Interaction Model Actions&lt;/text&gt;&lt;/switch&gt;&lt;/g&gt;&lt;rect x=&quot;0&quot; y=&quot;180&quot; width=&quot;560&quot; height=&quot;60&quot; fill=&quot;rgb(255, 255, 255)&quot; stroke=&quot;rgb(0, 0, 0)&quot; pointer-events=&quot;all&quot;/&gt;&lt;g transform=&quot;translate(-0.5 -0.5)&quot;&gt;&lt;switch&gt;&lt;foreignObject pointer-events=&quot;none&quot; width=&quot;100%&quot; height=&quot;100%&quot; requiredFeatures=&quot;http://www.w3.org/TR/SVG11/feature#Extensibility&quot; style=&quot;overflow: visible; text-align: left;&quot;&gt;&lt;div xmlns=&quot;http://www.w3.org/1999/xhtml&quot; style=&quot;display: flex; align-items: unsafe center; justify-content: unsafe center; width: 558px; height: 1px; padding-top: 210px; margin-left: 1px;&quot;&gt;&lt;div data-drawio-colors=&quot;color: rgb(0, 0, 0); &quot; style=&quot;box-sizing: border-box; font-size: 0px; text-align: center;&quot;&gt;&lt;div style=&quot;display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;&quot;&gt;Action Framing&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/foreignObject&gt;&lt;text x=&quot;280&quot; y=&quot;214&quot; fill=&quot;rgb(0, 0, 0)&quot; font-family=&quot;Helvetica&quot; font-size=&quot;12px&quot; text-anchor=&quot;middle&quot;&gt;Action Framing&lt;/text&gt;&lt;/switch&gt;&lt;/g&gt;&lt;rect x=&quot;0&quot; y=&quot;240&quot; width=&quot;560&quot; height=&quot;60&quot; fill=&quot;rgb(255, 255, 255)&quot; stroke=&quot;rgb(0, 0, 0)&quot; pointer-events=&quot;all&quot;/&gt;&lt;g transform=&quot;translate(-0.5 -0.5)&quot;&gt;&lt;switch&gt;&lt;foreignObject pointer-events=&quot;none&quot; width=&quot;100%&quot; height=&quot;100%&quot; requiredFeatures=&quot;http://www.w3.org/TR/SVG11/feature#Extensibility&quot; style=&quot;overflow: visible; text-align: left;&quot;&gt;&lt;div xmlns=&quot;http://www.w3.org/1999/xhtml&quot; style=&quot;display: flex; align-items: unsafe center; justify-content: unsafe center; width: 558px; height: 1px; padding-top: 270px; margin-left: 1px;&quot;&gt;&lt;div data-drawio-colors=&quot;color: rgb(0, 0, 0); &quot; style=&quot;box-sizing: border-box; font-size: 0px; text-align: center;&quot;&gt;&lt;div style=&quot;display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;&quot;&gt;Security: Encryption &amp;amp; Signing&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/foreignObject&gt;&lt;text x=&quot;280&quot; y=&quot;274&quot; fill=&quot;rgb(0, 0, 0)&quot; font-family=&quot;Helvetica&quot; font-size=&quot;12px&quot; text-anchor=&quot;middle&quot;&gt;Security: Encryption &amp;amp; Signing&lt;/text&gt;&lt;/switch&gt;&lt;/g&gt;&lt;rect x=&quot;0&quot; y=&quot;300&quot; width=&quot;560&quot; height=&quot;60&quot; fill=&quot;rgb(255, 255, 255)&quot; stroke=&quot;rgb(0, 0, 0)&quot; pointer-events=&quot;all&quot;/&gt;&lt;g transform=&quot;translate(-0.5 -0.5)&quot;&gt;&lt;switch&gt;&lt;foreignObject pointer-events=&quot;none&quot; width=&quot;100%&quot; height=&quot;100%&quot; requiredFeatures=&quot;http://www.w3.org/TR/SVG11/feature#Extensibility&quot; style=&quot;overflow: visible; text-align: left;&quot;&gt;&lt;div xmlns=&quot;http://www.w3.org/1999/xhtml&quot; style=&quot;display: flex; align-items: unsafe center; justify-content: unsafe center; width: 558px; height: 1px; padding-top: 330px; margin-left: 1px;&quot;&gt;&lt;div data-drawio-colors=&quot;color: rgb(0, 0, 0); &quot; style=&quot;box-sizing: border-box; font-size: 0px; text-align: center;&quot;&gt;&lt;div style=&quot;display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;&quot;&gt;Message Framing &amp;amp; Routing&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/foreignObject&gt;&lt;text x=&quot;280&quot; y=&quot;334&quot; fill=&quot;rgb(0, 0, 0)&quot; font-family=&quot;Helvetica&quot; font-size=&quot;12px&quot; text-anchor=&quot;middle&quot;&gt;Message Framing &amp;amp; Routing&lt;/text&gt;&lt;/switch&gt;&lt;/g&gt;&lt;rect x=&quot;0&quot; y=&quot;360&quot; width=&quot;560&quot; height=&quot;60&quot; fill=&quot;rgb(255, 255, 255)&quot; stroke=&quot;rgb(0, 0, 0)&quot; pointer-events=&quot;all&quot;/&gt;&lt;g transform=&quot;translate(-0.5 -0.5)&quot;&gt;&lt;switch&gt;&lt;foreignObject pointer-events=&quot;none&quot; width=&quot;100%&quot; height=&quot;100%&quot; requiredFeatures=&quot;http://www.w3.org/TR/SVG11/feature#Extensibility&quot; style=&quot;overflow: visible; text-align: left;&quot;&gt;&lt;div xmlns=&quot;http://www.w3.org/1999/xhtml&quot; style=&quot;display: flex; align-items: unsafe center; justify-content: unsafe center; width: 558px; height: 1px; padding-top: 390px; margin-left: 1px;&quot;&gt;&lt;div data-drawio-colors=&quot;color: rgb(0, 0, 0); &quot; style=&quot;box-sizing: border-box; font-size: 0px; text-align: center;&quot;&gt;&lt;div style=&quot;display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;&quot;&gt;IP Framing &amp;amp; Transport Management&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/foreignObject&gt;&lt;text x=&quot;280&quot; y=&quot;394&quot; fill=&quot;rgb(0, 0, 0)&quot; font-family=&quot;Helvetica&quot; font-size=&quot;12px&quot; text-anchor=&quot;middle&quot;&gt;IP Framing &amp;amp; Transport Management&lt;/text&gt;&lt;/switch&gt;&lt;/g&gt;&lt;/g&gt;&lt;switch&gt;&lt;g requiredFeatures=&quot;http://www.w3.org/TR/SVG11/feature#Extensibility&quot;/&gt;&lt;a transform=&quot;translate(0,-5)&quot; xlink:href=&quot;https://www.diagrams.net/doc/faq/svg-export-text-problems&quot; target=&quot;_blank&quot;&gt;&lt;text text-anchor=&quot;middle&quot; font-size=&quot;10px&quot; x=&quot;50%&quot; y=&quot;100%&quot;&gt;Text is not SVG - cannot display&lt;/text&gt;&lt;/a&gt;&lt;/switch&gt;&lt;/svg&gt;
&lt;/div&gt;

&lt;p&gt;
Matter 应用层架构分为 7 个模块：
&lt;/p&gt;
&lt;ol class=&quot;org-ol&quot;&gt;
&lt;li&gt;应用服务层：提供设备的高级业务逻辑服务。比如一个灯光控制开关，可以调节灯的开关、亮度以及颜色。&lt;/li&gt;
&lt;li&gt;数据模型层：通过数据元语描述设备功能。应用服务层通过调用设备描述结构与设备通信。&lt;/li&gt;
&lt;li&gt;操作模型层：提供一组访问设备的操作动作。比如读写设备的某个属性，代表某一类设备操作。操作动作在数据模型层定义。&lt;/li&gt;
&lt;li&gt;动作组帧层：一旦通过操作模型层发起一个动作，就会在这一层组装层二进制格式的数据包传输给设备。&lt;/li&gt;
&lt;li&gt;信息安全层：这一层对数据进行加密、签名。从而保证收发双方数据传输完整保密。&lt;/li&gt;
&lt;li&gt;消息路由层：把加密、签名的数据分帧打包，添加消息头和路由信息。&lt;/li&gt;
&lt;li&gt;网络传输层：通过传输层传输 IP 数据包。&lt;/li&gt;
&lt;/ol&gt;
&lt;div id=&quot;footnotes&quot;&gt;
&lt;h2 class=&quot;footnotes&quot;&gt;Footnotes: &lt;/h2&gt;
&lt;div id=&quot;text-footnotes&quot;&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.1&quot; class=&quot;footnum&quot; href=&quot;#fnr.1&quot; role=&quot;doc-backlink&quot;&gt;1&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot; role=&quot;doc-footnote&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;https://csa-iot.org/newsroom/connectivity-standards-alliance/&quot;&gt;https://csa-iot.org/newsroom/connectivity-standards-alliance/&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;


&lt;/div&gt;
&lt;/div&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines F.19 要“完美转发”参数，通过 TP&& 传递参数，只用 std::forward 转发参数</title>
   <link href="http://kimi.im/2022-04-30-cppcoreguidelines-f19"/>
   <updated>2022-04-30T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-f19</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
F.19: For “ forward ” parameters, pass by &lt;code&gt;TP&amp;amp;&amp;amp;&lt;/code&gt; and only &lt;code&gt;std::forward&lt;/code&gt; the parameter
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;理由&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
如果一个函数不直接使用参数，只是要把参数传给其他函数，那么要有办法让这个函数不改变参数的 &lt;code&gt;const&lt;/code&gt; 属性和右值属性。
&lt;/p&gt;

&lt;p&gt;
当且仅当在这种情况下，要把参数设置成右值引用&lt;code&gt;TP&amp;amp;&amp;amp;&lt;/code&gt;，其中 &lt;code&gt;TP&lt;/code&gt; 为模板参数类型。这样就不用关心只读 &lt;code&gt;const&lt;/code&gt; 属性和右值属性，也会保留这些属性。因此，任何代码使用了&lt;code&gt;TP&amp;amp;&amp;amp;&lt;/code&gt;就表示其不关心且保留只读 &lt;code&gt;const&lt;/code&gt; 属性和右值属性，但是它可以把这些属性完美的转发给其他代码。因为调用过程中，&lt;code&gt;TP&amp;amp;&amp;amp;&lt;/code&gt;参数是一个只读的临时对象，所以是安全的。&lt;code&gt;TP&amp;amp;&amp;amp;&lt;/code&gt;类型的参数，在函数体中，最终应该通过&lt;code&gt;std::forward&lt;/code&gt;转发给别的函数。
&lt;/p&gt;

&lt;p&gt;
例子：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;template&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;F&lt;/span&gt;, &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class...&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Args&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;inline&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;auto&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;my_invoke&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;F&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;f&lt;/span&gt;, &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Args&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;...&lt;/span&gt; args&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;forward&lt;/span&gt;&lt;span style=&quot;color: #909183; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Args&lt;/span&gt;&lt;span style=&quot;color: #909183; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;args&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;...&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;ff&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;x&lt;/span&gt;, &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;y&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    cout &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; x &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot; &quot;&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; y &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; endl;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;0&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;main&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;my_invoke&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;ff, &lt;span style=&quot;color: #110099;&quot;&gt;11&lt;/span&gt;, &lt;span style=&quot;color: #110099;&quot;&gt;12&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;0&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;pre class=&quot;example&quot;&gt;
11 12
&lt;/pre&gt;


&lt;p&gt;
强化：
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;如果一个函数接受&lt;code&gt;TP&amp;amp;&amp;amp;&lt;/code&gt;类型参数，但是没有在每个静态分支路径上用
&lt;code&gt;std::forward&lt;/code&gt; 转发给其他函数。标记警告。&lt;/li&gt;
&lt;/ul&gt;
</content>
 </entry>
 
 <entry>
   <title>Background Color of Inline Image for Orgmode in Dark Theme</title>
   <link href="http://kimi.im/2022-04-29-background-color-of-inline-image-for-orgmode"/>
   <updated>2022-04-29T00:00:00+00:00</updated>
   <id>http://kimi.im/background-color-of-inline-image-for-orgmode</id>
   <content type="html">&lt;p&gt;
Displaying &lt;a href=&quot;https://orgmode.org/manual/Images.html&quot;&gt;inline image&lt;/a&gt; in orgmode is useful. But when emacs theme is
dark theme and the image has transparent background, the image is
difficult to view.
&lt;/p&gt;

&lt;p&gt;
To fix this problem, we can define an advice to filter the image from
&lt;code&gt;org--create-inline-image&lt;/code&gt;.
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-emacs-lisp&quot;&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;defun&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;org--create-inline-image-advice&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;img&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;
  &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;nconc img &lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;list &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;:background&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;#f8f8f8&quot;&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;advice-add &apos;org--create-inline-image
            &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;:filter-return&lt;/span&gt; #&apos;org--create-inline-image-advice&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
&lt;code&gt;org--create-inline-image-advice&lt;/code&gt; adds &lt;code&gt;:background&lt;/code&gt; to the image. &lt;code&gt;#f8f8f8&lt;/code&gt;
is the light white color I used for light theme.
&lt;/p&gt;

&lt;p&gt;
&lt;code&gt;:filter-return&lt;/code&gt; is the &lt;code&gt;where&lt;/code&gt; argument for &lt;code&gt;advice-add&lt;/code&gt;, this means the
advice function is applied to the result of the original function:
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-emacs-lisp&quot;&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;lambda&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;&amp;amp;rest&lt;/span&gt; r&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;funcall advice-function &lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;apply oldfun r&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
With the advice, the transparent background inline image looks the
same no matter light or dark theme.
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines F.18 要移动的参数，通过 X&& 传递，并用 std::move 移动</title>
   <link href="http://kimi.im/2022-04-27-cppcoreguidelines-f18"/>
   <updated>2022-04-27T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-f18</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
F.18: For “ will-move-from ” parameters, pass by &lt;code&gt;X&amp;amp;&amp;amp;&lt;/code&gt; and &lt;code&gt;std::move&lt;/code&gt; the parameter
&lt;/p&gt;

&lt;p&gt;
&lt;b&gt;理由&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
如果在调用的地方需要显式的用&lt;code&gt;std::move&lt;/code&gt;转移一个左值，那么，这个形参的类型最好是&lt;code&gt;X&amp;amp;&amp;amp;&lt;/code&gt;这样的形式定义。如此处理，可以保证效率较高，避免调用处产生 bug。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;例子&lt;/b&gt;
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-C++&quot;&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;// sink takes ownership of whatever the argument owned&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;sink&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;vector&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;v&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// usually there might be const accesses of v here&lt;/span&gt;
    &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;store_somewhere&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;std&lt;/span&gt;::&lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;move&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;v&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// usually no more use of v here; it is moved-from&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
注意，通过&lt;code&gt;std::move(v)&lt;/code&gt;移动参数后，&lt;code&gt;store_somewhere()&lt;/code&gt;函数会把 &lt;code&gt;v&lt;/code&gt; 变量留在移动之前的状态。这样是比较危险的。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;例外&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
唯一所有权的变量只能通过移动进行参数传递，这类变量移动传参性能损耗也相对不太高。比如&lt;code&gt;unique_ptr&lt;/code&gt;这样的变量，只能进行移动。所以传参的时候进行值传递也能达到一样的效果。而且，这样还能能够做到简洁和清晰，所以可以规避显式的移动操作。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;例子&lt;/b&gt;
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;template&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;sink&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;std&lt;/span&gt;::&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;unique_ptr&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;p&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// use p ... possibly std::move(p) onward somewhere else&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// p gets destroyed&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;
&lt;b&gt;强化&lt;/b&gt;
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;标注函数体内没有进行&lt;code&gt;std::move&lt;/code&gt;操作的&lt;code&gt;X&amp;amp;&amp;amp;&lt;/code&gt;参数&lt;/li&gt;
&lt;li&gt;标注对象转移后还进行访问的地方&lt;/li&gt;
&lt;li&gt;不要在条件分支里进行移动&lt;/li&gt;
&lt;/ul&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines F.17 输入输出参数，通过非 const 引用传递</title>
   <link href="http://kimi.im/2022-04-26-cppcoreguidelines-f17"/>
   <updated>2022-04-26T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-f17</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
F.17: For “ in-out ” parameters, pass by reference to non-&lt;code&gt;const&lt;/code&gt;
&lt;/p&gt;

&lt;p&gt;
&lt;b&gt;理由&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
以非 &lt;code&gt;const&lt;/code&gt; 引用的方式传递参数，表示函数会修改该参数。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;例子&lt;/b&gt;
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;update&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Record&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;r&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;  &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// assume that update writes to r&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;
&lt;b&gt;注意&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
有些用户自定义的类型和标准库类型的拷贝成本比较低，可以通过值传递给参数。比如&lt;code&gt;span&amp;lt;T&amp;gt;&lt;/code&gt;和 &lt;code&gt;iterator&lt;/code&gt; 。这也意味着，这些参数是以可变的入参 - 出参的机制传递。
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;increment_all&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;span&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;a&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
  &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;for&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;auto&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; e : a&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;++&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;e&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
&lt;b&gt;注意&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
&lt;code&gt;T&amp;amp;&lt;/code&gt; 参数能传入数据，也能传出数据。所以&lt;code&gt;T&amp;amp;&lt;/code&gt;可以作为“出参入参”使用。不过可能导致一些错误：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-bad src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;string&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;s&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #000000;&quot;&gt;s&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;New York&quot;&lt;/span&gt;;  &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// non-obvious error&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;g&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;string&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;buffer&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;.................................&quot;&lt;/span&gt;;
    &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;buffer&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
    cout &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; buffer &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; endl;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;string&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;buffer2&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;.&quot;&lt;/span&gt;;  &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// size is too short&lt;/span&gt;
    &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;buffer2&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
    cout &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; buffer2 &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; endl;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;main&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;g&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt;;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;0&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;pre class=&quot;example&quot;&gt;
New York
New York
&lt;/pre&gt;


&lt;p&gt;
这里，函数&lt;code&gt;g()&lt;/code&gt;提供 &lt;code&gt;buffer&lt;/code&gt; 给 &lt;code&gt;f()&lt;/code&gt; 填充，但是&lt;code&gt;f()&lt;/code&gt;只是简单的把它替换掉。有一个潜在的逻辑层错误，比如&lt;code&gt;g()&lt;/code&gt;函数的程序员可能错误假定 &lt;code&gt;buffer&lt;/code&gt; 的长度。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;强化&lt;/b&gt;
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;（适中）（基础）函数用了非常量引用，却没有往参数写东西。警告。&lt;/li&gt;
&lt;li&gt;（简单）（基础）函数移动了非常量引用。警告。&lt;/li&gt;
&lt;/ul&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines F.16 入参：复制成本低的用值传递；其他用 const 引用</title>
   <link href="http://kimi.im/2022-04-25-cppcoreguidelines-f16"/>
   <updated>2022-04-25T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-f16</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
F.16: For &amp;ldquo;in&amp;rdquo; parameters, pass cheaply-copied types by value and others by reference to &lt;code&gt;const&lt;/code&gt;
&lt;/p&gt;

&lt;p&gt;
&lt;b&gt;理由&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
值拷贝传递参数和 &lt;code&gt;const&lt;/code&gt; 引用传递参数都表明函数不会修改参数，这样，就允许用右值初始化这些参数。
&lt;/p&gt;

&lt;p&gt;
所谓的“复制成本低”，是与机器的体系架构相关的。一般 2 到 3 word 的数据（双精度浮点值，指针，引用）是通过值传递。对于几个 word 的小对象，因为无需间接访问，值传递也比引用传递速度快。
&lt;/p&gt;

&lt;p&gt;
&lt;b&gt;例子&lt;/b&gt;
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;f1&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;string&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;s&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;  &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// OK: pass by reference to const; always cheap&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;f3&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;x&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;            &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// OK: Unbeatable&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
&lt;b&gt;例子&lt;/b&gt;
&lt;/p&gt;
&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-bad src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;f2&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;string&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;s&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;         &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// bad: potentially expensive&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;f4&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;x&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;     &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// bad: overhead on access&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
什么情况需要用右值传递“只读入参”呢？
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;如果函数任何情况下都会移动参数，用右值引用&lt;code&gt;&amp;amp;&amp;amp;&lt;/code&gt;。详见 F.18&lt;/li&gt;
&lt;li&gt;如果函数保留一份参数副本的话，除了可以用&lt;code&gt;const&amp;amp;&lt;/code&gt;进行左值传递；也可以重载函数，接收&lt;code&gt;&amp;amp;&amp;amp;&lt;/code&gt;右值引用，并在函数体内通过&lt;code&gt;std::move&lt;/code&gt;“移动”到目的地。事实上，&lt;code&gt;std::move&lt;/code&gt;并不能移动任何东西，其功能是将一个左值强制转化为右值引用，继而可以通过右值引用使用该值。从实现上讲， &lt;code&gt;std::move&lt;/code&gt;
基本等同于一个类型转换：&lt;code&gt;static_cast&amp;lt;T&amp;amp;&amp;amp;&amp;gt;(lvalue);&lt;/code&gt;详见 F.18&lt;/li&gt;
&lt;li&gt;一些特殊情况，如多个“输入+复制”参数，考虑使用完美转发
&lt;code&gt;std::forward&amp;lt;Args&amp;gt;(args)&lt;/code&gt; 。详见 F.19&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;
&lt;b&gt;例子&lt;/b&gt;
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;multiply&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt;, &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// just input ints, pass by value&lt;/span&gt;

&lt;span style=&quot;color: #3F7F5F;&quot;&gt;// suffix is input-only but not as cheap as an int, pass by const&amp;amp;&lt;/span&gt;
&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;string&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;concatenate&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;string&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt;, &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;string&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;suffix&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;sink&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;unique_ptr&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;widget&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;  &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// input only, and moves ownership of the widget&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
避免深奥的技巧，比如：
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;为了提高执行效率使用&lt;code&gt;T&amp;amp;&amp;amp;&lt;/code&gt;传递参数。大部分关于&lt;code&gt;&amp;amp;&amp;amp;&lt;/code&gt;的性能优势都是错的，不可靠的。（详见 F.18 F.19）&lt;/li&gt;
&lt;li&gt;通过&lt;code&gt;const T&amp;amp;&lt;/code&gt;返回。（详见 F.47）&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;
&lt;b&gt;例子&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
假设 &lt;code&gt;Matrix&lt;/code&gt; 有移动操作（比如把元素保留在&lt;code&gt;std::vector&lt;/code&gt;）：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-C++&quot;&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Matrix&lt;/span&gt; operator&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Matrix&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;a&lt;/span&gt;, &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Matrix&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;b&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Matrix&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;res&lt;/span&gt;;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ... fill res with the sum ...&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; res;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;

&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Matrix&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;x&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; m1 &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;+&lt;/span&gt; m2;  &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// move constructor&lt;/span&gt;

&lt;span style=&quot;color: #000000;&quot;&gt;y&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; m3 &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;+&lt;/span&gt; m3;         &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// move assignment&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;
&lt;b&gt;注意&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
我们可以假定一个引用肯定指向了一个有效的对象，语言层面不存在空引用的情况。如果需要表达一个值可能为空，请使用指针。另外&lt;code&gt;std::optional&lt;/code&gt;也能用来表示“没有数值”的情况。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;强化&lt;/b&gt;
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;（简单）（基础）值的空间大于&lt;code&gt;2 * sizeof(void*)&lt;/code&gt;却通过值传递时，警告。建议使用&lt;code&gt;const&amp;amp;&lt;/code&gt;常量引用。&lt;/li&gt;
&lt;li&gt;（简单）（基础）值的空间小于&lt;code&gt;2 * sizeof(void*)&lt;/code&gt;却通过常量引用传递时，警告。建议使用值传递。&lt;/li&gt;
&lt;li&gt;（简单）（基础）当参数通过常量引用传递，却被移动了，警告。&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;
&lt;b&gt;例外&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
如果要表达共享所有权的情况，可以用&lt;code&gt;shared_ptr&lt;/code&gt;类型。
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines F.15 首选简单、常规的方式传递信息</title>
   <link href="http://kimi.im/2022-04-24-cppcoreguidelines-f15"/>
   <updated>2022-04-24T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-f15</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
F.15: Prefer simple and conventional ways of passing information
&lt;/p&gt;

&lt;p&gt;
&lt;b&gt;理由&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
“不同寻常的奇技淫巧”会让其他程序员感到吃惊、难以理解、并且代码容易出
bug。如果确实觉得优化代码的时候需要不走寻常路，那么，请对其进行测试，看看是否能提升性能，并且要用文档和注释解释说明原因。
&lt;/p&gt;

&lt;p&gt;
以下表格总结了F.16-21的建议。
&lt;/p&gt;


&lt;p&gt;
常规传参方式：
&lt;/p&gt;

&lt;table border=&quot;2&quot; cellspacing=&quot;0&quot; cellpadding=&quot;6&quot; rules=&quot;groups&quot; frame=&quot;hsides&quot;&gt;


&lt;colgroup&gt;
&lt;col  class=&quot;org-left&quot; /&gt;

&lt;col  class=&quot;org-left&quot; /&gt;

&lt;col  class=&quot;org-left&quot; /&gt;

&lt;col  class=&quot;org-left&quot; /&gt;
&lt;/colgroup&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th scope=&quot;col&quot; class=&quot;org-left&quot;&gt;&amp;#xa0;&lt;/th&gt;
&lt;th scope=&quot;col&quot; class=&quot;org-left&quot;&gt;复制成本低[1]&lt;/th&gt;
&lt;th scope=&quot;col&quot; class=&quot;org-left&quot;&gt;移动成本低/适中[2]&lt;/th&gt;
&lt;th scope=&quot;col&quot; class=&quot;org-left&quot;&gt;移动成本高[3]&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class=&quot;org-left&quot;&gt;出参&lt;/td&gt;
&lt;td class=&quot;org-left&quot;&gt;&lt;code&gt;X f()&lt;/code&gt;&lt;/td&gt;
&lt;td class=&quot;org-left&quot;&gt;&lt;code&gt;X f()&lt;/code&gt;&lt;/td&gt;
&lt;td class=&quot;org-left&quot;&gt;&lt;code&gt;f(X&amp;amp;)&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td class=&quot;org-left&quot;&gt;出参/入参&lt;/td&gt;
&lt;td class=&quot;org-left&quot;&gt;&lt;code&gt;f(X&amp;amp;)&lt;/code&gt;&lt;/td&gt;
&lt;td class=&quot;org-left&quot;&gt;&lt;code&gt;f(X&amp;amp;)&lt;/code&gt;&lt;/td&gt;
&lt;td class=&quot;org-left&quot;&gt;&lt;code&gt;f(X&amp;amp;)&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td class=&quot;org-left&quot;&gt;入参&lt;/td&gt;
&lt;td class=&quot;org-left&quot;&gt;&lt;code&gt;f(X)&lt;/code&gt;&lt;/td&gt;
&lt;td class=&quot;org-left&quot;&gt;&lt;code&gt;f(const X&amp;amp;)&lt;/code&gt;&lt;/td&gt;
&lt;td class=&quot;org-left&quot;&gt;&lt;code&gt;f(const X&amp;amp;)&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td class=&quot;org-left&quot;&gt;入参，保留副本&lt;/td&gt;
&lt;td class=&quot;org-left&quot;&gt;&lt;code&gt;f(X)&lt;/code&gt;&lt;/td&gt;
&lt;td class=&quot;org-left&quot;&gt;&lt;code&gt;f(const X&amp;amp;)&lt;/code&gt;&lt;/td&gt;
&lt;td class=&quot;org-left&quot;&gt;&lt;code&gt;f(const X&amp;amp;)&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;


&lt;p&gt;
高级传参方式：
&lt;/p&gt;

&lt;table border=&quot;2&quot; cellspacing=&quot;0&quot; cellpadding=&quot;6&quot; rules=&quot;groups&quot; frame=&quot;hsides&quot;&gt;


&lt;colgroup&gt;
&lt;col  class=&quot;org-left&quot; /&gt;

&lt;col  class=&quot;org-left&quot; /&gt;

&lt;col  class=&quot;org-left&quot; /&gt;

&lt;col  class=&quot;org-left&quot; /&gt;
&lt;/colgroup&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th scope=&quot;col&quot; class=&quot;org-left&quot;&gt;&amp;#xa0;&lt;/th&gt;
&lt;th scope=&quot;col&quot; class=&quot;org-left&quot;&gt;复制成本低[1]&lt;/th&gt;
&lt;th scope=&quot;col&quot; class=&quot;org-left&quot;&gt;移动成本低/适中[2]&lt;/th&gt;
&lt;th scope=&quot;col&quot; class=&quot;org-left&quot;&gt;移动成本高[3]&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class=&quot;org-left&quot;&gt;出参&lt;/td&gt;
&lt;td class=&quot;org-left&quot;&gt;&lt;code&gt;X f()&lt;/code&gt;&lt;/td&gt;
&lt;td class=&quot;org-left&quot;&gt;&lt;code&gt;X f()&lt;/code&gt;&lt;/td&gt;
&lt;td class=&quot;org-left&quot;&gt;&lt;code&gt;f(X&amp;amp;)&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td class=&quot;org-left&quot;&gt;出参/入参&lt;/td&gt;
&lt;td class=&quot;org-left&quot;&gt;&lt;code&gt;f(X&amp;amp;)&lt;/code&gt;&lt;/td&gt;
&lt;td class=&quot;org-left&quot;&gt;&lt;code&gt;f(X&amp;amp;)&lt;/code&gt;&lt;/td&gt;
&lt;td class=&quot;org-left&quot;&gt;&lt;code&gt;f(X&amp;amp;)&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td class=&quot;org-left&quot;&gt;入参&lt;/td&gt;
&lt;td class=&quot;org-left&quot;&gt;&lt;code&gt;f(X)&lt;/code&gt;&lt;/td&gt;
&lt;td class=&quot;org-left&quot;&gt;&lt;code&gt;f(const X&amp;amp;)&lt;/code&gt;&lt;/td&gt;
&lt;td class=&quot;org-left&quot;&gt;&lt;code&gt;f(const X&amp;amp;)&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td class=&quot;org-left&quot;&gt;入参，保留副本&lt;/td&gt;
&lt;td class=&quot;org-left&quot;&gt;&lt;code&gt;f(X)&lt;/code&gt;&lt;/td&gt;
&lt;td class=&quot;org-left&quot;&gt;&lt;code&gt;f(const X&amp;amp;)&lt;/code&gt; + &lt;code&gt;f(X&amp;amp;&amp;amp;)&lt;/code&gt; &amp;amp; move&lt;/td&gt;
&lt;td class=&quot;org-left&quot;&gt;&lt;code&gt;f(const X&amp;amp;)&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td class=&quot;org-left&quot;&gt;入参，移入&lt;/td&gt;
&lt;td class=&quot;org-left&quot;&gt;&lt;code&gt;f(X&amp;amp;&amp;amp;)&lt;/code&gt;&lt;/td&gt;
&lt;td class=&quot;org-left&quot;&gt;&lt;code&gt;f(X&amp;amp;&amp;amp;)&lt;/code&gt;&lt;/td&gt;
&lt;td class=&quot;org-left&quot;&gt;&lt;code&gt;f(X&amp;amp;&amp;amp;)&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;


&lt;p&gt;
其中：
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;[1]
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;复制成本低&lt;/li&gt;
&lt;li&gt;无法复制（如&lt;code&gt;int&lt;/code&gt;, &lt;code&gt;unique_ptr&lt;/code&gt;）&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;[2]
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;移动成本低（如&lt;code&gt;vector&amp;lt;T&amp;gt;&lt;/code&gt;, &lt;code&gt;string&lt;/code&gt;）&lt;/li&gt;
&lt;li&gt;移动成本适中（如&lt;code&gt;array&amp;lt;vector&amp;gt;&lt;/code&gt;, &lt;code&gt;BigPOD&lt;/code&gt;）&lt;/li&gt;
&lt;li&gt;未知（如：未知类型，模板）&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;[3]
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;移动成本高（如&lt;code&gt;BigPOD[]&lt;/code&gt;, &lt;code&gt;array&amp;lt;BigPOD&amp;gt;&lt;/code&gt;）&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
只有证明是必需的时候，才使用高级技巧，并添加文档或代码注释。
&lt;/p&gt;

&lt;p&gt;
【注】&lt;code&gt;&amp;amp;&amp;amp;&lt;/code&gt;是 C++11 标准定义的新的引用操作符：右值引用 (rvalue
reference)。&lt;code&gt;int&amp;amp;&amp;amp; a&lt;/code&gt;表示 &lt;code&gt;a&lt;/code&gt; 是一个右值（ r-value ）引用。一般用于声明函数的参数。简单来说：右值没有内存地址，如数字 6 或字符&amp;rsquo;v&amp;rsquo;。 &lt;code&gt;int a&lt;/code&gt;， &lt;code&gt;a&lt;/code&gt;
是一个左值（ l-value ）。不过&lt;code&gt;a+2&lt;/code&gt;是一个右值。
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines F.11 如果只是需要一个简单的函数，可以用未命名的 lambda</title>
   <link href="http://kimi.im/2022-04-23-cppcoreguidelines-f11"/>
   <updated>2022-04-23T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-f11</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
F.11: Use an unnamed lambda if you need a simple function object in one place only
&lt;/p&gt;

&lt;p&gt;
&lt;b&gt;理由&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
使得代码更简洁，更好的局部性。
&lt;/p&gt;

&lt;p&gt;
&lt;b&gt;例子&lt;/b&gt;
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-C++&quot;&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;auto&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;earlyUsersEnd&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;std&lt;/span&gt;::&lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;remove_if&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;users.&lt;span style=&quot;color: #3a5fcd; font-weight: bold; font-style: italic;&quot;&gt;begin&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt;, users.&lt;span style=&quot;color: #3a5fcd; font-weight: bold; font-style: italic;&quot;&gt;end&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt;,
                                    &lt;span style=&quot;color: #7388d6;&quot;&gt;[](&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;User&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;a&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; a.&lt;span style=&quot;color: #110099; font-style: italic;&quot;&gt;id&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;100&lt;/span&gt;; &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;
&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;
&lt;b&gt;例外&lt;/b&gt;
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;给 &lt;code&gt;lambda&lt;/code&gt; 命名可以使代码显得更清晰，哪怕只用到一次&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;
&lt;b&gt;强化&lt;/b&gt;
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;找到完全一样的 &lt;code&gt;lambda&lt;/code&gt; ，可以考虑换成函数或命名的 &lt;code&gt;lambda&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines F.10 如果是一个可复用的操作，给它设置个名字</title>
   <link href="http://kimi.im/2022-04-23-cppcoreguidelines-f10"/>
   <updated>2022-04-23T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-f10</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
F.10: If an operation can be reused, give it a name
&lt;/p&gt;

&lt;p&gt;
&lt;b&gt;理由&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
代码自文档，可读性好，可复用。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;例子&lt;/b&gt;
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;struct&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Rec&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;string&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;name&lt;/span&gt;;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;string&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;addr&lt;/span&gt;;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;id&lt;/span&gt;;         &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// unique identifier&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;bool&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;same&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Rec&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;a&lt;/span&gt;, &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Rec&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;b&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; a.&lt;span style=&quot;color: #110099; font-style: italic;&quot;&gt;id&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;==&lt;/span&gt; b.&lt;span style=&quot;color: #110099; font-style: italic;&quot;&gt;id&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;

&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;vector&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Rec&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;find_id&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;string&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;name&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// find all records for &quot;name&quot;&lt;/span&gt;

&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;auto&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;x&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;find_if&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;vr.&lt;span style=&quot;color: #3a5fcd; font-weight: bold; font-style: italic;&quot;&gt;begin&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt;, vr.&lt;span style=&quot;color: #3a5fcd; font-weight: bold; font-style: italic;&quot;&gt;end&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt;,
    &lt;span style=&quot;color: #7388d6;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;](&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Rec&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;r&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;
        &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;r.&lt;span style=&quot;color: #110099; font-style: italic;&quot;&gt;name&lt;/span&gt;.&lt;span style=&quot;color: #3a5fcd; font-weight: bold; font-style: italic;&quot;&gt;size&lt;/span&gt;&lt;span style=&quot;color: #709870;&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;!=&lt;/span&gt; n.&lt;span style=&quot;color: #3a5fcd; font-weight: bold; font-style: italic;&quot;&gt;size&lt;/span&gt;&lt;span style=&quot;color: #709870;&quot;&gt;()&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;false&lt;/span&gt;; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// name to compare to is in n&lt;/span&gt;
        &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;for&lt;/span&gt; &lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;i&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;0&lt;/span&gt;; i &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt; r.&lt;span style=&quot;color: #110099; font-style: italic;&quot;&gt;name&lt;/span&gt;.&lt;span style=&quot;color: #3a5fcd; font-weight: bold; font-style: italic;&quot;&gt;size&lt;/span&gt;&lt;span style=&quot;color: #709870;&quot;&gt;()&lt;/span&gt;; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;++&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;i&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt;
            &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;tolower&lt;/span&gt;&lt;span style=&quot;color: #709870;&quot;&gt;(&lt;/span&gt;r.&lt;span style=&quot;color: #110099; font-style: italic;&quot;&gt;name&lt;/span&gt;&lt;span style=&quot;color: #907373;&quot;&gt;[&lt;/span&gt;i&lt;span style=&quot;color: #907373;&quot;&gt;]&lt;/span&gt;&lt;span style=&quot;color: #709870;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;!=&lt;/span&gt; &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;tolower&lt;/span&gt;&lt;span style=&quot;color: #709870;&quot;&gt;(&lt;/span&gt;n&lt;span style=&quot;color: #907373;&quot;&gt;[&lt;/span&gt;i&lt;span style=&quot;color: #907373;&quot;&gt;]&lt;/span&gt;&lt;span style=&quot;color: #709870;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;false&lt;/span&gt;;
        &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;true&lt;/span&gt;;
    &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
这里隐藏这一个有用的函数（大小写敏感的字符串比较函数）。一般 &lt;code&gt;lambda&lt;/code&gt; 比较长的地方，都可能隐藏这一个可复用的函数。
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;bool&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;compare_insensitive&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;string&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;a&lt;/span&gt;, &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;string&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;b&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;a.&lt;span style=&quot;color: #3a5fcd; font-weight: bold; font-style: italic;&quot;&gt;size&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;!=&lt;/span&gt; b.&lt;span style=&quot;color: #3a5fcd; font-weight: bold; font-style: italic;&quot;&gt;size&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;()&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;false&lt;/span&gt;;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;for&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;i&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;0&lt;/span&gt;; i &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt; a.&lt;span style=&quot;color: #3a5fcd; font-weight: bold; font-style: italic;&quot;&gt;size&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;()&lt;/span&gt;; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;++&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;i&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;tolower&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;a&lt;span style=&quot;color: #709870;&quot;&gt;[&lt;/span&gt;i&lt;span style=&quot;color: #709870;&quot;&gt;]&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;!=&lt;/span&gt; &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;tolower&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;b&lt;span style=&quot;color: #709870;&quot;&gt;[&lt;/span&gt;i&lt;span style=&quot;color: #709870;&quot;&gt;]&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;false&lt;/span&gt;;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;true&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;

&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;auto&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;x&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;find_if&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;vr.&lt;span style=&quot;color: #3a5fcd; font-weight: bold; font-style: italic;&quot;&gt;begin&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt;, vr.&lt;span style=&quot;color: #3a5fcd; font-weight: bold; font-style: italic;&quot;&gt;end&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt;,
    &lt;span style=&quot;color: #7388d6;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;](&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Rec&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;r&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;compare_insensitive&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;r.&lt;span style=&quot;color: #110099; font-style: italic;&quot;&gt;name&lt;/span&gt;, n&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt;; &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
或者，你可能不想显式得绑定 &lt;code&gt;n&lt;/code&gt;
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-C++&quot;&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;auto&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;cmp_to_n&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt;n&lt;span style=&quot;color: #707183;&quot;&gt;](&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;string&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;a&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;compare_insensitive&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;a, n&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;; &lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;

&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;auto&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;x&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;find_if&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;vr.&lt;span style=&quot;color: #3a5fcd; font-weight: bold; font-style: italic;&quot;&gt;begin&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt;, vr.&lt;span style=&quot;color: #3a5fcd; font-weight: bold; font-style: italic;&quot;&gt;end&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt;,
    &lt;span style=&quot;color: #7388d6;&quot;&gt;[](&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Rec&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;r&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;cmp_to_n&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;r.&lt;span style=&quot;color: #110099; font-style: italic;&quot;&gt;name&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt;; &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;
&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;
&lt;b&gt;例外&lt;/b&gt;
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;只是局部使用的 &lt;code&gt;lambda&lt;/code&gt; 如 &lt;code&gt;for_each&lt;/code&gt; 的参数，或分支控制算法等。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;lambda&lt;/code&gt; 作为初始化函数&lt;/li&gt;
&lt;/ul&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines F.9 不用给没有用到的参数命名</title>
   <link href="http://kimi.im/2022-04-22-cppcoreguidelines-f9"/>
   <updated>2022-04-22T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-f9</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
F.9: Unused parameters should be unnamed
&lt;/p&gt;

&lt;p&gt;
&lt;b&gt;理由&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
更好的可读性。免除“参数未被使用”的警告。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;例子&lt;/b&gt;
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-C++&quot;&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;// once upon a time, a hint was used&lt;/span&gt;
&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;X&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;*&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;find&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;map&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Blob&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;m&lt;/span&gt;, &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;string&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;s&lt;/span&gt;, &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Hint&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;
&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;
&lt;b&gt;例子&lt;/b&gt;
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;print_params&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;i&lt;/span&gt;, &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;string&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;s&lt;/span&gt;, &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;double&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    cout &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; i &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot; &quot;&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; s &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; endl;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;main&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;print_params&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;10&lt;/span&gt;, &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;hello&quot;&lt;/span&gt;, &lt;span style=&quot;color: #110099;&quot;&gt;1.1&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;0&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;pre class=&quot;example&quot;&gt;
10 hello
&lt;/pre&gt;


&lt;p&gt;
&lt;b&gt;注意&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
允许不命名没使用的参数是在 1980 年代早期引入标准的。为的是解决接口兼容性问题。
&lt;/p&gt;

&lt;p&gt;
但是，如果函数在某些条件下才会用到某个参数的话，可以把这个参数声明成
&lt;code&gt;[[maybe_unused]]&lt;/code&gt; 属性。
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;template&lt;/span&gt; &lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;typename&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Value&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Value&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;*&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;find&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;set&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Value&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;s&lt;/span&gt;, &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Value&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;v&lt;/span&gt;, &lt;span style=&quot;color: #7388d6;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;[&lt;/span&gt;maybe_unused&lt;span style=&quot;color: #909183;&quot;&gt;]&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;]&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Hint&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;h&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;constexpr&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;sizeof&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;Value&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt; CacheSize&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;
    &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;
        &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// a hint is used only if Value is of a certain size&lt;/span&gt;
    &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;
&lt;b&gt;强化&lt;/b&gt;
&lt;/p&gt;

&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;标记出有名称但是没有用到的参数&lt;/li&gt;
&lt;/ul&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines F.8 首选纯函数</title>
   <link href="http://kimi.im/2022-04-19-cppcoreguidelines-f8"/>
   <updated>2022-04-19T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-f8</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
F.8: Prefer pure functions
&lt;/p&gt;

&lt;p&gt;
&lt;b&gt;理由&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
纯函数更容易推导，更容易优化（甚至并行处理），更容易做成记忆函数（ memoize ）。
&lt;/p&gt;

&lt;p&gt;
所谓的纯函数（pure function）即在任何时候，只要输入一样的参数，它就会返回一样的结果。不会产生任何副作用，副作用包括修改输入的参数原来的变量、调用 IO 输入输出流，即改变 IO 输出值。
&lt;/p&gt;

&lt;p&gt;
&lt;b&gt;例子&lt;/b&gt;
&lt;/p&gt;


&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;template&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;auto&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;square&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;t&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; t &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;*&lt;/span&gt; t; &lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;main&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    cout &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;square&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;10&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; endl;
    cout &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;square&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;10.1&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; endl;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;0&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;pre class=&quot;example&quot;&gt;
100
102.01
&lt;/pre&gt;


&lt;p&gt;
再看看以下例子，我们把一个纯函数做成 memoize 之后，可以极大的提升计算速度：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-C++&quot;&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;// -*- compile-command: &quot;g++ -std=c++20 code.cpp &amp;amp;&amp;amp; ./a&quot;; -*-&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;#include&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&amp;lt;iostream&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;#include&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&amp;lt;chrono&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;#include&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&amp;lt;map&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;#include&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&amp;lt;gsl/gsl&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;using&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;namespace&lt;/span&gt; std;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;using&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;namespace&lt;/span&gt; gsl;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;using&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;namespace&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;std&lt;/span&gt;::chrono;
&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;std&lt;/span&gt;::&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;function&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;unsigned&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;unsigned&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;fib&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;[](&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;unsigned&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;n&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;if&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;n&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;=&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;
        &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; n;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;fib&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;n&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;fib&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;n&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;2&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;template&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;typename&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;InType&lt;/span&gt;, &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;typename&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;OutType&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;std&lt;/span&gt;::&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;function&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;OutType&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;InType&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;memoize&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;std&lt;/span&gt;::&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;function&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;OutType&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;InType&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;foo&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;[&lt;/span&gt;foo&lt;span style=&quot;color: #7388d6;&quot;&gt;](&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;InType&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;n&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;){&lt;/span&gt;
        &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;static&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;map&lt;/span&gt;&lt;span style=&quot;color: #909183; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;InType&lt;/span&gt;, &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;OutType&lt;/span&gt;&lt;span style=&quot;color: #909183; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;memo&lt;/span&gt;;

        &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;OutType&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;ret&lt;/span&gt;;
        &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;if&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;memo.&lt;span style=&quot;color: #3a5fcd; font-weight: bold; font-style: italic;&quot;&gt;count&lt;/span&gt;&lt;span style=&quot;color: #709870;&quot;&gt;(&lt;/span&gt;n&lt;span style=&quot;color: #709870;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #909183;&quot;&gt;{&lt;/span&gt;
            &lt;span style=&quot;color: #000000;&quot;&gt;ret&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt;memo&lt;span style=&quot;color: #709870;&quot;&gt;[&lt;/span&gt;n&lt;span style=&quot;color: #709870;&quot;&gt;]&lt;/span&gt;;
            &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; ret;
        &lt;span style=&quot;color: #909183;&quot;&gt;}&lt;/span&gt;
        &lt;span style=&quot;color: #000000;&quot;&gt;ret&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;foo&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;n&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt;;
        &lt;span style=&quot;color: #000000;&quot;&gt;memo&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;[&lt;/span&gt;n&lt;span style=&quot;color: #909183;&quot;&gt;]&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt;ret;
        &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; ret;
    &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;

&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;auto&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;fib1&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;memoize&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;fib&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;calc_time&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;unsigned&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;n&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;steady_clock&lt;/span&gt;::&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;time_point&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;begin&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;steady_clock&lt;/span&gt;::&lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;now&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt;;
    &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;fib1&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;n&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;steady_clock&lt;/span&gt;::&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;time_point&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;end&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;steady_clock&lt;/span&gt;::&lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;now&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt;;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;std&lt;/span&gt;::cout &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;Time difference = &quot;&lt;/span&gt;
              &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;duration_cast&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;nanoseconds&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;end &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;-&lt;/span&gt; begin&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;.&lt;span style=&quot;color: #3a5fcd; font-weight: bold; font-style: italic;&quot;&gt;count&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt;
              &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;[ns]&quot;&lt;/span&gt;
              &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;std&lt;/span&gt;::endl;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;main&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;calc_time&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;20&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
    &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;calc_time&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;20&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;pre class=&quot;example&quot;&gt;
Time difference = 562700[ns]
Time difference = 200[ns]
&lt;/pre&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines F.7 一般情况使用 T* 或 T&，不要使用智能指针</title>
   <link href="http://kimi.im/2022-04-10-cppcoreguidelines-f7"/>
   <updated>2022-04-10T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-f7</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
F.7: For general use, take &lt;code&gt;T*&lt;/code&gt; or &lt;code&gt;T&amp;amp;&lt;/code&gt; arguments rather than smart pointers
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;理由&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
智能指针可以传递所有权或共享所有权。只有在需要所有权机制的时候才使用智能指针。不需要操作生存周期的函数，应该只接受原始指针&lt;code&gt;T*&lt;/code&gt;或引用&lt;code&gt;T&amp;amp;&lt;/code&gt;。
&lt;/p&gt;

&lt;p&gt;
函数的参数如果是智能指针的话，就要求调用它的地方也使用智能指针。函数应该能以各种方式接受对象，而不能依靠智能指针，因为智能指针需要相应的生存周期管理。
&lt;/p&gt;

&lt;p&gt;
使用共享指针做参数，会产生潜在的运行时成本。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;例子&lt;/b&gt;
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-C++&quot;&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;// accepts any int*&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;

&lt;span style=&quot;color: #3F7F5F;&quot;&gt;// can only accept ints for which you want to transfer ownership&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;g&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;unique_ptr&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;

&lt;span style=&quot;color: #3F7F5F;&quot;&gt;// can only accept ints for which you are willing to share ownership&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;g&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;shared_ptr&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;

&lt;span style=&quot;color: #3F7F5F;&quot;&gt;// doesn&apos;t change ownership, but requires a particular ownership of the caller&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;h&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;unique_ptr&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;

&lt;span style=&quot;color: #3F7F5F;&quot;&gt;// accepts any int&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;h&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
坏例子：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-bad src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;#include&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&amp;lt;memory&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: #3F7F5F;&quot;&gt;// callee&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;shared_ptr&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;w&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ...&lt;/span&gt;
    cout &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;*&lt;/span&gt;w &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; endl; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// only use of w -- the lifetime is not used at all&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ...&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;

&lt;span style=&quot;color: #3F7F5F;&quot;&gt;// caller&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;main&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;shared_ptr&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;my_widget&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;make_shared&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;111&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
    &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;my_widget&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;

    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;//int* stack_widget =  new int(111);;&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;//f(stack_widget);&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// error: invalid initialization of reference of type&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &apos;std::shared_ptr&amp;lt;int&amp;gt;&amp;amp;&apos; from expression of type &apos;int*&apos;&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;//26 |     f(stack_widget);&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;//   |       ^~~~~~~~~~~~&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// note: in passing argument 1 of &apos;void f(std::shared_ptr&amp;lt;int&amp;gt;&amp;amp;)&apos;&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// 12 | void f(shared_ptr&amp;lt;int&amp;gt;&amp;amp; w)&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;//    |        ~~~~~~~~~~~~~~~~~^&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;0&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;pre class=&quot;example&quot;&gt;
111
&lt;/pre&gt;


&lt;p&gt;
好例子：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;#include&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&amp;lt;memory&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: #3F7F5F;&quot;&gt;// callee&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;w&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ...&lt;/span&gt;
    cout &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; w &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; endl;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ...&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;

&lt;span style=&quot;color: #3F7F5F;&quot;&gt;// caller&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;main&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;shared_ptr&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;my_widget&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;make_shared&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;111&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
    &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;*&lt;/span&gt;my_widget&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;

    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;stack_widget&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;222&lt;/span&gt;;
    &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;stack_widget&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ok -- now this works&lt;/span&gt;

    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;0&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;pre class=&quot;example&quot;&gt;
111
222
&lt;/pre&gt;



&lt;p&gt;
&lt;b&gt;注意&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
大部分的悬空指针（dangling pointer）问题都能通过静态代码分析检测到。函数参数的生存期持续到函数调用结束，所以没有太多指针生存期问题。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;强化&lt;/b&gt;
&lt;/p&gt;

&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;（简单）如果一个函数接受智能指针类型，但是这个函数只调用 &lt;code&gt;operator*&lt;/code&gt;
，&lt;code&gt;operator-&amp;gt;&lt;/code&gt;以及&lt;code&gt;get()&lt;/code&gt;。建议使用&lt;code&gt;T*&lt;/code&gt;或 &lt;code&gt;T&amp;amp;&lt;/code&gt; 。&lt;/li&gt;
&lt;li&gt;如果一个参数是可复制、可移动的智能指针类型，但是在函数体或进一步的调用中没有被复制或移动，那么，就不需要所有权机制。建议使用&lt;code&gt;T*&lt;/code&gt;或 &lt;code&gt;T&amp;amp;&lt;/code&gt; 。&lt;/li&gt;
&lt;/ul&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines F.6 如果函数不能抛出异常，声明为 noexcept</title>
   <link href="http://kimi.im/2022-04-09-cppcoreguidelines-f6"/>
   <updated>2022-04-09T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-f6</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
F.6: If your function must not throw, declare it &lt;code&gt;noexcept&lt;/code&gt;
&lt;/p&gt;

&lt;p&gt;
&lt;b&gt;理由&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
如果代码中不打算抛出异常，程序里也不打算处理异常，可以直接终止这个程序。声明一个函数为 &lt;code&gt;noexcept&lt;/code&gt; 可以让编译器优化生成的二进制、并且可以减少执行路径，加快错误时的退出速度。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;例子&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
把不支持异常的 C 或其他语言实现的函数标注为 &lt;code&gt;noexcept&lt;/code&gt; 。C++ 标准库默认所有 C 标准库函数为 &lt;code&gt;noexcept&lt;/code&gt; 。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;注意&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
&lt;code&gt;constexpr&lt;/code&gt; 函数在运行时计算可能会抛出异常，所以某些情况可以 &lt;code&gt;noexcept&lt;/code&gt; 。根据条件判断是否抛出异常。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;例子&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
我们甚至可以在可能抛出异常的函数上添加 &lt;code&gt;noexcept&lt;/code&gt; 标签。
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-C++&quot;&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;vector&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;string&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;collect&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;istream&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;is&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;noexcept&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;vector&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;string&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;res&lt;/span&gt;;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;for&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;string&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;s&lt;/span&gt;; is &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;gt;&amp;gt;&lt;/span&gt; s;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;
        res.&lt;span style=&quot;color: #3a5fcd; font-weight: bold; font-style: italic;&quot;&gt;push_back&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;s&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; res;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
&lt;code&gt;collect&lt;/code&gt; 运行时如果内存不足，程序直接退出。除非程序设计好能处理内存耗尽的情况。终止函数&lt;code&gt;terminate()&lt;/code&gt;可能会产生一个错误日志信息。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;例子&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
我们首先定义一个函数，抛出一个异常：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-C++&quot; id=&quot;org11a33f3&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;throw_err&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;throw&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;1&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
然后，定义个没有标记 &lt;code&gt;noexcept&lt;/code&gt; 的函数调用 &lt;code&gt;throw_err&lt;/code&gt; :
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;throw_err&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;throw&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;1&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;no_block_throw&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;throw_err&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;main&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;try&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;
        &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;no_block_throw&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;()&lt;/span&gt;;
    &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;catch&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;i&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;
        cout &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; i &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; endl;
    &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;0&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
异常成功捕捉：
&lt;/p&gt;

&lt;pre class=&quot;example&quot;&gt;
1
&lt;/pre&gt;


&lt;p&gt;
在定义一个有 &lt;code&gt;noexcept&lt;/code&gt; 的函数：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;throw_err&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;throw&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;1&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;block_throw&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;noexcept&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;throw_err&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;main&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;try&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;
        &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;block_throw&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;()&lt;/span&gt;;
    &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;catch&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;i&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;
        cout &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; i &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; endl;
    &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;0&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
程序直接终止：
&lt;/p&gt;

&lt;pre class=&quot;example&quot;&gt;
terminate called after throwing an instance of &apos;int&apos;
&lt;/pre&gt;



&lt;p&gt;
&lt;b&gt;注意&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
在决定是否用 &lt;code&gt;noexcept&lt;/code&gt; 前，要评估程序的执行环境，是否有异常抛出和内存分配的问题。某些执行环境能处理分配异常&lt;code&gt;bad_alloc&lt;/code&gt;等，标准库可以抛出异常。但是很多执行环境，无法正常处理异常，最直接最简单的办法就是终止程序。如果代码无法处理内存分配错误，最好的办法就是给可能导致内存分配错误的函数添加 &lt;code&gt;noexcept&lt;/code&gt; 。
&lt;/p&gt;

&lt;p&gt;
换句话说，如果能处理好异常的情况的话，就不要加 &lt;code&gt;noexcept&lt;/code&gt; 。
&lt;/p&gt;

&lt;p&gt;
&lt;code&gt;noexcept&lt;/code&gt; 主要用于底层函数。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;注意&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
析构函数、数据交换函数、转移操作还有默认析构函数不可抛出异常。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;加强&lt;/b&gt;
&lt;/p&gt;

&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;标注不能抛出异常，但是没有声明 &lt;code&gt;noexcept&lt;/code&gt; 的函数&lt;/li&gt;
&lt;li&gt;标注不该抛出异常却抛出异常的交换、转移、析构函数、默认析构函数&lt;/li&gt;
&lt;/ul&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines F.5 把时延敏感的小函数声明为 inline</title>
   <link href="http://kimi.im/2022-04-08-cppcoreguidelines-f5"/>
   <updated>2022-04-08T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-f5</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
F.5: If a function is very small and time-critical, declare it &lt;code&gt;inline&lt;/code&gt;
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;理由&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
不能依靠编译器去优化内联函数。40 年前我们承诺编译器比人类优化的更好。但是直到现在，我们还在等待更好的优化机制。手动地把类内部的成员函数标注成 &lt;code&gt;inline&lt;/code&gt; 可以让编译器优化的更好。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;例子&lt;/b&gt;
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;inline&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;string&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;cat&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;string&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;s&lt;/span&gt;, &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;string&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;s2&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; s &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;+&lt;/span&gt; s2; &lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;
&lt;b&gt;例外&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
不要把内联函数放在还没稳定的接口。内联函数是 ABI 的一部分。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;注意&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
&lt;code&gt;constexpr&lt;/code&gt; 默认是 &lt;code&gt;inline&lt;/code&gt;
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;注意&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
类的定义声明中的成员函数默认为 &lt;code&gt;inline&lt;/code&gt; 内联的。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;例外&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
函数模板（包括类模板的成员函数&lt;code&gt;A&amp;lt;T&amp;gt;::function()&lt;/code&gt;以及成员函数模板&lt;code&gt;A::function&amp;lt;T&amp;gt;()&lt;/code&gt;一般定义在头文件中，所以是 &lt;code&gt;inline&lt;/code&gt; 函数。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;强化&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
超过 3 个语句的函数，如果声明为 &lt;code&gt;inline&lt;/code&gt; 的需要注意下。可能还是不要声明为 &lt;code&gt;inline&lt;/code&gt; 比较好。
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines F.4 如果函数可以在编译期计算出结果，可以声明为 constexpr</title>
   <link href="http://kimi.im/2022-04-07-cppcoreguidelines-f4"/>
   <updated>2022-04-07T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-f4</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
F.4: If a function might have to be evaluated at compile time, declare
it &lt;code&gt;constexpr&lt;/code&gt;
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;理由&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
通过 &lt;code&gt;constexpr&lt;/code&gt; 让编译器在编译期进行计算。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;例子&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
著名（臭名昭著？）的阶乘计算：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-bad src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;constexpr&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;fac&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;n&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// constexpr enables max_exp to be used in Expects&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;constexpr&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;max_exp&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;17&lt;/span&gt;;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// prevent silliness and overflow&lt;/span&gt;
    &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;Expects&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;0&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;=&lt;/span&gt; n &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; n &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt; max_exp&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;x&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;1&lt;/span&gt;;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;for&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;i&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;2&lt;/span&gt;; i &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;=&lt;/span&gt; n; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;++&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;i&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;
        &lt;span style=&quot;color: #000000;&quot;&gt;x&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;*=&lt;/span&gt; i;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; x;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;main&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    cout &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;fac&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;10&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;0&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;pre class=&quot;example&quot;&gt;
3628800
&lt;/pre&gt;


&lt;p&gt;
C++14 可以这么玩。C++11 可以用递归方式计算。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;注意&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
&lt;code&gt;constexpr&lt;/code&gt; 不保证编译时能计算出来。它只是保证，在程序员要求的时候，或在编译器进行优化的时候，常量表达式参数可以在编译时计算。
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;constexpr&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;min&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;x&lt;/span&gt;, &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;y&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; x &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt; y &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;?&lt;/span&gt; x &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;:&lt;/span&gt; y; &lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;test&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;v&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;m1&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;min&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;-1&lt;/span&gt;, &lt;span style=&quot;color: #110099;&quot;&gt;2&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;            &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// probably compile-time evaluation&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;constexpr&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;m2&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;min&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;-1&lt;/span&gt;, &lt;span style=&quot;color: #110099;&quot;&gt;2&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;  &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// compile-time evaluation&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;m3&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;min&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;-1&lt;/span&gt;, v&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;            &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// run-time evaluation&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;constexpr&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;m4&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;min&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;-1&lt;/span&gt;, v&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;  &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// error: cannot evaluate at compile time&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;main&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;test&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;10&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;0&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
编译出错：
&lt;/p&gt;

&lt;pre class=&quot;example&quot;&gt;
&apos;v&apos; is not a constant expression
 17 |     constexpr int m4 = min(-1, v);
    |                                 ^
&lt;/pre&gt;



&lt;p&gt;
&lt;b&gt;注意&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
不要把所有函数的声明为 &lt;code&gt;constexpr&lt;/code&gt; 。很多计算适合在运行时进行。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;注意&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
如果是需要在更高一层级运行时进行配置计算或业务逻辑运算的 API，不能是
&lt;code&gt;constexpr&lt;/code&gt; 的。因为编译器无法优化。任何依靠这些 API 的 &lt;code&gt;constexpr&lt;/code&gt; 函数最终都要重构，或去掉 &lt;code&gt;constexpr&lt;/code&gt; 。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;强化&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
编译器调用到声明为 &lt;code&gt;constexpr&lt;/code&gt; 的函数时，如果函数中使用了可变变量，就会报错。
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>单词本：irate</title>
   <link href="http://kimi.im/2022-04-07-english-irate"/>
   <updated>2022-04-07T00:00:00+00:00</updated>
   <id>http://kimi.im/english-irate</id>
   <content type="html">&lt;p&gt;
昨天看了下预算成本分析技术，看到这句话：
&lt;/p&gt;

&lt;p&gt;
Considering factors in addition to operating income, they should check
if they can step up their manufacturing efforts enough to support the
added sales. If they can&amp;rsquo;t, the company could end up with very &lt;b&gt;irate&lt;/b&gt;
customers in the months ahead.
&lt;/p&gt;

&lt;p&gt;
当运营收入增加的时候，他们也要确认下是否有足够的生产能力满足增加的销售量，如果不能满足，公司会在几个月后面应付发怒的客户。
&lt;/p&gt;

&lt;p&gt;
此处有个词 irate 是发怒的意思。这个词来自拉丁语 iratus：
&lt;/p&gt;

&lt;p&gt;
Cum &lt;b&gt;iratus&lt;/b&gt; es, deciens numera; cum furas, centiens. 当你生气的时候，数到10；当你愤怒的时候，数到100。
&lt;/p&gt;

&lt;p&gt;
这里，我们看到拉丁语里的 deciens 在法语里是 dix，centiens 在法语里是
cent。还有 furas，英语里现在是 fury 狂怒。
&lt;/p&gt;

&lt;p&gt;
不知道法语里 irrité 是不是也是从 iratus 演变来的：
&lt;/p&gt;

&lt;p&gt;
Le vieux moine est devenu de nouveau irrité. 那个老僧侣又发怒了。
&lt;/p&gt;


&lt;p&gt;
新闻：
&lt;/p&gt;

&lt;p&gt;
2022-04-03: Dr. George Akuffo Dampare, Inspector-General of Police, on
Saturday visited Essiama and Nkroful in the Western Region, where some
irate youth attacked some state institutions Friday, including the
Essiama Divisional Police headquarters.&lt;sup&gt;&lt;a id=&quot;fnr.1&quot; class=&quot;footref&quot; href=&quot;#fn.1&quot; role=&quot;doc-backlink&quot;&gt;1&lt;/a&gt;&lt;/sup&gt; 加纳西部愤怒的年轻人攻击政府机构，加纳的警察总长 George Akuffo Dampare 亲自前往。
&lt;/p&gt;

&lt;p&gt;
同样这则新闻里，还有一句：
&lt;/p&gt;

&lt;p&gt;
This infuriated the youth, who later besieged the Essiama police
station. 这个狂怒的年轻人，被关在了 Essiama 警察局。infuriate 这个词应该是前面提到的 fury 动词化后，再作形容词用。意思是 into fury state，进入狂怒状态。
&lt;/p&gt;


&lt;p&gt;
总结：
&lt;/p&gt;

&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;irate 英语，发怒的&lt;/li&gt;
&lt;li&gt;iratus 拉丁语，发怒的&lt;/li&gt;
&lt;li&gt;fury 英语，狂怒的&lt;/li&gt;
&lt;li&gt;furas 拉丁语，狂怒的&lt;/li&gt;
&lt;li&gt;irrité 法语，发怒的&lt;/li&gt;
&lt;li&gt;infuriate 英语，激怒&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;footnotes&quot;&gt;
&lt;h2 class=&quot;footnotes&quot;&gt;Footnotes: &lt;/h2&gt;
&lt;div id=&quot;text-footnotes&quot;&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.1&quot; class=&quot;footnum&quot; href=&quot;#fnr.1&quot; role=&quot;doc-backlink&quot;&gt;1&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot; role=&quot;doc-footnote&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;https://www.gna.org.gh/1.21447988&quot;&gt;https://www.gna.org.gh/1.21447988&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;


&lt;/div&gt;
&lt;/div&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines F.3 函数要短小、简洁</title>
   <link href="http://kimi.im/2022-04-06-cppcoreguidelines-f3"/>
   <updated>2022-04-06T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-f3</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
F.3: Keep functions short and simple
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;理由&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
长函数复杂难读、导致变量范围过大。复杂逻辑结构过长，容易隐藏逻辑错误。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;例子&lt;/b&gt;
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-bad src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;double&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;simple_func&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;double&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;val&lt;/span&gt;, &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;flag1&lt;/span&gt;, &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;flag2&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// simple_func: takes a value and calculates the expected ASIC output,&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// given the two mode flags.&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;double&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;intermediate&lt;/span&gt;;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;flag1 &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;
        &lt;span style=&quot;color: #000000;&quot;&gt;intermediate&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;func1&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;val&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt;;
        &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;flag2 &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;%&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;2&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt;
             &lt;span style=&quot;color: #000000;&quot;&gt;intermediate&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;sqrt&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;intermediate&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt;;
    &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;else&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;flag1 &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;==&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;-1&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;
        &lt;span style=&quot;color: #000000;&quot;&gt;intermediate&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;func1&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;-&lt;/span&gt;val&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt;;
        &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;flag2 &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;%&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;2&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt;
             &lt;span style=&quot;color: #000000;&quot;&gt;intermediate&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;sqrt&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;-&lt;/span&gt;intermediate&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt;;
        &lt;span style=&quot;color: #000000;&quot;&gt;flag1&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;-&lt;/span&gt;flag1;
    &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;abs&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;flag2&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;10&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;
        &lt;span style=&quot;color: #000000;&quot;&gt;intermediate&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;func2&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;intermediate&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt;;
    &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;switch&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;flag2 &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;/&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;10&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;case&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;1&lt;/span&gt;: &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;flag1 &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;==&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;-1&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;finalize&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;intermediate, &lt;span style=&quot;color: #110099;&quot;&gt;1.171&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt;;
            &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;break&lt;/span&gt;;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;case&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;2&lt;/span&gt;: &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;finalize&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;intermediate, &lt;span style=&quot;color: #110099;&quot;&gt;13.1&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt;;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;default&lt;/span&gt;: &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;break&lt;/span&gt;;
    &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;finalize&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;intermediate, &lt;span style=&quot;color: #110099;&quot;&gt;0.&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
以上代码太过复杂。很难判断分支有没有全部覆盖到。
&lt;/p&gt;

&lt;p&gt;
我们可以这样重构：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;double&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;func1_muon&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;double&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;val&lt;/span&gt;, &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;flag&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ???&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;double&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;func1_tau&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;double&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;val&lt;/span&gt;, &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;flag1&lt;/span&gt;, &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;flag2&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ???&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;double&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;simple_func&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;double&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;val&lt;/span&gt;, &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;flag1&lt;/span&gt;, &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;flag2&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// simple_func: takes a value and calculates the expected ASIC output,&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// given the two mode flags.&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;flag1 &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;
        &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;func1_muon&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;val, flag2&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;flag1 &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;==&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;-1&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;
        &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// handled by func1_tau: flag1 = -flag1;&lt;/span&gt;
        &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;func1_tau&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;-&lt;/span&gt;val, flag1, flag2&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;0.&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;
&lt;b&gt;注意&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
一个函数“无法满屏显示”就太长了。5 行以内的函数比较正常。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;注意&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
把长函数拆成高内聚的独立函数。小函数也很容易内联，这样函数调用也不会带来太大开销。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;强化&lt;/b&gt;
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;标注无法“一个屏幕显示”的函数。一屏多大？140 字符x 60行。差不多一张书页大小。&lt;/li&gt;
&lt;li&gt;标注太复杂的函数。多复杂？可以使用圈复杂度分析。10 个逻辑分支以上就够复杂的了。&lt;/li&gt;
&lt;/ul&gt;
</content>
 </entry>
 
 <entry>
   <title>单词本：tarnish</title>
   <link href="http://kimi.im/2022-04-06-english-tarnish"/>
   <updated>2022-04-06T00:00:00+00:00</updated>
   <id>http://kimi.im/english-tarnish</id>
   <content type="html">&lt;p&gt;
还是从信息安全相关的书上看到的这段话：
&lt;/p&gt;

&lt;p&gt;
When your reputation is &lt;b&gt;tarnished&lt;/b&gt;, your finances are impacted, your
identity is stolen, your physical well-being is threatened, your
company&amp;rsquo;s reputation and finances are harmed, and, quite possibly,
your country is overthrown, then you&amp;rsquo;ll wake up to the need for cyber
security.
&lt;/p&gt;

&lt;p&gt;
这里有个单词 tarnish，本意是失去光泽，在这里是指因为信息安全管理失误，导致企业声誉变差。
&lt;/p&gt;

&lt;p&gt;
tarnish 的本意是指金属表面的暗锈：
&lt;/p&gt;

&lt;p&gt;
The tarnish is most commonly a silver sulfide tarnish, which is a
dense, black solid that results in the tarnishing layer on silver
jewelry and silverware. 银器表面最常见的暗锈是硫化暗锈。是一层密集的、黑色固体状的暗锈层。
&lt;/p&gt;

&lt;p&gt;
这个词来自法语 ternir，比如：
&lt;/p&gt;

&lt;p&gt;
Quoi qu&amp;rsquo;il en soit, cette séquence ternit aussi l&amp;rsquo;image de la
diplomatie américaine. 如果那样的话，可能最终使的美国外交形象受损。
&lt;/p&gt;

&lt;p&gt;
另外，还有生锈、铜绿：
&lt;/p&gt;

&lt;p&gt;
Rust, tarnish, and patina all have numerous differences that can make
doorknobs, tables, windchimes, and many other items look completely
changed.
&lt;/p&gt;

&lt;p&gt;
The differences between tarnish, patina, and rust are that rust is never an intentional occurrence, tarnish forms a glowing bronze tone on a few types of metal, and patina is a type of tarnish that usually shows up copper. Some homeowners use paint to make their metals show a tarnish or patina.&lt;sup&gt;&lt;a id=&quot;fnr.1&quot; class=&quot;footref&quot; href=&quot;#fn.1&quot; role=&quot;doc-backlink&quot;&gt;1&lt;/a&gt;&lt;/sup&gt;
&lt;/p&gt;

&lt;p&gt;
Rust 是指腐蚀导致的生锈，tarnish 是一层暗锈，patina 是铜表面的绿色锈迹。人们经常会故意在金属物品上弄出暗锈和铜锈。
&lt;/p&gt;
&lt;div id=&quot;footnotes&quot;&gt;
&lt;h2 class=&quot;footnotes&quot;&gt;Footnotes: &lt;/h2&gt;
&lt;div id=&quot;text-footnotes&quot;&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.1&quot; class=&quot;footnum&quot; href=&quot;#fnr.1&quot; role=&quot;doc-backlink&quot;&gt;1&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot; role=&quot;doc-footnote&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;https://azrust.com/rust-vs-tarnish-vs-patina/&quot;&gt;https://azrust.com/rust-vs-tarnish-vs-patina/&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;


&lt;/div&gt;
&lt;/div&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines F.2 一个函数只处理一个逻辑操作</title>
   <link href="http://kimi.im/2022-04-05-cppcoreguidelines-f2"/>
   <updated>2022-04-05T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-f2</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
F.2: A function should perform a single logical operation
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;理由&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
一个函数一次只处理一个逻辑上相关的操作，更容易理解、测试、重用。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;例子&lt;/b&gt;
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-bad src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;read_and_print&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// bad&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;x&lt;/span&gt;;
    cin &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;gt;&amp;gt;&lt;/span&gt; x;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// check for errors&lt;/span&gt;
    cout &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; x &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;\n&quot;&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
这样的整块代码，限定了需要特定的输入，很难复用。相反，拆分成多个逻辑相关的函数，并参数化，就变得更清晰，更容易复用：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;read&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;istream&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;is&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// better&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;x&lt;/span&gt;;
    is &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;gt;&amp;gt;&lt;/span&gt; x;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// check for errors&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; x;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;print&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;ostream&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;os&lt;/span&gt;, &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;x&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    os &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; x &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;\n&quot;&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
这样，就可以根据需要组装函数：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;read_and_print&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;auto&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;x&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;read&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;cin&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
    &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;print&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;cout, x&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
如果需要，还可以进一步将&lt;code&gt;read()&lt;/code&gt;和 &lt;code&gt;print()&lt;/code&gt; 的数据类型、输入输出机制、以及错误处理等进行参数化。
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-C++&quot;&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;auto&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;read&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;[](&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;auto&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;input&lt;/span&gt;, &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;auto&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;value&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// better&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    input &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;gt;&amp;gt;&lt;/span&gt; value;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// check for errors&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;

&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;auto&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;print&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;auto&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;output&lt;/span&gt;, &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;auto&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;value&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    output &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; value &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;\n&quot;&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;
&lt;b&gt;强化&lt;/b&gt;
&lt;/p&gt;

&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;遇到有多个输出参数的函数，看看可不可以用返回值，或者用 &lt;code&gt;tuple&lt;/code&gt; 返回多个值。&lt;/li&gt;
&lt;li&gt;遇到无法在一个页屏幕显示的函数，考虑是否可以拆分成命名良好、规模小的子函数&lt;/li&gt;
&lt;li&gt;看到有 7 个以上参数的函数，考虑是否能进行优化&lt;/li&gt;
&lt;/ul&gt;
</content>
 </entry>
 
 <entry>
   <title>单词本：de rigueur</title>
   <link href="http://kimi.im/2022-04-05-english-de-rigueur"/>
   <updated>2022-04-05T00:00:00+00:00</updated>
   <id>http://kimi.im/english-de-rigueur</id>
   <content type="html">&lt;p&gt;
在 17、18 世纪，在英国、美国的年轻人中，流行一种叫 Grand Tour of Europe 的欧洲游学活动。他们去意大利、法国这些地方待上四年，学习语言、建筑、地理、文化知识。
&lt;/p&gt;

&lt;p&gt;
Grand Tour of Europe was de rigueur for young American men of means to
prepare them for a life of refinement and taste. 伟大欧洲之旅是年轻男士为了建立精致和品味生活的社交礼节上的需要。
&lt;/p&gt;

&lt;p&gt;
这里有个法语来的词 de rigueur：礼节需要的、礼仪上必要的、符合礼节和时尚的。
&lt;/p&gt;

&lt;p&gt;
rigueur 就是法语里的 rigour 严格的意思。de rigueur 在法语里的字面意思就是 of rigour 严格的。在英语里，就成了严格符合社交礼节的，即符合礼仪的。
&lt;/p&gt;

&lt;p&gt;
-eur 是一个典型的法语名词结尾，其他还有 amateur 业余爱好者，chaufeur
私人司机，liqueur 利口酒，entrepreneur 企业家，这些都是法语里来的。
&lt;/p&gt;

&lt;p&gt;
例句：
&lt;/p&gt;

&lt;p&gt;
Messaging analysis and associate e-mail infrastructure are &lt;b&gt;de rigueur&lt;/b&gt;
for coping with the fact that 95%+ of e-mail on the Internet is
illicit. 电子邮件的消息分析是处理 互联网邮件的礼节需要。以为 95% 以上的电子邮件都是违法不正当的。
&lt;/p&gt;

&lt;p&gt;
Dark sunglasses are de rigueur these days. 黑墨镜是当下的社交礼节必需品。
&lt;/p&gt;

&lt;p&gt;
Perthnow 2022-03-31: Modern technology, combined with a post-pandemic
shift in habits, means it&amp;rsquo;s now de rigueur for people to work from
coffee shops.&lt;sup&gt;&lt;a id=&quot;fnr.1&quot; class=&quot;footref&quot; href=&quot;#fn.1&quot; role=&quot;doc-backlink&quot;&gt;1&lt;/a&gt;&lt;/sup&gt; 现代科技，加上后疫情时代形成的习惯，意味着在咖啡馆工作是人们社交礼节的需要。
&lt;/p&gt;

&lt;p&gt;
总结：
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;de rigueur 社交礼节需要的&lt;/li&gt;
&lt;li&gt;amateur 业余爱好者&lt;/li&gt;
&lt;li&gt;chaufeur 私人司机&lt;/li&gt;
&lt;li&gt;liqueur 利口酒&lt;/li&gt;
&lt;li&gt;entrepreneur 企业家&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;footnotes&quot;&gt;
&lt;h2 class=&quot;footnotes&quot;&gt;Footnotes: &lt;/h2&gt;
&lt;div id=&quot;text-footnotes&quot;&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.1&quot; class=&quot;footnum&quot; href=&quot;#fnr.1&quot; role=&quot;doc-backlink&quot;&gt;1&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot; role=&quot;doc-footnote&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;https://www.perthnow.com.au/lifestyle/a-few-additions-to-debretts-updated-guide-on-modern-cafe-etiquette--c-6275581&quot;&gt;https://www.perthnow.com.au/lifestyle/a-few-additions-to-debretts-updated-guide-on-modern-cafe-etiquette--c-6275581&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;


&lt;/div&gt;
&lt;/div&gt;</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines F.1 把一组相关的操作封装成仔细命名的函数</title>
   <link href="http://kimi.im/2022-04-04-cppcoreguidelines-f1"/>
   <updated>2022-04-04T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-f1</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
F.1: “ Package ” meaningful operations as carefully named functions
&lt;/p&gt;

&lt;p&gt;
&lt;b&gt;理由&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
提取公用代码，可以提高代码可读性和提升代码的可复用度，避免代码太复杂导致的错误。如果有些操作已经明确定义了，可以将其从代码中提取出来，起一个有意义的函数名。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;例子&lt;/b&gt;
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-bad src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;read_and_print&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;istream&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;is&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// read and print an int&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;x&lt;/span&gt;;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;is &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;gt;&amp;gt;&lt;/span&gt; x&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;
        cout &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;the int is &quot;&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; x &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;&apos;\n&apos;&lt;/span&gt;;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;else&lt;/span&gt;
        cerr &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;no int on input\n&quot;&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
&lt;code&gt;read_and_print&lt;/code&gt; 函数几乎全错了。该函数输出数据到一个固定的输出流、只处理 &lt;code&gt;int&lt;/code&gt; 类型数据的输出，很难在别的地方复用这个函数，把逻辑上不相关的操作混在一起，在作用域范围外使用局部变量。
&lt;/p&gt;

&lt;p&gt;
如果一个 &lt;code&gt;lambda&lt;/code&gt; 需要在多处使用，可以给把它赋值给一个变量：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-C++&quot;&gt;&lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;sort&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;a, b, &lt;span style=&quot;color: #7388d6;&quot;&gt;[](&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;x&lt;/span&gt;, &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;y&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; x.&lt;span style=&quot;color: #3a5fcd; font-weight: bold; font-style: italic;&quot;&gt;rank&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt; y.&lt;span style=&quot;color: #3a5fcd; font-weight: bold; font-style: italic;&quot;&gt;rank&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; x.&lt;span style=&quot;color: #3a5fcd; font-weight: bold; font-style: italic;&quot;&gt;value&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt; y.&lt;span style=&quot;color: #3a5fcd; font-weight: bold; font-style: italic;&quot;&gt;value&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;()&lt;/span&gt;;
&lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;

&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;auto&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;lessT&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;[](&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;x&lt;/span&gt;, &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;y&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; x.&lt;span style=&quot;color: #3a5fcd; font-weight: bold; font-style: italic;&quot;&gt;rank&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt; y.&lt;span style=&quot;color: #3a5fcd; font-weight: bold; font-style: italic;&quot;&gt;rank&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; x.&lt;span style=&quot;color: #3a5fcd; font-weight: bold; font-style: italic;&quot;&gt;value&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt; y.&lt;span style=&quot;color: #3a5fcd; font-weight: bold; font-style: italic;&quot;&gt;value&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;

&lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;sort&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;a, b, lessT&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;
&lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;find_if&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;a, b, lessT&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;
&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;
&lt;b&gt;注意&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
最短的代码，不一定是性能最好、最易维护的代码。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;例外&lt;/b&gt;
&lt;/p&gt;

&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;循环体中的代码很少会重用。循环体要保持尽量短。循环体内如果有几十行代码，甚至超过好几页代码，肯定是有问题的。保持函数精简的原则也意味着要保持循环体精简短小。相同的，作为回调函数的 &lt;code&gt;lambda&lt;/code&gt; 也应该保持精简短小。&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;
&lt;b&gt;强化&lt;/b&gt;
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;保持代码简短&lt;/li&gt;
&lt;li&gt;标注代码中相似的 &lt;code&gt;lambda&lt;/code&gt; 函数，可能可以给 &lt;code&gt;lambda&lt;/code&gt; 命名，从而可以在别处重用&lt;/li&gt;
&lt;/ul&gt;
</content>
 </entry>
 
 <entry>
   <title>单词本：pelikan</title>
   <link href="http://kimi.im/2022-04-04-english-pelikan"/>
   <updated>2022-04-04T00:00:00+00:00</updated>
   <id>http://kimi.im/english-pelikan</id>
   <content type="html">&lt;p&gt;
昨天，在钢笔爱好者群里分享了一个文章，增加了10个关注，真是蓬荜生辉。看来爱好文具的小朋友，也爱好学习呢。
&lt;/p&gt;

&lt;p&gt;
我买的钢笔不多，就2支LAMY 2000和一支英雄鼎新100，分别灌了蓝色、黑色、橘色墨水，做笔记的时候换着颜色图图画画。
&lt;/p&gt;

&lt;p&gt;
LAMY是德国钢笔品牌。在德国还有一个有名的钢笔品牌叫 Pelikan 百利金，其历史可以追溯到 1832年，化学家 Carl Hornemann 在汉诺威建立了一家墨水厂。之后40年，墨水厂的雇员 Günter Wangner 收购了这家工厂，用自己家的族徽鹈鹕做为logo，改名为 Pelikan。
&lt;/p&gt;

&lt;p&gt;
Pelikan&amp;rsquo;s history stretches back to 1832 when the chemist Carl
Hornemann founded an ink factory in Hanover Germany. The company was
subsequently bought by employee Günter Wangner in 1871. Wangner took
his family emblem, a pelican, for the company logo and Pelikan was
born.
&lt;/p&gt;

&lt;p&gt;
也就是说，pelikan 就是一种鹈鹕的名字。有棕鹈鹕（brown pelikan，
Pelecanus occidentalis），白鹈鹕（white pelikan，Pelecanus
erythrorhynchos），还有北美白鹈鹕（North American white pelican，
Pelecanus erythrorhynchos）。具体Günter Wangner家的鹈鹕是那种鹈鹕，我就不得而知了。
&lt;/p&gt;

&lt;p&gt;
百度百科说“Pelikan (百利金)1838年起始于德国汉诺威，1883年被欧洲古勒万纳王族所接手而创立”。似乎似乎有些问题。所谓的古勒万纳王族，不就是指墨水厂雇员Günter Wangner吗？德语音译应该是“俊特·万格纳”。俊特可能是王族后裔，但说他是王族，可能也不妥吧。总之，百度百科可能是百利金的销售撰写的，用传奇的说法，彰显其高贵吧。
&lt;/p&gt;

&lt;p&gt;
总结：
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;pelikan，学名pelecanus，鹈鹕&lt;/li&gt;
&lt;li&gt;emblem，源自拉丁语emblema，雕刻的装饰，族徽、象征、标记&lt;/li&gt;
&lt;/ul&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines I.30 把违背规则的操作封装隔离起来</title>
   <link href="http://kimi.im/2022-04-03-cppcoreguidelines-i30"/>
   <updated>2022-04-03T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-i30</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
I.30: Encapsulate rule violations
&lt;/p&gt;

&lt;p&gt;
&lt;b&gt;理由&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
保持代码简洁、安全。但是有时候为了逻辑清晰和性能考量，需要用到一些丑陋、不安全、容易出错的技巧。如果用到了，那么将这些代码保持在本地，而不要影响到外部接口。这样使用外部接口的程序员就不需要关注内部细节。那些复杂的代码实现，尽可能不要通过接口流到用户代码中。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;例子&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
考虑这样一个程序，通过文件、命令行、标准输入等不同的输入（ main 函数的参数）执行。我们可能写成这样：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-bad src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;bool&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;owned&lt;/span&gt;;
&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;owner&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;istream&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;inp&lt;/span&gt;;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;switch&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;source&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;case&lt;/span&gt; std_in:        &lt;span style=&quot;color: #000000;&quot;&gt;owned&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;false&lt;/span&gt;; &lt;span style=&quot;color: #000000;&quot;&gt;inp&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt;cin;                       &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;break&lt;/span&gt;;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;case&lt;/span&gt; command_line:  &lt;span style=&quot;color: #000000;&quot;&gt;owned&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;true&lt;/span&gt;;  &lt;span style=&quot;color: #000000;&quot;&gt;inp&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;istringstream&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;argv&lt;span style=&quot;color: #909183;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;2&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;]&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;break&lt;/span&gt;;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;case&lt;/span&gt; file:          &lt;span style=&quot;color: #000000;&quot;&gt;owned&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;true&lt;/span&gt;;  &lt;span style=&quot;color: #000000;&quot;&gt;inp&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;ifstream&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;argv&lt;span style=&quot;color: #909183;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;2&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;]&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;;      &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;break&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;istream&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;in&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;*&lt;/span&gt;inp;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
以上代码违反了这些规则：
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;不要有未初始化的变量&lt;/li&gt;
&lt;li&gt;不要忽略所有权&lt;/li&gt;
&lt;li&gt;不要用魔数常量&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
最后还得有人去清理销毁资源：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-bad src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;owned&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;delete&lt;/span&gt; inp;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
以下，我们可以用一个有特殊删除操作的&lt;code&gt;unique_ptr&lt;/code&gt;来实现，当然如果是 &lt;code&gt;cin&lt;/code&gt;
就不需要删除。但这样对新手来说太麻烦。这里我们遇到的是一个静态变量，即所有权，偶尔需要在运行时检查。我们可以写一个类：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Istream&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;[&lt;/span&gt;gsl::suppress&lt;span style=&quot;color: #709870;&quot;&gt;(&lt;/span&gt;lifetime&lt;span style=&quot;color: #709870;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;]&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;]&lt;/span&gt;
&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;public&lt;/span&gt;:
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;enum&lt;/span&gt; Opt &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;from_line&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;1&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;;
    &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;Istream&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// read from file&lt;/span&gt;
    &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;Istream&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;zstring&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;p&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; : &lt;span style=&quot;color: #110099; font-style: italic;&quot;&gt;owned&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;true&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;, &lt;span style=&quot;color: #110099; font-style: italic;&quot;&gt;inp&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;ifstream&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;{&lt;/span&gt;p&lt;span style=&quot;color: #909183;&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{}&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// read from command line&lt;/span&gt;
    &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;Istream&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;zstring&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;p&lt;/span&gt;, &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Opt&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; : &lt;span style=&quot;color: #110099; font-style: italic;&quot;&gt;owned&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;true&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;, &lt;span style=&quot;color: #110099; font-style: italic;&quot;&gt;inp&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;istringstream&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;{&lt;/span&gt;p&lt;span style=&quot;color: #909183;&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{}&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;~&lt;/span&gt;Istream&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;owned&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;delete&lt;/span&gt; inp; &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;
    operator &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;istream&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;*&lt;/span&gt;inp; &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;private&lt;/span&gt;:
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;bool&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;owned&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;false&lt;/span&gt;;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;istream&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;*&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;inp&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt;cin;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
这样，就封装了输入流的所有权。实际代码中再增加一些错误检测即可。
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>单词本：circadian</title>
   <link href="http://kimi.im/2022-04-03-english-circadian"/>
   <updated>2022-04-03T00:00:00+00:00</updated>
   <id>http://kimi.im/english-circadian</id>
   <content type="html">&lt;p&gt;
前不久上了个时间管理的课程。有个视频说到每个人的时间安排要符合自己的生理周期节律。并引用了美国作家 Daniel Pink 为证：
&lt;/p&gt;

&lt;p&gt;
&amp;ldquo;We are smarter, faster, dimmer, slower, more creative, and less
creative in some parts of the day than others.&amp;rdquo;  &amp;#x2013; Daniel Pink
&lt;/p&gt;

&lt;p&gt;
“在一天的不同时间段，我们聪明，敏捷，模糊，迟钝，创新，守旧。人人不同。”
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;circadian rhythm&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
这就是所谓的 circadian rhythm，生理周期节律。
&lt;/p&gt;

&lt;p&gt;
每个人的一天的生理周期都不一样。有的是晨型人，有的是夜猫子。比如我就是个晨型人，基本上早上6点会自然醒，上午工作效率是最高的时候，下午1点会有些迟钝，2点之后，又恢复活力。傍晚7点脑力又差了些。然后8点到10点又活力四射。11点之后就很困了，躺下去基本上5分钟就睡着了。
&lt;/p&gt;

&lt;p&gt;
不过，生理规律也不是一成不变的。比如我的小女朋友以前是个夜猫子。现在也跟我一样，是个早睡早起的晨型人了。
&lt;/p&gt;

&lt;p&gt;
circadian 这个词的意思是 (of biological processes) recurring naturally
on a twenty-four-hour cycle, even in the absence of light
fluctuations. 人的生理过程在 24 小时周期中自然出现的规律，甚至与光照变化无关。
&lt;/p&gt;

&lt;p&gt;
&lt;b&gt;circa&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
这个词一看就是拉丁语演变过来的。 circa 是拉丁语大概、近似的意思。
&lt;/p&gt;

&lt;p&gt;
The story tells of a runaway slave girl in Louisiana, circa 1850（大概在 1985年）.
&lt;/p&gt;

&lt;p&gt;
经常在论文中看到的circa的缩写形式：c, c., ca, ca., cir., circ. 比如：
&lt;/p&gt;

&lt;p&gt;
Melting point/range : ca. 63 ℃ 熔点/范围：约63℃
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;dies&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
那么，circadian 的后面部分 -dian 是什么意思呢？应该也是拉丁语里的 dies
演变来。dies 是 day 的意思：
&lt;/p&gt;

&lt;p&gt;
Dies Lunæ hodie est. 今天是星期一。Dies Lunæ 星期一，法语里是 lundi，还是挺接近的么。
&lt;/p&gt;

&lt;p&gt;
Dies secundus huius mensis est. 今天是这个月的第二天。
&lt;/p&gt;

&lt;p&gt;
我想到另外一个词也是由 dies 组成的 quotidian 日常、每日：Television
has become part of our quotidian existence. 电视已成为我们日常生活的一部分。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;circadian&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
所以，circadian 合在一起，字面意思就是“大概一天的”，也就是一日之周期。
circadian rhythm即一天之周期的节律。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;新闻例句&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
心理邮报 2022-03-28：New research in mice suggests Alzheimer&amp;rsquo;s disease
is linked to circadian rhythm.&lt;sup&gt;&lt;a id=&quot;fnr.1&quot; class=&quot;footref&quot; href=&quot;#fn.1&quot; role=&quot;doc-backlink&quot;&gt;1&lt;/a&gt;&lt;/sup&gt; 最新研究标明，小鼠的阿兹海默症与生理周期节律相关。
&lt;/p&gt;

&lt;p&gt;
Newton Media Group 2022-04-02: Your &lt;b&gt;circadian&lt;/b&gt; rhythm is your body&amp;rsquo;s
own inbuilt sense of when to wake and when to sleep. Parts of your
body perceive and respond to changes in light around you and move
through cycles, with physical and behavioral changes occurring over a
twenty-four-hour period.&lt;sup&gt;&lt;a id=&quot;fnr.2&quot; class=&quot;footref&quot; href=&quot;#fn.2&quot; role=&quot;doc-backlink&quot;&gt;2&lt;/a&gt;&lt;/sup&gt; (from Time Management According To Your
Unique Rhythms)
&lt;/p&gt;

&lt;p&gt;
The human body follows a sleep and wake cycle called circadian
rhythm. This 24-hour cycle regulates all our essential functions,
including metabolism, alertness, body temperature and blood pressure.
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;总结&lt;/b&gt;
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;circadian rhythm 生理周期节律&lt;/li&gt;
&lt;li&gt;c, c., ca, ca., cir., circ., circa 大约&lt;/li&gt;
&lt;li&gt;quotidian 每日的，日常的&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;footnotes&quot;&gt;
&lt;h2 class=&quot;footnotes&quot;&gt;Footnotes: &lt;/h2&gt;
&lt;div id=&quot;text-footnotes&quot;&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.1&quot; class=&quot;footnum&quot; href=&quot;#fnr.1&quot; role=&quot;doc-backlink&quot;&gt;1&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot; role=&quot;doc-footnote&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;https://www.psypost.org/2022/03/new-research-in-mice-suggests-alzheimers-disease-is-linked-to-circadian-rhythm-62805&quot;&gt;https://www.psypost.org/2022/03/new-research-in-mice-suggests-alzheimers-disease-is-linked-to-circadian-rhythm-62805&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.2&quot; class=&quot;footnum&quot; href=&quot;#fnr.2&quot; role=&quot;doc-backlink&quot;&gt;2&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot; role=&quot;doc-footnote&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;https://newtonmg.com/2022/04/02/time-management-according-to-your-unique-rhythms/&quot;&gt;https://newtonmg.com/2022/04/02/time-management-according-to-your-unique-rhythms/&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;


&lt;/div&gt;
&lt;/div&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines I.27 对于稳定库 ABI，考虑用 Pimpl 封装</title>
   <link href="http://kimi.im/2022-04-02-cppcoreguidelines-i27"/>
   <updated>2022-04-02T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-i27</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
I.27: For stable library ABI, consider the Pimpl idiom
&lt;/p&gt;

&lt;p&gt;
&lt;b&gt;理由&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
因为私有成员变量构成类的内部布局，私有成员函数则参与函数重载解析，修改了类的底层实现，就要求重新编译使用该类的所有文件。
&lt;/p&gt;

&lt;p&gt;
通过让一个非多态的接口保管一个指向实现的指针（ Pimpl ），就可以分离代码实现的变动。付出的代价就是无法直接访问底层的实现。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;例子&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
接口 (widget.h)
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;widget&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;impl&lt;/span&gt;;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;std&lt;/span&gt;::&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;unique_ptr&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;impl&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;pimpl&lt;/span&gt;;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;public&lt;/span&gt;:
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold; font-style: italic;&quot;&gt;draw&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt;; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// public API that will be forwarded to the implementation&lt;/span&gt;
    &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;widget&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// defined in the implementation file&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;~&lt;/span&gt;widget&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt;;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// defined in the implementation file,&lt;/span&gt;
                 &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// where impl is a complete type&lt;/span&gt;
    &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;widget&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;widget&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;noexcept&lt;/span&gt;; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// defined in the implementation file&lt;/span&gt;
    &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;widget&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;widget&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;delete&lt;/span&gt;;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;widget&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt; operator&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;widget&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;noexcept&lt;/span&gt;; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// defined in the implementation file&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;widget&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt; operator&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;widget&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;delete&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
widget的底层实现 (widget.cpp)
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;widget&lt;/span&gt;::&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;impl&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;n&lt;/span&gt;; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// private data&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;public&lt;/span&gt;:
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold; font-style: italic;&quot;&gt;draw&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;widget&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;w&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;/* ... */&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;
    &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;impl&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;n&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; : &lt;span style=&quot;color: #110099; font-style: italic;&quot;&gt;n&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;n&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{}&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;widget&lt;/span&gt;::&lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;draw&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt; pimpl&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #3a5fcd; font-weight: bold; font-style: italic;&quot;&gt;draw&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;this&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;; &lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;widget&lt;/span&gt;::&lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;widget&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;n&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt; : &lt;span style=&quot;color: #110099; font-style: italic;&quot;&gt;pimpl&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;std&lt;/span&gt;::&lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;make_unique&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #3a5fcd; font-weight: bold; font-style: italic; text-decoration: underline;&quot;&gt;impl&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;n&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{}&lt;/span&gt;
&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;widget&lt;/span&gt;::&lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;widget&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;widget&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;noexcept&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;default&lt;/span&gt;;
&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;widget&lt;/span&gt;::&lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;~&lt;/span&gt;&lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;widget&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;default&lt;/span&gt;;
&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;widget&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;widget&lt;/span&gt;::&lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;operator&lt;/span&gt;&lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;widget&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;noexcept&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;default&lt;/span&gt;;
&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;
&lt;b&gt;注意&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
更多实现细节 &lt;a href=&quot;https://herbsutter.com/gotw/_100/&quot;&gt;GOTW #100&lt;/a&gt; &lt;a href=&quot;https://en.cppreference.com/w/cpp/language/pimpl&quot;&gt;cppreference&lt;/a&gt;
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>单词本：confiscate</title>
   <link href="http://kimi.im/2022-04-02-english-confiscate"/>
   <updated>2022-04-02T00:00:00+00:00</updated>
   <id>http://kimi.im/english-confiscate</id>
   <content type="html">&lt;p&gt;
这几天还是继续在学隐私计算、加密技术。
&lt;/p&gt;

&lt;p&gt;
Privacy sensitivity is most applicable to home users who own and
control their platform. In an enterprise, the IT department may
control the platform completely and weaken the privacy features. This
discussion is also concerned mostly with remote correlation — it
doesn&amp;rsquo;t consider an attacker who can &lt;b&gt;confiscate&lt;/b&gt; a platform.
&lt;/p&gt;

&lt;p&gt;
对于自己拥有设备的个人用户对个人数据隐私比较敏感。在企业中，IT 部门完全控制平台设备，隐私功能相对不太关心。书中讨论的也都是远程管理相关的。不太会考虑攻击者能够没收平台设备的情况。
&lt;/p&gt;

&lt;p&gt;
这里，看到一个单词 confiscate，这个词是没收、查抄（某人财产）、罚没（某物，尤其指土地）。这个词由两部分组成 con- 是一起、一块的意思。
fiscate 是拉丁语 fiscus 演变来的，fiscus有这些意思：
&lt;/p&gt;

&lt;ol class=&quot;org-ol&quot;&gt;
&lt;li&gt;(罗马人习惯上用以装大额货币的)柳条筐；背篓&lt;/li&gt;
&lt;li&gt;(罗马法)皇家私人金库区别于国库或公共金库〔aerarium〕。大概由奥古斯都〔Augustus〕创设，其收入来源包括帝国行省纳税、没收财产〔confiscated property〕和无人认领的土地〔unclaimed land〕。皇家私人金库专设有账目官〔rationibus〕，内尔瓦〔Nerva〕任命了一个专门的裁判官〔praetor〕来解决皇家私人金库和国库之间的纠纷，哈德良〔Hadrian〕设立了财政辩护人〔advocati fisci〕以在法院出庭。随着时间的推移，皇家私人金库日益变得比国库更为重要，它负责支付军队、舰队以及帝国行政活动的薪俸和费用。在法国，这个词与国库并无区别。罗马帝国后期，国库一词遂被fiscus一词吸收，fiscus后就被用以指帝国金库。&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;
合起来，大概就是把私人财产、土地没收到国库的意思了。
&lt;/p&gt;

&lt;p&gt;
不好意思，昨天提到的 obfuscate 的词根 fuscus 时，提到 “青海田鼠”“microtus fuscus” fuscus 刚好打错了，写成 fiscus了。这不成了青海国库了么……
&lt;/p&gt;

&lt;p&gt;
因为 fiscus 是帝国金库，所有派生出：
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;fiscal（财政的；国库的；国家岁入的）&lt;/li&gt;
&lt;li&gt;fiscal year（财政年度；会计年度）&lt;/li&gt;
&lt;li&gt;fiscal and tax policy（财政和税收政策）&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;
最近新闻：
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;2022-03-28: Florida officials confiscate 75 guns amid spring break
surge: &amp;ldquo;There are no words that can describe the way they have
behaved&amp;rdquo;&lt;sup&gt;&lt;a id=&quot;fnr.1&quot; class=&quot;footref&quot; href=&quot;#fn.1&quot; role=&quot;doc-backlink&quot;&gt;1&lt;/a&gt;&lt;/sup&gt; 春假人群飙升之际，Florida 官方没收了 75 把枪支，官方说“无法描述他们到底要干什么”。&lt;/li&gt;
&lt;li&gt;2022-03-27: Durban police confiscate R500k worth of hydroponic
dagga. &lt;sup&gt;&lt;a id=&quot;fnr.2&quot; class=&quot;footref&quot; href=&quot;#fn.2&quot; role=&quot;doc-backlink&quot;&gt;2&lt;/a&gt;&lt;/sup&gt; 3月27日，南非德班警方没收了价值50万南非兰特（Rand，南非货币）的水培大麻。&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
总结下：
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;fiscus 罗马帝国金库&lt;/li&gt;
&lt;li&gt;fiscus 拉丁语黑暗的&lt;/li&gt;
&lt;li&gt;confiscate 没收&lt;/li&gt;
&lt;li&gt;fiscal 财政的&lt;/li&gt;
&lt;li&gt;fiscal year 财年&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;footnotes&quot;&gt;
&lt;h2 class=&quot;footnotes&quot;&gt;Footnotes: &lt;/h2&gt;
&lt;div id=&quot;text-footnotes&quot;&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.1&quot; class=&quot;footnum&quot; href=&quot;#fnr.1&quot; role=&quot;doc-backlink&quot;&gt;1&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot; role=&quot;doc-footnote&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;https://www.cbsnews.com/news/florida-spring-break-condemn-shooting-miami/&quot;&gt;https://www.cbsnews.com/news/florida-spring-break-condemn-shooting-miami/&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.2&quot; class=&quot;footnum&quot; href=&quot;#fnr.2&quot; role=&quot;doc-backlink&quot;&gt;2&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot; role=&quot;doc-footnote&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;https://www.sowetanlive.co.za/news/south-africa/2022-03-27-durban-police-confiscate-r500k-worth-of-hydroponic-dagga/&quot;&gt;https://www.sowetanlive.co.za/news/south-africa/2022-03-27-durban-police-confiscate-r500k-worth-of-hydroponic-dagga/&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;


&lt;/div&gt;
&lt;/div&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines I.26 如果需要跨编译器的 ABI，使用 C 风格子集</title>
   <link href="http://kimi.im/2022-04-01-cppcoreguidelines-i26"/>
   <updated>2022-04-01T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-i26</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
I.26: If you want a cross-compiler ABI, use a C-style subset
&lt;/p&gt;

&lt;p&gt;
&lt;b&gt;理由&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
所谓 ABI 就是Application Binary Interface的缩写。编程语言的 ABI 决定了底层实现的细节。编译出来的模块遵循相同的 ABI ，就可以互相链接，一起工作。不同的 C++编译器的 ABI 会略有差异，因此为了确保不同编译器编译出来的代码能一起工作，最好相对精简且稳定的使用 C 风格子集。
&lt;/p&gt;

&lt;p&gt;
对于类、异常处理过程、函数名以及其他实现细节，不同的编译器实现了不同的二进制机器码布局。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;例外&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
通用的 ABI 已经在某些平台上融合了，减少了一些严苛的限制。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;注意&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
如果只使用单一编译器，可以完全用C++接口。更换或升级编译器的话，可能需要重新编译。
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>单词本：obfuscate</title>
   <link href="http://kimi.im/2022-04-01-english-obfuscate"/>
   <updated>2022-04-01T00:00:00+00:00</updated>
   <id>http://kimi.im/english-obfuscate</id>
   <content type="html">&lt;p&gt;
最近在研究密码学底层工具，还是继续在看可信硬件模块的功能和接口。
&lt;/p&gt;

&lt;p&gt;
看到这句：
&lt;/p&gt;

&lt;p&gt;
The values are &lt;b&gt;obfuscated&lt;/b&gt; when the signing key isn&amp;rsquo;t in the
endorsement or platform hierarchy. The &lt;b&gt;obfuscation&lt;/b&gt; is consistent when
using the same key so the receiver can detect a change in the values
while not seeing the actual values.
&lt;/p&gt;

&lt;p&gt;
当签名密钥不在托管层级和平台层级中，为避免暴露TPM中的隐秘数据，要对这些数值进行混淆。如果用相同的密钥进行混淆，其过程是一致的。所以接收方可以检查数值是否变化确定接收到的是不是实际数据。
&lt;/p&gt;

&lt;p&gt;
今天要学的单词就是上面出现的 obfuscate 和 obfuscation。混淆，以及混淆的名词形式（混淆过程）。
&lt;/p&gt;

&lt;p&gt;
在发布产品代码时，为了保护知识产权，有人会进行 code obfuscation，混淆代码。
&lt;/p&gt;

&lt;p&gt;
这个词，最早可能来自拉丁语 fuscus 黑暗的的动词形式 obfuscare。
&lt;/p&gt;

&lt;p&gt;
其实目前 fuscus 在英语里还是一种田鼠的名字“青海田鼠” “microtus fuscus”：
&lt;/p&gt;

&lt;p&gt;
The above results showed that Ochotona curzoniae and &lt;b&gt;Microtus fuscus&lt;/b&gt;
were the main intermediate hosts of Echinococcus multilocularis. 以上结果表明高原鼠兔、青海田鼠是当地多房棘球绦虫的重要中间宿主。
&lt;/p&gt;

&lt;p&gt;
另外，Liasis Fuscus is also the Latin name for the Brown
Water-Python. Liasis Fuscus 还是棕色水蟒的拉丁名。Liasis fuscus (Brown
Water Python) is a species of snakes in the family pythons.
&lt;/p&gt;

&lt;p&gt;
总结下：
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;obfuscate : 使模糊; 混淆; 弄黑暗; 模糊&lt;/li&gt;
&lt;li&gt;obfuscation : 困惑、昏迷、模糊处理&lt;/li&gt;
&lt;li&gt;code obfuscation : 代码混淆处理（避免他人逆向工程提取源码）&lt;/li&gt;
&lt;li&gt;microtus fiscus : 青海田鼠&lt;/li&gt;
&lt;li&gt;liasis fuscus : 棕色水蟒，brown water python&lt;/li&gt;
&lt;/ul&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines I.25 用空抽象类作为类层级的接口</title>
   <link href="http://kimi.im/2022-03-31-cppcoreguidelines-i25"/>
   <updated>2022-03-31T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-i25</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
I.25: Prefer empty abstract classes as interfaces to class hierarchies
&lt;/p&gt;

&lt;p&gt;
&lt;b&gt;理由&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
抽象类是空的，除了 &lt;code&gt;static&lt;/code&gt; 成员，没有其他成员数据。比有状态的基类更稳定。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;反例&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
含有数据的类
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-bad src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Shape&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;  &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// bad: interface class loaded with data&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;public&lt;/span&gt;:
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Point&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold; font-style: italic;&quot;&gt;center&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; c; &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;virtual&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold; font-style: italic;&quot;&gt;draw&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt;;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;virtual&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold; font-style: italic;&quot;&gt;rotate&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ...&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;private&lt;/span&gt;:
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Point&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;c&lt;/span&gt;;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;vector&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Point&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;outline&lt;/span&gt;;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Color&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;col&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
这会要求所有继承的子类去计算 &lt;code&gt;center&lt;/code&gt; 。可能在子类中 &lt;code&gt;center&lt;/code&gt; 的值从来不会用到。同样的，不是所有形状 &lt;code&gt;Shape&lt;/code&gt; 都有颜色 &lt;code&gt;Color&lt;/code&gt; ，还有些形状可能没有轮廓，只是由几个点组成。
&lt;/p&gt;

&lt;p&gt;
用抽象类会更好：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Shape&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// better: Shape is a pure interface&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;public&lt;/span&gt;:
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;virtual&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Point&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold; font-style: italic;&quot;&gt;center&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;0&lt;/span&gt;;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// pure virtual functions&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;virtual&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold; font-style: italic;&quot;&gt;draw&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;0&lt;/span&gt;;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;virtual&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold; font-style: italic;&quot;&gt;rotate&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;0&lt;/span&gt;;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ...&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ... no data members ...&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ...&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;virtual&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;~&lt;/span&gt;Shape&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;default&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
&lt;b&gt;强化&lt;/b&gt;
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;（简单）如果一个叫 C 的类，它的指针或引用赋值给 C 的基类指针或引用，而基类又有成员数据。警告。&lt;/li&gt;
&lt;/ul&gt;
</content>
 </entry>
 
 <entry>
   <title>单词本：en masse</title>
   <link href="http://kimi.im/2022-03-31-english-en-masse"/>
   <updated>2022-03-31T00:00:00+00:00</updated>
   <id>http://kimi.im/english-en-masse</id>
   <content type="html">&lt;p&gt;
昨天看技术资料，看到一个词 en masse ，来自法语，意思是全体的、一大批人的、大众的。感觉写书作者用上几个法语里过来的单词，就会显得比较文雅。就好像我们在写作的时候，能恰当的用上几个生龙活虎的成语，就会显得很阳春白雪。
&lt;/p&gt;

&lt;p&gt;
其实 masse 就是法语里的质量，英语里是 mass：
&lt;/p&gt;

&lt;p&gt;
la masse: Terme de physique. Somme des points matériels que chaque
corps renferme, par opposition à volume qui exprime l&amp;rsquo;espace
occupé. La gravitation s&amp;rsquo;exerce en raison directe des masses et en
raison inverse du carré des distances.
&lt;/p&gt;

&lt;p&gt;
最近新闻中的例句：
&lt;/p&gt;

&lt;p&gt;
Migrants who come from Kharkiv, Kyiv, Mykolaiv and go abroad via Lviv
leave animals en masse. 来自哈尔科夫，基辅，尼古拉耶夫的移民，通过利沃夫离境，留下了大量的家畜动物。&lt;sup&gt;&lt;a id=&quot;fnr.1&quot; class=&quot;footref&quot; href=&quot;#fn.1&quot; role=&quot;doc-backlink&quot;&gt;1&lt;/a&gt;&lt;/sup&gt;
&lt;/p&gt;

&lt;p&gt;
E Ink hasn&amp;rsquo;t revealed when it will be available en masse. 目前还不清楚电子墨水屏幕什么时候普及到大众使用。&lt;sup&gt;&lt;a id=&quot;fnr.2&quot; class=&quot;footref&quot; href=&quot;#fn.2&quot; role=&quot;doc-backlink&quot;&gt;2&lt;/a&gt;&lt;/sup&gt;
&lt;/p&gt;

&lt;p&gt;
At the end of the assembly, the students moved en masse toward the gym
doors. 学生集合后，一帮人往体育馆大门走去。
&lt;/p&gt;
&lt;div id=&quot;footnotes&quot;&gt;
&lt;h2 class=&quot;footnotes&quot;&gt;Footnotes: &lt;/h2&gt;
&lt;div id=&quot;text-footnotes&quot;&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.1&quot; class=&quot;footnum&quot; href=&quot;#fnr.1&quot; role=&quot;doc-backlink&quot;&gt;1&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot; role=&quot;doc-footnote&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;https://www.france24.com/en/live-news/20220327-abandoned-animals-join-ukraine-s-war-exodus&quot;&gt;https://www.france24.com/en/live-news/20220327-abandoned-animals-join-ukraine-s-war-exodus&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.2&quot; class=&quot;footnum&quot; href=&quot;#fnr.2&quot; role=&quot;doc-backlink&quot;&gt;2&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot; role=&quot;doc-footnote&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;https://gizmodo.com/e-inks-digital-posters-now-feature-improved-contrast-so-1848703392&quot;&gt;https://gizmodo.com/e-inks-digital-posters-now-feature-improved-contrast-so-1848703392&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;


&lt;/div&gt;
&lt;/div&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines I.24 避免相邻参数类型一样的情况下，交换其顺序，意义却不同</title>
   <link href="http://kimi.im/2022-03-29-cppcoreguidelines-i24"/>
   <updated>2022-03-29T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-i24</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
I.24: Avoid adjacent parameters that can be invoked by the same arguments in either order with different meaning
&lt;/p&gt;

&lt;p&gt;
&lt;b&gt;理由&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
两个相邻参数，如果类型相同，很容易顺序颠倒。比如
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-bad src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;copy_n&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;*&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;p&lt;/span&gt;, &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;*&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;q&lt;/span&gt;, &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;n&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;  &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// copy from [p:p + n) to [q:q + n)&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
这是K&amp;amp;R C风格接口的一个讨厌的变体，数据目标和数据来源参数很容易颠倒。
&lt;/p&gt;

&lt;p&gt;
把来源参数声明成 &lt;code&gt;const&lt;/code&gt; 就比较容易识别他们的关系了。因为，我们复制的时候，一般不会去改变数据来源。
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;copy_n&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;*&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;p&lt;/span&gt;, &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;*&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;q&lt;/span&gt;, &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;n&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;  &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// copy from [p:p + n) to [q:q + n)&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;
&lt;b&gt;例外&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
如果函数的计算过程不关心参数的顺序，那就不存在这个问题，就不需要 &lt;code&gt;const&lt;/code&gt;
修饰了：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;max&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;a&lt;/span&gt;, &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;b&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;
&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;
&lt;b&gt;替代方案&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
不要用指针传递数组。可以通过 &lt;code&gt;span&lt;/code&gt; 表示一个序列对象：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;copy_n&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;span&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;p&lt;/span&gt;, &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;span&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;q&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;  &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// copy from p to q&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
&lt;b&gt;替代方案&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
定义结构体，用结构体的成员名表示相应的参数：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;struct&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;SystemParams&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;string&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;config_file&lt;/span&gt;;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;string&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;output_path&lt;/span&gt;;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;seconds&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;timeout&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;initialize&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;SystemParams&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;p&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
因为调用的时候，要把参数填到带名字的成员变量中，这样可以明确参数的意义。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;强化策略&lt;/b&gt;
&lt;/p&gt;

&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;（简单）如果出现连续两个相同类型的参数，警告。&lt;/li&gt;
&lt;/ul&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines I.23 函数参数的数量不要太多</title>
   <link href="http://kimi.im/2022-03-28-cppcoreguidelines-i23"/>
   <updated>2022-03-28T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-i23</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
I.23: Keep the number of function arguments low
&lt;/p&gt;

&lt;p&gt;
&lt;b&gt;理由&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
参数的数量太多容易造成混乱。传递太多参数的性能成本也通常会很高。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;讨论&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
导致函数的参数太多，通常有两个理由：
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;缺少抽象。因为缺少抽象，本该组合在一起传递的参数对象被分散为单个的变量进行传递。因为一起传递的参数之间没有不变式限制，不仅参数的数量变多，参数之间也没有约束关系，容易出错。&lt;/li&gt;
&lt;li&gt;违背了“一个函数一个职责”的原则。函数的工作超越了其本该完成的单个任务。通常这时候就需要对该函数进行重构。&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;
&lt;b&gt;例子&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
标准库函数&lt;code&gt;merge()&lt;/code&gt;是我们能舒舒服服地处理参数的极限：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-bad src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;template&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;InputIterator1&lt;/span&gt;, &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;InputIterator2&lt;/span&gt;,
         &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;OutputIterator&lt;/span&gt;, &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Compare&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;OutputIterator&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;merge&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;InputIterator1&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;first1&lt;/span&gt;, &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;InputIterator1&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;last1&lt;/span&gt;,
                     &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;InputIterator2&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;first2&lt;/span&gt;, &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;InputIterator2&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;last2&lt;/span&gt;,
                     &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;OutputIterator&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;result&lt;/span&gt;, &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Compare&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;comp&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
因为“缺少抽象”，本该是传进一个范围（抽象），STL 却传进了迭代器对（未封装的组件值）。
&lt;/p&gt;

&lt;p&gt;
这里，我们有 4 个模板参数， 6 个函数参数。如果我们默认比较器参数为 “&amp;lt;”，则可以改写成下面代码：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-bad src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;template&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;InputIterator1&lt;/span&gt;, &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;InputIterator2&lt;/span&gt;, &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;OutputIterator&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;OutputIterator&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;merge&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;InputIterator1&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;first1&lt;/span&gt;, &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;InputIterator1&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;last1&lt;/span&gt;,
                     &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;InputIterator2&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;first2&lt;/span&gt;, &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;InputIterator2&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;last2&lt;/span&gt;,
                     &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;OutputIterator&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;result&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
这样降低了一些表面的复杂度，但是没有降低整体复杂度。要真正减少参数数量，我们需要把参数捆绑到更高层的抽象：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;template&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;InputRange1&lt;/span&gt;, &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;InputRange2&lt;/span&gt;, &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;OutputIterator&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;OutputIterator&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;merge&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;InputRange1&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;r1&lt;/span&gt;, &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;InputRange2&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;r2&lt;/span&gt;, &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;OutputIterator&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;result&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
把参数分组打包是一种常用的减少参数数量的技术。并且还可以提升可检查性。
&lt;/p&gt;

&lt;p&gt;
另外，我们也可以用ISO TS中的定义概念，指定这三个类型必须能用于合并操作：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-C++&quot;&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Mergeable&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;In1, In2, Out&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;OutputIterator&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;merge&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;In1&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;r1&lt;/span&gt;, &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;In2&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;r2&lt;/span&gt;, &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Out&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;result&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;
&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;
&lt;b&gt;例子&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
本指南的安全规范建议修改以下函数
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-bad src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;*&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;some_ints&lt;/span&gt;, &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;some_ints_length&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;  &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// BAD: C style, unsafe&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
改为
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;gsl&lt;/span&gt;::&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;span&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;some_ints&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;              &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// GOOD: safe, bounds-checked&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
此处使用抽象，更安全，更可靠，同时减少了参数的数量。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;注意&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
多少参数算太多？尽量少于 4 个参数。尽管有的函数需要用四个参数很好的表达，但是不多。有一些指令集的 ABI 只提供四个寄存器用来存取参数。如果参数太多，就要用到内存堆栈存取参数，这样就多了额外的堆栈寄存器操作和内存存取操作，产生额外的性能损耗。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;替代方案&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
用更好的抽象。把参数分组到有意义的对象，（以值或引用）传递对象。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;替代方案&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
用默认参数或重载。这样常用的调用要少一些参数。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;强化&lt;/b&gt;
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;函数声明了两个类型一样的迭代器或指针，而没用 &lt;code&gt;range&lt;/code&gt; 或 &lt;code&gt;view&lt;/code&gt; ，警告。&lt;/li&gt;
&lt;/ul&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines I.22 避免对全局对象进行复杂的初始化</title>
   <link href="http://kimi.im/2022-03-27-cppcoreguidelines-i22"/>
   <updated>2022-03-27T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-i22</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
I.22: Avoid complex initialization of global objects
&lt;/p&gt;

&lt;p&gt;
&lt;b&gt;理由&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
语言标准对复杂的初始化过程的执行顺序没有进行规定。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;例子&lt;/b&gt;
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-C++&quot;&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;// file1.c&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;extern&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;X&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;x&lt;/span&gt;;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Y&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;y&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;x&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// read x; write y&lt;/span&gt;

&lt;span style=&quot;color: #3F7F5F;&quot;&gt;// file2.c&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;extern&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Y&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;y&lt;/span&gt;;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;X&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;x&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;g&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;y&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// read y; write x&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
因为 &lt;code&gt;x&lt;/code&gt; 和 &lt;code&gt;y&lt;/code&gt; 在不同的编译单元里，&lt;code&gt;f()&lt;/code&gt;和 &lt;code&gt;g()&lt;/code&gt; 的调用顺序没有特定的规定标准。其中一个函数会可能会访问到一个没有初始化的 &lt;code&gt;const&lt;/code&gt; 变量。这里我们可以看到，初始化顺序问题会出现在全局的对象上，且不仅仅发生在全局变量上，也可能发生在全局常量上。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;注意&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
在并发执行的代码中初始化顺序的问题会更加难处理。最好避免使用全局对象。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;强化&lt;/b&gt;
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;标注调用了不是 &lt;code&gt;constexpr&lt;/code&gt; 函数的全局对象初始化函数&lt;/li&gt;
&lt;li&gt;标注访问 &lt;code&gt;extern&lt;/code&gt; 对象的全局对象初始化函数&lt;/li&gt;
&lt;/ul&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines I.13 不要以单独指针传递数组</title>
   <link href="http://kimi.im/2022-03-26-cppcoreguidelines-i13"/>
   <updated>2022-03-26T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-i13</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
I.13: Do not pass an array as a single pointer
&lt;/p&gt;

&lt;p&gt;
&lt;b&gt;理由&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
接口的参数如果是用数组指针+数组大小的方式传递，很容易出错。我们只能依靠其他途径获取指针所指的数组的大小。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;例子&lt;/b&gt;
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-bad src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;copy_n&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;*&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;p&lt;/span&gt;, &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;*&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;q&lt;/span&gt;, &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;n&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// copy from [p:p+n) to [q:q+n)&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
如果 &lt;code&gt;q&lt;/code&gt; 的元素数少于 &lt;code&gt;n&lt;/code&gt; 会怎么样？我们会覆盖一些无关的内存。如果 &lt;code&gt;p&lt;/code&gt; 的长度小于 &lt;code&gt;n&lt;/code&gt; 会怎么样？我们可能复制了一些无关的内存。任何一种情况，都导致了未定义的行为，很可能是很难对付的一种 bug。
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-bad src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;my_copy_n&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;char&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;*&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;p&lt;/span&gt;, &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;char&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;*&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;q&lt;/span&gt;, &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;n&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;for&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;; n&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;0&lt;/span&gt; ; &lt;span style=&quot;color: #000000;&quot;&gt;n&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;--&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;
        &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;q&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;*&lt;/span&gt;p; &lt;span style=&quot;color: #000000;&quot;&gt;p&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;++&lt;/span&gt;; &lt;span style=&quot;color: #000000;&quot;&gt;q&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;++&lt;/span&gt;;
    &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;main&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;char&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;pp&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;[]&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;hello&quot;&lt;/span&gt;;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;char&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;qq&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;[]&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;hel&quot;&lt;/span&gt;;
    cout &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; qq &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; endl;
    &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;my_copy_n&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;pp, qq, &lt;span style=&quot;color: #110099;&quot;&gt;5&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
    cout &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; qq &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; endl;

    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;char&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;pp1&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;[]&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;hel&quot;&lt;/span&gt;;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;char&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;qq1&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;[]&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;hello&quot;&lt;/span&gt;;
    cout &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; qq1 &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; endl;
    &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;my_copy_n&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;pp1, qq1, &lt;span style=&quot;color: #110099;&quot;&gt;5&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
    cout &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; qq1;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;0&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;pre class=&quot;example&quot;&gt;
hel
helloello
hello
hel
&lt;/pre&gt;



&lt;p&gt;
&lt;b&gt;替代方案&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
考虑显式地用 &lt;code&gt;span&lt;/code&gt; 作为参数。
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;copy&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;span&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;r&lt;/span&gt;, &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;span&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;T&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;r2&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// copy r to r2&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;
&lt;b&gt;例子&lt;/b&gt;
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-bad src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;draw&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Shape&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;*&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;p&lt;/span&gt;, &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;n&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;  &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// poor interface; poor code&lt;/span&gt;
&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Circle&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;arr&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;10&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;]&lt;/span&gt;;
&lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ...&lt;/span&gt;
&lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;draw&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;arr, &lt;span style=&quot;color: #110099;&quot;&gt;10&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
给参数 &lt;code&gt;n&lt;/code&gt; 的值如果是 10 可能会出错： C 语言里数组下标的不成文的习俗是
[0:n) 即包括 0 ，不包括 n。更坏的情况是，调用&lt;code&gt;draw()&lt;/code&gt;函数在编译时没有问题，数组隐式的转换成了指针（数组衰减），另一个隐式转换： &lt;code&gt;Circle&lt;/code&gt; 转成了 &lt;code&gt;Shape&lt;/code&gt; 。 &lt;code&gt;draw()&lt;/code&gt; 函数无法逐个访问数组的元素，因为无从知道元素本身的大小（ &lt;code&gt;Shape&lt;/code&gt; 和 &lt;code&gt;Circle&lt;/code&gt; 大小不一）。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;替代方案&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
使用提供支持作用的类，确保元素数量可知，避免危险的隐式转换。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;例子&lt;/b&gt;
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;draw2&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;span&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Circle&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;
&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Circle&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;arr&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;10&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;]&lt;/span&gt;;
&lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ...&lt;/span&gt;
&lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;draw2&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;span&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Circle&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;arr&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;  &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// deduce the number of elements&lt;/span&gt;
&lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;draw2&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;arr&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// deduce the element type and array size&lt;/span&gt;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;draw3&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;span&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Shape&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;
&lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;draw3&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;arr&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// error: cannot convert Circle[10] to span&amp;lt;Shape&amp;gt;&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
&lt;code&gt;draw2()&lt;/code&gt; 得到与&lt;code&gt;draw()&lt;/code&gt;同样数量的信息。但是不会再隐式转换 &lt;code&gt;Circle&lt;/code&gt; 类型。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;例外&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
使用 &lt;code&gt;zstring&lt;/code&gt; 和 &lt;code&gt;czstring&lt;/code&gt; 表示 C 风格的&lt;code&gt;\0&lt;/code&gt;结尾的字符串。这时候，要用
GSL 的&lt;code&gt;std::string_view&lt;/code&gt;或 &lt;code&gt;span&amp;lt;char&amp;gt;&lt;/code&gt; 来避免错误的范围。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;强化&lt;/b&gt;
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;（简单）检查隐式的将数组类型转换成指针类型的地方，如果发现，发起警告。允许例外情况： &lt;code&gt;zstring&lt;/code&gt; 和 &lt;code&gt;czstring&lt;/code&gt; 指针。&lt;/li&gt;
&lt;li&gt;（简单）出现指针类型的数值计算的代码，发起警告。允许例外情况：
&lt;code&gt;zstring&lt;/code&gt; 和 &lt;code&gt;czstring&lt;/code&gt; 指针。&lt;/li&gt;
&lt;/ul&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines I.12 用 not_null 声明不能为 null 的指针</title>
   <link href="http://kimi.im/2022-03-25-cppcoreguidelines-i12"/>
   <updated>2022-03-25T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-i12</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
I.12: Declare a pointer that must not be null as &lt;code&gt;not_null&lt;/code&gt;
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;理由&lt;/b&gt;
&lt;/p&gt;

&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;避免对空指针进行取值操作，导致错误。&lt;/li&gt;
&lt;li&gt;无需对空指针进行多余检查，提升性能。&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;
&lt;b&gt;例子&lt;/b&gt;
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-bad src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;length&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;char&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;*&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;p&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;            &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &amp;#19981;&amp;#28165;&amp;#26970; length(nullptr) &amp;#26159;&amp;#21542;&amp;#27491;&amp;#30830;&lt;/span&gt;
&lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;length&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #110099; font-weight: bold;&quot;&gt;nullptr&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;                      &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// OK?&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
以上例子，我们无从判断参数 &lt;code&gt;p&lt;/code&gt; 的取值能否是空指针。 
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;length&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;not_null&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;char&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;p&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;  &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &amp;#26356;&amp;#22909;&amp;#65306;&amp;#21487;&amp;#20197;&amp;#35748;&amp;#20026; p &amp;#38750;&amp;#31354;&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;length&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;char&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;*&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;p&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;            &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// p &amp;#21487;&amp;#20197;&amp;#26159;&amp;#31354;&amp;#25351;&amp;#38024;&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
在代码中清晰表明代码的意图，可以让软件工程师和以及相关工具提供更明确的诊断信息。比如可以通过静态检测工具发现某些错误。还可以提升性能，比如减少因为判断指针是否为空的产生的逻辑分支。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;注意&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
GSL 中定义了 &lt;code&gt;not_null&lt;/code&gt;
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;注意&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
&lt;code&gt;const char*&lt;/code&gt; 这种指向 &lt;code&gt;char&lt;/code&gt; 的指针用来表示 C 风格的以&lt;code&gt;\0&lt;/code&gt;结束的字符串。这种用法不太直接，容易误解和出错。建议使用 &lt;code&gt;czstring&lt;/code&gt; 。
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-C++&quot;&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;// we can assume that p cannot be nullptr&lt;/span&gt;
&lt;span style=&quot;color: #3F7F5F;&quot;&gt;// we can assume that p points to a zero-terminated array of characters&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;length&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;not_null&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;zstring&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;p&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;
&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;
&lt;b&gt;注意&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
这里&lt;code&gt;length()&lt;/code&gt;只是举个例子，实际代码中应该用标准库里的 &lt;code&gt;std::strlen()&lt;/code&gt;
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;强化&lt;/b&gt;
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;（简单，基础）如果函数会在各种分支中检查传入参数的指针是否为空指针。建议把参数声明为&lt;code&gt;not_null&lt;/code&gt;。&lt;/li&gt;
&lt;li&gt;（复杂）如果函数在各个返回路径都要确保返回的不是空指针，建议把返回类型声明为 &lt;code&gt;not_null&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines I.11 切不可通过原始指针（T*）或引用（T&）转移所有权</title>
   <link href="http://kimi.im/2022-03-25-cppcoreguidelines-i11"/>
   <updated>2022-03-25T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-i11</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
I.11: Never transfer ownership by a raw pointer (&lt;code&gt;T*&lt;/code&gt;) or reference (&lt;code&gt;T&amp;amp;&lt;/code&gt;)
&lt;/p&gt;

&lt;p&gt;
&lt;b&gt;理由&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
如果不清楚某对象的所有权是属于调用者还是被调用者，可能会导致内存泄漏，或不完全的对象析构。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;例子&lt;/b&gt;
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-bad src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;struct&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;X&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;x&lt;/span&gt;; &lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;
&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;X&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;*&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;compute&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;y&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// don&apos;t&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;X&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;*&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;res&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;X&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;{}&lt;/span&gt;;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ...&lt;/span&gt;
    cout &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; res &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; endl;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; res;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;main&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;auto&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;xx&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;compute&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
    cout &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; xx;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;0&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;pre class=&quot;example&quot;&gt;
0x208072a27f0
0x208072a27f0
&lt;/pre&gt;



&lt;p&gt;
谁来删除函数 &lt;code&gt;compute&lt;/code&gt; 返回的 &lt;code&gt;X&lt;/code&gt; ？如果 &lt;code&gt;compute&lt;/code&gt; 返回的是引用，则此问题更难定位。考虑数值返回。如果返回结果很大，可以使用移动机制。
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-C++&quot;&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;vector&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;double&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;compute&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;x&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;  &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// good&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;vector&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;double&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;res&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;10000&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ...&lt;/span&gt;
    &lt;span style=&quot;color: #000000;&quot;&gt;res&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;]&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; x;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; res;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;main&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;auto&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;xx&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;compute&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;999&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
    cout &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; xx&lt;span style=&quot;color: #7388d6;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;]&lt;/span&gt;;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;0&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;pre class=&quot;example&quot;&gt;
999
&lt;/pre&gt;



&lt;p&gt;
&lt;b&gt;替代方案&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
通过智能型指针传递所有权。比如&lt;code&gt;unique_ptr&lt;/code&gt;（所有权互斥）， &lt;code&gt;shared_ptr&lt;/code&gt;
（所有权共享）。然而，这个方法并不优雅，相比返回对象本身，性能可能会差。
&lt;/p&gt;

&lt;p&gt;
&lt;b&gt;替代方案&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
有时候因为 ABI 兼容要求，无法修改老的代码，或因为资源不足。这时，可以使用 GSL 的 &lt;code&gt;owner&lt;/code&gt; 标注指针所有者。
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;#include&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&amp;lt;gsl/gsl&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;using&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;namespace&lt;/span&gt; gsl;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;struct&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;X&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;x&lt;/span&gt;;&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;
&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;owner&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;X&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;compute&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;x&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// It is now clear that ownership is transferred&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;owner&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;X&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;res&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;X&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;{}&lt;/span&gt;;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ...&lt;/span&gt;
    cout &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; res &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; endl;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; res;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;main&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;auto&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;xx&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;compute&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;10&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
    cout &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; xx;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;0&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;pre class=&quot;example&quot;&gt;
0x20d54de27f0
0x20d54de27f0
&lt;/pre&gt;


&lt;p&gt;
这里我们告诉代码分析工具， &lt;code&gt;res&lt;/code&gt; 是一个 &lt;code&gt;owner&lt;/code&gt; 。它的值必须删除或转移给其他所有者。这里通过 &lt;code&gt;return&lt;/code&gt; 传递所有权。
&lt;/p&gt;

&lt;p&gt;
&lt;b&gt;注意&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
以原始指针传递的对象，其所有者默认就是调用者。因此，其生存周期由调用者处理。从另一个角度看，所有权转移的接口比指针传递接口用的更少，所以默认是不进行所有权转移的。
&lt;/p&gt;

&lt;p&gt;
&lt;b&gt;强化&lt;/b&gt;
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;（简单） &lt;code&gt;delete&lt;/code&gt; 非 &lt;code&gt;owner&amp;lt;T&amp;gt;&lt;/code&gt; 的原始指针的时候，发出警告。建议使用标准库的资源处理程序，或使用 &lt;code&gt;owner&amp;lt;T&amp;gt;&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;（简单） 在重置或显示删除有主指针的时候，发出警告。&lt;/li&gt;
&lt;li&gt;（简单）返回值是 &lt;code&gt;new&lt;/code&gt; 或函数调用返回值是 &lt;code&gt;owner&lt;/code&gt; 指针但是赋给原始指针或无主引用的时候，发出警告。&lt;/li&gt;
&lt;/ul&gt;
</content>
 </entry>
 
 <entry>
   <title>单词本：pretzel</title>
   <link href="http://kimi.im/2022-03-25-english-pretzel"/>
   <updated>2022-03-25T00:00:00+00:00</updated>
   <id>http://kimi.im/english-pretzel</id>
   <content type="html">&lt;p&gt;
今天的主题是食物。德国有种蝴蝶结样子的椒盐卷饼，叫 pretzel。可以看到，有 tz 组合出现的词，很多是来自德语的。
&lt;/p&gt;

&lt;p&gt;
原来我心爱的小女朋友最爱的碱水面包，英文名叫 pretzel 呀。今天才知道。
&lt;/p&gt;

&lt;p&gt;
pretzel 好像有两种款式，一种是碱水面包款，表皮棕色，撒了些盐。另一种是饼干款，比较香脆。
&lt;/p&gt;

&lt;p&gt;
Pretzel was so long that he could in fact twist his body into the
shape of his namesake.
&lt;/p&gt;

&lt;p&gt;
因为很硬，据说 2002年，乔治布什因吃椒盐卷饼而鲠喉晕倒。不知真假。
&lt;/p&gt;

&lt;p&gt;
有传言称椒盐卷饼的形状是效仿一个僧侣在交叉双手祈祷。所以，难怪 pretzel
和拉丁语 brachiatus 形状和发音有些像，表示像手臂一样。brachium 则是拉丁语手臂的意思。而法语中，手臂一词则很好的继承了拉丁语：bras
&lt;/p&gt;

&lt;p&gt;
好了，总结一下：
&lt;/p&gt;

&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;pretzel 德国椒盐卷饼，德国碱水面包&lt;/li&gt;
&lt;li&gt;brachium 拉丁语：手臂&lt;/li&gt;
&lt;li&gt;bras 法语：手臂&lt;/li&gt;
&lt;li&gt;arm 英语：手臂&lt;/li&gt;
&lt;li&gt;der Arm 德语：手臂&lt;/li&gt;
&lt;li&gt;branch 英语：分支、枝干，其实来自拉丁语 brachium&lt;/li&gt;
&lt;/ul&gt;
</content>
 </entry>
 
 <entry>
   <title>经典 OPC 与 OPC UA</title>
   <link href="http://kimi.im/2022-03-24-opc-classic-vs-opc-ua"/>
   <updated>2022-03-24T00:00:00+00:00</updated>
   <id>http://kimi.im/opc-classic-vs-opc-ua</id>
   <content type="html">&lt;p&gt;
当前蓬勃发展的 OPC UA 继承、延续、优化、扩展了老的 OPC 标准。正如其名字“开放平台通信统一架构（Open Platform Communication Unified
Architecture ）”所暗示的，新的标准更加开放，更加平台中立，更关注通信标准，更加统一。
&lt;/p&gt;

&lt;p&gt;
而老的 OPC 则是 OLE for Process Control 的缩写，而 OLE 则是“对象连接与嵌入” Object Linking and Embedding 的缩写。OLE 是一种面向对象的技术，利用这种技术可开发可重复使用的软件组件（COM）。OLE 从多媒体借鉴而来，是 Windows 的一组服务功能，提供了一种以源于不同应用软件的信息建立复合文档的方法。因此，OLE 只支持 Windows 系统。因为，在上世纪 90 年代，工业领域大部分都在用 Windows 操作系统，因此自动化厂商自然跟随主流，选择微软的 COM 和 DCOM 技术作为数据访问标准。
&lt;/p&gt;

&lt;div align=&quot;center&quot;&gt;
&lt;svg
   version=&quot;1.1&quot;
   id=&quot;svg2&quot;
   xml:space=&quot;preserve&quot;
   width=&quot;538.56&quot;
   height=&quot;353.28&quot;
   viewBox=&quot;0 0 538.56 353.28&quot;
   sodipodi:docname=&quot;OPC Classic vs OPC UA.drawio.pdf&quot;
   xmlns:inkscape=&quot;http://www.inkscape.org/namespaces/inkscape&quot;
   xmlns:sodipodi=&quot;http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd&quot;
   xmlns=&quot;http://www.w3.org/2000/svg&quot;
   xmlns:svg=&quot;http://www.w3.org/2000/svg&quot;&gt;&lt;defs
     id=&quot;defs6&quot;&gt;&lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath16&quot;&gt;&lt;path
         d=&quot;M 0,0 H 1683.3333 V 1103.2859 H 0 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path14&quot; /&gt;&lt;/clipPath&gt;&lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath28&quot;&gt;&lt;path
         d=&quot;M 0,0 H 1683.3333 V 1097.306 H 0 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path26&quot; /&gt;&lt;/clipPath&gt;&lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath76&quot;&gt;&lt;path
         d=&quot;m 122.58732,224.2451 h 149.49673 v 137.537 H 122.58732 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path74&quot; /&gt;&lt;/clipPath&gt;&lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath98&quot;&gt;&lt;path
         d=&quot;M 0,0 H 1683.3333 V 1097.306 H 0 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path96&quot; /&gt;&lt;/clipPath&gt;&lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath126&quot;&gt;&lt;path
         d=&quot;M 122.58732,941.82941 H 272.08405 V 1079.3665 H 122.58732 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path124&quot; /&gt;&lt;/clipPath&gt;&lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath148&quot;&gt;&lt;path
         d=&quot;M 0,0 H 1683.3333 V 1097.306 H 0 Z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path146&quot; /&gt;&lt;/clipPath&gt;&lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath246&quot;&gt;&lt;path
         d=&quot;m 1079.3665,212.28537 h 149.4967 v 137.53699 h -149.4967 z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path244&quot; /&gt;&lt;/clipPath&gt;&lt;clipPath
       clipPathUnits=&quot;userSpaceOnUse&quot;
       id=&quot;clipPath262&quot;&gt;&lt;path
         d=&quot;m 1079.3665,929.86969 h 149.4967 v 137.53701 h -149.4967 z&quot;
         clip-rule=&quot;evenodd&quot;
         id=&quot;path260&quot; /&gt;&lt;/clipPath&gt;&lt;/defs&gt;&lt;sodipodi:namedview
     id=&quot;namedview4&quot;
     pagecolor=&quot;#ffffff&quot;
     bordercolor=&quot;#666666&quot;
     borderopacity=&quot;1.0&quot;
     inkscape:pageshadow=&quot;2&quot;
     inkscape:pageopacity=&quot;0.0&quot;
     inkscape:pagecheckerboard=&quot;0&quot; /&gt;&lt;g
     id=&quot;g8&quot;
     inkscape:groupmode=&quot;layer&quot;
     inkscape:label=&quot;OPC Classic vs OPC UA.drawio&quot;
     transform=&quot;matrix(0.31999998,0,0,0.31999998,0,1.2165333e-5)&quot;&gt;&lt;g
       id=&quot;g10&quot;&gt;&lt;g
         id=&quot;g12&quot;
         clip-path=&quot;url(#clipPath16)&quot;&gt;&lt;g
           id=&quot;g18&quot;
           transform=&quot;scale(2.9899347)&quot;&gt;&lt;path
             d=&quot;M 0,0 H 563 V 369 H 0 Z&quot;
             style=&quot;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
             id=&quot;path20&quot; /&gt;&lt;/g&gt;&lt;/g&gt;&lt;/g&gt;&lt;g
       id=&quot;g22&quot;&gt;&lt;g
         id=&quot;g24&quot;
         clip-path=&quot;url(#clipPath28)&quot;&gt;&lt;g
           id=&quot;g30&quot;
           transform=&quot;matrix(2.9899347,0,0,2.9899347,1.4949673,1.4949673)&quot;&gt;&lt;path
             d=&quot;M 121,131.36999 V 238.63&quot;
             style=&quot;fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
             id=&quot;path32&quot; /&gt;&lt;path
             d=&quot;m 121,126.12 3.5,6.99999 -3.5,-1.75 -3.5,1.75 z&quot;
             style=&quot;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
             id=&quot;path34&quot; /&gt;&lt;path
             d=&quot;m 121,126.12 3.5,6.99999 -3.5,-1.75 -3.5,1.75 z&quot;
             style=&quot;fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
             id=&quot;path36&quot; /&gt;&lt;path
             d=&quot;m 121,243.88 -3.5,-7 3.5,1.75 3.5,-1.75 z&quot;
             style=&quot;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
             id=&quot;path38&quot; /&gt;&lt;path
             d=&quot;m 121,243.88 -3.5,-7 3.5,1.75 3.5,-1.75 z&quot;
             style=&quot;fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
             id=&quot;path40&quot; /&gt;&lt;/g&gt;&lt;g
           id=&quot;g42&quot;
           transform=&quot;scale(2.9899347)&quot;&gt;&lt;path
             d=&quot;m 105,172 h 33 v 27 h -33 z&quot;
             style=&quot;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
             id=&quot;path44&quot; /&gt;&lt;text
             transform=&quot;translate(108.67187,182)&quot;
             style=&quot;font-variant:normal;font-weight:normal;font-size:11px;font-family:Arial;-inkscape-font-specification:ArialMT;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
             id=&quot;text48&quot;&gt;&lt;tspan
               x=&quot;0 7.9438477 16.5&quot;
               y=&quot;0&quot;
               sodipodi:role=&quot;line&quot;
               id=&quot;tspan46&quot;&gt;COM&lt;/tspan&gt;&lt;/text&gt;&lt;text
             transform=&quot;translate(104.70313,196)&quot;
             style=&quot;font-variant:normal;font-weight:normal;font-size:11px;font-family:Arial;-inkscape-font-specification:ArialMT;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
             id=&quot;text52&quot;&gt;&lt;tspan
               x=&quot;0 7.9438477 15.887695 24.443848&quot;
               y=&quot;0&quot;
               sodipodi:role=&quot;line&quot;
               id=&quot;tspan50&quot;&gt;DCOM&lt;/tspan&gt;&lt;/text&gt;&lt;/g&gt;&lt;g
           id=&quot;g54&quot;
           transform=&quot;matrix(2.9899347,0,0,2.9899347,1.4949673,1.4949673)&quot;&gt;&lt;path
             d=&quot;m 19,5 h 204 c 1.1819,0 2.35243,0.1152883 3.51163,0.3458648 1.15916,0.230576 2.28471,0.5720105 3.37665,1.0243029 1.09193,0.4522925 2.12924,1.006752 3.11195,1.6633787 0.98271,0.6566267 1.89194,1.4028035 2.72768,2.2385316 0.83572,0.835726 1.58189,1.744946 2.23852,2.727658 0.65662,0.982711 1.21108,2.020031 1.66338,3.111962 0.45228,1.091931 0.79373,2.217489 1.0243,3.376677 C 240.8847,20.64756 241,21.818102 241,23 v 84 c 0,1.18189 -0.1153,2.35243 -0.34587,3.51161 -0.23059,1.15919 -0.57204,2.28475 -1.02432,3.37667 -0.4523,1.09193 -1.00676,2.12925 -1.66338,3.11196 -0.65663,0.98272 -1.4028,1.89193 -2.23852,2.72767 -0.83574,0.83572 -1.74497,1.5819 -2.72768,2.23853 -0.98271,0.65661 -2.02002,1.21107 -3.11195,1.66337 -1.09194,0.45229 -2.21749,0.79373 -3.37667,1.02431 C 225.35243,124.8847 224.1819,124.99999 223,125 H 19 c -1.181898,-1e-5 -2.352442,-0.1153 -3.511627,-0.34588 -1.159187,-0.23058 -2.284746,-0.57202 -3.376676,-1.02431 -1.09193,-0.4523 -2.1292513,-1.00676 -3.1119621,-1.66338 -0.9827109,-0.65662 -1.8919301,-1.4028 -2.7276573,-2.23852 -0.8357273,-0.83574 -1.5819045,-1.74495 -2.2385312,-2.72767 -0.6566267,-0.98271 -1.211086,-2.02003 -1.6633782,-3.11196 C 1.9178758,112.79636 1.5764414,111.6708 1.3458648,110.51161 1.1152881,109.35243 0.99999994,108.18189 1,107 V 23 c -6e-8,-1.181898 0.1152881,-2.35244 0.3458648,-3.511625 0.2305766,-1.159188 0.572011,-2.284746 1.0243034,-3.376677 C 2.8224604,15.019767 3.3769197,13.982446 4.0335464,12.999735 4.6901731,12.017024 5.4363503,11.107804 6.2720776,10.272078 7.1078048,9.4363499 8.017024,8.6901731 8.9997358,8.0335464 9.9824467,7.3769197 11.019767,6.8224602 12.111697,6.3701677 13.203627,5.9178753 14.329186,5.5764408 15.488373,5.3458648 16.647558,5.1152883 17.818102,5 19,5 Z&quot;
             style=&quot;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
             id=&quot;path56&quot; /&gt;&lt;path
             d=&quot;m 19,5 h 204 c 1.1819,0 2.35243,0.1152883 3.51163,0.3458648 1.15916,0.230576 2.28471,0.5720105 3.37665,1.0243029 1.09193,0.4522925 2.12924,1.006752 3.11195,1.6633787 0.98271,0.6566267 1.89194,1.4028035 2.72768,2.2385316 0.83572,0.835726 1.58189,1.744946 2.23852,2.727658 0.65662,0.982711 1.21108,2.020031 1.66338,3.111962 0.45228,1.091931 0.79373,2.217489 1.0243,3.376677 C 240.8847,20.64756 241,21.818102 241,23 v 84 c 0,1.18189 -0.1153,2.35243 -0.34587,3.51161 -0.23059,1.15919 -0.57204,2.28475 -1.02432,3.37667 -0.4523,1.09193 -1.00676,2.12925 -1.66338,3.11196 -0.65663,0.98272 -1.4028,1.89193 -2.23852,2.72767 -0.83574,0.83572 -1.74497,1.5819 -2.72768,2.23853 -0.98271,0.65661 -2.02002,1.21107 -3.11195,1.66337 -1.09194,0.45229 -2.21749,0.79373 -3.37667,1.02431 C 225.35243,124.8847 224.1819,124.99999 223,125 H 19 c -1.181898,-1e-5 -2.352442,-0.1153 -3.511627,-0.34588 -1.159187,-0.23058 -2.284746,-0.57202 -3.376676,-1.02431 -1.09193,-0.4523 -2.1292513,-1.00676 -3.1119621,-1.66338 -0.9827109,-0.65662 -1.8919301,-1.4028 -2.7276573,-2.23852 -0.8357273,-0.83574 -1.5819045,-1.74495 -2.2385312,-2.72767 -0.6566267,-0.98271 -1.211086,-2.02003 -1.6633782,-3.11196 C 1.9178758,112.79636 1.5764414,111.6708 1.3458648,110.51161 1.1152881,109.35243 0.99999994,108.18189 1,107 V 23 c -6e-8,-1.181898 0.1152881,-2.35244 0.3458648,-3.511625 0.2305766,-1.159188 0.572011,-2.284746 1.0243034,-3.376677 C 2.8224604,15.019767 3.3769197,13.982446 4.0335464,12.999735 4.6901731,12.017024 5.4363503,11.107804 6.2720776,10.272078 7.1078048,9.4363499 8.017024,8.6901731 8.9997358,8.0335464 9.9824467,7.3769197 11.019767,6.8224602 12.111697,6.3701677 13.203627,5.9178753 14.329186,5.5764408 15.488373,5.3458648 16.647558,5.1152883 17.818102,5 19,5 Z&quot;
             style=&quot;fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
             id=&quot;path58&quot; /&gt;&lt;path
             d=&quot;M 61,25 H 181 V 65 H 61 Z&quot;
             style=&quot;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
             id=&quot;path60&quot; /&gt;&lt;path
             d=&quot;M 61,25 H 181 V 65 H 61 Z&quot;
             style=&quot;fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
             id=&quot;path62&quot; /&gt;&lt;/g&gt;&lt;g
           id=&quot;g64&quot;
           transform=&quot;scale(2.9899347)&quot;&gt;&lt;text
             transform=&quot;translate(97.984375,49)&quot;
             style=&quot;font-variant:normal;font-weight:normal;font-size:12px;font-family:Arial;-inkscape-font-specification:ArialMT;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
             id=&quot;text68&quot;&gt;&lt;tspan
               x=&quot;0 9.3339844 17.337891 26.003906 29.337891 38.003906&quot;
               y=&quot;0&quot;
               sodipodi:role=&quot;line&quot;
               id=&quot;tspan66&quot;&gt;OPC DA&lt;/tspan&gt;&lt;/text&gt;&lt;/g&gt;&lt;/g&gt;&lt;/g&gt;&lt;g
       id=&quot;g70&quot;&gt;&lt;g
         id=&quot;g72&quot;
         clip-path=&quot;url(#clipPath76)&quot;&gt;&lt;g
           id=&quot;g78&quot;
           transform=&quot;matrix(2.9899347,0,0,2.983449,122.58732,224.2451)&quot;&gt;&lt;path
             d=&quot;M 32.400002,36.5 H 18.799999 c 1.600001,5.799999 -0.6,6.599998 -10.1999996,6.599998 v 3 H 41.199997 v -3 c -9.5,0 -10.4,-0.799999 -8.799999,-6.599998&quot;
             style=&quot;fill:#7a7a7a;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
             id=&quot;path80&quot; /&gt;&lt;path
             d=&quot;M 47,0 H 2.7 C 1.2,0 0,1.2999999 0,2.8 V 33.700001 C 0,35.200001 1.2,36.5 2.7,36.5 H 47 c 1.5,0 3,-1.299999 3,-2.799999 V 2.8 C 50,1.2999999 48.5,0 47,0 M 46.200001,3.8 V 32.599998 H 3.8 L 3.8,3.8 46.200001,3.7 Z&quot;
             style=&quot;fill:#a0a1a2;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
             id=&quot;path82&quot; /&gt;&lt;path
             d=&quot;M 3.8,3.8 H 46.099999 V 32.700002 H 3.8 Z&quot;
             style=&quot;fill:#59b4d9;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
             id=&quot;path84&quot; /&gt;&lt;path
             d=&quot;M 3.8,32.700001 V 3.8 L 42.5,3.7 47,0 H 2.7 C 1.2,0 0,1.2999999 0,2.8 V 33.700001 C 0,35.200001 1.2,36.5 2.7,36.5 h 1.1000002 l 4.5999994,-3.799999 z&quot;
             style=&quot;fill:#ffffff;fill-opacity:0.2;fill-rule:nonzero;stroke:none&quot;
             id=&quot;path86&quot; /&gt;&lt;path
             d=&quot;M 25.5,2.0999999 C 25.5058,2.2956698 25.43956,2.4627151 25.301134,2.601136 25.162712,2.7395568 24.995668,2.8058448 24.799999,2.8 24.604328,2.8058448 24.437283,2.7395566 24.298862,2.6011357 24.160442,2.4627147 24.094154,2.2956693 24.099998,2.0999999 24.094152,1.9043304 24.16044,1.737285 24.298862,1.5988641 24.437284,1.460443 24.60433,1.3941549 24.799999,1.3999999 c 0.195669,-0.00585 0.362713,0.060443 0.501135,0.1988641 0.13842,0.1384209 0.204708,0.3054663 0.198866,0.5011359&quot;
             style=&quot;fill:#b8d432;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
             id=&quot;path88&quot; /&gt;&lt;path
             d=&quot;M 35.700001,7.3000002 25.9,9 v 8 h 9.800001 z m -22,3.0999998 V 17 H 23.5 V 9.1000004 Z m 0,15.800001 L 23.5,27.5 v -8 h -9.8 z m 22,3.1 V 19.5 h -9.799999 v 8.1 z&quot;
             style=&quot;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
             id=&quot;path90&quot; /&gt;&lt;/g&gt;&lt;/g&gt;&lt;/g&gt;&lt;g
       id=&quot;g92&quot;&gt;&lt;g
         id=&quot;g94&quot;
         clip-path=&quot;url(#clipPath98)&quot;&gt;&lt;g
           id=&quot;g100&quot;
           transform=&quot;matrix(2.9899347,0,0,2.9899347,1.4949673,1.4949673)&quot;&gt;&lt;path
             d=&quot;m 19,245 h 204 c 1.1819,2e-5 2.35243,0.1153 3.51163,0.34586 1.15916,0.23057 2.28471,0.572 3.37665,1.02429 1.09193,0.45228 2.12924,1.00674 3.11195,1.66337 0.98271,0.65664 1.89194,1.40281 2.72768,2.23853 0.83572,0.83571 1.58189,1.74492 2.23852,2.72763 0.65662,0.98271 1.21108,2.02005 1.66338,3.11198 0.45228,1.09192 0.79373,2.21747 1.0243,3.37668 C 240.8847,260.64755 241,261.81808 241,263 v 84 c 0,1.18188 -0.1153,2.35242 -0.34587,3.51163 -0.23059,1.15918 -0.57204,2.28473 -1.02432,3.37668 -0.4523,1.09191 -1.00676,2.12921 -1.66338,3.1119 -0.65663,0.98273 -1.4028,1.89197 -2.23852,2.7277 -0.83574,0.83572 -1.74497,1.5819 -2.72768,2.23852 -0.98271,0.65662 -2.02002,1.21106 -3.11195,1.66336 -1.09194,0.4523 -2.21749,0.79376 -3.37667,1.02432 C 225.35243,364.8847 224.1819,365 223,365 H 19 c -1.181898,0 -2.352442,-0.1153 -3.511627,-0.34589 -1.159187,-0.23056 -2.284746,-0.57199 -3.376676,-1.02429 -1.09193,-0.4523 -2.1292513,-1.00674 -3.1119621,-1.66336 -0.9827109,-0.65665 -1.8919301,-1.40283 -2.7276573,-2.23855 -0.8357273,-0.83573 -1.5819045,-1.74497 -2.2385312,-2.7277 -0.6566267,-0.98269 -1.211086,-2.01999 -1.6633782,-3.1119 C 1.9178758,352.79636 1.5764414,351.67081 1.3458648,350.5116 1.1152881,349.35242 0.99999994,348.18188 1,347 v -84 c -6e-8,-1.18192 0.1152881,-2.35245 0.3458648,-3.51166 0.2305766,-1.15921 0.572011,-2.28476 1.0243034,-3.37671 0.4522922,-1.09193 1.0067515,-2.12924 1.6633782,-3.11195 0.6566267,-0.98271 1.4028039,-1.89192 2.2385312,-2.72763 0.8357272,-0.83572 1.7449464,-1.58189 2.7276582,-2.23853 0.9827109,-0.65663 2.0200312,-1.21109 3.1119612,-1.66337 1.09193,-0.45229 2.217489,-0.79372 3.376676,-1.02429 C 16.647558,245.1153 17.818102,245.00002 19,245 Z&quot;
             style=&quot;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
             id=&quot;path102&quot; /&gt;&lt;path
             d=&quot;m 19,245 h 204 c 1.1819,2e-5 2.35243,0.1153 3.51163,0.34586 1.15916,0.23057 2.28471,0.572 3.37665,1.02429 1.09193,0.45228 2.12924,1.00674 3.11195,1.66337 0.98271,0.65664 1.89194,1.40281 2.72768,2.23853 0.83572,0.83571 1.58189,1.74492 2.23852,2.72763 0.65662,0.98271 1.21108,2.02005 1.66338,3.11198 0.45228,1.09192 0.79373,2.21747 1.0243,3.37668 C 240.8847,260.64755 241,261.81808 241,263 v 84 c 0,1.18188 -0.1153,2.35242 -0.34587,3.51163 -0.23059,1.15918 -0.57204,2.28473 -1.02432,3.37668 -0.4523,1.09191 -1.00676,2.12921 -1.66338,3.1119 -0.65663,0.98273 -1.4028,1.89197 -2.23852,2.7277 -0.83574,0.83572 -1.74497,1.5819 -2.72768,2.23852 -0.98271,0.65662 -2.02002,1.21106 -3.11195,1.66336 -1.09194,0.4523 -2.21749,0.79376 -3.37667,1.02432 C 225.35243,364.8847 224.1819,365 223,365 H 19 c -1.181898,0 -2.352442,-0.1153 -3.511627,-0.34589 -1.159187,-0.23056 -2.284746,-0.57199 -3.376676,-1.02429 -1.09193,-0.4523 -2.1292513,-1.00674 -3.1119621,-1.66336 -0.9827109,-0.65665 -1.8919301,-1.40283 -2.7276573,-2.23855 -0.8357273,-0.83573 -1.5819045,-1.74497 -2.2385312,-2.7277 -0.6566267,-0.98269 -1.211086,-2.01999 -1.6633782,-3.1119 C 1.9178758,352.79636 1.5764414,351.67081 1.3458648,350.5116 1.1152881,349.35242 0.99999994,348.18188 1,347 v -84 c -6e-8,-1.18192 0.1152881,-2.35245 0.3458648,-3.51166 0.2305766,-1.15921 0.572011,-2.28476 1.0243034,-3.37671 0.4522922,-1.09193 1.0067515,-2.12924 1.6633782,-3.11195 0.6566267,-0.98271 1.4028039,-1.89192 2.2385312,-2.72763 0.8357272,-0.83572 1.7449464,-1.58189 2.7276582,-2.23853 0.9827109,-0.65663 2.0200312,-1.21109 3.1119612,-1.66337 1.09193,-0.45229 2.217489,-0.79372 3.376676,-1.02429 C 16.647558,245.1153 17.818102,245.00002 19,245 Z&quot;
             style=&quot;fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
             id=&quot;path104&quot; /&gt;&lt;path
             d=&quot;m 61,265 h 120 v 40 H 61 Z&quot;
             style=&quot;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
             id=&quot;path106&quot; /&gt;&lt;path
             d=&quot;m 61,265 h 120 v 40 H 61 Z&quot;
             style=&quot;fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
             id=&quot;path108&quot; /&gt;&lt;/g&gt;&lt;g
           id=&quot;g110&quot;
           transform=&quot;scale(2.9899347)&quot;&gt;&lt;text
             transform=&quot;translate(78.65625,289)&quot;
             style=&quot;font-variant:normal;font-weight:normal;font-size:12px;font-family:Arial;-inkscape-font-specification:ArialMT;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
             id=&quot;text114&quot;&gt;&lt;tspan
               x=&quot;0 9.3339844 17.337891 26.003906 29.337891 38.003906 45.345703&quot;
               y=&quot;0&quot;
               sodipodi:role=&quot;line&quot;
               id=&quot;tspan112&quot;&gt;OPC DA &lt;/tspan&gt;&lt;/text&gt;&lt;text
             transform=&quot;translate(127.33594,289)&quot;
             style=&quot;font-variant:normal;font-weight:normal;font-size:12px;font-family:&apos;Microsoft YaHei&apos;;-inkscape-font-specification:MicrosoftYaHei;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
             id=&quot;text118&quot;&gt;&lt;tspan
               x=&quot;0 12 24&quot;
               y=&quot;0&quot;
               sodipodi:role=&quot;line&quot;
               id=&quot;tspan116&quot;&gt;服务器&lt;/tspan&gt;&lt;/text&gt;&lt;/g&gt;&lt;/g&gt;&lt;/g&gt;&lt;g
       id=&quot;g120&quot;&gt;&lt;g
         id=&quot;g122&quot;
         clip-path=&quot;url(#clipPath126)&quot;&gt;&lt;g
           id=&quot;g128&quot;
           transform=&quot;matrix(2.9899347,0,0,2.983449,122.58732,941.82941)&quot;&gt;&lt;path
             d=&quot;M 32.400002,36.5 H 18.799999 c 1.600001,5.799999 -0.6,6.599998 -10.1999996,6.599998 v 3 H 41.199997 v -3 c -9.5,0 -10.4,-0.799999 -8.799999,-6.599998&quot;
             style=&quot;fill:#7a7a7a;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
             id=&quot;path130&quot; /&gt;&lt;path
             d=&quot;M 47,0 H 2.7 C 1.2,0 0,1.2999999 0,2.8 V 33.700001 C 0,35.200001 1.2,36.5 2.7,36.5 H 47 c 1.5,0 3,-1.299999 3,-2.799999 V 2.8 C 50,1.2999999 48.5,0 47,0 M 46.200001,3.8 V 32.599998 H 3.8 L 3.8,3.8 46.200001,3.7 Z&quot;
             style=&quot;fill:#a0a1a2;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
             id=&quot;path132&quot; /&gt;&lt;path
             d=&quot;M 3.8,3.8 H 46.099999 V 32.700002 H 3.8 Z&quot;
             style=&quot;fill:#59b4d9;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
             id=&quot;path134&quot; /&gt;&lt;path
             d=&quot;M 3.8,32.700001 V 3.8 L 42.5,3.7 47,0 H 2.7 C 1.2,0 0,1.2999999 0,2.8 V 33.700001 C 0,35.200001 1.2,36.5 2.7,36.5 h 1.1000002 l 4.5999994,-3.799999 z&quot;
             style=&quot;fill:#ffffff;fill-opacity:0.2;fill-rule:nonzero;stroke:none&quot;
             id=&quot;path136&quot; /&gt;&lt;path
             d=&quot;M 25.5,2.0999999 C 25.5058,2.2956698 25.43956,2.4627151 25.301134,2.601136 25.162712,2.7395568 24.995668,2.8058448 24.799999,2.8 24.604328,2.8058448 24.437283,2.7395566 24.298862,2.6011357 24.160442,2.4627147 24.094154,2.2956693 24.099998,2.0999999 24.094152,1.9043304 24.16044,1.737285 24.298862,1.5988641 24.437284,1.460443 24.60433,1.3941549 24.799999,1.3999999 c 0.195669,-0.00585 0.362713,0.060443 0.501135,0.1988641 0.13842,0.1384209 0.204708,0.3054663 0.198866,0.5011359&quot;
             style=&quot;fill:#b8d432;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
             id=&quot;path138&quot; /&gt;&lt;path
             d=&quot;M 35.700001,7.3000002 25.9,9 v 8 h 9.800001 z m -22,3.0999998 V 17 H 23.5 V 9.1000004 Z m 0,15.800001 L 23.5,27.5 v -8 h -9.8 z m 22,3.1 V 19.5 h -9.799999 v 8.1 z&quot;
             style=&quot;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
             id=&quot;path140&quot; /&gt;&lt;/g&gt;&lt;/g&gt;&lt;/g&gt;&lt;g
       id=&quot;g142&quot;&gt;&lt;g
         id=&quot;g144&quot;
         clip-path=&quot;url(#clipPath148)&quot;&gt;&lt;g
           id=&quot;g150&quot;
           transform=&quot;scale(2.9899347)&quot;&gt;&lt;text
             transform=&quot;translate(102.98438,102)&quot;
             style=&quot;font-variant:normal;font-weight:normal;font-size:12px;font-family:Arial;-inkscape-font-specification:ArialMT;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
             id=&quot;text154&quot;&gt;&lt;tspan
               x=&quot;0 11.326172 13.992188 20.666016 27.339844 34.013672 42.679688 48.679688&quot;
               y=&quot;0&quot;
               sodipodi:role=&quot;line&quot;
               id=&quot;tspan152&quot;&gt;Windows &lt;/tspan&gt;&lt;/text&gt;&lt;text
             transform=&quot;translate(154.99805,102)&quot;
             style=&quot;font-variant:normal;font-weight:normal;font-size:12px;font-family:&apos;Microsoft YaHei&apos;;-inkscape-font-specification:MicrosoftYaHei;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
             id=&quot;text158&quot;&gt;&lt;tspan
               x=&quot;0 12&quot;
               y=&quot;0&quot;
               sodipodi:role=&quot;line&quot;
               id=&quot;tspan156&quot;&gt;平台&lt;/tspan&gt;&lt;/text&gt;&lt;text
             transform=&quot;translate(102.98438,342)&quot;
             style=&quot;font-variant:normal;font-weight:normal;font-size:12px;font-family:Arial;-inkscape-font-specification:ArialMT;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
             id=&quot;text162&quot;&gt;&lt;tspan
               x=&quot;0 11.326172 13.992188 20.666016 27.339844 34.013672 42.679688 48.679688&quot;
               y=&quot;0&quot;
               sodipodi:role=&quot;line&quot;
               id=&quot;tspan160&quot;&gt;Windows &lt;/tspan&gt;&lt;/text&gt;&lt;text
             transform=&quot;translate(154.99805,342)&quot;
             style=&quot;font-variant:normal;font-weight:normal;font-size:12px;font-family:&apos;Microsoft YaHei&apos;;-inkscape-font-specification:MicrosoftYaHei;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
             id=&quot;text166&quot;&gt;&lt;tspan
               x=&quot;0 12&quot;
               y=&quot;0&quot;
               sodipodi:role=&quot;line&quot;
               id=&quot;tspan164&quot;&gt;平台&lt;/tspan&gt;&lt;/text&gt;&lt;/g&gt;&lt;g
           id=&quot;g168&quot;
           transform=&quot;matrix(2.9899347,0,0,2.9899347,1.4949673,1.4949673)&quot;&gt;&lt;path
             d=&quot;M 441,127.37 V 234.63&quot;
             style=&quot;fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
             id=&quot;path170&quot; /&gt;&lt;path
             d=&quot;m 441,122.12 3.5,6.99999 -3.5,-1.74999 -3.5,1.74999 z&quot;
             style=&quot;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
             id=&quot;path172&quot; /&gt;&lt;path
             d=&quot;m 441,122.12 3.5,6.99999 -3.5,-1.74999 -3.5,1.74999 z&quot;
             style=&quot;fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
             id=&quot;path174&quot; /&gt;&lt;path
             d=&quot;m 441,239.88 -3.5,-7 3.5,1.75 3.5,-1.75 z&quot;
             style=&quot;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
             id=&quot;path176&quot; /&gt;&lt;path
             d=&quot;m 441,239.88 -3.5,-7 3.5,1.75 3.5,-1.75 z&quot;
             style=&quot;fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
             id=&quot;path178&quot; /&gt;&lt;/g&gt;&lt;g
           id=&quot;g180&quot;
           transform=&quot;scale(2.9899347)&quot;&gt;&lt;path
             d=&quot;m 424,168 h 35 v 27 h -35 z&quot;
             style=&quot;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
             id=&quot;path182&quot; /&gt;&lt;text
             transform=&quot;translate(426.21875,178)&quot;
             style=&quot;font-variant:normal;font-weight:normal;font-size:11px;font-family:Arial;-inkscape-font-specification:ArialMT;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
             id=&quot;text186&quot;&gt;&lt;tspan
               x=&quot;0 7.3369141 15.893066 23.22998&quot;
               y=&quot;0&quot;
               sodipodi:role=&quot;line&quot;
               id=&quot;tspan184&quot;&gt;SOAP&lt;/tspan&gt;&lt;/text&gt;&lt;text
             transform=&quot;translate(423.78125,192)&quot;
             style=&quot;font-variant:normal;font-weight:normal;font-size:11px;font-family:Arial;-inkscape-font-specification:ArialMT;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
             id=&quot;text190&quot;&gt;&lt;tspan
               x=&quot;0 6.7192383 14.663086 22 25.056152 28.112305&quot;
               y=&quot;0&quot;
               sodipodi:role=&quot;line&quot;
               id=&quot;tspan188&quot;&gt;TCP/IP&lt;/tspan&gt;&lt;/text&gt;&lt;/g&gt;&lt;g
           id=&quot;g192&quot;
           transform=&quot;matrix(2.9899347,0,0,2.9899347,1.4949673,1.4949673)&quot;&gt;&lt;path
             d=&quot;m 339,1 h 204 c 1.18188,0 2.35242,0.1152883 3.5116,0.3458649 1.15918,0.2305766 2.28473,0.572011 3.37664,1.0243033 1.09192,0.4522922 2.12928,1.0067515 3.112,1.6633782 0.98267,0.6566267 1.89191,1.4028039 2.72767,2.2385312 0.83575,0.8357272 1.5819,1.7449464 2.23852,2.7276582 0.65662,0.9827109 1.21106,2.0200312 1.66339,3.1119612 0.45227,1.09193 0.7937,2.217489 1.02429,3.376676 C 560.88464,16.647558 560.99994,17.818102 561,19 v 84 c -6e-5,1.18189 -0.11536,2.35243 -0.34589,3.51162 -0.23059,1.15919 -0.57202,2.28474 -1.02429,3.37667 -0.45233,1.09194 -1.00677,2.12926 -1.66339,3.11197 -0.65662,0.9827 -1.40277,1.89192 -2.23852,2.72765 -0.83576,0.83573 -1.745,1.5819 -2.72773,2.23853 -0.98272,0.65662 -2.02002,1.21109 -3.11194,1.66338 -1.09191,0.4523 -2.21746,0.79373 -3.37664,1.02431 C 545.35242,120.88471 544.18188,121 543,121 H 339 c -1.18188,0 -2.35245,-0.11529 -3.51166,-0.34587 -1.15918,-0.23058 -2.28473,-0.57201 -3.37668,-1.02431 -1.09195,-0.45229 -2.12927,-1.00676 -3.11197,-1.66338 -0.98272,-0.65663 -1.89193,-1.4028 -2.72763,-2.23853 -0.83575,-0.83573 -1.58194,-1.74495 -2.23855,-2.72765 -0.65662,-0.98271 -1.21106,-2.02003 -1.66336,-3.11197 -0.4523,-1.09193 -0.79373,-2.21748 -1.02429,-3.37667 C 321.11526,105.35243 320.99997,104.18189 321,103 V 19 c -3e-5,-1.181898 0.11526,-2.352442 0.34586,-3.511627 0.23056,-1.159187 0.57199,-2.284746 1.02429,-3.376676 0.4523,-1.09193 1.00674,-2.1292513 1.66336,-3.1119621 0.65661,-0.9827109 1.4028,-1.8919301 2.23855,-2.7276573 0.8357,-0.8357273 1.74491,-1.5819045 2.72763,-2.2385312 0.9827,-0.6566267 2.02002,-1.211086 3.11197,-1.6633782 1.09195,-0.4522923 2.2175,-0.7937267 3.37668,-1.0243033 C 336.64755,1.1152883 337.81812,1 339,1 Z&quot;
             style=&quot;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
             id=&quot;path194&quot; /&gt;&lt;path
             d=&quot;m 339,1 h 204 c 1.18188,0 2.35242,0.1152883 3.5116,0.3458649 1.15918,0.2305766 2.28473,0.572011 3.37664,1.0243033 1.09192,0.4522922 2.12928,1.0067515 3.112,1.6633782 0.98267,0.6566267 1.89191,1.4028039 2.72767,2.2385312 0.83575,0.8357272 1.5819,1.7449464 2.23852,2.7276582 0.65662,0.9827109 1.21106,2.0200312 1.66339,3.1119612 0.45227,1.09193 0.7937,2.217489 1.02429,3.376676 C 560.88464,16.647558 560.99994,17.818102 561,19 v 84 c -6e-5,1.18189 -0.11536,2.35243 -0.34589,3.51162 -0.23059,1.15919 -0.57202,2.28474 -1.02429,3.37667 -0.45233,1.09194 -1.00677,2.12926 -1.66339,3.11197 -0.65662,0.9827 -1.40277,1.89192 -2.23852,2.72765 -0.83576,0.83573 -1.745,1.5819 -2.72773,2.23853 -0.98272,0.65662 -2.02002,1.21109 -3.11194,1.66338 -1.09191,0.4523 -2.21746,0.79373 -3.37664,1.02431 C 545.35242,120.88471 544.18188,121 543,121 H 339 c -1.18188,0 -2.35245,-0.11529 -3.51166,-0.34587 -1.15918,-0.23058 -2.28473,-0.57201 -3.37668,-1.02431 -1.09195,-0.45229 -2.12927,-1.00676 -3.11197,-1.66338 -0.98272,-0.65663 -1.89193,-1.4028 -2.72763,-2.23853 -0.83575,-0.83573 -1.58194,-1.74495 -2.23855,-2.72765 -0.65662,-0.98271 -1.21106,-2.02003 -1.66336,-3.11197 -0.4523,-1.09193 -0.79373,-2.21748 -1.02429,-3.37667 C 321.11526,105.35243 320.99997,104.18189 321,103 V 19 c -3e-5,-1.181898 0.11526,-2.352442 0.34586,-3.511627 0.23056,-1.159187 0.57199,-2.284746 1.02429,-3.376676 0.4523,-1.09193 1.00674,-2.1292513 1.66336,-3.1119621 0.65661,-0.9827109 1.4028,-1.8919301 2.23855,-2.7276573 0.8357,-0.8357273 1.74491,-1.5819045 2.72763,-2.2385312 0.9827,-0.6566267 2.02002,-1.211086 3.11197,-1.6633782 1.09195,-0.4522923 2.2175,-0.7937267 3.37668,-1.0243033 C 336.64755,1.1152883 337.81812,1 339,1 Z&quot;
             style=&quot;fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
             id=&quot;path196&quot; /&gt;&lt;path
             d=&quot;M 381,21 H 501 V 61 H 381 Z&quot;
             style=&quot;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
             id=&quot;path198&quot; /&gt;&lt;path
             d=&quot;M 381,21 H 501 V 61 H 381 Z&quot;
             style=&quot;fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
             id=&quot;path200&quot; /&gt;&lt;/g&gt;&lt;g
           id=&quot;g202&quot;
           transform=&quot;scale(2.9899347)&quot;&gt;&lt;text
             transform=&quot;translate(398.65625,45)&quot;
             style=&quot;font-variant:normal;font-weight:normal;font-size:12px;font-family:Arial;-inkscape-font-specification:ArialMT;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
             id=&quot;text206&quot;&gt;&lt;tspan
               x=&quot;0 9.3339844 17.337891 26.003906 29.337891 38.003906 45.345703&quot;
               y=&quot;0&quot;
               sodipodi:role=&quot;line&quot;
               id=&quot;tspan204&quot;&gt;OPC UA &lt;/tspan&gt;&lt;/text&gt;&lt;text
             transform=&quot;translate(447.33594,45)&quot;
             style=&quot;font-variant:normal;font-weight:normal;font-size:12px;font-family:&apos;Microsoft YaHei&apos;;-inkscape-font-specification:MicrosoftYaHei;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
             id=&quot;text210&quot;&gt;&lt;tspan
               x=&quot;0 12 24&quot;
               y=&quot;0&quot;
               sodipodi:role=&quot;line&quot;
               id=&quot;tspan208&quot;&gt;客户端&lt;/tspan&gt;&lt;/text&gt;&lt;/g&gt;&lt;g
           id=&quot;g212&quot;
           transform=&quot;matrix(2.9899347,0,0,2.9899347,1.4949673,1.4949673)&quot;&gt;&lt;path
             d=&quot;m 339,241 h 204 c 1.18188,0 2.35242,0.11528 3.5116,0.34586 1.15918,0.23057 2.28473,0.57199 3.37664,1.02427 1.09192,0.45229 2.12928,1.00675 3.112,1.66338 0.98267,0.65663 1.89191,1.4028 2.72767,2.23854 0.83575,0.83572 1.5819,1.74495 2.23852,2.72766 0.65662,0.98271 1.21106,2.02002 1.66339,3.11195 0.45227,1.09194 0.7937,2.21749 1.02429,3.37668 0.23053,1.15921 0.34583,2.32974 0.34589,3.51166 v 84 c -6e-5,1.18188 -0.11536,2.35242 -0.34589,3.5116 -0.23059,1.15918 -0.57202,2.28473 -1.02429,3.37668 -0.45233,1.09191 -1.00677,2.12924 -1.66339,3.11193 -0.65662,0.9827 -1.40277,1.89194 -2.23852,2.7277 -0.83576,0.83572 -1.745,1.58187 -2.72773,2.23852 -0.98272,0.65662 -2.02002,1.21106 -3.11194,1.66336 -1.09191,0.4523 -2.21746,0.79373 -3.37664,1.02432 C 545.35242,360.8847 544.18188,361 543,361 H 339 c -1.18188,0 -2.35245,-0.1153 -3.51166,-0.34589 -1.15918,-0.23059 -2.28473,-0.57202 -3.37668,-1.02432 -1.09195,-0.4523 -2.12927,-1.00674 -3.11197,-1.66336 -0.98272,-0.65665 -1.89193,-1.4028 -2.72763,-2.23852 -0.83575,-0.83576 -1.58194,-1.74497 -2.23855,-2.72767 -0.65662,-0.98272 -1.21106,-2.02005 -1.66336,-3.11196 -0.4523,-1.09195 -0.79373,-2.2175 -1.02429,-3.37668 C 321.11526,345.35242 320.99997,344.18188 321,343 v -84 c -3e-5,-1.18192 0.11526,-2.35245 0.34586,-3.51166 0.23056,-1.15919 0.57199,-2.28474 1.02429,-3.37668 0.4523,-1.09193 1.00674,-2.12925 1.66336,-3.11197 0.65661,-0.98271 1.4028,-1.89192 2.23855,-2.72764 0.8357,-0.83574 1.74491,-1.58191 2.72763,-2.23854 0.9827,-0.65663 2.02002,-1.21109 3.11197,-1.66338 1.09195,-0.45228 2.2175,-0.7937 3.37668,-1.02427 C 336.64755,241.11528 337.81812,241 339,241 Z&quot;
             style=&quot;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
             id=&quot;path214&quot; /&gt;&lt;path
             d=&quot;m 339,241 h 204 c 1.18188,0 2.35242,0.11528 3.5116,0.34586 1.15918,0.23057 2.28473,0.57199 3.37664,1.02427 1.09192,0.45229 2.12928,1.00675 3.112,1.66338 0.98267,0.65663 1.89191,1.4028 2.72767,2.23854 0.83575,0.83572 1.5819,1.74495 2.23852,2.72766 0.65662,0.98271 1.21106,2.02002 1.66339,3.11195 0.45227,1.09194 0.7937,2.21749 1.02429,3.37668 0.23053,1.15921 0.34583,2.32974 0.34589,3.51166 v 84 c -6e-5,1.18188 -0.11536,2.35242 -0.34589,3.5116 -0.23059,1.15918 -0.57202,2.28473 -1.02429,3.37668 -0.45233,1.09191 -1.00677,2.12924 -1.66339,3.11193 -0.65662,0.9827 -1.40277,1.89194 -2.23852,2.7277 -0.83576,0.83572 -1.745,1.58187 -2.72773,2.23852 -0.98272,0.65662 -2.02002,1.21106 -3.11194,1.66336 -1.09191,0.4523 -2.21746,0.79373 -3.37664,1.02432 C 545.35242,360.8847 544.18188,361 543,361 H 339 c -1.18188,0 -2.35245,-0.1153 -3.51166,-0.34589 -1.15918,-0.23059 -2.28473,-0.57202 -3.37668,-1.02432 -1.09195,-0.4523 -2.12927,-1.00674 -3.11197,-1.66336 -0.98272,-0.65665 -1.89193,-1.4028 -2.72763,-2.23852 -0.83575,-0.83576 -1.58194,-1.74497 -2.23855,-2.72767 -0.65662,-0.98272 -1.21106,-2.02005 -1.66336,-3.11196 -0.4523,-1.09195 -0.79373,-2.2175 -1.02429,-3.37668 C 321.11526,345.35242 320.99997,344.18188 321,343 v -84 c -3e-5,-1.18192 0.11526,-2.35245 0.34586,-3.51166 0.23056,-1.15919 0.57199,-2.28474 1.02429,-3.37668 0.4523,-1.09193 1.00674,-2.12925 1.66336,-3.11197 0.65661,-0.98271 1.4028,-1.89192 2.23855,-2.72764 0.8357,-0.83574 1.74491,-1.58191 2.72763,-2.23854 0.9827,-0.65663 2.02002,-1.21109 3.11197,-1.66338 1.09195,-0.45228 2.2175,-0.7937 3.37668,-1.02427 C 336.64755,241.11528 337.81812,241 339,241 Z&quot;
             style=&quot;fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
             id=&quot;path216&quot; /&gt;&lt;path
             d=&quot;m 381,261 h 120 v 40 H 381 Z&quot;
             style=&quot;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
             id=&quot;path218&quot; /&gt;&lt;path
             d=&quot;m 381,261 h 120 v 40 H 381 Z&quot;
             style=&quot;fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1&quot;
             id=&quot;path220&quot; /&gt;&lt;/g&gt;&lt;g
           id=&quot;g222&quot;
           transform=&quot;scale(2.9899347)&quot;&gt;&lt;text
             transform=&quot;translate(398.65625,285)&quot;
             style=&quot;font-variant:normal;font-weight:normal;font-size:12px;font-family:Arial;-inkscape-font-specification:ArialMT;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
             id=&quot;text226&quot;&gt;&lt;tspan
               x=&quot;0 9.3339844 17.337891 26.003906 29.337891 38.003906 45.345703&quot;
               y=&quot;0&quot;
               sodipodi:role=&quot;line&quot;
               id=&quot;tspan224&quot;&gt;OPC UA &lt;/tspan&gt;&lt;/text&gt;&lt;text
             transform=&quot;translate(447.33594,285)&quot;
             style=&quot;font-variant:normal;font-weight:normal;font-size:12px;font-family:&apos;Microsoft YaHei&apos;;-inkscape-font-specification:MicrosoftYaHei;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
             id=&quot;text230&quot;&gt;&lt;tspan
               x=&quot;0 12 24&quot;
               y=&quot;0&quot;
               sodipodi:role=&quot;line&quot;
               id=&quot;tspan228&quot;&gt;服务器&lt;/tspan&gt;&lt;/text&gt;&lt;text
             transform=&quot;translate(443,98)&quot;
             style=&quot;font-variant:normal;font-weight:normal;font-size:12px;font-family:&apos;Microsoft YaHei&apos;;-inkscape-font-specification:MicrosoftYaHei;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
             id=&quot;text234&quot;&gt;&lt;tspan
               x=&quot;0 12 24&quot;
               y=&quot;0&quot;
               sodipodi:role=&quot;line&quot;
               id=&quot;tspan232&quot;&gt;跨平台&lt;/tspan&gt;&lt;/text&gt;&lt;text
             transform=&quot;translate(443,338)&quot;
             style=&quot;font-variant:normal;font-weight:normal;font-size:12px;font-family:&apos;Microsoft YaHei&apos;;-inkscape-font-specification:MicrosoftYaHei;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
             id=&quot;text238&quot;&gt;&lt;tspan
               x=&quot;0 12 24&quot;
               y=&quot;0&quot;
               sodipodi:role=&quot;line&quot;
               id=&quot;tspan236&quot;&gt;跨平台&lt;/tspan&gt;&lt;/text&gt;&lt;/g&gt;&lt;/g&gt;&lt;/g&gt;&lt;g
       id=&quot;g240&quot;&gt;&lt;g
         id=&quot;g242&quot;
         clip-path=&quot;url(#clipPath246)&quot;&gt;&lt;g
           id=&quot;g248&quot;
           transform=&quot;matrix(2.9899347,0,0,2.983449,1079.3665,212.28537)&quot;&gt;&lt;path
             d=&quot;M 47,0 H 2.7 C 2.3363771,0.00981525 1.988147,0.0881011 1.6553097,0.2348576 1.3224724,0.38161409 1.0298061,0.58591598 0.77731049,0.84776336 0.52481484,1.1096108 0.33128685,1.4095104 0.19672644,1.7474625 0.06216605,2.0854146 -0.00340942,2.4362605 0,2.8 v 30.900001 c -0.00340939,0.363739 0.06216611,0.714584 0.19672652,1.052536 0.13456039,0.337951 0.32808844,0.637851 0.58058409,0.8997 C 1.0298064,35.914085 1.3224727,36.118389 1.6553099,36.265144 1.988147,36.4119 2.3363771,36.490185 2.7,36.5 h 16.100001 c 1.600001,5.799999 -0.6,6.599998 -10.1999997,6.599998 v 3 H 41.200001 v -3 C 31.6,43.099998 30.6,42.299999 32.300003,36.5 H 47 c 0.379543,-0.0044 0.745476,-0.07719 1.097797,-0.218414 0.352322,-0.141228 0.667225,-0.341336 0.944714,-0.600323 0.277485,-0.258991 0.49881,-0.559364 0.663971,-0.901119 0.165161,-0.341755 0.263,-0.701802 0.293518,-1.080143 L 50,2.8 C 49.969482,2.4216566 49.871643,2.0616071 49.706482,1.7198514 49.541321,1.3780957 49.319996,1.0777235 49.042511,0.81873471 48.765022,0.55974579 48.450119,0.35963809 48.097797,0.21841155 47.745476,0.07718501 47.379543,0.00438116 47,0 Z&quot;
             style=&quot;fill:#59b4d9;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
             id=&quot;path250&quot; /&gt;&lt;path
             d=&quot;M 3.8,3.8 H 46.099999 V 32.700002 H 3.8 Z&quot;
             style=&quot;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
             id=&quot;path252&quot; /&gt;&lt;path
             d=&quot;m 25.5,17.4 h -0.1 l -8.800001,-5.100001 c -0.100001,0 -0.100001,-0.1 -0.100001,-0.2 0.01079,-0.07794 0.04412,-0.144605 0.100001,-0.199999 l 8.799999,-5.0000004 h 0.299999 L 34.499996,12 c 0.1,0 0.1,0.1 0.1,0.2 0,0.1 0,0.2 -0.1,0.2 l -8.700001,5 h -0.299999 m -1.200001,12.300001 h -0.1 l -8.8,-5.100001 c -0.1,0 -0.1,-0.1 -0.1,-0.2 V 14.2 c 0.01079,-0.07794 0.04412,-0.144606 0.1,-0.2 h 0.3 l 8.800001,5.1 c 0.100001,0 0.100001,0.100001 0.100001,0.200001 V 29.5 c -0.01079,0.07794 -0.04412,0.144606 -0.100001,0.200001 h -0.200001 m 2.5,0 h -0.1 c -0.1,0 -0.1,-0.100001 -0.1,-0.200001 V 19.4 c 0.01079,-0.07794 0.04412,-0.144606 0.1,-0.200001 l 8.800001,-5.1 h 0.299999 c 0.1,0 0.1,0.1 0.1,0.199999 v 10.1 c -0.01079,0.07794 -0.04412,0.144605 -0.1,0.2 L 27,29.700001 H 26.799999 M 15,6.3000002 H 6 V 15.3 H 9 V 9.3000002 h 6 z M 6,21.299999 v 9 h 9 v -3 H 9 v -6 z m 29,9 h 9 v -9 h -3 v 6 h -6 z m 9,-15 V 6.2999992 h -9 v 3 h 6 v 5.9999998 z&quot;
             style=&quot;fill:#0072c6;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
             id=&quot;path254&quot; /&gt;&lt;/g&gt;&lt;/g&gt;&lt;/g&gt;&lt;g
       id=&quot;g256&quot;&gt;&lt;g
         id=&quot;g258&quot;
         clip-path=&quot;url(#clipPath262)&quot;&gt;&lt;g
           id=&quot;g264&quot;
           transform=&quot;matrix(2.9899347,0,0,2.983449,1079.3665,929.86969)&quot;&gt;&lt;path
             d=&quot;M 47,0 H 2.7 C 2.3363771,0.00981525 1.988147,0.0881011 1.6553097,0.2348576 1.3224724,0.38161409 1.0298061,0.58591598 0.77731049,0.84776336 0.52481484,1.1096108 0.33128685,1.4095104 0.19672644,1.7474625 0.06216605,2.0854146 -0.00340942,2.4362605 0,2.8 v 30.900001 c -0.00340939,0.363739 0.06216611,0.714584 0.19672652,1.052536 0.13456039,0.337951 0.32808844,0.637851 0.58058409,0.8997 C 1.0298064,35.914085 1.3224727,36.118389 1.6553099,36.265144 1.988147,36.4119 2.3363771,36.490185 2.7,36.5 h 16.100001 c 1.600001,5.799999 -0.6,6.599998 -10.1999997,6.599998 v 3 H 41.200001 v -3 C 31.6,43.099998 30.6,42.299999 32.300003,36.5 H 47 c 0.379543,-0.0044 0.745476,-0.07719 1.097797,-0.218414 0.352322,-0.141228 0.667225,-0.341336 0.944714,-0.600323 0.277485,-0.258991 0.49881,-0.559364 0.663971,-0.901119 0.165161,-0.341755 0.263,-0.701802 0.293518,-1.080143 L 50,2.8 C 49.969482,2.4216566 49.871643,2.0616071 49.706482,1.7198514 49.541321,1.3780957 49.319996,1.0777235 49.042511,0.81873471 48.765022,0.55974579 48.450119,0.35963809 48.097797,0.21841155 47.745476,0.07718501 47.379543,0.00438116 47,0 Z&quot;
             style=&quot;fill:#59b4d9;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
             id=&quot;path266&quot; /&gt;&lt;path
             d=&quot;M 3.8,3.8 H 46.099999 V 32.700002 H 3.8 Z&quot;
             style=&quot;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
             id=&quot;path268&quot; /&gt;&lt;path
             d=&quot;m 25.5,17.4 h -0.1 l -8.800001,-5.100001 c -0.100001,0 -0.100001,-0.1 -0.100001,-0.2 0.01079,-0.07794 0.04412,-0.144605 0.100001,-0.199999 l 8.799999,-5.0000004 h 0.299999 L 34.499996,12 c 0.1,0 0.1,0.1 0.1,0.2 0,0.1 0,0.2 -0.1,0.2 l -8.700001,5 h -0.299999 m -1.200001,12.300001 h -0.1 l -8.8,-5.100001 c -0.1,0 -0.1,-0.1 -0.1,-0.2 V 14.2 c 0.01079,-0.07794 0.04412,-0.144606 0.1,-0.2 h 0.3 l 8.800001,5.1 c 0.100001,0 0.100001,0.100001 0.100001,0.200001 V 29.5 c -0.01079,0.07794 -0.04412,0.144606 -0.100001,0.200001 h -0.200001 m 2.5,0 h -0.1 c -0.1,0 -0.1,-0.100001 -0.1,-0.200001 V 19.4 c 0.01079,-0.07794 0.04412,-0.144606 0.1,-0.200001 l 8.800001,-5.1 h 0.299999 c 0.1,0 0.1,0.1 0.1,0.199999 v 10.1 c -0.01079,0.07794 -0.04412,0.144605 -0.1,0.2 L 27,29.700001 H 26.799999 M 15,6.3000002 H 6 V 15.3 H 9 V 9.3000002 h 6 z M 6,21.299999 v 9 h 9 v -3 H 9 v -6 z m 29,9 h 9 v -9 h -3 v 6 h -6 z m 9,-15 V 6.2999992 h -9 v 3 h 6 v 5.9999998 z&quot;
             style=&quot;fill:#0072c6;fill-opacity:1;fill-rule:nonzero;stroke:none&quot;
             id=&quot;path270&quot; /&gt;&lt;/g&gt;&lt;/g&gt;&lt;/g&gt;&lt;/g&gt;&lt;/svg&gt;
&lt;/div&gt;

&lt;p&gt;
目前，很多工厂里还运行着大量的 OPC 服务。OPC 标准解决了当时的一个重要困难，即在自动化系统中，实现了不同厂商之间的数据交换，同时定义了一套基础的数据接口。自动化行业按照这个标准运行了 10 多年之后，越来越觉得 COM
和 DCOM 技术限制太多。
&lt;/p&gt;

&lt;p&gt;
第一，严重依赖 Windows 平台。这就导致，OPC 只能在 Windows 系统之间通信，控制系统的下一层级，工业现场侧，只能是各种厂家的不同协议。当然，这一层面也在推进标准化，于是产生了 MODBUS、PROFIBUS、MODBUS TCP、PROFINET等协议。
&lt;/p&gt;

&lt;p&gt;
第二，控制系统北向的企业信息网络，又要使用企业服务总线（ESB）进行数据通信，主要基于 SOA 架构。
&lt;/p&gt;

&lt;p&gt;
第三，COM/DCOM 技术数据建模能力差、性能不稳定、无法穿越防火墙。
&lt;/p&gt;

&lt;p&gt;
于是，在 2003 年 11 月 3-7 日，OPC 基金会召开了第一次 OPC UA 工作组会议，确定了下一代标准 OPC UA，并把老的 OPC 标准改名为 OPC Classic 即经典 OPC。新的 OPC UA 标准的首要目的是从技术层面建立一套基于标准网络协议的通信标准，同时建立一套基础的面向对象信息模型。并且，还要能跨平台、可扩展、满足信息安全需要。
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines I.10 使用异常</title>
   <link href="http://kimi.im/2022-03-24-cppcoreguidelines-i10"/>
   <updated>2022-03-24T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-i10</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
I.10: Use exceptions to signal a failure to perform a required task
&lt;/p&gt;

&lt;p&gt;
&lt;b&gt;理由&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
不可忽视那种会导致不可预期的系统状态或计算结果的错误。大部分系统错误是因为这种疏忽导致的。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;例子&lt;/b&gt;
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-bad src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;printf&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;char&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;*&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;...&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// bad: return negative number if output fails&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
如果输出失败， &lt;code&gt;printf&lt;/code&gt; 的返回值会是负数。如果检查返回值的话，这个故障就被我们忽视了。
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;template&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;F&lt;/span&gt;, &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;...&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Args&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: #3F7F5F;&quot;&gt;// good: throw system_error if unable to start the new thread&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;explicit&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;thread&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;F&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;f&lt;/span&gt;, &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Args&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;...&lt;/span&gt; args&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
&lt;code&gt;thread&lt;/code&gt; 如果构造失败，就会抛出异常：
&lt;/p&gt;
&lt;ol class=&quot;org-ol&quot;&gt;
&lt;li&gt;构造函数被 &lt;code&gt;explicit&lt;/code&gt; 修饰后, 就不能再被隐式调用了。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;thread&lt;/code&gt; 构造函数出错&lt;code&gt;errc::resource_unavailable_try_again&lt;/code&gt;会抛出&lt;code&gt;system_error&lt;/code&gt;（ &lt;a href=&quot;https://www.cplusplus.com/reference/thread/thread/thread/&quot;&gt;thread&lt;/a&gt; ）&lt;/li&gt;
&lt;/ol&gt;


&lt;p&gt;
&lt;b&gt;注意&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
什么是错误？
&lt;/p&gt;

&lt;p&gt;
错误，意味着某个功能无法实现预期的目的（包括无法达到后置条件）。代码调用时，忽略错误，可能导致错误的结果或不确定的系统状态。比如，无法与远程服务器建立连接本身可能不是一个错误：服务器也可能因为自身原因拒绝所有连接请求，所以最自然的事情是返回一个结果，让调用者去检查无法连接的原因。然而，如果认为无法建立连接是一种错误，那么应该抛出一个异常。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;例外&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
传统的接口函数（如 Unix 信号处理函数）使用错误码（ errno ）汇报实际错误状态。没有其他替代方案，因此调用这类函数可以违反此规则。violate the rule.
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;替代方案&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
如果你不能使用异常（比如代码中使用很多老式的 raw pointer，或者有硬实时要求），考虑使用以下方式，返回一对值：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;#include&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&amp;lt;tuple&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;tuple&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt;, &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;do_something&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;make_tuple&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;1&lt;/span&gt;, &lt;span style=&quot;color: #110099;&quot;&gt;2&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;main&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;val&lt;/span&gt;;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;error_code&lt;/span&gt;;
    &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;tie&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;val, error_code&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;do_something&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt;;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;error_code&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;
        cout &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;val= &quot;&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; val &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;, error= &quot;&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; error_code &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; endl;
    &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;0&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;pre class=&quot;example&quot;&gt;
val= 1, error= 2
&lt;/pre&gt;


&lt;p&gt;
这个方式会产生未初始化的变量。因此C++17的“结构化绑定”功能可以直接从返回值初始化变量：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;struct&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;S&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;val&lt;/span&gt;;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;error_code&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;
&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;S&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;do_something&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;S&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;1&lt;/span&gt;, &lt;span style=&quot;color: #110099;&quot;&gt;2&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;main&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;auto&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;val&lt;/span&gt;, &lt;span style=&quot;color: #000000;&quot;&gt;error_code&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;]&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;do_something&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt;;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;error_code&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;
        cout &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;val= &quot;&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; val &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;, error= &quot;&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; error_code &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; endl;
    &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;0&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;pre class=&quot;example&quot;&gt;
val= 1, error= 2
&lt;/pre&gt;



&lt;p&gt;
&lt;b&gt;注意&lt;/b&gt;
&lt;/p&gt;

&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;我们不认为性能是不用异常处理的原因。&lt;/li&gt;
&lt;li&gt;通常情况，显式的出错检查和处理消耗的时间和空间与异常处理差不多。&lt;/li&gt;
&lt;li&gt;通常，使用异常处理，简洁清晰的代码性能更好（通过程序优化，简化出错分支处理）。&lt;/li&gt;
&lt;li&gt;对于性能要求高的代码，可以将出错检查移到性能关键代码外。&lt;/li&gt;
&lt;li&gt;长期来看，普通的代码能更好的优化。声明性能指标前，最好仔细测量。&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;
&lt;b&gt;强化&lt;/b&gt;
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;本理论指南，无法直接检查。&lt;/li&gt;
&lt;li&gt;审查使用 &lt;code&gt;errno&lt;/code&gt; 的地方&lt;/li&gt;
&lt;/ul&gt;
</content>
 </entry>
 
 <entry>
   <title>单词本：top-notch</title>
   <link href="http://kimi.im/2022-03-24-english-top-notch"/>
   <updated>2022-03-24T00:00:00+00:00</updated>
   <id>http://kimi.im/english-top-notch</id>
   <content type="html">&lt;p&gt;
看书的时候，读到这句话：
&lt;/p&gt;

&lt;p&gt;
the best strategies are created with the collective wisdom from a
&lt;b&gt;top-notch&lt;/b&gt; team.
&lt;/p&gt;

&lt;p&gt;
最好的策略是顶尖团队集体智慧的结果。
&lt;/p&gt;

&lt;p&gt;
这是关于敏捷软件开发的书，书中说最好的软件架构、软件设计策略应该是敏捷团队的集体智慧的产物。其实，在人类史前历史中，人类就已经在进行集体创作了。比如 6000 年前科布斯坦保护区的大片的岩石画。
&lt;/p&gt;

&lt;p&gt;
这句话里有个单词 &lt;b&gt;top-notch&lt;/b&gt; ，是我第一次见到的单词。正如往常一样，对于新学到的单词，我们都要好好探究探究。
&lt;/p&gt;

&lt;p&gt;
notch 是刻痕，记号的意思。top-notch，是说在最棒的东西上刻上记号么？大概就是挑选出最棒的，刻上标记，能卖好价钱吧。
&lt;/p&gt;

&lt;p&gt;
anyway，top-notch 就是顶呱呱、一流、顶尖的。比如：
&lt;/p&gt;

&lt;p&gt;
For golfers, Sanya offers 11 &lt;b&gt;top-notch&lt;/b&gt; courses, including the famous
Yalong Bay National Resort. 亚龙湾有 11 个一流的高尔夫球场，包括最有名的亚龙湾国际度假区。
&lt;/p&gt;

&lt;p&gt;
还有个词 top-of-the-line 也是最好的：
&lt;/p&gt;

&lt;p&gt;
On many new, top-of-the-line computer mice, there are built-in macro
keys.  在很多新款，顶级的电脑鼠标上，会有内置的快捷按键哦。
&lt;/p&gt;

&lt;p&gt;
能在 top-notch team 工作，那其实是很开心的事情。
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines I.9 如果是模板接口，用 concept 编写参数文档</title>
   <link href="http://kimi.im/2022-03-22-cppcoreguidelines-i9"/>
   <updated>2022-03-22T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-i9</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
I.9: If an interface is a template, document its parameters using concepts
&lt;/p&gt;

&lt;p&gt;
&lt;b&gt;理由&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
可以使接口更清晰，可以在编译时进行检查。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;例子&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
使用C++20风格的要求规格（requirements specification）
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;template&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;typename&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Iter&lt;/span&gt;, &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;typename&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Val&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;requires&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;input_iterator&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Iter&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;equality_comparable&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;ValueType&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Iter&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;, &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Val&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Iter&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;find&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Iter&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;first&lt;/span&gt;, &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Iter&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;last&lt;/span&gt;, &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;Val&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;v&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ...&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;
&lt;b&gt;强化&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
如果出现任何没有约束的非可变参数模板，就进行警告。约束条件可以是声明或
&lt;code&gt;requires&lt;/code&gt; 语句。
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines I.8 用 Ensures() 表达后置条件</title>
   <link href="http://kimi.im/2022-03-21-cppcoreguidelines-i8"/>
   <updated>2022-03-21T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-i8</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
I.8: Prefer Ensures() for expressing postconditions
&lt;/p&gt;

&lt;p&gt;
&lt;b&gt;理由&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
可以明确后置条件，可以通过某些外部工具进行检查确保。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;例子&lt;/b&gt;
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;#include&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&amp;lt;gsl/gsl_assert&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;#include&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&amp;lt;string.h&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;MAX&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;10&lt;/span&gt;;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;char&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;buffer&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;MAX&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;]&lt;/span&gt;;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ...&lt;/span&gt;
    &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;memset&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;buffer, &lt;span style=&quot;color: #110099;&quot;&gt;0&lt;/span&gt;, &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;sizeof&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;buffer&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
    &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;Ensures&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;buffer&lt;span style=&quot;color: #909183;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;]&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;==&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;main&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt;;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;0&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;
&lt;b&gt;注意&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
有多种方式标明后置条件，包括代码注释、条件判断、&lt;code&gt;assert()&lt;/code&gt;。然而，这些方式要么很难和普通代码区分开，要么很难更新，要么很难让工具处理，而且可能语义上是错的。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;替代方案&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
某些函数调用完后必须释放的资源，最好通过 RAII 表达。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;注意&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
理想情况， &lt;code&gt;Ensures&lt;/code&gt; 最好是接口的一部分，但是比较难实现。目前我们放在接口定义内。一旦&lt;a href=&quot;http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0380r1.pdf&quot;&gt;语言支持&lt;/a&gt;，核心指南会引入标准的前置条件、后置条件与断言判断。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;强化&lt;/b&gt;
&lt;/p&gt;

&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;目前语言层面还不支持，请检查&lt;code&gt;assert()&lt;/code&gt;判断是否合理。&lt;/li&gt;
&lt;/ul&gt;
</content>
 </entry>
 
 <entry>
   <title>单词本：sauerkraut</title>
   <link href="http://kimi.im/2022-03-21-english-sauerkraut"/>
   <updated>2022-03-21T00:00:00+00:00</updated>
   <id>http://kimi.im/english-sauerkraut</id>
   <content type="html">&lt;p&gt;
之前随手记下的，忘记是哪里看到了。反正，当时觉得这个词德语味比较重，查了下，果然是德语。是德语“酸的”+“卷心菜”，即酸菜。
&lt;/p&gt;

&lt;p&gt;
这让我想起昨天在西湖边的山舍下午茶时候看到的一句话：“Chaque langue
ouvre une fenêtre sur un nouveau monde (每一种语言打开新世界的一扇窗子)”。学一点德语，就可以在遇见 sauerkraut，&lt;a href=&quot;http://kimi.im/2021-04-21-english-leitmotiv&quot;&gt;leitmotiv&lt;/a&gt; 这样的德语味词语时，一阵惊喜不已。学一点法语，就可以在遇到 &lt;a href=&quot;http://kimi.im/2022-03-17-english-penchant&quot;&gt;penchant&lt;/a&gt;，&lt;a href=&quot;http://kimi.im/2021-05-03-english-vis-a-vis&quot;&gt;vis a vis&lt;/a&gt;，&lt;a href=&quot;http://kimi.im/2021-05-02-english-en-passant&quot;&gt;en
passant&lt;/a&gt; 这样的词语时，一阵会心一笑。就好像新世界的藤蔓，从窗户的角落，不经意间爬了进来。
&lt;/p&gt;

&lt;p&gt;
再扯几句，“Chaque langue ouvre une fenêtre sur un nouveau monde” 这句话，是随手在书架上找到的一本叫《漫长的星期六·斯坦纳谈话录》的书中看到的，是乔治·斯坦纳（George Steiner，1929年-2020年2月3日）晚年的访谈记录，是其一生的总结。这人出生在巴黎，逃难到美国，精通法语、德语、英语、西班牙语，在普林斯顿大学、剑桥大学、日内瓦大学等知名学府，教授比较文学课程。
&lt;/p&gt;

&lt;p&gt;
OK，言归正传，大概德国人很喜欢吃 sauerkraut，以至于，英语里管德国人叫
Kraut。不过这种称呼，可能有些唐突。就好像我们管韩国叫棒子国或泡菜国那样不友好。
&lt;/p&gt;

&lt;p&gt;
说起泡菜，好像韩国的 kimchi 也已经是一个英语单词了。不如把它翻译成韩式泡菜。这样，sauerkraut 就是德式泡菜。那么 pickles 呢？腌菜？韩国那边好像强推了很久，用“辛奇”作为 kimchi 的官方中文译名，无奈，接受度比较低罢了。
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines I.7 声明后置条件</title>
   <link href="http://kimi.im/2022-03-19-cppcoreguidelines-i7"/>
   <updated>2022-03-19T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-i7</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
I.7: State postconditions
&lt;/p&gt;

&lt;p&gt;
&lt;b&gt;理由&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
检测到针对输出结果可能的误解，可能可以发现代码实现错误。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;例子&lt;/b&gt;
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-bad src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;area&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;height&lt;/span&gt;, &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;width&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; height &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;*&lt;/span&gt; width; &lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;  &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// bad&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
此处，我们故意不做前置条件判断，因此长宽不一定是正数。我们也没有检查后置条件，长宽的乘积可能超过最大整数，从而产生溢出。
&lt;/p&gt;


&lt;p&gt;
可以这么写：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;#include&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&amp;lt;gsl/gsl_assert&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;area&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;height&lt;/span&gt;, &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;width&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;auto&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;res&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; height &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;*&lt;/span&gt; width;
    &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;Ensures&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;res &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; res;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;main&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    cout &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;area&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;-10&lt;/span&gt;, &lt;span style=&quot;color: #110099;&quot;&gt;10&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; endl;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;0&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;pre class=&quot;example&quot;&gt;
terminate called without an active exception
&lt;/pre&gt;



&lt;p&gt;
&lt;b&gt;例子&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
考虑这个著名的安全 bug：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-bad src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;#include&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&amp;lt;string.h&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;MAX&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;10&lt;/span&gt;;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// problematic&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;char&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;buffer&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;MAX&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;]&lt;/span&gt;;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ...&lt;/span&gt;
    &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;memset&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;buffer, &lt;span style=&quot;color: #110099;&quot;&gt;0&lt;/span&gt;, &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;sizeof&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;buffer&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;main&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt;;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;0&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
为没有后置条件说 &lt;code&gt;buffer&lt;/code&gt; 必须清零，所以显然多余的&lt;code&gt;memset()&lt;/code&gt;调用可能会被编译优化掉（实际执行看不出来）。
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;#include&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&amp;lt;gsl/gsl_assert&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;#include&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&amp;lt;string.h&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;MAX&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;10&lt;/span&gt;;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// problematic&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;char&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;buffer&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;MAX&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;]&lt;/span&gt;;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ...&lt;/span&gt;
    &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;memset&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;buffer, &lt;span style=&quot;color: #110099;&quot;&gt;0&lt;/span&gt;, &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;sizeof&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;buffer&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
    &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;Ensures&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;buffer&lt;span style=&quot;color: #909183;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;]&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;==&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;main&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt;;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;0&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;
&lt;b&gt;注意&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
后置条件经常在注释中非正式的介绍函数的目的；&lt;code&gt;Ensures()&lt;/code&gt;可以更系统化、更明显、更容易检查。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;注意&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
除了直接返回结果的情况，后置条件也可用于其他如数据结构状态的检查。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;例子&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
一个操作 &lt;code&gt;Record&lt;/code&gt; 的函数，使用互斥锁避免竞争条件：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-bad src-C++&quot;&gt;&lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;mutex&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;m&lt;/span&gt;;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;manipulate&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;Record&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;r&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// don&apos;t&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    m.&lt;span style=&quot;color: #3a5fcd; font-weight: bold; font-style: italic;&quot;&gt;lock&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt;;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ... no m.unlock() ...&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
此处，我们忘记了说明是否要释放互斥锁，因此我们不知道这是有意为之，还是
bug。标明后置条件可以澄清：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;manipulate&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;Record&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;r&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// postcondition: m is unlocked upon exit&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    m.&lt;span style=&quot;color: #3a5fcd; font-weight: bold; font-style: italic;&quot;&gt;lock&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt;;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ... no m.unlock() ...&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
这时候，我们就知道，这是个 bug 。但是需要读注释。
&lt;/p&gt;

&lt;p&gt;
更好地办法是，通过过 RAII （Resource Acquisition Is Initialization，资源获取就是初始化）确保满足“函数结束时释放互斥锁”这个后置条件：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;#include&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&amp;lt;mutex&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;#include&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&amp;lt;thread&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;struct&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;Record&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;x&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;r&lt;/span&gt;;
&lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;mutex&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;m&lt;/span&gt;;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;manipulate&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;Record&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;r&lt;/span&gt;, &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;n&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// best&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;lock_guard&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;mutex&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;_&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;m&lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;;
    r.&lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;x&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; n;
    cout &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; r.&lt;span style=&quot;color: #110099; font-style: italic;&quot;&gt;x&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; endl;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;main&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;thread&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;t&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;[]{&lt;/span&gt; &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;manipulate&lt;/span&gt;&lt;span style=&quot;color: #709870;&quot;&gt;(&lt;/span&gt;r, &lt;span style=&quot;color: #110099;&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color: #709870;&quot;&gt;)&lt;/span&gt;;&lt;span style=&quot;color: #909183;&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
    &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;manipulate&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;r, &lt;span style=&quot;color: #110099;&quot;&gt;2&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
    t.&lt;span style=&quot;color: #3a5fcd; font-weight: bold; font-style: italic;&quot;&gt;join&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt;;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;0&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;pre class=&quot;example&quot;&gt;
2
1
&lt;/pre&gt;


&lt;p&gt;
&lt;b&gt;注意&lt;/b&gt;
&lt;/p&gt;

&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;理想情况下，最好可以在接口声明中标明后置条件，用户可以方便看到。&lt;/li&gt;
&lt;li&gt;只有与用户相关的后置条件展示在接口定义中。&lt;/li&gt;
&lt;li&gt;内部状态相关的后置条件放在实现和定义中。&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;
&lt;b&gt;强化&lt;/b&gt;
&lt;/p&gt;

&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;比较难。工具可以支持锁的状态检查。&lt;/li&gt;
&lt;/ul&gt;
</content>
 </entry>
 
 <entry>
   <title>单词本：harp on</title>
   <link href="http://kimi.im/2022-03-19-english-harp-on"/>
   <updated>2022-03-19T00:00:00+00:00</updated>
   <id>http://kimi.im/english-harp-on</id>
   <content type="html">&lt;p&gt;
这又是一个跟音乐相关的词 harp 竖琴。之前我们学过 &lt;a href=&quot;http://kimi.im/2021-12-18-english-to-act-in-concert&quot;&gt;to act in concert&lt;/a&gt; 齐心协力，其中 concert 是协奏曲。
&lt;/p&gt;

&lt;p&gt;
harp on 的意思是喋喋不休的唠叨。
&lt;/p&gt;

&lt;p&gt;
It was one small mistake, why do you keep harping on me about it? 这仅仅是个小错，为啥跟我唠唠叨叨没完没了？
&lt;/p&gt;

&lt;p&gt;
Jörg&amp;rsquo;s been harping on us to get the project plan ready for next
increment. 约克总是跟我们喋喋不休的催促我们快把下个迭代的项目计划做好。
&lt;/p&gt;

&lt;p&gt;
其实，harp on 是 harp on the same string （在竖琴的同一根弦上不停弹）的简化。
&lt;/p&gt;

&lt;p&gt;
Johan is always harping on the same string about how little money he
makes. 约翰总是不断旧弦重弹，讲他赚钱如何如何少的事情。
&lt;/p&gt;

&lt;p&gt;
上面，我把 harp on the same string 翻译成旧弦重弹。这里是改用了咱们的一个成语旧调重弹：陈旧的调子又重新弹奏。比喻把过去的主张或陈旧的议论、说法重新搬出来。
&lt;/p&gt;

&lt;p&gt;
比如朱自清《回来杂记》：“北平早就被称为‘大学城’和‘文化城’，这原是旧调重弹，不过似乎弹得更响了。”
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines I.6 用 Expects() 表达前置条件</title>
   <link href="http://kimi.im/2022-03-18-cppcoreguidelines-i6"/>
   <updated>2022-03-18T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-i6</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
I.6: Prefer Expects() for expressing preconditions
&lt;/p&gt;

&lt;p&gt;
&lt;b&gt;理由&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
可以明确前置条件，可以通过某些外部工具进行检查确保。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;例子&lt;/b&gt;
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;area&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;height&lt;/span&gt;, &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;width&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;Expects&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;height &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;0&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; width &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;            &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// good&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ...&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-bad src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;area&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;height&lt;/span&gt;, &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;width&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;height &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;=&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;0&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;||&lt;/span&gt; width &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;=&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;my_error&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt;;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// obscure&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ...&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;
&lt;b&gt;注意&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
前置条件可以通过多种方式声明：注释、 &lt;code&gt;if&lt;/code&gt; 条件语句、&lt;code&gt;assert()&lt;/code&gt;断言。然而，这些方式要么很难和普通代码区分开，要么很难更新，要么很难让工具处理，而且可能语义上是错的。（你希望在 debug 模式下总是中断程序进行检查？然后在实际生产环境不做检查？）
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;注意&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
前置条件应该是接口的一部分，而不是实现的一部分。但是C++语言目前还不支持。一旦&lt;a href=&quot;http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0380r1.pdf&quot;&gt;语言支持&lt;/a&gt;，核心指南会引入标准的前置条件、后置条件与断言判断。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;注意&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
&lt;code&gt;Expects()&lt;/code&gt; 也可以在算法过程中，检查条件是否满足。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;注意&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
不建议用无符号型数据来确保传入的数据非负。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;强化&lt;/b&gt;
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;目前语言层面还不支持，请检查&lt;code&gt;assert()&lt;/code&gt;判断是否合理。&lt;/li&gt;
&lt;/ul&gt;
</content>
 </entry>
 
 <entry>
   <title>单词本：quandary</title>
   <link href="http://kimi.im/2022-03-18-english-quandary"/>
   <updated>2022-03-18T00:00:00+00:00</updated>
   <id>http://kimi.im/english-quandary</id>
   <content type="html">&lt;p&gt;
近期都在研究工业系统信息安全方面的技术。TPM （Trust Platform Module）是本世纪初形成的技术体系，是信息安全和可信计算的基础。Will Arthur 和
David Challener 参与了 TPM2.0 技术标准的制定。然而他们写的标准文档太过技术化，以至于普通人很难看懂。于是，他们又写了本书《A Practical Guide
to TPM 2.0》来介绍TPM2.0。相比技术标准，这本书就比较好理解一些了。这书的电子版是免费的，各大搜索网站随便一搜就能找到。感兴趣的同学可以找来看看。
&lt;/p&gt;

&lt;p&gt;
提到密码学敏捷的时候，书中写了这么一句话：
&lt;/p&gt;

&lt;p&gt;
When a TPM manufacturer produces a certificate for a TPM, the
manufacturer faces a &lt;b&gt;quandary&lt;/b&gt;. What algorithm should be used for the
key? The manufacturer doesn&amp;rsquo;t know if the end user will want.
&lt;/p&gt;

&lt;p&gt;
当 TPM 厂商给 TPM 芯片安装证书的时候，面临一个 &lt;b&gt;左右为难事情&lt;/b&gt; 。应该用什么密钥算法呢？因为厂商不能事先知道最终用户想要什么加密算法。
&lt;/p&gt;

&lt;p&gt;
quandary 这个词，或许会成为 2022 年的热词？
&lt;/p&gt;

&lt;p&gt;
比如：
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;The quandary facing the Europe, the U.S. and NATO is what to do if
Putin uses a tactical nuclear weapon in Ukraine.&lt;/li&gt;
&lt;li&gt;German under pressure to impose ban on Russian oil over Ukraine war.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
这个词最早可能来自拉丁语 quandō 当……时，法语 quand。
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines I.5 尽量声明输入值的前置条件</title>
   <link href="http://kimi.im/2022-03-17-cppcoreguidelines-i5"/>
   <updated>2022-03-17T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-i5</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
I.5: State preconditions (if any)
&lt;/p&gt;

&lt;p&gt;
&lt;b&gt;理由&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
函数参数的实际意义会限制函数调用者的使用。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;例子&lt;/b&gt;
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-bad src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;double&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;sqrt&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;double&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;x&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
此处 &lt;code&gt;x&lt;/code&gt; 必须是非负的。类型系统不能很好很自然的表达这种属性，因此我们要通过其他途径表达。比如，通过代码注释：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;double&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;sqrt&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;double&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;x&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// x &amp;#39035;&amp;#20026;&amp;#38750;&amp;#36127;&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
有些前提条件可以用断言语句表达，比如：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;#include&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&amp;lt;gsl/gsl_assert&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;double&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;sqrt&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;double&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;x&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;Expects&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;x &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;gt;=&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;/* ... */&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;main&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;sqrt&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;-1.0&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;0&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;pre class=&quot;example&quot;&gt;
terminate called without an active exception
&lt;/pre&gt;


&lt;p&gt;
理想的情况，&lt;code&gt;Expects(x &amp;gt;= 0)&lt;/code&gt;应该是&lt;code&gt;sqrt()&lt;/code&gt;接口的一部分。但是很难实现，目前，我们暂时可以将断言放在函数体定义内。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;注意&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
尽量选择以正式的规格需求表达，如&lt;code&gt;Expects(p);&lt;/code&gt;如果不可行，就在注释中写：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-C++&quot;&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;// the sequence [p:q) is ordered using &amp;lt;.&lt;/span&gt;
&lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &amp;#24207;&amp;#21015; [p:q) &amp;#20197; &amp;lt; &amp;#25490;&amp;#24207;&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;
&lt;b&gt;注意&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
大部分的成员函数有一个隐含的前置条件，即类中数据满足某个不变式。这个不变式条件是通过构造函数建立的。必须在每次成员函数调用之后依然保证这个不变式约束条件。当然，我们无需在每个成员函数中明确指出这个不变式约束条件。
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>单词本：penchant</title>
   <link href="http://kimi.im/2022-03-17-english-penchant"/>
   <updated>2022-03-17T00:00:00+00:00</updated>
   <id>http://kimi.im/english-penchant</id>
   <content type="html">&lt;p&gt;
昨天看《Mastering Emacs》的时候，看到这句话：
&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;
The first thing a beginner sees is Emacs&amp;rsquo;s &lt;b&gt;penchant for&lt;/b&gt; creating
windows: when you view a help file, when you compile a file, or when
you open a shell.
&lt;/p&gt;

&lt;p&gt;
初学者觉得使用 Emacs 首先会 &lt;b&gt;特别倾向于&lt;/b&gt; 创建窗口：当你查看帮助文件的时候，当你编译文件的时候，或者当你打开一个 shell 命令行的时候。
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;
这里，我看到一个新的单词， &lt;b&gt;penchant&lt;/b&gt; 。查了字典发现这个词是从法语里来的，难怪读音也是法语味：[ˈpɒ̃ʃɒ̃]
&lt;/p&gt;

&lt;p&gt;
在法语里它的动词形式是 &lt;b&gt;pencher&lt;/b&gt; ，倚靠、倾斜之意。比如：
&lt;/p&gt;

&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;L&amp;rsquo;enfant s&amp;rsquo;est penché pour faire ses lacets. 小朋友倚靠着系鞋带。&lt;/li&gt;
&lt;li&gt;L&amp;rsquo;arbre penche légèrement à cause du vent. 风吹起，树儿轻微的倾斜。&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
其实， &lt;b&gt;penchant&lt;/b&gt; 是 &lt;b&gt;pencher&lt;/b&gt; 的名词化，引进到英语里，也是以名词形式使用。再比如：
&lt;/p&gt;

&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;He would go to higher places because of his rare humility and
&lt;b&gt;penchant for&lt;/b&gt; peace.&lt;/li&gt;
&lt;li&gt;Bappi, who was known as the &amp;rsquo;Disco King&amp;rsquo; among the masses, had a
&lt;b&gt;penchant for&lt;/b&gt; wearing gold jewellery and trademark black glasses.&lt;/li&gt;
&lt;li&gt;Bullying is rife: So is schools&amp;rsquo; &lt;b&gt;penchant for&lt;/b&gt; dismissing it as
harmless even when it is not.&lt;/li&gt;
&lt;/ul&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines I.4 精确强化接口的类型</title>
   <link href="http://kimi.im/2022-03-16-cppcoreguidelines-i4"/>
   <updated>2022-03-16T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-i4</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
I.4: Make interfaces precisely and strongly typed
&lt;/p&gt;

&lt;p&gt;
&lt;b&gt;理由&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
类型乃文档之最简最佳者。其定义明确，可读性好，又支持运行时检测。另外，类型精确的代码，编译器和执行系统可以更好的进行优化。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;例子&lt;/b&gt;
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-bad src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;pass&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;*&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;data&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &amp;#24369;&amp;#19988;&amp;#26080;&amp;#31867;&amp;#22411;&amp;#30340;  void* &amp;#24456;&amp;#21487;&amp;#30097;&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
调用者不确定能传入了什么类型的数据，因为没有标记为 &lt;code&gt;const&lt;/code&gt; 也不知道能不能修改数据值。因为所有的指针类型都能默默地转成&lt;code&gt;void*&lt;/code&gt;，对调用者来说，倒是很容易提供这类数据。
&lt;/p&gt;

&lt;p&gt;
然而，被调用的函数，却需要用&lt;code&gt;static_cast&lt;/code&gt;转化成没有验证过的类型使用。这样又容易出错，又繁琐。
&lt;/p&gt;

&lt;p&gt;
在进行设计C++程序时，只有当无法描述数据类型的时候，小范围内使用
&lt;code&gt;const void*&lt;/code&gt; 。考虑下，能否改用 &lt;code&gt;variant&lt;/code&gt; 或指向基类的指针。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;替代方案&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
模板参数往往能避免&lt;code&gt;void*&lt;/code&gt;，就可以用&lt;code&gt;T*&lt;/code&gt;或 &lt;code&gt;T&amp;amp;&lt;/code&gt; 替代。对于泛型代码来说，
&lt;code&gt;T&lt;/code&gt; 可以是通用的类型，或是模板参数设定的类型。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;例子&lt;/b&gt;
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-bad src-C++&quot;&gt;&lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;draw_rect&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;100&lt;/span&gt;, &lt;span style=&quot;color: #110099;&quot;&gt;200&lt;/span&gt;, &lt;span style=&quot;color: #110099;&quot;&gt;100&lt;/span&gt;, &lt;span style=&quot;color: #110099;&quot;&gt;500&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;  &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &amp;#36825;&amp;#20123;&amp;#25968;&amp;#23383;&amp;#25351;&amp;#30340;&amp;#26159;&amp;#20160;&amp;#20040;&amp;#65311;&lt;/span&gt;

&lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;draw_rect&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;p.&lt;span style=&quot;color: #110099; font-style: italic;&quot;&gt;x&lt;/span&gt;, p.&lt;span style=&quot;color: #110099; font-style: italic;&quot;&gt;y&lt;/span&gt;, &lt;span style=&quot;color: #110099;&quot;&gt;10&lt;/span&gt;, &lt;span style=&quot;color: #110099;&quot;&gt;20&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// 10 &amp;#21644; 20 &amp;#30340;&amp;#21333;&amp;#20301;&amp;#26159;&amp;#21861;&amp;#65311;&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
清楚的是：调用者用这四个参数描述一个长方形。但是不清楚这些参数代表长方形的哪部分。另外，整数类型 &lt;code&gt;int&lt;/code&gt; 可以表示多种信息：不同单位的数值。这样，我们就只能猜测这四个整数类型代表了什么。很可能，前两个是坐标 &lt;code&gt;x&lt;/code&gt; 和 &lt;code&gt;y&lt;/code&gt; ，那么后两个是什么呢？
&lt;/p&gt;

&lt;p&gt;
使用注释和参数名可以提供一些信息，但是我们可以在明确一些：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;draw_rectangle&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;Point&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;top_left&lt;/span&gt;, &lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;Point&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;bottom_right&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;draw_rectangle&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;Point&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;top_left&lt;/span&gt;, &lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;Size&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;height_width&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;

&lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;draw_rectangle&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;p, &lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;Point&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;10&lt;/span&gt;, &lt;span style=&quot;color: #110099;&quot;&gt;20&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;  &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &amp;#20004;&amp;#20010;&amp;#28857;&lt;/span&gt;
&lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;draw_rectangle&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;p, &lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;Size&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;10&lt;/span&gt;, &lt;span style=&quot;color: #110099;&quot;&gt;20&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &amp;#19968;&amp;#20010;&amp;#35282;&amp;#65292;&amp;#19968;&amp;#23545;&amp;#36793;&amp;#38271;&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
显然，我们不可能通过静态类型系统避免所有错误。比如上面例子，第一个参数，如果调用者传进其他位置，而不是左上角的点。可能需要注释和变量名来澄清。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;例子&lt;/b&gt;
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-bad src-C++&quot;&gt;&lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;set_settings&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;true&lt;/span&gt;, &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;false&lt;/span&gt;, &lt;span style=&quot;color: #110099;&quot;&gt;42&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &amp;#36825;&amp;#20010;&amp;#25968;&amp;#25351;&amp;#30340;&amp;#26159;&amp;#20160;&amp;#20040;&amp;#65311;&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
从参数类型和参数值看不出来这个函数是要设置什么东西。
&lt;/p&gt;

&lt;p&gt;
按照以下改法，看起来就比较明确、安全，且可读性更好：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-C++&quot;&gt;&lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;alarm_settings&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;s&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;{}&lt;/span&gt;;
s.&lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;enabled&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;true&lt;/span&gt;;
s.&lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;displayMode&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;alarm_settings&lt;/span&gt;::&lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;mode&lt;/span&gt;::spinning_light;
s.&lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;frequency&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;alarm_settings&lt;/span&gt;::every_10_seconds;
&lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;set_settings&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;s&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;
&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;
如果是一组相关的开关量，可以考虑标记枚举：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-C++&quot;&gt;&lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;enable_lamp_options&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;lamp_option&lt;/span&gt;::on &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;|&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;lamp_option&lt;/span&gt;::animate_state_transitions&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;
&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;
&lt;b&gt;例子&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
以下例子，从接口看不出&lt;code&gt;time_to_blink&lt;/code&gt;是秒还是毫秒？
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-bad src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;blink_led&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;time_to_blink&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &amp;#19981;&amp;#22909; -- &amp;#21333;&amp;#20301;&amp;#19981;&amp;#28165;&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// do something with time_to_blink&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;use&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;blink_led&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;2&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;



&lt;p&gt;
&lt;b&gt;例子&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
&lt;code&gt;std::chrono::duration&lt;/code&gt; 类型可以帮助明确时间长度的单位。
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;blink_led&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;milliseconds&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;time_to_blink&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &amp;#22909; -- &amp;#26102;&amp;#38388;&amp;#21333;&amp;#20301;&amp;#26126;&amp;#30830;&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// do something with time_to_blink&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;use&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;blink_led&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;1500&lt;/span&gt;ms&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;
这个函数也可以改写成可以接受任何时间单位：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;#include&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&amp;lt;iostream&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;#include&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&amp;lt;chrono&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;using&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;namespace&lt;/span&gt; std;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;using&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;namespace&lt;/span&gt; chrono;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;template&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;rep&lt;/span&gt;, &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;period&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;blink_led&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;duration&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;rep&lt;/span&gt;, &lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;period&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;time_to_blink&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// &amp;#22909; -- &amp;#21333;&amp;#20301;&amp;#26126;&amp;#30830;&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// assuming that millisecond is the smallest relevant unit&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;auto&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;milliseconds_to_blink&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;duration_cast&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;milliseconds&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;time_to_blink&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ...&lt;/span&gt;
    cout &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;blink &quot;&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; milliseconds_to_blink.&lt;span style=&quot;color: #3a5fcd; font-weight: bold; font-style: italic;&quot;&gt;count&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot; ms&quot;&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; endl;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;main&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;blink_led&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;2&lt;/span&gt;s&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
    &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;blink_led&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;150&lt;/span&gt;ms&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;0&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;pre class=&quot;example&quot;&gt;
blink 2000 ms
blink 150 ms
&lt;/pre&gt;



&lt;p&gt;
&lt;b&gt;强化&lt;/b&gt;
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;（简单）统计多少使用&lt;code&gt;void*&lt;/code&gt;作为参数和返回类型&lt;/li&gt;
&lt;li&gt;（简单）统计超过 1 个以上的布尔量作为参数的接口&lt;/li&gt;
&lt;li&gt;（困难）检查过多使用原生类型作为参数的函数&lt;/li&gt;
&lt;/ul&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines I.3 避免使用单例模式</title>
   <link href="http://kimi.im/2022-03-14-cppcoreguidelines-i3"/>
   <updated>2022-03-14T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-i3</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
I.3: Avoid singletons
&lt;/p&gt;

&lt;p&gt;
&lt;b&gt;理由&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
单例（ Singleton ）其实只不过是伪装了的复杂的全局对象:
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;例子&lt;/b&gt;
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-bad src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;Singleton&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ... lots of stuff to ensure that only one Singleton object is created,&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// that it is initialized properly, etc.&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
另外一个问题是，单例的形式也有很多种……
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;注意&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
如果希望全局对象的值不可变，可以把它声明为 &lt;code&gt;const&lt;/code&gt; 或 &lt;code&gt;constexpr&lt;/code&gt; 。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;例外&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
可以用最简单的单例模式。第一次使用的时候，把它初始化。
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;typedef&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;X&lt;/span&gt;;
&lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;X&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;myX&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;static&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;X&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;my_x&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;3&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; my_x;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;main&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    cout &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;myX&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; endl;
    cout &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;myX&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt;;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;0&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;pre class=&quot;example&quot;&gt;
3
3
&lt;/pre&gt;


&lt;p&gt;
以上是解决初始化顺序问题的最有效方法之一。在多线程环境下，初始化静态对象不会导致竞争条件。除非是在构造器中访问了共享对象。
&lt;/p&gt;

&lt;p&gt;
局部静态变量的初始会不会导致竞争条件。但是对象的解构如果需要同步进行的话，就要用简单一些的解决办法。比如：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-C++&quot;&gt;&lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;X&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;myX&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;static&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;auto&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;p&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;X&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;3&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;*&lt;/span&gt;p;  &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// potential leak&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
以上代码返回的是一个指针，就需要在某个地方以恰当的线程安全的方式删除其存储。这样就容易出错，所以尽量避免，除非：
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;&lt;code&gt;myX&lt;/code&gt; 是一个多线程代码，&lt;/li&gt;
&lt;li&gt;&lt;code&gt;X&lt;/code&gt; 对象需要释放，&lt;/li&gt;
&lt;li&gt;&lt;code&gt;X&lt;/code&gt; 的解构器代码同步进行。&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
如果定义了单实例类，该类只创建了一个对象，那么 &lt;code&gt;myX&lt;/code&gt; 函数就不是单实例。此种情况，也非本规则的例外。即也要遵循本规则。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;强化&lt;/b&gt;
&lt;/p&gt;

&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;找到名字中有 singleton 的类&lt;/li&gt;
&lt;li&gt;找到只创建一个对象的类：数对象数，检查构造器&lt;/li&gt;
&lt;li&gt;如类有一公开静态函数，函数里本地静态构造了此类的一对象，并作为指针或引用返回此对象。禁之。&lt;/li&gt;
&lt;/ul&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines I.2 避免使用全局变量</title>
   <link href="http://kimi.im/2022-03-09-cppcoreguidelines-i2"/>
   <updated>2022-03-09T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-i2</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
I.2: Avoid non-const global variables
&lt;/p&gt;

&lt;p&gt;
&lt;b&gt;理由&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
没有 &lt;code&gt;const&lt;/code&gt; 修饰的全局变量，即可变全局变量，会隐藏依赖关系，从而导致不可预料的结果。比如：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-bad src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;struct&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;Data&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ... lots of stuff ...&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;data&lt;/span&gt;;             &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// non-const data&lt;/span&gt;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;compute&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;      &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// don&apos;t&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ... use data ...&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;output&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;       &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// don&apos;t&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ... use data ...&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
可能还有其他地方会修改数据。这样的话， &lt;code&gt;compute&lt;/code&gt; 计算出来的数据结果，在
&lt;code&gt;output&lt;/code&gt; 函数中可能不是那个结果，因为中间其他某个地方也会修改这个数据。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;警告&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
全局的对象初始化的时候，不一定完全按顺序进行。因此，如果一定要用全局变量，最好用常数设置全局对象的值。需要注意的是 &lt;code&gt;const&lt;/code&gt; 对象的初始化顺序也是无序进行的。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;例外&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
全局对象一般来说比单实例 singleton 好。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;注意&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
全局常量自有其妙用。
&lt;/p&gt;

&lt;p&gt;
此规则也适用于名字空间范围的变量。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;其他选项&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
如果你要用全局（名字空间）变量来避免重复的复制传递参数，可以考虑以指向
&lt;code&gt;const&lt;/code&gt; 的引用形式传递数据。另一个解决办法是把数据定义为某个对象的状态，把该数据的操作函数设计成对象的成员方法。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;警告&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
小心避免数据竞争。如果一个线程能访问非局部数据（或作为引用传进来的数据），而另一个线程执行的时候修改该数据，就会造成数据竞争。任何可变数据的指针或引用都可能导致数据竞争。
&lt;/p&gt;

&lt;p&gt;
使用全局指针或引用访问/修改非 &lt;code&gt;const&lt;/code&gt; ，非全局的变量，依然避免不了隐藏的数据依赖关系，也可能导致数据竞争情况。
&lt;/p&gt;

&lt;p&gt;
不可变数据不会造成竞争情况。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;注意&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
当然也有例外情况，比如&lt;code&gt;cin&lt;/code&gt;, &lt;code&gt;cout&lt;/code&gt;,以及 &lt;code&gt;cerr&lt;/code&gt;.
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;强化&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
清点所有在名字空间作用域的非 &lt;code&gt;const&lt;/code&gt; 变量，以及全局范围的指向非 &lt;code&gt;const&lt;/code&gt; 数据的指针和引用。
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines I.1 接口定义要清晰明确</title>
   <link href="http://kimi.im/2022-02-22-cppcoreguidelines-i1"/>
   <updated>2022-02-22T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-i1</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
I.1: Make interfaces explicit
&lt;/p&gt;

&lt;p&gt;
&lt;b&gt;理由&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
正确性。没有定义的接口推测，很容易忽视，很难测试。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;例子&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
通过全局变量控制函数行为。很容易造成误解。
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-bad src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;round&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;double&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;d&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;round_up&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;?&lt;/span&gt; &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;ceil&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;d&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;:&lt;/span&gt; d;    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// don&apos;t: &quot;invisible&quot; dependency&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
一旦&lt;code&gt;round_up&lt;/code&gt;变了，传入相同的参数，返回不同的结果。
&lt;/p&gt;

&lt;p&gt;
例外：有时需要通过环境变量来切换一组操作，比如：
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;正常输出（ normal ）&lt;/li&gt;
&lt;li&gt;详细输出（ verbose ）&lt;/li&gt;
&lt;li&gt;debug&lt;/li&gt;
&lt;li&gt;优化（ optimized ）&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;
&lt;b&gt;例子&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
通过 &lt;code&gt;errno&lt;/code&gt; 等非局部变量报错，容易被忽略。
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-bad src-C++&quot;&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;// don&apos;t: no test of printf&apos;s return value&lt;/span&gt;
&lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;fprintf&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;connection, &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;logging: %d %d %d\n&quot;&lt;/span&gt;, x, y, s&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
&lt;code&gt;connection&lt;/code&gt; 可能挂掉，导致没有日志输出。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;替代方案&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
出错的时候，抛出一个异常。异常不会被忽略。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;替代方案&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
避免在接口之间以全局或隐藏的状态变量来传递信息。比如不是 &lt;code&gt;const&lt;/code&gt; 的成员函数通过修改对象的状态，来传递信息给其他成员函数。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;替代方案&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
传递信息的接口应该是一个函数或一组函数。函数可以是函数模板；一组函数可以是类或类模板。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;加强&lt;/b&gt;
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;函数不该通过 &lt;code&gt;namespace&lt;/code&gt; 作用域的变量决定控制流&lt;/li&gt;
&lt;li&gt;函数不可往 &lt;code&gt;namespace&lt;/code&gt; 作用域的变量写数据&lt;/li&gt;
&lt;/ul&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines P.13 选用适当的库</title>
   <link href="http://kimi.im/2022-02-15-cppcoreguidelines-p13"/>
   <updated>2022-02-15T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-p13</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
P.13: Use support libraries as appropriate
&lt;/p&gt;

&lt;p&gt;
&lt;b&gt;理由&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
设计精良、文档丰富、支持给力的程序库，可以节省大量的时间和精力。代码和文档的质量一般来说会比自己开发的更好。因为多个用户共享成果，分摊的时间、精力和金钱也更少。应用广泛的程序库，有更好的维护，也能更快适配新的系统，节省移植成本。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;例子&lt;/b&gt;
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-C++&quot;&gt;&lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;vector&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;v&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;4&lt;/span&gt;, &lt;span style=&quot;color: #110099;&quot;&gt;3&lt;/span&gt;, &lt;span style=&quot;color: #110099;&quot;&gt;6&lt;/span&gt;, &lt;span style=&quot;color: #110099;&quot;&gt;1&lt;/span&gt;, &lt;span style=&quot;color: #110099;&quot;&gt;9&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;
&lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;std&lt;/span&gt;::&lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;sort&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;begin&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;v&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;, &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;end&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;v&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;, &lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;std&lt;/span&gt;::&lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;greater&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;lt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;
&lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;std&lt;/span&gt;::&lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;for_each&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;begin&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;v&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;, &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;end&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;v&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;, &lt;span style=&quot;color: #7388d6;&quot;&gt;[](&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;auto&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;x&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;){&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;std&lt;/span&gt;::cout&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; x &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot; &quot;&lt;/span&gt;;&lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;
&lt;/pre&gt;
&lt;/div&gt;

&lt;pre class=&quot;example&quot;&gt;
9 6 4 3 1
&lt;/pre&gt;


&lt;p&gt;
通常标准库提供的排序算法执行效率比较高。尽量使用标准库，除非有特殊原因，需要自己实现排序等标准库中的算法。
&lt;/p&gt;

&lt;p&gt;
&lt;b&gt;注意&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
尽量使用：
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;ISO C++ 标准库&lt;/li&gt;
&lt;li&gt;Guidelines Support Library (GSL)&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;
&lt;b&gt;注意&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
如果某个领域没有合适的设计精良、文档清晰、支持良好的程序库，或许你应该自己实现一套，然后在代码中使用。
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines P.12 选用适当的工具</title>
   <link href="http://kimi.im/2022-02-14-cppcoreguidelines-p12"/>
   <updated>2022-02-14T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-p12</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
P.12: Use supporting tools as appropriate
&lt;/p&gt;

&lt;p&gt;
&lt;b&gt;理由&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
机器比人更擅长重复性的工作。人的精力要用在创新性的事情上。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;例子&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
可以使用静态代码检查工具、并行计算分析工具、测试工具来执行重复性的任务。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;注意&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
注意不要太依赖于太过专门的、太过细致的工具，后果是代码移植困难。
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines P.11 通过封装整理混乱代码</title>
   <link href="http://kimi.im/2022-01-04-cppcoreguidelines-p11"/>
   <updated>2022-01-04T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-p11</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
P.11: Encapsulate messy constructs, rather than spreading through the code
&lt;/p&gt;

&lt;p&gt;
&lt;b&gt;理由&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
代码散乱既难维护又容易隐藏 bug。尽量通过接口封装代码，好的接口易用有安全。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;例子&lt;/b&gt;
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-bad src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;sz&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;10&lt;/span&gt;;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;*&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;p&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;malloc&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;sizeof&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;*&lt;/span&gt; sz&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;count&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;0&lt;/span&gt;;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;input_max&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;20&lt;/span&gt;;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;input_val&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;0&lt;/span&gt;;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;for&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;;;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;x&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;input_val&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;++&lt;/span&gt;;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;input_val &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt; input_max&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;break&lt;/span&gt;;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;count &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;==&lt;/span&gt; sz&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;
        &lt;span style=&quot;color: #000000;&quot;&gt;p&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;realloc&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;p, &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;sizeof&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;*&lt;/span&gt; sz &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;*&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;2&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
    &lt;span style=&quot;color: #000000;&quot;&gt;p&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;count&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;++&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;]&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; x;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;for&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;i&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;0&lt;/span&gt;; i&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;count; &lt;span style=&quot;color: #000000;&quot;&gt;i&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;++&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt; cout &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; p&lt;span style=&quot;color: #707183;&quot;&gt;[&lt;/span&gt;i&lt;span style=&quot;color: #707183;&quot;&gt;]&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot; &quot;&lt;/span&gt;;
&lt;/pre&gt;
&lt;/div&gt;

&lt;pre class=&quot;example&quot;&gt;
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 
&lt;/pre&gt;


&lt;p&gt;
上面的代码进行底层内存操作、繁琐又容易出错。此处可以使用 &lt;code&gt;vector&lt;/code&gt; ：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-C++&quot;&gt;&lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;vector&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;v&lt;/span&gt;;
v.&lt;span style=&quot;color: #3a5fcd; font-weight: bold; font-style: italic;&quot;&gt;reserve&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;100&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;input_max&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;20&lt;/span&gt;;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;input_val&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;0&lt;/span&gt;;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;for&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;;;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;x&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;input_val&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;++&lt;/span&gt;;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;input_val &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt; input_max&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;break&lt;/span&gt;;
    v.&lt;span style=&quot;color: #3a5fcd; font-weight: bold; font-style: italic;&quot;&gt;push_back&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;x&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;std&lt;/span&gt;::&lt;span style=&quot;color: #3a5fcd; font-weight: bold; font-style: italic;&quot;&gt;ranges&lt;/span&gt;&lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;::for_each&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;v, &lt;span style=&quot;color: #7388d6;&quot;&gt;[](&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;auto&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;x&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;){&lt;/span&gt;cout &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; x &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot; &quot;&lt;/span&gt;;&lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;
&lt;/pre&gt;
&lt;/div&gt;

&lt;pre class=&quot;example&quot;&gt;
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 
&lt;/pre&gt;



&lt;p&gt;
&lt;b&gt;注意&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
标准库和 GSL 是符合本条原则指南的。比如，为了避免数组、联合体、类型转换等诡异的生命周期管理。&lt;code&gt;gsl::owner&lt;/code&gt;等工具可以实现关键的抽象机制，比如
&lt;code&gt;vector&lt;/code&gt; , &lt;code&gt;span&lt;/code&gt;, &lt;code&gt;lock_guard&lt;/code&gt;, &lt;code&gt;future&lt;/code&gt; 等。我们应该使用那些由更专业的时间花费大量时间开发的程序库。同样的，我们应当设计实现更多专业的程序库给用户使用，而不是让他们（很多时候是我们自己）重复的处理底层代码。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;强化&lt;/b&gt;
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;检查“混乱的代码”，比如复杂的指针操作、抽象实现之外的类型转换。&lt;/li&gt;
&lt;/ul&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines P.10 能用不可变数据就不用可变数据</title>
   <link href="http://kimi.im/2021-12-31-cppcoreguidelines-p10"/>
   <updated>2021-12-31T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-p10</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
P.10 Prefer immutable data to mutable data
&lt;/p&gt;

&lt;p&gt;
&lt;b&gt;理由&lt;/b&gt;
&lt;/p&gt;

&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;常量的计算更容易进行推导。&lt;/li&gt;
&lt;li&gt;不可变数据能避免一些未知的改变。&lt;/li&gt;
&lt;li&gt;不可变数据能更好的优化。&lt;/li&gt;
&lt;li&gt;不会产生数据竞争。&lt;/li&gt;
&lt;/ul&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines P.9 不要浪费计算时间和计算空间</title>
   <link href="http://kimi.im/2021-12-30-cppcoreguidelines-p9"/>
   <updated>2021-12-30T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-p9</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
P.9: Don&amp;rsquo;t waste time or space
&lt;/p&gt;

&lt;p&gt;
&lt;b&gt;理由&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
This is C++.
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;注意&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
为更好达到既定目的，可以消耗更多计算时间和计算空间。比如加快开发进度、保障资源安全、简化系统测试。
&lt;/p&gt;

&lt;p&gt;
亚历山大·斯特潘诺夫曾说过：追求效率的另一个好处是，这个过程可以迫使你更深入地理解所要解决的问题。
&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;
&amp;ldquo;Another benefit of striving for efficiency is that the process forces
you to understand the problem in more depth.&amp;rdquo; - Alex Stepanov
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;
注：亚历山大·斯特潘诺夫（&lt;a href=&quot;http://stepanovpapers.com/&quot;&gt;Alexander Stepanov&lt;/a&gt;），Alex Stepanov，
STL（标准模板库）之父，并因此在 1995 年获得了第一届Dr. Dobb&amp;rsquo;s程序设计杰出奖，他曾任 Compaq 公司副总裁和首席科学家，AT&amp;amp;T 实验室副总裁和首席构架师， SGI 服务器和巨型计算机公司技术总监。Alexander 曾先后在 HP 实验室、AT&amp;amp;T 实验室、通用电气公司 R&amp;amp;D、Polytechnic University of New York
大学控制研究所和复杂自动化研究所工作和研究了 25 年。他的研究工作涉及程序设计、语言设计、存贮系统、路径计划算法、实时操作系统等。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;例子&lt;/b&gt;
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-bad src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;struct&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;X&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;char&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;ch&lt;/span&gt;;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;i&lt;/span&gt;;
    &lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;string&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;s&lt;/span&gt;;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;char&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;ch2&lt;/span&gt;;

    &lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;X&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt; operator&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;X&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;a&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;
        &lt;span style=&quot;color: #000000;&quot;&gt;ch&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; a.&lt;span style=&quot;color: #110099; font-style: italic;&quot;&gt;ch&lt;/span&gt;; &lt;span style=&quot;color: #000000;&quot;&gt;i&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; a.&lt;span style=&quot;color: #110099; font-style: italic;&quot;&gt;i&lt;/span&gt;; &lt;span style=&quot;color: #000000;&quot;&gt;s&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; a.&lt;span style=&quot;color: #110099; font-style: italic;&quot;&gt;s&lt;/span&gt;; &lt;span style=&quot;color: #000000;&quot;&gt;ch2&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; a.&lt;span style=&quot;color: #110099; font-style: italic;&quot;&gt;ch2&lt;/span&gt;;
        &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;this&lt;/span&gt;;
    &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;
    &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;X&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;ch&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;&apos;\0&apos;&lt;/span&gt;; &lt;span style=&quot;color: #000000;&quot;&gt;i&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;0&lt;/span&gt;; &lt;span style=&quot;color: #000000;&quot;&gt;s&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;&quot;&lt;/span&gt;; &lt;span style=&quot;color: #000000;&quot;&gt;ch2&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;&apos;\0&apos;&lt;/span&gt;;&lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;
    &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;X&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;X&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;a&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;ch&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; a.&lt;span style=&quot;color: #110099; font-style: italic;&quot;&gt;ch&lt;/span&gt;; &lt;span style=&quot;color: #000000;&quot;&gt;i&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; a.&lt;span style=&quot;color: #110099; font-style: italic;&quot;&gt;i&lt;/span&gt;; &lt;span style=&quot;color: #000000;&quot;&gt;s&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; a.&lt;span style=&quot;color: #110099; font-style: italic;&quot;&gt;s&lt;/span&gt;; &lt;span style=&quot;color: #000000;&quot;&gt;ch2&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; a.&lt;span style=&quot;color: #110099; font-style: italic;&quot;&gt;ch2&lt;/span&gt;;&lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;

&lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;X&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;waste&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;char&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;*&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;p&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;!&lt;/span&gt;p&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;throw&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;bad_exception&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;{}&lt;/span&gt;;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;n&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;strlen&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;p&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
    &lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;auto&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;buf&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;char&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;[&lt;/span&gt;n&lt;span style=&quot;color: #7388d6;&quot;&gt;]&lt;/span&gt;;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;!&lt;/span&gt;buf&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;throw&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;bad_alloc&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;{}&lt;/span&gt;;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;for&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;i&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;0&lt;/span&gt;; i &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt; n; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;++&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;i&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;
        &lt;span style=&quot;color: #000000;&quot;&gt;buf&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;[&lt;/span&gt;i&lt;span style=&quot;color: #7388d6;&quot;&gt;]&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; p&lt;span style=&quot;color: #7388d6;&quot;&gt;[&lt;/span&gt;i&lt;span style=&quot;color: #7388d6;&quot;&gt;]&lt;/span&gt;;     &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ... manipulate buffer ...&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;X&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;x&lt;/span&gt;;
    x.&lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;ch&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;&apos;a&apos;&lt;/span&gt;;
    x.&lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;s&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;string&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;n, &lt;span style=&quot;color: #110099;&quot;&gt;&apos;\0&apos;&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;  &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// give x.s space for *p&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;for&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;gsl&lt;/span&gt;::&lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;index&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;i&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;0&lt;/span&gt;; i &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt; x.&lt;span style=&quot;color: #110099; font-style: italic;&quot;&gt;s&lt;/span&gt;.&lt;span style=&quot;color: #3a5fcd; font-weight: bold; font-style: italic;&quot;&gt;size&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;()&lt;/span&gt;; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;++&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;i&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;
        x.&lt;span style=&quot;color: #110099; font-style: italic;&quot;&gt;s&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;[&lt;/span&gt;i&lt;span style=&quot;color: #7388d6;&quot;&gt;]&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; buf&lt;span style=&quot;color: #7388d6;&quot;&gt;[&lt;/span&gt;i&lt;span style=&quot;color: #7388d6;&quot;&gt;]&lt;/span&gt;;    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// copy buf into x.s&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;delete&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;[]&lt;/span&gt; buf;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; x;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;driver&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;X&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;x&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;waste&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;Typical argument&quot;&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
    cout &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; x.&lt;span style=&quot;color: #110099; font-style: italic;&quot;&gt;s&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; endl;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;main&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;driver&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt;;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;0&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;pre class=&quot;example&quot;&gt;
Typical argument
&lt;/pre&gt;


&lt;p&gt;
以上例子以夸张的手法，展现了计算资源如何被无情的浪费。 &lt;code&gt;X&lt;/code&gt; 的内部数据布局至少浪费了 6 字节（每个 &lt;code&gt;char&lt;/code&gt; 处浪费 3 字节）。 &lt;code&gt;buf&lt;/code&gt; 多余的创建和删除操作。
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-bad src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;lower&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;zstring&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;s&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;for&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;i&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;0&lt;/span&gt;; i &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt; &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;strlen&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;s&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt;; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;++&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;i&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;s&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;[&lt;/span&gt;i&lt;span style=&quot;color: #7388d6;&quot;&gt;]&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;tolower&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;s&lt;span style=&quot;color: #909183;&quot;&gt;[&lt;/span&gt;i&lt;span style=&quot;color: #909183;&quot;&gt;]&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
以上代码中，&lt;code&gt;i &amp;lt; strlen(s)&lt;/code&gt;每次循环都会执行。因为只是改了字符串字符的大小写，并不改变字符串长度，因此没必要重复计算 &lt;code&gt;s&lt;/code&gt; 的长度。因此可以这样改：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;lower&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;zstring&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;s&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;len&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;strlen&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;s&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;for&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;i&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;0&lt;/span&gt;; i &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt; len; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;++&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;i&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;s&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;[&lt;/span&gt;i&lt;span style=&quot;color: #7388d6;&quot;&gt;]&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;tolower&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;s&lt;span style=&quot;color: #909183;&quot;&gt;[&lt;/span&gt;i&lt;span style=&quot;color: #909183;&quot;&gt;]&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;
&lt;b&gt;注意&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
个别例子中，我们很容易发现浪费资源的情况，也很容易修复。但是，如果整个代码库中都分散着浪费资源的情况，我们就很难及时发现并修复了。所以，本条指南期望能够在使用C++前发现大部分浪费资源的情况。然后，通过检查算法和需求，发现更深层次的资源浪费的情况。不过，这些超出了本指南的范围。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;强化&lt;/b&gt;
&lt;/p&gt;

&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;检查标记返回值未被使用的，某些用户自定义的，非默认的后缀操作，如
&lt;code&gt;operator++&lt;/code&gt; 和 &lt;code&gt;operator--&lt;/code&gt; 函数。选择使用前缀形式。&lt;/li&gt;
&lt;/ul&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines P.8 资源不可泄漏</title>
   <link href="http://kimi.im/2021-12-29-cppcoreguidelines-p8"/>
   <updated>2021-12-29T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-p8</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
P.8 Don&amp;rsquo;t leak any resources
&lt;/p&gt;

&lt;p&gt;
&lt;b&gt;理由&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
如果系统长期运行的，哪怕是没有及时释放的很小的资源，也有可能耗尽系统的资源。所以，对于长期运行的系统，切不可泄漏资源。另外，及时释放系统资源也是一种负责任的编程态度。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;例子&lt;/b&gt;
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-bad src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;char&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;*&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;name&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;FILE&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;*&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;input&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;fopen&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;name, &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;r&quot;&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ...&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;something&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt;;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// bad: if something == true, a file handle is leaked&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ...&lt;/span&gt;
    &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;fclose&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;input&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
以上例程中，如果 &lt;code&gt;something&lt;/code&gt; 为真，函数直接返回了，没有及时关闭 &lt;code&gt;input&lt;/code&gt; 文件结构体，产生资源泄漏。
&lt;/p&gt;

&lt;p&gt;
应该使用 &lt;a href=&quot;./2023-02-07-cppcoreguidelines-r1&quot;&gt;RAII&lt;/a&gt; 模式。RAII = Resource Acquisition Is Initialization 意思是分配资源的时候初始化，资源使用结束后，自动释放。
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;char&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;*&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;name&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;ifstream&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;input&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;name&lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ...&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;something&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt;;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// OK: no leak&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ...&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
改用 &lt;code&gt;ifstream&lt;/code&gt; 文件输入对象可以避免资源泄漏。当函数返回的时候，自动调用析构函数释放内存数据。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;注意&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
所谓的泄漏（ leak ）通俗的讲，就是出现资源没有及时释放的情况。细分下去，更重要的一类泄漏是：存在无法被释放的资源。比如，你在内存堆中创建了一个对象，然后在程序运行过程中，该对象的地址指针被其他数据覆盖掉了。因为这个对象的地址信息丢失了，你就无法释放这个对象了。所以，对任何中途结束的函数，要么及时释放内存，要么把函数分配的对象返回给上层函数继续使用或者晚些时候释放。
&lt;/p&gt;

&lt;p&gt;
不过，我们也不要求你在程序结束的时候一定要返回某个常驻对象的地址。因为程序结束的时候，系统会自动清理分配给该程序的内存。
&lt;/p&gt;

&lt;p&gt;
然而，最简单、最安全的方法还是应该利用抽象机制隐式地释放资源。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;注意&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
通过强化“生命周期安全规范”，可以避免资源泄漏。再结合 RAII，就不需要垃圾回收机制。再结合“类型和边界检测规范”，我们就可以通过工具实现完整的类型和资源安全。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;强化&lt;/b&gt;
&lt;/p&gt;

&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;检查指针的使用。区分有主和无主指针。如以上例子用标准库资源输入流对象替换文件句柄。或者可能的话，用 GSL 中的 &lt;code&gt;owner&lt;/code&gt; 所有权指针标记资源所有权。&lt;/li&gt;
&lt;li&gt;&lt;p&gt;
检查原始的 &lt;code&gt;new&lt;/code&gt; 和 &lt;code&gt;delete&lt;/code&gt; 操作。考虑使用定义了释放规则的接口封装：
&lt;/p&gt;
&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-C++&quot;&gt;  &lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;shared_ptr&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;p&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;10&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;]&lt;/span&gt;&amp;#65292; &lt;span style=&quot;color: #7388d6;&quot;&gt;[]&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;*&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;p&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;delete&lt;/span&gt; &lt;span style=&quot;color: #909183;&quot;&gt;[]&lt;/span&gt;p;&lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;检查返回值是原始指针（raw pointer）的资源分配函数。比如： &lt;code&gt;fopen&lt;/code&gt;, &lt;code&gt;malloc&lt;/code&gt;,
&lt;code&gt;strdup&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
</content>
 </entry>
 
 <entry>
   <title>单词本：rire jaune</title>
   <link href="http://kimi.im/2021-12-28-francais-rire-jaune"/>
   <updated>2021-12-28T00:00:00+00:00</updated>
   <id>http://kimi.im/francais-rire-jaune</id>
   <content type="html">&lt;p&gt;
最近看到法语里，有些颜色的词语，在特殊情况下，可以作为副词使用，也是蛮有趣的。比如说 jaune “黄色”这个词。用它来形容 rire “笑”的时候，并不是黄色的笑，而是假笑少年的假笑。
&lt;/p&gt;

&lt;p&gt;
比如这句话：Elle a &lt;b&gt;ri jaune&lt;/b&gt; quand tu lui as dit que tu ne partais pas
en vacances avec elle. 当你告诉她你不带上她一起去度假，她假假地笑了下（其实很生气）。
&lt;/p&gt;

&lt;p&gt;
这句话里， jaune 是作为副词形容 ri 的。
&lt;/p&gt;

&lt;p&gt;
英语里还不曾找到类似的说法。只能说，法语比较色彩斑斓了。
&lt;/p&gt;

&lt;p&gt;
德语黄色 gelb 有时候是蛋黄的意思（Das Eigelb）。因为德国人觉得蛋黄营养好，味道好，比蛋白好吃。所以呢 das Gelbe vom Ei 又有精采、极好之意。
&lt;/p&gt;

&lt;p&gt;
比如 Deine Hilfe beim Projekt war &lt;b&gt;das Gelbe vom Ei&lt;/b&gt;, danke! （你的帮助对项目来说非常重要，谢谢。）
&lt;/p&gt;

&lt;p&gt;
所以，如果德国人跟你说，你不是蛋黄的话，可能你需要再努力努力干活了。比如 Das Buch, das ich gestern gelesen habe, war nicht gerade &lt;b&gt;das Gelbe
vom Ei&lt;/b&gt;. （我昨天读的这本书不是最棒的。）
&lt;/p&gt;

&lt;p&gt;
哦，这还是德国一部喜剧片的片名：Das Gelbe vom Ei (TV Movie 1999) Das
Gelbe vom Ei: Directed by Lars Becker. With Moritz Bleibtreu, Meret
Becker, Dietmar Bär, Heike Makatsch.
&lt;/p&gt;

&lt;p&gt;
好了，今天的重点：
&lt;/p&gt;

&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;法语里，黄黄地笑（rire jaune）是假笑、苦涩的笑、生气的笑&lt;/li&gt;
&lt;li&gt;德语里，黄色（gelb）也是蛋黄。蛋黄（das Gelbe vom Ei）是最棒的。&lt;/li&gt;
&lt;/ul&gt;
</content>
 </entry>
 
 <entry>
   <title>单词本：juxtapose</title>
   <link href="http://kimi.im/2021-12-25-english-juxtapose"/>
   <updated>2021-12-25T00:00:00+00:00</updated>
   <id>http://kimi.im/english-juxtapose</id>
   <content type="html">&lt;p&gt;
昨天看了一个写作技巧的文章。在讲到怎么给文章标题取名的时候，作者
Michael Nielsen 提到概念并列技巧。
&lt;/p&gt;

&lt;p&gt;
并置：很多标题将两个不太相关的概念并置在一起。奇特的并置会产生特别的效果。
&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;
&lt;b&gt;Juxtaposition&lt;/b&gt;: Many titles &lt;b&gt;juxtapose&lt;/b&gt; two words (or concepts) that are not
usually together. This is particularly effective when the &lt;b&gt;juxtaposition&lt;/b&gt; is
surprising, but in retrospect meaningful. &amp;ldquo;The Selfish Gene&amp;rdquo; is, for example,
more surprising than &amp;ldquo;The Future of Ideas&amp;rdquo;. &amp;ldquo;Future Shock&amp;rdquo; is an excellent
&lt;b&gt;juxtaposition&lt;/b&gt;.&lt;sup&gt;&lt;a id=&quot;fnr.1&quot; class=&quot;footref&quot; href=&quot;#fn.1&quot; role=&quot;doc-backlink&quot;&gt;1&lt;/a&gt;&lt;/sup&gt;
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;
例如：He is known for &lt;b&gt;juxtaposing&lt;/b&gt; a variety of different musical
styles. 他懂得如何将不同的音乐风格并置在一起（产生特殊效果）。
&lt;/p&gt;

&lt;p&gt;
另外，在 Clojure 编程语言里，有个函数就叫 &lt;code&gt;juxt&lt;/code&gt; ：
&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;
(juxt f)  (juxt f g)  (juxt f g h)  (juxt f g h &amp;amp; fs)
&lt;/p&gt;

&lt;p&gt;
Takes a set of functions and returns a fn that is the juxtaposition
of those fns.  The returned fn takes a variable number of args, and
returns a vector containing the result of applying each fn to the
args (left-to-right).
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;
&lt;code&gt;juxt&lt;/code&gt; 函数可以接受多个函数作为参数，将这些函数串联起来，然后形成一个新的函数。这个新的函数可以把计算结果并置装进一个 &lt;code&gt;vec&lt;/code&gt; 。我们写几个例子看看：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-clojure&quot;&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;juxt&lt;/span&gt; first last&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;Guten Morgen&quot;&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;pre class=&quot;example&quot;&gt;
[\G \n]
&lt;/pre&gt;


&lt;p&gt;
上面这个语句将 &lt;code&gt;first&lt;/code&gt; 函数和 &lt;code&gt;last&lt;/code&gt; 函数并置一起，形成一个新的 &lt;code&gt;first-last&lt;/code&gt;
函数。然后我们将这个新的函数应用到 &amp;ldquo;Guten Morgen&amp;rdquo; 上，就的到了这个字符串的第一个字符和最后一个字符。
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-clojure&quot;&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;juxt&lt;/span&gt; take drop&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; 3 &lt;span style=&quot;color: #7388d6;&quot;&gt;[&lt;/span&gt;1 2 3 4 5 6 7 8&lt;span style=&quot;color: #7388d6;&quot;&gt;]&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;pre class=&quot;example&quot;&gt;
[(1 2 3) (4 5 6 7 8)]
&lt;/pre&gt;


&lt;p&gt;
上面这个 &lt;code&gt;juxt&lt;/code&gt; 并置了 &lt;code&gt;take&lt;/code&gt; 函数和 &lt;code&gt;drop&lt;/code&gt; 函数。前者取后面的 &lt;code&gt;vec&lt;/code&gt; 的前三个元素，后者取丢掉前三个元素后剩下的。然后把两个结果放入一个 &lt;code&gt;vec&lt;/code&gt; 。
&lt;/p&gt;
&lt;div id=&quot;footnotes&quot;&gt;
&lt;h2 class=&quot;footnotes&quot;&gt;Footnotes: &lt;/h2&gt;
&lt;div id=&quot;text-footnotes&quot;&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.1&quot; class=&quot;footnum&quot; href=&quot;#fnr.1&quot; role=&quot;doc-backlink&quot;&gt;1&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot; role=&quot;doc-footnote&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;https://github.com/mnielsen/notes-on-writing/blob/master/notes_on_writing.md&quot;&gt;https://github.com/mnielsen/notes-on-writing/blob/master/notes_on_writing.md&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;


&lt;/div&gt;
&lt;/div&gt;
</content>
 </entry>
 
 <entry>
   <title>Send and Receive outlook email in WSL2 Emacs with mu4e, offlineimap and gnugpg</title>
   <link href="http://kimi.im/2021-12-24-wsl-emacs-mu4e-offlineimap-gpg"/>
   <updated>2021-12-24T00:00:00+00:00</updated>
   <id>http://kimi.im/wsl-emacs-mu4e-offlineimap-gpg</id>
   <content type="html">&lt;p&gt;
I&amp;rsquo;ve tried many times to enable &lt;a href=&quot;https://github.com/djcb/mu&quot;&gt;mu4e&lt;/a&gt; and &lt;a href=&quot;https://github.com/OfflineIMAP/offlineimap&quot;&gt;offlineimap&lt;/a&gt; in &lt;a href=&quot;https://www.msys2.org/&quot;&gt;msys2&lt;/a&gt;
environment, but no result. Although the author of mu4e provides the
&lt;a href=&quot;https://github.com/msys2-unofficial/MSYS2-packages&quot;&gt;unofficial package files&lt;/a&gt; for msys2, but I still get a compile
failure. Worse off, offlineimap is not working in msys2 environment.
&lt;/p&gt;

&lt;p&gt;
I&amp;rsquo;ve configured &lt;a href=&quot;http://kimi.im/2021-01-28-emacs-inside-manjaro-wsl2-windows&quot;&gt;emacs under WSL2&lt;/a&gt; and I feel little difference from
msys2 mingw64 emacs. And It is also quite easy to configure mu4e and
offlineimap for &lt;a href=&quot;https://github.com/sileshn/ManjaroWSL&quot;&gt;Manjaro&lt;/a&gt;.
&lt;/p&gt;

&lt;p&gt;
This guide will lead you to configure mu4e and offlineimap in emacs,
and securely encrypt the email credentials.
&lt;/p&gt;

&lt;div id=&quot;outline-container-org3341aa0&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;org3341aa0&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;1.&lt;/span&gt; install&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-1&quot;&gt;
&lt;p&gt;
Supposing you have configured &lt;a href=&quot;http://kimi.im/2021-01-28-emacs-inside-manjaro-wsl2-windows&quot;&gt;Manjaro WSL2&lt;/a&gt; and then open Manjaro WSL2
shell:
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-sh&quot;&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;# &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;install pip&lt;/span&gt;
sudo pacman -S python-pip
&lt;span style=&quot;color: #3F7F5F;&quot;&gt;# &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;install python gpg&lt;/span&gt;
sudo pip install python-gnupg getpass4
&lt;span style=&quot;color: #3F7F5F;&quot;&gt;# &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;offlineimap&lt;/span&gt;
sudo pacman -S offlineimap
&lt;span style=&quot;color: #3F7F5F;&quot;&gt;# &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;mu4e&lt;/span&gt;
wget https://github.com/djcb/mu/archive/1.6.10.tar.gz
tar zxvf 1.6.10.tar.gz
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;cd&lt;/span&gt; mu-1.6.10
./augogen.sh
make
sudo make install
&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-org32fd6de&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;org32fd6de&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;2.&lt;/span&gt; configure Emacs&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-2&quot;&gt;
&lt;p&gt;
Emacs config extracted from my &lt;a href=&quot;https://github.com/kimim/kimim-emacs&quot;&gt;.emacs&lt;/a&gt;:
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-emacs-lisp&quot;&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;;; &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;get load path&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;eval-and-compile&lt;/span&gt;
  &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;defun&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;mu4e-load-path&lt;/span&gt; &lt;span style=&quot;color: #909183;&quot;&gt;()&lt;/span&gt;
    &lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;cond&lt;/span&gt; &lt;span style=&quot;color: #709870;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #907373;&quot;&gt;(&lt;/span&gt;eq system-type &apos;darwin&lt;span style=&quot;color: #907373;&quot;&gt;)&lt;/span&gt;
           &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;/usr/local/Cellar/mu/1.0_1/share/emacs/site-lisp/mu/mu4e&quot;&lt;/span&gt;&lt;span style=&quot;color: #709870;&quot;&gt;)&lt;/span&gt;
          &lt;span style=&quot;color: #709870;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #907373;&quot;&gt;(&lt;/span&gt;eq system-type &apos;windows-nt&lt;span style=&quot;color: #907373;&quot;&gt;)&lt;/span&gt;
           &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;/usr/local/share/emacs/site-lisp/mu4e&quot;&lt;/span&gt;&lt;span style=&quot;color: #709870;&quot;&gt;)&lt;/span&gt;
          &lt;span style=&quot;color: #709870;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #907373;&quot;&gt;(&lt;/span&gt;eq system-type &apos;gnu/linux&lt;span style=&quot;color: #907373;&quot;&gt;)&lt;/span&gt;
           &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;/usr/local/share/emacs/site-lisp/mu4e/&quot;&lt;/span&gt;&lt;span style=&quot;color: #709870;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;

&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;use-package&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;mu4e&lt;/span&gt;
  &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;:ensure&lt;/span&gt; nil
  &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;:functions&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;mu4e-compose-reply
              mu4e~view-quit-buffer&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;
  &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;:defines&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;mu4e-html2text-command
            mu4e-mu-binary
            mu4e-get-mail-command
            mu4e-update-interval
            mu4e-hide-index-messages
            mu4e-use-fancy-chars
            mu4e-view-show-images
            mu4e-view-fields
            mu4e-headers-fields
            mu4e-compose-cite-function
            mu4e-compose-reply-recipients
            mu4e-headers-mode-map
            mu4e-compose-mode-map
            mu4e-view-mode-map
            shr-color-visible-luminance-min
            shr-color-visible-distance-min&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;
  &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;:custom&lt;/span&gt;
  &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;mu4e-compose-reply-recipients &apos;sender&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;
  &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;mu4e-compose-signature-auto-include nil&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;
  &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;mu4e-index-update-in-background nil&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;;; &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;prompt for gpg passwd&lt;/span&gt;
  &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;:commands&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;mu4e mu4e-compose-new&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;
  &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;:load-path&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;lambda&lt;/span&gt; &lt;span style=&quot;color: #909183;&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;list &lt;span style=&quot;color: #709870;&quot;&gt;(&lt;/span&gt;mu4e-load-path&lt;span style=&quot;color: #709870;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;
  &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;:config&lt;/span&gt;
  &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;require&lt;/span&gt; &apos;&lt;span style=&quot;color: #110099;&quot;&gt;sendmail&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;
  &lt;span style=&quot;color: #3F7F5F;&quot;&gt;;; &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;turn html email to lighter color in dark theme&lt;/span&gt;
  &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;require&lt;/span&gt; &apos;&lt;span style=&quot;color: #110099;&quot;&gt;mu4e-contrib&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;
  &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;setq&lt;/span&gt; mu4e-html2text-command &apos;mu4e-shr2text&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;
  &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;setq&lt;/span&gt; shr-color-visible-luminance-min 60&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;
  &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;setq&lt;/span&gt; shr-color-visible-distance-min 5&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;
  &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;setq&lt;/span&gt; shr-use-colors nil&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;
  &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;advice-add #&apos;shr-colorize-region &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;:around&lt;/span&gt;
              &lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;defun&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;shr-no-colourise-region&lt;/span&gt; &lt;span style=&quot;color: #709870;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;&amp;amp;rest&lt;/span&gt; ignore&lt;span style=&quot;color: #709870;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;

  &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;require&lt;/span&gt; &apos;&lt;span style=&quot;color: #110099;&quot;&gt;org-mu4e&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;;; &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;capture link&lt;/span&gt;
  &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;add-to-list &apos;Info-additional-directory-list &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;/usr/local/share/info&quot;&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;
  &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;setq&lt;/span&gt; mu4e-mu-binary &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;/usr/local/bin/mu&quot;&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;
  &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;setq&lt;/span&gt; mail-user-agent &apos;mu4e-user-agent&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;
  &lt;span style=&quot;color: #3F7F5F;&quot;&gt;;; &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;Fetch mail by offlineimap&lt;/span&gt;
  &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;setq&lt;/span&gt; mu4e-get-mail-command &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;offlineimap -c ~/.offlineimaprc -u quiet&quot;&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;
  &lt;span style=&quot;color: #3F7F5F;&quot;&gt;;; &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;Fetch mail in 60 sec interval&lt;/span&gt;
  &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;setq&lt;/span&gt; mu4e-update-interval 300&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;
  &lt;span style=&quot;color: #3F7F5F;&quot;&gt;;; &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;hide indexing messages from minibuffer&lt;/span&gt;
  &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;setq&lt;/span&gt; mu4e-hide-index-messages t&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;
  &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;setq&lt;/span&gt; mu4e-use-fancy-chars nil&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;
  &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;setq&lt;/span&gt; mu4e-view-show-images t&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;
  &lt;span style=&quot;color: #3F7F5F;&quot;&gt;;; &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;configure view fields&lt;/span&gt;
  &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;setq&lt;/span&gt; mu4e-view-fields
        &apos;&lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;:subject&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;:from&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;:to&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;:cc&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;:date&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;:mailing-list&lt;/span&gt;
                   &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;:attachments&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;:signature&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;:decryption&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;
  &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;setq&lt;/span&gt; mu4e-headers-fields
        &apos;&lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt; &lt;span style=&quot;color: #709870;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;:human-date&lt;/span&gt;    .   12&lt;span style=&quot;color: #709870;&quot;&gt;)&lt;/span&gt;
           &lt;span style=&quot;color: #709870;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;:flags&lt;/span&gt;         .    6&lt;span style=&quot;color: #709870;&quot;&gt;)&lt;/span&gt;
           &lt;span style=&quot;color: #709870;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;:from&lt;/span&gt;          .   22&lt;span style=&quot;color: #709870;&quot;&gt;)&lt;/span&gt;
           &lt;span style=&quot;color: #709870;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;:subject&lt;/span&gt;       .   nil&lt;span style=&quot;color: #709870;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;
  &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;setq&lt;/span&gt; mu4e-compose-cite-function &apos;mu-cite-original&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;
  &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;add-hook &apos;mu4e-view-mode-hook &apos;visual-line-mode&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;
  &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;add-hook &apos;mu4e-compose-mode-hook &apos;orgalist-mode&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;
  &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;add-hook &apos;mu4e-compose-mode-hook &lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;lambda&lt;/span&gt; &lt;span style=&quot;color: #709870;&quot;&gt;()&lt;/span&gt;
                                      &lt;span style=&quot;color: #709870;&quot;&gt;(&lt;/span&gt;auto-fill-mode -1&lt;span style=&quot;color: #709870;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;
  &lt;span style=&quot;color: #3F7F5F;&quot;&gt;;; &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;setup shortcuts&lt;/span&gt;
  &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;setq&lt;/span&gt; mu4e-maildir-shortcuts
        &apos;&lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt; &lt;span style=&quot;color: #709870;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;/outlook/Inbox&quot;&lt;/span&gt;    . ?i&lt;span style=&quot;color: #709870;&quot;&gt;)&lt;/span&gt;
           &lt;span style=&quot;color: #709870;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;/outlook/Sent&quot;&lt;/span&gt;     . ?s&lt;span style=&quot;color: #709870;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;
  &lt;span style=&quot;color: #3F7F5F;&quot;&gt;;; &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;smtp send settings&lt;/span&gt;
  &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;setq&lt;/span&gt; send-mail-function &apos;smtpmail-send-it
        smtpmail-stream-type &apos;starttls
        smtpmail-smtp-service 587&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgca7d5f2&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgca7d5f2&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;3.&lt;/span&gt; add .offlineimaprc&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-3&quot;&gt;
&lt;p&gt;
create &lt;code&gt;~/.offlineimaprc&lt;/code&gt; replace &lt;code&gt;_your_email_&lt;/code&gt; with your email address
(for example: kimim@outlook.com ):
&lt;/p&gt;

&lt;pre class=&quot;example&quot; id=&quot;orgb9e9a82&quot;&gt;
[general]
accounts = outlook
maxsyncaccounts = 3
pythonfile = ~/passwd_prompt.py

[Account outlook]
localrepository = outlook-Local
remoterepository = outlook-Remote
utf8foldernames = True

[Repository outlook-Local]
type = Maildir
localfolders = ~/.mail/outlook

[Repository outlook-Remote]
type = IMAP
remotehost = imap.outlook.com
remoteuser = _your_email_
remotepasseval = get_authinfo_password()
ssl = true
sslcacertfile = /etc/ssl/cert.pem
maxconnections = 4
realdelete = yes
&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-org724529c&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;org724529c&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;4.&lt;/span&gt; add python password prompt script&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-4&quot;&gt;
&lt;p&gt;
create &lt;code&gt;~/passwd_prompt.py&lt;/code&gt; (copied from &lt;a href=&quot;https://learningactors.com/enter-invisible-passwords-using-this-python-module/&quot;&gt;Seth Kenlon&lt;/a&gt;):
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-python&quot;&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;#&lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;!/usr/bin/env python&lt;/span&gt;
&lt;span style=&quot;color: #3F7F5F;&quot;&gt;# &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;by Seth Kenlon&lt;/span&gt;
&lt;span style=&quot;color: #3F7F5F;&quot;&gt;# &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;GPLv3&lt;/span&gt;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;import&lt;/span&gt; os
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;import&lt;/span&gt; gnupg
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;import&lt;/span&gt; getpass
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;from&lt;/span&gt; pathlib &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;import&lt;/span&gt; Path

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;def&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;get_api_pass&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;:
    &lt;span style=&quot;color: #000000;&quot;&gt;homedir&lt;/span&gt; = &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;str&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;Path.home&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
    &lt;span style=&quot;color: #000000;&quot;&gt;gpg&lt;/span&gt; = gnupg.GPG&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;gnupghome=os.path.join&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;homedir, &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;.gnupg&quot;&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;, use_agent=&lt;span style=&quot;color: #110099;&quot;&gt;True&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
    passwd = getpass.getpass&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;prompt=&lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;Remote: Enter password: &quot;&lt;/span&gt;, stream=&lt;span style=&quot;color: #110099;&quot;&gt;None&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;

    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;with&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;open&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;os.path.join&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;homedir, &lt;span style=&quot;color: #2A00FF;&quot;&gt;&apos;pass.gpg&apos;&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;, &lt;span style=&quot;color: #2A00FF;&quot;&gt;&apos;rb&apos;&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;as&lt;/span&gt; f:
        apipass = &lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;gpg.decrypt_file&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;f, passphrase=passwd&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;

        f.close&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;

    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;str&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;apipass&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;def&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;get_authinfo_password&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;:
    authinfo = os.popen&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;gpg -q --no-tty -d ~/pass.gpg&quot;&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;.read&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; authinfo

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;__name__&lt;/span&gt; == &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;__main__&quot;&lt;/span&gt;:
    apipass = get_api_pass&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;print&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;apipass&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
    apipass = get_authinfo_password&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;print&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;apipass&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
If you use &lt;code&gt;get_api_pass()&lt;/code&gt; inside &lt;code&gt;.offlineimaprc&lt;/code&gt;, you can enable
password prompt filter. It is important to set the prompt in above
code as &amp;ldquo;Remote: Enter password: &amp;rdquo;, because it is used by mu4e to
trigger emacs to ask for password:
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-emacs-lisp&quot;&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;defvar&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;mu4e~get-mail-password-regexp&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;^Remote: Enter password: $&quot;&lt;/span&gt;
  &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;Regexp to match a password query in the `&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;mu4e-get-mail-command&lt;/span&gt;&lt;span style=&quot;color: #2A00FF;&quot;&gt;&apos; output.&quot;&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
If you use &lt;code&gt;get_authinfo_password()&lt;/code&gt;, the password extraction is done by
&lt;code&gt;gpg&lt;/code&gt;, thus you do not need to add above emacs configuration. This function is borrowed from &lt;a href=&quot;http://quotenil.com/offlineimap-with-encrypted-authinfo.html&quot;&gt;Gábor Melis&lt;/a&gt;.
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orge3e7b8b&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orge3e7b8b&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;5.&lt;/span&gt; add encrypted password file: &lt;code&gt;pass.gpg&lt;/code&gt;&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-5&quot;&gt;
&lt;p&gt;
Use emacs to find a new file &lt;code&gt;~/pass.gpg&lt;/code&gt;, type in your password, and
save with master password protection.
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgfcb7992&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgfcb7992&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;6.&lt;/span&gt; add smtp send credentials: &lt;code&gt;.authinfo.gpg&lt;/code&gt;&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-6&quot;&gt;
&lt;p&gt;
Use emacs to find a new file &lt;code&gt;~/.authoinfo.gpg&lt;/code&gt;, type in following line:
&lt;/p&gt;

&lt;pre class=&quot;example&quot; id=&quot;orgb34d869&quot;&gt;
machine smtp.outlook.com login _your_email_ port 587 password _your_passwd_
&lt;/pre&gt;

&lt;p&gt;
Replace &lt;code&gt;_your_email_&lt;/code&gt; with your email address, and replace
&lt;code&gt;_your_passwd_&lt;/code&gt; with your password.
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-org76c6d26&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;org76c6d26&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;7.&lt;/span&gt; download email&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-7&quot;&gt;
&lt;p&gt;
Execute in Manjaro WSL2 shell:
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-sh&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;cd&lt;/span&gt; ~
offlineimap
&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-org0e7bb43&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;org0e7bb43&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;8.&lt;/span&gt; initialize mu4e&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-8&quot;&gt;
&lt;p&gt;
Initialize mu and index your emails:
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-sh&quot;&gt;mu init -m ~/.mail --my-address=_your_email_
mu index
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
Replace &lt;code&gt;_your_email_&lt;/code&gt; with your email address.
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-org29e3620&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;org29e3620&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;9.&lt;/span&gt; have a try&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-9&quot;&gt;
&lt;p&gt;
Now type &lt;code&gt;M-x mu4e&lt;/code&gt;, emacs will show mu4e dashboard for you. &lt;code&gt;j i&lt;/code&gt; will
show the inbox and &lt;code&gt;C&lt;/code&gt; will create a new email for you. You may need to
type the master password for sending and updating email. But your
email credential is not stored in file system as plain text.
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-org04852d7&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;org04852d7&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;10.&lt;/span&gt; Limitation&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-10&quot;&gt;
&lt;p&gt;
When mu4e triggers offlineimap to update email, you need to type in
the master password for offlineimap password, because we cannot keep
the password for each invoke of offlineimap.
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines P.7 尽早捕获运行时错误</title>
   <link href="http://kimi.im/2021-12-23-cppcoreguidelines-p7"/>
   <updated>2021-12-23T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-p7</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
P.7 Catch run-time errors early
&lt;/p&gt;

&lt;p&gt;
&lt;b&gt;理由&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
尽早发现错误，避免导致诡异的 bug。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;例子&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
以下程序传给 &lt;code&gt;increment1&lt;/code&gt; 函数一个数组指针和数组的大小作为参数。如果数组大小不小心写错了，会导致数组越界。程序可能会继续执行，但是随时可能运行奔溃。
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-bad src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;increment1&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;*&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;p&lt;/span&gt;, &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;n&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// bad: error-prone&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;for&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;i&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;0&lt;/span&gt;; i &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt; n; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;++&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;i&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;++&lt;/span&gt;p&lt;span style=&quot;color: #7388d6;&quot;&gt;[&lt;/span&gt;i&lt;span style=&quot;color: #7388d6;&quot;&gt;]&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;use1&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;m&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;n&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;10&lt;/span&gt;;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;a&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;n&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;]&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{}&lt;/span&gt;;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;for&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;i&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;10&lt;/span&gt;; i &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt; m; &lt;span style=&quot;color: #000000;&quot;&gt;i&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;++&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; cout &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; a&lt;span style=&quot;color: #7388d6;&quot;&gt;[&lt;/span&gt;i&lt;span style=&quot;color: #7388d6;&quot;&gt;]&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot; &quot;&lt;/span&gt;;
    cout &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;\n&quot;&lt;/span&gt;;
    &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;increment1&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;a, m&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// maybe typo, maybe m &amp;lt;= n is supposed&lt;/span&gt;
                        &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// but assume that m == 20&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;for&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;i&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;10&lt;/span&gt;; i &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt; m; &lt;span style=&quot;color: #000000;&quot;&gt;i&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;++&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; cout &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; a&lt;span style=&quot;color: #7388d6;&quot;&gt;[&lt;/span&gt;i&lt;span style=&quot;color: #7388d6;&quot;&gt;]&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot; &quot;&lt;/span&gt;;
    cout &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; endl;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;main&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;use1&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;20&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;pre class=&quot;example&quot;&gt;
-1500637744 32759 2 10 2 15 1805646800 85 -1500637797 32759 
-1500637743 32760 3 11 14 21 1805646801 86 -1500637796 32760 
&lt;/pre&gt;



&lt;p&gt;
&lt;b&gt;例子&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
以下代码用了 &lt;code&gt;span&lt;/code&gt; ，但是数组大小还是分开设置了，依然会导致越界访问：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;increment2&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;span&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;p&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;for&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt; x : p&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;++&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;x&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;use2&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;m&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;n&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;10&lt;/span&gt;;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;a&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;n&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;]&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{}&lt;/span&gt;;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;for&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;i&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;10&lt;/span&gt;; i &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt; m; &lt;span style=&quot;color: #000000;&quot;&gt;i&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;++&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; cout &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; a&lt;span style=&quot;color: #7388d6;&quot;&gt;[&lt;/span&gt;i&lt;span style=&quot;color: #7388d6;&quot;&gt;]&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot; &quot;&lt;/span&gt;;
    cout &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; endl;
    &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;increment2&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;{&lt;/span&gt;a, m&lt;span style=&quot;color: #909183;&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// maybe typo, maybe m &amp;lt;= n is supposed&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;for&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;i&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;10&lt;/span&gt;; i &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt; m; &lt;span style=&quot;color: #000000;&quot;&gt;i&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;++&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; cout &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; a&lt;span style=&quot;color: #7388d6;&quot;&gt;[&lt;/span&gt;i&lt;span style=&quot;color: #7388d6;&quot;&gt;]&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot; &quot;&lt;/span&gt;;
    cout &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; endl;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;main&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;use2&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;20&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;0&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;pre class=&quot;example&quot;&gt;
0 0 -2018306080 32758 24 0 0 10 0 19
1 1 21 1 281016609 124 1 11 18 21
&lt;/pre&gt;



&lt;p&gt;
&lt;b&gt;例子&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
直接传递一个带数组长度信息的 &lt;code&gt;span&lt;/code&gt; 给 &lt;code&gt;increment2&lt;/code&gt; 就不会出错了：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;increment2&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;gsl&lt;/span&gt;::&lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;span&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;p&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;for&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt; x : p&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;++&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;x&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;use2&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;m&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;n&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;10&lt;/span&gt;;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;a&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;n&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;]&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{}&lt;/span&gt;;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;for&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;i&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;0&lt;/span&gt;; i &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt; m; &lt;span style=&quot;color: #000000;&quot;&gt;i&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;++&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; cout &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; a&lt;span style=&quot;color: #7388d6;&quot;&gt;[&lt;/span&gt;i&lt;span style=&quot;color: #7388d6;&quot;&gt;]&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot; &quot;&lt;/span&gt;;
    cout &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; endl;
    &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;increment2&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;a&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// the number of elements of a need not be repeated&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;for&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;i&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;0&lt;/span&gt;; i &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt; m; &lt;span style=&quot;color: #000000;&quot;&gt;i&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;++&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; cout &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; a&lt;span style=&quot;color: #7388d6;&quot;&gt;[&lt;/span&gt;i&lt;span style=&quot;color: #7388d6;&quot;&gt;]&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot; &quot;&lt;/span&gt;;
    cout &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; endl;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;main&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;use2&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;20&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;0&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;pre class=&quot;example&quot;&gt;
0 0 0 0 0 0 0 0 0 0 142747757 32759 1858343536 32760 142743120 32759 2 10 2 19 
1 1 1 1 1 1 1 1 1 1 142747757 32759 10 0 937425632 128 2 10 18 20 
&lt;/pre&gt;


&lt;p&gt;
从以上输出结果可见， &lt;code&gt;increment2&lt;/code&gt; 只增加了数组的 10 个元素，数组后的两个数据前后没有变化。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;例子&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
以下代码定义了 &lt;code&gt;Date&lt;/code&gt; 对象，在 &lt;code&gt;user2&lt;/code&gt; 中，获取到了 &lt;code&gt;Date&lt;/code&gt; 却又把它转成
&lt;code&gt;string&lt;/code&gt; 。之后，又用&lt;code&gt;extract_date&lt;/code&gt;把 &lt;code&gt;string&lt;/code&gt; 转成 &lt;code&gt;Date&lt;/code&gt; 。做了一次多余的数据转换操作，实在没有必要。
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-bad src-C++&quot;&gt;&lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;Date&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;read_date&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;istream&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;is&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// read date from istream&lt;/span&gt;

&lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;Date&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;extract_date&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;string&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;s&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// extract date from string&lt;/span&gt;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;user1&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;string&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;date&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// manipulate date&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;auto&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;d&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;extract_date&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;date&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ...&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;user2&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;Date&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;d&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;read_date&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;cin&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ...&lt;/span&gt;
    &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;user1&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;d.&lt;span style=&quot;color: #3a5fcd; font-weight: bold; font-style: italic;&quot;&gt;to_string&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;()&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ...&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;
&lt;b&gt;例子&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
过度的代码检测开销过大。很多时候过早的检测也效率低下。不要在复杂度为
&lt;code&gt;O(1)&lt;/code&gt; 的接口上增加&lt;code&gt;O(n)&lt;/code&gt;的检查。
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;Jet&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// Physics says: e * e &amp;lt; x * x + y * y + z * z&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;float&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;x&lt;/span&gt;;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;float&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;y&lt;/span&gt;;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;float&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;z&lt;/span&gt;;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;float&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;e&lt;/span&gt;;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;public&lt;/span&gt;:
    &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;Jet&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;float&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;x&lt;/span&gt;, &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;float&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;y&lt;/span&gt;, &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;float&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;z&lt;/span&gt;, &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;float&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;e&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;
        :&lt;span style=&quot;color: #110099; font-style: italic;&quot;&gt;x&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;x&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;, &lt;span style=&quot;color: #110099; font-style: italic;&quot;&gt;y&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;y&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;, &lt;span style=&quot;color: #110099; font-style: italic;&quot;&gt;z&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;z&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;, &lt;span style=&quot;color: #110099; font-style: italic;&quot;&gt;e&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;e&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;
    &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;
        &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// Should I check here that the values are physically meaningful?&lt;/span&gt;
    &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;

    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;float&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold; font-style: italic;&quot;&gt;m&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt;
    &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;
        &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// Should I handle the degenerate case here?&lt;/span&gt;
        &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;sqrt&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;x &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;*&lt;/span&gt; x &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;+&lt;/span&gt; y &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;*&lt;/span&gt; y &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;+&lt;/span&gt; z &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;*&lt;/span&gt; z &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;-&lt;/span&gt; e &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;*&lt;/span&gt; e&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt;;
    &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;

    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;//???&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
以上代码定义了喷气式飞机的物理参数。物理规律规定 &lt;code&gt;e * e &amp;lt; x * x + y *
y + z * z&lt;/code&gt; 。但是这个规律不是一个不变式，比如测量错误会出现违反物理规律的情况。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;强化&lt;/b&gt;
&lt;/p&gt;

&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;查看指针和数组：是否尽早进行了范围检测，检测是否重复多多余？&lt;/li&gt;
&lt;li&gt;查看类型转换：能否避免窄转换？&lt;/li&gt;
&lt;li&gt;查看没有进行检测的输入值&lt;/li&gt;
&lt;li&gt;查看结构化数据是否又转成字符串使用？&lt;/li&gt;
&lt;/ul&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines P.6 不能在编译时检查的，要能在运行时检查</title>
   <link href="http://kimi.im/2021-12-23-cppcoreguidelines-p6"/>
   <updated>2021-12-23T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-p6</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
P.6 What cannot be checked at compile time should be checkable at run time
&lt;/p&gt;

&lt;p&gt;
&lt;b&gt;理由&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
如果程序里有很难检查到的错误的话，可能会在特定的条件下，导致莫明其妙的错误。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;注意&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
理想情况下，我们应该尽量在编译时和运行时检测到这些错误。不过，有时候在编译时很难捕捉到所有的错误。而在运行时又经常没法捕捉到所有剩下的错误。尽管如此，我们写的代码应该尽量可以进行错误检查。当然，错误检测是需要代价的，如计算资源、计算时间等。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;例子&lt;/b&gt;
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-bad src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;*&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;p&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    cout &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; p&lt;span style=&quot;color: #7388d6;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;50&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;]&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;g&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;n&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// bad: the number of elements is not passed to f()&lt;/span&gt;
    &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;[&lt;/span&gt;n&lt;span style=&quot;color: #909183;&quot;&gt;]&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;main&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;g&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;3&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;0&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;pre class=&quot;example&quot;&gt;
-2043739824
&lt;/pre&gt;


&lt;p&gt;
以上代码打印出了一个莫明其妙的数字。因为数组大小没有传给 &lt;code&gt;f&lt;/code&gt; ，在 &lt;code&gt;f&lt;/code&gt; 中我们又允许它可以访问 &lt;code&gt;p&lt;/code&gt; 的任意元素，当我们访问的元素超出了数组的范围时，就的到了一个垃圾数据。当然，其实这个数据也不是垃圾，它可能是别的数组的元素，或者可能是一条 CPU 指令。
&lt;/p&gt;

&lt;p&gt;
&lt;b&gt;例子&lt;/b&gt;
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-bad src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;f2&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;*&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;p&lt;/span&gt;, &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;n&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    cout &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; p&lt;span style=&quot;color: #7388d6;&quot;&gt;[&lt;/span&gt;n&lt;span style=&quot;color: #7388d6;&quot;&gt;]&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;g2&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;n&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;f2&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;[&lt;/span&gt;n&lt;span style=&quot;color: #909183;&quot;&gt;]&lt;/span&gt;, &lt;span style=&quot;color: #110099;&quot;&gt;10&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;  &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// bad: a wrong number of elements can be passed to f()&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;main&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;g2&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;3&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;0&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;pre class=&quot;example&quot;&gt;
1647575376
&lt;/pre&gt;


&lt;p&gt;
上面代码虽然添加了数组大小作为参数，但是这个参数的值可以是任何数字，一旦数值给错，就访问越界了，所以也不安全。
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-bad src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;f3&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;unique_ptr&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;[]&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;p&lt;/span&gt;, &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;n&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    cout &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; p&lt;span style=&quot;color: #7388d6;&quot;&gt;[&lt;/span&gt;n&lt;span style=&quot;color: #7388d6;&quot;&gt;]&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;g3&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;n&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;f3&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;make_unique&lt;/span&gt;&lt;span style=&quot;color: #909183; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #709870;&quot;&gt;[]&lt;/span&gt;&lt;span style=&quot;color: #909183; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;n&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt;, &lt;span style=&quot;color: #110099;&quot;&gt;10&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// bad: pass ownership and size separately&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;main&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;g3&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;3&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;0&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;pre class=&quot;example&quot;&gt;
-1123024560
&lt;/pre&gt;


&lt;p&gt;
独占指针（&lt;code&gt;unique_ptr&lt;/code&gt;）可以用来传递指针所有权。但是上面还是单独传递了数组大小参数给 &lt;code&gt;f3&lt;/code&gt; 。错误的参数，依然会导致越界访问数组。
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;f4&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;vector&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;v&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    cout &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; v&lt;span style=&quot;color: #7388d6;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;5&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;]&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;f5&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;gsl&lt;/span&gt;::&lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;span&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;v&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    cout &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; v&lt;span style=&quot;color: #7388d6;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;5&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;]&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;g3&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;n&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;vector&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;v&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;n&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
    &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;f4&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;v&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;                     &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// pass a reference, retain ownership&lt;/span&gt;
    &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;f5&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;gsl&lt;/span&gt;::&lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;span&lt;/span&gt;&lt;span style=&quot;color: #909183; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #909183; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;{&lt;/span&gt;v&lt;span style=&quot;color: #909183;&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;          &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// pass a view, retain ownership&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;main&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;g3&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;9&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;0&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;pre class=&quot;example&quot;&gt;
00
&lt;/pre&gt;


&lt;p&gt;
以上代码，通过引用和 &lt;code&gt;span&lt;/code&gt; 视图的方式传递参数，数组大小是 &lt;code&gt;span&lt;/code&gt; 对象自身包含的数据，可以在运行时检查是否越界访问了。
&lt;/p&gt;

&lt;p&gt;
以下代码使用 &lt;code&gt;vector&lt;/code&gt; 对象能够传递所有权，并且同时保留了大小信息：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-C++&quot;&gt;&lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;vector&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;f5&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;n&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;       &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// OK: move&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;vector&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;v&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;n, &lt;span style=&quot;color: #110099;&quot;&gt;100&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ... initialize v ...&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; v;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;main&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;auto&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;v5&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;f5&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;5&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
    cout &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; v5.&lt;span style=&quot;color: #3a5fcd; font-weight: bold; font-style: italic;&quot;&gt;size&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; endl;
    cout &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; v5.&lt;span style=&quot;color: #3a5fcd; font-weight: bold; font-style: italic;&quot;&gt;at&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;4&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; endl;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;pre class=&quot;example&quot;&gt;
5
100
&lt;/pre&gt;


&lt;p&gt;
但是，以下例子中， &lt;code&gt;f6&lt;/code&gt; 传递独占指针（&lt;code&gt;unique_ptr&amp;lt;int[]&amp;gt;&lt;/code&gt;）或所有权指针（&lt;code&gt;owner&amp;lt;int*&amp;gt;&lt;/code&gt;）出来，也会丢失数组大小信息。而且，所有权指针相比独占指针不会自动进行内存销毁，如果你忘记 &lt;code&gt;delete&lt;/code&gt; 还会导致内存泄漏。
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-bad src-C++&quot;&gt;&lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;unique_ptr&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;[]&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;f6&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;n&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;  &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// bad: loses n&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;auto&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;p&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;make_unique&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;[]&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;n&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ... initialize *p ...&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; p;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;

&lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;owner&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;f7&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;n&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;        &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// bad: loses n and we might forget to delete&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;owner&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;p&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;[&lt;/span&gt;n&lt;span style=&quot;color: #7388d6;&quot;&gt;]&lt;/span&gt;;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ... initialize *p ...&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; p;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;main&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;auto&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;v6&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;f6&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;5&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
    cout &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; v6&lt;span style=&quot;color: #7388d6;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;6&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;]&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; endl;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// out of range&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;auto&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;v7&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;f7&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;5&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
    cout &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; v7&lt;span style=&quot;color: #7388d6;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;6&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;]&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; endl;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// out of range&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;delete&lt;/span&gt; v7;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;pre class=&quot;example&quot;&gt;
1982981225
1983112303
&lt;/pre&gt;


&lt;p&gt;
&lt;b&gt;强化&lt;/b&gt;
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;标记出现指针+数组数量作为参数的接口。可能存在潜在数组越界访问问题。&lt;/li&gt;
&lt;/ul&gt;
</content>
 </entry>
 
 <entry>
   <title>单词本：déjà vu</title>
   <link href="http://kimi.im/2021-12-23-francais-deja-vu"/>
   <updated>2021-12-23T00:00:00+00:00</updated>
   <id>http://kimi.im/francais-deja-vu</id>
   <content type="html">&lt;p&gt;
因为工作关系，加入到某个国际协会的标准评审工作。圣诞节快到了，收到协会主席的一封信，在信的开头，他写了这句话：
&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;
Formulating a suitable text for this Christmas greeting is
particularly difficult for me this year. It seems like a &lt;b&gt;déjà vu&lt;/b&gt; of
last year.
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;
大概意思是说，现在这个疫情环境，都不知道应该说圣诞快乐还是圣诞难过了。今年似乎是去年的 &lt;b&gt;昨日重现/似曾相识&lt;/b&gt; 。
&lt;/p&gt;

&lt;p&gt;
是的，今天的单词是 &lt;b&gt;déjà vu&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
记得以前看过一部玄幻片就叫《déjà vu》中文翻译叫《&lt;a href=&quot;https://movie.douban.com/subject/1789283/&quot;&gt;时空线索&lt;/a&gt;》。讲的是一个特工调查一个案子的时候，感觉有些似曾相识，通过时空机器拯救美女。完了，我已经不记得故事情节了。是时候重新看一遍这个片子了……
&lt;/p&gt;

&lt;p&gt;
这个词来自法语，déjà 是 already、已经的意思。vu 呢，是动词 voir “看”的
&lt;del&gt;过去式&lt;/del&gt; 过去分词，即“看到过”。所以，合起来就是 already seen，曾看到过之意。
&lt;/p&gt;

&lt;p&gt;
那么既然有似曾相识，是不是还有似曾不相识？是的，也是从法语里来的：
jamais vu。 jamais 是 never 从来不的意思。字面意思即从来没见过。
&lt;/p&gt;

&lt;p&gt;
根据这里 &lt;sup&gt;&lt;a id=&quot;fnr.1&quot; class=&quot;footref&quot; href=&quot;#fn.1&quot; role=&quot;doc-backlink&quot;&gt;1&lt;/a&gt;&lt;/sup&gt; 解释：
&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;
The term &lt;b&gt;jamais vu&lt;/b&gt; is used by psychologists and neuroscientists to define a mental effect in which a familiar situation makes you feel as if you experience it for the first time.
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;
在心理和神经科学里， &lt;b&gt;jamais vu&lt;/b&gt; 是一种在熟悉的环境却感到陌生的心理感觉。一种短期的记忆消失现象。
&lt;/p&gt;

&lt;p&gt;
此外，还有一种 vu 叫做 &lt;b&gt;presque vu&lt;/b&gt; &lt;sup&gt;&lt;a id=&quot;fnr.2&quot; class=&quot;footref&quot; href=&quot;#fn.2&quot; role=&quot;doc-backlink&quot;&gt;2&lt;/a&gt;&lt;/sup&gt;：
&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;
&lt;b&gt;Presque vu&lt;/b&gt; literally means &amp;rsquo;almost seen&amp;rsquo;. The way we experience it is
a failure to remember something but feeling as though it is
imminent. In other words, it is on the tip of our tongues. The
experience is often coupled with absolute confidence that we know the
answer. This can make it a little embarrassing when we can&amp;rsquo;t
remember. Presque vu is the frustrating incident of almost
remembering, but not quite.
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;
presque vu 就是当我们马上要想起来了，可是就是想不起来的时候，舌头打结了，想说说不出的那个状态。
&lt;/p&gt;

&lt;p&gt;
好了，学了三个 vu ，分别是：
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;déjà vu 似曾相识&lt;/li&gt;
&lt;li&gt;jamais vu 熟识似忘&lt;/li&gt;
&lt;li&gt;presque vu 熟识难忆&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;footnotes&quot;&gt;
&lt;h2 class=&quot;footnotes&quot;&gt;Footnotes: &lt;/h2&gt;
&lt;div id=&quot;text-footnotes&quot;&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.1&quot; class=&quot;footnum&quot; href=&quot;#fnr.1&quot; role=&quot;doc-backlink&quot;&gt;1&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot; role=&quot;doc-footnote&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;https://www.learning-mind.com/mysterious-phenomenon-of-jamais-vu-the-opposite-of-deja-vu/&quot;&gt;Jamais Vu: the Mysterious Opposite of Déjà vu You’ve Probably Experienced&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.2&quot; class=&quot;footnum&quot; href=&quot;#fnr.2&quot; role=&quot;doc-backlink&quot;&gt;2&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot; role=&quot;doc-footnote&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;https://www.learning-mind.com/presque-vu-mental-effect/&quot;&gt;Presque Vu: An Annoying Mental Effect You Have Probably Experienced&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;


&lt;/div&gt;
&lt;/div&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines P.5 编译时检查比运行时检查好</title>
   <link href="http://kimi.im/2021-12-22-cppcoreguidelines-p5"/>
   <updated>2021-12-22T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-p5</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
P.5 Prefer compile-time checking to run-time checking
&lt;/p&gt;

&lt;p&gt;
&lt;b&gt;理由&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
能在编译时检查出错误，就不要在运行时检查，这样可以不用编写错误处理代码。代码的可读性会更好、性能会更佳。
&lt;/p&gt;

&lt;p&gt;
&lt;b&gt;例子&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
以下代码在运行时检查 &lt;code&gt;int&lt;/code&gt; 类型的长度是不是小于 32 位：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-bad src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;bits&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;0&lt;/span&gt;;         &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// don&apos;t: avoidable code&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;for&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;i&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;1&lt;/span&gt;; i; &lt;span style=&quot;color: #000000;&quot;&gt;i&lt;/span&gt; &amp;lt;&amp;lt;= &lt;span style=&quot;color: #110099;&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;++&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;bits&lt;/span&gt;;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;bits &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;32&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
    cout &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;int too small\n&quot;&lt;/span&gt;;
cout &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; bits;
&lt;/pre&gt;
&lt;/div&gt;

&lt;pre class=&quot;example&quot;&gt;
32
&lt;/pre&gt;


&lt;p&gt;
因为数值溢出的行为是未定义的，因此以上实现是不可靠的。可以用
&lt;code&gt;static_assert&lt;/code&gt; 进行判断：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-C++&quot;&gt;static_assert&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;sizeof&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;gt;=&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;4&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// do: compile-time check&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
如果改成 &lt;code&gt;&amp;gt;=8&lt;/code&gt;静态判断就出错了：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-C++&quot;&gt;static_assert&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;sizeof&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;gt;=&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;8&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// do: compile-time check&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;pre class=&quot;example&quot; id=&quot;org7d4077f&quot;&gt;
C-src-99WMqo.cpp:11:27: error: static assertion failed
   11 | static_assert(sizeof(int) &amp;gt;= 8);    // do: compile-time check
      |               ~~~~~~~~~~~~^~~~
&lt;/pre&gt;

&lt;p&gt;
更好的做法是使用&lt;code&gt;int32_t&lt;/code&gt;类型。
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-C++&quot;&gt;cout &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;sizeof&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int32_t&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;
&lt;/pre&gt;
&lt;/div&gt;

&lt;pre class=&quot;example&quot;&gt;
4
&lt;/pre&gt;


&lt;p&gt;
&lt;b&gt;例子&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
如果传递给 &lt;code&gt;read&lt;/code&gt; 函数的第二个参数过大的话，就会导致数组越界访问：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-bad src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;read&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;*&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;p&lt;/span&gt;, &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;n&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// read max n integers into *p&lt;/span&gt;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;a&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;100&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;]&lt;/span&gt;;
&lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;read&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;a, &lt;span style=&quot;color: #110099;&quot;&gt;1000&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// bad, off the end&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
如果使用了&lt;code&gt;gsl::span&lt;/code&gt;，编译器就能指导一次读取能放多少数据到数组了：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;read&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;gsl&lt;/span&gt;::&lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;span&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;r&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// read into the range of integers r&lt;/span&gt;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;a&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;100&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;]&lt;/span&gt;;
&lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;read&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;a&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;        &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// better: let the compiler figure out the number of elements&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
&lt;b&gt;其他&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
不要把能在编译时检查的动作延后到运行时。
&lt;/p&gt;

&lt;p&gt;
&lt;b&gt;强化&lt;/b&gt;
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;检查指针参数&lt;/li&gt;
&lt;li&gt;检查运行时进行范围越界检测的代码&lt;/li&gt;
&lt;/ul&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines P.4 理想情况下，程序应该要静态类型安全</title>
   <link href="http://kimi.im/2021-12-21-cppcoreguidelines-p4"/>
   <updated>2021-12-21T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-p4</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
P.4 Ideally, a program should be statically type safe
&lt;/p&gt;

&lt;p&gt;
&lt;b&gt;理由&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
理想情况下，我们写程序要能做到完全的静态（编译期）类型安全。但是，在实际开发工作中，我们也避免不了会出现动态类型的情况。比如以下这些情况：
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;联合体（ union ）：我们建议使用C++17的 &lt;code&gt;variant&lt;/code&gt; 来替代联合体&lt;/li&gt;
&lt;li&gt;强制类型转换（ cast ）： 我们建议少用强制类型转换，多用模板&lt;/li&gt;
&lt;li&gt;数组衰变（array decay）：使用 GSL 的 &lt;code&gt;span&lt;/code&gt; 避免&lt;/li&gt;
&lt;li&gt;范围越界错误（range error）：使用 &lt;code&gt;span&lt;/code&gt; 避免&lt;/li&gt;
&lt;li&gt;变窄类型转换（narrowing conversion）：减少出现变窄类型转换的情况，如果不能避免，建议使用 GSL 中的 &lt;code&gt;narrow_cast&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
&lt;b&gt;variant&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
&lt;code&gt;variant&lt;/code&gt; 是C++17增加的一个功能，用以作为 &lt;code&gt;union&lt;/code&gt; 的安全替代。它可以保存模板参数列表中的某一类型的值。
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-C++&quot;&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;//#include &amp;lt;variant&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;variant&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt;, &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;double&lt;/span&gt;, &lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;string&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;var1&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;
cout &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;index is: &quot;&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; var1.&lt;span style=&quot;color: #3a5fcd; font-weight: bold; font-style: italic;&quot;&gt;index&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; endl;
cout &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;var1 is int now: &quot;&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;get&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;var1&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; endl;
&lt;span style=&quot;color: #000000;&quot;&gt;var1&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;1.2&lt;/span&gt;;
cout &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;index is: &quot;&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; var1.&lt;span style=&quot;color: #3a5fcd; font-weight: bold; font-style: italic;&quot;&gt;index&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; endl;
cout &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;var1 is double now: &quot;&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;get&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;var1&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; endl;
&lt;span style=&quot;color: #000000;&quot;&gt;var1&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;&amp;#20851;&amp;#27880;&amp;#20803;&amp;#23431;&amp;#23449;&amp;#29289;&amp;#32852;&amp;#32593;&amp;#20844;&amp;#20247;&amp;#21495;&quot;&lt;/span&gt;;
cout &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;index is: &quot;&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; var1.&lt;span style=&quot;color: #3a5fcd; font-weight: bold; font-style: italic;&quot;&gt;index&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; endl;
cout &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;var1 is string now: \n&quot;&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;get&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;2&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;var1&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; endl;
&lt;/pre&gt;
&lt;/div&gt;

&lt;pre class=&quot;example&quot;&gt;
index is: 0
var1 is int now: 1
index is: 1
var1 is double now: 1.2
index is: 2
var1 is string now:
关注元宇宙物联网公众号
&lt;/pre&gt;



&lt;p&gt;
&lt;b&gt;数组衰变&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
所谓的数组衰变是指在使用数组的过程中，数组元素类型和长度信息丢失的情况。比如当我们以指针或数值的形式传递数组参数给函数的时候，数组的长度信息就丢失了。
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;display_array_from_value&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;p&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
   cout &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;&amp;#20197;&amp;#25968;&amp;#20540;&amp;#24418;&amp;#24335;&amp;#20256;&amp;#36882;&amp;#30340;&amp;#25968;&amp;#32452;&amp;#21442;&amp;#25968;&amp;#65292;&amp;#35745;&amp;#31639;&amp;#30340;&amp;#20869;&amp;#23384;&amp;#21344;&amp;#29992;&amp;#20540;&amp;#20026;&amp;#65306;&quot;&lt;/span&gt;;
   cout &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;sizeof&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;p&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; endl;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;display_array_from_pointer&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;*&lt;/span&gt;p&lt;span style=&quot;color: #7388d6;&quot;&gt;)[&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;10&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;]&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
   cout &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;&amp;#20197;&amp;#25351;&amp;#38024;&amp;#24418;&amp;#24335;&amp;#20256;&amp;#36882;&amp;#30340;&amp;#25968;&amp;#32452;&amp;#21442;&amp;#25968;&amp;#65292;&amp;#35745;&amp;#31639;&amp;#30340;&amp;#20869;&amp;#23384;&amp;#21344;&amp;#29992;&amp;#20540;&amp;#20026;&amp;#65306;&quot;&lt;/span&gt;;
   cout &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;sizeof&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;p&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; endl;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;main&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
   &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;arr&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;10&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;]&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;1&lt;/span&gt;, &lt;span style=&quot;color: #110099;&quot;&gt;2&lt;/span&gt;, &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;;
   cout &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;&amp;#25968;&amp;#32452;&amp;#23454;&amp;#38469;&amp;#21344;&amp;#29992;&amp;#20869;&amp;#23384;&amp;#31354;&amp;#38388;&amp;#26159;&amp;#65306;&quot;&lt;/span&gt;;
   cout &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;sizeof&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;arr&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; endl;
   &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;display_array_from_value&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;arr&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
   &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;display_array_from_pointer&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt;arr&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
   &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;0&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;pre class=&quot;example&quot;&gt;
数组实际占用内存空间是：40
以数值形式传递的数组参数，计算的内存占用值为：8
以指针形式传递的数组参数，计算的内存占用值为：8
&lt;/pre&gt;


&lt;p&gt;
为了避免数组衰变:
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;可以以指针或数值传递数组参数的同时，传一个数组长度给函数，然后不用
&lt;code&gt;sizeof&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;或者以引用形式传递数组参数&lt;/li&gt;
&lt;li&gt;使用 GSL 的 &lt;code&gt;span&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;display_array_from_value_with_size&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;p&lt;/span&gt;, &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;size_t&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;sz&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
   cout &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;&amp;#36890;&amp;#36807;&amp;#39069;&amp;#22806;&amp;#21442;&amp;#25968;&amp;#20256;&amp;#20837;&amp;#30340;&amp;#20869;&amp;#23384;&amp;#21344;&amp;#29992;&amp;#20540;&amp;#65306;&quot;&lt;/span&gt;;
   cout &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; sz &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; endl;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;display_array_from_reference&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt;p&lt;span style=&quot;color: #7388d6;&quot;&gt;)[&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;10&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;]&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
   cout &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;&amp;#20197;&amp;#24341;&amp;#29992;&amp;#24418;&amp;#24335;&amp;#20256;&amp;#36882;&amp;#30340;&amp;#25968;&amp;#32452;&amp;#21442;&amp;#25968;&amp;#65292;&amp;#35745;&amp;#31639;&amp;#20869;&amp;#23384;&amp;#21344;&amp;#29992;&amp;#20540;&amp;#20026;&amp;#65306;&quot;&lt;/span&gt;;
   cout &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;sizeof&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;p&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; endl;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;display_array_from_span&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;gsl&lt;/span&gt;::&lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;span&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;p&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;for&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;auto&lt;/span&gt; v: p&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;
        cout &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; v &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot; &quot;&lt;/span&gt;;
    &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;main&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
   &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;arr&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;10&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;]&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;1&lt;/span&gt;, &lt;span style=&quot;color: #110099;&quot;&gt;2&lt;/span&gt;, &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;;
   cout &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;&amp;#25968;&amp;#32452;&amp;#23454;&amp;#38469;&amp;#21344;&amp;#29992;&amp;#20869;&amp;#23384;&amp;#31354;&amp;#38388;&amp;#26159;&amp;#65306;&quot;&lt;/span&gt;;
   cout &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;sizeof&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;arr&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; endl;
   &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;display_array_from_value_with_size&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;arr, &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;sizeof&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;arr&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
   &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;display_array_from_reference&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;arr&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
   &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;display_array_from_span&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;arr&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
   &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;0&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;pre class=&quot;example&quot;&gt;
数组实际占用内存空间是：40
通过额外参数传入的内存占用值：40
以引用形式传递的数组参数，计算内存占用值为：40
1 2 0 0 0 0 0 0 0 0
&lt;/pre&gt;


&lt;p&gt;
注意，添加 gsl 的方式：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-shell&quot;&gt;git clone git@github.com:microsoft/GSL.git
cp GSL/include/gsl /ucrt64/include
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
&lt;b&gt;范围错误&lt;/b&gt;
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-bad src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;access_out_of_range&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;p&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    cout &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; p&lt;span style=&quot;color: #7388d6;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;3&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;]&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; endl;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;pass_span&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;gsl&lt;/span&gt;::&lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;span&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;p&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    cout &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; p&lt;span style=&quot;color: #7388d6;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;]&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt;endl;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;main&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
   &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;arr&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;2&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;]&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;1&lt;/span&gt;, &lt;span style=&quot;color: #110099;&quot;&gt;2&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;;
   &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;access_out_of_range&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;arr&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
   &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;pass_span&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;arr&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
   &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;0&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;pre class=&quot;example&quot;&gt;
260653
2
&lt;/pre&gt;


&lt;p&gt;
这里打印出来的第一个值已经超出数组的范围了，所以是内存当前的一个不确定的数据。
&lt;/p&gt;

&lt;p&gt;
&lt;b&gt;收缩转换&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
&lt;code&gt;gsl::narrow&lt;/code&gt; 在收缩转换出错的时候，会异常。
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-bad src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;var1&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;-42&lt;/span&gt;;
cout &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;unsigned int&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;var1 &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; endl;
cout &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;static_cast&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;unsigned int&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;var1&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; endl;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;char&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;var2&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;10&lt;/span&gt;;
cout &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;unsigned int&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;var2 &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; endl;
cout &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;static_cast&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;unsigned int&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;var2&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; endl;
&lt;/pre&gt;
&lt;/div&gt;

&lt;pre class=&quot;example&quot;&gt;
4294967254
4294967254
10
10
&lt;/pre&gt;


&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;var1&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;-42&lt;/span&gt;;
cout &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;gsl&lt;/span&gt;::&lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;narrow_cast&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;unsigned int&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;var1&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; endl;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;try&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    cout &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;gsl&lt;/span&gt;::&lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;narrow&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;unsigned int&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;var1&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; endl;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;catch&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;gsl&lt;/span&gt;::&lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;narrowing_error&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;e&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    cout &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; e.&lt;span style=&quot;color: #3a5fcd; font-weight: bold; font-style: italic;&quot;&gt;what&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; endl;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;char&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;var2&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;10&lt;/span&gt;;
cout &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;gsl&lt;/span&gt;::&lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;narrow_cast&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;unsigned int&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;var2&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; endl;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;try&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    cout &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;gsl&lt;/span&gt;::&lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;narrow&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;unsigned int&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;var2&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; endl;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;catch&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;gsl&lt;/span&gt;::&lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;narrowing_error&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;e&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    cout &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; e.&lt;span style=&quot;color: #3a5fcd; font-weight: bold; font-style: italic;&quot;&gt;what&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; endl;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;pre class=&quot;example&quot;&gt;
4294967254
narrowing_error
10
10
&lt;/pre&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines P.3 明确地表达程序的意图</title>
   <link href="http://kimi.im/2021-12-20-cppcoreguidelines-p3"/>
   <updated>2021-12-20T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-p3</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
P.3 Express intent
&lt;/p&gt;

&lt;p&gt;
&lt;b&gt;理由&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
如果要读代码的注释才能理解代码的意图，那可能就意味着，你写的代码不够清晰，你没有很明确地表达出代码的意图。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;例子&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
#+attr_html :class bad
&lt;/p&gt;
&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-C++&quot;&gt;&lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;vector&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;v&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;1&lt;/span&gt;, &lt;span style=&quot;color: #110099;&quot;&gt;2&lt;/span&gt;, &lt;span style=&quot;color: #110099;&quot;&gt;3&lt;/span&gt;, &lt;span style=&quot;color: #110099;&quot;&gt;4&lt;/span&gt;, &lt;span style=&quot;color: #110099;&quot;&gt;5&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;
&lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;gsl&lt;/span&gt;::&lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;index&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;i&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;0&lt;/span&gt;;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;while&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;i &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt; v.&lt;span style=&quot;color: #3a5fcd; font-weight: bold; font-style: italic;&quot;&gt;size&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    cout &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; v&lt;span style=&quot;color: #7388d6;&quot;&gt;[&lt;/span&gt;i&lt;span style=&quot;color: #7388d6;&quot;&gt;]&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot; &quot;&lt;/span&gt;;
    &lt;span style=&quot;color: #000000;&quot;&gt;i&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;++&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;pre class=&quot;example&quot;&gt;
1 2 3 4 5
&lt;/pre&gt;


&lt;p&gt;
这里，我们的意图其实就是要循环一遍向量 &lt;code&gt;v&lt;/code&gt; ，把它的元素的值一个个打印出来。但是呢，读别人拿到这个代码，可能就无法一眼看出来代码要做的事情。并且，代码里还多余的定义了一个索引变量 &lt;code&gt;i&lt;/code&gt; ，这个变量的作用域范围还超出了循环体。
&lt;/p&gt;


&lt;p&gt;
倘若把 &lt;code&gt;while&lt;/code&gt; 循环改成以下 &lt;code&gt;for&lt;/code&gt; 循环，就比较直截了当了：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-C++&quot;&gt;&lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;vector&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;v&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;1&lt;/span&gt;, &lt;span style=&quot;color: #110099;&quot;&gt;2&lt;/span&gt;, &lt;span style=&quot;color: #110099;&quot;&gt;3&lt;/span&gt;, &lt;span style=&quot;color: #110099;&quot;&gt;4&lt;/span&gt;, &lt;span style=&quot;color: #110099;&quot;&gt;5&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;for&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;auto&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt; x : v&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    cout &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; x &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot; &quot;&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;pre class=&quot;example&quot;&gt;
1 2 3 4 5
&lt;/pre&gt;


&lt;p&gt;
并且，在这里，我们还用了 &lt;code&gt;const&lt;/code&gt; 关键字修饰 &lt;code&gt;x&lt;/code&gt; ，我们限定了，在这个循环里，我们不会修改 &lt;code&gt;x&lt;/code&gt; 的值。如果不小心在循环中对 &lt;code&gt;x&lt;/code&gt; 的值进行修改，编译器就会报错。那么，根据编译出错信息，我们就比较容易在编码早期发现问题了。
&lt;/p&gt;

&lt;p&gt;
例如，我们在循环体内，做一个自增操作，就收到了编译器的警告：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-bad src-C++&quot;&gt;&lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;vector&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;v&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;1&lt;/span&gt;, &lt;span style=&quot;color: #110099;&quot;&gt;2&lt;/span&gt;, &lt;span style=&quot;color: #110099;&quot;&gt;3&lt;/span&gt;, &lt;span style=&quot;color: #110099;&quot;&gt;4&lt;/span&gt;, &lt;span style=&quot;color: #110099;&quot;&gt;5&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;for&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;auto&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt; x : v&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    cout &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;++&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;x&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot; &quot;&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;pre class=&quot;example&quot; id=&quot;org0147e1a&quot;&gt;
C-src-eO7Jst.cpp: In function &apos;int main()&apos;:
C-src-eO7Jst.cpp:14:15: error: increment of read-only reference &apos;x&apos;
   14 |     cout &amp;lt;&amp;lt; ++x &amp;lt;&amp;lt; &quot; &quot;;
      |               ^
&lt;/pre&gt;

&lt;p&gt;
如果我们想要明确表明，我们要在循环中修改变量 &lt;code&gt;x&lt;/code&gt; ，那么就可以去掉 &lt;code&gt;const&lt;/code&gt; ：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-C++&quot;&gt;&lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;vector&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;v&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;1&lt;/span&gt;, &lt;span style=&quot;color: #110099;&quot;&gt;2&lt;/span&gt;, &lt;span style=&quot;color: #110099;&quot;&gt;3&lt;/span&gt;, &lt;span style=&quot;color: #110099;&quot;&gt;4&lt;/span&gt;, &lt;span style=&quot;color: #110099;&quot;&gt;5&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;for&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;auto&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt; x : v&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    cout &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;++&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;x&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot; &quot;&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;pre class=&quot;example&quot;&gt;
2 3 4 5 6
&lt;/pre&gt;


&lt;p&gt;
除了 &lt;code&gt;for&lt;/code&gt; 循环，我们也可以用&lt;code&gt;std::ranges::for_each&lt;/code&gt;更清晰的表达程序意图：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-C++&quot;&gt;&lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;vector&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;v&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;1&lt;/span&gt;, &lt;span style=&quot;color: #110099;&quot;&gt;2&lt;/span&gt;, &lt;span style=&quot;color: #110099;&quot;&gt;3&lt;/span&gt;, &lt;span style=&quot;color: #110099;&quot;&gt;4&lt;/span&gt;, &lt;span style=&quot;color: #110099;&quot;&gt;5&lt;/span&gt;, &lt;span style=&quot;color: #110099;&quot;&gt;6&lt;/span&gt;, &lt;span style=&quot;color: #110099;&quot;&gt;7&lt;/span&gt;, &lt;span style=&quot;color: #110099;&quot;&gt;8&lt;/span&gt;, &lt;span style=&quot;color: #110099;&quot;&gt;9&lt;/span&gt;, &lt;span style=&quot;color: #110099;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;
&lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;std&lt;/span&gt;::&lt;span style=&quot;color: #3a5fcd; font-weight: bold; font-style: italic;&quot;&gt;ranges&lt;/span&gt;&lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;::for_each&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;v, &lt;span style=&quot;color: #7388d6;&quot;&gt;[](&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;auto&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;x&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt; cout &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; x &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot; &quot;&lt;/span&gt;; &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;
&lt;/pre&gt;
&lt;/div&gt;

&lt;pre class=&quot;example&quot;&gt;
1 2 3 4 5 6 7 8 9 0
&lt;/pre&gt;


&lt;p&gt;
需要注意的是，在 &lt;code&gt;algorithm&lt;/code&gt; 中，也有一个&lt;code&gt;std::for_each&lt;/code&gt;，它的前两个参数是 &lt;code&gt;InputIterator&lt;/code&gt; ：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-C++&quot;&gt;&lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;vector&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;v&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;1&lt;/span&gt;, &lt;span style=&quot;color: #110099;&quot;&gt;2&lt;/span&gt;, &lt;span style=&quot;color: #110099;&quot;&gt;3&lt;/span&gt;, &lt;span style=&quot;color: #110099;&quot;&gt;4&lt;/span&gt;, &lt;span style=&quot;color: #110099;&quot;&gt;5&lt;/span&gt;, &lt;span style=&quot;color: #110099;&quot;&gt;6&lt;/span&gt;, &lt;span style=&quot;color: #110099;&quot;&gt;7&lt;/span&gt;, &lt;span style=&quot;color: #110099;&quot;&gt;8&lt;/span&gt;, &lt;span style=&quot;color: #110099;&quot;&gt;9&lt;/span&gt;, &lt;span style=&quot;color: #110099;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;
&lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;for_each&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;begin&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;v&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;, &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;end&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;v&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;, &lt;span style=&quot;color: #7388d6;&quot;&gt;[](&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;x&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt; cout &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; x &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot; &quot;&lt;/span&gt;; &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;
&lt;/pre&gt;
&lt;/div&gt;

&lt;pre class=&quot;example&quot;&gt;
1 2 3 4 5 6 7 8 9 0
&lt;/pre&gt;


&lt;p&gt;
如果，在循环访问的时候，不需要按照顺序一个一个访问，可以添加
&lt;code&gt;execute::par&lt;/code&gt; 参数，来表示并行访问。因为在这里 &lt;code&gt;v&lt;/code&gt; 的元素不够多，不会有太明显的变化：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-C++&quot;&gt;&lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;vector&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #707183; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;v&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;1&lt;/span&gt;, &lt;span style=&quot;color: #110099;&quot;&gt;2&lt;/span&gt;, &lt;span style=&quot;color: #110099;&quot;&gt;3&lt;/span&gt;, &lt;span style=&quot;color: #110099;&quot;&gt;4&lt;/span&gt;, &lt;span style=&quot;color: #110099;&quot;&gt;5&lt;/span&gt;, &lt;span style=&quot;color: #110099;&quot;&gt;6&lt;/span&gt;, &lt;span style=&quot;color: #110099;&quot;&gt;7&lt;/span&gt;, &lt;span style=&quot;color: #110099;&quot;&gt;8&lt;/span&gt;, &lt;span style=&quot;color: #110099;&quot;&gt;9&lt;/span&gt;, &lt;span style=&quot;color: #110099;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;
&lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;for_each&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;execution&lt;/span&gt;::par, v.&lt;span style=&quot;color: #3a5fcd; font-weight: bold; font-style: italic;&quot;&gt;begin&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt;, v.&lt;span style=&quot;color: #3a5fcd; font-weight: bold; font-style: italic;&quot;&gt;end&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt;, &lt;span style=&quot;color: #7388d6;&quot;&gt;[](&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;x&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt; cout &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; x &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot; &quot;&lt;/span&gt;; &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;
&lt;/pre&gt;
&lt;/div&gt;

&lt;pre class=&quot;example&quot;&gt;
1 2 3 4 5 6 7 8 9 0
&lt;/pre&gt;


&lt;p&gt;
另外举一个例子，如果要表示在两点间画线，以下两种写法里，第二种就比较明确：
&lt;/p&gt;

&lt;p&gt;
#+attr_html :class bad
&lt;/p&gt;
&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-C++&quot;&gt;&lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;draw_line&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt;, &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt;, &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt;, &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;  &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// obscure&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-C++&quot;&gt;&lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;draw_line&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;Point, Point&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;        &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// clearer&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
一个优秀的程序员应该：
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;熟悉掌握指南支持的程序库（guidelines support library, gsl）&lt;/li&gt;
&lt;li&gt;熟悉了解ISO C++标准库&lt;/li&gt;
&lt;li&gt;其他项目中使用的基础库&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;
&lt;b&gt;强化&lt;/b&gt;
&lt;/p&gt;

&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;弄清楚简单的 &lt;code&gt;for&lt;/code&gt; 循环和带范围的&lt;code&gt;for_each&lt;/code&gt;的差异，什么时候可以选用 &lt;code&gt;for_each&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;了解&lt;code&gt;f(T*, int)&lt;/code&gt;接口和&lt;code&gt;f(span&amp;lt;T&amp;gt;)&lt;/code&gt;接口的差异&lt;/li&gt;
&lt;li&gt;避免只在循环中用到的变量，不要超出循环体范围&lt;/li&gt;
&lt;li&gt;避免直接用 &lt;code&gt;new&lt;/code&gt; 或 &lt;code&gt;delete&lt;/code&gt; 的操作&lt;/li&gt;
&lt;li&gt;注意有过多内置类型的函数参数，通常可以通过自定义类型减少参数数量&lt;/li&gt;
&lt;/ul&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines P.2 用 ISO C++ 标准写代码</title>
   <link href="http://kimi.im/2021-12-20-cppcoreguidelines-p2"/>
   <updated>2021-12-20T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-p2</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
P.2 Write in ISO Standard C++
&lt;/p&gt;

&lt;p&gt;
这条指南是说尽量按照ISO C++国际标准写代码。
&lt;/p&gt;

&lt;p&gt;
注意事项：
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;避免使用编译器特有的扩展功能。不同编译器针对不同扩展功能会有差别，就无法做到兼容，而且扩展功能如果设计不好、测试不全面，没有考虑一些边界情况，就容易出错。如果使用这些编译器特定扩展的功能无法避免，可以在扩展功能之外封装一层接口，把不兼容和不标准的代码单独隔离开。&lt;/li&gt;
&lt;li&gt;避免使用某些行为未定义的功能，比如代码执行顺序。不然就无法在不同平台和不同编译器之间移植。&lt;/li&gt;
&lt;li&gt;避免使用某些依赖于底层系统的实现的功能，比如&lt;code&gt;sizeof(int)&lt;/code&gt;，32 位和
64 位系统的返回值会不一样。&lt;/li&gt;
&lt;li&gt;在一些特定的应用领域，我们会限制C++的某些功能，比如航空控制软件的标准会限制使用动态内存分配功能。因为这些系统对运行时的可靠稳定有极高的要求。因此，针对不同的行业应用要求，需要设定不同的规则，限定这些应用领域能使用哪些标准C++的功能。&lt;/li&gt;
&lt;li&gt;使用最新的C++编译器（目前最新的是C++20,或者支持到C++17也可以了）&lt;/li&gt;
&lt;li&gt;对编译器的编译选项进行限定，关闭某些非标准的扩展功能。&lt;/li&gt;
&lt;/ul&gt;
</content>
 </entry>
 
 <entry>
   <title>OPC UA 的发展历史</title>
   <link href="http://kimi.im/2021-12-19-opcua-history"/>
   <updated>2021-12-19T00:00:00+00:00</updated>
   <id>http://kimi.im/opcua-history</id>
   <content type="html">&lt;p&gt;
之前，我写了&lt;a href=&quot;http://kimi.im/2021-12-18-opcua-intro&quot;&gt;OPC UA 的简介&lt;/a&gt;。接下来，看看 OPC 的发展历史。
&lt;/p&gt;

&lt;div id=&quot;outline-container-orgfdabfe3&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgfdabfe3&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;1.&lt;/span&gt; 1990年代&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-1&quot;&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;因为工业领域大部分都在用微软操作系统，因此自动化厂商在其产品中使用微软的 COM 和 DCOM 技术提供数据访问功能&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-orgeb6099c&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgeb6099c&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;2.&lt;/span&gt; 1995年&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-2&quot;&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;费希尔-罗斯蒙特（Fisher-Rosemount）、Intellution、奥普图（Opto 22）、罗克韦尔软件等多家自动化厂商组成工作小组，计划基于微软 COM 和 DCOM 开发一套数据访问标准，称之为 OPC，即 OLE for Process Control 的缩写。OLE 则是微软 Object Linking &amp;amp; Embedding 的缩写。&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
费希尔-罗斯蒙特是 1992 年由费希尔（Fisher）和罗斯蒙特（Rosemount）两家自动化企业合并而来。最终，又都并入到了艾默生（Emerson）。
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-org7b7d38d&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;org7b7d38d&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;3.&lt;/span&gt; 1996年&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-3&quot;&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;工作组发布了 1.0 版本的 OPC DA 标准规范。&lt;/li&gt;
&lt;li&gt;其他自动化厂商也开始使用 OPC DA&lt;/li&gt;
&lt;li&gt;1996 年 4 月 22 日成立了 OPC 基金会（OPC Foundation）进行合规、集成、认证、测试等标准化工作&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-org9ccc0d1&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;org9ccc0d1&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;4.&lt;/span&gt; 1998年&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-4&quot;&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;OPC 基金开始把标准规范转成 web 服务&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-org7f94963&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;org7f94963&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;5.&lt;/span&gt; 1999年&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-5&quot;&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;发布 OPC 报警与事件规范（OPC Alarms &amp;amp; Events, AE）&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-org3b18a8e&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;org3b18a8e&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;6.&lt;/span&gt; 2001年&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-6&quot;&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;发布 OPC 历史数据访问规范（OPC Historical Data Access, HDA)&lt;/li&gt;
&lt;li&gt;发布批处理（Batch）和安全（Security）规范&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-orgaec3c34&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgaec3c34&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;7.&lt;/span&gt; 2003年&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-7&quot;&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;发布 OPC 复杂数据（Complex Data）、数据交换（Data eXchange, DX）、XML-DA 规范&lt;/li&gt;
&lt;li&gt;发布 OPC UA 13 分册&lt;/li&gt;
&lt;li&gt;第一次 OPC UA 工作组会议在 11 月 3-7 日召开&lt;/li&gt;
&lt;li&gt;重新命名之前的 OPC 规范为经典 OPC（Classic OPC, OPC Classic）&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-org2ecaa6f&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;org2ecaa6f&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;8.&lt;/span&gt; 2004年&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-8&quot;&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;发布 OPC 命令规范（OPC Commands）&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-orgec639c0&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgec639c0&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;9.&lt;/span&gt; 2006年&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-9&quot;&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;2006 年 7 月 28 日，发布 OPC UA 1.0 版本&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-orgf05ad21&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgf05ad21&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;10.&lt;/span&gt; 2007年&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-10&quot;&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;推出 OPC 认证项目和测试实验室&lt;/li&gt;
&lt;li&gt;自动化厂商开始提供基于 OPC UA 产品&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-org3b5853f&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;org3b5853f&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;11.&lt;/span&gt; 2009年&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-11&quot;&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;发布 OPC UA 1.1 版本&lt;/li&gt;
&lt;li&gt;发布 OPC UA 分析设备伙伴规范（Analyzer Devices, ADI）&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-orgb7934e6&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgb7934e6&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;12.&lt;/span&gt; 2010年&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-12&quot;&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;发布第一款嵌入式 OPC UA 设备&lt;/li&gt;
&lt;li&gt;发布 OPC UA IEC 61131 伙伴协议&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-org50619a1&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;org50619a1&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;13.&lt;/span&gt; 2012年&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-13&quot;&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;发布 OPC UA 的国际标准 IEC 62541 标准&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-orgf451cf5&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgf451cf5&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;14.&lt;/span&gt; 2013年&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-14&quot;&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;发布 OPC UA 1.02 版本&lt;/li&gt;
&lt;li&gt;发布 OPC UA ISA-95 伙伴规范&lt;/li&gt;
&lt;li&gt;发布 OPC UA 设备规范 1.01 版&lt;/li&gt;
&lt;li&gt;来自中国、欧洲、日本、北美的 OPC 基金会成员超过 480 个&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-org205e006&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;org205e006&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;15.&lt;/span&gt; 2015年&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-15&quot;&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;发布 OPC UA 1.03 版本&lt;/li&gt;
&lt;li&gt;发布 IEC 62541:2015 版本&lt;/li&gt;
&lt;li&gt;工业 4.0 参考架构模型（RAMI4.0）将 OPC UA 列为通信层&lt;/li&gt;
&lt;li&gt;VDMA 计划基于 OPC UA 开发工厂自动化的标准信息模型&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-org34de804&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;org34de804&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;16.&lt;/span&gt; 2016年&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-16&quot;&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;欧洲 OPC 实验室创立&lt;/li&gt;
&lt;li&gt;发布 OPC UA AutoID 伙伴规范&lt;/li&gt;
&lt;li&gt;发布 基于 OPC UA 的 PLC 控制器间通信功能块&lt;/li&gt;
&lt;li&gt;来自中国、欧洲、日本、北美的 OPC 基金会成员达到 490 个&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-org1e7677f&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;org1e7677f&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;17.&lt;/span&gt; 2017年&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-17&quot;&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;发布 OPC UA MDIS 伙伴协议，该协议用于石油天然气行业的深海生产控制系统通信&lt;/li&gt;
&lt;li&gt;发布 OPC UA CNC 伙伴协议，用于与计算机辅助数控系统通信&lt;/li&gt;
&lt;li&gt;发布 OPC UA FDI 伙伴协议，用于与现场设备进行通信&lt;/li&gt;
&lt;li&gt;VDMA 发布基于 OPC UA 的工业 4.0 通信指南&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-orgafca44d&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgafca44d&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;18.&lt;/span&gt; 2018年&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-18&quot;&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;发布 OPC UA 1.04 版本&lt;/li&gt;
&lt;li&gt;发布了 18 个伙伴协议，包括能源自动化行业（IEC 61850）、烟草行业、
PackML包装行业、AutomationML&lt;/li&gt;
&lt;li&gt;成立了 20 个工作组开发伙伴协议&lt;/li&gt;
&lt;li&gt;来自中国、欧洲、日本、北美的 OPC 基金会成员达到 636 个&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-org6888e3a&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;org6888e3a&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;19.&lt;/span&gt; 2019年&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-19&quot;&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;发布 OPC 10000-100 设备伙伴协议 1.02 版本&lt;/li&gt;
&lt;li&gt;发布 OPC 40010-1 机器人伙伴协议&lt;/li&gt;
&lt;li&gt;发布 OPC 30070-1 MTConnect 伙伴协议&lt;/li&gt;
&lt;li&gt;发布 OPC 30200 商业厨房设备伙伴协议&lt;/li&gt;
&lt;li&gt;发布 OPC 40100-1 机器视觉伙伴协议&lt;/li&gt;
&lt;li&gt;由 ODVA 牵头成立 CIP 设备工作组&lt;/li&gt;
&lt;li&gt;由 VDMA 牵头成立矿机设备工作组&lt;/li&gt;
&lt;li&gt;由 VDMA Food 牵头成立 Weihenstephan 标准工作组&lt;/li&gt;
&lt;li&gt;由 ISA 100 无线规范学院（ISA 100 Wireless Compliance Institute, WCI）牵头成立 ISA 100 工作组&lt;/li&gt;
&lt;li&gt;由 VDMA 牵头成立泵机真空泵机工作组&lt;/li&gt;
&lt;li&gt;由 VDMA 牵头成立塑料橡胶机器工作组&lt;/li&gt;
&lt;li&gt;由 VDMA 牵头成立表面处理技术工作组&lt;/li&gt;
&lt;li&gt;由 VDMA 牵头成立木材处理机器工作组&lt;/li&gt;
&lt;li&gt;成立 OPC Hub India、新加坡/ASEAN、FranceOPC基金会成员&lt;/li&gt;
&lt;li&gt;达到 737 个会员&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-orgcbc0087&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgcbc0087&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;20.&lt;/span&gt; 2020年&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-20&quot;&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;发布 OPC 30000 - IEC 61131-3 PLCOpen 1.2 版本&lt;/li&gt;
&lt;li&gt;发布 OPC 30260 - OpenSCS 伙伴协议&lt;/li&gt;
&lt;li&gt;发布 OPC 30050 - PackML 伙伴协议&lt;/li&gt;
&lt;li&gt;增加 OPC UA 椭圆曲线加密算法（Elliptic Curve Cryptography, ECC）&lt;/li&gt;
&lt;li&gt;发布 OPC 40501-2 机器工具基础模型&lt;/li&gt;
&lt;li&gt;发布 OPC 40001-1 机床基础构建块&lt;/li&gt;
&lt;li&gt;发布 OPC 10000-200 工业自动化伙伴协议&lt;/li&gt;
&lt;li&gt;发布 OPC 30010 AutoID 伙伴协议 1.01.07 版本&lt;/li&gt;
&lt;li&gt;发布 OPC 40200 称重技术伙伴协议&lt;/li&gt;
&lt;li&gt;发布 OPC 30081 过程自动化 PADIM 伙伴协议&lt;/li&gt;
&lt;li&gt;由 VDMA 牵头成立升降机起重机工作组&lt;/li&gt;
&lt;li&gt;由 VDMA 牵头成立长度测量系统（LMS）工作组&lt;/li&gt;
&lt;li&gt;由 OPC 基金会牵头成立 ISA-95 第2版本工作组&lt;/li&gt;
&lt;li&gt;由 VDMA 牵头成立织布纺纱测试设备（FYTD）工作组&lt;/li&gt;
&lt;li&gt;由 VDMA 牵头成立过程空气提取过滤系统（PAEFS）工作组&lt;/li&gt;
&lt;li&gt;由 VDMA 牵头成立压缩空气系统（CAS）工作组&lt;/li&gt;
&lt;li&gt;由 CESMII 牵头成立Cloud Library工作组&lt;/li&gt;
&lt;li&gt;由 Spectaris 牵头成立实验室和分析设备标准（LADS）工作组&lt;/li&gt;
&lt;li&gt;由 VDMA 牵头成立机床通用模型工作组&lt;/li&gt;
&lt;li&gt;2020 年底 OPC 基金会成员达到 803 家&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-org70374a1&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;org70374a1&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;21.&lt;/span&gt; 2021年&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-21&quot;&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;发布 OPC 40001-1 机床基础构建块 1.01 版本&lt;/li&gt;
&lt;li&gt;发布 OPC 30131 PROFIenergy 伙伴协议&lt;/li&gt;
&lt;li&gt;发布 OPC 40084-12 压模压光机伙伴协议&lt;/li&gt;
&lt;li&gt;发布 OPC 10000-100 设备伙伴协议 1.03 版本&lt;/li&gt;
&lt;li&gt;发布 OPC 11031-4 ISA-95 排产伙伴协议&lt;/li&gt;
&lt;li&gt;发布 OPC 30261 OpenSCS 排产伙伴协议&lt;/li&gt;
&lt;li&gt;发布 OPC 40223 泵机真空泵机伙伴协议&lt;/li&gt;
&lt;li&gt;发布 OPC 40083 塑料橡胶通用类型伙伴协议&lt;/li&gt;
&lt;li&gt;发布 OPC 30270 设备管理壳（Asset Administration Shell, AAS）伙伴协议&lt;/li&gt;
&lt;li&gt;发布 OPC 40250-1 压缩空气系统伙伴协议&lt;/li&gt;
&lt;li&gt;发布 OPC 10000-200 工业自动化伙伴协议 1.01 版本&lt;/li&gt;
&lt;li&gt;发布 OPC 40600 Weihenstephan 标准伙伴协议&lt;/li&gt;
&lt;li&gt;成立 M2X 内部物流通信协议工作组&lt;/li&gt;
&lt;li&gt;成立云联邦工作组&lt;/li&gt;
&lt;li&gt;2021年8月，OPC 基金会成员达到 840 家&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
</content>
 </entry>
 
 <entry>
   <title>单词本：oestrus</title>
   <link href="http://kimi.im/2021-12-19-english-oestrus"/>
   <updated>2021-12-19T00:00:00+00:00</updated>
   <id>http://kimi.im/english-oestrus</id>
   <content type="html">&lt;p&gt;
前几天看了几篇农业物联网的论文，真是打开眼界。比如说猪这个动物，其实是很爱卫生的，生活环境不清洁就会心情不好。还有动物发情期，也会情绪暴躁、体温升高等。
&lt;/p&gt;

&lt;p&gt;
传统农业，为了促进动物繁殖，人们会通过观察，确定动物的繁殖期
Historically, oestrus detection in cattle has been carried out by a
skilled observer, the farmer or stockman who look for visual signs of
&lt;b&gt;oestrus&lt;/b&gt;.
&lt;/p&gt;

&lt;p&gt;
前面提到过，动物发情期的行为习惯、身体体温都会有一些变化，所以物联网技术就有发挥的空间了：it is widely recognised that &lt;b&gt;oestrus&lt;/b&gt; detection is
one area where a technology may have a role to play.
&lt;/p&gt;

&lt;p&gt;
这个奇怪的单词 &lt;b&gt;oestrus&lt;/b&gt; 就是（雌性动物）发情期的意思，也是牛虻的意思。有可能，牛被牛虻叮咬的时候，就会脾气暴躁，而脾气暴躁是牛发情期的一个表现。所以牛虻就和牛的发情期关联到了一个单词了。
&lt;/p&gt;

&lt;p&gt;
因为这些行为体征的变化，一般会在牛的耳朵上戴一个传感器，可以检测牛的运动频率、运动轨迹和身体温度变化。一方面监控它们的健康情况，另一方面也能及时监测牛的发情期，从而及时配种，促进繁殖。
&lt;/p&gt;

&lt;p&gt;
此外，农场里，除了牛虻oestrus，还有horsefly，gadfly，warble fly，
botfly等各种fly。
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>单词本：flounder</title>
   <link href="http://kimi.im/2021-12-19-english-flounder"/>
   <updated>2021-12-19T00:00:00+00:00</updated>
   <id>http://kimi.im/english-flounder</id>
   <content type="html">&lt;p&gt;
英语里，同样一个词，名词和动词怎么能差别这么大呢?
&lt;/p&gt;

&lt;p&gt;
作为一个合格的架构师，我在持续不断的学习，最近看一本书《Documenting
Software Architectures: Views and Beyond》，在提到架构文档的重要性时，作者 Felix Bachmann 写道：Even with a superb architecture, if it is
not well understood and well communicated &amp;#x2013; in other words, well
documented &amp;#x2013; the project is likely to &lt;b&gt;flounder&lt;/b&gt;. 
&lt;/p&gt;

&lt;p&gt;
那么，问题来了， flounder 什么意思呢？作为名词和动词，flounder 分别是：
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;n. 比目鱼；偏口鱼&lt;/li&gt;
&lt;li&gt;v. 不知所措；挠头；支吾；困难重重&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
所以前面这句话里，应该采取动词的意思，即困难重重。那么整句话就翻译为：哪怕是最杰出的架构设计，如果没有理解好、沟通好、没有形成好的文档，开发项目可能就会困难重重了。
&lt;/p&gt;

&lt;p&gt;
难道是因为比目鱼长得比较扁，在大海里生活经常不知所措、困难重重？
&lt;/p&gt;

&lt;p&gt;
也有可能，flounder 是从 founder 笔误而来，那么 founder 什么意思呢？它作为名词和动词，也有两个很不一样的意思：
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;n. 创始人；（方正集团）&lt;/li&gt;
&lt;li&gt;v. 沉没；破产；失败&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
最近听说方正集团破产重整了，难道是因为名字没取好的原因？
&lt;/p&gt;

&lt;p&gt;
英语里，同样一个词，名词和动词差别真大啊。
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>聊一聊 OPC UA</title>
   <link href="http://kimi.im/2021-12-18-opcua-intro"/>
   <updated>2021-12-18T00:00:00+00:00</updated>
   <id>http://kimi.im/opcua-intro</id>
   <content type="html">&lt;p&gt;
昨天10点睡觉的，可能睡得太早了。早上4点不到就醒了！醒来看了王力宏的八卦，然后就打开电脑学习了。
&lt;/p&gt;

&lt;p&gt;
最近工作的重点是怎么安全地使用OPC UA构建工业控制系统的通信和信息模型。就聊一聊OPC UA的前世今生吧。
&lt;/p&gt;

&lt;p&gt;
在工业装备领域，厂商们主要是卖硬件，比如机械臂、控制器、I/O。通过硬件，附带提供硬件的配置、监控、维护软件，比如Engineering、Operation、SCADA
等。要让硬件安全、可靠、稳定地运行，需要比较高的专业技能，所以厂家又会提供工厂规划、自动化应用开发、运维等附加服务。
&lt;/p&gt;

&lt;p&gt;
另外，工业装备硬件不像消费电子那样年年换新款，一次投产可能就会一直用10
年、20年。所以，装备厂商在硬件之外，还要想办法获取其他商业机会。可以想象，客户选择了一个品牌的硬件，必然连带的要购买相应的软件和服务。因此，厂商会在自己的硬件产品中，使用自己开发的工业协议。这样一来，客户买了A
厂商的硬件，就必须购买相应的软件，以及相关的服务。未来，客户工厂升级，为了节省成本，避免整体替换设备，也会继续购买A厂商的硬件进行工厂的升级改造。
&lt;/p&gt;

&lt;p&gt;
但是甲方客户也不会傻傻的躺着任人宰割，所以会提出设备兼容性要求，比如采购时会要求A厂的控制器必须和B厂的I/O能互联。于是，厂商竞争的同时，也要进行合作。于是不同厂商会主导不同的工业协议，比如 PROFIBUS、PROFINET、
EtherCat、Modbus TCP 等。
&lt;/p&gt;

&lt;p&gt;
后来，客户和厂商都发现，不论是在工厂里还是在设备开发中，同时维护多个工业协议费时又费力，还容易出错。于是，政府、客户和厂商一起，发起了工业
4.0倡议：应用一系列的新技术，建立高效的自行管理的生产过程，通过运用工业物联网 IoT 和开放的通信和信息模型标准，将传感器、控制器、人、机器、设备、物流系统以及产品统统实现直接通信和协同。
&lt;/p&gt;

&lt;p&gt;
OPC Foundation 就扛起了这个重任，发布了OPC UA标准，旨在构建开放、安全、可靠、平台中立的设备互操作标准为己任。目前已经聚集了全球800多家企业，认证了几千个符合 OPC 标准的产品。
&lt;/p&gt;

&lt;p&gt;
OPC UA 通过统一的通信协议和标准的信息模型，解决了设备、软件之间的互相访问问题。各个设备实现 OPC UA 数据模型、接口服务和统一的安全访问端点（EndPoint）。其他设备就能安全地：
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;建立安全通道（SecureChannel）和通信会话（Session）&lt;/li&gt;
&lt;li&gt;查询设备信息&lt;/li&gt;
&lt;li&gt;订阅设备数据更新&lt;/li&gt;
&lt;li&gt;调用设备操作方法&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
有了 OPC UA，客户可以根据业务需求放心的选择不同厂商的设备，快速实现数据集成，而不用担心被一家厂商锁定。厂商也不需要维护多套通信协议，集中研发经费，用于产品创新，为客户提供更好的服务。不同规模的中小厂商，也能专注一个特定领域，参与工业4.0的建设。IT企业，也能通过 OPC UA 提供更好的工业数字化产品。
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>CppCoreGuidelines P.1 直接地用代码表达编程设计理念</title>
   <link href="http://kimi.im/2021-12-18-cppcoreguidelines-p1"/>
   <updated>2021-12-18T00:00:00+00:00</updated>
   <id>http://kimi.im/cppcoreguidelines-p1</id>
   <content type="html">&lt;p&gt;
&lt;a href=&quot;http://kimi.im/tags.html#CppCoreGuidelines-ref&quot;&gt;C++ 核心指南目录&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
Github 上有个&lt;a href=&quot;https://github.com/isocpp/CppCoreGuidelines&quot;&gt;C++核心指南&lt;/a&gt;。C++ 创始人&lt;a href=&quot;https://github.com/isocpp/CppCoreGuidelines/commits?author=BjarneStroustrup&quot;&gt;Bjarne Stroustrup&lt;/a&gt;亲自参与维护。值得好好学习。
&lt;/p&gt;

&lt;p&gt;
这个指南根据不同主题，分为多个章节，比如 P 代表编程 Philosophy 哲学，I
代表 Interface 接口设计，F 表示 Function 函数，C 表示 Class and Class
Hierarchies 类与类层级，R 表示Resource Management资源管理，Per 表示
Performance 性能，CP 表示 Concurrency 并发与并行计算，Con 表示
Constants and Immutability 常量与不变性等。
&lt;/p&gt;

&lt;p&gt;
在每个章节下，又用阿拉伯数字对规则进行进行标注。比如 &lt;a href=&quot;https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#p1-express-ideas-directly-in-code&quot;&gt;P.1 Express ideas
directly in code&lt;/a&gt; 这个章节讲的是如何直接地用代码表达编程设计哲学理念。
&lt;/p&gt;

&lt;p&gt;
每一个规则的阐述包含：
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;Reasons 理由&lt;/li&gt;
&lt;li&gt;Examples 代码示例&lt;/li&gt;
&lt;li&gt;Alternatives 替代方案&lt;/li&gt;
&lt;li&gt;Exceptions 例外情况&lt;/li&gt;
&lt;li&gt;Enforcement 工具强化&lt;/li&gt;
&lt;li&gt;See also 指南中的其他相关规则&lt;/li&gt;
&lt;li&gt;Notes 备注说明&lt;/li&gt;
&lt;li&gt;Discussion 扩展讨论&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;
接下来，学习学习第一条指南：P.1 Express ideas directly in code 直接用代码表达设计想法。
&lt;/p&gt;

&lt;p&gt;
P.1 Express ideas directly in code
&lt;/p&gt;

&lt;p&gt;
&lt;b&gt;理由&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
一般来说，编译器是不会处理代码注释，更不会解析设计文档。大多数程序员也没耐心仔细阅读代码注释和设计文档。所以，程序的意图直接通过代码清晰地表达出来，不论是编译器，还是其他程序员，都可以理解地更好。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;示例&lt;/b&gt;
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;Date&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;public&lt;/span&gt;:
    &lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;Month&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold; font-style: italic;&quot;&gt;month&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt;;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold; font-style: italic;&quot;&gt;month&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
上面的代码段中，第一个函数声明所表达的内容更清晰：调用 &lt;code&gt;month&lt;/code&gt; 函数可以得到一个 &lt;code&gt;Month&lt;/code&gt; 对象，又因为该函数是一个 &lt;code&gt;const&lt;/code&gt; 成员函数，所以 &lt;code&gt;month&lt;/code&gt; 不改变 &lt;code&gt;Date&lt;/code&gt; 对象的成员变量，也不能调用 &lt;code&gt;Date&lt;/code&gt; 对象中没有 &lt;code&gt;const&lt;/code&gt; 所修饰的成员函数，因为没有 &lt;code&gt;const&lt;/code&gt; 修饰的成员函数意味着这些函数是允许修改对象的成员变量，那就违反了 &lt;code&gt;const&lt;/code&gt; 修饰词所表达的意图了。
&lt;/p&gt;

&lt;p&gt;
相比较而言，第二个函数&lt;code&gt;int month()&lt;/code&gt;的声明，所表达的代码信息和设计理念较少。别的程序员在使用你设计的接口函数的时候，可能就要连蒙带猜、费尽心思了。这就会导致更多的代码缺陷、程序 bug。
&lt;/p&gt;


&lt;p&gt;
&lt;b&gt;坏例子&lt;/b&gt; ：其实只是标准库函数&lt;code&gt;std::find&lt;/code&gt;的一个特定应用。
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;vector&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;string&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;v&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;string&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;val&lt;/span&gt;;
    cin &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;gt;&amp;gt;&lt;/span&gt; val;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ...&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;index&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;-1&lt;/span&gt;;                    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// bad, plus should use gsl::index&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;for&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;i&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;0&lt;/span&gt;; i &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt; v.&lt;span style=&quot;color: #3a5fcd; font-weight: bold; font-style: italic;&quot;&gt;size&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;()&lt;/span&gt;; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;++&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;i&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;
        &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;v&lt;span style=&quot;color: #709870;&quot;&gt;[&lt;/span&gt;i&lt;span style=&quot;color: #709870;&quot;&gt;]&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;==&lt;/span&gt; val&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #909183;&quot;&gt;{&lt;/span&gt;
            &lt;span style=&quot;color: #000000;&quot;&gt;index&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; i;
            &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;break&lt;/span&gt;;
        &lt;span style=&quot;color: #909183;&quot;&gt;}&lt;/span&gt;
    &lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ...&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
&lt;code&gt;std::find&lt;/code&gt; 标准库函数可以更直接地表达程序的目的。
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;vector&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;string&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;v&lt;/span&gt;, &lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;string&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;val&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;//string val;&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;//cin &amp;gt;&amp;gt; val;&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ...&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;auto&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;p&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;find&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;begin&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;v&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt;, &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;end&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;v&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt;, val&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;  &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// better&lt;/span&gt;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;p &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;==&lt;/span&gt; &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;end&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;v&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;
        cout &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;can&apos;t find \&quot;&quot;&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; val &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;\&quot;\n&quot;&lt;/span&gt;;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;else&lt;/span&gt;
        cout &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;find \&quot;&quot;&lt;/span&gt;  &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; val &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;\&quot;\n&quot;&lt;/span&gt;;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// ...&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;main&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;vector&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;string&lt;/span&gt;&lt;span style=&quot;color: #7388d6; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;vec&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;Mon&quot;&lt;/span&gt;, &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;Tue&quot;&lt;/span&gt;, &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;Wed&quot;&lt;/span&gt;, &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;Thu&quot;&lt;/span&gt;, &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;Fri&quot;&lt;/span&gt;, &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;Sat&quot;&lt;/span&gt;, &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;Sun&quot;&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;;
    &lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;string&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;day&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;Fri&quot;&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;}&lt;/span&gt;;
    &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;vec, day&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
    &lt;span style=&quot;color: #000000;&quot;&gt;day&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;&amp;#21608;&amp;#20116;&quot;&lt;/span&gt;;
    &lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;vec, day&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;    
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;pre class=&quot;example&quot;&gt;
find &quot;Fri&quot;
can&apos;t find &quot;周五&quot;
&lt;/pre&gt;


&lt;p&gt;
设计优良的程序库清晰地表达设计意图，即程序要完成什么任务，而不是怎么完成这些任务。这就相比直接通过编写代码效果要好。
&lt;/p&gt;

&lt;p&gt;
C++ 程序员要熟悉标准库和 &lt;a href=&quot;https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#S-gsl&quot;&gt;GSL 库&lt;/a&gt;。可复用的库抽象了常用的功能，经过验证、性能保障、不易出错、有助理解。
&lt;/p&gt;

&lt;p&gt;
&lt;b&gt;例子&lt;/b&gt;
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-C++&quot;&gt;&lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;change_speed&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;double&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;s&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;   &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// bad: what does s signify?&lt;/span&gt;
&lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;change_speed&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;2.3&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
从上面的函数定义，我们无法得出这个 &lt;code&gt;double&lt;/code&gt; 类型的变量 &lt;code&gt;s&lt;/code&gt; 是什么意思。是新的速度，还是速度增量，速度的单位又是什么？
&lt;/p&gt;

&lt;p&gt;
以下例子中，最后一个使用了C++的字面量后缀。可以用来表示不同的物理量。
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-C++&quot;&gt;&lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;change_speed&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;Speed&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;s&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// better: the meaning of s is specified&lt;/span&gt;
&lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;change_speed&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;2.3&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;        &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// error: no unit&lt;/span&gt;
&lt;span style=&quot;color: #3a5fcd; font-weight: bold;&quot;&gt;change_speed&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;23&lt;/span&gt;_m &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;/&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;10&lt;/span&gt;s&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;; &lt;span style=&quot;color: #3F7F5F;&quot;&gt;// meters per second&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
另外，如果我们想让这个函数接收两种不同的变量，即新的速度或者速度的改变量，我们可以再额外定义个名为 &lt;code&gt;Delta&lt;/code&gt; 的变量类型。
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-C++&quot;&gt;&lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;change_speed&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;Delta&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;d&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
以下程序定义了&lt;code&gt;_m&lt;/code&gt;和 &lt;code&gt;_s&lt;/code&gt; 后缀，这样就可以很直观的表达速度是如何计算出来的，即：米/秒。
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;long double&lt;/span&gt; operator&quot;&quot;_m&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;long double&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;x&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; x;&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;long double&lt;/span&gt; operator&quot;&quot;_s&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;long double&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;x&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; x;&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;main&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic;&quot;&gt;auto&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;speed&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;23.1&lt;/span&gt;_m &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;/&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;10.0&lt;/span&gt;_s;
    cout &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; speed &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; endl;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;pre class=&quot;example&quot;&gt;
2.31
&lt;/pre&gt;


&lt;p&gt;
需要注意的是，根据C++11标准，只有以下数据类型才是合法的&lt;code&gt;operator&quot;&quot;_xx&lt;/code&gt;参数：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;char&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;*&lt;/span&gt;
unsigned &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;long long&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;long double&lt;/span&gt;
char &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;*&lt;/span&gt;, &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;size_t&lt;/span&gt;
wchar_t &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;*&lt;/span&gt;, &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;size_t&lt;/span&gt;
char16_t &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;*&lt;/span&gt;, &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;size_t&lt;/span&gt;
char32_t &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;*&lt;/span&gt;, &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;size_t&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
所以，其实还可以这样定义后缀，用来返回字符串的 &lt;code&gt;size&lt;/code&gt; ：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src- src-C++&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;size_t&lt;/span&gt; operator&quot;&quot;_sz&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;char&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;str&lt;/span&gt;, &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;size_t&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;sz&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; sz;&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;main&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;()&lt;/span&gt;
&lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    cout &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;size of \&apos;hello world\&apos; is: &quot;&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;hello world&quot;&lt;/span&gt;_sz &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; endl;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;pre class=&quot;example&quot;&gt;
size of &apos;hello world&apos; is: 11
&lt;/pre&gt;



&lt;p&gt;
&lt;b&gt;强化&lt;/b&gt;
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;检查成员函数是不是会修改对象内部数据，如果不修改的话，这个成员函数应该用 &lt;code&gt;const&lt;/code&gt; 修饰。&lt;/li&gt;
&lt;li&gt;检查函数会不会修改通过指针或引用传入的参数，如果不修改的话，这些参数应该用 &lt;code&gt;const&lt;/code&gt; 修饰。&lt;/li&gt;
&lt;li&gt;标记出用了类型转换的代码，因为强制类型转换会削弱类型系统的作用。&lt;/li&gt;
&lt;li&gt;识别出可以用标准库替代的代码。&lt;/li&gt;
&lt;/ul&gt;
</content>
 </entry>
 
 <entry>
   <title>单词本：ultimatum</title>
   <link href="http://kimi.im/2021-12-18-english-ultimatum"/>
   <updated>2021-12-18T00:00:00+00:00</updated>
   <id>http://kimi.im/english-ultimatum</id>
   <content type="html">&lt;p&gt;
平时看资料的时候，遇到一些不认识的单词，我会随手做个记录。感谢 Emacs
的 &lt;a href=&quot;https://github.com/xuchunyang/youdao-dictionary.el&quot;&gt;youdao-disctionary&lt;/a&gt; 插件和 org-mode capture 功能，我可以快速查到单词，然后用快捷键 &lt;code&gt;Ctrl-c c&lt;/code&gt; 记录。
&lt;/p&gt;

&lt;p&gt;
最近看一些工业控制传感器采集数据之类的资料，看到几个 &lt;code&gt;-um&lt;/code&gt; 结尾的词：
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;supremum 上确界&lt;/li&gt;
&lt;li&gt;infimum 下确界&lt;/li&gt;
&lt;li&gt;maximum 最大值&lt;/li&gt;
&lt;li&gt;minimum 最小值&lt;/li&gt;
&lt;li&gt;optimum 最优值&lt;/li&gt;
&lt;li&gt;ultimatum 最后通牒&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
前几个在数学书上会出现比较多吧。为了展示它们的区别，我特意绘制如下示意图：
&lt;/p&gt;


&lt;pre class=&quot;example&quot; id=&quot;org3619a2d&quot;&gt;
     infimum/minimum        supremum/maximum
----------[---------------------]------------------&amp;gt;
     infimum                supremum/maximum
----------(---------------------]------------------&amp;gt;
     infimum/minimum        supremum
----------[---------------------)------------------&amp;gt;
     infimum                supremum
----------(---------------------)------------------&amp;gt;
&lt;/pre&gt;

&lt;p&gt;
从上图可以看出，在包含两个端点的情况下，最小值等于下确界，最大值等于上确界。而在不包含两个端点的情况下，就不存在最大值和最小值，只有上确界和下确界。
&lt;/p&gt;

&lt;p&gt;
最后那个单词 ultimatum 最后通牒的意思。似乎和数学就没什么关系了。放在一起只是因为长得跟签名的小兄弟有点像罢了。
&lt;/p&gt;

&lt;p&gt;
例句：
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;An &lt;b&gt;ultimatum&lt;/b&gt; is a warning to someone that unless they act in a
particular way, action will be taken against them. &lt;b&gt;最后通牒&lt;/b&gt; 用来警告某些人，如果不按照某种行动，就会对他们采取行动。&lt;/li&gt;
&lt;li&gt;They delivered an &lt;b&gt;ultimatum&lt;/b&gt; to that country.他们给那个国家发出了 &lt;b&gt;最后通牒&lt;/b&gt; 。&lt;/li&gt;
&lt;/ul&gt;
</content>
 </entry>
 
 <entry>
   <title>单词本：to act in concert</title>
   <link href="http://kimi.im/2021-12-18-english-to-act-in-concert"/>
   <updated>2021-12-18T00:00:00+00:00</updated>
   <id>http://kimi.im/english-to-act-in-concert</id>
   <content type="html">&lt;p&gt;
最近调研光伏侧储能项目，碰到这句话：Sonnen has long touted the
advantages of connecting large numbers of residential systems together
&lt;b&gt;to act in concert&lt;/b&gt; to benefit both the grid and individual
users. Sonnen 储能公司一直以来就自称是能够通过协同大量住宅系统，为电网和用户创造价值。
&lt;/p&gt;

&lt;p&gt;
这里，用 &lt;b&gt;to act in concert&lt;/b&gt; 是齐心协力一致行动的意思。
&lt;/p&gt;

&lt;p&gt;
另外，在投资领域，也有一致行动的说法： &lt;b&gt;Acting in concert&lt;/b&gt; is a slang
term for when parties undertake identical investment actions to
achieve the same goal. Acting in concert requires the cooperation of
people or corporations to make the same transactions based on a
previous arrangement.  &lt;b&gt;一致行动&lt;/b&gt; 指的是多个投资方，采取一致的投资操作，实现共同目的。
&lt;/p&gt;

&lt;p&gt;
在音乐中，协奏曲 concerto 源自意大利语 concertare 意思是协调一致。此外，还有一个词 Symphony 交响乐，是包含多个乐章的大型管弦乐曲。单词来自希腊语 symphōnia，表示一起响的意思。syn 表示同步、phōnē 表示声音，合在一起就是同时发声咯。
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>单词本：paranoid</title>
   <link href="http://kimi.im/2021-12-18-english-paranoid"/>
   <updated>2021-12-18T00:00:00+00:00</updated>
   <id>http://kimi.im/english-paranoid</id>
   <content type="html">&lt;p&gt;
前几天读硬件安全模块文档（英文的）的时候，看到这句话：Depending on how
the secure hash is used, either can be correct; but because
cryptographers tend to be P3 people (Paid Professional Paranoids), the
latter is generally used for the strength of a well-designed secure
hash algorithm.&lt;sup&gt;&lt;a id=&quot;fnr.1&quot; class=&quot;footref&quot; href=&quot;#fn.1&quot; role=&quot;doc-backlink&quot;&gt;1&lt;/a&gt;&lt;/sup&gt;
&lt;/p&gt;

&lt;p&gt;
这里说密码学家通常都是P3人员，即：有偿职业偏执狂。挺有趣的称谓呀。
&lt;/p&gt;

&lt;p&gt;
对我来说，这里有一个生词：paranoid [ˈpærənɔɪd] 多疑的，妄想的；患偏执症的，患妄想症的；偏执狂，妄想症患者。
&lt;/p&gt;

&lt;p&gt;
似乎 &lt;code&gt;-oid&lt;/code&gt; 结尾的词，大多是细菌、生物、疾病相关，如：
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;schizoid 精神分裂的&lt;/li&gt;
&lt;li&gt;phylloid 叶状茎&lt;/li&gt;
&lt;li&gt;virusoid 拟病毒；核壳内尖病毒&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
也有数理化术语，如 centroid 质心。
&lt;/p&gt;

&lt;p&gt;
与 paranoid 相关的单词有两个，一个是 paranoia 即妄想症、偏执症，焦虑、恐惧导致的迫害妄想（persecutory belief）。另一个是 paranoiac 与
paranoid 意思相同，不过我感觉前者更偏名词，后者更偏形容词。
&lt;/p&gt;

&lt;p&gt;
例句：
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;the violent defensiveness of the paranoiac is directed against all
who challenge his power. 偏执狂对质疑他权力的人都抱有暴力防卫心理。&lt;/li&gt;
&lt;li&gt;Paranoia is an instinct or thought process that is believed to be heavily influenced by anxiety or fear, often to the point of delusion and irrationality.&lt;sup&gt;&lt;a id=&quot;fnr.2&quot; class=&quot;footref&quot; href=&quot;#fn.2&quot; role=&quot;doc-backlink&quot;&gt;2&lt;/a&gt;&lt;/sup&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
咱们再来看看妄想症患者的一些症状，请勿对号入座！
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;Be easily offended &lt;br /&gt;
容易激怒&lt;/li&gt;
&lt;li&gt;Find it difficult to trust others &lt;br /&gt;
不信任他人&lt;/li&gt;
&lt;li&gt;Not cope with any type of criticism &lt;br /&gt;
不接受任何批评&lt;/li&gt;
&lt;li&gt;Assign harmful meanings to other people&amp;rsquo;s remarks &lt;br /&gt;
对他人的评价做负面解读&lt;/li&gt;
&lt;li&gt;Be always on the defensive &lt;br /&gt;
总是有防御心理&lt;/li&gt;
&lt;li&gt;Be hostile, aggressive and argumentative &lt;br /&gt;
有敌意、好斗、好争辩&lt;/li&gt;
&lt;li&gt;Not be able to compromise &lt;br /&gt;
不易妥协&lt;/li&gt;
&lt;li&gt;Find it difficult, if not impossible, to &amp;rsquo;forgive and forget&amp;rsquo; &lt;br /&gt;
很难原谅别人&lt;/li&gt;
&lt;li&gt;Assume that people are talking ill of them behind their back &lt;br /&gt;
总觉得别人在背后说他坏话&lt;/li&gt;
&lt;li&gt;Be overly suspicious – for example, think that other people are lying or scheming to cheat them &lt;br /&gt;
过度怀疑，总觉得别人在骗他耍他&lt;/li&gt;
&lt;li&gt;Not be able to confide in anyone &lt;br /&gt;
不能与别人吐露心声&lt;/li&gt;
&lt;li&gt;Find relationships difficult &lt;br /&gt;
难建立亲密关系&lt;/li&gt;
&lt;li&gt;Consider the world to be a place of constant threat &lt;br /&gt;
认为世界是个充满威胁的地方&lt;/li&gt;
&lt;li&gt;Feel persecuted by the world at large &lt;br /&gt;
认为世界上到处是迫害&lt;/li&gt;
&lt;li&gt;Believe in unfounded &amp;rsquo;conspiracy theories&amp;rsquo; &lt;br /&gt;
相信杯弓蛇影的阴谋理论&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;footnotes&quot;&gt;
&lt;h2 class=&quot;footnotes&quot;&gt;Footnotes: &lt;/h2&gt;
&lt;div id=&quot;text-footnotes&quot;&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.1&quot; class=&quot;footnum&quot; href=&quot;#fnr.1&quot; role=&quot;doc-backlink&quot;&gt;1&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot; role=&quot;doc-footnote&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
A Pratical Guide to TPM 2.0
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.2&quot; class=&quot;footnum&quot; href=&quot;#fnr.2&quot; role=&quot;doc-backlink&quot;&gt;2&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot; role=&quot;doc-footnote&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;https://en.wikipedia.org/wiki/Paranoia&quot;&gt;https://en.wikipedia.org/wiki/Paranoia&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;


&lt;/div&gt;
&lt;/div&gt;
</content>
 </entry>
 
 <entry>
   <title>单词本：at risk of default</title>
   <link href="http://kimi.im/2021-12-18-english-at-risk-of-default"/>
   <updated>2021-12-18T00:00:00+00:00</updated>
   <id>http://kimi.im/english-at-risk-of-default</id>
   <content type="html">&lt;p&gt;
恒大数千亿美元的外债，新闻里读到 Evergrande warned that it was at risk
of default.
&lt;/p&gt;

&lt;p&gt;
非金融行业的，看到 default risk 就只能猜测了。原来 default risk 是违约风险的意思，也叫 default probability，就是借贷人无法偿还债务的“默认”的可能性。违约风险指企业、债券或个人发僧违约或倒闭的风险，即无支付能力。
&lt;/p&gt;

&lt;p&gt;
百度百科&lt;sup&gt;&lt;a id=&quot;fnr.1&quot; class=&quot;footref&quot; href=&quot;#fn.1&quot; role=&quot;doc-backlink&quot;&gt;1&lt;/a&gt;&lt;/sup&gt;说信用风险（Credit Risk），是指交易对方不履行到期债务的风险。信用风险又称违约风险，是指借款人、证券发行人或交易对方因种种原因，不愿或无力履行合同条件而构成违约，致使银行、投资者或交易对方遭受损失的可能性。由于结算方式的不同，场内衍生交易和场外衍生交易各自所涉的信用风险也有所不同。
&lt;/p&gt;

&lt;p&gt;
但是，似乎信用风险比违约风险范围要更大一些……
&lt;/p&gt;

&lt;p&gt;
Default risk在德语里是 Ausfallrisko，损失风险：Gefahr eines Verlustes,
weil Schuldner teilweise oder vollständig ihren Zahlungen nicht
nachkommen oder weil Sachwerte und Wertpapiere an Wert verlieren oder
wertlos werden.
&lt;/p&gt;

&lt;p&gt;
在进行投资的时候，企业债务偿还能力的一个很重要的指标就是自由现金流（free flow cash）。如果一个公司的现金流总是很低，则标明该公司有很高的违约风险（default risk）。
&lt;/p&gt;
&lt;div id=&quot;footnotes&quot;&gt;
&lt;h2 class=&quot;footnotes&quot;&gt;Footnotes: &lt;/h2&gt;
&lt;div id=&quot;text-footnotes&quot;&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.1&quot; class=&quot;footnum&quot; href=&quot;#fnr.1&quot; role=&quot;doc-backlink&quot;&gt;1&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot; role=&quot;doc-footnote&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;https://baike.baidu.com/item/%E4%BF%A1%E7%94%A8%E9%A3%8E%E9%99%A9/2467990&quot;&gt;https://baike.baidu.com/item/%E4%BF%A1%E7%94%A8%E9%A3%8E%E9%99%A9/2467990&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;


&lt;/div&gt;
&lt;/div&gt;
</content>
 </entry>
 
 <entry>
   <title>单词本：worth salt</title>
   <link href="http://kimi.im/2021-12-16-english-worth-salt"/>
   <updated>2021-12-16T00:00:00+00:00</updated>
   <id>http://kimi.im/english-worth-salt</id>
   <content type="html">&lt;p&gt;
不记得什么时候看到的：Any teanager worth his or her salt is addicted
to instant messaging.
&lt;/p&gt;

&lt;p&gt;
初一看，还真不知道什么意思。worth one&amp;rsquo;s salt，值他那点盐巴？事实上，
worth one&amp;rsquo;s salt 指的是称职的意思。前面那句话是说：任何称职的青少年都会沉迷于即时消息聊天。
&lt;/p&gt;

&lt;p&gt;
根据 wonderpolis 介绍，这个说法源自古罗马。当时盐比较稀少，卖的很贵，有钱人才吃得起盐。盐被成为 white gold。你吃几天不加盐的菜，就懂了。
&lt;/p&gt;

&lt;p&gt;
古罗马的战士可以领到一份特殊的工资，称为 salarium。战士们可以用
salarium 买盐吃。薪水 salary 就是从 salarium 演变来的。
&lt;/p&gt;

&lt;p&gt;
再看看一些例句：
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;We couldn&amp;rsquo;t find an assistant worth her salt. 我们找不到称职的助理。&lt;/li&gt;
&lt;li&gt;I&amp;rsquo;m confident enough to know I&amp;rsquo;m worth my salt around here. I make a
lot of money for this company. 我对此很自信：我是这里最称职的。我为公司挣很多钱。&lt;/li&gt;
&lt;/ul&gt;
</content>
 </entry>
 
 <entry>
   <title>直白的英语</title>
   <link href="http://kimi.im/2021-12-11-writing-in-plain-english"/>
   <updated>2021-12-11T00:00:00+00:00</updated>
   <id>http://kimi.im/writing-in-plain-english</id>
   <content type="html">&lt;p&gt;
最近看了一本小书《Plain English Handbook》。这本书介绍如何用直白易懂的英语写公司财报。虽然这书关注的是企业财务领域，但也能借鉴用于英语的日常写作。
&lt;/p&gt;

&lt;p&gt;
沃伦·巴菲特（Warren E. Buffett）写了序言：
&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;
When writing Berkshire Hathaway&amp;rsquo;s annual report, I pretend that I&amp;rsquo;m
talking to my sisters. I have no trouble picturing them: Though highly
intelligent, they are not experts in accounting or finance. They will
understand plain English, but jargon may puzzle them. My goal is
simply to give them the information I would wish them to supply me if
our positions were reversed. To succeed, I don&amp;rsquo;t need to be
Shakespeare; I must, though, have a sincere desire to inform.
&lt;/p&gt;

&lt;p&gt;
我在写伯克希尔·哈撒韦公司年报的时候，我假想自己在和我的妹妹们谈天。我很熟悉她们，所以很容易描述她们：虽然她们很聪明，但是她们不是会计财务方面的专家。她们能理解直白英语，但是她们对财务术语犯懵。我的目标就是向她们传达信息，然后相反地，她们也能将同样的信息传达给我。为此，我不需要成为莎士比亚。但是我必须有强烈真诚的愿望去传达信息。
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;
我大概介绍这个小册子的要点，具体内容请查看：&lt;a href=&quot;https://www.sec.gov/pdf/handbook.pdf&quot;&gt;https://www.sec.gov/pdf/handbook.pdf&lt;/a&gt;
&lt;/p&gt;

&lt;div id=&quot;outline-container-org498df9e&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;org498df9e&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;1.&lt;/span&gt; 了解你的读者&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-1&quot;&gt;
&lt;p&gt;
了解读者是写作最重要的一个环节，只有了解他们，才可以有针对性的让他们理解你的文章。
&lt;/p&gt;

&lt;p&gt;
通过各种途径，了解他们：
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;年龄、教育水平、工作经验等&lt;/li&gt;
&lt;li&gt;是否熟悉相关术语&lt;/li&gt;
&lt;li&gt;他们如何读一份资料？通读还是先看重点？&lt;/li&gt;
&lt;li&gt;他们读过以后，还会回头参考哪些章节？&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
为什么要了解读者呢？古希腊的亚里士多德说的很清楚：One must consider
also the audience&amp;#x2026;the reader is the judge.
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgc0e653d&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgc0e653d&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;2.&lt;/span&gt; 理解你要传达的信息&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-2&quot;&gt;
&lt;p&gt;
写就初稿后，要仔细阅读，问自己这些问题：
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;我的读者理解我的表达方式吗？&lt;/li&gt;
&lt;li&gt;我是否清楚传达了重要信息？&lt;/li&gt;
&lt;li&gt;是否有哪些信息遗漏了？&lt;/li&gt;
&lt;li&gt;有哪些信息重复冗余了？&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgb847b4d&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgb847b4d&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;3.&lt;/span&gt; 调整文章顺序&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-3&quot;&gt;
&lt;ol class=&quot;org-ol&quot;&gt;
&lt;li&gt;先进行概述，再进行详述&lt;/li&gt;
&lt;li&gt;用精简的语句设定层级章节标题&lt;/li&gt;
&lt;li&gt;把相关联的信息放在一起讨论&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgde8f562&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgde8f562&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;4.&lt;/span&gt; 用直白的英语描写&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-4&quot;&gt;
&lt;p&gt;
虽然这个小册子叫《Plain English Handbook》，但其实前面讲的是一些重要的基础。有了这些基础后，再用直白英语表达，就很完美了。
&lt;/p&gt;

&lt;p&gt;
那么Plain English要注意什么呢？从反面来说，要避免以下情况：
&lt;/p&gt;

&lt;ol class=&quot;org-ol&quot;&gt;
&lt;li&gt;长句子。太长的句子，让人阅读的时候，换气困难，需要瞻前顾后才能领会意思。所以尽量拆分为简单的短句子。&lt;/li&gt;
&lt;li&gt;被动动词。被动句经常省略主语，让人猜测。不如改成主动句和主动词。&lt;/li&gt;
&lt;li&gt;否定词。not able 改成 unable，not accept 改成 reject等。&lt;/li&gt;
&lt;li&gt;多余的词。in order to 可以改为 to，in the event that 改成 if，
subsequent to 改成 after。&lt;/li&gt;
&lt;li&gt;抽象词。比如 we made a determination&amp;#x2026; 可以改成 we determined&amp;#x2026;&lt;/li&gt;
&lt;li&gt;不常用的术语和暗语。&lt;/li&gt;
&lt;li&gt;不必要的细节&lt;/li&gt;
&lt;li&gt;最后，影响阅读的文档格式和排版。比如英语1.6倍行距，中文1.3倍行距。英语使用衬线字体等。&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
&lt;/div&gt;
</content>
 </entry>
 
 <entry>
   <title>2021年工作状态</title>
   <link href="http://kimi.im/2021-12-04-new-job-learning-continue"/>
   <updated>2021-12-04T00:00:00+00:00</updated>
   <id>http://kimi.im/new-job-learning-continue</id>
   <content type="html">&lt;p&gt;
今年4月，换了个工作。从大型民企的技术总监，回到大型跨国企业做技术架构师。操心的琐事少了不少，工作内容更加专注。说说这份工作的好处吧：
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;学习资源丰富。可以查阅大量的最新学术论文，丰富的内外部培训资源，甚至可以给家人注册英语学习帐号。&lt;/li&gt;
&lt;li&gt;最新的国际标准。因为担任架构师，接触到最新的国际标准，有的还在制定，我也参与了标准评审工作。公司行业排名第一，积极参与行业标准制定，早期探索实现行业标准，更有技术方向主导权。&lt;/li&gt;
&lt;li&gt;灵活的工作时间。我起床比较早，所以早1个小时到公司，早一个小时下班。这样路上来回就可以少堵车半个小时。通勤省了很多时间。在线会议比较多的话，就在家办公。&lt;/li&gt;
&lt;li&gt;全球合作。因为公司架构师团队分布在德国、瑞典、印度。可以不断练习英语。顺便的，我也继续学德语和瑞典语。因为高中时候德语语音基础打得好，德国同事都认可我的德语发音很标准。瑞典语和德语很神似，还比德语简单。会德语的话，差不多也能猜出瑞典语的意思了。&lt;/li&gt;
&lt;li&gt;丰富的公司活动。今年有三次旅游活动。还有黑客松大赛。工作之余，参加了黑客松大赛，提交了一个工业区块链方案，成功入围决赛。带着五位90后小朋友，待在会议室里，一起写代码，准备demo演示，还是挺好玩的。&lt;/li&gt;
&lt;li&gt;完善的业务支撑。技术研究的过程中，有了不少好想法，可以通过公司专利律师的帮助，提交国际专利。专利发布还能拿到5k的奖金。所以，我很有动力多提交些专利啊。&lt;/li&gt;
&lt;li&gt;工作内容有挑战。因为参与系统的前期设计工作。每天阅读大量的标准、论文和行业资讯，然后组织材料和全球各地的专家一起讨论，可以得到很及时的反馈。&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;
接下来，讲讲瑞典语的名词部分吧。德语里名词有阳性、阴性和中性，乘以1、2、
3、4格的变换，再乘以各种时态的动词词尾变化，就产生了庞大的变换表格。相对而言，瑞典语的名词就简单多了，只有 utrum 和 neutum 两种词性。而且80%
的名词都是utrum，只有一小部分是neutum。一个utrum用en表示，一个neutum用
ett表示。比如：
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;en bil, en penna, en stol, en dator, en telefon, en polis&lt;/li&gt;
&lt;li&gt;ett hus, ett träd, ett barn, ett äpple, ett problem, ett intresse&lt;/li&gt;
&lt;/ul&gt;
</content>
 </entry>
 
 <entry>
   <title>s-exp operations in emacs</title>
   <link href="http://kimi.im/2021-11-27-sexp-operations-in-emacs"/>
   <updated>2021-11-27T00:00:00+00:00</updated>
   <id>http://kimi.im/sexp-operations-in-emacs</id>
   <content type="html">&lt;p&gt;
Structural editing is very useful for lisp dialect languages, such as
emacs-lisp, scheme, clojure and so on. Vanilla emacs ships Lisp
editing commands for Emacs(lisp.el) and &lt;a href=&quot;https://github.com/Fuco1/smartparens&quot;&gt;smartparens&lt;/a&gt; provides a minor
mode for Emacs that deals with parens pairs and tries to be smart
about it. If we combine the power of lisp.el and smartparens, we will
gain super productivity.
&lt;/p&gt;

&lt;p&gt;
Let&amp;rsquo;s demo these keys and functions with code examples.
&lt;/p&gt;

&lt;div id=&quot;outline-container-org8584946&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;org8584946&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;1.&lt;/span&gt; Navigation&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-1&quot;&gt;
&lt;p&gt;
&lt;code&gt;down-lisp(C-M-d)&lt;/code&gt; will go down from ❶ to ❷ ❸ ❹ till ❺, and stop at ❺,
because there is no inner place to go.
&lt;/p&gt;

&lt;p&gt;
&lt;code&gt;sp-down-sexp&lt;/code&gt; from smartparens achieves the same thing as &lt;code&gt;lisp-down&lt;/code&gt;.
&lt;/p&gt;

&lt;pre class=&quot;example&quot; id=&quot;org752cdae&quot;&gt;
❶(❷deftest size-test
  (❸let [❹ndm (❺nd/new-base-manager)]
    (is (= 0 (nd/size (nd/arange ndm 0 0))))
    (is (= 100
           (nd/size (nd/arange ndm 0 100))))))
&lt;/pre&gt;

&lt;p&gt;
&lt;code&gt;backward-up-list(C-M-u)&lt;/code&gt; will move the point backward, in from of each
parenthesis. If the point starts from ❺, wherever inside the internal
expression, it will move to ❹ ❸ ❷ ❶, respectively on each press of
&lt;code&gt;C-M-u&lt;/code&gt;.
&lt;/p&gt;

&lt;pre class=&quot;example&quot; id=&quot;org3b9f90a&quot;&gt;
❶(deftest size-test
  ❷(let ❸[ndm ❹(nd/new-ba❺se-manager)]
    (is (= 0 (nd/size (nd/arange ndm 0 0))))
    (is (= 100
           (nd/size (nd/arange ndm 0 100))))))
&lt;/pre&gt;

&lt;p&gt;
&lt;code&gt;up-list&lt;/code&gt; is actually &lt;code&gt;forward-up-list&lt;/code&gt;, if compares to &lt;code&gt;backward-up-list~&lt;/code&gt;,
it will let the point move forward out of one level of parentheses,
from ❶, wherever inside the internal expression, to ❷ ❸ ❹ till ❺. This
function is not bound to any keys as default.
&lt;/p&gt;

&lt;pre class=&quot;example&quot; id=&quot;orgd93e266&quot;&gt;
(deftest size-test
  (let [ndm (nd/new-ba❶se-manager)❷]❸
    (is (= 0 (nd/size (nd/arange ndm 0 0))))
    (is (= 100
           (nd/size (nd/arange ndm 0 100)))))❹)❺
&lt;/pre&gt;

&lt;p&gt;
&lt;code&gt;forward-sexp (C-M-f)&lt;/code&gt; will move forward across one balanced expression (sexp).
&lt;/p&gt;

&lt;p&gt;
Continue press &lt;code&gt;C-M-f&lt;/code&gt;, will move point from ❶ to ❷ and ❸, and stop at
❸. While the smartparens version &lt;code&gt;sp-forward-sexp&lt;/code&gt;, will jump one level
out from ❸.
&lt;/p&gt;

&lt;pre class=&quot;example&quot; id=&quot;org0369ff2&quot;&gt;
(deftest size-test
  (let [ndm (nd/new-base-manager)]
    ❶(is (= 0 (nd/size (nd/arange ndm 0 0))))❷
    (is (= 100
           (nd/size (nd/arange ndm 0 100))))❸))
&lt;/pre&gt;

&lt;p&gt;
&lt;code&gt;backward-sexp (C-M-b)&lt;/code&gt; move backward across one balanced expression (sexp).
&lt;/p&gt;

&lt;p&gt;
The point will move from ❶ to ❺, and stop here, because there is no
backward sexp at the same level.
&lt;/p&gt;

&lt;p&gt;
&lt;code&gt;sp-backward-sexp&lt;/code&gt; will jump one level up.
&lt;/p&gt;

&lt;pre class=&quot;example&quot; id=&quot;orgfe945ea&quot;&gt;
(deftest size-test
 (❺let ❹[ndm (nd/new-base-manager)]
   ❸(is (= 0 (nd/size (nd/arange ndm 0 0))))
   ❷(is (= 100
           (nd/size (nd/arange ndm 0 100))))❶))
&lt;/pre&gt;

&lt;p&gt;
&lt;code&gt;beginning-of-defun (C-M-a)&lt;/code&gt; move backward to the beginning of a
defun. Actually, it moves to the beginning of whatever a top level
parenthesis.
&lt;/p&gt;

&lt;p&gt;
&lt;code&gt;end-of-defun (C-M-e)&lt;/code&gt; move forward to next end of defun, at the next
line of last &lt;code&gt;)&lt;/code&gt; of the defun.
&lt;/p&gt;

&lt;p&gt;
From anywhere between ❶ and ❷, &lt;code&gt;C-M-a&lt;/code&gt; will move the point to ❶ and
&lt;code&gt;C-M-e&lt;/code&gt; moves it to ❷:
&lt;/p&gt;

&lt;pre class=&quot;example&quot; id=&quot;org26a6296&quot;&gt;
❶(deftest size-test
  (let [ndm (nd/new-base-manager)]
    (is (= 0 (nd/size (nd/arange ndm 0 0))))
    (is (= 100
           (nd/size (nd/arange ndm 0 100))))))
❷
&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-org228aa74&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;org228aa74&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;2.&lt;/span&gt; Mark&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-2&quot;&gt;
&lt;p&gt;
&lt;code&gt;mark-sexp (C-M-SPC)&lt;/code&gt; can be used to mark next sexp and more if
repeatedly pressed.
&lt;/p&gt;

&lt;p&gt;
If the cursor is at ❶, press &lt;code&gt;C-M-SPC&lt;/code&gt; once will mark the region from ❶
to ❷, press twice, will mark the region from ❶ to ❸.
&lt;/p&gt;

&lt;p&gt;
&lt;code&gt;sp-mark-sexp&lt;/code&gt; works the same as this function.
&lt;/p&gt;

&lt;pre class=&quot;example&quot; id=&quot;org915f807&quot;&gt;
(deftest size-test
  (let [ndm (nd/new-base-manager)]
   ❶(is (= 0 (nd/size (nd/arange ndm 0 0))))❷
    (is (= 100
           (nd/size (nd/arange ndm 0 100))))❸))
&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgd9925b9&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgd9925b9&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;3.&lt;/span&gt; Kill&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-3&quot;&gt;
&lt;p&gt;
&lt;code&gt;kill-sexp (C-M-k)&lt;/code&gt;, Kill the sexp (balanced expression) following
point. When the cursor is at ❶:
&lt;/p&gt;

&lt;pre class=&quot;example&quot; id=&quot;org4330a5a&quot;&gt;
(deftest size-test
  (let [ndm (nd/new-base-manager)]
   (is (= ❶(+ 0 0) (nd/size (nd/arange ndm 0 0))))
    (is (= 100
           (nd/size (nd/arange ndm 0 100))))))
&lt;/pre&gt;

&lt;p&gt;
&lt;code&gt;C-M-k&lt;/code&gt; will remain the code as below:
&lt;/p&gt;

&lt;pre class=&quot;example&quot; id=&quot;org6d461ec&quot;&gt;
(deftest size-test
  (let [ndm (nd/new-base-manager)]
   (is (= ❶ (nd/size (nd/arange ndm 0 0))))
    (is (= 100
           (nd/size (nd/arange ndm 0 100))))))
&lt;/pre&gt;

&lt;p&gt;
&lt;code&gt;sp-kill-sexp(M-k)&lt;/code&gt; does the same operations as &lt;code&gt;kill-sexp&lt;/code&gt;.
&lt;/p&gt;

&lt;p&gt;
But &lt;code&gt;sp-kill-hybrid-sexp(C-k)&lt;/code&gt; will kill all expresses after point till
end of the list:
&lt;/p&gt;

&lt;pre class=&quot;example&quot; id=&quot;org5f23ad6&quot;&gt;
(deftest size-test
  (let [ndm (nd/new-base-manager)]
   (is (= ❶))
    (is (= 100
           (nd/size (nd/arange ndm 0 100))))))
&lt;/pre&gt;

&lt;p&gt;
&lt;code&gt;sp-backward-kill-sexp&lt;/code&gt; and &lt;code&gt;backward-kill-sexp(ESC C-&amp;lt;backspace&amp;gt;)&lt;/code&gt; kills
the sexp (balanced expression) preceding point. &lt;code&gt;(+ 0 0)&lt;/code&gt; is killed when
press &lt;code&gt;ESC C-&amp;lt;backspace&amp;gt;&lt;/code&gt;:
&lt;/p&gt;

&lt;pre class=&quot;example&quot; id=&quot;org1afd291&quot;&gt;
(deftest size-test
  (let [ndm (nd/new-base-manager)]
    (is (= (+ 0 0)❶ (nd/size (nd/arange ndm 0 0))))
    (is (= 100
           (nd/size (nd/arange ndm 0 100))))))
&lt;/pre&gt;

&lt;p&gt;
&lt;code&gt;sp-backward-copy-sexp(C-M-&amp;lt;backspace&amp;gt;)&lt;/code&gt;, will copy previous balanced
expression. For example, this command will copy &lt;code&gt;(+ 0 0)&lt;/code&gt; to kill ring.
&lt;/p&gt;

&lt;pre class=&quot;example&quot; id=&quot;org10da2fc&quot;&gt;
(deftest size-test
  (let [ndm (nd/new-base-manager)]
    (is (= (+ 0 0)❶ (nd/size (nd/arange ndm 0 0))))
    (is (= 100
           (nd/size (nd/arange ndm 0 100))))))
&lt;/pre&gt;

&lt;p&gt;
&lt;code&gt;sp-copy-sexp(C-M-w)&lt;/code&gt; does the same operation forwardly comparing to
&lt;code&gt;sp-backward-copy-sexp&lt;/code&gt;. &lt;code&gt;(nd/size (nd/arange ndm 0 0))&lt;/code&gt; is copied in
below example.
&lt;/p&gt;

&lt;pre class=&quot;example&quot; id=&quot;org13f34f5&quot;&gt;
(deftest size-test
  (let [ndm (nd/new-base-manager)]
    (is (= (+ 0 0)❶ (nd/size (nd/arange ndm 0 0))))
    (is (= 100
           (nd/size (nd/arange ndm 0 100))))))
&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-org9b938b6&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;org9b938b6&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;4.&lt;/span&gt; slurp and barf&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-4&quot;&gt;
&lt;p&gt;
&lt;code&gt;sp-forward-slurp-sexp(C-&amp;lt;right&amp;gt;)&lt;/code&gt; adds sexp following the current list
in it by moving the closing delimiter. When the point is at ❶:
&lt;/p&gt;

&lt;pre class=&quot;example&quot; id=&quot;org9fa4630&quot;&gt;
(deftest size-test
  (let [ndm (nd/new-base-manager)]
    (is (= (+❶) 0 0 (nd/size (nd/arange ndm 0 0))))
    (is (= 100
           (nd/size (nd/arange ndm 0 100))))))
&lt;/pre&gt;

&lt;p&gt;
&lt;code&gt;C-&amp;lt;right&amp;gt;&lt;/code&gt; will slurp the next &lt;code&gt;0&lt;/code&gt; in the parenthesis. The new position
of the right parenthesis is at ❷.
&lt;/p&gt;

&lt;pre class=&quot;example&quot; id=&quot;org4ab19e5&quot;&gt;
(deftest size-test
  (let [ndm (nd/new-base-manager)]
    (is (= (+❶ 0❷) 0 (nd/size (nd/arange ndm 0 0))))
    (is (= 100
           (nd/size (nd/arange ndm 0 100))))))
&lt;/pre&gt;

&lt;p&gt;
Continue press &lt;code&gt;C-&amp;lt;right&amp;gt;&lt;/code&gt;, twice, the next &lt;code&gt;0&lt;/code&gt; and &lt;code&gt;()&lt;/code&gt; will be slurped:
&lt;/p&gt;

&lt;pre class=&quot;example&quot; id=&quot;org479ddbe&quot;&gt;
(deftest size-test
  (let [ndm (nd/new-base-manager)]
    (is (= (+❶ 0❷ 0❸ (nd/size (nd/arange ndm 0 0))❹)))
    (is (= 100
           (nd/size (nd/arange ndm 0 100))))))
&lt;/pre&gt;

&lt;p&gt;
Press &lt;code&gt;C-&amp;lt;right&amp;gt;&lt;/code&gt; again, it will slurp next &lt;code&gt;(is ..)&lt;/code&gt; sexp, and put the
right parenthesis to ❺:
&lt;/p&gt;

&lt;pre class=&quot;example&quot; id=&quot;org3dc31cf&quot;&gt;
(deftest size-test
  (let [ndm (nd/new-base-manager)]
    (is (= (+❶ 0 0 (nd/size (nd/arange ndm 0 0))
              (is (= 100
                     (nd/size (nd/arange ndm 0 100))))❺)))))

&lt;/pre&gt;

&lt;p&gt;
&lt;code&gt;sp-forward-barf-sexp(C-&amp;lt;left&amp;gt;)&lt;/code&gt; does the opposite operation that the
delimiter will move one level inside. When the point is at ❺,
continuously press &lt;code&gt;C-&amp;lt;left&amp;gt;&lt;/code&gt; will move the point from ❶ to ❺:
&lt;/p&gt;

&lt;pre class=&quot;example&quot; id=&quot;orgbce9dea&quot;&gt;
(deftest size-test
  (let [ndm (nd/new-base-manager)]
    (is (= (+❺ 0❹ 0❸ (nd/size (nd/arange ndm 0 0))❷
              (is (= 100
                     (nd/size (nd/arange ndm 0 100))))❶)))))
&lt;/pre&gt;

&lt;p&gt;
&lt;code&gt;sp-backward-slurp-sexp(M-&amp;lt;left&amp;gt;)&lt;/code&gt; will slurp sexp from left side. When
the point is at ❶:
&lt;/p&gt;

&lt;pre class=&quot;example&quot; id=&quot;orge4f26d3&quot;&gt;
(deftest size-test
  (let [ndm (nd/new-base-manager)]
    (is (= (+ 0❶ 0) (nd/size (nd/arange ndm 0 0))
           (is (= 100
                  (nd/size (nd/arange ndm 0 100))))))))
&lt;/pre&gt;

&lt;p&gt;
&lt;code&gt;M-&amp;lt;left&amp;gt;&lt;/code&gt; will slurp &lt;code&gt;=&lt;/code&gt; inside left parenthesis:
&lt;/p&gt;

&lt;pre class=&quot;example&quot; id=&quot;orgbb9c16f&quot;&gt;
(deftest size-test
  (let [ndm (nd/new-base-manager)]
    (is ((= + 0❶ 0) (nd/size (nd/arange ndm 0 0))
           (is (= 100
                  (nd/size (nd/arange ndm 0 100))))))))
&lt;/pre&gt;

&lt;p&gt;
Next, it will slurp &lt;code&gt;is&lt;/code&gt;:
&lt;/p&gt;

&lt;pre class=&quot;example&quot; id=&quot;org7d28b3f&quot;&gt;
(deftest size-test
  (let [ndm (nd/new-base-manager)]
    ((is (= + 0❶ 0) (nd/size (nd/arange ndm 0 0))
           (is (= 100
                  (nd/size (nd/arange ndm 0 100))))))))
&lt;/pre&gt;

&lt;p&gt;
and &lt;code&gt;is&lt;/code&gt; again:
&lt;/p&gt;

&lt;pre class=&quot;example&quot; id=&quot;orgcd72412&quot;&gt;
(deftest size-test
  (let [ndm (nd/new-base-manager)]
    (((is = + 0❶ 0) (nd/size (nd/arange ndm 0 0))
           (is (= 100
                  (nd/size (nd/arange ndm 0 100))))))))
&lt;/pre&gt;

&lt;p&gt;
That means the backward slurp will always slurp the nearest sexp, if
there is no sexp in the inner parenthesis, it will slurp outer sexp.
&lt;/p&gt;

&lt;p&gt;
&lt;code&gt;sp-backward-barf-sexp(M-&amp;lt;right&amp;gt;)&lt;/code&gt; is the opposite operation to
&lt;code&gt;sp-backward-slurp-sexp&lt;/code&gt;.
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-org6c72711&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;org6c72711&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;5.&lt;/span&gt; wrap and unwrap&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-5&quot;&gt;
&lt;p&gt;
&lt;code&gt;sp-wrap-arround&lt;/code&gt;, &lt;code&gt;sp-wrap-curly&lt;/code&gt; and &lt;code&gt;sp-wrap-square&lt;/code&gt; wraps the region
with &lt;code&gt;()&lt;/code&gt;, &lt;code&gt;{}&lt;/code&gt; or &lt;code&gt;[]&lt;/code&gt;.
&lt;/p&gt;

&lt;p&gt;
&lt;code&gt;sp-unwrap-sexp&lt;/code&gt; unwrap next sexp, while &lt;code&gt;sp-backward-unwrap-sexp&lt;/code&gt; unwraps
previous sexp.
&lt;/p&gt;

&lt;pre class=&quot;example&quot; id=&quot;org1574c56&quot;&gt;
(deftest size-test
  (let [ndm (nd/new-base-manager)]
    (is (= (+ 0 0) ❶ (nd/size (nd/arange ndm 0 0))
           (is (= 100
                  (nd/size (nd/arange ndm 0 100))))))))
&lt;/pre&gt;

&lt;p&gt;
If point is at ❶, &lt;code&gt;sp-unwrap-sexp&lt;/code&gt; will remove parenthesis of next expression.
&lt;/p&gt;

&lt;pre class=&quot;example&quot; id=&quot;org2423d9c&quot;&gt;
❿(deftest size-test
  ❾(let [ndm (nd/new-base-manager)]
    ❽(is ❼(= (+ 0 0) ❶ nd/size ❷(nd/arange ndm 0 0)
           ❸(is ❹(= 100
                  ❺(nd/size ❻(nd/arange ndm 0 100))))))))
&lt;/pre&gt;

&lt;p&gt;
If continuously invoke it, emacs will remove parenthesis at ❷, ❸, ❹, ❺
and ❻. And it will continue to remove outer parenthesis ❼, ❽, ❾, and
❿.
&lt;/p&gt;

&lt;p&gt;
&lt;code&gt;sp-backward-unwrap-sexp&lt;/code&gt; will remove parenthesis of previous expression
&lt;code&gt;(+ 0 0)&lt;/code&gt;.
&lt;/p&gt;

&lt;pre class=&quot;example&quot; id=&quot;org4b551bf&quot;&gt;
❼(deftest size-test
  ❻(let ❹[ndm ❺(nd/new-base-manager)]
    ❸(is ❷(= + 0 0 ❶ (nd/size (nd/arange ndm 0 0))
           (is (= 100
                  (nd/size (nd/arange ndm 0 100))))))))
&lt;/pre&gt;

&lt;p&gt;
If continuously invoked, if will remove ❷, ❸, ❹, ❺, ❻ till ❼. Remind
the order of ❹ and ❺, because ❹ is the previous parenthesis when ❸ is
removed and ❺ is the previous parenthesis, when ❹ is removed.
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-org72a77a6&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;org72a77a6&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;6.&lt;/span&gt; splice&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-6&quot;&gt;
&lt;p&gt;
&lt;code&gt;sp-splice-sexp&lt;/code&gt; will remove the outer parenthesis, and splice the sexp
from the list. When point is at ❶, this command will remove
parenthesis pair of ❷.
&lt;/p&gt;

&lt;pre class=&quot;example&quot; id=&quot;org5e594cb&quot;&gt;
(deftest size-test
  (let [ndm (nd/new-base-manager)]
    (is ❷(= (+ 0 0) ❶ (nd/size (nd/arange ndm 0 0))
           (is (= 100
                  (nd/size (nd/arange ndm 0 100))))))))
&lt;/pre&gt;

&lt;p&gt;
&lt;code&gt;sp-splice-sexp-killing-around&lt;/code&gt; will keep next expression &lt;code&gt;(nd/size
(nd/arange ndm 0 0))&lt;/code&gt; and kill all other expressions and spaces inside
current list.
&lt;/p&gt;

&lt;pre class=&quot;example&quot; id=&quot;org05d4fdb&quot;&gt;
(deftest size-test
  (let [ndm (nd/new-base-manager)]
    (is ❶(nd/size (nd/arange ndm 0 0)))))
&lt;/pre&gt;

&lt;p&gt;
&lt;code&gt;sp-splice-sexp-killing-forward(M-&amp;lt;down&amp;gt;)&lt;/code&gt; will remove parenthesis and
kill following expressions:
&lt;/p&gt;

&lt;pre class=&quot;example&quot; id=&quot;orgd44fb77&quot;&gt;
(deftest size-test
  (let [ndm (nd/new-base-manager)]
    (is = (+ 0 0)❶)))
&lt;/pre&gt;


&lt;p&gt;
&lt;code&gt;sp-splice-sexp-killing-backward(M-&amp;lt;up&amp;gt;)&lt;/code&gt; will remove parenthesis and
kill preceeding expressions:
&lt;/p&gt;

&lt;pre class=&quot;example&quot; id=&quot;orgbe231bd&quot;&gt;
(deftest size-test
  (let [ndm (nd/new-base-manager)]
    (is ❶(nd/size (nd/arange ndm 0 0))
        (is (= 100
               (nd/size (nd/arange ndm 0 100)))))))
&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-org7e48fc5&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;org7e48fc5&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;7.&lt;/span&gt; split and join&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-7&quot;&gt;
&lt;p&gt;
&lt;code&gt;sp-split-sexp&lt;/code&gt; will add two parenthesis before and after &lt;code&gt;) (&lt;/code&gt;:
&lt;/p&gt;

&lt;pre class=&quot;example&quot; id=&quot;org3565079&quot;&gt;
(deftest size-test
  (let [ndm (nd/new-base-manager)]
    (is (= (+ 0 0)) ❶ ((nd/size (nd/arange ndm 0 0))
           (is (= 100
                  (nd/size (nd/arange ndm 0 100))))))))
&lt;/pre&gt;

&lt;p&gt;
&lt;code&gt;sp-join-sexp&lt;/code&gt; is the reverse operation of &lt;code&gt;sp-split-sexp&lt;/code&gt;.
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-org20828dd&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;org20828dd&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;8.&lt;/span&gt; convolute&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-8&quot;&gt;
&lt;p&gt;
&lt;code&gt;sp-convolut-sexp&lt;/code&gt; will put proceeding sexp outside of outer proceeding
sexp:
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-clojure&quot;&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;deftest&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;size-test&lt;/span&gt;
  &lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;let&lt;/span&gt; &lt;span style=&quot;color: #909183;&quot;&gt;[&lt;/span&gt;ndm &lt;span style=&quot;color: #709870;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;nd&lt;/span&gt;/new-base-manager&lt;span style=&quot;color: #709870;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;]&lt;/span&gt;
   &amp;#10102;&lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;is&lt;/span&gt; &lt;span style=&quot;color: #709870;&quot;&gt;(&lt;/span&gt;= 0 &lt;span style=&quot;color: #907373;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;nd&lt;/span&gt;/size &lt;span style=&quot;color: #6276ba;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;nd&lt;/span&gt;/arange ndm 0 0&lt;span style=&quot;color: #6276ba;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #907373;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #709870;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt;
    &lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;is&lt;/span&gt; &lt;span style=&quot;color: #709870;&quot;&gt;(&lt;/span&gt;= 100
           &lt;span style=&quot;color: #907373;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;nd&lt;/span&gt;/size &lt;span style=&quot;color: #6276ba;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;nd&lt;/span&gt;/arange ndm 0 100&lt;span style=&quot;color: #6276ba;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #907373;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #709870;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;pre class=&quot;example&quot; id=&quot;orga94e28b&quot;&gt;
(let [ndm (nd/new-base-manager)]
  (deftest size-test
   ❶(is (= (+ 0 0)  (nd/size (nd/arange ndm 0 0))))
    (is (= 100
           (nd/size (nd/arange ndm 0 100))))))
&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-org8fd5fe1&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;org8fd5fe1&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;9.&lt;/span&gt; Summary&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-9&quot;&gt;
&lt;table border=&quot;2&quot; cellspacing=&quot;0&quot; cellpadding=&quot;6&quot; rules=&quot;groups&quot; frame=&quot;hsides&quot;&gt;


&lt;colgroup&gt;
&lt;col  class=&quot;org-left&quot; /&gt;

&lt;col  class=&quot;org-left&quot; /&gt;

&lt;col  class=&quot;org-left&quot; /&gt;
&lt;/colgroup&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th scope=&quot;col&quot; class=&quot;org-left&quot;&gt;Key&lt;/th&gt;
&lt;th scope=&quot;col&quot; class=&quot;org-left&quot;&gt;Map&lt;/th&gt;
&lt;th scope=&quot;col&quot; class=&quot;org-left&quot;&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class=&quot;org-left&quot;&gt;Navigation&lt;/td&gt;
&lt;td class=&quot;org-left&quot;&gt;&amp;#xa0;&lt;/td&gt;
&lt;td class=&quot;org-left&quot;&gt;&amp;#xa0;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class=&quot;org-left&quot;&gt;&lt;code&gt;C-M-d&lt;/code&gt;&lt;/td&gt;
&lt;td class=&quot;org-left&quot;&gt;&lt;code&gt;down-list&lt;/code&gt;&lt;/td&gt;
&lt;td class=&quot;org-left&quot;&gt;Move forward down one level of parentheses.&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td class=&quot;org-left&quot;&gt;&lt;code&gt;C-M-u&lt;/code&gt;&lt;/td&gt;
&lt;td class=&quot;org-left&quot;&gt;&lt;code&gt;backward-up-list&lt;/code&gt;&lt;/td&gt;
&lt;td class=&quot;org-left&quot;&gt;Move backward out of one level of parentheses.&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td class=&quot;org-left&quot;&gt;&lt;code&gt;C-M-f&lt;/code&gt;&lt;/td&gt;
&lt;td class=&quot;org-left&quot;&gt;&lt;code&gt;forward-sexp&lt;/code&gt;&lt;/td&gt;
&lt;td class=&quot;org-left&quot;&gt;Move forward across one balanced expression (sexp).&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td class=&quot;org-left&quot;&gt;&amp;#xa0;&lt;/td&gt;
&lt;td class=&quot;org-left&quot;&gt;&lt;code&gt;sp-forward-sexp&lt;/code&gt;&lt;/td&gt;
&lt;td class=&quot;org-left&quot;&gt;Same as above, will forward up.&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td class=&quot;org-left&quot;&gt;&lt;code&gt;C-M-b&lt;/code&gt;&lt;/td&gt;
&lt;td class=&quot;org-left&quot;&gt;&lt;code&gt;backward-sexp&lt;/code&gt;&lt;/td&gt;
&lt;td class=&quot;org-left&quot;&gt;Move backward across one balanced expression (sexp).&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td class=&quot;org-left&quot;&gt;&amp;#xa0;&lt;/td&gt;
&lt;td class=&quot;org-left&quot;&gt;&lt;code&gt;sp-backward-sexp&lt;/code&gt;&lt;/td&gt;
&lt;td class=&quot;org-left&quot;&gt;Same as above, will backward up.&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td class=&quot;org-left&quot;&gt;&lt;code&gt;C-M-n&lt;/code&gt;&lt;/td&gt;
&lt;td class=&quot;org-left&quot;&gt;&lt;code&gt;forward-list&lt;/code&gt;&lt;/td&gt;
&lt;td class=&quot;org-left&quot;&gt;Move forward across one balanced group of parentheses.&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td class=&quot;org-left&quot;&gt;&lt;code&gt;C-M-p&lt;/code&gt;&lt;/td&gt;
&lt;td class=&quot;org-left&quot;&gt;&lt;code&gt;backward-list&lt;/code&gt;&lt;/td&gt;
&lt;td class=&quot;org-left&quot;&gt;Move backward across one balanced group of parentheses.&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td class=&quot;org-left&quot;&gt;&lt;code&gt;C-M-a&lt;/code&gt;&lt;/td&gt;
&lt;td class=&quot;org-left&quot;&gt;&lt;code&gt;beginning-of-defun&lt;/code&gt;&lt;/td&gt;
&lt;td class=&quot;org-left&quot;&gt;Move backward to the beginning of a defun.&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td class=&quot;org-left&quot;&gt;&lt;code&gt;C-M-e&lt;/code&gt;&lt;/td&gt;
&lt;td class=&quot;org-left&quot;&gt;&lt;code&gt;end-of-defun&lt;/code&gt;&lt;/td&gt;
&lt;td class=&quot;org-left&quot;&gt;Move forward to next end of defun.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class=&quot;org-left&quot;&gt;Kill and Yank&lt;/td&gt;
&lt;td class=&quot;org-left&quot;&gt;&amp;#xa0;&lt;/td&gt;
&lt;td class=&quot;org-left&quot;&gt;&amp;#xa0;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class=&quot;org-left&quot;&gt;&lt;code&gt;C-M-k&lt;/code&gt;&lt;/td&gt;
&lt;td class=&quot;org-left&quot;&gt;&lt;code&gt;kill-sexp&lt;/code&gt;&lt;/td&gt;
&lt;td class=&quot;org-left&quot;&gt;Kill the sexp (balanced expression) following point.&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td class=&quot;org-left&quot;&gt;&lt;code&gt;M-k&lt;/code&gt;&lt;/td&gt;
&lt;td class=&quot;org-left&quot;&gt;&lt;code&gt;sp-kill-sexp&lt;/code&gt;&lt;/td&gt;
&lt;td class=&quot;org-left&quot;&gt;Kill the balanced expression following point.&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td class=&quot;org-left&quot;&gt;&lt;code&gt;C-k&lt;/code&gt;&lt;/td&gt;
&lt;td class=&quot;org-left&quot;&gt;&lt;code&gt;sp-kill-hybrid-sexp&lt;/code&gt;&lt;/td&gt;
&lt;td class=&quot;org-left&quot;&gt;Kill a line as if with ‘kill-line’, but respecting delimiters.&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td class=&quot;org-left&quot;&gt;&lt;code&gt;ESC C-&amp;lt;backspace&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td class=&quot;org-left&quot;&gt;&lt;code&gt;backward-kill-sexp&lt;/code&gt;&lt;/td&gt;
&lt;td class=&quot;org-left&quot;&gt;Kill the sexp (balanced expression) preceding point.&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td class=&quot;org-left&quot;&gt;&amp;#xa0;&lt;/td&gt;
&lt;td class=&quot;org-left&quot;&gt;&lt;code&gt;sp-backward-kill-sexp&lt;/code&gt;&lt;/td&gt;
&lt;td class=&quot;org-left&quot;&gt;Kill the balanced expression preceding point.&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td class=&quot;org-left&quot;&gt;&lt;code&gt;C-M-&amp;lt;backspace&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td class=&quot;org-left&quot;&gt;&lt;code&gt;sp-backward-copy-sexp&lt;/code&gt;&lt;/td&gt;
&lt;td class=&quot;org-left&quot;&gt;Copy the previous ARG expressions to the kill-ring.&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td class=&quot;org-left&quot;&gt;&lt;code&gt;C-M-w&lt;/code&gt;&lt;/td&gt;
&lt;td class=&quot;org-left&quot;&gt;&lt;code&gt;sp-copy-sexp&lt;/code&gt;&lt;/td&gt;
&lt;td class=&quot;org-left&quot;&gt;Copy the following ARG expressions to the kill-ring.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class=&quot;org-left&quot;&gt;Slurp and Barf&lt;/td&gt;
&lt;td class=&quot;org-left&quot;&gt;&amp;#xa0;&lt;/td&gt;
&lt;td class=&quot;org-left&quot;&gt;&amp;#xa0;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class=&quot;org-left&quot;&gt;&lt;code&gt;C-&amp;lt;right&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td class=&quot;org-left&quot;&gt;&lt;code&gt;sp-forward-slurp-sexp&lt;/code&gt;&lt;/td&gt;
&lt;td class=&quot;org-left&quot;&gt;Add following sexp by moving the closing delimiter.&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td class=&quot;org-left&quot;&gt;&lt;code&gt;C-&amp;lt;left&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td class=&quot;org-left&quot;&gt;&lt;code&gt;sp-forward-barf-sexp&lt;/code&gt;&lt;/td&gt;
&lt;td class=&quot;org-left&quot;&gt;Remove the last sexp by moving the closing delimiter.&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td class=&quot;org-left&quot;&gt;&lt;code&gt;M-&amp;lt;left&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td class=&quot;org-left&quot;&gt;&lt;code&gt;sp-backward-slurp-sexp&lt;/code&gt;&lt;/td&gt;
&lt;td class=&quot;org-left&quot;&gt;Add preceding sexp  by moving the opening delimiter.&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td class=&quot;org-left&quot;&gt;&lt;code&gt;M-&amp;lt;right&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td class=&quot;org-left&quot;&gt;&lt;code&gt;sp-backward-barf-sexp&lt;/code&gt;&lt;/td&gt;
&lt;td class=&quot;org-left&quot;&gt;Remove the first sexp by moving the opening delimiter.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class=&quot;org-left&quot;&gt;Wrap and Unwrap&lt;/td&gt;
&lt;td class=&quot;org-left&quot;&gt;&amp;#xa0;&lt;/td&gt;
&lt;td class=&quot;org-left&quot;&gt;&amp;#xa0;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class=&quot;org-left&quot;&gt;&amp;#xa0;&lt;/td&gt;
&lt;td class=&quot;org-left&quot;&gt;&lt;code&gt;sp-wrap-arround&lt;/code&gt;&lt;/td&gt;
&lt;td class=&quot;org-left&quot;&gt;Wrap region with &lt;code&gt;()&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td class=&quot;org-left&quot;&gt;&amp;#xa0;&lt;/td&gt;
&lt;td class=&quot;org-left&quot;&gt;&lt;code&gt;sp-wrap-curly&lt;/code&gt;&lt;/td&gt;
&lt;td class=&quot;org-left&quot;&gt;Wrap region with &lt;code&gt;{}&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td class=&quot;org-left&quot;&gt;&amp;#xa0;&lt;/td&gt;
&lt;td class=&quot;org-left&quot;&gt;&lt;code&gt;sp-wrap-square&lt;/code&gt;&lt;/td&gt;
&lt;td class=&quot;org-left&quot;&gt;Wrap region with &lt;code&gt;[]&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td class=&quot;org-left&quot;&gt;&amp;#xa0;&lt;/td&gt;
&lt;td class=&quot;org-left&quot;&gt;&lt;code&gt;sp-unwrap-sexp&lt;/code&gt;&lt;/td&gt;
&lt;td class=&quot;org-left&quot;&gt;remove parenthesis of next expression&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td class=&quot;org-left&quot;&gt;&amp;#xa0;&lt;/td&gt;
&lt;td class=&quot;org-left&quot;&gt;&lt;code&gt;sp-backward-unwrap-sexp&lt;/code&gt;&lt;/td&gt;
&lt;td class=&quot;org-left&quot;&gt;Remove parenthesis of previous expression&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class=&quot;org-left&quot;&gt;Splice, Split, Join&lt;/td&gt;
&lt;td class=&quot;org-left&quot;&gt;&amp;#xa0;&lt;/td&gt;
&lt;td class=&quot;org-left&quot;&gt;&amp;#xa0;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class=&quot;org-left&quot;&gt;&amp;#xa0;&lt;/td&gt;
&lt;td class=&quot;org-left&quot;&gt;&lt;code&gt;sp-splice-sexp&lt;/code&gt;&lt;/td&gt;
&lt;td class=&quot;org-left&quot;&gt;Remove delimiters&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td class=&quot;org-left&quot;&gt;&amp;#xa0;&lt;/td&gt;
&lt;td class=&quot;org-left&quot;&gt;&lt;code&gt;sp-splice-sexp-killing-around&lt;/code&gt;&lt;/td&gt;
&lt;td class=&quot;org-left&quot;&gt;Remove delimiters and keep next expression&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td class=&quot;org-left&quot;&gt;&lt;code&gt;M-&amp;lt;down&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td class=&quot;org-left&quot;&gt;&lt;code&gt;sp-splice-sexp-killing-forward&lt;/code&gt;&lt;/td&gt;
&lt;td class=&quot;org-left&quot;&gt;Remove delimiters and kill following expressions&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td class=&quot;org-left&quot;&gt;&lt;code&gt;M-&amp;lt;up&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td class=&quot;org-left&quot;&gt;&lt;code&gt;sp-splice-sexp-killing-backward&lt;/code&gt;&lt;/td&gt;
&lt;td class=&quot;org-left&quot;&gt;Remove delimiters and kill proceeding expressions&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td class=&quot;org-left&quot;&gt;&amp;#xa0;&lt;/td&gt;
&lt;td class=&quot;org-left&quot;&gt;&lt;code&gt;sp-split-sexp&lt;/code&gt;&lt;/td&gt;
&lt;td class=&quot;org-left&quot;&gt;Add &lt;code&gt;)&lt;/code&gt; and &lt;code&gt;(&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td class=&quot;org-left&quot;&gt;&amp;#xa0;&lt;/td&gt;
&lt;td class=&quot;org-left&quot;&gt;&lt;code&gt;sp-join-sexp&lt;/code&gt;&lt;/td&gt;
&lt;td class=&quot;org-left&quot;&gt;Remove &lt;code&gt;)&lt;/code&gt; and &lt;code&gt;(&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td class=&quot;org-left&quot;&gt;&amp;#xa0;&lt;/td&gt;
&lt;td class=&quot;org-left&quot;&gt;&lt;code&gt;sp-convolute-sexp&lt;/code&gt;&lt;/td&gt;
&lt;td class=&quot;org-left&quot;&gt;Put proceeding sexp outside of outer proceeding sexp&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;
</content>
 </entry>
 
 <entry>
   <title>Server with variables</title>
   <link href="http://kimi.im/2021-11-10-open62541-tutorials-02"/>
   <updated>2021-11-10T00:00:00+00:00</updated>
   <id>http://kimi.im/open62541-tutorials-02</id>
   <content type="html">&lt;p&gt;
I&amp;rsquo;ve tried the &lt;a href=&quot;http://kimi.im/2021-11-04-open62541-tutorials-01&quot;&gt;first open62541 tutorial server&lt;/a&gt;, Now the second
tutorial example in open62541 project is a server with a scalar
variable and a matrix variable.
&lt;/p&gt;

&lt;p&gt;
Firstly, generate the single file distribution of open62541:
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-sh&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;cd&lt;/span&gt; ~/tutorials/open62541
cmake -DUA_ENABLE_AMALGAMATION=ON .
cmake --build .
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
Then copy files to the tutorials folder:
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-sh&quot;&gt;cp open62541.c open62541.h examples/tutorial_server_variable.c ~/tutorials/
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
To use &lt;code&gt;open62541.h&lt;/code&gt;, change the &lt;code&gt;#include&lt;/code&gt; lines:
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-diff&quot;&gt;&lt;span style=&quot;background-color: #d9d9d9;&quot;&gt;--- &lt;/span&gt;&lt;span style=&quot;background-color: #bfbfbf; font-weight: bold;&quot;&gt;#&amp;lt;buffer examples/tutorial_server_variable.c&amp;gt;&lt;/span&gt;
&lt;span style=&quot;background-color: #d9d9d9;&quot;&gt;+++ &lt;/span&gt;&lt;span style=&quot;background-color: #bfbfbf; font-weight: bold;&quot;&gt;#&amp;lt;buffer tutorials/tutorial_server_variable.c&amp;gt;&lt;/span&gt;
&lt;span style=&quot;background-color: #d9d9d9;&quot;&gt;@@ -14,9 +14,7 @@&lt;/span&gt;
&lt;span style=&quot;color: #aa2222; background-color: #ffeeee;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;background-color: #ffeeee;&quot;&gt;#include &amp;lt;open62541/plugin/log_stdout.h&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: #aa2222; background-color: #ffeeee;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;background-color: #ffeeee;&quot;&gt;#include &amp;lt;open62541/server.h&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: #aa2222; background-color: #ffeeee;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;background-color: #ffeeee;&quot;&gt;#include &amp;lt;open62541/server_config_default.h&amp;gt;&lt;/span&gt;
+#include &quot;open62541.h&quot;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
Then compile the example:
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-sh&quot;&gt;gcc -std=c99 open62541.c -lws2_32 tutorial_server_variables.c -o srv_var.exe
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
Execute the variable example:
&lt;/p&gt;

&lt;pre class=&quot;example&quot; id=&quot;org24d4546&quot;&gt;
# ./srv_var.exe
[2021-11-10 13:55:48.424 (UTC+0800)] warn/server        AccessControl: Unconfigured AccessControl. Users have all permissions.
[2021-11-10 13:55:48.424 (UTC+0800)] info/server        AccessControl: Anonymous login is enabled
[2021-11-10 13:55:48.424 (UTC+0800)] info/server        AccessControl: x509 certificate user authentication is enabled
[2021-11-10 13:55:48.424 (UTC+0800)] warn/server        Username/Password configured, but no encrypting SecurityPolicy. This can leak credentials on the network.
[2021-11-10 13:55:48.424 (UTC+0800)] warn/userland      AcceptAll Certificate Verification. Any remote certificate will be accepted.
[2021-11-10 13:55:48.424 (UTC+0800)] info/session       SecureChannel 0 | Session g=00000001-0000-0000-0000-000000000000 | WriteRequest returned status code BadTypeMismatch
Writing a string returned statuscode BadTypeMismatch
[2021-11-10 13:55:48.431 (UTC+0800)] info/network       TCP network layer listening on opc.tcp://CN-L-7386623:4840/
[2021-11-10 13:55:50.669 (UTC+0800)] info/server        received ctrl-c
[2021-11-10 13:55:50.716 (UTC+0800)] info/network       Shutting down the TCP network layer
&lt;/pre&gt;

&lt;p&gt;
As expected, it will report this error:
&lt;/p&gt;

&lt;pre class=&quot;example&quot; id=&quot;org204efbe&quot;&gt;
Writing a string returned statuscode BadTypeMismatch
&lt;/pre&gt;

&lt;p&gt;
Which is printed inside &lt;code&gt;writeWrongVariable&lt;/code&gt; function:
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;static&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;void&lt;/span&gt;
&lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;writeWrongVariable&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;UA_Server&lt;/span&gt; *&lt;span style=&quot;color: #000000;&quot;&gt;server&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;UA_NodeId&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;myIntegerNodeId&lt;/span&gt; = UA_NODEID_STRING&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;1, &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;the.answer&quot;&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;

    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;/* &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;Write a string&lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt; */&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;UA_String&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;myString&lt;/span&gt; = UA_STRING&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;test&quot;&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;UA_Variant&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;myVar&lt;/span&gt;;
    UA_Variant_init&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&amp;amp;myVar&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
    UA_Variant_setScalar&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&amp;amp;myVar, &amp;amp;myString, &amp;amp;UA_TYPES&lt;span style=&quot;color: #909183;&quot;&gt;[&lt;/span&gt;UA_TYPES_STRING&lt;span style=&quot;color: #909183;&quot;&gt;]&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;UA_StatusCode&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;retval&lt;/span&gt; = UA_Server_writeValue&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;server, myIntegerNodeId, myVar&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
    printf&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;Writing a string returned statuscode %s\n&quot;&lt;/span&gt;, UA_StatusCode_name&lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;retval&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
This function set a &lt;code&gt;UA_STRING&lt;/code&gt; to an &lt;code&gt;UA_Variant&lt;/code&gt;, and then try to write
this &lt;code&gt;UA_Variant&lt;/code&gt; &lt;code&gt;myVar&lt;/code&gt; to the integer node &lt;code&gt;the.answer&lt;/code&gt;. Because the
datatype mismatch, the status code name is &lt;code&gt;BadTypeMismatch&lt;/code&gt;.
&lt;/p&gt;

&lt;p&gt;
To use different data type, modify these lines in &lt;code&gt;addVariable&lt;/code&gt;:
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-diff&quot;&gt;    UA_VariableAttributes attr = UA_VariableAttributes_default;
&lt;span style=&quot;color: #aa2222; background-color: #ffeeee;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;background-color: #ffeeee;&quot;&gt;   UA_Int32 myInteger = 42;&lt;/span&gt;
&lt;span style=&quot;color: #22aa22; background-color: #eeffee;&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;background-color: #eeffee;&quot;&gt;   UA_Float myFloat = 3.1415926;&lt;/span&gt;
&lt;span style=&quot;color: #aa2222; background-color: #ffeeee;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;background-color: #ffeeee;&quot;&gt;   UA_Variant_setScalar(&amp;amp;attr.value, &amp;amp;myInteger, &amp;amp;UA_TYPES[UA_TYPES_INT32]);&lt;/span&gt;
&lt;span style=&quot;color: #22aa22; background-color: #eeffee;&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;background-color: #eeffee;&quot;&gt;   UA_Variant_setScalar(&amp;amp;attr.value, &amp;amp;myFloat, &amp;amp;UA_TYPES[UA_TYPES_FLOAT]);&lt;/span&gt;
    attr.description = UA_LOCALIZEDTEXT(&quot;en-US&quot;,&quot;the answer&quot;);
    attr.displayName = UA_LOCALIZEDTEXT(&quot;en-US&quot;,&quot;the answer&quot;);
&lt;span style=&quot;color: #aa2222; background-color: #ffeeee;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;background-color: #ffeeee;&quot;&gt;   attr.dataType = UA_TYPES[UA_TYPES_INT32].typeId;&lt;/span&gt;
&lt;span style=&quot;color: #22aa22; background-color: #eeffee;&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;background-color: #eeffee;&quot;&gt;   attr.dataType = UA_TYPES[UA_TYPES_FLOAT].typeId;&lt;/span&gt;
    attr.accessLevel = UA_ACCESSLEVELMASK_READ | UA_ACCESSLEVELMASK_WRITE;
&lt;/pre&gt;
&lt;/div&gt;
</content>
 </entry>
 
 <entry>
   <title>open62541 firststep on windows</title>
   <link href="http://kimi.im/2021-11-04-open62541-tutorials-01"/>
   <updated>2021-11-04T00:00:00+00:00</updated>
   <id>http://kimi.im/open62541-tutorials-01</id>
   <content type="html">&lt;div id=&quot;outline-container-org169efef&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;org169efef&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;1.&lt;/span&gt; introduction&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-1&quot;&gt;
&lt;p&gt;
OPC UA is a promising standard for future industrial applications. There are many implementations in C, C++, Python and Java.
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;https://github.com/open62541/open62541&quot;&gt;open62541&lt;/a&gt; is a pure C99 implementation, which could be a good option for embedded systems. I&amp;rsquo;ve commit some minor updates to it and I want to start learning it from the beginning.
&lt;/p&gt;

&lt;p&gt;
The first step according to the &lt;a href=&quot;https://open62541.org/doc/current/tutorial_server_firststeps.html&quot;&gt;manual&lt;/a&gt; is a simple server.
&lt;/p&gt;

&lt;p&gt;
Let&amp;rsquo;s have a try on Windows with &lt;code&gt;MingW64&lt;/code&gt; &lt;code&gt;gcc&lt;/code&gt; compiler.
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-org2bd0f98&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;org2bd0f98&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;2.&lt;/span&gt; get the code&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-2&quot;&gt;
&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-sh&quot;&gt;mkdir ~/tutorials
git clone git@github.com:open62541/open62541.git
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;cd&lt;/span&gt; ~/tutorials/open62541
git submodule update --init --recursive
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
Terminal logs:
&lt;/p&gt;

&lt;pre class=&quot;example&quot; id=&quot;org30fd3ab&quot;&gt;
# git clone git@github.com:open62541/open62541.git
Cloning into &apos;open62541&apos;...
remote: Enumerating objects: 57578, done.
remote: Counting objects: 100% (573/573), done.
remote: Compressing objects: 100% (334/334), done.
remote: Total 57578 (delta 282), reused 435 (delta 219), pack-reused 57005
Receiving objects: 100% (57578/57578), 39.99 MiB | 1.92 MiB/s, done.
Resolving deltas: 100% (43025/43025), done.
Updating files: 100% (1941/1941), done.

# git submodule update --init --recursive
Submodule &apos;deps/mdnsd&apos; (https://github.com/Pro/mdnsd.git) registered for path &apos;deps/mdnsd&apos;
Submodule &apos;deps/ua-nodeset&apos; (https://github.com/OPCFoundation/UA-Nodeset) registered for path &apos;deps/ua-nodeset&apos;
Cloning into &apos;~/open62541_tutorials/open62541/deps/mdnsd&apos;...
Cloning into &apos;~/open62541_tutorials/open62541/deps/ua-nodeset&apos;...
Submodule path &apos;deps/mdnsd&apos;: checked out &apos;3151afe5899dba5125dffa9f4cf3ae1fe2edc0f0&apos;
Submodule path &apos;deps/ua-nodeset&apos;: checked out &apos;5fdc7d480901e405c78e5b0f429c7fcdbeef4d5d&apos;
&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-org223eb2b&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;org223eb2b&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;3.&lt;/span&gt; prepare tools&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-3&quot;&gt;
&lt;p&gt;
Install &lt;a href=&quot;https://www.msys2.org/&quot;&gt;msys2&lt;/a&gt; and open the shell, execute:
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-sh&quot;&gt;pacman -S mingw64/mingw-w64-x86_64-cmake mingw64/mingw-w64-x86_64-gcc
&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-orgbf1f577&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgbf1f577&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;4.&lt;/span&gt; generate single file distribution&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-4&quot;&gt;
&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-sh&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;cd&lt;/span&gt; ~/tutorials/open62541
cmake -DUA_ENABLE_AMALGAMATION=ON .
cmake --build .
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
After a successful compile, there will be a lib and two source code files:
&lt;/p&gt;

&lt;pre class=&quot;example&quot; id=&quot;org587307f&quot;&gt;
# ls ~/tutorials/open62541/bin
libopen62541.a

# ls ~/tutorials/open62541/open62541.*
open62541.c  open62541.h
&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgbc06fde&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgbc06fde&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;5.&lt;/span&gt; get the tutorial code&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-5&quot;&gt;
&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-sh&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;cd&lt;/span&gt; ~/tutorials
mkdir step1
cp open62541/open62541.* step1/
cp open62541/examples/tutorial_server_firststeps.c step1/
&lt;/pre&gt;
&lt;/div&gt;

&lt;pre class=&quot;example&quot; id=&quot;orgf8a1cec&quot;&gt;
# ls ~/tutorials/step1/
open62541.c  open62541.h  tutorial_server_firststeps.c
&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgfabd10b&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgfabd10b&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;6.&lt;/span&gt; edit tutorial code&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-6&quot;&gt;
&lt;p&gt;
Because &lt;code&gt;tutorial_server_firststeps.c&lt;/code&gt; is written to be compiled together with the code base. If you want to compile with single file distribution, the &lt;code&gt;#include&lt;/code&gt; part at the beginning should be changed, the whole code is like below:
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-C&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;#include&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;open62541.h&quot;&lt;/span&gt;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;#include&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #2A00FF;&quot;&gt;signal.h&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;#include&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #2A00FF;&quot;&gt;stdlib.h&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;&amp;gt;&lt;/span&gt;

&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;static&lt;/span&gt; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;volatile&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;UA_Boolean&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;running&lt;/span&gt; = &lt;span style=&quot;color: #110099;&quot;&gt;true&lt;/span&gt;;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;static&lt;/span&gt; &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;stopHandler&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;sig&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    UA_LOG_INFO&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;UA_Log_Stdout, UA_LOGCATEGORY_USERLAND, &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;received ctrl-c&quot;&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
    running = &lt;span style=&quot;color: #110099;&quot;&gt;false&lt;/span&gt;;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;

&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;main&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;void&lt;/span&gt;&lt;span style=&quot;color: #707183;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #707183;&quot;&gt;{&lt;/span&gt;
    signal&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;SIGINT, stopHandler&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
    signal&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;SIGTERM, stopHandler&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;

    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;UA_Server&lt;/span&gt; *&lt;span style=&quot;color: #000000;&quot;&gt;server&lt;/span&gt; = UA_Server_new&lt;span style=&quot;color: #7388d6;&quot;&gt;()&lt;/span&gt;;
    UA_ServerConfig_setDefault&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;UA_Server_getConfig&lt;span style=&quot;color: #909183;&quot;&gt;(&lt;/span&gt;server&lt;span style=&quot;color: #909183;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;

    &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;UA_StatusCode&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;retval&lt;/span&gt; = UA_Server_run&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;server, &amp;amp;running&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;

    UA_Server_delete&lt;span style=&quot;color: #7388d6;&quot;&gt;(&lt;/span&gt;server&lt;span style=&quot;color: #7388d6;&quot;&gt;)&lt;/span&gt;;
    &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;return&lt;/span&gt; retval == UA_STATUSCODE_GOOD ? EXIT_SUCCESS : EXIT_FAILURE;
&lt;span style=&quot;color: #707183;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-org9b2868b&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;org9b2868b&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;7.&lt;/span&gt; compile&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-7&quot;&gt;
&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-sh&quot;&gt;gcc -std=c99 open62541.c -lws2_32 tutorial_server_firststeps.c -o step1.exe
&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-org46ca790&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;org46ca790&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;8.&lt;/span&gt; execute&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-8&quot;&gt;
&lt;p&gt;
There will be a new executable file &lt;code&gt;step1.exe&lt;/code&gt;. When it is executed, it will print these logs:
&lt;/p&gt;

&lt;pre class=&quot;example&quot; id=&quot;orga0c89f5&quot;&gt;
# ./step1.exe
[2021-11-04 19:21:20.084 (UTC+0800)] warn/server        AccessControl: Unconfigured AccessControl. Users have all permissions.
[2021-11-04 19:21:20.084 (UTC+0800)] info/server        AccessControl: Anonymous login is enabled
[2021-11-04 19:21:20.084 (UTC+0800)] info/server        AccessControl: x509 certificate user authentication is enabled
[2021-11-04 19:21:20.084 (UTC+0800)] warn/server        Username/Password configured, but no encrypting SecurityPolicy. This can leak credentials on the network.
[2021-11-04 19:21:20.084 (UTC+0800)] warn/userland      AcceptAll Certificate Verification. Any remote certificate will be accepted.
[2021-11-04 19:21:20.104 (UTC+0800)] info/network       TCP network layer listening on opc.tcp://kimi.im:4840/
&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orga4007b0&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orga4007b0&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;9.&lt;/span&gt; monitor&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-9&quot;&gt;
&lt;p&gt;
Then you can use UaExpert to view the server info.
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
</content>
 </entry>
 
 <entry>
   <title>单词本：gut feeling</title>
   <link href="http://kimi.im/2021-06-11-english-gut-feeling"/>
   <updated>2021-06-11T00:00:00+00:00</updated>
   <id>http://kimi.im/english-gut-feeling</id>
   <content type="html">&lt;p&gt;
最近看书碰到了一个词“gut feeling”，并且碰到不止一次：
&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;
Although managers try to quantify a decision when possible by using payoff and
regret matrices, uncertainty often forces them to rely more on intuition,
creativity, hunches, and &quot;&lt;b&gt;gut feel&lt;/b&gt;&quot;.
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;
尽管经理们尽可能的尝试通过支出、遗憾矩阵等方式量化决策，然而世界的不确定性常常限制他们更多的倚靠直觉、创造性、预感以及本能感觉。
&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;
Their decisions in complex situations are explicitly not made by long
rational-analytical considerations, but rather come from the &lt;b&gt;gut&lt;/b&gt;.
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;
在复杂情况下，他们的决策往往不是通过长时间的理性分析得出，而是通过本能。
&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;
&lt;b&gt;gut feeling&lt;/b&gt; is not a mysterious force, but an incorporated history of
experience. It is the sedimentation of deeply learned practice through numerous
feedback loops on success or failure.
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;
本能直觉并不是什么神秘力量，而是对个人历史经验的内化。这是一种对各种成功或者失败的实践的深度沉淀。
&lt;/p&gt;

&lt;p&gt;
然后，今天开会的时候，因为项目进展不顺，遇到一些决策延迟，欧洲的老板讲了这么一句：
&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;
We cannot estimate the project schedule based on gut feeling.
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;
我们不能基于本能直觉评估项目计划。
&lt;/p&gt;

&lt;p&gt;
我猜想参加这会的人大概直到这句话什么意思，但是肯定没有留意 &lt;b&gt;gut feeling&lt;/b&gt; 这个词的。学习单词的好处就是可以在这种情况，领会到它的意思。
&lt;/p&gt;

&lt;p&gt;
gut 本意是消化道，内脏，肚肠，肠胃。所以 &lt;b&gt;gut feeling&lt;/b&gt; 可以直译为肚肠感觉。那种感觉，大概只有自己能感觉到，所以就是一种 &lt;b&gt;本能直觉&lt;/b&gt; 了。
&lt;/p&gt;

&lt;p&gt;
另外，还有一些类似的说法：
&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;
&lt;b&gt;My gut told me&lt;/b&gt; that he was the one to arrest, and I was right.
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;
&lt;b&gt;我的直觉告诉我&lt;/b&gt; ，他要被捕。结果我对了。
&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;
My initial &lt;b&gt;gut response&lt;/b&gt; was that the merger would result in a drop in stock
prices, but the opposite turned out to be true.
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;
我最初的 &lt;b&gt;本能反应&lt;/b&gt; 是这次兼并会导致股票价格下跌，然而事实正好相反。
&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;
If you&apos;re worried because your daughter isn&apos;t home yet, &lt;b&gt;go with your gut&lt;/b&gt; and
call the police.
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;
如果你因为女儿现在还不在家而担心， &lt;b&gt;相信你的直觉&lt;/b&gt; ，赶紧报警吧。
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>单词本：先生</title>
   <link href="http://kimi.im/2021-05-28-all-about-sir"/>
   <updated>2021-05-28T00:00:00+00:00</updated>
   <id>http://kimi.im/all-about-sir</id>
   <content type="html">&lt;p&gt;
《全球通史》看了有大半个月了。看到第629页的时候，看到近现代世界各地的人如何称呼欧洲人：
&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;
在吉卜林的时代（19世纪末），欧洲人几乎被认为是上天注定的统治者。他们在印度被恭敬地称为“大人”（sahib），在中东被称为“先生”（effendi），在非洲被称为“老爷”（bwana），而在拉丁美洲，则被称为“恩主”（patron）。
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;
effendi这个词，让我联想到的是阿凡提，果然阿凡提的故事，英语就是《Tales of the
Effendi》。他的全名就是Effendi Nasrenddin（阿凡提·纳斯尔丁）。根据百度百科，还是一个真是的历史人物，原名为霍加·纳斯尔丁：
&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;
霍加·纳斯尔丁是阿凡提的原形。“阿凡提”不是人名，正同“霍加”和“毛拉”一样，都是对人的尊称。“阿凡提”意为“先生”、“老师”，“霍加”、“毛拉”则是伊斯兰教宗教人士的尊号。又译阿方提，是维语“先生”的意思，阿拉伯文:جحا （旧哈） 或 نصر الدين （纳瑟·丁）是一位活跃在西起摩洛哥，东到中国新疆突厥语系诸民族中的传说人物，大智若愚，才辩超群。&lt;sup&gt;&lt;a id=&quot;fnr.1&quot; class=&quot;footref&quot; href=&quot;#fn.1&quot;&gt;1&lt;/a&gt;&lt;/sup&gt;
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;
然后，我们看看bwana，有一首歌叫《Jambo Bwana》：
&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;
Jambo bwana (Jahm-boh bwah-nah) = Hello, sir.
&lt;/p&gt;

&lt;p&gt;
Habari gani rafiki (Hah-bah-ree gah-nee rah-fee-kee) = How are you doing today, my friend?
&lt;/p&gt;

&lt;p&gt;
Asante nzuri sana (Ah-sahn-teh ehn-nzoo-ree sah-nah) = I thank you, I’m very fine.
&lt;/p&gt;

&lt;p&gt;
Hakuna matata (Hah-koo-nah mah-tah-tah) = No worries, no problems here.
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;
其中还有那句很有名的“Hakuna matata”，在斯瓦希里语中是不用担心，无忧无虑的意思。然而，迪斯尼《狮子王》涉及侵权：
&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;
有网友查阅美国法律数据库，发现早在2003年，迪士尼就已成功将这一句“哈库纳玛塔塔”注册成了自己的版权专利商标，获得了它在美国地区的独家使用权，他人不得将其用在服装、鞋帽类产品之上。来自津巴布韦的社会活动家谢尔顿·姆帕拉（Shelton Mpala）便是这一网上请愿活动的发起人，他认为迪士尼此举犯下了“文化挪用”的大错误，“那又不是他们发明出来的东西，怎么可以把商标权授予他们呢？”&lt;sup&gt;&lt;a id=&quot;fnr.2&quot; class=&quot;footref&quot; href=&quot;#fn.2&quot;&gt;2&lt;/a&gt;&lt;/sup&gt;
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;
patron是赞助者的意思，比如github上就有很多开源项目，需要patron提供资助。
&lt;/p&gt;
&lt;div id=&quot;footnotes&quot;&gt;
&lt;h2 class=&quot;footnotes&quot;&gt;Footnotes: &lt;/h2&gt;
&lt;div id=&quot;text-footnotes&quot;&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.1&quot; class=&quot;footnum&quot; href=&quot;#fnr.1&quot;&gt;1&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
霍加·纳斯尔丁（1028或1029-1105或1106），也有人叫他纳斯尔丁·阿凡提或毛拉·纳斯尔丁，是一个真实的历史人物。
&lt;a href=&quot;https://baike.baidu.com/item/%E9%9C%8D%E5%8A%A0%C2%B7%E7%BA%B3%E6%96%AF%E5%B0%94%E4%B8%81/15256831?fr=aladdin&quot;&gt;https://baike.baidu.com/item/%E9%9C%8D%E5%8A%A0%C2%B7%E7%BA%B3%E6%96%AF%E5%B0%94%E4%B8%81/15256831?fr=aladdin&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.2&quot; class=&quot;footnum&quot; href=&quot;#fnr.2&quot;&gt;2&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
《狮子王》经典台词涉文化殖民 网上万人发起请愿
&lt;a href=&quot;https://news.sina.com.cn/o/2018-12-20/doc-ihmutuee0976152.shtml&quot;&gt;https://news.sina.com.cn/o/2018-12-20/doc-ihmutuee0976152.shtml&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;


&lt;/div&gt;
&lt;/div&gt;
</content>
 </entry>
 
 <entry>
   <title>单词本：aficionado</title>
   <link href="http://kimi.im/2021-05-27-english-aficionado"/>
   <updated>2021-05-27T00:00:00+00:00</updated>
   <id>http://kimi.im/english-aficionado</id>
   <content type="html">&lt;p&gt;
昨天看书的时候看到有个叫做Michelle Segar&lt;sup&gt;&lt;a id=&quot;fnr.1&quot; class=&quot;footref&quot; href=&quot;#fn.1&quot;&gt;1&lt;/a&gt;&lt;/sup&gt;的女教练，通过小步快跑、不断激励的方式，能够把顽固的沙发土豆改造成运动迷。原话是这么说的：Michelle Segar uses this
dynamic to turn even the most stubborn coach potatoes into exercise aficionados.
&lt;/p&gt;

&lt;p&gt;
coach potato指的是喜欢躺在沙发上一直看电视的人。好在我们家电视机已经尘封很久，我也快10年没有躺在沙发上看电视了。
&lt;/p&gt;

&lt;p&gt;
coach potato这个词出现1982年Jack Mingo写的书《The Official Couch Potato
Handbook》，指导人们如何做一个标准的电视迷。Couch不仅仅是一个包包品牌（蔻驰&lt;sup&gt;&lt;a id=&quot;fnr.2&quot; class=&quot;footref&quot; href=&quot;#fn.2&quot;&gt;2&lt;/a&gt;&lt;/sup&gt;），还是长沙发的意思。
&lt;/p&gt;

&lt;p&gt;
而potato则又追溯到1976年，当时有个叫Tom Iacino的人，他所在的一个团体喜欢制作各种有趣食物、喜欢看各种电视节目。他们管自己叫boob tuber，boob就是傻乎乎得人，tube是电视电缆，也就指的是电视机了。而tuber又指植物的块茎，典型的，就是土豆potato。所以后来Jack Mingo就创造了couch potato这个说法了。
&lt;/p&gt;

&lt;p&gt;
另外，因为potato是植物，植物天生比较安静，所以vegetate表示植物的生长，也表示无所事事的生活。veg out就表示一种无所事事的状态。比如：He spends all his free time
at home &lt;b&gt;vegetating&lt;/b&gt; in front of the TV. People ofter &lt;b&gt;veg out&lt;/b&gt; after a long day of
working or study.&lt;sup&gt;&lt;a id=&quot;fnr.3&quot; class=&quot;footref&quot; href=&quot;#fn.3&quot;&gt;3&lt;/a&gt;&lt;/sup&gt;
&lt;/p&gt;

&lt;p&gt;
哦哦，忘记了，本文的主题是aficionado。这个长的怪怪的。其实是从西班牙语里来的，原先指的是喜欢看斗牛的人。最早是从拉丁语affectionen变化来的。affection是钟情、爱情、喜爱之意。后来，不知道怎么的，aficionado就成了狂热热爱迷恋之人了。Are you an art
&lt;b&gt;aficionado&lt;/b&gt;? 你是个艺术迷吗？ The days when a car &lt;b&gt;aficionado&lt;/b&gt; could repair his or
her own car are long past, due primarily to the high software content.
&lt;/p&gt;
&lt;div id=&quot;footnotes&quot;&gt;
&lt;h2 class=&quot;footnotes&quot;&gt;Footnotes: &lt;/h2&gt;
&lt;div id=&quot;text-footnotes&quot;&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.1&quot; class=&quot;footnum&quot; href=&quot;#fnr.1&quot;&gt;1&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;https://michellesegar.com/&quot;&gt;https://michellesegar.com/&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.2&quot; class=&quot;footnum&quot; href=&quot;#fnr.2&quot;&gt;2&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;https://www.coach.com.cn&quot;&gt;https://www.coach.com.cn&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.3&quot; class=&quot;footnum&quot; href=&quot;#fnr.3&quot;&gt;3&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;https://www.reluctantgourmet.com/couch-potato-explained/&quot;&gt;https://www.reluctantgourmet.com/couch-potato-explained/&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;


&lt;/div&gt;
&lt;/div&gt;
</content>
 </entry>
 
 <entry>
   <title>汽车动力电池的数字孪生架构</title>
   <link href="http://kimi.im/2021-05-26-battery-digital-twin"/>
   <updated>2021-05-26T00:00:00+00:00</updated>
   <id>http://kimi.im/battery-digital-twin</id>
   <content type="html">&lt;p&gt;
数字孪生的概念大概最早可以追溯到信息物理系统（CPS）。2018年，宾夕法尼亚大学的
Hellen Gill在论文&quot;From Vision to Reality: Cyber-Physical Systems&quot;中写道
&lt;a class=&apos;org-ref-reference&apos; href=&quot;#gil2008from&quot;&gt;gil2008from&lt;/a&gt; ：
&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;
信息物理系统是在操作层面由计算单元集成、监控、控制的物理、生物、工程系统。系统的组件建立了广泛的网络连接。计算能力深度潜入到物理组件，甚至材料中。计算单元，是一种能够提供实时响应、分布式的嵌入式系统。
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;
而数字孪生最早由Grieves在2003年提出：物理产品、虚拟产品及其连接。CAX技术为航空设备的设计、仿真、验证、生产环节，提供数字模型。随着物联网的出现，通过结合传感器信息，数字孪生融合了实时数据采集，实现了感知、分析、决策、反馈。因此数字孪生包括的CPS，其概念外延更加广泛。
&lt;/p&gt;

&lt;p&gt;
从应用场景来说，德国工业4.0是将数字孪生应用与工业装备的设计、生产、应用、维护中。随后，工业4.0协会和ZWEI提出了设备信息壳（Asset Administration Shell，AAS），用来规范设备数字孪生的信息模型。在交通领域，数字孪生可以用于实现对路网、路灯、交通灯的模型仿真和实时控制。
&lt;/p&gt;

&lt;p&gt;
在新能源汽车中，动力电池的成本占比高（占到了整车的35%）、安全等级要求高（ISO
26262）、剩余价值大（梯次回收利用）。所以数字孪生技术与动力电池全生命周期管理相结合，有比较好的应用价值。
&lt;/p&gt;

&lt;p&gt;
总体来说，数字孪生可以应用于以下环节：
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;生产过程。电池原材料的来料检、各工序质量测试、化成测试分档分容等过程的数据采集、汇总和分析。可以支持电池生产过程的优化，从源头保证电池质量。&lt;/li&gt;
&lt;li&gt;物流环节。电池出厂后，充电30%，放置在恒温恒湿环境中，仓库环节、运输过程对电池寿命都会产生影响。&lt;/li&gt;
&lt;li&gt;使用过程。电动汽车充放电、驾驶习惯、使用环境的影响。&lt;/li&gt;
&lt;li&gt;梯次回收。电池容量少于80%时，要考虑回收作为储能或者循环处理。&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
在这些环节，通过数字孪生、BMS、区块链等技术，可以实现全生命周期的数据采集、分析利用、优化管理，从而提升电池使用寿命、安全性。
&lt;/p&gt;

&lt;p&gt;
关键是如何建立电池的数字模型。在生产环节，结合DCS、MES、ERP中的数据，根据材料工艺元数据，与最终产品进行关联，进行有效追溯。在物流环节，需要运输存储的IoT技术。使用过程中，要考虑电池的电流、电压、充放电、SOC；电池的内部结构：电芯、模组和
Pack之间如何相互影响，散热结构等，通过物理化学老化预测、等效使用周期、等效电路、使用计数等综合因素评估使用寿命，通过BMS控制电芯级充放电，降低电池老化速度。梯次利用过程，可以通过IoT和区块链进行价值追溯，建立可信联盟链，提升透明度，降低循环成本。
&lt;/p&gt;

&lt;p&gt;
因此，整体数据结构分为电池元数据、事件数据和存储数据。元数据定义数字孪生模型，分析事件数据产生智能决策控制，利用历史存储数据优化预测分析模型、提供追溯信息。
&lt;/p&gt;

&lt;p&gt;
以上是数字孪生在汽车动力电池领域应用的一些想法。
&lt;/p&gt;

&lt;p&gt;
&lt;a id=&quot;orgeef52eb&quot;&gt;&lt;/a&gt;
&lt;a id=&quot;org2b6f4aa&quot;&gt;&lt;/a&gt; &lt;h1 class=&apos;org-ref-bib-h1&apos;&gt;Bibliography&lt;/h1&gt;
&lt;ul class=&apos;org-ref-bib&apos;&gt;&lt;li&gt;&lt;a id=&quot;gil2008from&quot;&gt;[gil2008from]&lt;/a&gt; &lt;a name=&quot;gil2008from&quot;&gt;&lt;/a&gt;Helen Gill, From Vision to Reality: Cyber-Physical Systems, &lt;i&gt;&lt;/i&gt;,  (2008).&lt;/li&gt;
&lt;/ul&gt;
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>单词本：vis a vis</title>
   <link href="http://kimi.im/2021-05-03-english-vis-a-vis"/>
   <updated>2021-05-03T00:00:00+00:00</updated>
   <id>http://kimi.im/english-vis-a-vis</id>
   <content type="html">&lt;p&gt;
放假的时候，一边玩，一边抽空看书。在看数据科学方法论的时候，读到：
&lt;/p&gt;

&lt;p&gt;
we identified the most common clusters of sub-optimal
outcomes observed &lt;b&gt;vis a vis&lt;/b&gt; those generic goals of a
high-performing data science team. （我们 &lt;b&gt;对比着&lt;/b&gt; 高绩效数据科学团队的目标，识别出了几个仅仅局部优化的输出结果。）
&lt;/p&gt;

&lt;p&gt;
这里用到了一个词组 vis a vis，应该是来自法语的 vis à
vis，即face to face，面对面，引申为关于、对比。读作
[ˈviːzaˈviː]。有时候，也写作 vis-à-vis。
&lt;/p&gt;

&lt;p&gt;
many agencies now have a unit to deal with women&apos;s
needs &lt;b&gt;vis-à-vis&lt;/b&gt; employment. 很多机构现在成立了单独的部门处理妇女们 &lt;b&gt;关于&lt;/b&gt; 工作的需求。在这里，用作介词，类似于 with regard to。
&lt;/p&gt;

&lt;p&gt;
they sat vis-a-vis at the table. 他们在桌旁面对面坐着。
&lt;/p&gt;

&lt;p&gt;
另外，从法语借来的还有 tete-a-tete 头对头，比如a
tete-a-tete supper，二人烛光晚餐。英语真是很喜欢借法语单词呢。
&lt;/p&gt;

&lt;p&gt;
需要注意是：There&apos;s a slightly pedantic ring to the
term vis-a-vis so use it with caution. It&apos;s more a
term that might be used in a newspaper article or
academic treatise, and something best avoided in
speech altogether, unless you&apos;re deliberately aiming
for comic effect.&lt;sup&gt;&lt;a id=&quot;fnr.1&quot; class=&quot;footref&quot; href=&quot;#fn.1&quot;&gt;1&lt;/a&gt;&lt;/sup&gt; 一般会在报纸和学术文章中用，在口语中不建议使用 vis-a-vis，不然会显得有些学究（pedantic）。
&lt;/p&gt;
&lt;div id=&quot;footnotes&quot;&gt;
&lt;h2 class=&quot;footnotes&quot;&gt;Footnotes: &lt;/h2&gt;
&lt;div id=&quot;text-footnotes&quot;&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.1&quot; class=&quot;footnum&quot; href=&quot;#fnr.1&quot;&gt;1&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;https://www.vocabulary.com/dictionary/vis-a-vis&quot;&gt;https://www.vocabulary.com/dictionary/vis-a-vis&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;


&lt;/div&gt;
&lt;/div&gt;
</content>
 </entry>
 
 <entry>
   <title>单词本：en passant</title>
   <link href="http://kimi.im/2021-05-02-english-en-passant"/>
   <updated>2021-05-02T00:00:00+00:00</updated>
   <id>http://kimi.im/english-en-passant</id>
   <content type="html">&lt;p&gt;
最近工作青黄不接，还没什么项目，所以除了看看技术资料外，我还整理了自己的工作和学习方法。学了下学如何有效的做笔记。
&lt;/p&gt;

&lt;p&gt;
在查阅如何 smart note taking 的时候，看到：
&lt;/p&gt;

&lt;p&gt;
By taking smart notes, we collect &lt;b&gt;en passant&lt;/b&gt; the
material for our future writings in one place.
&lt;/p&gt;

&lt;p&gt;
在整理资料时，机智地记笔记，还能 &lt;b&gt;顺带着&lt;/b&gt; 能为未来的写作，积累素材。
&lt;/p&gt;

&lt;p&gt;
这个 en passant 其实是法语中正路过的意思，直译为英文
in passing. 因为来自法语，就成了一个特别的熟语：顺便的，顺带的，吃路兵之意。
&lt;/p&gt;

&lt;p&gt;
在国际象棋中，the &lt;b&gt;en passant&lt;/b&gt; rule is a move that
allows a pawn that has moved two squares to be
captured as though it had only moved one.&lt;sup&gt;&lt;a id=&quot;fnr.1&quot; class=&quot;footref&quot; href=&quot;#fn.1&quot;&gt;1&lt;/a&gt;&lt;/sup&gt; 吃过路兵是对士兵开局能跳两格的一个修正机制。
&lt;/p&gt;

&lt;p&gt;
He mentioned &lt;b&gt;en passant&lt;/b&gt; that he was going away. 他顺便提了他正准备走。
&lt;/p&gt;
&lt;div id=&quot;footnotes&quot;&gt;
&lt;h2 class=&quot;footnotes&quot;&gt;Footnotes: &lt;/h2&gt;
&lt;div id=&quot;text-footnotes&quot;&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.1&quot; class=&quot;footnum&quot; href=&quot;#fnr.1&quot;&gt;1&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;https://simplifychess.com/articles/what-is-en-passant-in-chess/index.html&quot;&gt;https://simplifychess.com/articles/what-is-en-passant-in-chess/index.html&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;


&lt;/div&gt;
&lt;/div&gt;
</content>
 </entry>
 
 <entry>
   <title>单词本：Kakorrhaphiophobia</title>
   <link href="http://kimi.im/2021-04-27-english-Kakorrhaphiophobia"/>
   <updated>2021-04-27T00:00:00+00:00</updated>
   <id>http://kimi.im/english-Kakorrhaphiophobia</id>
   <content type="html">&lt;p&gt;
有时候，我们要多夸夸小孩子们，可是夸人要掌握一些技巧。如果没拿捏好怎么夸人，恐怕会导致不好的后果呢。
&lt;/p&gt;

&lt;p&gt;
在我们成长的路上，总是会遇到各种各样的挑战。比如第一次考试、第一次上台表演、第一次跑步得奖。你还记得大人们是如何夸奖你的吗？或许你早就忘记了。不同的夸奖方式，会在你的心理，留下不同的痕迹。
&lt;/p&gt;

&lt;p&gt;
斯坦福心理学家Carol Dweck经过多年观察得出结论，所谓的 &lt;b&gt;growth mindset&lt;/b&gt; 是我们能够持续成功的一个关键因素。她发现，一些有天赋的天才学生，很容易形成 &lt;b&gt;fixed mindset&lt;/b&gt;
。在天才儿童的成长道路上，总是被人夸奖聪明、有资质、天才，于是，就会形成一个刻板印象，就是自己是与生俱来的天才，能够不断成功。一旦建立了这样的心态，就会害怕失败、从而害怕承担风险，害怕尝试新东西，于是就形成了 &lt;b&gt;失败恐惧症&lt;/b&gt; ，the fear of
failure has the ugliest name of all phobias: &lt;b&gt;Kakorrhaphiophobia&lt;/b&gt;.
&lt;/p&gt;

&lt;p&gt;
The word &lt;b&gt;Kakorrhaphiophobia&lt;/b&gt; comes from a Greek language Kako is a Greek word
that means bad and the second portion of the word is phobia that is also Greek
means fear.&lt;sup&gt;&lt;a id=&quot;fnr.1&quot; class=&quot;footref&quot; href=&quot;#fn.1&quot;&gt;1&lt;/a&gt;&lt;/sup&gt;
&lt;/p&gt;

&lt;p&gt;
所以呢，回到本文最开始的话题，我们在夸奖小朋友的时候，不要从 &lt;b&gt;you are&lt;/b&gt; 的角度夸他们：“你多么聪明，你多么天才。”而是要从， &lt;b&gt;you do&lt;/b&gt; 的角度：“经过你的努力学习，你考了第一名，真棒！经过你的仔细观察，你发现了这个规律，不错！”
&lt;/p&gt;
&lt;div id=&quot;footnotes&quot;&gt;
&lt;h2 class=&quot;footnotes&quot;&gt;Footnotes: &lt;/h2&gt;
&lt;div id=&quot;text-footnotes&quot;&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.1&quot; class=&quot;footnum&quot; href=&quot;#fnr.1&quot;&gt;1&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;http://www.healthcaretip.com/2017/02/what-is-kakorrhaphiophobia-definition-symptoms-causes-treatment.html&quot;&gt;http://www.healthcaretip.com/2017/02/what-is-kakorrhaphiophobia-definition-symptoms-causes-treatment.html&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;


&lt;/div&gt;
&lt;/div&gt;
</content>
 </entry>
 
 <entry>
   <title>单词本：leitmotiv</title>
   <link href="http://kimi.im/2021-04-21-english-leitmotiv"/>
   <updated>2021-04-21T00:00:00+00:00</updated>
   <id>http://kimi.im/english-leitmotiv</id>
   <content type="html">&lt;p&gt;
不好意思，这个月更新有些少了。马老师已经开始一份新的工作了。但是这个月还没啥项目任务，所以每天上班看技术资料，看代码，看书学习。新的工作，生活也变得很规律。已经坚持三个星期，每天下班晚饭前跑步5公里，消耗卡路里350kcal。
&lt;/p&gt;

&lt;p&gt;
最近在看的一本书叫做《Documenting Software Architecture》。其中看到这么一句：
&quot;If it is not written down, it does not exist&quot; became sort of a &lt;i&gt;leitmotiv&lt;/i&gt; in
the architecture team for the following two years. &lt;a class=&apos;org-ref-reference&apos; href=&quot;#bachmann2010documenting&quot;&gt;bachmann2010documenting&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
试着翻译成中文就是：“不曾写下来的，就是不存在的”已经成为架构组接下来2年的主旋律。
&lt;/p&gt;

&lt;p class=&quot;verse&quot;&gt;
leitmotif/leitmotiv&lt;br /&gt;
US [&apos;laɪtmoʊ.tif] UK [&apos;laɪtməʊ.tiːf]&lt;br /&gt;
n.（音乐的）主旋律；（书、艺术品等的）中心思想&lt;br /&gt;
&lt;/p&gt;

&lt;p&gt;
是的，今天马老师要介绍的词就是这个主旋律 leitmotiv。因为马老师在高中的时候，学过2个学期德语，所以，一眼就认出来了，这个词是德国人那边借来的。
&lt;/p&gt;

&lt;p&gt;
在德语里leit是个动词，就是leiten，意思是：lead，带领。motiv呢，就是motive，动机。在英语里，有时候，这个词也写成leitmotif。motif是艺术作品中的主题或者是生物学中，经常重复出现的基因序列或者生物特征之类的。组合起来呢，leitmotif就是音乐中的主旋律，引申为活动、作品、书等的中心思想了。
&lt;/p&gt;

&lt;p&gt;
百度百科是这么解释的：主导动机（leitmotiv）指一个贯穿整部音乐作品的动机。动机是音乐语汇的短小构成，通常的长度在一到两个小节。&lt;sup&gt;&lt;a id=&quot;fnr.1&quot; class=&quot;footref&quot; href=&quot;#fn.1&quot;&gt;1&lt;/a&gt;&lt;/sup&gt;
&lt;/p&gt;

&lt;p&gt;
One of Wagner&apos;s greatest gifts to music was the &lt;i&gt;Leitmotif&lt;/i&gt;. Simply put, it&apos;s a
musical signature designed to represent a character or theme in an opera, and
he uses them throughout his operas. Modern film composers have since adopted
the technique, and you&apos;ll find countless examples across many Hollywood
scores.&lt;sup&gt;&lt;a id=&quot;fnr.2&quot; class=&quot;footref&quot; href=&quot;#fn.2&quot;&gt;2&lt;/a&gt;&lt;/sup&gt; Richard Wagner (May 22, 1813 - Feb 13, 1883) 在音乐中的最大贡献就是在其歌剧作品中不断重复强调的leitmotif。好莱坞电影也学会这招，比如星球大战。
&lt;/p&gt;

&lt;p&gt;
Others pointed to what they saw as a &lt;i&gt;leitmotif&lt;/i&gt; of Biden&apos;s answers that drew a
sharp contrast with Trump and a throughline from domestic to global
politics.&lt;sup&gt;&lt;a id=&quot;fnr.3&quot; class=&quot;footref&quot; href=&quot;#fn.3&quot;&gt;3&lt;/a&gt;&lt;/sup&gt; Biden 回应的工作主旋律，相对Trump，更面向全球政治。
&lt;/p&gt;

&lt;p&gt;
Software architecture design will be a leitmotif of my work in following
years. 软件架构设计，将会是马老师接下来几年的工作主旋律啦。
&lt;/p&gt;
&lt;div id=&quot;footnotes&quot;&gt;
&lt;h2 class=&quot;footnotes&quot;&gt;Footnotes: &lt;/h2&gt;
&lt;div id=&quot;text-footnotes&quot;&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.1&quot; class=&quot;footnum&quot; href=&quot;#fnr.1&quot;&gt;1&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;https://baike.baidu.com/item/%E4%B8%BB%E5%AF%BC%E5%8A%A8%E6%9C%BA/2222221&quot;&gt;https://baike.baidu.com/item/%E4%B8%BB%E5%AF%BC%E5%8A%A8%E6%9C%BA/2222221&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.2&quot; class=&quot;footnum&quot; href=&quot;#fnr.2&quot;&gt;2&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;https://www.classicfm.com/composers/wagner/guides/wagner-facts-great-composer/richard-wagner-leitmotif/&quot;&gt;https://www.classicfm.com/composers/wagner/guides/wagner-facts-great-composer/richard-wagner-leitmotif/&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.3&quot; class=&quot;footnum&quot; href=&quot;#fnr.3&quot;&gt;3&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;https://news.yahoo.com/title-same-biden-first-white-222300704.html&quot;&gt;https://news.yahoo.com/title-same-biden-first-white-222300704.html&lt;/a&gt;
&lt;/p&gt;

&lt;p class=&quot;footpara&quot;&gt;
&lt;a id=&quot;org5d56759&quot;&gt;&lt;/a&gt;
&lt;a id=&quot;orgaced244&quot;&gt;&lt;/a&gt; &lt;h1 class=&apos;org-ref-bib-h1&apos;&gt;Bibliography&lt;/h1&gt;
&lt;ul class=&apos;org-ref-bib&apos;&gt;&lt;li&gt;&lt;a id=&quot;bachmann2010documenting&quot;&gt;[bachmann2010documenting]&lt;/a&gt; &lt;a name=&quot;bachmann2010documenting&quot;&gt;&lt;/a&gt;Felix Bachmann, Len Bass, Paul Clements, David Garlan, James Ivers, Little, Paulo Merson, Robert Nord &amp; Judith Stafford, Documenting Software Architectures: Views and Beyond, Addison-Wesley Professional (2010).&lt;/li&gt;
&lt;/ul&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;


&lt;/div&gt;
&lt;/div&gt;
</content>
 </entry>
 
 <entry>
   <title>单词本：loaf</title>
   <link href="http://kimi.im/2021-04-05-english-loaf"/>
   <updated>2021-04-05T00:00:00+00:00</updated>
   <id>http://kimi.im/english-loaf</id>
   <content type="html">&lt;p&gt;
在学组织行为学的时候，看到一个词 social loafing。大家可能经常察觉到，一个团队任务重，人数少的时候，大家工作的很积极，努力达到DDL，而随着团队成员人数增加，偷懒的人也会增加，平均战斗力反而降低了。这种现象就叫做 social loafing，社会化惰性，或者就叫摸鱼现象。In social psychology, social loafing is the phenomenon of a
person exerting less effort to achieve a goal when they work in a group than
when working alone. &lt;sup&gt;&lt;a id=&quot;fnr.1&quot; class=&quot;footref&quot; href=&quot;#fn.1&quot;&gt;1&lt;/a&gt;&lt;/sup&gt; 我猜，很多人小时候最早是通过三个和尚没水喝的故事学会这个道理的。
&lt;/p&gt;

&lt;p&gt;
因为你单独工作的时候，你不会跟别人比，所以总是会尽力做好自己份内工作。当团队人员增加的时候，如果你觉得有人没有做好份内工作，你也会降低自己的努力程度来平衡自己内心。如果，团队中人人都这么想，那样，整个团队的工作积极性和输出就降低了。
&lt;/p&gt;

&lt;p&gt;
Social loafing is the tendency for individual effort to decrease when people work in
groups rather than individually. 个人在群体中工作会比个人独自工作付出较少的努力，这种现象称为社会性偷懒。
&lt;/p&gt;

&lt;p&gt;
social loafing行为产生的主要原因，大概是因为个人在团队中的工作成果无法很好的直接体现。除了工作效率的降低，还会影响团队的责任感，导致很多重要决策没人拍板。因为一旦有人跳出来拍板，就得承担责任。于是导致企业的整体效率降低了。
&lt;/p&gt;

&lt;p&gt;
要解决这个问题呢，最好是控制团队数量，将任务拆分清楚，工作职责具体分配到人，明确个人的KPI，以及个人团队KPI的关系。
&lt;/p&gt;

&lt;p&gt;
奇怪的是，loaf这个词作为名词时，是一条面包的意思，可是作为动词时，游手好闲、无所事事的意思。真是有些奇怪。
&lt;/p&gt;

&lt;p&gt;
事实上，我们在企业里工作，赚一份薪水，买一条loaf，吃饱肚子，就应该好好工作么，上班摸鱼loafing，那多不好意思呀。
&lt;/p&gt;
&lt;div id=&quot;footnotes&quot;&gt;
&lt;h2 class=&quot;footnotes&quot;&gt;Footnotes: &lt;/h2&gt;
&lt;div id=&quot;text-footnotes&quot;&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.1&quot; class=&quot;footnum&quot; href=&quot;#fnr.1&quot;&gt;1&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;https://en.wikipedia.org/wiki/Social_loafing&quot;&gt;https://en.wikipedia.org/wiki/Social_loafing&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;


&lt;/div&gt;
&lt;/div&gt;
</content>
 </entry>
 
 <entry>
   <title>单词本：impasse</title>
   <link href="http://kimi.im/2021-04-03-english-impasse"/>
   <updated>2021-04-03T00:00:00+00:00</updated>
   <id>http://kimi.im/english-impasse</id>
   <content type="html">&lt;p&gt;
看书的时候遇到 &lt;b&gt;impasse&lt;/b&gt; 这个单词。有一些些法语构词法经验的我，猜测这应该是个法语单词。果然，查了法语字典了解到，这个词是绝境、僵局的意思。
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;être dans l&apos;impasse 陷入僵局&lt;/li&gt;
&lt;li&gt;faire l&apos;impasse sure qch 选择忽视某个事情&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
例如：Negotiations have reached an &lt;b&gt;impasse&lt;/b&gt;. 谈判已陷入僵局。[法语] Les
négociations sont dans &lt;b&gt;l&apos;impasse&lt;/b&gt;.
&lt;/p&gt;

&lt;p&gt;
impasse 这个词，还有一个形容词形式： &lt;b&gt;impassable&lt;/b&gt; ，无法通过。例如：The roads were
made &lt;b&gt;impassable&lt;/b&gt; by the flood.  洪水导致道路无法通行。
&lt;/p&gt;

&lt;p&gt;
在法语里，impasse 的本意是指死胡同，也就是 cul-de-sac 。le cul 是屁股、底儿、尽头的意思。cul-de-sac 字面意思就是“袋子底儿”，就是一个死胡同的样子了。有趣的是，
cul-de-sac 也被引进到英语里了。
&lt;/p&gt;

&lt;p&gt;
例如： A 26-year-old man driving a 2008 Kawasaki ZX-6R motorcycle was
approaching the &lt;b&gt;cul-de-sac&lt;/b&gt; when the bike overturned, police said. The man, who
was not wearing a helmet, was thrown from the motorcycle and hit a power box. 警方说，一名26岁男子驾驶一辆2008年川崎ZX-6R摩托车，开进死胡同里翻车。因该名男子没有戴头盔，从摩托车上飞落，撞上了一个电箱，死了。&lt;sup&gt;&lt;a id=&quot;fnr.1&quot; class=&quot;footref&quot; href=&quot;#fn.1&quot;&gt;1&lt;/a&gt;&lt;/sup&gt;
&lt;/p&gt;

&lt;p&gt;
If your job is a &lt;b&gt;cul-de-sac&lt;/b&gt;, you have to quit or accept the fact that your
career is over. 如果你的工作已经是个死胡同了，你必须离职或者承认你的职业生涯完蛋了。
&lt;/p&gt;

&lt;p&gt;
《庄子·秋水》中说过：“物之生也，若骤若驰，无动而不变，无时而不移。何为乎，何不为乎？夫固将自化。”万物的生长，不断的奔跑，每时每刻都在变化。无论，该做什么，不该做什么，变化是绝对的。所以呢，遇到了死胡同，就该想想办法，改变改变做事方式，或者换换环境吧。树挪会死，人挪挪会更有活力么。
&lt;/p&gt;
&lt;div id=&quot;footnotes&quot;&gt;
&lt;h2 class=&quot;footnotes&quot;&gt;Footnotes: &lt;/h2&gt;
&lt;div id=&quot;text-footnotes&quot;&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.1&quot; class=&quot;footnum&quot; href=&quot;#fnr.1&quot;&gt;1&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;https://www.reviewjournal.com/local/local-las-vegas/motorcyclist-dies-after-cul-de-sac-crash-in-western-las-vegas-2317014/&quot;&gt;https://www.reviewjournal.com/local/local-las-vegas/motorcyclist-dies-after-cul-de-sac-crash-in-western-las-vegas-2317014/&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;


&lt;/div&gt;
&lt;/div&gt;
</content>
 </entry>
 
 <entry>
   <title>单词本：éclipser</title>
   <link href="http://kimi.im/2021-03-23-francais-%C3%A9clipser"/>
   <updated>2021-03-23T00:00:00+00:00</updated>
   <id>http://kimi.im/francais-éclipser</id>
   <content type="html">&lt;p&gt;
最近几天青黄不接，在家待业。跑跑步，赏赏花，喝喝咖啡，看看新闻，写写代码。日子过得真舒服啊。植物的嫩芽真好看，感觉看多了，视力眼神都变好了。保持自律，在家安排好工作，利用通勤的时间健身，这样在家办公岂不美哉？
&lt;/p&gt;

&lt;p&gt;
窃以为，远程办公在不久的将来会是普遍的趋势了。就拿我来说，给我网络和电脑，我就能随时随地开始工作了。这样可以省下每天通勤的个把小时、几个平方的办公位，以及水电费。于公于私，都是便捷、经济和高效啊。
&lt;/p&gt;

&lt;p&gt;
偶尔，需要与同事开会，可以找个安静的地方进行视频会议。但是，遇到一些低效率的常规例会，想脱身怎么办呢？针对这种情况，有个叫 Sam Lavigne
的UI设计副教授&lt;sup&gt;&lt;a id=&quot;fnr.1&quot; class=&quot;footref&quot; href=&quot;#fn.1&quot;&gt;1&lt;/a&gt;&lt;/sup&gt;，一定也是一个摸鱼高手，写了个 chrome 插件，可以模拟狗狗叫，婴儿哭，让你找借口离开Zoom会议。
&lt;/p&gt;

&lt;p&gt;
法国费加罗报报道&lt;sup&gt;&lt;a id=&quot;fnr.2&quot; class=&quot;footref&quot; href=&quot;#fn.2&quot;&gt;2&lt;/a&gt;&lt;/sup&gt;：
&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;
Zoom Escaper permet de simuler un bruit de chien, de bébé qui
pleure, ou une autre raison suffisante pour permettre de
&lt;b&gt;s&apos;éclipser&lt;/b&gt; d&apos;une visioconférence.
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;
这里用到一个单词：éclipser，看起来和英语的日食很像：eclipse，确实，法语中日食的食就是 une éclipse。其动词形式为 éclipser。s&apos;éclipser 有消失溜走之意。德语中 éclipse 是： die Finsternis. Mondfinsternis 月食； Sonnenfinsternis 日食。
&lt;/p&gt;

&lt;p&gt;
再来看看一些例句：
&lt;/p&gt;

&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;La Nouvelle Lune éclipse le soleil le jour de l&apos;équinoxe.&lt;sup&gt;&lt;a id=&quot;fnr.3&quot; class=&quot;footref&quot; href=&quot;#fn.3&quot;&gt;3&lt;/a&gt;&lt;/sup&gt; 新月在春分日遮住太阳。&lt;/li&gt;
&lt;li&gt;Quand la Lune traverse complètement l&apos;ombre de la Terre, cela
produit une &lt;b&gt;éclipse&lt;/b&gt; lunaire totale.&lt;sup&gt;&lt;a id=&quot;fnr.4&quot; class=&quot;footref&quot; href=&quot;#fn.4&quot;&gt;4&lt;/a&gt;&lt;/sup&gt; 当月亮完全进入地球的阴影，形成月全食。&lt;/li&gt;
&lt;li&gt;Une &lt;b&gt;éclipse&lt;/b&gt; solaire se produit lorsque la Lune se place entre le
Soleil et la Terre.&lt;sup&gt;&lt;a id=&quot;fnr.5&quot; class=&quot;footref&quot; href=&quot;#fn.5&quot;&gt;5&lt;/a&gt;&lt;/sup&gt; 当月亮进入太阳和地球之间，产生日食。&lt;/li&gt;
&lt;li&gt;Zoom Escaper permet de simuler un bruit de chien, de bébé qui
pleure, ou une autre raison suffisante pour permettre de
&lt;b&gt;s&apos;éclipser&lt;/b&gt; d&apos;une visioconférence. Zoom Escaper 可以模拟狗叫，婴儿哭等声音，让你找借口从视频会议中溜走。&lt;/li&gt;
&lt;li&gt;s&apos;éclipser avant la fin du spectacle 在散戏前悄悄走掉&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
最后，附上 Zoom Escaper 链接：&lt;a href=&quot;https://zoomescaper.com/&quot;&gt;https://zoomescaper.com/&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
以上，码于2021年3月23日下午1点56分，杭州大厦三楼星巴克。
&lt;/p&gt;
&lt;div id=&quot;footnotes&quot;&gt;
&lt;h2 class=&quot;footnotes&quot;&gt;Footnotes: &lt;/h2&gt;
&lt;div id=&quot;text-footnotes&quot;&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.1&quot; class=&quot;footnum&quot; href=&quot;#fnr.1&quot;&gt;1&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;https://lav.io/about/&quot;&gt;https://lav.io/about/&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.2&quot; class=&quot;footnum&quot; href=&quot;#fnr.2&quot;&gt;2&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;https://www.lefigaro.fr/secteur/high-tech/un-logiciel-pour-mettre-fin-aux-zoom-interminables-grace-a-des-bruits-parasites-20210322&quot;&gt;https://www.lefigaro.fr/secteur/high-tech/un-logiciel-pour-mettre-fin-aux-zoom-interminables-grace-a-des-bruits-parasites-20210322&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.3&quot; class=&quot;footnum&quot; href=&quot;#fnr.3&quot;&gt;3&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;https://dilka.fr/galerie/la-nouvelle-lune-eclipse-le-soleil-le-jour-de-lequinoxe-5952/&quot;&gt;https://dilka.fr/galerie/la-nouvelle-lune-eclipse-le-soleil-le-jour-de-lequinoxe-5952/&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.4&quot; class=&quot;footnum&quot; href=&quot;#fnr.4&quot;&gt;4&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;https://www.caabm.org/Documentation/Lune/Eclipses&quot;&gt;https://www.caabm.org/Documentation/Lune/Eclipses&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.5&quot; class=&quot;footnum&quot; href=&quot;#fnr.5&quot;&gt;5&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;https://www.lumni.fr/jeu/les-eclipses-solaires-et-lunaires&quot;&gt;https://www.lumni.fr/jeu/les-eclipses-solaires-et-lunaires&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;


&lt;/div&gt;
&lt;/div&gt;
</content>
 </entry>
 
 <entry>
   <title>单词本：tsunami</title>
   <link href="http://kimi.im/2021-03-21-english-tsunami"/>
   <updated>2021-03-21T00:00:00+00:00</updated>
   <id>http://kimi.im/english-tsunami</id>
   <content type="html">&lt;p&gt;
冰岛沉睡的火山爆发，日本地震引起海啸：
&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;
A strong earthquake struck Saturday off northern Japan, shaking
buildings even in Tokyo and triggering a &lt;b&gt;tsunami&lt;/b&gt; advisory for a
part of the northern coast.
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;
这个海啸 tsunami 来自日本语津（tsu）波（nami），即港口的波浪。这个津的甲骨文看起来不就是一个人在划船么。所以，天津简称“津”，意为天子经过的渡口。
&lt;/p&gt;

&lt;p&gt;
法语、德语中都用 Tsunami 表示海啸。可以说，日本是海啸的发源地了。
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;Le terme tsunami nous vient du japonais tsu nami qui signifie
littéralement « vague du port ».&lt;sup&gt;&lt;a id=&quot;fnr.1&quot; class=&quot;footref&quot; href=&quot;#fn.1&quot;&gt;1&lt;/a&gt;&lt;/sup&gt;&lt;/li&gt;
&lt;li&gt;Der Begriff „Tsunami“ stammt aus dem japanischen und bedeutet
Hafen-Welle oder Welle im Hafen.&lt;sup&gt;&lt;a id=&quot;fnr.2&quot; class=&quot;footref&quot; href=&quot;#fn.2&quot;&gt;2&lt;/a&gt;&lt;/sup&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;footnotes&quot;&gt;
&lt;h2 class=&quot;footnotes&quot;&gt;Footnotes: &lt;/h2&gt;
&lt;div id=&quot;text-footnotes&quot;&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.1&quot; class=&quot;footnum&quot; href=&quot;#fnr.1&quot;&gt;1&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;https://www.futura-sciences.com/planete/definitions/geographie-tsunami-418/&quot;&gt;https://www.futura-sciences.com/planete/definitions/geographie-tsunami-418/&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.2&quot; class=&quot;footnum&quot; href=&quot;#fnr.2&quot;&gt;2&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;https://www.geo.uzh.ch/dam/jcr:21a3148a-fb1d-4ffb-bf06-71967efcf412/Tsunami_Unterrichtsmaterialien.pdf&quot;&gt;https://www.geo.uzh.ch/dam/jcr:21a3148a-fb1d-4ffb-bf06-71967efcf412/Tsunami_Unterrichtsmaterialien.pdf&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;


&lt;/div&gt;
&lt;/div&gt;
</content>
 </entry>
 
 <entry>
   <title>单词本：dormant</title>
   <link href="http://kimi.im/2021-03-21-english-dormant"/>
   <updated>2021-03-21T00:00:00+00:00</updated>
   <id>http://kimi.im/english-dormant</id>
   <content type="html">&lt;p&gt;
最近地球不太稳定啊。昨天，日本发生7级地震，引起1米海啸。冰岛沉睡了
6000年的法格拉达尔火山爆发。Fox news报道：
&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;
A volcano near Iceland&apos;s capital city erupted Friday after sitting
&lt;b&gt;dormant&lt;/b&gt; for 6,000 years.
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;
学法语的同学一定很清楚，dormant（休眠、沉睡）来自法语，是 dormir（睡觉）的现在分词。
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;Qui &lt;b&gt;dort&lt;/b&gt;? 谁睡觉？&lt;/li&gt;
&lt;li&gt;Je &lt;b&gt;dors&lt;/b&gt;. 我睡觉。&lt;/li&gt;
&lt;li&gt;Il est l&apos;heure de &lt;b&gt;dormir&lt;/b&gt; les enfants. 孩子们，睡觉时间到了。&lt;/li&gt;
&lt;li&gt;Le proverbe est menteur qui dit que la fortune vient en &lt;b&gt;dormant&lt;/b&gt;. 俗话说睡觉能生财是骗人的。&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
英语里还有 dorm 宿舍，是 dormitory 的简写。dormitive 安眠的，催眠的。
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;As I type this, I am in my university &lt;b&gt;dorm&lt;/b&gt; room． 打下这些字的时候，我正待在我的大学寝室里。&lt;/li&gt;
&lt;li&gt;The &lt;b&gt;dormitive&lt;/b&gt; eyeshade is made from pure cotton material, has good
effect of permeability and is comfortable for use. 助睡眼罩纯棉制作，透气性好，使用舒适。&lt;/li&gt;
&lt;/ul&gt;
</content>
 </entry>
 
 <entry>
   <title>单词本：maverick</title>
   <link href="http://kimi.im/2021-03-20-english-maverick"/>
   <updated>2021-03-20T00:00:00+00:00</updated>
   <id>http://kimi.im/english-maverick</id>
   <content type="html">&lt;p&gt;
在一篇文章叫《Change is good - so get used to it》(改变是一件好事情，要养成经常改变的习惯)中提到
&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;
we should make learning a way of life and ecourage mavericks. （我们要学会将学习作为生活的一部分并且鼓励特立独行者的非主流想法）
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;
依稀记得，看书看新闻的时候，看到过好几次maverick，都没有留意是什么意思。今天，在工作切换间隙，可以很清闲的学学新单词。
&lt;/p&gt;

&lt;p&gt;
这个Maverick其实是一个姓氏，美国Taxas有一名律师和政客，叫做Samuel
Maverick(1803-7-23 ~ 1870-9-2)&lt;sup&gt;&lt;a id=&quot;fnr.1&quot; class=&quot;footref&quot; href=&quot;#fn.1&quot;&gt;1&lt;/a&gt;&lt;/sup&gt;，这个人是 Texas Declaration of Independence 的签署者之一。他年轻的时候有个农场，养了很多牛。按照行规呢，自家养的牛要给他打个烙印（brand the cattle）。但是这个人要么是很懒，要么是对养牛不太感兴趣，所以他们家的牛是不打印记的。慢慢的，周围的农场邻居们就管没有烙印的牛叫 maverick。再后来，maverick演变为团体中不被信任的、非主流的、持不同意见者、 独行其是者、言行与众不同者&lt;sup&gt;&lt;a id=&quot;fnr.2&quot; class=&quot;footref&quot; href=&quot;#fn.2&quot;&gt;2&lt;/a&gt;&lt;/sup&gt;。
&lt;/p&gt;

&lt;p&gt;
后来 Samuel Maverick把他的农场卖了之后，余生再也没有养过牛了。
&lt;/p&gt;

&lt;p&gt;
例如：
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;He was too much of a maverick ever to hold high office. 他太特立独行，永远不可能做高官。&lt;/li&gt;
&lt;li&gt;He made a maverick decision. 他做了一个特立独行的决定。&lt;/li&gt;
&lt;li&gt;She is such a maverick person. 她是多么特立独行的一个人啊。&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;footnotes&quot;&gt;
&lt;h2 class=&quot;footnotes&quot;&gt;Footnotes: &lt;/h2&gt;
&lt;div id=&quot;text-footnotes&quot;&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.1&quot; class=&quot;footnum&quot; href=&quot;#fnr.1&quot;&gt;1&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;https://en.wikipedia.org/wiki/Samuel_Maverick&quot;&gt;https://en.wikipedia.org/wiki/Samuel_Maverick&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.2&quot; class=&quot;footnum&quot; href=&quot;#fnr.2&quot;&gt;2&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;http://www.trivia-library.com/b/word-origins-and-the-biography-of-sam-maverick-part-3.htm&quot;&gt;http://www.trivia-library.com/b/word-origins-and-the-biography-of-sam-maverick-part-3.htm&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;


&lt;/div&gt;
&lt;/div&gt;
</content>
 </entry>
 
 <entry>
   <title>单词本：der Impfstoff</title>
   <link href="http://kimi.im/2021-03-18-deutsch-der-Impfstoff"/>
   <updated>2021-03-18T00:00:00+00:00</updated>
   <id>http://kimi.im/deutsch-der-Impfstoff</id>
   <content type="html">&lt;p&gt;
几个月前，俄罗斯研发除了“卫星-V”移苗。《柳叶刀》杂志2月2日刊出论文认可“人造卫星-V”疫苗的高有效性，所以尽管移苗还没被欧盟认证，已经有不少国家开始引入移苗。
&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;
Russland hat nach eigenen Angaben Abkommen mit Unternehmen in
mehreren EU-Staaten zur Herstellung von Sputnik V
geschlossen. Zugelassen ist der Impfstoff in der EU nicht.
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;
Impfstoff 已经成为一个高频词了。它是由 Impf + stoff 组成的。stoff 在以前我记过笔记，氧气氢气在德语里分别是酸素水素 &lt;a href=&quot;http://kimi.im/2014-03-29-deutsch-sauerstoff&quot;&gt;Sauerstoff und
Wasserstoff&lt;/a&gt;。die Pflanze 是植物，pflanzen是种植栽培，所以 impfen 是接种、打疫苗的意思。合在一起 Impfstoff 直译为植入素，即疫苗。
&lt;/p&gt;

&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;127 gesunde Freiwillige ließen sich den &lt;b&gt;Impfstoff&lt;/b&gt;
injizieren. 127个健康的自愿者接受了疫苗注射。&lt;/li&gt;
&lt;li&gt;Die Ärzte &lt;b&gt;impfen&lt;/b&gt; Kinder gegen Tuberkulose und Kinderlähmung.医生给孩子们接种结核病和小儿麻痹症的疫苗。&lt;/li&gt;
&lt;li&gt;Dein Hund soll monatlich &lt;b&gt;geimpft&lt;/b&gt; werden. 你的狗应该每个月都进行预防注射。&lt;/li&gt;
&lt;li&gt;Seit der &lt;b&gt;Impfung&lt;/b&gt; waren sie gegen Pocken gefeit. 种痘以后他们就不会生天花了。&lt;/li&gt;
&lt;li&gt;das Impfbuch 防移苗登记本&lt;/li&gt;
&lt;li&gt;der Impfausweis 接种证明书&lt;/li&gt;
&lt;li&gt;der Impfarzt 接种医生&lt;/li&gt;
&lt;li&gt;die Impfaktion 接种措施&lt;/li&gt;
&lt;/ul&gt;
</content>
 </entry>
 
 <entry>
   <title>大众能量日</title>
   <link href="http://kimi.im/2021-03-16-vw-power-day"/>
   <updated>2021-03-16T00:00:00+00:00</updated>
   <id>http://kimi.im/vw-power-day</id>
   <content type="html">&lt;p&gt;
3月15日，大众集团举办了首场Power Day（能量日）。在大会上，大众公布了未来10年的电动化战略：
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;推出方形电池统一计划，2023年开始铺开搭载方形电池的汽车，2030年，覆盖大众旗下的80%汽车&lt;/li&gt;
&lt;li&gt;超级电池工厂建设，计划与合作伙伴共同在欧洲建设6家超级电池厂，建成后，总产能达到240GWh&lt;/li&gt;
&lt;li&gt;建设充电站：与CAMS合作在中国建设17000个充电桩，覆盖中国大部分城市&lt;/li&gt;
&lt;li&gt;建设回收站：对锂电池原料进行拆解回收，目标回收90%以上材料&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
那么，什么方形电池呢？目前市面上有三种类型的电池：圆柱形cylindrical,
方形prismatic，以及软包pouch。圆柱形电池又有很多规格，例如 14650、
17490、18650、21700、26500。特斯拉 Model 3 用的就是 21700 圆柱形电池。圆柱形电池价格便宜、一致性好，但是比较重，能量比小。软包电池外部是铝塑膜，安全性好，但是生产过程较复杂。方形电池相比圆柱形质量轻，能量比高，稳定性好，不易爆炸。目前方形电池市场占有率是49%，软包电池 28%。
&lt;/p&gt;

&lt;p&gt;
大众选择方形电池肯定有他的道理，一方面，方形电池介于圆形与软包之间，能量比好，安全性高，综合性能最佳。另一方面，方形电池可以保持外壳不改变，适应内部磷酸铁锂、三元、固态电池等不同工艺，是一个未来兼容的方案。
&lt;/p&gt;

&lt;p&gt;
但是，因为缺少统一标准，市面上方形电池种类比较多。通过大众的标准化设计，可以避免不同电池企业之间的不兼容，有利于行业健康发展。
&lt;/p&gt;

&lt;p&gt;
大会最后，大众说未来可以实现免费充电：“With the right energy
management and intelligent storage systems, one day, charging will
be for free.”你信吗？
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>单词本：red tape</title>
   <link href="http://kimi.im/2021-03-15-english-red-tape"/>
   <updated>2021-03-15T00:00:00+00:00</updated>
   <id>http://kimi.im/english-red-tape</id>
   <content type="html">&lt;p&gt;
今天学了跨国管理相关的文章，其中提到作为跨国公司的管理者，必须熟悉世界各国的政策、制度、经济和文化等。其中有这样一句话：
&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;
Swedish retailer Ikea has halted further investment in Russia because
of continual governmental &lt;b&gt;red tape&lt;/b&gt; delays.
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;
大概意思是说：因为俄罗斯政府审批流程的&lt;b&gt;繁文缛节&lt;/b&gt;，瑞典的宜家暂停在俄罗斯的投资。
&lt;/p&gt;

&lt;p&gt;
red tape 红色胶带是繁文缛节的意思？这可非常令人费解。
&lt;/p&gt;

&lt;p&gt;
于是我简单调研了一下，原来是这样子的：以前的英国官方文件惯例上是用红色布带系成一扎一扎的，所以，慢慢的，人们就用red tape来形容官方规定的繁琐复杂了。即：
&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;
Strict adherence to rules and regulations so that a procedure seems to take
longer than necessary.
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;
比如：
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;You can&amp;rsquo;t believe how much red tape there is in getting a visa. 你不能相信有多少阻碍去获得签证。&lt;/li&gt;
&lt;li&gt;This was no time for red tape and circumlocution, although these have their
place in a well-ordered, placid system. 官僚习气和推三拖四的作风，在按部就班、平平稳稳的秩序里还可以，但现在却不合时宜。（ circumlocution ：迂回曲折的说法。
placid：温和的；平和的；文静的；平静的）&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
--------&amp;#x2013;&amp;#x2014;华丽的分割线--------&amp;#x2013;&amp;#x2014;
&lt;/p&gt;

&lt;p&gt;
晚上回家看锂电池行业新闻，居然又让我读到了red tape，这里将欧盟推出新一轮锂电池激励计划，同时也在制定相应的指导政策，相关人员也担心这些复杂的繁文缛节政策会阻碍电池产业发展：
&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;
the rules have a &amp;ldquo;high level of complexity&amp;rdquo; and could threaten to
hinder the relatively nascent battery industry with &lt;b&gt;red tape&lt;/b&gt;.
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;
读到这段话，我就不需要查字典就懂了。仿佛是一种默契。这就是学语言学单词的乐趣呀。这种不期而遇的学语言的惊喜，从初中到高中，一直伴随我到现在。
&lt;/p&gt;

&lt;p&gt;
还有组织行为学(&lt;a href=&quot;#citeproc_bib_item_1&quot;&gt;&lt;i&gt;Organizational Behavior&lt;/i&gt; 2005&lt;/a&gt;)管理组织变革这一章举的例子：
&lt;/p&gt;

&lt;p&gt;
ABB, which owns power generation facilities in 16 countries, is well
positioned to take advantage of deregulation in the electric power
industry as governments around the world seek to reduce government
regulation and &lt;b&gt;red tape&lt;/b&gt;.
&lt;/p&gt;

&lt;p&gt;
&lt;b&gt;References&lt;/b&gt;
&lt;/p&gt;

&lt;style&gt;.csl-entry{text-indent: -1.5em; margin-left: 1.5em;}&lt;/style&gt;&lt;div class=&quot;csl-bib-body&quot;&gt;
  &lt;div class=&quot;csl-entry&quot;&gt;&lt;a id=&quot;citeproc_bib_item_1&quot;&gt;&lt;/a&gt;&lt;i&gt;Organizational Behavior&lt;/i&gt;. 2005. South-Western College Pub.&lt;/div&gt;
&lt;/div&gt;
</content>
 </entry>
 
 <entry>
   <title>单词本：la cryptomonnaie</title>
   <link href="http://kimi.im/2021-03-14-francais-la-cryptomonnaie"/>
   <updated>2021-03-14T00:00:00+00:00</updated>
   <id>http://kimi.im/francais-la-cryptomonnaie</id>
   <content type="html">&lt;p&gt;
最近的比特币突破了6万美元新高。RFI法国国际广播电台网站这样报道：
&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;
Le bitcoin est monté à 60 197 dollars et continuait ensuite
d&apos;osciller autour de ce seuil symbolique. Sachant que sur les trois
derniers mois la cryptomonnaie a triplé sa valeur. Elle valait
encore 20 000 dollars mi-décembre.
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;
la cryptomonnaie 加密货币，英语 cryptocurrency，德语 die
Kryptowährung, auch Kryptogeld。跟中文类比着看，cryptomonnaie 和
Kryptogeld 好像是说加密钞票，而 cryptocurrency 和 Kryptowährung 像是在说加密货币：
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;monnaie = Geld = 钞票，钱&lt;/li&gt;
&lt;li&gt;currency = Währung = 货币&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
去年12月中，比特币才2万美元啊。要是我没有放弃2013年的比特币挖矿事业，或许已经有几百万美金了……
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>瓦锡兰Wärtsilä海上浮动储能电池系统</title>
   <link href="http://kimi.im/2021-03-13-wartsila-floating-power-barge"/>
   <updated>2021-03-13T00:00:00+00:00</updated>
   <id>http://kimi.im/wartsila-floating-power-barge</id>
   <content type="html">&lt;p&gt;
因为参与了一些电池行业的业务，所以，开始关注储能系统，发布一些储能相关咨询。
&lt;/p&gt;

&lt;p&gt;
2021年3月11日储能网新闻，瓦锡兰集团的储能技术和系统集成业务部门在菲律宾安装实施了一套大规模的海上飘浮电池储能系统，项目名为“floating
power barge”（飘浮能源驳船）。该项目在菲律宾Davao de Oro省，Maco地区，配合Terma Marine公司（TMI）的100MW热电驳船，提供54MW/32MW储能容量。
&lt;/p&gt;

&lt;p&gt;
Wärtsilä声称，该项目为TMI的内燃机发电系统，提供快速的电网辅助服务。通过电池系统，将发电站的启动时间从15分钟缩短到3分钟。
&lt;/p&gt;

&lt;p&gt;
项目于去年9月份启动，预期在今年第四季度交付。项目中会用到Wärtsilä公司近期发布的Gridsolv Max储能解决方案，通过GEMS 能源管理系统和控制软件平台进行能源管理。
&lt;/p&gt;

&lt;p&gt;
瓦锡兰是为海事和能源市场提供智能科技和完整生命周期解决方案的全球领先企业。瓦锡兰通过注重技术创新，总体效率以及数据分析，为客户的船舶和电厂带来环境与经济性能最大化&lt;sup&gt;&lt;a id=&quot;fnr.1&quot; class=&quot;footref&quot; href=&quot;#fn.1&quot;&gt;1&lt;/a&gt;&lt;/sup&gt;。
&lt;/p&gt;

&lt;p&gt;
Wärtsilä在全球已经针对26个内燃机发电驳船，实施了1500MW储能系统。而且Wärtsilä是目前唯一能提供驳船+储能系统+软件解决方案的公司。
&lt;/p&gt;

&lt;p&gt;
Wärtsilä GridSolv Max标准化储能集装箱，内置了电池，安全系统，消防系统，电力分发系统和空调系统。Wärtsilä GridSolv Max container is a
cost-effective energy storage solution. GridSolv Max significantly
increases energy density and system reliability for meeting customer
energy needs while also adequately future-proofing their hardware
assets. This innovative architecture simplifies installation and
integration across any energy storage application or deployment
size.
&lt;/p&gt;

&lt;p&gt;
The standardised GridSolv Max storage enclosure consists of one ISO
40&apos; unit and includes&lt;sup&gt;&lt;a id=&quot;fnr.2&quot; class=&quot;footref&quot; href=&quot;#fn.2&quot;&gt;2&lt;/a&gt;&lt;/sup&gt;:
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;Batteries&lt;/li&gt;
&lt;li&gt;Safety system&lt;/li&gt;
&lt;li&gt;Fire Safety System&lt;/li&gt;
&lt;li&gt;Power distribution&lt;/li&gt;
&lt;li&gt;Air conditioning system&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
Wärtsilä GEMS 能源管理系统集成了电池电力优化，单体电池控制和电池组控制，远程监控，运维，诊断和安全可靠性服务等。Wärtsilä&apos;s sophisticated
GEMS energy management system is a smart software platform that
monitors, controls and optimises energy assets on both site and
portfolio levels.
&lt;/p&gt;

&lt;p&gt;
GEMS supports a wide variety of battery and power electronics to
achieve optimal system performance. GEMS integrates and controls
individual resources and entire fleets comprising energy storage,
renewables and traditional thermal generation. Using machine
learning and historic and real-time data analytics to optimise the
asset mix, GEMS enables customers to remotely monitor, operate,
identify and diagnose equipment with unrivaled safety, reliability,
and flexibility&lt;sup&gt;&lt;a id=&quot;fnr.3&quot; class=&quot;footref&quot; href=&quot;#fn.3&quot;&gt;3&lt;/a&gt;&lt;/sup&gt;.
&lt;/p&gt;

&lt;p&gt;
菲律宾国家由许多小岛组成，没有足够的土地建设发电站，因此浮动驳船发电站+浮动驳船储能系统在当地有很好的应用场景。根据菲律宾政府统计，该国可再生能源占比为：10.5%水电，13.4%地热，1%风电和光伏，0.4%生物能。
&lt;/p&gt;

&lt;p&gt;
菲律宾国家能源部提出了NREP国家可再生能源计划，该项目目标在2030年实现
15GW可再生能源，其中地热增长75%，水电增长160%，同时实施2GW风电，和
284MW-1528MW光伏，从而达到50%-60%可再生能源利用比例。
&lt;/p&gt;
&lt;div id=&quot;footnotes&quot;&gt;
&lt;h2 class=&quot;footnotes&quot;&gt;Footnotes: &lt;/h2&gt;
&lt;div id=&quot;text-footnotes&quot;&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.1&quot; class=&quot;footnum&quot; href=&quot;#fnr.1&quot;&gt;1&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;https://www.wartsila.cn&quot;&gt;https://www.wartsila.cn&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.2&quot; class=&quot;footnum&quot; href=&quot;#fnr.2&quot;&gt;2&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;https://storage.wartsila.com/technology/gridsolv-max/&quot;&gt;https://storage.wartsila.com/technology/gridsolv-max/&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.3&quot; class=&quot;footnum&quot; href=&quot;#fnr.3&quot;&gt;3&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;https://storage.wartsila.com/technology/gems/&quot;&gt;https://storage.wartsila.com/technology/gems/&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;


&lt;/div&gt;
&lt;/div&gt;
</content>
 </entry>
 
 <entry>
   <title>长期储能技术研究</title>
   <link href="http://kimi.im/2021-03-13-long-duration-energy-storage"/>
   <updated>2021-03-13T00:00:00+00:00</updated>
   <id>http://kimi.im/long-duration-energy-storage</id>
   <content type="html">&lt;p&gt;
最近美国和英国分别发布了长期储能技术研究计划。
&lt;/p&gt;

&lt;p&gt;
3月10日，美国能源部公布一项研究计划，预计在2025年之前，投入7500万美元，用于支持称为 Grid Storage Launchpad (GSL，电网储能启动板？)&lt;sup&gt;&lt;a id=&quot;fnr.1&quot; class=&quot;footref&quot; href=&quot;#fn.1&quot;&gt;1&lt;/a&gt;&lt;/sup&gt;
的长期、低成本的电网储能电池技术研究。该项目位于华盛顿里奇兰（Richland, Washington）的Pacific Northwest National Laboratory
(PNNL) 实验室。
&lt;/p&gt;

&lt;p&gt;
GSL项目包含三个主要目标：
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;协作共赢：集聚美国能源部、跨学科研究人员和工业企业，共创共赢开发电网级储能技术&lt;/li&gt;
&lt;li&gt;共性验证：通过在GSL实验室中提供的真实电网运行验证平台，测试下一代电网储能材料和系统。&lt;/li&gt;
&lt;li&gt;加速创新：提供测试测试工作台到完整测试系统，降低新技术在严苛性能需求下的产业化风险，加速开发速度。&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
GSL电网储能启动台实验室将在今年下半年开始启动建设，到2025年完成建设投入使用。到时候，会提供以下基本测试验证和开发能力&lt;sup&gt;&lt;a id=&quot;fnr.2&quot; class=&quot;footref&quot; href=&quot;#fn.2&quot;&gt;2&lt;/a&gt;&lt;/sup&gt;：
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;Materials synthesis and processing&lt;/li&gt;
&lt;li&gt;In-operando characterization&lt;/li&gt;
&lt;li&gt;Small-scale cell fabrication&lt;/li&gt;
&lt;li&gt;KW-scale testing and validation&lt;/li&gt;
&lt;li&gt;Advanced prototyping&lt;/li&gt;
&lt;li&gt;Analytics and visualization&lt;/li&gt;
&lt;li&gt;Standards development&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
3月3日，英国提出了名为Longer Duration Energy Storage Demonstration的创新计划。
&lt;/p&gt;

&lt;p&gt;
英国计划在2025年3月之前，投入6800万英镑，约6.16亿人民币，用以支持电力、热能和Power-to-X&lt;sup&gt;&lt;a id=&quot;fnr.3&quot; class=&quot;footref&quot; href=&quot;#fn.3&quot;&gt;3&lt;/a&gt;&lt;/sup&gt;等能灵活接入电网的长期低成本储能技术。方案计划通过2种方式进行资助：1）通过补助资金（grant funding）的方式，支持技术技术成熟度为6级的项目；2）通过小企业研发倡议（Small Business
Research Initiative）方式，支持技术成熟度为4-5级的项目。
&lt;/p&gt;

&lt;p&gt;
电网储能技术，未来一定有比较好的发展前景。随着电池的材料技术提升，长寿命、高容量、稳定可靠、快速响应、低成本的电池技术发展，在电网储能领域会有很广阔的应用前景。
&lt;/p&gt;
&lt;div id=&quot;footnotes&quot;&gt;
&lt;h2 class=&quot;footnotes&quot;&gt;Footnotes: &lt;/h2&gt;
&lt;div id=&quot;text-footnotes&quot;&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.1&quot; class=&quot;footnum&quot; href=&quot;#fnr.1&quot;&gt;1&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;https://www.energy.gov/articles/doe-launches-design-construction-75-million-grid-energy-storage-research-facility&quot;&gt;https://www.energy.gov/articles/doe-launches-design-construction-75-million-grid-energy-storage-research-facility&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.2&quot; class=&quot;footnum&quot; href=&quot;#fnr.2&quot;&gt;2&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;https://www.pnnl.gov/grid-storage-launchpad-pnnl&quot;&gt;https://www.pnnl.gov/grid-storage-launchpad-pnnl&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.3&quot; class=&quot;footnum&quot; href=&quot;#fnr.3&quot;&gt;3&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
Power-to-X指的是将多余的电能转化为长期储存的氢或甲烷等化学能源的各种技术。
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;


&lt;/div&gt;
&lt;/div&gt;
</content>
 </entry>
 
 <entry>
   <title>单词本：Esprit de corps</title>
   <link href="http://kimi.im/2021-03-12-francais-esprit-de-corps"/>
   <updated>2021-03-12T00:00:00+00:00</updated>
   <id>http://kimi.im/francais-esprit-de-corps</id>
   <content type="html">&lt;p&gt;
继续昨天的话题，最近在学管理学基础知识。在管理学中，有一个流派，叫general
administrative theory，即一般行政管理理论。
&lt;/p&gt;

&lt;p&gt;
这个理论的提出者是 Henri Fayol，翻译为亨利·法约尔。Fayol于1841年出生于一个法国家庭。最早是一个挖矿公司的工程师，1888年升为公司的总经理。结合自己的管理经验，在
1916年发表了一本书叫《Industrial and General Management》（工业管理和一般管理）。
&lt;/p&gt;

&lt;p&gt;
法约尔的研究是从“办公桌前的总经理”的角度出发，以企业整体作为研究对象。他认为，管理理论是“指有关管理的、得到普遍承认的理论，是经过普遍经验检验并得到论证的一套有关原则、标准、方法、程序等内容的完整体系”。有关管理的理论和方法不仅适用于公私企业，也适用于军政机关和社会团体。这正是其一般管理理论的基石。
&lt;/p&gt;

&lt;p&gt;
其核心理论是14条管理原则（14 principles of management）：
&lt;/p&gt;
&lt;ol class=&quot;org-ol&quot;&gt;
&lt;li&gt;劳动分工原则&lt;/li&gt;
&lt;li&gt;权力与责任原则&lt;/li&gt;
&lt;li&gt;纪律原则&lt;/li&gt;
&lt;li&gt;统一指挥原则&lt;/li&gt;
&lt;li&gt;统一领导原则&lt;/li&gt;
&lt;li&gt;个人利益服从整体利益的原则&lt;/li&gt;
&lt;li&gt;公平合理的人员的报酬原则&lt;/li&gt;
&lt;li&gt;适合企业的权利集中原则&lt;/li&gt;
&lt;li&gt;等级制度原则&lt;/li&gt;
&lt;li&gt;秩序原则&lt;/li&gt;
&lt;li&gt;公平原则&lt;/li&gt;
&lt;li&gt;人员的稳定原则&lt;/li&gt;
&lt;li&gt;鼓励自主首创精神&lt;/li&gt;
&lt;li&gt;团队精神原则（esprit de corps）&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;
好了，写了这么多，本文的重点终于出现了，就是这个“esprit de corps”，法国家庭出生的法约尔用这个法语词组表示团队精神，团结一致。
&lt;/p&gt;

&lt;p&gt;
按照Merriam-Webster词典定义&lt;sup&gt;&lt;a id=&quot;fnr.1&quot; class=&quot;footref&quot; href=&quot;#fn.1&quot;&gt;1&lt;/a&gt;&lt;/sup&gt;：
&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;
the common spirit existing in the members of a group and inspiring enthusiasm,
devotion, and strong regard for the honor of the group
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;
l&apos;esprit 是法语精神的意思，corps 是身体，团体的意思。合在一起就是团队精神。
&lt;/p&gt;

&lt;p&gt;
所以，平时咱们可以说 teamwork，或者 team spirit。如果写邮件，或书面表达的时候，偶尔用下 esprit de corps，会显得你的英语学得比较高雅哦。
&lt;/p&gt;

&lt;p&gt;
例句：Working and collaborating together builds a camaraderie and esprit de corps.
&lt;/p&gt;

&lt;p&gt;
不过，注意了，不要按照英语发音来读这个词组，要用法语发音 [ɛˈspriːdəˈkɔː] 爱斯普丽得靠。
&lt;/p&gt;
&lt;div id=&quot;footnotes&quot;&gt;
&lt;h2 class=&quot;footnotes&quot;&gt;Footnotes: &lt;/h2&gt;
&lt;div id=&quot;text-footnotes&quot;&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.1&quot; class=&quot;footnum&quot; href=&quot;#fnr.1&quot;&gt;1&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;https://www.merriam-webster.com/dictionary/esprit%20de%20corps&quot;&gt;https://www.merriam-webster.com/dictionary/esprit%20de%20corps&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;


&lt;/div&gt;
&lt;/div&gt;
</content>
 </entry>
 
 <entry>
   <title>单词本：therblig</title>
   <link href="http://kimi.im/2021-03-11-english-therblig"/>
   <updated>2021-03-11T00:00:00+00:00</updated>
   <id>http://kimi.im/english-therblig</id>
   <content type="html">&lt;p&gt;
最近在学习管理学的一些基础知识，看到一个有趣的单词：therblig
&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;
a basic unit of work in an industrial process used to analyse and achieve
economy of motion
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;
这个单词，我试着将它翻译成“色不异空”。
&lt;/p&gt;

&lt;p&gt;
言归正传，这个词指的是什么呢？其实 therblig 指的是工业生产过程中，工人进行手工作业的基本运动单位。比如说，搜寻、抓取、摆放等。这个奇怪的单词来自一对夫妇的姓氏。他们是弗兰克·吉尔布雷斯和莉莲·吉尔布雷斯。
&lt;/p&gt;

&lt;p&gt;
弗兰克·吉尔布雷斯（Frank Bunker Gilbreth，1868-1924），出生于美国缅因州费尔菲尔德，在安得福学院和波士顿学院学满后毕业并进入建筑行业，之后在设计了一种新的脚手架和发明了建造防水地窖的新方法。1895年，他在波士顿登记了自己的建筑公司，取得了辉煌的成就。在一次参加Taylor的演讲之后，决定放弃建筑学，开始研究管理学，被誉为“动作研究之父”。
&lt;/p&gt;

&lt;p&gt;
莉莲·吉尔布雷斯(1878—1972)心理学家和管理学家，是弗兰克·吉尔布雷斯的夫人，也是美国第一个获得心理学博士的女士，被称为“管理第一夫人”。原名叫做莉莲·莫勒，出生于美国加利福尼亚的奥克兰，毕业于加利福尼亚大学的英语系。为了同丈夫合作研究，她改学了心理学。莉莲·吉尔布雷斯是一位非常了不起的女性，在抚养12个孩子的繁忙家务劳动之余，潜心于管理心理学的研究，并写成了著作《管理心理学》。1924年，当弗兰克·吉尔布雷斯辞世后，她接替了丈夫的工作，并且使自己也成为工业界的一个榜样。在1938年评选的“有行使美国总统权力才能”的12位妇女中，莉莲·吉尔布雷斯榜上有名。1944年，《加利福尼亚月刊》评论道：“莉莲是一位天才。”
&lt;/p&gt;

&lt;p&gt;
他们俩设计了一个叫做 microchronometer 的精密记时装置用来测量工人的作业动作。最后梳理出最基本的17个手工作业操作，用自己姓氏反过来的单词 therblig 命名。
&lt;/p&gt;

&lt;p&gt;
有了 therblig，他们就可以精确分析工人操作动作的好坏，规避浪费的时间，提升生产效率。
&lt;/p&gt;

&lt;p&gt;
我想，工人们一定很讨厌他们……
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>单词本：碳中和</title>
   <link href="http://kimi.im/2021-03-06-english-carbon-neutrality"/>
   <updated>2021-03-06T00:00:00+00:00</updated>
   <id>http://kimi.im/english-carbon-neutrality</id>
   <content type="html">&lt;p&gt;
2021年政府工作报告中指出，中国将“扎实做好碳达峰、碳中和各项工作。制定2030年前碳排放达峰行动方案。”“中国作为地球村的一员，将以实际行动为全球应对气候变化作出应有贡献。”
&lt;/p&gt;

&lt;p&gt;
“碳达峰”就是中国承诺在2030年前，二氧化碳温室气体的排放不再增长，达到峰值之后再慢慢减下去；而到2060年，针对排放的二氧化碳，要通过采取植树、节能减排等各种方式全部抵消掉，这就是“碳中和”。
&lt;/p&gt;

&lt;p&gt;
法语 La neutralité carbone, c&apos;est « l&apos;équilibre entre les émissions
de carbone et l&apos;absorption du carbone de l&apos;atmosphère par les puits
de carbone »&lt;sup&gt;&lt;a id=&quot;fnr.1&quot; class=&quot;footref&quot; href=&quot;#fn.1&quot;&gt;1&lt;/a&gt;&lt;/sup&gt; 德语 CO2-Neutralität.
&lt;/p&gt;

&lt;p&gt;
英语 Carbon Neutral(Carbon Neutrality) - or Net Zero Carbon.  It is
a term used to describe the state of an entity (such as a company,
service, product or event, in the goverment report, the entity is a
country), where the carbon emissions caused by them have been
balanced out by funding an equivalent amount of carbon savings
elsewhere in the world.  These savings are generated through helping
to fund renewable energy projects and energy efficiency projects, as
a result to reduce greenhouse gases.
&lt;/p&gt;

&lt;p&gt;
随着环保大众环保意识的提升，一个企业宣称其产品遵循碳中和策略，可以提升其品牌知名度，获得更好的市场好感。
&lt;/p&gt;

&lt;p&gt;
至于，减少二氧化碳的手段有：
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;碳封存 carbon sequenstration，主要通过土壤，森林海洋等天然碳收纳（natural carbon sink）吸收存储空气中的二氧化碳。&lt;/li&gt;
&lt;li&gt;碳抵消 carbon offset，通过可再生能源和节能技术减少一个行业的碳排放量从而抵消另一个行业的碳排放量。抵消的量以二氧化碳当量吨数 carbon
dioxide-equivalent计算。&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
碳中和需要各行各业共同努力才能达到，正如联合国秘书长 António
Guterres 说的 « La volonté d&apos;atteindre la neutralité carbone doit
devenir la nouvelle norme pour tout le monde, partout - pour chaque
pays, entreprise, ville et institution financière, ainsi que pour
des secteurs clés tels que l&apos;aviation, le transport maritime,
l&apos;industrie et l&apos;agriculture.  Tous les engagements en faveur de la
neutralité carbone doivent être appuyés par des plans clairs et
crédibles pour les atteindre ».
&lt;/p&gt;
&lt;div id=&quot;footnotes&quot;&gt;
&lt;h2 class=&quot;footnotes&quot;&gt;Footnotes: &lt;/h2&gt;
&lt;div id=&quot;text-footnotes&quot;&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.1&quot; class=&quot;footnum&quot; href=&quot;#fnr.1&quot;&gt;1&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;https://www.hellocarbo.com/blog/calculer/la-neutralite-carbone/&quot;&gt;https://www.hellocarbo.com/blog/calculer/la-neutralite-carbone/&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;


&lt;/div&gt;
&lt;/div&gt;
</content>
 </entry>
 
 <entry>
   <title>Ferdinand 公牛历险记</title>
   <link href="http://kimi.im/2021-03-06-Ferdinand"/>
   <updated>2021-03-06T00:00:00+00:00</updated>
   <id>http://kimi.im/Ferdinand</id>
   <content type="html">&lt;p&gt;
晚上看了一本开心动画《Ferdinand 公牛历险记》。小公牛斐迪南是一头黑色的小斗牛，从小和别的斗牛不一样，他不爱打斗，爱鲜花。最后，用自己的方式，打败了斗牛大师。
&lt;/p&gt;

&lt;p&gt;
细节经不起推敲，不过看得很欢乐。鲜花总比鲜血来的美好。斗牛据说在西班牙也受到很多人排斥。刚好，今天看到朋友圈转发，有个男医生，妻子怀孕三个月，把爱犬送到岳母家养着，没想到，直接被宰了吃掉。妻子觉得问题不大。实在觉得，三观不合，平静离婚。这其中，动物与人的关系值得思考。相伴的动物，确实如家人一般。被人吃掉，想起来，确实会很无法接受。
&lt;/p&gt;

&lt;p&gt;
不过，一部动画片，能够很好的表达爱、友情、正直、勇敢就很不错啦。看完，能够有些正能量，好好生活。
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>在 macOS 上安装 Rust</title>
   <link href="http://kimi.im/2021-02-16-rustup-macos"/>
   <updated>2021-02-16T00:00:00+00:00</updated>
   <id>http://kimi.im/rustup-macos</id>
   <content type="html">&lt;p&gt;
安装 rust 最快的方式是通过 rustup 管理工具链。首先下载安装脚本，安装 Rust：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-shell&quot;&gt;curl https://sh.rustup.rs -sSf | sh
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
脚本下载好后，会跳出以下界面，选择1默认安装。
&lt;/p&gt;

&lt;pre class=&quot;example&quot;&gt;
You can uninstall at any time with rustup self uninstall and
these changes will be reverted.

Current installation options:


   default host triple: x86_64-apple-darwin
     default toolchain: stable (default)
               profile: default
  modify PATH variable: yes

1) Proceed with installation (default)
2) Customize installation
3) Cancel installation
&amp;gt;1
&lt;/pre&gt;

&lt;p&gt;
会在 &lt;code&gt;/Users/kimim/.cargo/bin&lt;/code&gt; 下添加执行文件。在以下配置文件中修改 &lt;code&gt;PATH&lt;/code&gt; 环境变量：
&lt;/p&gt;

&lt;pre class=&quot;example&quot;&gt;
/Users/kimim/.profile
/Users/kimim/.bash_profile
/Users/kimim/.zshenv
&lt;/pre&gt;

&lt;p&gt;
然后，运行以下命令，在当前 shell 添加 rust 的路径：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-shell&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;source&lt;/span&gt; $&lt;span style=&quot;color: #000000;&quot;&gt;HOME&lt;/span&gt;/.cargo/env
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
这样， rustc 就已经可以用了：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-shell&quot;&gt;% rustc --version
rustc 1.50.0 (cb75ad5db 2021-02-10)
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
用 cargo 创建一个 Hello World 项目：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-shell&quot;&gt;cargo new helloworld
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;cd&lt;/span&gt; helloworld
cargo run
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
执行结果如下：
&lt;/p&gt;

&lt;pre class=&quot;example&quot;&gt;
    Finished dev [unoptimized + debuginfo] target(s) in 0.00s
     Running `target/debug/rust-hello`
Hello, world!
&lt;/pre&gt;

&lt;p&gt;
在 Emacs 配置文件中添加：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-emacs-lisp&quot;&gt;(&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;use-package&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;rustic&lt;/span&gt;)
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
这样，就能在 Emacs 里写 Rust 代码了。
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>在 Windows 上安装 Rust</title>
   <link href="http://kimi.im/2021-02-16-rust-windows-cygwin"/>
   <updated>2021-02-16T00:00:00+00:00</updated>
   <id>http://kimi.im/rust-windows-cygwin</id>
   <content type="html">&lt;p&gt;
首先，要从 &lt;a href=&quot;https://rustup.rs/&quot;&gt;https://rustup.rs/&lt;/a&gt; 下载 &lt;code&gt;rustup-init.exe&lt;/code&gt; ，执行该程序，跳出以下字符界面，要求我们安装 Visual C++。如果有 Cygwin 下已经有了 g++，那就可以跳过 Visual
C++ 的安装了。在 &lt;code&gt;Continues?&lt;/code&gt; 处选择 Y，回车：
&lt;/p&gt;

&lt;pre class=&quot;example&quot; id=&quot;org4ebe557&quot;&gt;
Rust Visual C++ prerequisites

Rust requires the Microsoft C++ build tools for Visual Studio 2013 or
later, but they don&apos;t seem to be installed.

The easiest way to acquire the build tools is by installing Microsoft
Visual C++ Build Tools 2019 which provides just the Visual C++ build
tools:

  https://visualstudio.microsoft.com/visual-cpp-build-tools/

Please ensure the Windows 10 SDK and the English language pack components
are included when installing the Visual C++ Build Tools.

Alternately, you can install Visual Studio 2019, Visual Studio 2017,
Visual Studio 2015, or Visual Studio 2013 and during install select
the &quot;C++ tools&quot;:

  https://visualstudio.microsoft.com/downloads/

Install the C++ build tools before proceeding.

If you will be targeting the GNU ABI or otherwise know what you are
doing then it is fine to continue installation without the build
tools, but otherwise, install the C++ build tools before proceeding.

Continue? (Y/n) Y
&lt;/pre&gt;

&lt;p&gt;
在下一个提示界面，选择 Customize installation：
&lt;/p&gt;

&lt;pre class=&quot;example&quot; id=&quot;orga3a7564&quot;&gt;
Welcome to Rust!

This will download and install the official compiler for the Rust
programming language, and its package manager, Cargo.

Rustup metadata and toolchains will be installed into the Rustup
home directory, located at:

  C:\Users\kimim\.rustup

This can be modified with the RUSTUP_HOME environment variable.

The Cargo home directory located at:

  C:\Users\kimim\.cargo

This can be modified with the CARGO_HOME environment variable.

The cargo, rustc, rustup and other commands will be added to
Cargo&apos;s bin directory, located at:

  C:\Users\kimim\.cargo\bin

This path will then be added to your PATH environment variable by
modifying the HKEY_CURRENT_USER/Environment/PATH registry key.

You can uninstall at any time with rustup self uninstall and
these changes will be reverted.

Current installation options:


   default host triple: x86_64-pc-windows-msvc
     default toolchain: stable (default)
               profile: default
  modify PATH variable: yes

1) Proceed with installation (default)
2) Customize installation
3) Cancel installation
&amp;gt;2
&lt;/pre&gt;

&lt;p&gt;
接下来，在 &lt;code&gt;Default host triple?&lt;/code&gt; 处输入 &lt;code&gt;x86_64-pc-windows-gnu&lt;/code&gt; 。其他选项都用默认 &lt;code&gt;default&lt;/code&gt;
&lt;/p&gt;

&lt;pre class=&quot;example&quot; id=&quot;orgd079bed&quot;&gt;
I&apos;m going to ask you the value of each of these installation options.
You may simply press the Enter key to leave unchanged.

Default host triple?
x86_64-pc-windows-gnu

Default toolchain? (stable/beta/nightly/none)
stable

Profile (which tools and data to install)? (minimal/default/complete)
default

Modify PATH variable? (y/n)
y
&lt;/pre&gt;

&lt;p&gt;
最后，回到安装选项界面，选择 1 进行安装：
&lt;/p&gt;

&lt;pre class=&quot;example&quot; id=&quot;orgbd50c12&quot;&gt;
Current installation options:


   default host triple: x86_64-pc-windows-gnu
     default toolchain: stable
               profile: default
  modify PATH variable: yes

1) Proceed with installation (default)
2) Customize installation
3) Cancel installation
&amp;gt;1
&lt;/pre&gt;

&lt;p&gt;
然后就会下载一堆程序和文档到 &lt;code&gt;C:\Users\kimim\.cargo&lt;/code&gt;
&lt;/p&gt;

&lt;p&gt;
将以下PATH加入到 &lt;code&gt;~/.bash_profile&lt;/code&gt;:
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-shell&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;export&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;PATH&lt;/span&gt;=/cygdrive/c/Users/kimim/.cargo/bin/:$&lt;span style=&quot;color: #000000;&quot;&gt;PATH&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
测试 Hello World：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-example&quot;&gt;$ cargo new helloworld
     Created binary (application) `helloworld` package

$ cd helloworld/
$ cargo run
   Compiling helloworld v0.1.0 (C:\Users\kimim\home\workspace\helloworld)
    Finished dev [unoptimized + debuginfo] target(s) in 1.01s
     Running `target\debug\helloworld.exe`
Hello, world!
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
不过，配合 cygwin Emacs 的 rust-analyzer LSP server 似乎有些问题。可能是 cygpath
和 windows 文件路径不一致导致。暂时不知道怎么办。或许还是在 WSL 上用比较方便。
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>I am going to live every minute of it</title>
   <link href="http://kimi.im/2021-02-11-live-every-minute"/>
   <updated>2021-02-11T00:00:00+00:00</updated>
   <id>http://kimi.im/live-every-minute</id>
   <content type="html">&lt;p&gt;
今天是鼠年的除夕。我们去看了迪斯尼电影《Soul》（心灵奇旅）。中年男
Joe Gardner过着单调乏味的人生，生活在世界最繁华的都市纽约，干着一份“无趣”的工作，怀揣着童年的爵士乐梦想，却始终无法触及。经历了灵魂出窍，遇到了千年老魂二十二号，终于互相找到了生活的意义。一早出门，迎着阳光，说出了简单，却充满力量的那句话： I am going to live every minute of
it.（我要过好人生的每一分钟）。
&lt;/p&gt;

&lt;p&gt;
这部电影，对经历了2020年世纪疫情的人们来说，充满了启发。人生的每一分钟，几个人真的活好过？爵士音乐人Dorothea在Joe第一次表演登台表演后，惘然若失的时候，给他讲了个鱼和大海的故事： I heard this story about
a fish. He swims up to this older fish and says, &quot;I&apos;m trying to find
this thing they call the ocean.&quot; &quot;The ocean?&quot; says the older fish,
&quot;that&apos;s what you&apos;re in right now.&quot; &quot;This?&quot; says the younger fish,
&quot;This is water. What I want is the ocean.&quot; 就好像，有的人会说一些有的没的的话，拥有一辆法拉利才叫人生，住上一线江景豪宅才叫人生。人生在别处。Ohlala，c&apos;est la vie! 老人们可能会说，孩子，你现在过得就是最好的人生时光啊。
&lt;/p&gt;

&lt;p&gt;
是啊，阳光，细雨，金色的银杏叶，飘落的榆树种子，挂在连廊上的紫藤豆荚，以及摔裂的紫藤豆荚里蹦出的铜钱般的种子，在一颗好奇的心灵看来，都是那么惊喜那么美好的事物。
&lt;/p&gt;

&lt;p&gt;
二十二号，尽管来到地球之前，看似“看透了”人生。但是有很好的感受力和好奇心，不正像我们童年的灵魂么？虽然手脚都还不协调，总是出乱子，对美食、音乐、生活的小意外却敞开着心扉，能感受到此时此刻的美好生活。
&lt;/p&gt;

&lt;p&gt;
然而，随着年岁的增长，人们的心灵蒙上了满满的黑灰色的成见，迷失了自己的追求，成为了迷路的灵魂。有的迷失在指数的上下波动，有的迷失在寻找金矿，还有的开着奥迪A6顺风车游荡在阿里巴巴附近。电影中，迷失的灵魂可能会有幸遇到超脱的灵魂，驾驶着救赎的船，帮他找回自我。而现实中，大部分人要靠自己的不断自我反思，找回灵魂中的纯粹。
&lt;/p&gt;

&lt;p&gt;
庄子说过：庸也者，用也；用也者，通也；通也者，得也。人生的真理就在平常日用之中，过好每一刻，安顿好自己的心灵，就是通达得道的人了。
&lt;/p&gt;

&lt;p&gt;
看似简单一句过好人生每一分钟。其实背后是顿悟、是经历那不得不经历的事情，是置之死地而后生的透彻，才能爱上这平常日用的生活啊。
&lt;/p&gt;

&lt;p&gt;
2021年的每一分钟，你打算怎么过？
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>技术和管理方向</title>
   <link href="http://kimi.im/2021-02-10-tech-vs-management"/>
   <updated>2021-02-10T00:00:00+00:00</updated>
   <id>http://kimi.im/tech-vs-management</id>
   <content type="html">&lt;p&gt;
技术和管理的发展方向，其实是贯通的。不可能没有技术，仅有管理。也不可能仅做技术，不用管理。随着工作的发展，两者必定要融合。
&lt;/p&gt;

&lt;p&gt;
技术方向，2021年，我想做这些事情：
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;阅读理解clojure的代码实现&lt;/li&gt;
&lt;li&gt;继续完善clj-djl&lt;/li&gt;
&lt;li&gt;学习rust和c++，并开发一些应用&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
管理方向：
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;完善项目管理方法论和文档模板&lt;/li&gt;
&lt;/ul&gt;
</content>
 </entry>
 
 <entry>
   <title>Handle date time from Excel in clojure</title>
   <link href="http://kimi.im/2021-02-01-clojure-handles-excel-data-time"/>
   <updated>2021-02-01T00:00:00+00:00</updated>
   <id>http://kimi.im/clojure-handles-excel-data-time</id>
   <content type="html">&lt;p&gt;
Date and time is stored in excel as integer of float64 value. When you read them
in clojure, you need to convert it to date/date-time object.
&lt;/p&gt;

&lt;p&gt;
For example, &quot;2020-11-17T08:09:10.000&quot; is stored as 44152.33969907 in Excel low
level.
&lt;/p&gt;

&lt;p&gt;
You can use &lt;code&gt;cljc.java-time&lt;/code&gt; &lt;sup&gt;&lt;a id=&quot;fnr.1&quot; class=&quot;footref&quot; href=&quot;#fn.1&quot;&gt;1&lt;/a&gt;&lt;/sup&gt; to handle date and date time values.
&lt;/p&gt;

&lt;p&gt;
Firstly, add the deps.
&lt;/p&gt;

&lt;p&gt;
clj deps.edn:
&lt;/p&gt;
&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-clojure&quot;&gt;{&lt;span style=&quot;color: #110099;&quot;&gt;:deps&lt;/span&gt;
 {&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;cljc.java-time&lt;/span&gt;/cljc.java-time               {&lt;span style=&quot;color: #110099;&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;mvn&lt;/span&gt;&lt;span style=&quot;color: #000000; background-color: #ffffff;&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color: #110099;&quot;&gt;version&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;0.1.15&quot;&lt;/span&gt;}}}
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
or leiningen project.clj:
&lt;/p&gt;
&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-clojure&quot;&gt;(&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;defproject&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;excel-test&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;0.0.1&quot;&lt;/span&gt;
  &lt;span style=&quot;color: #110099;&quot;&gt;:dependencies&lt;/span&gt; [[cljc.java-time &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;0.1.15&quot;&lt;/span&gt;]])
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
You can use the latest version:
&lt;/p&gt;


&lt;div class=&quot;figure&quot;&gt;
&lt;p&gt;&lt;a href=&quot;https://clojars.org/cljc.java-time&quot;&gt;&lt;object type=&quot;image/svg+xml&quot; data=&quot;https://clojars.org/cljc.java-time/latest-version.svg&quot; class=&quot;org-svg&quot;&gt;
Sorry, your browser does not support SVG.&lt;/object&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;/div&gt;

&lt;p&gt;
Then let&apos;s calculate the 44152 or 44152.33969907 in local date or local date time.
&lt;/p&gt;

&lt;p&gt;
There are a couple of additional caveats to be aware of before we try to convert
the dates:
&lt;/p&gt;

&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;Excel counts 1900-01-01 as day 1 in it’s serial calculation, so you need to
ensure you are counting this extra day in any date difference calculations.&lt;/li&gt;
&lt;li&gt;The Excel date serial is off by 1, as it behaves as if 1900-02-29
existed. This is due to a compatibility issue with Lotus 123 back when Excel
was released and is a known issue&lt;sup&gt;&lt;a id=&quot;fnr.2&quot; class=&quot;footref&quot; href=&quot;#fn.2&quot;&gt;2&lt;/a&gt;&lt;/sup&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
This means that the Excel date serial for a given day is off by 2 compared to
the actual amount of days that have elapsed since 1900-01-01.&lt;sup&gt;&lt;a id=&quot;fnr.3&quot; class=&quot;footref&quot; href=&quot;#fn.3&quot;&gt;3&lt;/a&gt;&lt;/sup&gt; Thus, you
can calculate the date base on 1899-12-30.
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-clojure&quot;&gt;(require &apos;[cljc.java-time.local-date &lt;span style=&quot;color: #110099;&quot;&gt;:as&lt;/span&gt; ld]
         &apos;[cljc.java-time.local-date-time &lt;span style=&quot;color: #110099;&quot;&gt;:as&lt;/span&gt; ldt]
         &apos;[cljc.java-time.temporal.chrono-unit &lt;span style=&quot;color: #110099;&quot;&gt;:as&lt;/span&gt; chrono-unit])

(&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;-&amp;gt;&lt;/span&gt; (&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;ld&lt;/span&gt;/parse &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;1899-12-30&quot;&lt;/span&gt;)
    (&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;ld&lt;/span&gt;/plus-days
     44152))
&lt;span style=&quot;color: #3F7F5F;&quot;&gt;;; &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;=&amp;gt; #object[java.time.LocalDate 0x499f935c &quot;2020-11-17&quot;]&lt;/span&gt;

(&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;-&amp;gt;&lt;/span&gt; (&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;ldt&lt;/span&gt;/parse &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;1899-12-30T00:00:00.000&quot;&lt;/span&gt;)
    (&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;ldt&lt;/span&gt;/plus-nanos
     (* 1e9 60 60 24 44152.33969907))
    (&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;ldt&lt;/span&gt;/truncated-to &lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;chrono-unit&lt;/span&gt;/millis))
&lt;span style=&quot;color: #3F7F5F;&quot;&gt;;; &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;=&amp;gt; #object[java.time.LocalDateTime 0x7e8f1e44 &quot;2020-11-17T08:09:09.999&quot;]&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;footnotes&quot;&gt;
&lt;h2 class=&quot;footnotes&quot;&gt;Footnotes: &lt;/h2&gt;
&lt;div id=&quot;text-footnotes&quot;&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.1&quot; class=&quot;footnum&quot; href=&quot;#fnr.1&quot;&gt;1&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;https://github.com/henryw374/cljc.java-time&quot;&gt;https://github.com/henryw374/cljc.java-time&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.2&quot; class=&quot;footnum&quot; href=&quot;#fnr.2&quot;&gt;2&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;https://docs.microsoft.com/en-us/office/troubleshoot/excel/wrongly-assumes-1900-is-leap-year&quot;&gt;https://docs.microsoft.com/en-us/office/troubleshoot/excel/wrongly-assumes-1900-is-leap-year&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.3&quot; class=&quot;footnum&quot; href=&quot;#fnr.3&quot;&gt;3&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;https://ryanmaclean365.com/2020/07/28/converting-excel-date-time-serial-values-with-power-automate/&quot;&gt;https://ryanmaclean365.com/2020/07/28/converting-excel-date-time-serial-values-with-power-automate/&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;


&lt;/div&gt;
&lt;/div&gt;
</content>
 </entry>
 
 <entry>
   <title>在 Windows WSL2 中安装 Manjaro 通过 XServer 使用 Emacs</title>
   <link href="http://kimi.im/2021-01-28-emacs-inside-manjaro-wsl2-windows"/>
   <updated>2021-01-28T00:00:00+00:00</updated>
   <id>http://kimi.im/emacs-inside-manjaro-wsl2-windows</id>
   <content type="html">&lt;p&gt;
一直在 Cygwin 中的 Emacs-w32 这个版本的 Emacs ，用的也都好好的。可是因为公司强制安装了360杀毒软件，这下麻烦大了，Emacs 中访问文件的速度变得出奇的慢，慢到无法忍受。
&lt;/p&gt;

&lt;p&gt;
本来就已经很慢了，一直忍受着硬着头皮用着。现在实在是慢的没法用了。于是安装
Ubuntu 双系统，规避杀毒软件。可是，Ubuntu在我这个 Dell 工作站上时不时显示卡住，重启才行。
&lt;/p&gt;

&lt;p&gt;
所以想着在 Ubuntu 下，安装个 Gentoo ，可能用起来会舒服些。然而给硬盘分区的时候，把系统分区搞坏了。只能回到 Windows 了。确实，有些办公软件，还是要用 Windows 的。这时候，发现了 WSL 这个好东西。即 Windows Subsystem Linux ，已经升级到 WSL2 了。
&lt;/p&gt;

&lt;p&gt;
以下记录下，Emacs 在 WSL2 中的 Manjaro 里配置的过程。
&lt;/p&gt;

&lt;div id=&quot;outline-container-org201a81d&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;org201a81d&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;1&lt;/span&gt; 安装 WSL Manjaro&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-1&quot;&gt;
&lt;p&gt;
首先，去这个地址 &lt;a href=&quot;https://github.com/sileshn/ManjaroWSL/releases&quot;&gt;https://github.com/sileshn/ManjaroWSL/releases&lt;/a&gt; ，选最新的
ManjaroWSL release 即可。
&lt;/p&gt;

&lt;p&gt;
然后，找个地方解压。解压出来，就两个文件，一个是用来配置的主程序，还有个 Manjaro
的根文件系统。
&lt;/p&gt;

&lt;pre class=&quot;example&quot;&gt;
  -rwxrwxrwx 1 209K Jan 27 17:13 Manjaro.exe
  -rwxrwxrwx 1 364M Jan 27 17:13 rootfs.tar.gz
&lt;/pre&gt;

&lt;p&gt;
参考安装说明，进行安装。
&lt;/p&gt;

&lt;p&gt;
打开 cmd 执行：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-shell&quot;&gt;wsl --set-default-version 2 &lt;span style=&quot;color: #3F7F5F;&quot;&gt;# &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;&amp;#35774;&amp;#32622; wsl &amp;#29256;&amp;#26412;&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;cd&lt;/span&gt; &amp;lt;&amp;#21018;&amp;#35299;&amp;#21387;&amp;#30340; Manjaro.exe &amp;#25152;&amp;#22312;&amp;#30340;&amp;#25991;&amp;#20214;&amp;#22841;&amp;gt;
Manjaro.exe                 &lt;span style=&quot;color: #3F7F5F;&quot;&gt;# &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;&amp;#36816;&amp;#34892; Manjaro.exe&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
完了之后，再执行 Manjaro.exe 就进入 Manjaro Linux 了。就是这么简单。
&lt;/p&gt;

&lt;p&gt;
接下来，在 Manjaro 的 shell 下执行（以 kimim 用户为例）：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-shell&quot;&gt;useradd -m -G wheel -s /bin/bash kimim
passwd kimim    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;# &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;&amp;#36755;&amp;#20837;&amp;#20004;&amp;#27425;&amp;#23494;&amp;#30721;&amp;#65292;&amp;#35774;&amp;#32622; kimim &amp;#29992;&amp;#25143;&amp;#23494;&amp;#30721;&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;exit&lt;/span&gt;            &lt;span style=&quot;color: #3F7F5F;&quot;&gt;# &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;&amp;#36864;&amp;#20986;&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
接着，在 cmd 中，设置使用 WSL Manjaro 的默认用户名：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-shell&quot;&gt;Manjaro.exe config --default-user kimim
&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-org890a725&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;org890a725&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;2&lt;/span&gt; 进入 WSL Manjaro Linux&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-2&quot;&gt;
&lt;p&gt;
登录 Manjaro 后，通过可爱的 pacman 安装 Emacs:
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-shell&quot;&gt;sudo pacman -S emacs
&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgabdad3e&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgabdad3e&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;3&lt;/span&gt; 设置 XServer&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-3&quot;&gt;
&lt;p&gt;
同时，可以下载 VCXSRV ：&lt;a href=&quot;https://sourceforge.net/projects/vcxsrv/&quot;&gt;https://sourceforge.net/projects/vcxsrv/&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
安装在 Windows 上。接着，找到桌面上的 XLaunch ，右键打开属性菜单，在“兼容性”这一个选项中，点击“更改高 DPI 设置”。
&lt;/p&gt;

&lt;p&gt;
然后，双击 XLaunch LOGO 运行它。
&lt;/p&gt;

&lt;p&gt;
选择：
&lt;/p&gt;
&lt;ol class=&quot;org-ol&quot;&gt;
&lt;li&gt;Multiple Windows&lt;/li&gt;
&lt;li&gt;Display number -1&lt;/li&gt;
&lt;li&gt;Start no client&lt;/li&gt;
&lt;li&gt;Clipboard&lt;/li&gt;
&lt;li&gt;Primary Selection&lt;/li&gt;
&lt;li&gt;Native opengl&lt;/li&gt;
&lt;li&gt;Disable access control&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgf43ff6a&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgf43ff6a&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;4&lt;/span&gt; 运行 Emacs&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-4&quot;&gt;
&lt;p&gt;
等 Emacs 安装好之后，按照 &lt;a href=&quot;https://github.com/kimim/kimim-emacs&quot;&gt;https://github.com/kimim/kimim-emacs&lt;/a&gt; 的说明。
&lt;/p&gt;

&lt;p&gt;
下载字体：
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;&lt;a href=&quot;https://fonts.google.com/specimen/Inconsolata&quot;&gt;https://fonts.google.com/specimen/Inconsolata&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/loseblue/yaheiInconsolata.ttf&quot;&gt;https://github.com/loseblue/yaheiInconsolata.ttf&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
在 Manjaro shell 里将字体移到 &lt;code&gt;/usr/local/share/fonts/&lt;/code&gt; 下。
&lt;/p&gt;

&lt;p&gt;
然后：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-shell&quot;&gt;git clone https://github.com/kimim/kimim-emacs &amp;amp;&amp;amp; &lt;span style=&quot;color: #2A00FF;&quot;&gt;\&lt;/span&gt;
cp kimim-emacs/.emacs ~
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
刚刚前面，通过 XLaunch 启动了一个 XServer，需要在 Manjaro shell 中设置下 DISPLAY
环境变量。在 &lt;code&gt;~/.bash_profile&lt;/code&gt; 最后面加上一行：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-shell&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;export&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;DISPLAY&lt;/span&gt;=:0
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
然后运行 emacs ，自动从 elpa 下载安装一些插件。
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgeaf0c0d&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgeaf0c0d&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;5&lt;/span&gt; 安装 emacs-rime&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-5&quot;&gt;
&lt;p&gt;
因为 Windows 的输入法没法给 X 应用用，所以需要自带输入法。参考：&lt;a href=&quot;https://github.com/DogLooksGood/emacs-rime&quot;&gt;https://github.com/DogLooksGood/emacs-rime&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
安装 emacs-rime 输入法。
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-shell&quot;&gt;pacman -S librime
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;cd&lt;/span&gt; ~/.emacs.d/elpa/rime*/
make lib
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
README.org 中的具体配置如下：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-emacs-lisp&quot;&gt;(&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;use-package&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;rime&lt;/span&gt;
  &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;:bind&lt;/span&gt; (&lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;C-;&quot;&lt;/span&gt; . toggle-input-method)
  &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;:custom&lt;/span&gt;
  (default-input-method &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;rime&quot;&lt;/span&gt;)
  (rime-disable-predicates
   &apos;(rime-predicate-after-alphabet-char-p))
  (rime-show-candidate &apos;posframe)
  (rime-posframe-properties
   (list &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;:font&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;YaheiInconsolata-16&quot;&lt;/span&gt;
         &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;:internal-border-width&lt;/span&gt; 14))
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;:config&lt;/span&gt;
(&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;when&lt;/span&gt; (eq (window-system) &apos;mac)
  (&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;setq&lt;/span&gt; rime-librime-root &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;~/.emacs.d/librime/dist&quot;&lt;/span&gt;)))
&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgbfce52a&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgbfce52a&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;6&lt;/span&gt; 注意事项&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-6&quot;&gt;
&lt;p&gt;
Rime 小狼毫和 X 程序有冲突，激活的时候，按上下左右，Del 等按键，会产生一连串数字。所以，使用 Emacs 的时候，要确保 Windows 切换到英文输入法状态。
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
</content>
 </entry>
 
 <entry>
   <title>Using clj cli on Windows</title>
   <link href="http://kimi.im/2021-01-16-clj-cli-on-windows"/>
   <updated>2021-01-16T00:00:00+00:00</updated>
   <id>http://kimi.im/clj-cli-on-windows</id>
   <content type="html">&lt;p&gt;
Deps and CLI&lt;sup&gt;&lt;a id=&quot;fnr.1&quot; class=&quot;footref&quot; href=&quot;#fn.1&quot;&gt;1&lt;/a&gt;&lt;/sup&gt; is really simple and clean way to run clojure. But there is no
official installation guide for Windows users. But theoretically, it should work
on any platform, as the underneath is JVM!
&lt;/p&gt;

&lt;p&gt;
The official clojure site provides Linux installation method:
&lt;a href=&quot;https://clojure.org/guides/getting_started#_installation_on_linux&quot;&gt;https://clojure.org/guides/getting_started#_installation_on_linux&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
And you can simulate Linux environment with &lt;code&gt;Cygwin&lt;/code&gt;.
&lt;/p&gt;

&lt;p&gt;
Firstly, download &lt;code&gt;setup-x86_64.exe&lt;/code&gt; &lt;sup&gt;&lt;a id=&quot;fnr.2&quot; class=&quot;footref&quot; href=&quot;#fn.2&quot;&gt;2&lt;/a&gt;&lt;/sup&gt; and install &lt;code&gt;cygwin&lt;/code&gt; on your Windows
box.
&lt;/p&gt;

&lt;p&gt;
Then, Open &lt;code&gt;mintty.exe&lt;/code&gt; follow the guideline on &lt;a href=&quot;https://clojure.org/guides/getting_started#_installation_on_linux&quot;&gt;https://clojure.org/guides/getting_started#_installation_on_linux&lt;/a&gt;
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-shell&quot;&gt;curl -O https://download.clojure.org/install/linux-install-1.10.1.763.sh
chmod +x linux-install-1.10.1.763.sh
sudo ./linux-install-1.10.1.763.sh
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
Finally, fix the path issue in two place:
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-diff&quot;&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;#&lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt; Set dir containing the installed files&lt;/span&gt;
&lt;span style=&quot;color: #aa2222; background-color: #ffeeee;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;background-color: #ffeeee;&quot;&gt; install_dir=/usr/local/lib/clojure&lt;/span&gt;
&lt;span style=&quot;color: #22aa22; background-color: #eeffee;&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;background-color: #eeffee;&quot;&gt; install_dir=C:/cygwin64/usr/local/lib/clojure&lt;/span&gt;
tools_cp=&quot;$install_dir/libexec/clojure-tools-1.10.1.754.jar&quot;

&lt;span style=&quot;color: #3F7F5F;&quot;&gt;#&lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt; Determine user config directory&lt;/span&gt;
if [[ -n &quot;$CLJ_CONFIG&quot; ]]; then
  config_dir=&quot;$CLJ_CONFIG&quot;
elif [[ -n &quot;$XDG_CONFIG_HOME&quot; ]]; then
  config_dir=&quot;$XDG_CONFIG_HOME/clojure&quot;
else
&lt;span style=&quot;color: #aa2222; background-color: #ffeeee;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;background-color: #ffeeee;&quot;&gt;  config_dir=&quot;$HOME/.clojure&quot;&lt;/span&gt;
&lt;span style=&quot;color: #22aa22; background-color: #eeffee;&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;background-color: #eeffee;&quot;&gt;  config_dir=&quot;C:/Users/kimim/.clojure&quot; # Where your .clojure located&lt;/span&gt;
fi
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
Now, you can use &lt;code&gt;clojure -M:run&lt;/code&gt; to run clojure &lt;code&gt;deps.edn&lt;/code&gt; project in
&lt;code&gt;mintty.exe&lt;/code&gt;.
&lt;/p&gt;
&lt;div id=&quot;footnotes&quot;&gt;
&lt;h2 class=&quot;footnotes&quot;&gt;Footnotes: &lt;/h2&gt;
&lt;div id=&quot;text-footnotes&quot;&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.1&quot; class=&quot;footnum&quot; href=&quot;#fnr.1&quot;&gt;1&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;https://clojure.org/guides/deps_and_cli&quot;&gt;https://clojure.org/guides/deps_and_cli&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.2&quot; class=&quot;footnum&quot; href=&quot;#fnr.2&quot;&gt;2&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;https://cygwin.com/install.html&quot;&gt;https://cygwin.com/install.html&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;


&lt;/div&gt;
&lt;/div&gt;
</content>
 </entry>
 
 <entry>
   <title>Clojure/Script Development Setup</title>
   <link href="http://kimi.im/2020-11-25-clojure-clojurescript-development-setup"/>
   <updated>2020-11-25T00:00:00+00:00</updated>
   <id>http://kimi.im/clojure-clojurescript-development-setup</id>
   <content type="html">&lt;div id=&quot;outline-container-org30648a7&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;org30648a7&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;1&lt;/span&gt; 工具安装&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-1&quot;&gt;
&lt;p&gt;
Clojure基于Java虚拟机，ClojureScript基于Javascript。而GraalVM&lt;sup&gt;&lt;a id=&quot;fnr.1&quot; class=&quot;footref&quot; href=&quot;#fn.1&quot;&gt;1&lt;/a&gt;&lt;/sup&gt;囊括了JVM和JS。因此安装GraalVM。Leiningen&lt;sup&gt;&lt;a id=&quot;fnr.2&quot; class=&quot;footref&quot; href=&quot;#fn.2&quot;&gt;2&lt;/a&gt;&lt;/sup&gt;用来管理项目代码。
&lt;/p&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-org2f18560&quot; class=&quot;outline-3&quot;&gt;
&lt;h3 id=&quot;org2f18560&quot;&gt;&lt;span class=&quot;section-number-3&quot;&gt;1.1&lt;/span&gt; Windows&lt;/h3&gt;
&lt;div class=&quot;outline-text-3&quot; id=&quot;text-1-1&quot;&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-orgedb27a0&quot; class=&quot;outline-4&quot;&gt;
&lt;h4 id=&quot;orgedb27a0&quot;&gt;&lt;span class=&quot;section-number-4&quot;&gt;1.1.1&lt;/span&gt; 准备&lt;/h4&gt;
&lt;div class=&quot;outline-text-4&quot; id=&quot;text-1-1-1&quot;&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;下载 &lt;a href=&quot;https://cygwin.com/setup-x86_64.exe&quot;&gt;setup-x86_64.exe&lt;/a&gt; &lt;sup&gt;&lt;a id=&quot;fnr.3&quot; class=&quot;footref&quot; href=&quot;#fn.3&quot;&gt;3&lt;/a&gt;&lt;/sup&gt; ，点击运行，一直下一步，到 &lt;code&gt;Select Packages&lt;/code&gt; 在
&lt;code&gt;Search&lt;/code&gt; 处查找以下包，并选择最新版本安装：
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;git&lt;/li&gt;
&lt;li&gt;emacs-w32&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;下载安装 &lt;a href=&quot;https://www.7-zip.org/a/7z1900-x64.exe&quot;&gt;7-zip&lt;/a&gt; &lt;sup&gt;&lt;a id=&quot;fnr.4&quot; class=&quot;footref&quot; href=&quot;#fn.4&quot;&gt;4&lt;/a&gt;&lt;/sup&gt;到 &lt;code&gt;C:\Program Files\7-Zip&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-org3759d63&quot; class=&quot;outline-4&quot;&gt;
&lt;h4 id=&quot;org3759d63&quot;&gt;&lt;span class=&quot;section-number-4&quot;&gt;1.1.2&lt;/span&gt; 安装&lt;/h4&gt;
&lt;div class=&quot;outline-text-4&quot; id=&quot;text-1-1-2&quot;&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;打开 &lt;code&gt;mintty.exe&lt;/code&gt; ，通常装好 cygwin 后，会自动添加到桌面&lt;/li&gt;
&lt;li&gt;以下安装脚本，可以复制后，以 &lt;code&gt;Shift-INS&lt;/code&gt; 粘贴到 &lt;code&gt;mintty.exe&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-shell&quot;&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;# &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;https://www.graalvm.org/ with JDK and Node.js&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;export&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;GRAALVM_VERSION&lt;/span&gt;=20.3.0
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;export&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;GRAALVM_PACKAGE&lt;/span&gt;=graalvm-ce-java11-windows-amd64-$&lt;span style=&quot;color: #000000;&quot;&gt;GRAALVM_VERSION&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;export&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;GRAALVM_LIB&lt;/span&gt;=graalvm-ce-java11-$&lt;span style=&quot;color: #000000;&quot;&gt;GRAALVM_VERSION&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;export&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;GRAALVM_GITHUB&lt;/span&gt;=https://github.com/graalvm/graalvm-ce-builds/releases/download
wget $&lt;span style=&quot;color: #000000;&quot;&gt;GRAALVM_GITHUB&lt;/span&gt;/vm-$&lt;span style=&quot;color: #000000;&quot;&gt;GRAALVM_VERSION&lt;/span&gt;/$&lt;span style=&quot;color: #000000;&quot;&gt;GRAALVM_PACKAGE&lt;/span&gt;.zip
&lt;span style=&quot;color: #3F7F5F;&quot;&gt;# &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;&amp;#29992;7zip&amp;#35299;&amp;#21387;&amp;#19979;&amp;#36733;&amp;#21040;&amp;#30340;&amp;#25991;&amp;#20214;&lt;/span&gt;
&lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;/cygdrive/C/Program Files/7-Zip/7z.exe&quot;&lt;/span&gt; x $&lt;span style=&quot;color: #000000;&quot;&gt;GRAALVM_PACKAGE&lt;/span&gt;.zip
mv $&lt;span style=&quot;color: #000000;&quot;&gt;GRAALVM_LIB&lt;/span&gt; /usr/local/lib
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;echo&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;export PATH=/usr/local/lib/$GRAALVM_LIB/bin:$PATH&quot;&lt;/span&gt; &amp;gt;&amp;gt; ~/.bash_profile
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;echo&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;export JAVA_HOME=/usr/local/lib/$GRAALVM_LIB&quot;&lt;/span&gt; &amp;gt;&amp;gt; ~/.bash_profile
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;source&lt;/span&gt; ~/.bash_profile
npm.cmd config set registry https://registry.npm.taobao.org

&lt;span style=&quot;color: #3F7F5F;&quot;&gt;# &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;https://leiningen.org/&lt;/span&gt;
wget https://raw.githubusercontent.com/technomancy/leiningen/stable/bin/lein
chmod +x lein
mv lein /usr/local/bin
lein
&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-org233d160&quot; class=&quot;outline-4&quot;&gt;
&lt;h4 id=&quot;org233d160&quot;&gt;&lt;span class=&quot;section-number-4&quot;&gt;1.1.3&lt;/span&gt; 测试&lt;/h4&gt;
&lt;div class=&quot;outline-text-4&quot; id=&quot;text-1-1-3&quot;&gt;
&lt;pre class=&quot;example&quot;&gt;
$ java -version
openjdk version &quot;11.0.9&quot; 2020-10-20
OpenJDK Runtime Environment GraalVM CE 20.3.0 (build 11.0.9+10-jvmci-20.3-b06)
OpenJDK 64-Bit Server VM GraalVM CE 20.3.0 (build 11.0.9+10-jvmci-20.3-b06, mixed mode, sharing)

$ npm.cmd

Usage: npm &amp;lt;command&amp;gt;
...
npm@6.14.6 C:\cygwin64\usr\local\lib\graalvm-ce-java11-20.3.0\languages\js\npm

$ lein -v
Leiningen 2.9.3 on Java 11.0.9 OpenJDK 64-Bit Server VM
&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgfb6aafa&quot; class=&quot;outline-4&quot;&gt;
&lt;h4 id=&quot;orgfb6aafa&quot;&gt;&lt;span class=&quot;section-number-4&quot;&gt;1.1.4&lt;/span&gt; 升级（非必需）&lt;/h4&gt;
&lt;div class=&quot;outline-text-4&quot; id=&quot;text-1-1-4&quot;&gt;
&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-shell&quot;&gt;npm.cmd install -g --force npm@latest
&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-org83d6599&quot; class=&quot;outline-3&quot;&gt;
&lt;h3 id=&quot;org83d6599&quot;&gt;&lt;span class=&quot;section-number-3&quot;&gt;1.2&lt;/span&gt; Linux&lt;/h3&gt;
&lt;div class=&quot;outline-text-3&quot; id=&quot;text-1-2&quot;&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-orgb1411e7&quot; class=&quot;outline-4&quot;&gt;
&lt;h4 id=&quot;orgb1411e7&quot;&gt;&lt;span class=&quot;section-number-4&quot;&gt;1.2.1&lt;/span&gt; 准备&lt;/h4&gt;
&lt;div class=&quot;outline-text-4&quot; id=&quot;text-1-2-1&quot;&gt;
&lt;p&gt;
For Ubuntu
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-shell&quot;&gt;sudo snap install emacs --channel=latest/edge --classic
&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-org630811e&quot; class=&quot;outline-4&quot;&gt;
&lt;h4 id=&quot;org630811e&quot;&gt;&lt;span class=&quot;section-number-4&quot;&gt;1.2.2&lt;/span&gt; 安装&lt;/h4&gt;
&lt;div class=&quot;outline-text-4&quot; id=&quot;text-1-2-2&quot;&gt;
&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-shell&quot;&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;# &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;https://www.graalvm.org/ with JDK and Node.js&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;export&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;GRAALVM_VERSION&lt;/span&gt;=20.3.0
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;export&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;GRAALVM_PACKAGE&lt;/span&gt;=graalvm-ce-java11-linux-amd64-$&lt;span style=&quot;color: #000000;&quot;&gt;GRAALVM_VERSION&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;export&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;GRAALVM_LIB&lt;/span&gt;=graalvm-ce-java11-$&lt;span style=&quot;color: #000000;&quot;&gt;GRAALVM_VERSION&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;export&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;GRAALVM_GITHUB&lt;/span&gt;=https://github.com/graalvm/graalvm-ce-builds/releases/download
wget $&lt;span style=&quot;color: #000000;&quot;&gt;GRAALVM_GITHUB&lt;/span&gt;/vm-$&lt;span style=&quot;color: #000000;&quot;&gt;GRAALVM_VERSION&lt;/span&gt;/$&lt;span style=&quot;color: #000000;&quot;&gt;GRAALVM_PACKAGE&lt;/span&gt;.tar.gz
tar -xvzf $&lt;span style=&quot;color: #000000;&quot;&gt;GRAALVM_PACKAGE&lt;/span&gt;.tar.gz
sudo mv $&lt;span style=&quot;color: #000000;&quot;&gt;GRAALVM_LIB&lt;/span&gt; /usr/local/lib
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;echo&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;export PATH=/usr/local/lib/$GRAALVM_LIB/bin:$PATH&quot;&lt;/span&gt; &amp;gt;&amp;gt; ~/.bashrc
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;echo&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;export JAVA_HOME=/usr/local/lib/$GRAALVM_LIB&quot;&lt;/span&gt; &amp;gt;&amp;gt; ~/.bashrc
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;source&lt;/span&gt; ~/.bashrc
npm config set registry https://registry.npm.taobao.org

&lt;span style=&quot;color: #3F7F5F;&quot;&gt;# &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;https://leiningen.org/&lt;/span&gt;
wget https://raw.githubusercontent.com/technomancy/leiningen/stable/bin/lein
chmod +x lein
sudo mv lein /usr/local/bin
lein
&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-org99d7fc8&quot; class=&quot;outline-4&quot;&gt;
&lt;h4 id=&quot;org99d7fc8&quot;&gt;&lt;span class=&quot;section-number-4&quot;&gt;1.2.3&lt;/span&gt; 测试&lt;/h4&gt;
&lt;div class=&quot;outline-text-4&quot; id=&quot;text-1-2-3&quot;&gt;
&lt;pre class=&quot;example&quot;&gt;
$ java --version
openjdk 11.0.9 2020-10-20
OpenJDK Runtime Environment GraalVM CE 20.3.0 (build 11.0.9+10-jvmci-20.3-b06)
OpenJDK 64-Bit Server VM GraalVM CE 20.3.0 (build 11.0.9+10-jvmci-20.3-b06, mixed mode, sharing)

$ npm
Usage: npm &amp;lt;command&amp;gt;
...
npm@6.14.6 /usr/local/lib/graalvm-ce-java11-20.3.0/languages/js/npm

$ lein -v
Leiningen 2.9.4 on Java 11.0.9 OpenJDK 64-Bit Server VM
&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgc20a7dc&quot; class=&quot;outline-4&quot;&gt;
&lt;h4 id=&quot;orgc20a7dc&quot;&gt;&lt;span class=&quot;section-number-4&quot;&gt;1.2.4&lt;/span&gt; 升级（非必需）&lt;/h4&gt;
&lt;div class=&quot;outline-text-4&quot; id=&quot;text-1-2-4&quot;&gt;
&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-shell&quot;&gt;npm install -g --force npm@latest
&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-org6ccc566&quot; class=&quot;outline-3&quot;&gt;
&lt;h3 id=&quot;org6ccc566&quot;&gt;&lt;span class=&quot;section-number-3&quot;&gt;1.3&lt;/span&gt; macOS&lt;/h3&gt;
&lt;div class=&quot;outline-text-3&quot; id=&quot;text-1-3&quot;&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-org65f8ba2&quot; class=&quot;outline-4&quot;&gt;
&lt;h4 id=&quot;org65f8ba2&quot;&gt;&lt;span class=&quot;section-number-4&quot;&gt;1.3.1&lt;/span&gt; 准备&lt;/h4&gt;
&lt;div class=&quot;outline-text-4&quot; id=&quot;text-1-3-1&quot;&gt;
&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-shell&quot;&gt;brew cask install emacs
&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgcbbd704&quot; class=&quot;outline-4&quot;&gt;
&lt;h4 id=&quot;orgcbbd704&quot;&gt;&lt;span class=&quot;section-number-4&quot;&gt;1.3.2&lt;/span&gt; 安装&lt;/h4&gt;
&lt;div class=&quot;outline-text-4&quot; id=&quot;text-1-3-2&quot;&gt;
&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-shell&quot;&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;# &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;https://www.graalvm.org/ with JDK and Node.js&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;export&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;GRAALVM_VERSION&lt;/span&gt;=20.3.0
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;export&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;GRAALVM_PACKAGE&lt;/span&gt;=graalvm-ce-java11-darwin-amd64-$&lt;span style=&quot;color: #000000;&quot;&gt;GRAALVM_VERSION&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;export&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;GRAALVM_LIB&lt;/span&gt;=graalvm-ce-java11-$&lt;span style=&quot;color: #000000;&quot;&gt;GRAALVM_VERSION&lt;/span&gt;
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;export&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;GRAALVM_GITHUB&lt;/span&gt;=https://github.com/graalvm/graalvm-ce-builds/releases/download
curl -L $&lt;span style=&quot;color: #000000;&quot;&gt;GRAALVM_GITHUB&lt;/span&gt;/vm-$&lt;span style=&quot;color: #000000;&quot;&gt;GRAALVM_VERSION&lt;/span&gt;/$&lt;span style=&quot;color: #000000;&quot;&gt;GRAALVM_PACKAGE&lt;/span&gt;.tar.gz &lt;span style=&quot;color: #2A00FF;&quot;&gt;\&lt;/span&gt;
     -o $&lt;span style=&quot;color: #000000;&quot;&gt;GRAALVM_PACKAGE&lt;/span&gt;.tar.gz
tar -xvzf $&lt;span style=&quot;color: #000000;&quot;&gt;GRAALVM_PACKAGE&lt;/span&gt;.tar.gz
sudo mv $&lt;span style=&quot;color: #000000;&quot;&gt;GRAALVM_LIB&lt;/span&gt; /Library/Java/JavaVirtualMachines/
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;echo&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;export PATH=/Library/Java/JavaVirtualMachines/$GRAALVM_LIB/Contents/Home/bin:$PATH&quot;&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;\&lt;/span&gt;
     &amp;gt;&amp;gt; ~/.bash_profile
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;echo&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;export JAVA_HOME=/Library/Java/JavaVirtualMachines/$GRAALVM_LIB/Contents/Home&quot;&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;\&lt;/span&gt;
     &amp;gt;&amp;gt; ~/.bash_profile
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;source&lt;/span&gt; ~/.bash_profile
npm config set registry https://registry.npm.taobao.org

&lt;span style=&quot;color: #3F7F5F;&quot;&gt;# &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;https://leiningen.org/&lt;/span&gt;
wget https://raw.githubusercontent.com/technomancy/leiningen/stable/bin/lein
chmod +x lein
sudo mv lein /usr/local/bin
lein
&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-org3d84854&quot; class=&quot;outline-4&quot;&gt;
&lt;h4 id=&quot;org3d84854&quot;&gt;&lt;span class=&quot;section-number-4&quot;&gt;1.3.3&lt;/span&gt; 测试&lt;/h4&gt;
&lt;div class=&quot;outline-text-4&quot; id=&quot;text-1-3-3&quot;&gt;
&lt;pre class=&quot;example&quot;&gt;
$ java --version
openjdk version &quot;11.0.9&quot; 2020-10-20
OpenJDK Runtime Environment GraalVM CE 20.3.0 (build 11.0.9+10-jvmci-20.3-b06)
OpenJDK 64-Bit Server VM GraalVM CE 20.3.0 (build 11.0.9+10-jvmci-20.3-b06, mixed mode, sharing)
$ npm
Usage: npm &amp;lt;command&amp;gt;
...
npm@6.14.6 /Library/Java/JavaVirtualMachines/graalvm-ce-java11-20.3.0/Contents/Home/languages/js/npm
$ lein -v
Leiningen 2.9.4 on Java 11.0.9 OpenJDK 64-Bit Server VM
&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-org72bdb3f&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;org72bdb3f&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;2&lt;/span&gt; 开发IDE&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-2&quot;&gt;
&lt;p&gt;
下载并安装YaheiInconsolata：&lt;a href=&quot;https://github.com/loseblue/yaheiInconsolata.ttf&quot;&gt;https://github.com/loseblue/yaheiInconsolata.ttf&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
安装配置Emacs：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-shell&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;cd&lt;/span&gt; ~ &amp;amp;&amp;amp; &lt;span style=&quot;color: #2A00FF;&quot;&gt;\&lt;/span&gt;
mv .emacs .emacs-backup &amp;amp;&amp;amp; mv .emacs.d .emacs.d-backup &amp;amp;&amp;amp; &lt;span style=&quot;color: #2A00FF;&quot;&gt;\&lt;/span&gt;
git clone https://github.com/kimim/kimim-emacs &amp;amp;&amp;amp; &lt;span style=&quot;color: #2A00FF;&quot;&gt;\&lt;/span&gt;
cp kimim-emacs/.emacs ~
emacs
&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orge1026f7&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orge1026f7&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;3&lt;/span&gt; 示例&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-3&quot;&gt;
&lt;p&gt;
打开 &lt;code&gt;mintty.exe&lt;/code&gt;
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-shell&quot;&gt;mkdir workspace &amp;amp;&amp;amp; &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;cd&lt;/span&gt; workspace
git clone https://github.com/kimim/vorstellung
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;cd&lt;/span&gt; vorstellung
cp dev-config.edn.sample.edn dev-config.edn
lein run
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
再打开一个 &lt;code&gt;mintty.exe&lt;/code&gt;
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-shell&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;cd&lt;/span&gt; workspace/vorstellung
lein shadow watch app
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
等看到以下信息：
&lt;/p&gt;

&lt;pre class=&quot;example&quot;&gt;
[:app] Build completed. (6353 files, 0 compiled, 0 warnings, 39.88s)
&lt;/pre&gt;

&lt;p&gt;
网页打开：&lt;a href=&quot;http://localhost:3000&quot;&gt;http://localhost:3000&lt;/a&gt; 可以看到程序运行起来了。
&lt;/p&gt;

&lt;p&gt;
切换到Emacs，测试clj repl：
&lt;/p&gt;

&lt;pre class=&quot;example&quot;&gt;
按住Ctrl不放，再连续按x f
输入 ~/workspace/vorstellung/src/clj/vorstellung/config.clj
敲Enter
ALT+SHIFT+&amp;gt;
敲Enter 2次
Ctrl+c Alt+c
选择localhost，敲Enter
输入7070，敲Enter
跳出clj repl新窗口后，按F2切回到代码
输入：
(env :nrepl-port)
Ctrl-c Ctrl-c
能够看到7070，即REPL的端口
Ctrl-a Ctrl-k
&lt;/pre&gt;

&lt;p&gt;
继续在Emacs中，测试cljs repl：
&lt;/p&gt;

&lt;pre class=&quot;example&quot;&gt;
按住Ctrl不放，再连续按x f
输入 ~/workspace/vorstellung/src/cljs/vorstellung/core.cljs
敲Enter
ALT+SHIFT+&amp;gt;
敲Enter 2次
Ctrl+c Alt+Shift+c
跳出cljs repl新窗口，按F2切回到代码
输入：
(js/alert &quot;cool&quot;)
Ctrl-c Ctrl-c
能够看到浏览器中跳出一个警报框
Ctrl-a Ctrl-k
&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-org09cb646&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;org09cb646&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;4&lt;/span&gt; Well done!&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-4&quot;&gt;
&lt;p&gt;
至此，你已经能够运行一个基于Luminus Web框架&lt;sup&gt;&lt;a id=&quot;fnr.5&quot; class=&quot;footref&quot; href=&quot;#fn.5&quot;&gt;5&lt;/a&gt;&lt;/sup&gt;、Material-UI&lt;sup&gt;&lt;a id=&quot;fnr.6&quot; class=&quot;footref&quot; href=&quot;#fn.6&quot;&gt;6&lt;/a&gt;&lt;/sup&gt;的Web App，并在Emacs中编写Clojure和ClojureScript代码，并通过repl实时运行代码了。
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-org8391384&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;org8391384&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;5&lt;/span&gt; 更多了解&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-5&quot;&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;Clojure: &lt;a href=&quot;https://clojure.org/&quot;&gt;https://clojure.org/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;ClojureScript: &lt;a href=&quot;https://clojurescript.org&quot;&gt;https://clojurescript.org&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Clojuredocs: &lt;a href=&quot;https://clojuredocs.org/&quot;&gt;https://clojuredocs.org/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Clojure API: &lt;a href=&quot;https://clojure.github.io/clojure/&quot;&gt;https://clojure.github.io/clojure/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;ClojureScript API: &lt;a href=&quot;https://cljs.github.io/api/&quot;&gt;https://cljs.github.io/api/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Style Guide: &lt;a href=&quot;https://guide.clojure.style/&quot;&gt;https://guide.clojure.style/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Clojurians Slack: &lt;a href=&quot;https://clojurians.slack.com/&quot;&gt;https://clojurians.slack.com/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Leiningen: &lt;a href=&quot;https://leiningen.org/&quot;&gt;https://leiningen.org/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;shadow-cljs: &lt;a href=&quot;http://shadow-cljs.org/&quot;&gt;http://shadow-cljs.org/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Emacs: &lt;a href=&quot;https://www.gnu.org/software/emacs/&quot;&gt;https://www.gnu.org/software/emacs/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Cider: &lt;a href=&quot;https://docs.cider.mx/cider-nrepl/index.html&quot;&gt;https://docs.cider.mx/cider-nrepl/index.html&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Luminus: &lt;a href=&quot;https://luminusweb.com/&quot;&gt;https://luminusweb.com/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Material-UI: &lt;a href=&quot;https://material-ui.com/&quot;&gt;https://material-ui.com/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;GraalVM: &lt;a href=&quot;https://www.graalvm.org/&quot;&gt;https://www.graalvm.org/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Node.js: &lt;a href=&quot;https://nodejs.org&quot;&gt;https://nodejs.org&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Clojars: &lt;a href=&quot;https://clojars.org/&quot;&gt;https://clojars.org/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;MVNRepository: &lt;a href=&quot;https://mvnrepository.com/&quot;&gt;https://mvnrepository.com/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;footnotes&quot;&gt;
&lt;h2 class=&quot;footnotes&quot;&gt;Footnotes: &lt;/h2&gt;
&lt;div id=&quot;text-footnotes&quot;&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.1&quot; class=&quot;footnum&quot; href=&quot;#fnr.1&quot;&gt;1&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;https://www.graalvm.org/&quot;&gt;https://www.graalvm.org/&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.2&quot; class=&quot;footnum&quot; href=&quot;#fnr.2&quot;&gt;2&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;https://leiningen.org/&quot;&gt;https://leiningen.org/&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.3&quot; class=&quot;footnum&quot; href=&quot;#fnr.3&quot;&gt;3&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;https://cygwin.com/&quot;&gt;https://cygwin.com/&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.4&quot; class=&quot;footnum&quot; href=&quot;#fnr.4&quot;&gt;4&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;https://www.7-zip.org/&quot;&gt;https://www.7-zip.org/&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.5&quot; class=&quot;footnum&quot; href=&quot;#fnr.5&quot;&gt;5&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;https://luminusweb.com/&quot;&gt;https://luminusweb.com/&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.6&quot; class=&quot;footnum&quot; href=&quot;#fnr.6&quot;&gt;6&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;https://material-ui.com/&quot;&gt;https://material-ui.com/&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;


&lt;/div&gt;
&lt;/div&gt;
</content>
 </entry>
 
 <entry>
   <title>Use Azure DevOps Pipeline to automatically deploy to Azure Web App</title>
   <link href="http://kimi.im/2020-11-24-azure-web-app-devops-pipeline"/>
   <updated>2020-11-24T00:00:00+00:00</updated>
   <id>http://kimi.im/azure-web-app-devops-pipeline</id>
   <content type="html">&lt;p&gt;
Azure DevOps中可以设置Pipeline流水线，根据代码提交，触发编译，测试和部署。但是
DevOps需要Azure Global订阅，如果想部署到世纪互联的Azure Web App，就需要一些额外的设置。
&lt;/p&gt;

&lt;div id=&quot;outline-container-orgdfbc5fe&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgdfbc5fe&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;1&lt;/span&gt; Azure Container Registry（ACR）&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-1&quot;&gt;
&lt;p&gt;
首先，在 portal.azure.cn 中创建容器库：
&lt;a href=&quot;https://portal.azure.cn/#create/Microsoft.ContainerRegistry&quot;&gt;https://portal.azure.cn/#create/Microsoft.ContainerRegistry&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
例如： &lt;a href=&quot;https://kimim.azurecr.cn&quot;&gt;https://kimim.azurecr.cn&lt;/a&gt;
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgb02514a&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgb02514a&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;2&lt;/span&gt; Push Docker Image To Azure Container Registry&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-2&quot;&gt;
&lt;p&gt;
假设我们的docker image叫 &lt;code&gt;kimim/vorstellung&lt;/code&gt;:
&lt;/p&gt;

&lt;p&gt;
编译并推送到ACR：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-shell&quot;&gt;lein uberjar
sudo docker build -t kimim/vorstellung .
sudo docker login kimim.azurecr.cn
sudo docker tag kimim/vorstellung kimim.azurecr.cn/vorstellung
sudo docker push wxiip.azurecr.cn/vorstellung
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
这样就能在ACR的Repositories中找到 &lt;code&gt;vorstellung&lt;/code&gt; 。
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-org73abd1a&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;org73abd1a&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;3&lt;/span&gt; Web App&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-3&quot;&gt;
&lt;p&gt;
在 &lt;a href=&quot;https://portal.azure.cn/#create/Microsoft.WebSite&quot;&gt;https://portal.azure.cn/#create/Microsoft.WebSite&lt;/a&gt; 创建Web App。
&lt;/p&gt;

&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;在Instance Details中设置一个名字，比如 kimim.chinaclouodsites.cn&lt;/li&gt;
&lt;li&gt;Publish选择 Docker Container&lt;/li&gt;
&lt;li&gt;设置Docker为ACR中的Image，tag选择latest。然后创建资源。&lt;/li&gt;
&lt;li&gt;打开kimim App Serivce资源，在Container settings中设置Continuous Deployment为On&lt;/li&gt;
&lt;li&gt;Configuration中添加环境变量，如在Database String中添加 &lt;code&gt;DATABSE_URL&lt;/code&gt; 为 &lt;code&gt;jdbc:sqlite:kimim.db&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgb5567c4&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgb5567c4&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;4&lt;/span&gt; Azure DevOps Pipeline&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-4&quot;&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-org55babce&quot; class=&quot;outline-3&quot;&gt;
&lt;h3 id=&quot;org55babce&quot;&gt;&lt;span class=&quot;section-number-3&quot;&gt;4.1&lt;/span&gt; Service Connections&lt;/h3&gt;
&lt;div class=&quot;outline-text-3&quot; id=&quot;text-4-1&quot;&gt;
&lt;p&gt;
在项目设置中，Piplines/Service Connections选项下，添加Service Connection：
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;Docker Registry&lt;/li&gt;
&lt;li&gt;选Others，因为Azure Container Registry只支持Global的订阅&lt;/li&gt;
&lt;li&gt;添加Docker Registry：&lt;a href=&quot;https://kimim.azurerc.cn&quot;&gt;https://kimim.azurerc.cn&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Docker ID和Docker Password从ACR资源的Access Keys中，打开Admin user，找到Username和password&lt;/li&gt;
&lt;li&gt;添加一个service connection name，例如 &lt;code&gt;kimimRSC&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-org0f23e6f&quot; class=&quot;outline-3&quot;&gt;
&lt;h3 id=&quot;org0f23e6f&quot;&gt;&lt;span class=&quot;section-number-3&quot;&gt;4.2&lt;/span&gt; Pipelines&lt;/h3&gt;
&lt;div class=&quot;outline-text-3&quot; id=&quot;text-4-2&quot;&gt;
&lt;p&gt;
以 &lt;code&gt;vorstellung&lt;/code&gt; 项目为例&lt;sup&gt;&lt;a id=&quot;fnr.1&quot; class=&quot;footref&quot; href=&quot;#fn.1&quot;&gt;1&lt;/a&gt;&lt;/sup&gt;，在Pipelines中 &lt;code&gt;New pipeline&lt;/code&gt; ，文件名为
&lt;code&gt;azure-pipelines.yml&lt;/code&gt; ，内容如下：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-yaml&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;trigger&lt;/span&gt;:
- master

&lt;span style=&quot;color: #000000;&quot;&gt;variables&lt;/span&gt;:
  &lt;span style=&quot;color: #000000;&quot;&gt;projectName&lt;/span&gt;: &lt;span style=&quot;color: #2A00FF;&quot;&gt;&apos;vorstellung&apos;&lt;/span&gt;
  &lt;span style=&quot;color: #000000;&quot;&gt;repositoryName&lt;/span&gt;: $(projectName)
  &lt;span style=&quot;color: #000000;&quot;&gt;dockerRSC&lt;/span&gt;: &lt;span style=&quot;color: #2A00FF;&quot;&gt;&apos;kimimRSC&apos;&lt;/span&gt;

&lt;span style=&quot;color: #000000;&quot;&gt;pool&lt;/span&gt;:
  &lt;span style=&quot;color: #000000;&quot;&gt;vmImage&lt;/span&gt;: &lt;span style=&quot;color: #2A00FF;&quot;&gt;&apos;ubuntu-latest&apos;&lt;/span&gt;

&lt;span style=&quot;color: #000000;&quot;&gt;steps&lt;/span&gt;:
- &lt;span style=&quot;color: #000000;&quot;&gt;task&lt;/span&gt;: JavaToolInstaller@0
  &lt;span style=&quot;color: #000000;&quot;&gt;inputs&lt;/span&gt;:
    &lt;span style=&quot;color: #000000;&quot;&gt;versionSpec&lt;/span&gt;: &lt;span style=&quot;color: #2A00FF;&quot;&gt;&apos;11&apos;&lt;/span&gt;
    &lt;span style=&quot;color: #000000;&quot;&gt;jdkArchitectureOption&lt;/span&gt;: &lt;span style=&quot;color: #2A00FF;&quot;&gt;&apos;x64&apos;&lt;/span&gt;
    &lt;span style=&quot;color: #000000;&quot;&gt;jdkSourceOption&lt;/span&gt;: &lt;span style=&quot;color: #2A00FF;&quot;&gt;&apos;PreInstalled&apos;&lt;/span&gt;
- &lt;span style=&quot;color: #000000;&quot;&gt;task&lt;/span&gt;: NodeTool@0
  &lt;span style=&quot;color: #000000;&quot;&gt;inputs&lt;/span&gt;:
    &lt;span style=&quot;color: #000000;&quot;&gt;versionSpec&lt;/span&gt;: &lt;span style=&quot;color: #2A00FF;&quot;&gt;&apos;6.x&apos;&lt;/span&gt;
    &lt;span style=&quot;color: #000000;&quot;&gt;checkLatest&lt;/span&gt;: &lt;span style=&quot;color: #110099;&quot;&gt;true&lt;/span&gt;
- &lt;span style=&quot;color: #000000;&quot;&gt;task&lt;/span&gt;: Bash@3
  &lt;span style=&quot;color: #000000;&quot;&gt;inputs&lt;/span&gt;:
    &lt;span style=&quot;color: #000000;&quot;&gt;targetType&lt;/span&gt;: &lt;span style=&quot;color: #2A00FF;&quot;&gt;&apos;inline&apos;&lt;/span&gt;
    &lt;span style=&quot;color: #000000;&quot;&gt;script&lt;/span&gt;: |
      echo &lt;span style=&quot;color: #2A00FF;&quot;&gt;&apos;Install Leiningen, NPM and compile&apos;&lt;/span&gt;
&lt;span style=&quot;color: #2A00FF;&quot;&gt;      wget https://raw.githubusercontent.com/technomancy/leiningen/stable/bin/lein&lt;/span&gt;
&lt;span style=&quot;color: #2A00FF;&quot;&gt;      chmod +x lein&lt;/span&gt;
&lt;span style=&quot;color: #2A00FF;&quot;&gt;      npm install -g npm@latest&lt;/span&gt;
&lt;span style=&quot;color: #2A00FF;&quot;&gt;      lein shadow npm-deps&lt;/span&gt;
&lt;span style=&quot;color: #2A00FF;&quot;&gt;      ./lein uberjar&lt;/span&gt;
- &lt;span style=&quot;color: #000000;&quot;&gt;task&lt;/span&gt;: Docker@2
  &lt;span style=&quot;color: #000000;&quot;&gt;displayName&lt;/span&gt;: &lt;span style=&quot;color: #2A00FF;&quot;&gt;&apos;Build and Push docker&apos;&lt;/span&gt;
  &lt;span style=&quot;color: #000000;&quot;&gt;inputs&lt;/span&gt;:
    &lt;span style=&quot;color: #000000;&quot;&gt;containerRegistry&lt;/span&gt;: $(dockerRSC)
    &lt;span style=&quot;color: #000000;&quot;&gt;repository&lt;/span&gt;: $(repositoryName)
    &lt;span style=&quot;color: #000000;&quot;&gt;Dockerfile&lt;/span&gt;: &lt;span style=&quot;color: #2A00FF;&quot;&gt;&apos;**/Dockerfile&apos;&lt;/span&gt;
    &lt;span style=&quot;color: #000000;&quot;&gt;command&lt;/span&gt;: &lt;span style=&quot;color: #2A00FF;&quot;&gt;&apos;buildAndPush&apos;&lt;/span&gt;
    &lt;span style=&quot;color: #000000;&quot;&gt;tags&lt;/span&gt;: |
      &lt;span style=&quot;color: #2A00FF;&quot;&gt;$(Build.BuildId)&lt;/span&gt;
&lt;span style=&quot;color: #2A00FF;&quot;&gt;      latest&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgf4a905a&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgf4a905a&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;5&lt;/span&gt; Done&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-5&quot;&gt;
&lt;p&gt;
然后，每次代码提交到master分支，就会触发编译和部署。打开
&lt;a href=&quot;https://kimim.chinaclouodsites.cn&quot;&gt;https://kimim.chinaclouodsites.cn&lt;/a&gt; 就能看到变化了。
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;footnotes&quot;&gt;
&lt;h2 class=&quot;footnotes&quot;&gt;Footnotes: &lt;/h2&gt;
&lt;div id=&quot;text-footnotes&quot;&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.1&quot; class=&quot;footnum&quot; href=&quot;#fnr.1&quot;&gt;1&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;https://github.com/kimim/vorstellung&quot;&gt;https://github.com/kimim/vorstellung&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;


&lt;/div&gt;
&lt;/div&gt;
</content>
 </entry>
 
 <entry>
   <title>Clojure Database Access String</title>
   <link href="http://kimi.im/2020-11-23-clojure-database-access"/>
   <updated>2020-11-23T00:00:00+00:00</updated>
   <id>http://kimi.im/clojure-database-access</id>
   <content type="html">&lt;p&gt;
此处放一些常用的数据库连接URL。使用时，替换 &lt;code&gt;db_app&lt;/code&gt;, &lt;code&gt;db_user&lt;/code&gt;, &lt;code&gt;db_password&lt;/code&gt;
&lt;/p&gt;

&lt;p&gt;
SQLite:
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-clojure&quot;&gt;{&lt;span style=&quot;color: #110099;&quot;&gt;:database-url&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;jdbc:sqlite:db_app.db&quot;&lt;/span&gt;}
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
MySQL&lt;sup&gt;&lt;a id=&quot;fnr.1&quot; class=&quot;footref&quot; href=&quot;#fn.1&quot;&gt;1&lt;/a&gt;&lt;/sup&gt;:
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-clojure&quot;&gt;{&lt;span style=&quot;color: #110099;&quot;&gt;:database-url&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;jdbc:mysql://mysql.kimi.im:3306/db_app?useSSL=false&amp;amp;requireSSL=false&amp;amp;characterEncoding=utf8&amp;amp;serverTimezone=UTC&amp;amp;user=db_user&amp;amp;password=db_password&quot;&lt;/span&gt;}
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
PostreSQL&lt;sup&gt;&lt;a id=&quot;fnr.2&quot; class=&quot;footref&quot; href=&quot;#fn.2&quot;&gt;2&lt;/a&gt;&lt;/sup&gt;:
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-clojure&quot;&gt;{&lt;span style=&quot;color: #110099;&quot;&gt;:database-url&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;jdbc:postgresql://postgresql.kimi.im/db_app?user=db_user&amp;amp;password=db_password&quot;&lt;/span&gt;}
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
Oracle&lt;sup&gt;&lt;a id=&quot;fnr.3&quot; class=&quot;footref&quot; href=&quot;#fn.3&quot;&gt;3&lt;/a&gt;&lt;/sup&gt;:
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-clojure&quot;&gt;{&lt;span style=&quot;color: #110099;&quot;&gt;:database-url&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;jdbc:oracle:thin:db_user/db_password@//oracle.kimi.im:1521/db_app&quot;&lt;/span&gt;}
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
SQLServer&lt;sup&gt;&lt;a id=&quot;fnr.4&quot; class=&quot;footref&quot; href=&quot;#fn.4&quot;&gt;4&lt;/a&gt;&lt;/sup&gt;:
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-clojure&quot;&gt;{&lt;span style=&quot;color: #110099;&quot;&gt;:database-url&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;jdbc:sqserver://sqlserver.kimi.im:1433;databaseName=db_app;user=db_user;password=db_password;&quot;&lt;/span&gt;}
&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;footnotes&quot;&gt;
&lt;h2 class=&quot;footnotes&quot;&gt;Footnotes: &lt;/h2&gt;
&lt;div id=&quot;text-footnotes&quot;&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.1&quot; class=&quot;footnum&quot; href=&quot;#fnr.1&quot;&gt;1&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;https://dev.mysql.com/doc/connector-j/8.0/en/connector-j-usagenotes-connect-drivermanager.html#connector-j-examples-connection-drivermanager&quot;&gt;https://dev.mysql.com/doc/connector-j/8.0/en/connector-j-usagenotes-connect-drivermanager.html#connector-j-examples-connection-drivermanager&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.2&quot; class=&quot;footnum&quot; href=&quot;#fnr.2&quot;&gt;2&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;https://luminusweb.com/docs/database.html&quot;&gt;https://luminusweb.com/docs/database.html&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.3&quot; class=&quot;footnum&quot; href=&quot;#fnr.3&quot;&gt;3&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;https://docs.oracle.com/cd/B28359_01/java.111/b31224/urls.htm&quot;&gt;https://docs.oracle.com/cd/B28359_01/java.111/b31224/urls.htm&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.4&quot; class=&quot;footnum&quot; href=&quot;#fnr.4&quot;&gt;4&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;https://docs.microsoft.com/en-us/sql/connect/jdbc/building-the-connection-url?view=sql-server-ver15&quot;&gt;https://docs.microsoft.com/en-us/sql/connect/jdbc/building-the-connection-url?view=sql-server-ver15&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;


&lt;/div&gt;
&lt;/div&gt;
</content>
 </entry>
 
 <entry>
   <title>Load clj libs directly from github</title>
   <link href="http://kimi.im/2020-11-07-clj-libs-from-github"/>
   <updated>2020-11-07T00:00:00+00:00</updated>
   <id>http://kimi.im/clj-libs-from-github</id>
   <content type="html">&lt;p&gt;
通过 &lt;a href=&quot;https://jitpack.io/&quot;&gt;https://jitpack.io/&lt;/a&gt; 可以直接将 github 上的代码编译成 clojure 的 .jar 文件，并加载使用。这样就能很方便调试尚未发布到 clojars 的库了。
&lt;/p&gt;

&lt;p&gt;
第一，在 project.clj 中添加相关 dependencies，以 clj-djl 为例：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-clojure&quot;&gt;  &lt;span style=&quot;color: #110099;&quot;&gt;:dependencies&lt;/span&gt; [[&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;org.clojure&lt;/span&gt;/clojure &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;1.10.1&quot;&lt;/span&gt;]
                 &lt;span style=&quot;color: #3F7F5F;&quot;&gt;;;&lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;[clj-djl &quot;0.1.2&quot;]&lt;/span&gt;
                 [&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;com.github.kimim&lt;/span&gt;/clj-djl &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;master-SNAPSHOT&quot;&lt;/span&gt;]]
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
以上 &lt;code&gt;[clj-djl &quot;0.1.2&quot;]&lt;/code&gt; 是发布到 clojars 的库，而 &lt;code&gt;[com.github.kimim/clj-djl
&quot;master-SNAPSHOT&quot;]&lt;/code&gt; 则是通过 jitpack 从 github repo 上的代码编译的最新版本。
&lt;/p&gt;

&lt;p&gt;
第二，在 project.clj 中添加 repositories：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-clojure&quot;&gt;  &lt;span style=&quot;color: #110099;&quot;&gt;:repositories&lt;/span&gt; [[&lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;jitpack&quot;&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;https://jitpack.io&quot;&lt;/span&gt;]]
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
第三，刷新 deps：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-shell&quot;&gt;lein -U deps
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
完整 project.clj 如下：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-clojure&quot;&gt;(&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;defproject&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;clj-d2l&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;0.1.0-SNAPSHOT&quot;&lt;/span&gt;
  &lt;span style=&quot;color: #110099;&quot;&gt;:description&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;FIXME: write description&quot;&lt;/span&gt;
  &lt;span style=&quot;color: #110099;&quot;&gt;:url&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;http://example.com/FIXME&quot;&lt;/span&gt;
  &lt;span style=&quot;color: #110099;&quot;&gt;:license&lt;/span&gt; {&lt;span style=&quot;color: #110099;&quot;&gt;:name&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;EPL-2.0 OR GPL-2.0-or-later WITH Classpath-exception-2.0&quot;&lt;/span&gt;
            &lt;span style=&quot;color: #110099;&quot;&gt;:url&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;https://www.eclipse.org/legal/epl-2.0/&quot;&lt;/span&gt;}
  &lt;span style=&quot;color: #110099;&quot;&gt;:dependencies&lt;/span&gt; [[&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;org.clojure&lt;/span&gt;/clojure &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;1.10.1&quot;&lt;/span&gt;]
                 &lt;span style=&quot;color: #3F7F5F;&quot;&gt;;;&lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;[clj-djl &quot;0.1.2&quot;]&lt;/span&gt;
                 [&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;com.github.kimim&lt;/span&gt;/clj-djl &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;master-SNAPSHOT&quot;&lt;/span&gt;]
                 [&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;dm3&lt;/span&gt;/stopwatch &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;0.1.1&quot;&lt;/span&gt;]
                 [&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;tech.tablesaw&lt;/span&gt;/tablesaw-core &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;0.38.1&quot;&lt;/span&gt;]
                 [&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;tech.tablesaw&lt;/span&gt;/tablesaw-jsplot &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;0.38.1&quot;&lt;/span&gt;]
                 [&lt;span style=&quot;color: #000000; font-style: italic; text-decoration: underline;&quot;&gt;com.hypirion&lt;/span&gt;/clj-xchart &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;0.2.0&quot;&lt;/span&gt;]]
  &lt;span style=&quot;color: #110099;&quot;&gt;:repositories&lt;/span&gt; [[&lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;jitpack&quot;&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;https://jitpack.io&quot;&lt;/span&gt;]]
  &lt;span style=&quot;color: #110099;&quot;&gt;:main&lt;/span&gt; ^&lt;span style=&quot;color: #110099;&quot;&gt;:skip-aot&lt;/span&gt; clj-d2l.core
  &lt;span style=&quot;color: #110099;&quot;&gt;:target-path&lt;/span&gt; &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;target/%s&quot;&lt;/span&gt;
  &lt;span style=&quot;color: #110099;&quot;&gt;:profiles&lt;/span&gt; {&lt;span style=&quot;color: #110099;&quot;&gt;:uberjar&lt;/span&gt; {&lt;span style=&quot;color: #110099;&quot;&gt;:aot&lt;/span&gt; &lt;span style=&quot;color: #110099;&quot;&gt;:all&lt;/span&gt;}})
&lt;/pre&gt;
&lt;/div&gt;
</content>
 </entry>
 
 <entry>
   <title>How to keep a github fork updated</title>
   <link href="http://kimi.im/2020-10-22-keep-github-fork-updated"/>
   <updated>2020-10-22T00:00:00+00:00</updated>
   <id>http://kimi.im/keep-github-fork-updated</id>
   <content type="html">&lt;p&gt;
Recently, I forked several projects and make some contribution to them by create
pull request. But later, I find out that my forked repo is fall behind the
original repo after several days.
&lt;/p&gt;

&lt;p&gt;
So I need to keep up to date with the original repo.
&lt;/p&gt;

&lt;div id=&quot;outline-container-org01b6a30&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;org01b6a30&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;1&lt;/span&gt; git command line&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-1&quot;&gt;
&lt;p&gt;
Add remote repository:
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-shell&quot;&gt;git clone https://github.com/kimim/djl
&lt;span style=&quot;color: #ff55ff; font-weight: bold;&quot;&gt;cd&lt;/span&gt; djl
git remote add awslabs https://github.com/awslabs/djl
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
List remote repositories:
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-shell&quot;&gt;git remote
&lt;/pre&gt;
&lt;/div&gt;

&lt;pre class=&quot;example&quot; id=&quot;orga092691&quot;&gt;
awslabs
origin
&lt;/pre&gt;

&lt;p&gt;
Update all the remotes:
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-shell&quot;&gt;git fetch --all
&lt;/pre&gt;
&lt;/div&gt;

&lt;pre class=&quot;example&quot; id=&quot;orge257df0&quot;&gt;
Fetching origin
Fetching awslabs
From https://github.com/awslabs/djl
 * [new branch]        mac          -&amp;gt; awslabs/mac
 * [new branch]        master       -&amp;gt; awslabs/master
 * [new branch]        model-upload -&amp;gt; awslabs/model-upload
&lt;/pre&gt;

&lt;p&gt;
Rebase and push
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-shell&quot;&gt;git rebase awslabs/master
git push
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
Now the forked repo is up-to-date.
&lt;/p&gt;

&lt;p&gt;
If you get the error:
&lt;/p&gt;

&lt;pre class=&quot;example&quot; id=&quot;org3d37f50&quot;&gt;
hint: Updates were rejected because the tip of your current branch is behind
hint: its remote counterpart. Integrate the remote changes (e.g.
hint: &apos;git pull ...&apos;) before pushing again.
hint: See the &apos;Note about fast-forwards&apos; in &apos;git push --help&apos; for details.
&lt;/pre&gt;

&lt;p&gt;
You can fix this issue as below:
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-shell&quot;&gt;git push --force-with-lease origin master
&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-org87bc696&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;org87bc696&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;2&lt;/span&gt; Magit&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-2&quot;&gt;
&lt;table border=&quot;2&quot; cellspacing=&quot;0&quot; cellpadding=&quot;6&quot; rules=&quot;groups&quot; frame=&quot;hsides&quot;&gt;


&lt;colgroup&gt;
&lt;col  class=&quot;org-left&quot; /&gt;

&lt;col  class=&quot;org-left&quot; /&gt;

&lt;col  class=&quot;org-left&quot; /&gt;
&lt;/colgroup&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th scope=&quot;col&quot; class=&quot;org-left&quot;&gt;Key&lt;/th&gt;
&lt;th scope=&quot;col&quot; class=&quot;org-left&quot;&gt;command&lt;/th&gt;
&lt;th scope=&quot;col&quot; class=&quot;org-left&quot;&gt;Input&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class=&quot;org-left&quot;&gt;C-x m g&lt;/td&gt;
&lt;td class=&quot;org-left&quot;&gt;magit-status&lt;/td&gt;
&lt;td class=&quot;org-left&quot;&gt;&amp;#xa0;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td class=&quot;org-left&quot;&gt;M a&lt;/td&gt;
&lt;td class=&quot;org-left&quot;&gt;magit-remote-add&lt;/td&gt;
&lt;td class=&quot;org-left&quot;&gt;remote name and url&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td class=&quot;org-left&quot;&gt;f a&lt;/td&gt;
&lt;td class=&quot;org-left&quot;&gt;magit-fetch&lt;/td&gt;
&lt;td class=&quot;org-left&quot;&gt;&amp;#xa0;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td class=&quot;org-left&quot;&gt;r u&lt;/td&gt;
&lt;td class=&quot;org-left&quot;&gt;magit-rebase&lt;/td&gt;
&lt;td class=&quot;org-left&quot;&gt;rebase upstream&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td class=&quot;org-left&quot;&gt;P p&lt;/td&gt;
&lt;td class=&quot;org-left&quot;&gt;magit-push&lt;/td&gt;
&lt;td class=&quot;org-left&quot;&gt;&amp;#xa0;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;
If upstream is not correct, use &lt;code&gt;r C-u u&lt;/code&gt; to set upstream.
&lt;/p&gt;

&lt;p&gt;
If you get above mentioned error, then fix with following command:
&lt;/p&gt;

&lt;table border=&quot;2&quot; cellspacing=&quot;0&quot; cellpadding=&quot;6&quot; rules=&quot;groups&quot; frame=&quot;hsides&quot;&gt;


&lt;colgroup&gt;
&lt;col  class=&quot;org-left&quot; /&gt;

&lt;col  class=&quot;org-left&quot; /&gt;

&lt;col  class=&quot;org-left&quot; /&gt;
&lt;/colgroup&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th scope=&quot;col&quot; class=&quot;org-left&quot;&gt;Key&lt;/th&gt;
&lt;th scope=&quot;col&quot; class=&quot;org-left&quot;&gt;command&lt;/th&gt;
&lt;th scope=&quot;col&quot; class=&quot;org-left&quot;&gt;Input&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class=&quot;org-left&quot;&gt;P -f p&lt;/td&gt;
&lt;td class=&quot;org-left&quot;&gt;magit-push&lt;/td&gt;
&lt;td class=&quot;org-left&quot;&gt;git push &amp;#x2013;force-with-lease&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;


&lt;p&gt;
maigt makes life simple ^_^
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
</content>
 </entry>
 
 <entry>
   <title>不学诗，无以言</title>
   <link href="http://kimi.im/2020-08-08-no-poem-no-words"/>
   <updated>2020-08-08T00:00:00+00:00</updated>
   <id>http://kimi.im/no-poem-no-words</id>
   <content type="html">&lt;p&gt;
这是一段很莫逆的对话。没有达到隔着几百年、几千里，在人生的河对岸莫逆于心、相视而笑的程度。但也有仿佛他乡遇故知的亲切。
&lt;/p&gt;

&lt;p&gt;
事情是这样的。某知名区块链公司的总裁拉了一个微信群，无外乎需要我们兄弟公司提供一些技术支持罢了。
&lt;/p&gt;

&lt;p&gt;
他建群的时候，顺手@了他们公司的一个负责人名字中间是“公”字。没有提到姓，所以就是@公某。我呢，也很谦虚的称其为“公总”。这是一个误会，引起了一些涟漪。可以从这些涟漪，看到一些有趣的事情。每个人都有其独一无二的人生和阅历，就会产生各自不同的观点和情绪。公某戏称还好没称其为公公。他应该是看过不少清宫戏了吧。而总裁呢，因为读了不少诗书，就笑称我是不是熟读《诗经》，因为诗经中有《公刘》一篇。
&lt;/p&gt;

&lt;p&gt;
我呢，确实是看过《公刘》这首诗，大概是在诗三百的最后几十首了吧。在《诗经·大雅·生民之什》的第六首：
&lt;/p&gt;

&lt;p class=&quot;verse&quot;&gt;
笃公刘，&lt;br /&gt;
匪居匪康。&lt;br /&gt;
廼埸廼疆，&lt;br /&gt;
廼积廼仓；&lt;br /&gt;
廼裹餱粮，&lt;br /&gt;
于橐于囊。&lt;br /&gt;
思辑用光，&lt;br /&gt;
弓矢斯张；&lt;br /&gt;
干戈戚扬，&lt;br /&gt;
爰方启行。&lt;br /&gt;
&lt;/p&gt;

&lt;p&gt;
这首诗是赞美后稷的曾孙公刘王公的厚道待民。可以从文字看出，大雅和颂的几个篇章的诗，都是很假模假式的歌功颂德。我确实也没有仔细的读过。
&lt;/p&gt;

&lt;p&gt;
这哪有“关关雎鸠，在河之洲，窈窕淑女，君子好逑”，“遵彼汝坟，伐其条枚。未见君子，惄如调饥”，“喓喓草虫，趯趯阜螽；未见君子，忧心忡忡”，“野有死麕，白茅包之。有女怀春，吉士诱之”之类的国风民歌优美动人呀。
&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个星期没音讯了，于是过了2周，我在群里丢了一句：
&lt;/p&gt;

&lt;p class=&quot;verse&quot;&gt;
青青子衿，&lt;br /&gt;
悠悠我心。&lt;br /&gt;
纵我不往，&lt;br /&gt;
子宁不嗣音？&lt;br /&gt;
&lt;/p&gt;

&lt;p&gt;
这本来大概是情人之间因不常联系的嗔怒。
&lt;/p&gt;

&lt;p class=&quot;verse&quot;&gt;
“青青是你的衣领，&lt;br /&gt;
长长的挂在我的新。&lt;br /&gt;
纵然我还不能去找你，&lt;br /&gt;
你为什么不主动寄个音讯给我？&lt;br /&gt;
&lt;/p&gt;

&lt;p&gt;
当然，后面还有：
&lt;/p&gt;

&lt;p class=&quot;verse&quot;&gt;
一日不见，&lt;br /&gt;
如三月兮。&lt;br /&gt;
&lt;/p&gt;

&lt;p&gt;
就不太合适在工作群里聊了。我此处想了解，公某是否还需要我们的技术支持，怎么这么久了也没提需求。他回复说怕我忙，不好意思多打扰。
&lt;/p&gt;

&lt;p&gt;
于是，我继续引用《诗经·国风·召南·小星》：
&lt;/p&gt;

&lt;p class=&quot;verse&quot;&gt;
嘒彼小星，三五在东。肃肃宵征，夙夜在公。&lt;br /&gt;
&lt;/p&gt;

&lt;p class=&quot;verse&quot;&gt;
微光的是那小星，&lt;br /&gt;
三颗五颗在东方。&lt;br /&gt;
急急忙忙夜里出行，&lt;br /&gt;
从早到晚忙公事。&lt;br /&gt;
&lt;/p&gt;

&lt;p&gt;
这首诗已在表达我工作加班的辛苦。互相支持，还不都是为了工作么。
&lt;/p&gt;

&lt;p&gt;
老总回复说：相比“夙夜在公”，我更喜欢“委蛇委蛇，自公退食”。这也是引自诗经，描述退朝休息而从容自得的样子。
&lt;/p&gt;

&lt;p&gt;
再后来，比较晚了，聊到工作的辛苦：
&lt;/p&gt;

&lt;p class=&quot;verse&quot;&gt;
式微式微，&lt;br /&gt;
胡不归？&lt;br /&gt;
微公之故，&lt;br /&gt;
胡为乎中露。&lt;br /&gt;
&lt;/p&gt;

&lt;p class=&quot;verse&quot;&gt;
天黑了，怎么还不回家。&lt;br /&gt;
要不是因为工作的原因，&lt;br /&gt;
怎么会在露中呢。&lt;br /&gt;
&lt;/p&gt;

&lt;p&gt;
那几天杭州天天有雨，胡为乎中露，也算很应景了。
&lt;/p&gt;

&lt;p&gt;
最后，由这则诗经，区块链老总提到了《世说新语》一则故事：
&lt;/p&gt;

&lt;p class=&quot;verse&quot;&gt;
郑玄家奴婢皆读书。尝使一婢，不称旨，将挞之。&lt;br /&gt;
方自陈说，玄怒，使人曳著泥中。&lt;br /&gt;
须臾，复有一婢来，问曰：“胡为乎泥中？”&lt;br /&gt;
答曰：“薄言往诉，逢彼之怒。”&lt;br /&gt;
&lt;/p&gt;

&lt;p&gt;
“胡为乎泥中”是前一则诗经的后面半句。郑玄家的两奴婢用诗经对答，也是风雅人家才可能出现的场景了。
&lt;/p&gt;

&lt;p&gt;
至此，这个工作群已经被诗经带歪了。与此同时，工作的内容也差不多了结。鄙人认为，这才是工作苦中作乐该有的样子么。
&lt;/p&gt;

&lt;p&gt;
孔子老人家曾经教训他的学生说“不学诗，无以言”，因为“诗可以兴，可以观，可以群，可以怨；迩之事父，远之事君；多识于鸟兽草木之名”。可见诗经在古时候是多么重要的经典著作呀。
&lt;/p&gt;

&lt;p&gt;
中国的古籍也真是伟大，中国的文字也是伟大。隔了几千年，还是能有这么好的表现力。自豪感，油然而生。最近，看的多的是洋文的技术论文文献。就如我高中时期一样，还是应该抽空看看诗经，调节调节枯燥乏味呀。不学诗，无以言。
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Build clojure with maven on Windows 10</title>
   <link href="http://kimi.im/2020-07-02-build-clojure-with-maven-on-Windows"/>
   <updated>2020-07-02T00:00:00+00:00</updated>
   <id>http://kimi.im/build-clojure-with-maven-on-Windows</id>
   <content type="html">&lt;p&gt;
There are several ways to install &lt;code&gt;clojure&lt;/code&gt; on Linux and macOS, but
no Windows option. Anyway, &lt;code&gt;clojure&lt;/code&gt; official site provide one
option to compile it with &lt;code&gt;maven&lt;/code&gt;.
&lt;/p&gt;

&lt;ol class=&quot;org-ol&quot;&gt;
&lt;li&gt;download &lt;code&gt;maven&lt;/code&gt; from &lt;a href=&quot;http://maven.apache.org/download.cgi&quot;&gt;http://maven.apache.org/download.cgi&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;unpack &lt;code&gt;maven&lt;/code&gt; to some folder, such as &lt;code&gt;C:\apache-maven-3.6.3\bin&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;
add to &lt;code&gt;maven&lt;/code&gt; to &lt;code&gt;PATH&lt;/code&gt;, by add one line in &lt;code&gt;~/.bash_profile&lt;/code&gt;:
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-shell&quot;&gt;&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;export&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;PATH&lt;/span&gt;=$&lt;span style=&quot;color: #000000;&quot;&gt;PATH&lt;/span&gt;:/cygdrive/c/apache-maven-3.6.3/bin
&lt;/pre&gt;
&lt;/div&gt;&lt;/li&gt;

&lt;li&gt;&lt;p&gt;
clone &lt;code&gt;clojure&lt;/code&gt; src and compile with maven:
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-shell&quot;&gt;git clone https://github.com/clojure/clojure.git
&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;cd&lt;/span&gt; clojure
mvn -Plocal -Dmaven.test.skip=true package
&lt;/pre&gt;
&lt;/div&gt;&lt;/li&gt;

&lt;li&gt;&lt;p&gt;
Then start the REPL with the local jar:
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-shell&quot;&gt;java -jar clojure.jar
&lt;/pre&gt;
&lt;/div&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;
Now, you are a happy clojurian!
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>ssh connection through proxy</title>
   <link href="http://kimi.im/2020-06-30-ssh-through-proxy"/>
   <updated>2020-06-30T00:00:00+00:00</updated>
   <id>http://kimi.im/ssh-through-proxy</id>
   <content type="html">&lt;p&gt;
最近经常在Azure Global上的Ubuntu下工作。无奈，在中国访问Azure国际云速度是相当的慢。好在有国际代理，那么问题来了，如何通过代理 &lt;code&gt;ssh&lt;/code&gt; 远程登录Ubuntu呢？
&lt;/p&gt;

&lt;p&gt;
方法是这样的：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-shell&quot;&gt;alias &lt;span style=&quot;color: #000000;&quot;&gt;ubuntu&lt;/span&gt;=&lt;span style=&quot;color: #2A00FF;&quot;&gt;&apos;ssh -i ~/.ssh/id_rsa km@kimi.im -o &quot;ProxyCommand=nc -X connect -x 127.0.0.1:1080 %h %p&quot;&apos;&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
以上这个 &lt;code&gt;alias&lt;/code&gt; 就可以通过本地1080端口的代理访问远程服务器
&lt;code&gt;kimi.im&lt;/code&gt; ，用户名为 &lt;code&gt;km&lt;/code&gt; 。
&lt;/p&gt;

&lt;p&gt;
不过，如果你没有装 &lt;code&gt;nc&lt;/code&gt; 的话，敲了 &lt;code&gt;ubuntu&lt;/code&gt; 命令时候，会提示说找不到
&lt;code&gt;nc&lt;/code&gt; ， &lt;code&gt;Cygwin&lt;/code&gt; 环境用 &lt;code&gt;apg-cyg&lt;/code&gt; 安装 &lt;code&gt;nc&lt;/code&gt; ：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-shell&quot;&gt;$ apt-cyg install nc
Installing nc
--2020-06-30 20:47:40--  https://mirrors.tuna.tsinghua.edu.cn/cygwin//x86_64/release/nc/nc-1.107-4.tar.bz2
Resolving mirrors.tuna.tsinghua.edu.cn (mirrors.tuna.tsinghua.edu.cn)... 101.6.8.193, 2402:f000:1:408:8100::1
Connecting to mirrors.tuna.tsinghua.edu.cn (mirrors.tuna.tsinghua.edu.cn)|101.6.8.193|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 17895 (17K) [application/octet-stream]
Saving to: &amp;#8216;nc-1.107-4.tar.bz2&amp;#8217;

nc-1.107-4.tar.bz2  100%[===================&amp;gt;]  17.48K  --.-KB/s   &lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt; in&lt;/span&gt; 0s

2020-06-30 20:47:41 (36.0 MB/s) - &amp;#8216;nc-1.107-4.tar.bz2&amp;#8217; saved [17895/17895]

nc-1.107-4.tar.bz2: OK
Unpacking...
Package nc requires the following packages, installing:
cygwin
Package cygwin is already installed, skipping
Package nc installed
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
另外，我还在远程运行 &lt;code&gt;clojure&lt;/code&gt; 的 &lt;code&gt;nrel&lt;/code&gt; ，通过 &lt;code&gt;Emacs&lt;/code&gt; &lt;code&gt;cider&lt;/code&gt; 连接，所以还要把代理加到 &lt;code&gt;cider&lt;/code&gt; 的远程连接上：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-emacs-lisp&quot;&gt;(&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;defun&lt;/span&gt; &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;nrepl--ssh-tunnel-command&lt;/span&gt; (ssh dir port)
  &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;Command string to open SSH tunnel to the host associated with DIR&apos;s PORT.&quot;&lt;/span&gt;
  (&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;with-parsed-tramp-file-name&lt;/span&gt; dir v
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;;; &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;this abuses the -v option for ssh to get output when the port&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;;; &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;forwarding is set up, which is used to synchronise on, so that&lt;/span&gt;
    &lt;span style=&quot;color: #3F7F5F;&quot;&gt;;; &lt;/span&gt;&lt;span style=&quot;color: #3F7F5F;&quot;&gt;the port forwarding is up when we try to connect.&lt;/span&gt;
    (format-spec
     &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;%s -v -N -L %p:localhost:%p %u&apos;%h&apos; %x&quot;&lt;/span&gt;
     `((?s . ,ssh)
       (?p . ,port)
       (?h . ,v-host)
       (?u . ,(&lt;span style=&quot;color: #7F0055; font-weight: bold;&quot;&gt;if&lt;/span&gt; v-user (format &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;-l &apos;%s&apos; &quot;&lt;/span&gt; v-user) &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;&quot;&lt;/span&gt;))
       (?x . &lt;span style=&quot;color: #2A00FF;&quot;&gt;&quot;-o \&quot;ProxyCommand=nc -X connect -x 127.0.0.1:1080 %h %p\&quot;&quot;&lt;/span&gt;)))))
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
好了，这样 &lt;code&gt;ssh&lt;/code&gt; 和 &lt;code&gt;cider&lt;/code&gt; 都可以快速访问Azure了。
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>机械设计基础 - 螺纹连接</title>
   <link href="http://kimi.im/2020-05-16-mechanical-design-thread"/>
   <updated>2020-05-16T00:00:00+00:00</updated>
   <id>http://kimi.im/mechanical-design-thread</id>
   <content type="html">&lt;div id=&quot;outline-container-orgaca0751&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgaca0751&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;1&lt;/span&gt; 螺纹连接&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-1&quot;&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-org405835d&quot; class=&quot;outline-3&quot;&gt;
&lt;h3 id=&quot;org405835d&quot;&gt;&lt;span class=&quot;section-number-3&quot;&gt;1.1&lt;/span&gt; 四种基本类型&lt;/h3&gt;
&lt;div class=&quot;outline-text-3&quot; id=&quot;text-1-1&quot;&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;螺栓连接：被连接件孔中不切制螺纹，拆装方便。
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;普通螺栓连接：螺栓和孔之间有10%左右间隙，加工简单，应用最广。&lt;/li&gt;
&lt;li&gt;铰制孔用螺栓连接：螺杆外径与螺栓孔内径同一公称尺寸。适用于承受垂直螺栓轴线的横向载荷。&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;螺钉连接：螺钉直接旋入被连接件的螺纹空中，省去螺母，结构简单，但不宜经常拆装，易螺纹磨损失效。&lt;/li&gt;
&lt;li&gt;双头螺柱连接double-end stud：用于较厚的被连接件。&lt;/li&gt;
&lt;li&gt;紧定螺钉连接：常用来固定两零件的相对位置，并可传递不大的力或力矩。&lt;/li&gt;
&lt;/ul&gt;


&lt;div class=&quot;figure&quot;&gt;
&lt;p&gt;&lt;img src=&quot;http://www.dyjjj88.com/uploadfiles/pictures/news/20161228171634_1614.jpg&quot; alt=&quot;20161228171634_1614.jpg&quot; /&gt;
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-org0e8feea&quot; class=&quot;outline-3&quot;&gt;
&lt;h3 id=&quot;org0e8feea&quot;&gt;&lt;span class=&quot;section-number-3&quot;&gt;1.2&lt;/span&gt; 螺纹紧固件&lt;/h3&gt;
&lt;div class=&quot;outline-text-3&quot; id=&quot;text-1-2&quot;&gt;
&lt;ol class=&quot;org-ol&quot;&gt;
&lt;li&gt;螺栓&lt;/li&gt;
&lt;li&gt;双头螺柱&lt;/li&gt;
&lt;li&gt;螺钉&lt;/li&gt;
&lt;li&gt;紧定螺钉&lt;/li&gt;
&lt;li&gt;螺母&lt;/li&gt;
&lt;li&gt;垫圈&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgf8caae0&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgf8caae0&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;2&lt;/span&gt; 预紧和防松&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-2&quot;&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-org21283ad&quot; class=&quot;outline-3&quot;&gt;
&lt;h3 id=&quot;org21283ad&quot;&gt;&lt;span class=&quot;section-number-3&quot;&gt;2.1&lt;/span&gt; 拧紧力矩&lt;/h3&gt;
&lt;div class=&quot;outline-text-3&quot; id=&quot;text-2-1&quot;&gt;
&lt;p&gt;
拧紧力矩T = 阻力矩T&lt;sub&gt;1&lt;/sub&gt; + 摩擦力矩T&lt;sub&gt;1&lt;/sub&gt;
&lt;/p&gt;

\begin{equation}
T = T_1 + T_2 = \frac{F_a d_2}{2} \tan(\psi + \rho&apos;) + f_c F_a r_f
\end{equation}

&lt;p&gt;
其中 \(F_a\) 为轴向力，无工作载荷时，就是预紧力；\(d_2\) 为螺纹中径；\(f_c\) 是螺母与连接件支撑面的摩擦系数； \(r_f\) 为支撑面摩擦半径， \(r_f \approx
\frac{d_w+d_0}{4}\) 即外径与螺栓孔直径的中点半径，对于M10-M68的粗牙螺纹，简化为：
&lt;/p&gt;

\begin{equation}
T \approx 0.2 F_a d \quad N \cdot mm
\end{equation}

&lt;p&gt;
\(d\) 是螺纹的公称直径，mm；\(F_a\) 是预紧力，N。
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgb67ded6&quot; class=&quot;outline-3&quot;&gt;
&lt;h3 id=&quot;orgb67ded6&quot;&gt;&lt;span class=&quot;section-number-3&quot;&gt;2.2&lt;/span&gt; 螺纹连接的防松方法&lt;/h3&gt;
&lt;div class=&quot;outline-text-3&quot; id=&quot;text-2-2&quot;&gt;
&lt;ol class=&quot;org-ol&quot;&gt;
&lt;li&gt;利用附加摩擦力防松
&lt;ol class=&quot;org-ol&quot;&gt;
&lt;li&gt;弹簧垫圈&lt;/li&gt;
&lt;li&gt;对顶螺母&lt;/li&gt;
&lt;li&gt;尼龙锁紧螺母&lt;/li&gt;
&lt;/ol&gt;&lt;/li&gt;
&lt;li&gt;采用专门防松元件防松
&lt;ol class=&quot;org-ol&quot;&gt;
&lt;li&gt;槽形螺母和开口销&lt;/li&gt;
&lt;li&gt;圆柱螺母用带翅垫片&lt;/li&gt;
&lt;li&gt;止动垫片&lt;/li&gt;
&lt;/ol&gt;&lt;/li&gt;
&lt;li&gt;其他方法防松
&lt;ol class=&quot;org-ol&quot;&gt;
&lt;li&gt;冲点防松&lt;/li&gt;
&lt;li&gt;粘合法防松&lt;/li&gt;
&lt;/ol&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
</content>
 </entry>
 
 <entry>
   <title>Connect to Oracle DB from Clojure</title>
   <link href="http://kimi.im/2020-04-15-clojure-connect-to-oracle-db"/>
   <updated>2020-04-15T00:00:00+00:00</updated>
   <id>http://kimi.im/clojure-connect-to-oracle-db</id>
   <content type="html">&lt;p&gt;
I need to analyze data from Oracle database in Clojure, and come across some
error. Here is the solutions to the problems.
&lt;/p&gt;

&lt;div id=&quot;outline-container-org330ba58&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;org330ba58&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;1&lt;/span&gt; No suitable driver found&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-1&quot;&gt;
&lt;p&gt;
The first problem is no oracle database driver:
&lt;/p&gt;

&lt;pre class=&quot;example&quot;&gt;
Syntax error (SQLException) compiling at (C:\cygwin64\tmp\form-init16410964815710271710.clj:1:88).
No suitable driver found for jdbc:oracle:thin:@xxx.xxx.xxx.xxx:1521
&lt;/pre&gt;

&lt;p&gt;
The solution:
&lt;/p&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-org41e6496&quot; class=&quot;outline-3&quot;&gt;
&lt;h3 id=&quot;org41e6496&quot;&gt;&lt;span class=&quot;section-number-3&quot;&gt;1.1&lt;/span&gt; download Oracle jdbc driver&lt;/h3&gt;
&lt;div class=&quot;outline-text-3&quot; id=&quot;text-1-1&quot;&gt;
&lt;p&gt;
Download &quot;ojdbc8.jar&quot; from:
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;https://www.oracle.com/database/technologies/jdbc-ucp-122-downloads.html&quot;&gt;https://www.oracle.com/database/technologies/jdbc-ucp-122-downloads.html&lt;/a&gt;
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-org71414f3&quot; class=&quot;outline-3&quot;&gt;
&lt;h3 id=&quot;org71414f3&quot;&gt;&lt;span class=&quot;section-number-3&quot;&gt;1.2&lt;/span&gt; add lein-localrepo plugin to leiningen profiles&lt;/h3&gt;
&lt;div class=&quot;outline-text-3&quot; id=&quot;text-1-2&quot;&gt;
&lt;p&gt;
In ~/.lein/profiles.clj, add:
&lt;/p&gt;

&lt;pre class=&quot;example&quot;&gt;
{:user
 {
  :plugins [[lein-localrepo &quot;0.5.4&quot;]]
  }
 }
&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgabc049b&quot; class=&quot;outline-3&quot;&gt;
&lt;h3 id=&quot;orgabc049b&quot;&gt;&lt;span class=&quot;section-number-3&quot;&gt;1.3&lt;/span&gt; install oracledriver&lt;/h3&gt;
&lt;div class=&quot;outline-text-3&quot; id=&quot;text-1-3&quot;&gt;
&lt;pre class=&quot;example&quot;&gt;
$ lein localrepo install ~/downloads/ojdbc8.jar oracle.jdbc/oracledriver &quot;12.1.0.1&quot;
&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-org66ece1f&quot; class=&quot;outline-3&quot;&gt;
&lt;h3 id=&quot;org66ece1f&quot;&gt;&lt;span class=&quot;section-number-3&quot;&gt;1.4&lt;/span&gt; add dependencies in project.clj&lt;/h3&gt;
&lt;div class=&quot;outline-text-3&quot; id=&quot;text-1-4&quot;&gt;
&lt;pre class=&quot;example&quot;&gt;
:dependencies [[org.clojure/clojure &quot;1.10.1&quot;]
               [org.clojure/java.jdbc &quot;0.7.11&quot;]
               [oracle.jdbc/oracledriver &quot;12.1.0.1&quot;]] &amp;lt;--
&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgda825aa&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgda825aa&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;2&lt;/span&gt; No service found&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-2&quot;&gt;
&lt;pre class=&quot;example&quot;&gt;
Syntax error (NetException) compiling at (C:\cygwin64\tmp\form-init628084108377043642.clj:1:86).
Listener refused the connection with the following error:
ORA-12504, TNS:listener was not given the SID in CONNECT_DATA
&lt;/pre&gt;

&lt;p&gt;
You need to find the SERVICE_NAME from tnsnames.ora:
&lt;/p&gt;


&lt;pre class=&quot;example&quot;&gt;
TEST =
   (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = *&amp;lt;validhost&amp;gt;*)(PORT = *&amp;lt;validport&amp;gt;*))
    )
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = *&amp;lt;servicenamefromDB&amp;gt;*)
    )
)
&lt;/pre&gt;

&lt;p&gt;
defin the db-spec as:
&lt;/p&gt;

&lt;pre class=&quot;example&quot;&gt;
(def db-spec {:classname &quot;oracle.jdbc.OracleDriver&quot;
              :subprotocol &quot;oracle&quot;
              :subname &quot;@*&amp;lt;validhost&amp;gt;*:*&amp;lt;validport&amp;gt;*/*&amp;lt;servicenamefromDB&amp;gt;*&quot;
              :user &quot;username&quot;
              :password &quot;password&quot;})
&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
</content>
 </entry>
 
 <entry>
   <title>单词本：饮用水</title>
   <link href="http://kimi.im/2020-04-12-potable-water"/>
   <updated>2020-04-12T00:00:00+00:00</updated>
   <id>http://kimi.im/potable-water</id>
   <content type="html">&lt;p&gt;
2019年10月份就买了去欧洲的机票，同时定了酒店，租了汽车，却不巧遇到了COVID-19，退也麻烦，不退有风险。思考再三，决定还是试一下。还好，一路上也没有遇上什么麻烦。回来的还早，也避开了国外病毒爆发。
&lt;/p&gt;

&lt;p&gt;
那些天开着廉价的欧宝小车，在米兰、列支敦士登和瑞士的雪山和湖泊间穿梭，心情真是开阔。1月30日一早，从列支敦士登前往的路上，想上洗手间，中途从高速下去，在Mühlehorn
小镇幸运的找到了一个简易的移动卫生间。路口窗台上一个老人还用德语跟我聊了几句。能用蹩脚的德语和当地人聊聊天，也是很有成就感的事情。
&lt;/p&gt;

&lt;p&gt;
小镇的一户人家门口遇到了一个喷水池，上面用德语、法语和意大利语写着“饮用水”：
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;Trinkwasser&lt;/li&gt;
&lt;li&gt;eau potable&lt;/li&gt;
&lt;li&gt;acqua potabile&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
#+BEGIN_EXPORT html
&amp;lt;a data-flickr-embed=&quot;true&quot; href=&quot;&lt;a href=&quot;https://www.flickr.com/photos/kimim-photo/49764960012/in/dateposted-public/&quot;&gt;https://www.flickr.com/photos/kimim-photo/49764960012/in/dateposted-public/&lt;/a&gt;&quot; title=&quot;_DSF7216&quot;&amp;gt;&amp;lt;img src=&quot;&lt;img src=&quot;https://live.staticflickr.com/65535/49764960012_0ccbbe7389_z.jpg&quot; alt=&quot;49764960012_0ccbbe7389_z.jpg&quot; /&gt;&quot; width=&quot;640&quot; height=&quot;427&quot; alt=&quot;_DSF7216&quot;&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;script async src=&quot;//embedr.flickr.com/assets/client-code.js&quot; charset=&quot;utf-8&quot;&amp;gt;&amp;lt;/script&amp;gt;
#+END_HTML
&lt;/p&gt;

&lt;p&gt;
#+BEGIN_EXPORT html
&amp;lt;a data-flickr-embed=&quot;true&quot; href=&quot;&lt;a href=&quot;https://www.flickr.com/photos/kimim-photo/49764959652/in/dateposted-public/&quot;&gt;https://www.flickr.com/photos/kimim-photo/49764959652/in/dateposted-public/&lt;/a&gt;&quot; title=&quot;_DSF7217&quot;&amp;gt;&amp;lt;img src=&quot;&lt;img src=&quot;https://live.staticflickr.com/65535/49764959652_7e35728507_z.jpg&quot; alt=&quot;49764959652_7e35728507_z.jpg&quot; /&gt;&quot; width=&quot;640&quot; height=&quot;427&quot; alt=&quot;_DSF7217&quot;&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;script async src=&quot;//embedr.flickr.com/assets/client-code.js&quot; charset=&quot;utf-8&quot;&amp;gt;&amp;lt;/script&amp;gt;
#+END_HTML
&lt;/p&gt;

&lt;p&gt;
那户人家门口除了饮水池外，其他是这样子的：
&lt;/p&gt;

&lt;p&gt;
#+BEGIN_EXPORT html
&amp;lt;a data-flickr-embed=&quot;true&quot; href=&quot;&lt;a href=&quot;https://www.flickr.com/photos/kimim-photo/49764636676/in/dateposted-public/&quot;&gt;https://www.flickr.com/photos/kimim-photo/49764636676/in/dateposted-public/&lt;/a&gt;&quot; title=&quot;_DSF7215&quot;&amp;gt;&amp;lt;img src=&quot;&lt;img src=&quot;https://live.staticflickr.com/65535/49764636676_a5528dda0b_z.jpg&quot; alt=&quot;49764636676_a5528dda0b_z.jpg&quot; /&gt;&quot; width=&quot;640&quot; height=&quot;427&quot; alt=&quot;_DSF7215&quot;&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;script async src=&quot;//embedr.flickr.com/assets/client-code.js&quot; charset=&quot;utf-8&quot;&amp;gt;&amp;lt;/script&amp;gt;
#+END_HTML
&lt;/p&gt;

&lt;p&gt;
德语Wasser，法语l&apos;eau，意大利语acqua。从渊源来看，德语和英语比较类似，Water和
Wasser。法语则和意大利语比较相似，eau是从acqua演变过来的。不过在英语里饮用水叫做
potable water也可以说是drinkable water，看起来又像是法语和德语的组合。
&lt;/p&gt;

&lt;p&gt;
感觉欧洲那边的语言，就是互相混合来混合去，就形成新的语言了。各种称呼都存在，可能有些细微的差别，非母语者真是很难体会。
&lt;/p&gt;

&lt;p&gt;
不过去瑞士这样不同区域分别主要讲法语、德语和意大利语的国家，可以随处看到三个语言的对照文本，对于学习语言帮助挺大的。所以想快快学好德语、法语和意大利语，可以考虑多去瑞士走走看看。
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>意大利旅游申根签证（带小孩）</title>
   <link href="http://kimi.im/2019-12-06-shengen-visa-for-italy-trip"/>
   <updated>2019-12-06T00:00:00+00:00</updated>
   <id>http://kimi.im/shengen-visa-for-italy-trip</id>
   <content type="html">&lt;p&gt;
终于弄好了意大利的旅游签证，因为是带着一个6岁的娃，所以手续相对麻烦一些。简单整理如下，以供参考。
&lt;/p&gt;

&lt;div id=&quot;outline-container-org4e92296&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;org4e92296&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;1&lt;/span&gt; 在哪里提交签证&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-1&quot;&gt;
&lt;p&gt;
首先，登录vfsglobal签证中心网站：
&lt;a href=&quot;https://www.vfsglobal.cn/italy/china/chinese/index.html&quot;&gt;https://www.vfsglobal.cn/italy/china/chinese/index.html&lt;/a&gt; ，选择在哪个城市递交签证申请，目前有北京、上海、广州和重庆市四个地方。我们离上海最近，因此选择上海。
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-org0914b43&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;org0914b43&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;2&lt;/span&gt; 选择签证类型&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-2&quot;&gt;
&lt;p&gt;
打开上海领区的页面后，选择签证类型：个人旅游（ADS除外）
&lt;a href=&quot;https://www.vfsglobal.cn/italy/china/Shanghai/chinese/individul_tourism_visa_application.html&quot;&gt;https://www.vfsglobal.cn/italy/china/Shanghai/chinese/individul_tourism_visa_application.html&lt;/a&gt;
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-org80dae19&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;org80dae19&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;3&lt;/span&gt; 下载审核表&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-3&quot;&gt;
&lt;p&gt;
然后在所需材料标签页中找到“个人旅游签证申请审核表 （ADS除外） ”，这上面有意大利、英语和中文的详细清单。签证受理专员也是按照这个清单一项项审核的。
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgddfb008&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgddfb008&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;4&lt;/span&gt; 准备签证资料&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-4&quot;&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-orga48b1f6&quot; class=&quot;outline-3&quot;&gt;
&lt;h3 id=&quot;orga48b1f6&quot;&gt;&lt;span class=&quot;section-number-3&quot;&gt;4.1&lt;/span&gt; 常规材料&lt;/h3&gt;
&lt;div class=&quot;outline-text-3&quot; id=&quot;text-4-1&quot;&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-org997b3dc&quot; class=&quot;outline-4&quot;&gt;
&lt;h4 id=&quot;org997b3dc&quot;&gt;&lt;span class=&quot;section-number-4&quot;&gt;4.1.1&lt;/span&gt; 签证申请表&lt;/h4&gt;
&lt;div class=&quot;outline-text-4&quot; id=&quot;text-4-1-1&quot;&gt;
&lt;p&gt;
每人一份
&lt;/p&gt;

&lt;p&gt;
在“表格下载”标签页中下载签证申请表（
   &lt;a href=&quot;https://www.vfsglobal.cn/italy/china/Shanghai/chinese/pdf/Visa-application-Schengen-new-doc.pdf&quot;&gt;https://www.vfsglobal.cn/italy/china/Shanghai/chinese/pdf/Visa-application-Schengen-new-doc.pdf&lt;/a&gt;
   ），填写签证申请表。
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-org7f75de6&quot; class=&quot;outline-4&quot;&gt;
&lt;h4 id=&quot;org7f75de6&quot;&gt;&lt;span class=&quot;section-number-4&quot;&gt;4.1.2&lt;/span&gt; 照片&lt;/h4&gt;
&lt;div class=&quot;outline-text-4&quot; id=&quot;text-4-1-2&quot;&gt;
&lt;p&gt;
每人两张
&lt;/p&gt;

&lt;p&gt;
提交两张本人照片，ICAO规格，35mmx40mm，不要过度PS，6个月以内拍摄。不符合条件的话，在签证中心。我家宝宝就是因为PS过度，看上去和真人不太像了，被要求重新拍摄。可以花
30元拍四张。
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgd77a3c0&quot; class=&quot;outline-4&quot;&gt;
&lt;h4 id=&quot;orgd77a3c0&quot;&gt;&lt;span class=&quot;section-number-4&quot;&gt;4.1.3&lt;/span&gt; 护照&lt;/h4&gt;
&lt;div class=&quot;outline-text-4&quot; id=&quot;text-4-1-3&quot;&gt;
&lt;p&gt;
护照原件，确保回国日之后还有3个月有效期，有至少两张空白页。不然就赶紧更新护照。
&lt;/p&gt;

&lt;p&gt;
复印护照首页和尾页，各两份。
&lt;/p&gt;

&lt;p&gt;
如果有以往的申根签证，每个签证复印一页。
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-org77fb6b4&quot; class=&quot;outline-4&quot;&gt;
&lt;h4 id=&quot;org77fb6b4&quot;&gt;&lt;span class=&quot;section-number-4&quot;&gt;4.1.4&lt;/span&gt; 户口本&lt;/h4&gt;
&lt;div class=&quot;outline-text-4&quot; id=&quot;text-4-1-4&quot;&gt;
&lt;p&gt;
每人一份。
&lt;/p&gt;

&lt;p&gt;
复印户口本第一页开始到最后一页有信息的那一页为止。
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgd124d2e&quot; class=&quot;outline-4&quot;&gt;
&lt;h4 id=&quot;orgd124d2e&quot;&gt;&lt;span class=&quot;section-number-4&quot;&gt;4.1.5&lt;/span&gt; 身份证&lt;/h4&gt;
&lt;div class=&quot;outline-text-4&quot; id=&quot;text-4-1-5&quot;&gt;
&lt;p&gt;
每人一份。
&lt;/p&gt;

&lt;p&gt;
16岁以下没有身份证可以不提供。
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-org28a40b8&quot; class=&quot;outline-4&quot;&gt;
&lt;h4 id=&quot;org28a40b8&quot;&gt;&lt;span class=&quot;section-number-4&quot;&gt;4.1.6&lt;/span&gt; 结婚证&lt;/h4&gt;
&lt;div class=&quot;outline-text-4&quot; id=&quot;text-4-1-6&quot;&gt;
&lt;p&gt;
夫妻两本各复印三分，大人小孩各一份。
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-org227702f&quot; class=&quot;outline-3&quot;&gt;
&lt;h3 id=&quot;org227702f&quot;&gt;&lt;span class=&quot;section-number-3&quot;&gt;4.2&lt;/span&gt; 行程计划&lt;/h3&gt;
&lt;div class=&quot;outline-text-3&quot; id=&quot;text-4-2&quot;&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-orga1a59a7&quot; class=&quot;outline-4&quot;&gt;
&lt;h4 id=&quot;orga1a59a7&quot;&gt;&lt;span class=&quot;section-number-4&quot;&gt;4.2.1&lt;/span&gt; 旅行计划&lt;/h4&gt;
&lt;div class=&quot;outline-text-4&quot; id=&quot;text-4-2-1&quot;&gt;
&lt;p&gt;
每人一份。
&lt;/p&gt;

&lt;p&gt;
模板地址：&lt;a href=&quot;https://wenku.baidu.com/view/1363de89e73a580216fc700abb68a98271feacd6&quot;&gt;https://wenku.baidu.com/view/1363de89e73a580216fc700abb68a98271feacd6&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
显示城市、日期、交通、住宿等。涵盖出发与抵达之间的所有日期。
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-org95503a9&quot; class=&quot;outline-4&quot;&gt;
&lt;h4 id=&quot;org95503a9&quot;&gt;&lt;span class=&quot;section-number-4&quot;&gt;4.2.2&lt;/span&gt; 往返机票&lt;/h4&gt;
&lt;div class=&quot;outline-text-4&quot; id=&quot;text-4-2-2&quot;&gt;
&lt;p&gt;
每人一份。
&lt;/p&gt;

&lt;p&gt;
因为要提供英文版的机票预订单，携程、国航官网等都试了，不行。只有gotogate可以搞到：
&lt;a href=&quot;https://www.gotogate.com/&quot;&gt;https://www.gotogate.com/&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
在最后付款之前打印预订单。
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgb95d60f&quot; class=&quot;outline-4&quot;&gt;
&lt;h4 id=&quot;orgb95d60f&quot;&gt;&lt;span class=&quot;section-number-4&quot;&gt;4.2.3&lt;/span&gt; 住宿证明&lt;/h4&gt;
&lt;div class=&quot;outline-text-4&quot; id=&quot;text-4-2-3&quot;&gt;
&lt;p&gt;
每人一份。
&lt;/p&gt;

&lt;p&gt;
在Booking上切换语言为英文，预定可以免费取消的酒店：&lt;a href=&quot;https://www.booking.com/&quot;&gt;https://www.booking.com/&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
打印预订单。
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgf09a048&quot; class=&quot;outline-3&quot;&gt;
&lt;h3 id=&quot;orgf09a048&quot;&gt;&lt;span class=&quot;section-number-3&quot;&gt;4.3&lt;/span&gt; 在职、资产证明&lt;/h3&gt;
&lt;div class=&quot;outline-text-3&quot; id=&quot;text-4-3&quot;&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-org50563a1&quot; class=&quot;outline-4&quot;&gt;
&lt;h4 id=&quot;org50563a1&quot;&gt;&lt;span class=&quot;section-number-4&quot;&gt;4.3.1&lt;/span&gt; 在职证明&lt;/h4&gt;
&lt;div class=&quot;outline-text-4&quot; id=&quot;text-4-3-1&quot;&gt;
&lt;p&gt;
父母各自每人一份，宝宝需要父母在职证明复印件各一份。
&lt;/p&gt;

&lt;p&gt;
模板地址：&lt;a href=&quot;https://wenku.baidu.com/view/14bbae6c2dc58bd63186bceb19e8b8f67d1cef2d&quot;&gt;https://wenku.baidu.com/view/14bbae6c2dc58bd63186bceb19e8b8f67d1cef2d&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
修改模板中名字、岗位、入职日期、公司、旅行起止日期、生日、护照号、公司地址等信息。打印后，公司主管签字，盖公司章。
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-org2764c9c&quot; class=&quot;outline-4&quot;&gt;
&lt;h4 id=&quot;org2764c9c&quot;&gt;&lt;span class=&quot;section-number-4&quot;&gt;4.3.2&lt;/span&gt; 名片&lt;/h4&gt;
&lt;div class=&quot;outline-text-4&quot; id=&quot;text-4-3-2&quot;&gt;
&lt;p&gt;
各提供一张。
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-org6930ebc&quot; class=&quot;outline-4&quot;&gt;
&lt;h4 id=&quot;org6930ebc&quot;&gt;&lt;span class=&quot;section-number-4&quot;&gt;4.3.3&lt;/span&gt; 公司营业执照&lt;/h4&gt;
&lt;div class=&quot;outline-text-4&quot; id=&quot;text-4-3-3&quot;&gt;
&lt;p&gt;
父母各自每人一份，宝宝需要父母在职证明复印件各一份。
&lt;/p&gt;

&lt;p&gt;
须盖公司章。
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-org6dc266a&quot; class=&quot;outline-4&quot;&gt;
&lt;h4 id=&quot;org6dc266a&quot;&gt;&lt;span class=&quot;section-number-4&quot;&gt;4.3.4&lt;/span&gt; 银行流水&lt;/h4&gt;
&lt;div class=&quot;outline-text-4&quot; id=&quot;text-4-3-4&quot;&gt;
&lt;p&gt;
父母各自每人一份，宝宝需要父母在职证明复印件各一份。
&lt;/p&gt;

&lt;p&gt;
储蓄卡3个月以上的资金记录。或者信用卡3月以上的对账单，加信用卡正面复印页。
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-org646a8b2&quot; class=&quot;outline-4&quot;&gt;
&lt;h4 id=&quot;org646a8b2&quot;&gt;&lt;span class=&quot;section-number-4&quot;&gt;4.3.5&lt;/span&gt; 其他资产证明&lt;/h4&gt;
&lt;div class=&quot;outline-text-4&quot; id=&quot;text-4-3-5&quot;&gt;
&lt;p&gt;
房产证、机动车登记证、支付宝资产证明、股票账户投资资产证明等。
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;


&lt;div id=&quot;outline-container-org3853048&quot; class=&quot;outline-3&quot;&gt;
&lt;h3 id=&quot;org3853048&quot;&gt;&lt;span class=&quot;section-number-3&quot;&gt;4.4&lt;/span&gt; 未成年小孩特别资料&lt;/h3&gt;
&lt;div class=&quot;outline-text-3&quot; id=&quot;text-4-4&quot;&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-org855b77f&quot; class=&quot;outline-4&quot;&gt;
&lt;h4 id=&quot;org855b77f&quot;&gt;&lt;span class=&quot;section-number-4&quot;&gt;4.4.1&lt;/span&gt; 亲属关系公证书&lt;/h4&gt;
&lt;div class=&quot;outline-text-4&quot; id=&quot;text-4-4-1&quot;&gt;
&lt;p&gt;
原件及三份复印件。
&lt;/p&gt;

&lt;p&gt;
可在线办理：&lt;a href=&quot;https://www.hz-notary.com/&quot;&gt;https://www.hz-notary.com/&lt;/a&gt; ，但是价格会翻倍。
&lt;/p&gt;

&lt;p&gt;
有空的话最好现场办理，提供出生证、结婚证、身份证、户口本即可。费用为200到400元。
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-org22f0b3a&quot; class=&quot;outline-4&quot;&gt;
&lt;h4 id=&quot;org22f0b3a&quot;&gt;&lt;span class=&quot;section-number-4&quot;&gt;4.4.2&lt;/span&gt; 小孩费用父母承担担保函原件&lt;/h4&gt;
&lt;div class=&quot;outline-text-4&quot; id=&quot;text-4-4-2&quot;&gt;
&lt;p&gt;
打印出来，父母签字。
&lt;/p&gt;

&lt;p&gt;
模板：&lt;a href=&quot;https://wenku.baidu.com/view/32933a43cd84b9d528ea81c758f5f61fb73628c5&quot;&gt;https://wenku.baidu.com/view/32933a43cd84b9d528ea81c758f5f61fb73628c5&lt;/a&gt;
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orga3f9aae&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orga3f9aae&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;5&lt;/span&gt; 提交给签证中心&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-5&quot;&gt;
&lt;p&gt;
杭州的签证中心在杭州市江干区钱江路1366号华润大厦7楼。需要到地下一层找到万象城门口的保安登记获取门禁卡才能进去。
&lt;/p&gt;

&lt;p&gt;
大人签证费469元。小孩子6周岁以下无需签证费，6周岁以上274元。服务费每个人78元。
&lt;/p&gt;

&lt;p&gt;
快递每份护照单独邮寄，这个没办法。50元一份，非常坑。拍照一次30元，A4纸打印一次3
元，复印一次1元。护照状态更新短信通知15元每个人。这个可以选择不要，可以在签证中心网站上自己查：&lt;a href=&quot;https://www.vfsvisaonline.com/Global-PassportTracking/&quot;&gt;https://www.vfsvisaonline.com/Global-PassportTracking/&lt;/a&gt; 。不过速度相当慢。
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
</content>
 </entry>
 
 <entry>
   <title>法语单词：biscuit</title>
   <link href="http://kimi.im/2019-11-27-biscuit"/>
   <updated>2019-11-27T00:00:00+00:00</updated>
   <id>http://kimi.im/biscuit</id>
   <content type="html">&lt;p&gt;
今天下班后去健身房跑步30分钟，回到家吃完饭，洗好澡，感觉神清气爽啊。运动真的是非常美妙的申请。往常，下班后的这个时候，我都是满脸油腻，浑身疲倦，就像葛优躺在沙发上刷刷手机。今天，我居然有兴致坐下来，敲敲键盘！
&lt;/p&gt;

&lt;p&gt;
话说，上周去了日本北海道玩了一圈，认识了好多地名：小樽Otaru，札幌Sapporo，千岁
Shitose，大通Odori等。当然也品尝到了北海道大学认证的小饼干。奶香味很浓郁的。
&lt;/p&gt;

&lt;p&gt;
根据牛津英语词典，饼干这个词是来源于拉丁语的biscoctus&lt;sup&gt;&lt;a id=&quot;fnr.1&quot; class=&quot;footref&quot; href=&quot;#fn.1&quot;&gt;1&lt;/a&gt;&lt;/sup&gt;：
&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;
Middle English from Old French bescuit, based on Latin bis ‘twice’ + coctus,
past participle of coquere ‘to cook’ (so named because originally biscuits were
cooked in a twofold process: first baked and then dried out in a slow oven so
that they would keep).
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;
根据传说，12世纪意大利的一个海边小城市力有一位粗心的糕点师傅，他把已经烘焙好的薄饼又不小心放进烤炉里烤了一次（可怜的薄饼）。谁知烤了两次的薄饼松松脆脆香香甜甜，非常好吃。于是，就把这种脆饼叫做biscuit。
&lt;/p&gt;

&lt;p&gt;
bis-和bi-是两次的意思的前缀。比如，bicycle两轮的自行车，biceps二头肌，
bicentenary 200周年纪念日，bisect二等分，bisexual雌雄同体。至于，cuit，是不是和法语的cuisine很像？英语里cuisine是指烹饪风味。比如French cuisine，Italian
cuisine，Chinese cuisine。在法语里，cuisine是动词，cook的意思。cuit大概就是
cooked的意思。
&lt;/p&gt;

&lt;p&gt;
举个几个栗子：
&lt;/p&gt;

&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;Elle mange un biscuit. 她吃饼干。&lt;/li&gt;
&lt;li&gt;Il a beaucoup de biscuits dans sa maison. 他房间里有很多饼干。&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;footnotes&quot;&gt;
&lt;h2 class=&quot;footnotes&quot;&gt;Footnotes: &lt;/h2&gt;
&lt;div id=&quot;text-footnotes&quot;&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.1&quot; class=&quot;footnum&quot; href=&quot;#fnr.1&quot;&gt;1&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;https://www.lexico.com/en/definition/biscuit&quot;&gt;https://www.lexico.com/en/definition/biscuit&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;


&lt;/div&gt;
&lt;/div&gt;
</content>
 </entry>
 
 <entry>
   <title>阅读《怦然心动的人生整理魔法》</title>
   <link href="http://kimi.im/2019-10-26-organizing-your-room-organizing-your-life"/>
   <updated>2019-10-26T00:00:00+00:00</updated>
   <id>http://kimi.im/organizing-your-room-organizing-your-life</id>
   <content type="html">&lt;p&gt;
“真正的人生，从整理之后开始！” —— 近藤麻理惠
&lt;/p&gt;

&lt;p&gt;
这个周末，一个人在家，比较空闲。所以多读了几本书。我的读书清单是：
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;《怦然心动的人生整理魔法》&lt;/li&gt;
&lt;li&gt;《恋爱课》&lt;/li&gt;
&lt;li&gt;《练习的心态：如何培养耐心、专注和自律》&lt;/li&gt;
&lt;li&gt;《问题首富：黄光裕》&lt;/li&gt;
&lt;li&gt;《中国历代政治得失》&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
《怦然心动的人生整理魔法》的作者是近藤麻理惠女士。她五岁就开始读家庭主妇类的生活杂志，15岁开始研究整理发，现在是职业的家庭和办公室整理顾问，在全世界各地演讲，帮助人们进行整理。
&lt;/p&gt;

&lt;p&gt;
近藤MM提出了怦然心动整理法，可以让再怕麻烦、再懒的人长久的保持房间整洁的状态。
&lt;/p&gt;

&lt;p&gt;
整理这个行为本身其实很简单，就是一连串单纯的作业，无非是把移动物品。但是往往整理好了，随着时间推移又会乱掉。近藤女士认为，这因为没有掌握正确整理的理念。正确的理念是：无论丢弃还是保留一样物品，最终都是为了让自己幸福。
&lt;/p&gt;

&lt;p&gt;
因此，从开始整理的那一刻起，你就被迫重新启动自己的人生了。结果人生因整理而开始发生很大的变化。
&lt;/p&gt;

&lt;p&gt;
整理的最基本方法是先丢弃，后收纳。整理不好的人无外乎有三种：1）不愿丢弃的人；2）不能把东西放回原处的人；3）既不愿丢弃也不能把东西放回原处的人。但归根到底还是因为不愿丢弃，导致物品太多，而无法放回原处。所以整理要从丢弃开始。
&lt;/p&gt;

&lt;p&gt;
所以近藤MM要求他的客户按照衣服、书籍、小物品、纪念品这样循序渐进的顺序进行一轮丢弃。因为物品除了本身的使用价值外，还有功能、信息、感情以及稀缺性等要素，所以要从衣服这样价值最低的物品开始处理。先将属于同一类的物品集中在一起，一件一件用手触碰，如果还有怦然心动的感觉，就保留。对于没有心动感，却又不愿意丢弃的物品，要一一的思考他们真正的功能，若已经完成了它的使命，就要坦然的面对它们，说声谢谢，然后放手。这才算整理好了我们与物品的关系。为了珍惜真正有价值的物品，必须首先丢弃掉已经完成了使命的物品。所谓的整理就是整理每一个过去，重启自己的幸福人生。空间的使用不该是为了过去的自己，而是为了将来的自己。
&lt;/p&gt;

&lt;p&gt;
当丢弃物品到无物可丢的时候，就会迎来一个适量的感悟点，一种顿悟的状态。这时候，自己心底真正在意的东西就会慢慢浮现。
&lt;/p&gt;

&lt;p&gt;
然后，就是要对保留的物品进行收纳。设定物品固有的位置，一个不漏的设定他们的位置。这就是收纳的本质。收纳要简化致极为止。使自己拥有的物品数量始终处于可控的状态。物品按他的主人或者物品的种类进行分类。无论是谁，都要有一个只属于自己的领地。
&lt;/p&gt;

&lt;p&gt;
收纳的时候，不要堆叠，尽量竖着收纳。第一，可以使用更多的空间；第二，堆叠压坏底下的物品；第三，可以更快的找到物品。
&lt;/p&gt;

&lt;p&gt;
当丢弃到无物可丢，收纳到物归其位的时候，人和物的关系达到了最和谐的状态。之后，用完物品放回原位，新增的物品，考量它的去留，若是保留，则妥善放置。这样，就能长久的保持房间整洁的状态了。达到这种状态会使人更健康，更高效，更走运，更幸福。
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>洗碗</title>
   <link href="http://kimi.im/2019-10-20-washing_bowls"/>
   <updated>2019-10-20T00:00:00+00:00</updated>
   <id>http://kimi.im/washing_bowls</id>
   <content type="html">&lt;p&gt;
中午，吃好饭，洗碗。
&lt;/p&gt;

&lt;p&gt;
看着清水冲走瓷碗上的油污，感觉洗碗是一件很享受的事情。
&lt;/p&gt;

&lt;p&gt;
智者乐水，我就很喜欢水。我从小生活在山脚溪边海边，见多了各种各样的水，对这些溪水河水海水都非常喜欢。
&lt;/p&gt;

&lt;p&gt;
我也很喜欢陶瓷，不论去到商城还是日本、芬兰、德国，我对货架上的陶瓷品，总会驻足欣赏。
&lt;/p&gt;

&lt;p&gt;
所以，对一个喜欢清水，喜欢陶瓷的人来说，安安静静的洗几个碗，真是再享受不过了。
&lt;/p&gt;

&lt;p&gt;
温柔的清水，在指间淌过，带走了油污，也带走了烦恼。这一刻，可以达到冥想的效果，没有任何杂念，只有外在的哗哗流水声和内在沉沉的呼吸声。此时，感觉身体消失了，灵魂也跳进水流中洗澡去了。
&lt;/p&gt;

&lt;p&gt;
洗好碗，心灵也做了一次SPA。
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>在 Windows 上用 Emacs+offlineimap+mu4e 查收邮件</title>
   <link href="http://kimi.im/2019-04-01-emacs-offlineimap-mu4e-on-windows"/>
   <updated>2019-04-01T00:00:00+00:00</updated>
   <id>http://kimi.im/emacs-offlineimap-mu4e-on-windows</id>
   <content type="html">&lt;p&gt;
本文介绍如何在 Windows 上用 Emacs、mu4e 和 offlineimap 下载邮件，本地索引，快速查看。并且支持中文字符的邮箱文件夹。虽然步骤不复杂，但是在 Windows 上实现这些，应该是全网首创了。
&lt;/p&gt;

&lt;p&gt;
上个周末在家里的 macOS 配置好了 mu4e+offlineimap，用起来很快捷方便，周一一早在公司的 Windows PC 上试着设置下。没想到能调好，我还是挺惊喜的。
&lt;/p&gt;

&lt;p&gt;
以下设置主要参考了这篇文章：&lt;a href=&quot;https://frosch03.de/blog/2016/05/mu4e-within-cygwin.html&quot;&gt;https://frosch03.de/blog/2016/05/mu4e-within-cygwin.html&lt;/a&gt;
&lt;/p&gt;

&lt;div id=&quot;outline-container-org71d4e69&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;org71d4e69&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;1&lt;/span&gt; 准备工作&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-1&quot;&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;下载安装 cygwin &lt;a href=&quot;https://www.cygwin.com/setup-x86_64.exe&quot;&gt;https://www.cygwin.com/setup-x86_64.exe&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
在 cygwin 中安装：
&lt;/p&gt;

&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;emacs-w32 (26.1.92)&lt;/li&gt;
&lt;li&gt;git (2.17.0)&lt;/li&gt;
&lt;li&gt;autoconf (13-1)&lt;/li&gt;
&lt;li&gt;automake (10.1)&lt;/li&gt;
&lt;li&gt;libtool (2.4.6-6)&lt;/li&gt;
&lt;li&gt;gcc-g++ (7.4.0-1)&lt;/li&gt;
&lt;li&gt;pkg-config (1.6.0-1)&lt;/li&gt;
&lt;li&gt;make (4.2.1-2)&lt;/li&gt;
&lt;li&gt;mingw64-x86_64-win-iconv (0.0.6-2)&lt;/li&gt;
&lt;li&gt;libglib2.0-devel (2.54.3-1)&lt;/li&gt;
&lt;li&gt;libgmime3.0-devel (3.0.5-1)&lt;/li&gt;
&lt;li&gt;libxapian-devel (1.4.5-1)&lt;/li&gt;
&lt;li&gt;python2 (2.7.16-1)&lt;/li&gt;
&lt;li&gt;python27-pip (19.0.3-1)&lt;/li&gt;
&lt;li&gt;offlineimap (6.5.5-1)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
最快捷的方式是通过 &lt;code&gt;apt-cyg&lt;/code&gt; 安装：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-shell&quot;&gt;apt-cyg install emacs-w32 git \
        autoconf automake libtool \
        gcc-g++ pkg-config make mingw64-x86_64-win-iconv \
        libglib2.0-devel libgmime3.0-devel \
        libxapian-devel python2 python27-pip offlineimap
&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;


&lt;div id=&quot;outline-container-orge6b73ee&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orge6b73ee&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;2&lt;/span&gt; 下载 mu 源码&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-2&quot;&gt;
&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-shell&quot;&gt;git clone https://github.com/djcb/mu.git
&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgdab8aaa&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgdab8aaa&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;3&lt;/span&gt; 编译 mu&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-3&quot;&gt;
&lt;p&gt;
参考 Compiling mu 部分：&lt;a href=&quot;https://frosch03.de/blog/2016/05/mu4e-within-cygwin.html&quot;&gt;https://frosch03.de/blog/2016/05/mu4e-within-cygwin.html&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
其中不少步骤可以省去，仅需执行以下命令：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-shell&quot;&gt;ln -s /usr/x86_64-w64-mingw32/sys-root/mingw/include/iconv.h /usr/include/iconv.h
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
不然编译出错：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-shell&quot;&gt;In file included from /usr/include/gmime-3.0/gmime/gmime.h:29:0,
                 from mu-msg-priv.h:29,
                 from mu-msg-crypto.c:27:
/usr/include/gmime-3.0/gmime/gmime-iconv.h:26:10: 致命错误：iconv.h：No such file or directory
 #include &amp;lt;iconv.h&amp;gt;
          ^~~~~~~~~
编译中断。
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
编译并安装 mu：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-shell&quot;&gt;cd mu
autoreconf -i
./configure
make
make install
&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-org18001de&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;org18001de&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;4&lt;/span&gt; 准备 python lib&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-4&quot;&gt;
&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-shell&quot;&gt;pip2 install six portalocker
&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-org7a9815c&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;org7a9815c&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;5&lt;/span&gt; 修改 offlineimap&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-5&quot;&gt;
&lt;p&gt;
由于 cygwin 上 6.5.5-1 版本的 offlineimap 对邮件的中文文件夹支持不好，需要最新版的
offlineimap，但是最新版又需要 fcntl 库，而 Windows 上支持的又不好，所以改用可移植版的文件锁 portalocker。
&lt;/p&gt;

&lt;p&gt;
简单做了一个 patch：&lt;a href=&quot;https://github.com/kimim/offlineimap/commit/94ce99ac9c0b4c5653fe46339feb525571d734a5&quot;&gt;https://github.com/kimim/offlineimap/commit/94ce99ac9c0b4c5653fe46339feb525571d734a5&lt;/a&gt;
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-diff&quot;&gt;try:
-    import fcntl
+    import portalocker
except:
    pass # Ok if this fails, we can do without.

@@ -232,7 +232,7 @@ def __lock(self):

        self._lockfd = open(self._lockfilepath, &apos;w&apos;)
        try:
-            fcntl.lockf(self._lockfd, fcntl.LOCK_EX|fcntl.LOCK_NB)
+            portalocker.lock(self._lockfd, portalocker.LOCK_EX)
        except NameError:
            #fcntl not available (Windows), disable file locking... :(
            pass
@@ -250,6 +250,7 @@ def _unlock(self):

        #If we own the lock file, delete it
        if self._lockfd and not self._lockfd.closed:
+            portalocker.unlock(self._lockfd)
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
最简单的方法是 clone 我的修改，然后将 offlineimap 替换掉：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-shell&quot;&gt;git clone https://github.com/kimim/offlineimap
rm -rf /lib/python2.7/site-packages/offlineimap
cp -r offlineimap/offlineimap /lib/python2.7/site-packages/offlineimap
&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-org77cc622&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;org77cc622&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;6&lt;/span&gt; 设置.offlinemaprc 和 mu4e&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-6&quot;&gt;
&lt;p&gt;
其他设置参考：&lt;a href=&quot;http://kimi.im/2019-03-31-emacs-offlineimap-mu4e-mail-client&quot;&gt;http://kimi.im/2019-03-31-emacs-offlineimap-mu4e-mail-client&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&lt;code&gt;~/.offlineimaprc&lt;/code&gt; 如下：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-shell&quot;&gt;[general]
accounts = outlook
maxsyncaccounts = 3

[Account outlook]
localrepository = outlook-Local
remoterepository = outlook-Remote
utf8foldernames = True

[Repository outlook-Local]
type = Maildir
localfolders = ~/.mail/outlook

[Repository outlook-Remote]
type = IMAP
remotehost = imap.partner.outlook.cn
remoteuser = &amp;lt;your mail address&amp;gt;
remotepass = &amp;lt;your password&amp;gt;
ssl = true
sslcacertfile = /etc/ssl/certs/ca-bundle.crt
maxconnections = 1
realdelete = yes
&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgddb98a1&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgddb98a1&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;7&lt;/span&gt; 大功告成&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-7&quot;&gt;
&lt;p&gt;
然后，就可以在 emacs-w32 下快乐的收发邮件了。macOS 上设置 emacs + mu4e + offlineimap
请参考：&lt;a href=&quot;http://kimi.im/2019-03-31-emacs-offlineimap-mu4e-mail-client&quot;&gt;http://kimi.im/2019-03-31-emacs-offlineimap-mu4e-mail-client&lt;/a&gt;
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
</content>
 </entry>
 
 <entry>
   <title>在 Emacs 中用 mu4e 和 offlineimap 查看 O365 Exchange 邮件</title>
   <link href="http://kimi.im/2019-03-31-emacs-offlineimap-mu4e-mail-client"/>
   <updated>2019-03-31T00:00:00+00:00</updated>
   <id>http://kimi.im/emacs-offlineimap-mu4e-mail-client</id>
   <content type="html">&lt;p&gt;
为了能在 Emacs 中收发邮件，来来回回折腾了不少时间。终于搞定了。现将配置过程梳理如下。
&lt;/p&gt;

&lt;div id=&quot;outline-container-org7b411f9&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;org7b411f9&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;1&lt;/span&gt; 检查系统环境&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-1&quot;&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-org24dc830&quot; class=&quot;outline-3&quot;&gt;
&lt;h3 id=&quot;org24dc830&quot;&gt;&lt;span class=&quot;section-number-3&quot;&gt;1.1&lt;/span&gt; 软件版本&lt;/h3&gt;
&lt;div class=&quot;outline-text-3&quot; id=&quot;text-1-1&quot;&gt;
&lt;ol class=&quot;org-ol&quot;&gt;
&lt;li&gt;macOS 10.14.3 (18D109)&lt;/li&gt;
&lt;li&gt;GNU Emacs 26.1 (build 1, x86_64-apple-darwin14.5.0, NS appkit-1348.17 Version 10.10.5 (Build 14F2511)) of 2018-05-31&lt;/li&gt;
&lt;li&gt;mu (mail indexer/searcher) version 1.0&lt;/li&gt;
&lt;li&gt;offlineimap v7.2.1, imaplib2 v2.57 (bundled), Python v2.7.10, LibreSSL 2.2.7&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-org2812b31&quot; class=&quot;outline-3&quot;&gt;
&lt;h3 id=&quot;org2812b31&quot;&gt;&lt;span class=&quot;section-number-3&quot;&gt;1.2&lt;/span&gt; 邮件系统&lt;/h3&gt;
&lt;div class=&quot;outline-text-3&quot; id=&quot;text-1-2&quot;&gt;
&lt;p&gt;
世纪互联运营的 Office 365
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;服务器名称: partner.outlook.cn&lt;/li&gt;
&lt;li&gt;端口: 993&lt;/li&gt;
&lt;li&gt;加密方法: TLS&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgf4680ed&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgf4680ed&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;2&lt;/span&gt; 安装 mu 和 offlineimap&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-2&quot;&gt;
&lt;p&gt;
安装 mu：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-shell&quot;&gt;brew install mu
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
安装 offlineimap
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-shell&quot;&gt;brew install offlineimap
&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-org90bc35b&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;org90bc35b&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;3&lt;/span&gt; 配置 offlineimap&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-3&quot;&gt;
&lt;p&gt;
在 HOME path 下创建 &lt;code&gt;.offlineimaprc&lt;/code&gt;, 内容如下：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-shell&quot;&gt;[general]
accounts = outlook
maxsyncaccounts = 3
pythonfile = ~/.offlineimap.py

[Account outlook]
localrepository = outlook-Local
remoterepository = outlook-Remote
utf8foldernames = True

[Repository outlook-Local]
&lt;span style=&quot;color: #000000;&quot;&gt;type&lt;/span&gt; = Maildir
localfolders = ~/.mail/outlook

[Repository outlook-Remote]
&lt;span style=&quot;color: #000000;&quot;&gt;type&lt;/span&gt; = IMAP
remotehost = imap.partner.outlook.cn
remoteuser = &amp;lt;your mail address&amp;gt;
remotepass = &amp;lt;your password&amp;gt;
ssl = true
sslcacertfile = /etc/ssl/cert.pem
maxconnections = 4
realdelete = yes
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
我看到网上不少文章说 offlineimap 不支持中文，但是查看 offlineimap 代码发现有
&lt;code&gt;utf8foldernames&lt;/code&gt; 选项，设置成 True 即可支持 utf-8 了。因此也不需要 decode
imap4-utf-7 了。
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-org86327f6&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;org86327f6&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;4&lt;/span&gt; 同步邮件&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-4&quot;&gt;
&lt;p&gt;
执行以下命令：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-shell&quot;&gt;offlineimap
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
运行结果如下：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-shell&quot;&gt;kimi.im:~$ offlineimap
OfflineIMAP 7.2.1
  Licensed under the GNU GPL v2 or any later version (with an OpenSSL exception)
imaplib2 v2.57 (bundled), Python v2.7.10, LibreSSL 2.2.7
Account sync outlook:
 *** Processing account outlook
 Establishing connection to imap.partner.outlook.cn:993 (outlook-Remote)
......
Account sync outlook:
 *** Finished account &lt;span style=&quot;color: #3a5fcd;&quot;&gt;&apos;outlook&apos;&lt;/span&gt;&lt;span style=&quot;color: #8b008b; font-weight: bold;&quot;&gt; in&lt;/span&gt; 5:11
&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-org4aebda0&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;org4aebda0&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;5&lt;/span&gt; 用 mu 索引邮件&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-5&quot;&gt;
&lt;p&gt;
执行命令：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-shell&quot;&gt;mu index -m ~/.mail
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
运行结果如下：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-shell&quot;&gt;kimi.im:~$ mu index -m ~/.mail
indexing messages under /Users/kimim/.mail [/Users/kimim/.mu/xapian]
/ processing mail; processed: 15750; updated/new: 0, cleaned-up: 0
cleaning up messages [/Users/kimim/.mu/xapian]
| processing mail; processed: 15814; updated/new: 0, cleaned-up: 0
elapsed: 0 second(s)
/ processing mail; processed: 15814; updated/new: 0, cleaned-up: 0
elapsed: 0 second(s)
&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-org9faae17&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;org9faae17&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;6&lt;/span&gt; 配置 mu4e&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-6&quot;&gt;
&lt;p&gt;
在 Emacs 中增加 elisp
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-emacs-lisp&quot;&gt;(&lt;span style=&quot;color: #8b008b; font-weight: bold;&quot;&gt;when&lt;/span&gt; (eq system-type &apos;darwin)
  (add-to-list &apos;load-path &lt;span style=&quot;color: #3a5fcd;&quot;&gt;&quot;/usr/local/Cellar/mu/1.0_1/share/emacs/site-lisp/mu/mu4e&quot;&lt;/span&gt;))

(&lt;span style=&quot;color: #8b008b; font-weight: bold;&quot;&gt;require&lt;/span&gt; &apos;&lt;span style=&quot;color: #5f9ea0;&quot;&gt;mu4e&lt;/span&gt;)
(&lt;span style=&quot;color: #8b008b; font-weight: bold;&quot;&gt;setq&lt;/span&gt; mail-user-agent &apos;mu4e-user-agent)
(&lt;span style=&quot;color: #8b008b; font-weight: bold;&quot;&gt;setq&lt;/span&gt; mu4e-maildir &lt;span style=&quot;color: #3a5fcd;&quot;&gt;&quot;~/.mail&quot;&lt;/span&gt;)
(&lt;span style=&quot;color: #8b008b; font-weight: bold;&quot;&gt;setq&lt;/span&gt; mu4e-get-mail-command &lt;span style=&quot;color: #3a5fcd;&quot;&gt;&quot;offlineimap -u quiet&quot;&lt;/span&gt;)
(&lt;span style=&quot;color: #8b008b; font-weight: bold;&quot;&gt;setq&lt;/span&gt; mu4e-update-interval 60)

(&lt;span style=&quot;color: #8b008b; font-weight: bold;&quot;&gt;setq&lt;/span&gt; mu4e-sent-folder   &lt;span style=&quot;color: #3a5fcd;&quot;&gt;&quot;/outlook/Sent Messages&quot;&lt;/span&gt;)
(&lt;span style=&quot;color: #8b008b; font-weight: bold;&quot;&gt;setq&lt;/span&gt; mu4e-drafts-folder &lt;span style=&quot;color: #3a5fcd;&quot;&gt;&quot;/outlook/Drafts&quot;&lt;/span&gt;)
(&lt;span style=&quot;color: #8b008b; font-weight: bold;&quot;&gt;setq&lt;/span&gt; mu4e-trash-folder  &lt;span style=&quot;color: #3a5fcd;&quot;&gt;&quot;/outlook/Deleted Messages&quot;&lt;/span&gt;)
(&lt;span style=&quot;color: #8b008b; font-weight: bold;&quot;&gt;setq&lt;/span&gt; mu4e-refile-folder  &lt;span style=&quot;color: #3a5fcd;&quot;&gt;&quot;/outlook/Archive&quot;&lt;/span&gt;)

(&lt;span style=&quot;color: #8b008b; font-weight: bold;&quot;&gt;setq&lt;/span&gt; mu4e-view-show-images t)
&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-org591d744&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;org591d744&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;7&lt;/span&gt; 大功告成&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-7&quot;&gt;
&lt;p&gt;
然后在 Emacs 中 &lt;code&gt;M-x mu4e&lt;/code&gt; 即可查阅邮件了。
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
</content>
 </entry>
 
 <entry>
   <title>单词本：法语单词 debut</title>
   <link href="http://kimi.im/2019-03-14-francais-debut"/>
   <updated>2019-03-14T00:00:00+00:00</updated>
   <id>http://kimi.im/francais-debut</id>
   <content type="html">&lt;p&gt;
也许是巧合，也许是缘分，也许只是从前未曾留意你。
&lt;/p&gt;

&lt;p&gt;
没错，我说的是认识新单词这件事情。
&lt;/p&gt;

&lt;p&gt;
昨天早上查看邮件，看到一则 Twitter 的消息：
&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;
Apple may unveil its streaming service on March 25, reports say. According to
several reporters and news outlets, the tech giant is expected to release more
information on the debut.
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;
这句话里，我昨天还不认识的单词 debut 初次亮相。一般以 on debut 或者 make a debut. on
the debut 好像不太用。
&lt;/p&gt;

&lt;p&gt;
主要有两层意思：
&lt;/p&gt;
&lt;ol class=&quot;org-ol&quot;&gt;
&lt;li&gt;a first public appearance or presentation, as of a performer, artistic work,
or new product. 作为演员、艺术作品或者新产品的第一次公开亮相。&lt;/li&gt;
&lt;li&gt;a formal introduction of a young woman into society. 对一位初次进入社交圈的女士的正式介绍。&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;
巧合的是，傍晚看新闻，又见到两次 debut。一次是我们公司的 Karma 汽车新闻：
&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;
Get ready for our all-electric Karma Vision concept set to debut at Auto
Shanghai 2019 in April. We believe that beauty is more than just stunning
design. What advanced technologies do you expect from the future of electric
mobility?
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;
万向的纯电动汽车 Karma Vision 在 2019 上海车展初次亮相。这里用的是 set to debut.
&lt;/p&gt;

&lt;p&gt;
另一则新闻是阿里巴巴关于女性创业者的新闻：
&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;
Jiu &quot;9&quot; Jin, Founder of particle fever: A former Harvard student and New York
Attorney, Jiu &quot;9&quot; Jin created the sportsware lin Particle Fever and grew the
brand on Tmall. Her collection debuted on the NYFW runway after just 3 years.
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;
哈佛大学法学院毕业的九斤做了一个运动穿着品牌，名字来源于纪录片《Particle Fever》，九斤认为：不会根据用户的喜好或市场的潮流决定产品的设计；做品牌不在乎从哪里开始，什么时候都不嫌晚；喜欢我们人喜欢就行。
&lt;/p&gt;

&lt;p&gt;
Particle Fever 在纽约时装周初次亮相“debuted on the NYFW”。这里用了动词形式。
&lt;/p&gt;

&lt;p&gt;
看吧，稍稍留点心，我就在一天中，三次看到 debut 这个单词。但是我总觉得这个拼法不太英语。稍作调查，就知道，这其实是一个法语：début。
&lt;/p&gt;

&lt;p&gt;
le début
&lt;/p&gt;
&lt;ol class=&quot;org-ol&quot;&gt;
&lt;li&gt;开始， 开端， 开头。le début du printemps 初春。le début du livre est
passionnant 书的开头很引人入胜。Ce n&apos;est qu&apos;un début. 这只是个开始。&lt;/li&gt;
&lt;li&gt;首次登台演出； 首次社会活动； （作家的）第一部著作&lt;/li&gt;
&lt;li&gt;发球，开球。&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;
它的动词形式：débuter：开始，开头；首次参加。débuter dans la vie 初次踏进社会。
&lt;/p&gt;

&lt;p&gt;
它的衍生形容词和名词：débutant, e：初出茅庐的；初学的；n. 新手；初学者。un
pianiste débutant 一位初出茅庐的钢琴家。
&lt;/p&gt;

&lt;p&gt;
好了，8 点了，我要上班了，希望以上对大家有用。
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>看新闻学单词：华为起诉美国政府</title>
   <link href="http://kimi.im/2019-03-07-huawei-verklagt-usa"/>
   <updated>2019-03-07T00:00:00+00:00</updated>
   <id>http://kimi.im/huawei-verklagt-usa</id>
   <content type="html">&lt;p&gt;
众所周知，博主是个 Emacs 工具控，喜欢捣鼓一些有趣的 elisp 插件。最近在 Emacs 中安装了一个 elfeed(&lt;a href=&quot;https://github.com/skeeto/elfeed&quot;&gt;https://github.com/skeeto/elfeed&lt;/a&gt;)，用来订阅新闻流，用起来真是舒爽：
&lt;/p&gt;

&lt;a data-flickr-embed=&quot;true&quot;  href=&quot;https://www.flickr.com/photos/kimim-photo/33429598668/in/dateposted-public/&quot; title=&quot;elfeed&quot;&gt;&lt;img src=&quot;https://farm8.staticflickr.com/7831/33429598668_9e2d690287_z.jpg&quot; width=&quot;640&quot; height=&quot;173&quot; alt=&quot;elfeed&quot;&gt;&lt;/a&gt;&lt;script async src=&quot;//embedr.flickr.com/assets/client-code.js&quot; charset=&quot;utf-8&quot;&gt;&lt;/script&gt;

&lt;p&gt;
有了这个插件，就可以在 Emacs 中一览世界各地发生的新闻啦。
&lt;/p&gt;

&lt;p&gt;
比如最近华为起诉美国的新闻，让我们来一起学习学习新闻中的单词吧。
&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;
Der chinesische Telekommunikationskonzern Huawei verklagt die USA, weil
US-Regierungsbehörden keine Ausrüstung des Konzerns kaufen dürfen.
Unternehmenschef Guo Ping warf den USA zudem vor, Huawei-Server gehackt und
E-Mails und Quellcodes gestohlen zu haben. Nähere Angaben machte Guo zu diesen
Vorwürfen zunächst nicht.
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;dl class=&quot;org-dl&quot;&gt;
&lt;dt&gt;der Konzern&lt;/dt&gt;&lt;dd&gt;康采恩，康采恩是德语 Konzern 的音译，原意为多种企业集团。这是一种规模庞大而复杂的资本主义垄断组织形式。它以实力最雄厚的大垄断企业或银行为核心，由不同经济部门的许多企业联合组成，范围包括十个以至数百个矿业、工业、贸易、银行、保险、运输等企业，是金融寡头实现其经济上统治的最高组织形式。金融寡头通过大银行或大工业企业，采用参与制掌握股票控制额，使其他参与者从属于自己，从而得以控制比其本身资本大几倍甚至几十倍的资本，在经济上占居更有力的地位，攫取高额垄断利润。&lt;sup&gt;&lt;a id=&quot;fnr.1&quot; class=&quot;footref&quot; href=&quot;#fn.1&quot;&gt;1&lt;/a&gt;&lt;/sup&gt; 比如，Siemens ist ein Großer
Konzern. 西门子是一家大的企业集团。&lt;/dd&gt;
&lt;dt&gt;verklagen&lt;/dt&gt;&lt;dd&gt;控告，起诉。Er hat seinen Kameraden beim Lehrer verklagt. 他在老师面前告了他同学的状。&lt;/dd&gt;
&lt;dt&gt;die Regierungsbehörden&lt;/dt&gt;&lt;dd&gt;政府。die Regierung, 统治，掌权，内阁。Er sitzt in
der Regierung. 他在内阁任职。Die Regierung repräsentiert das Volk. 政府代表人民。die Behörden, 官方，当局，机关。&lt;/dd&gt;
&lt;dt&gt;die Ausrüstung&lt;/dt&gt;&lt;dd&gt;装备、武器。Ausrüstung und Technik sind inzwischen viel
besser. 装备和技术现在好了很多。inzwischen, 此刻，此时，现在。&lt;/dd&gt;
&lt;dt&gt;der Unternehmenschef&lt;/dt&gt;&lt;dd&gt;CEO, 执行总监，公司老板。&lt;/dd&gt;
&lt;dt&gt;vorwerfen&lt;/dt&gt;&lt;dd&gt;责备，批评。Ich lasse mir nicht vorwerfen, ich sei an allem
schuld. 我不允许别人指责我，说我对一切都有过错。verfen, 抛，扔，投。这个 werfen 是投的意思，vor 是向前的意思。向前丢东西，或者说往别人身上丢东西，就是指责的意思。还是挺形象的。&lt;/dd&gt;
&lt;dt&gt;der Vorwürf&lt;/dt&gt;&lt;dd&gt;指责的名词。&lt;/dd&gt;
&lt;dt&gt;nähere&lt;/dt&gt;&lt;dd&gt;详细的。&lt;/dd&gt;
&lt;dt&gt;die Angaben&lt;/dt&gt;&lt;dd&gt;报告，说明。&lt;/dd&gt;
&lt;dt&gt;zunächst&lt;/dt&gt;&lt;dd&gt;暂时，目前。&lt;/dd&gt;
&lt;/dl&gt;

&lt;p&gt;
希望华为能够胜诉吧。
&lt;/p&gt;
&lt;div id=&quot;footnotes&quot;&gt;
&lt;h2 class=&quot;footnotes&quot;&gt;Footnotes: &lt;/h2&gt;
&lt;div id=&quot;text-footnotes&quot;&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.1&quot; class=&quot;footnum&quot; href=&quot;#fnr.1&quot;&gt;1&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;https://baike.baidu.com/item/%E5%BA%B7%E9%87%87%E6%81%A9/81279?fr=aladdin&quot;&gt;https://baike.baidu.com/item/康采恩/81279?fr=aladdin&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;


&lt;/div&gt;
&lt;/div&gt;
</content>
 </entry>
 
 <entry>
   <title>看新聞學外語：艾米·克罗布切</title>
   <link href="http://kimi.im/2019-02-11-Amy-Klobuchar-vs-Donald-Trump"/>
   <updated>2019-02-11T00:00:00+00:00</updated>
   <id>http://kimi.im/Amy-Klobuchar-vs-Donald-Trump</id>
   <content type="html">&lt;div id=&quot;outline-container-org3eb186b&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;org3eb186b&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;1&lt;/span&gt; Introduction&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-1&quot;&gt;
&lt;p&gt;
話說最近美國遭遇極端天氣，芝加哥迎來 25 年以來最低氣溫零下 30 多度，（幸虧在 1 月初去的芝加哥，那時候晚上也就零下 6 度）。現在美國的暴雪天氣還在繼續，就在這樣一個冰天雪地的日子，58 歲的艾米大媽，站在街頭開演講，宣佈參選美國總統。
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-org3656524&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;org3656524&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;2&lt;/span&gt; 氣候變化協定&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-2&quot;&gt;
&lt;p&gt;
針對氣候變化，她表示，會第一時間重新加入氣候變化協定。德國《Spiegel》（明鏡報）報道：
&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;
&quot;Es ist an der Zeit, dass wir uns unsere Demokratie zurückholen&quot;, sagte Amy Klobuchar am
Sonntag in dichtem Schneetreiben und bei fast minus zehn Grad Celsius vor
jubelnden Anhängern. Die 58-Jährige kündigte unter anderem an, im Falle ihres
Wahlsieges einen Schwerpunkt auf den Klimaschutz zu legen. &quot;Am ersten Tag werden
wir dem internationalen Klimaschutzabkommen wieder beitreten.&quot;
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;dl class=&quot;org-dl&quot;&gt;
&lt;dt&gt;zurück|holen&lt;/dt&gt;&lt;dd&gt;重新取回。holen，取回，拿回。zurück-, back, 返回。比如
zurück|bekommen, to get back, 收回，找回。Ich habe das Buch
endlich zurückbekommen. 我最終收回了這本書。zurück|blicken, to
look back, 回头看，回顧，回憶。Er blickte noch einmal auf die
Stadt zurück. 他回頭再次看了下這個城市。zurück|bringen, to
bring back, 送還，交還。zurück|fahren, to go back, 乘車返回。
Wir werden euch heute abend nach Hause zurückfahren. 我們今晚將驅車送你們回家。&lt;/dd&gt;
&lt;dt&gt;dicht&lt;/dt&gt;&lt;dd&gt;密集的，濃密的。Der Schnee fällt in dichten Flocken. 雪花大片大片下。&lt;/dd&gt;
&lt;dt&gt;der Anhänger&lt;/dt&gt;&lt;dd&gt;拖車、行李標籤、支持者、追隨者、門徒、信徒。Anhänger einer
Bewegung oder Anhänger einer Lehre. Es ist eine Rede für ihre
Anhänger. 這是為她的追隨者做的一次演講。&lt;/dd&gt;
&lt;dt&gt;im Falle&lt;/dt&gt;&lt;dd&gt;如果發生，這種情況下。Im Falle daß er krank ist,werde ich die
Arbeit übernehmen. 如果他生病了，我將承擔這項任務。&lt;/dd&gt;
&lt;dt&gt;der Wahlsieg&lt;/dt&gt;&lt;dd&gt;選舉勝利。&lt;/dd&gt;
&lt;dt&gt;der Klimaschutz&lt;/dt&gt;&lt;dd&gt;氣候保護。Klimaschutzabkommen，氣候變化協定。&lt;/dd&gt;
&lt;dt&gt;beitreten&lt;/dt&gt;&lt;dd&gt;參與，加入。&lt;/dd&gt;
&lt;/dl&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-org138d9d8&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;org138d9d8&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;3&lt;/span&gt; 特朗普的反擊&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-3&quot;&gt;
&lt;p&gt;
隨後，推特總統 Trump 就發微博反擊&lt;sup&gt;&lt;a id=&quot;fnr.1&quot; class=&quot;footref&quot; href=&quot;#fn.1&quot;&gt;1&lt;/a&gt;&lt;/sup&gt;，諷刺 Amy 站在大雪中 fighting 全球變暖，像個雪人。
&lt;/p&gt;

&lt;a data-flickr-embed=&quot;true&quot;  href=&quot;https://www.flickr.com/photos/kimim-photo/47060265031/in/dateposted-public/&quot; title=&quot;Donald vs Amy&quot;&gt;&lt;img src=&quot;https://farm8.staticflickr.com/7903/47060265031_bc63e49ee4_z.jpg&quot; width=&quot;640&quot; height=&quot;466&quot; alt=&quot;Donald vs Amy&quot;&gt;&lt;/a&gt;&lt;script async src=&quot;//embedr.flickr.com/assets/client-code.js&quot; charset=&quot;utf-8&quot;&gt;&lt;/script&gt;

&lt;blockquote&gt;
&lt;p&gt;
Well, it happened again. Amy Klobuchar announced that she is running for
President, talking proudly of fighting global warming while standing in a
virtual blizzard of snow, ice and freezing temperatures. Bad timing. By the end
of her speech she looked like a Snowman(woman)!
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;
網友們直呼，總統先生，請不要把氣候和天氣搞混淆了！
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-org1ed3c64&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;org1ed3c64&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;4&lt;/span&gt; 總結&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-4&quot;&gt;
&lt;p&gt;
這是假期的最後一次外語學習。明天要好好上班啦。在上一個年度里，獲得了集體和個人雙優獎，希望在新的一年里，能夠再創輝煌。
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;footnotes&quot;&gt;
&lt;h2 class=&quot;footnotes&quot;&gt;Footnotes: &lt;/h2&gt;
&lt;div id=&quot;text-footnotes&quot;&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.1&quot; class=&quot;footnum&quot; href=&quot;#fnr.1&quot;&gt;1&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;https://twitter.com/realDonaldTrump/status/1094718856197799936&quot;&gt;https://twitter.com/realDonaldTrump/status/1094718856197799936&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;


&lt;/div&gt;
&lt;/div&gt;
</content>
 </entry>
 
 <entry>
   <title>单词本：太阳系</title>
   <link href="http://kimi.im/2019-02-10-solar-system"/>
   <updated>2019-02-10T00:00:00+00:00</updated>
   <id>http://kimi.im/solar-system</id>
   <content type="html">&lt;div id=&quot;outline-container-org209147d&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;org209147d&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;1&lt;/span&gt; Introduction&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-1&quot;&gt;
&lt;p&gt;
看了最近很火的电影《流浪地球》，感觉挺震撼的。地球飞船为了能够飞离太阳系，要借助木星的引力来一次大转弯，差一点就撞上了木星。真是惊险刺激。
&lt;/p&gt;

&lt;p&gt;
太阳系总共有那么几个恒星和行星，他们分别是：太阳、水星、金星、地球、火星、木星、土星、天王星、海王星、冥王星，还有地球的卫星月亮。
&lt;/p&gt;

&lt;p&gt;
英语：Sun、Mercury、Venus、Earth、Mars、Jupiter、Saturn、Uranus、Neptune、Pluto、Moon。
&lt;/p&gt;

&lt;p&gt;
法语：le Soleil、Mercure、Vénus、la Terre、Mars、Jupiter、Saturne、Uranus、Neptune、Pluton、la Lune。
&lt;/p&gt;

&lt;p&gt;
德语：die Sonne、der Merkur、die Venus、die Erde、der Mars、der Jupiter、der Saturn、der Uranus、der Neptun、der Pluto、der Mond。
&lt;/p&gt;

&lt;p&gt;
几个有趣的现象：
&lt;/p&gt;
&lt;ol class=&quot;org-ol&quot;&gt;
&lt;li&gt;法语里太阳是阳性的，也就是太阳公公，而德语里则是阴性的太阳婆婆。&lt;/li&gt;
&lt;li&gt;法语里月亮是阳性的月亮婆婆，而德语里则是月亮公公。&lt;/li&gt;
&lt;li&gt;法语一般太阳、月亮、地球会加冠词，而其他行星则不用。&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-org68fab00&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;org68fab00&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;2&lt;/span&gt; 水星（Mercury、Mercure、der Merkur）&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-2&quot;&gt;
&lt;p&gt;
水星在英法德语中又是水银、汞，都来源于罗马神话墨丘利（Mercŭrĭus&lt;sup&gt;(latin)&lt;/sup&gt;)。他行走敏捷，精力充沛，多才多艺，在奥林匹斯山上担任诸神的使者和传译，作为沟通之神的他拥有过人的智慧和交流能力，所以也被称为商业之神。由于水星在天上运行的速度很快，所以用了他的名字而命名。他在希腊神话中有另外一个名字，叫做赫尔墨斯，也就是那个很贵很贵很贵的箱包品牌爱马仕 Hermès（Ἑρμῆς&lt;sup&gt;(greek)&lt;/sup&gt;）。
&lt;/p&gt;

&lt;p&gt;
Mercure, première planète du système solaire, la plus proche du Soleil. Merkur
ist innerster Planet des Sonnensystems, nach dem römischen Gott benannt.
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-org742e9b1&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;org742e9b1&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;3&lt;/span&gt; 金星（Venus、Vénus、die Venus）&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-3&quot;&gt;
&lt;p&gt;
维纳斯是古罗马神话中的美神、爱神，相对应于希腊神话的阿佛洛狄德 Aphrodite。
&lt;/p&gt;

&lt;p&gt;
Les quatre planètes telluriques du Système solaire sont Mercure, Vénus, la Terre
et Mars. 太阳系中的四个类地行星是水星，金星，地球和火星。Les hommes viennent de
Mars et les femmes de Vénus. 男人来自火星，女人来自金星。Venus ist zweiter
Planet unseres Sonnensystems. 金星是太阳系八大行星中的第二颗。
&lt;/p&gt;

&lt;p&gt;
La Vénus de Milo est l&apos;un des fleurons du Musée du Louvre. 维纳斯雕像是卢浮宫的镇馆之宝之一。Venus ist die Liebesgöttin in römischen Mythen. 维纳斯是罗马神话中爱之女神。
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-org538d556&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;org538d556&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;4&lt;/span&gt; 火星（Mars、Mars、der Mars）&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-4&quot;&gt;
&lt;p&gt;
马尔斯是罗马神话中的战神。
&lt;/p&gt;

&lt;p&gt;
Est-ce qu&apos;il y a des habitants sur la planète Mars? 火星上有居民们吗？
&lt;/p&gt;

&lt;p&gt;
另外，法语里三月是 Mars，德语是 März，英语则是 March。因为按照传统习惯，3 月是每年出征远战的季节,人们便把战神马尔斯的名字作为 3 月的月名。
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-org550cd33&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;org550cd33&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;5&lt;/span&gt; 木星（Jupiter、Jupiter、der Jupiter）&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-5&quot;&gt;
&lt;p&gt;
朱庇特是罗马神话中统领神域和凡间的众神之王，古老的天空神及光明、法律之神，对应希腊神话中的宙斯。
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgffb02d1&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgffb02d1&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;6&lt;/span&gt; 土星（Saturn、Saturne、der Saturn）&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-6&quot;&gt;
&lt;p&gt;
古罗马神话中，农业之神萨敦是朱庇特的父亲。
&lt;/p&gt;

&lt;p&gt;
Saturne parcourt sa sphère en trente années. 土星 30 年公转一圈。
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgf1b25ea&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgf1b25ea&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;7&lt;/span&gt; 天王星（Uranus、Uranus、der Uranus）&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-7&quot;&gt;
&lt;p&gt;
乌拉诺斯是古希腊神话中的天空之神，从母亲盖娅的指端诞生，最初作为统治者的众神之王、即天空的神格化。
&lt;/p&gt;

&lt;p&gt;
另外，第 92 号元素，铀是以 Uranus 命名的：Uranium。
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgd97310e&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgd97310e&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;8&lt;/span&gt; 海王星（Neptune、Neptune、der Neptun）&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-8&quot;&gt;
&lt;p&gt;
尼普顿，又译涅普顿，是罗马神话中的海神，也作为马匹之神被崇拜，管理赛马活动。对应希腊神话中的波塞冬（Poseidon）。
&lt;/p&gt;

&lt;p&gt;
按照科学家的传统，第 93 号元素镎就是用 Neptune 命名的：Neptunium。
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-org8e3d4aa&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;org8e3d4aa&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;9&lt;/span&gt; 冥王星（Pluto、Pluton、der Pluto）&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-9&quot;&gt;
&lt;p&gt;
普鲁托是罗马神话中的冥王，阴间的主宰，地府之王，人们死后灵魂世界的主宰者。对应希腊神话中的哈迪斯（Hades）。
&lt;/p&gt;

&lt;p&gt;
不过，2006 年 8 月 24 日下午，在第 26 届国际天文联合会通过决议，将冥王星划为矮行星，自行星之列中除名。
&lt;/p&gt;

&lt;p&gt;
相应的，94 号元素钚是以冥王星命名的：Plutonium。
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgbfa98d7&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgbfa98d7&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;10&lt;/span&gt; 总结&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-10&quot;&gt;
&lt;p&gt;
以上简单学习了太阳系各个行星的名字，及其来源。
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
</content>
 </entry>
 
 <entry>
   <title>设置 Emacs 窗口大小</title>
   <link href="http://kimi.im/2019-02-09-emacs-frame-dimention"/>
   <updated>2019-02-09T00:00:00+00:00</updated>
   <id>http://kimi.im/emacs-frame-dimention</id>
   <content type="html">&lt;div id=&quot;outline-container-org927e882&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;org927e882&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;1&lt;/span&gt; 需求分析&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-1&quot;&gt;
&lt;p&gt;
我希望不论在哪一台电脑上打开 Emacs，都能按比例设定窗口在桌面的尺寸，比如说上下左右各占 10%，窗口长宽各占显示器的 80%。
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-org0d4a5e8&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;org0d4a5e8&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;2&lt;/span&gt; 实现方案&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-2&quot;&gt;
&lt;p&gt;
基于以上需求，很自然想到的就是读出显示器的长宽，然后按比例计算各参数的值。
&lt;/p&gt;

&lt;p&gt;
在 Emacs 中， &lt;code&gt;default-frame-alist&lt;/code&gt; 就是用来做设置显示参数的。其中 &lt;code&gt;top&lt;/code&gt;, &lt;code&gt;left&lt;/code&gt;,
&lt;code&gt;height&lt;/code&gt;, &lt;code&gt;width&lt;/code&gt; 分别用来这是 Emacs 窗口与显示器上边缘像素距离，左边缘像素距离，窗口高度字符数，宽度字符数。请注意这里的区别： &lt;code&gt;top&lt;/code&gt; 和 &lt;code&gt;left&lt;/code&gt; 分别是用像素值表示，而 &lt;code&gt;height&lt;/code&gt; 和 &lt;code&gt;width&lt;/code&gt; 是用字符数表示的。
&lt;/p&gt;

&lt;p&gt;
要设置前面提到的四个参数，首先是获取显示器的长宽像素值，在 elisp 中，函数
&lt;code&gt;x-display-pixel-height&lt;/code&gt; 和 &lt;code&gt;x-display-pixel-width&lt;/code&gt; 可以用来获取显示器长宽的像素值，函数文档如下：
&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;
(x-display-pixel-height &amp;amp;optional FRAME)
&lt;/p&gt;

&lt;p&gt;
Return the height in pixels of DISPLAY.
The optional argument DISPLAY specifies which display to ask about.
DISPLAY should be either a frame or a display name (a string).
If omitted or nil, that stands for the selected frame’s display.
&lt;/p&gt;

&lt;p&gt;
On &quot;multi-monitor&quot; setups this refers to the pixel height for all
physical monitors associated with DISPLAY.  To get information for
each physical monitor, use ‘display-monitor-attributes-list’.
&lt;/p&gt;

&lt;p&gt;
(x-display-pixel-width &amp;amp;optional FRAME)
&lt;/p&gt;

&lt;p&gt;
Return the width in pixels of DISPLAY.
The optional argument DISPLAY specifies which display to ask about.
DISPLAY should be either a frame or a display name (a string).
If omitted or nil, that stands for the selected frame’s display.
&lt;/p&gt;

&lt;p&gt;
On &quot;multi-monitor&quot; setups this refers to the pixel width for all
physical monitors associated with DISPLAY.  To get information for
each physical monitor, use ‘display-monitor-attributes-list’.
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;
有了这两个函数，就可以计算 &lt;code&gt;top&lt;/code&gt; 和 &lt;code&gt;left&lt;/code&gt; 了，按照我的需求，分别除以 10，得到 10%
的数值：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-emacs-lisp&quot;&gt;(add-to-list &apos;default-frame-alist
             (cons &apos;top  (/ (x-display-pixel-height) 10)))
(add-to-list &apos;default-frame-alist
             (cons &apos;left (/ (x-display-pixel-width) 10)))
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
在计算 &lt;code&gt;height&lt;/code&gt; 和 &lt;code&gt;width&lt;/code&gt; 的时候，需要另外两个数值，分别是一个字符的高和宽，对应的函数是 &lt;code&gt;frame-char-height&lt;/code&gt; 和 &lt;code&gt;frame-char-width&lt;/code&gt; ：
&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;
(frame-char-height &amp;amp;optional FRAME)
&lt;/p&gt;

&lt;p&gt;
Height in pixels of a line in the font in frame FRAME.
If FRAME is omitted or nil, the selected frame is used.
For a terminal frame, the value is always 1.
&lt;/p&gt;

&lt;p&gt;
(frame-char-width &amp;amp;optional FRAME)
&lt;/p&gt;

&lt;p&gt;
Width in pixels of characters in the font in frame FRAME.
If FRAME is omitted or nil, the selected frame is used.
On a graphical screen, the width is the standard width of the default font.
For a terminal screen, the value is always 1.
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;
这样， &lt;code&gt;height&lt;/code&gt; 和 &lt;code&gt;width&lt;/code&gt; 也就方便的计算出来了：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-emacs-lisp&quot;&gt;(add-to-list &apos;default-frame-alist
             (cons &apos;height (/ (* 4 (x-display-pixel-height))
                              (* 5 (frame-char-height)))))
(add-to-list &apos;default-frame-alist
             (cons &apos;width (/ (* 4 (x-display-pixel-width))
                             (* 5 (frame-char-width)))))
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
注意，这里除法放在最后一步做，目的是为了保证计算过程中的数值都是整数，结果也是整数。因为 &lt;code&gt;default-frame-alist&lt;/code&gt; 的参数要求是整数。
&lt;/p&gt;

&lt;p&gt;
还有一个约束条件是， &lt;code&gt;x-display-pixel-height&lt;/code&gt; 和 &lt;code&gt;x-display-pixel-width&lt;/code&gt; 这两个函数正如其前缀所示，只有在窗口环境才存在，所以不能在非窗口环境下设置这些参数，完整的配置如下：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-emacs-lisp&quot;&gt;(set-default-font &lt;span style=&quot;color: #3a5fcd;&quot;&gt;&quot;Inconsolata-14&quot;&lt;/span&gt;)

(&lt;span style=&quot;color: #8b008b; font-weight: bold;&quot;&gt;if&lt;/span&gt; (not (eq window-system nil))
    (&lt;span style=&quot;color: #8b008b; font-weight: bold;&quot;&gt;progn&lt;/span&gt;
      &lt;span style=&quot;color: #228b22; font-style: italic;&quot;&gt;;; &lt;/span&gt;&lt;span style=&quot;color: #228b22; font-style: italic;&quot;&gt;top, left ... must be integer&lt;/span&gt;
      (add-to-list &apos;default-frame-alist
                   (cons &apos;top  (/ (x-display-pixel-height) 10)))
      (add-to-list &apos;default-frame-alist
                   (cons &apos;left (/ (x-display-pixel-width) 10)))
      (add-to-list &apos;default-frame-alist
                   (cons &apos;height (/ (* 4 (x-display-pixel-height))
                                    (* 5 (frame-char-height)))))
      (add-to-list &apos;default-frame-alist
                   (cons &apos;width (/ (* 4 (x-display-pixel-width))
                                   (* 5 (frame-char-width)))))))
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
另外，我在设置 &lt;code&gt;default-frame-alist&lt;/code&gt; 之前，设置了默认字体的原因是，
&lt;code&gt;frame-char-height&lt;/code&gt; 和 &lt;code&gt;frame-char-width&lt;/code&gt; 是会根据字体大小变动的，如果没有设置字体，就会用默认字体的尺寸，这样计算出来的字符数值 &lt;code&gt;height&lt;/code&gt; 和 &lt;code&gt;width&lt;/code&gt; 会因为后续字体设置而变动，窗口就不是我期望的比例了。
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgebf66ff&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgebf66ff&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;3&lt;/span&gt; 总结&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-3&quot;&gt;
&lt;p&gt;
有了以上这段配置设置，无论在小尺寸笔记本，还是台式电脑；无论在 Windows，还是 iMac，
Emacs 的起始窗口比例都是长宽 80% 居中了。希望对大家有所帮助。
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
</content>
 </entry>
 
 <entry>
   <title>单词本：猪</title>
   <link href="http://kimi.im/2019-02-05-pig-year"/>
   <updated>2019-02-05T00:00:00+00:00</updated>
   <id>http://kimi.im/pig-year</id>
   <content type="html">&lt;p&gt;
2019 年是中国农历的猪年。
&lt;/p&gt;

&lt;p&gt;
最近大街上的广告也在蹭热点，比如农夫山泉的广告：
&lt;/p&gt;

&lt;a data-flickr-embed=&quot;true&quot;  href=&quot;https://www.flickr.com/photos/kimim-photo/46266528624/in/dateposted-public/&quot; title=&quot;家&quot;&gt;&lt;img src=&quot;https://farm5.staticflickr.com/4830/46266528624_6d63f09f94_z.jpg&quot; width=&quot;640&quot; height=&quot;393&quot; alt=&quot;家&quot;&gt;&lt;/a&gt;&lt;script async src=&quot;//embedr.flickr.com/assets/client-code.js&quot; charset=&quot;utf-8&quot;&gt;&lt;/script&gt;

&lt;p&gt;
远古时期，人们用“豕”(shi3)表示猪，猪代表着富足，所以房子底下有“豕”就是家了。
&lt;/p&gt;

&lt;p&gt;
猪的繁体字其实写作“豬”，在简化的过程中，直接用“犭”字代替了“豕”。这样的简化，其实损失了不少信息。
&lt;/p&gt;

&lt;p&gt;
《尔雅·释兽》记载有：“彘，猪也。其子曰豚。一岁曰豵。”其实“彘”（zhì）应当是野猪，底下的矢表示弓箭，人们用弓箭射击野猪。“豚”（tún）在“豕”字左边加了“月”，月就是肉。所以豚就是用来吃的猪，也就是家里养的猪。日本人猪还用豚表示，日料店有豚骨拉面。河豚、江豚、海豚就是指长得像猪的鱼。“豵”（zōng）,是刚出生一岁的小猪，《诗经·召南·驺虞》中有“壹发五豝，壹发五豵。”形容猎人射箭技术高超。“豝”（bā）则是母猪之意。
&lt;/p&gt;

&lt;p&gt;
在中国古代，猪圈往往就在厕所边上，所以“圂”（hùn）这个字是猪圈的意思，也是厕所的意思。也就是厕所和猪圈是不分开的。通常的建筑设计是厕所在高处，人类的屎尿导入猪圈，和猪的排泄物混在一起，用作肥料。猪其实是挺爱干净的动物的。但是人类的这种设计，导致猪带上了肮脏、懒惰、色情的色彩。很多和猪相关的词语都是带有羞辱性质的，如猪头三、猪猡等。再加上后来的西游记中猪八戒的形象，更是让猪的名声万劫不复了。
&lt;/p&gt;

&lt;p&gt;
伊斯兰教认为猪是不净之物。也许是因为伊斯兰教国家的人放牧的居多，一般都吃牛羊肉。然后看到农耕国家的人把猪养在脏臭的地方，就定下了教义，禁止信徒吃猪肉了。
&lt;/p&gt;

&lt;p&gt;
在之前的一篇文章中&lt;sup&gt;&lt;a id=&quot;fnr.1&quot; class=&quot;footref&quot; href=&quot;#fn.1&quot;&gt;1&lt;/a&gt;&lt;/sup&gt;，我们了解到，动物的雄性和雌性会有一些不同的写法。至于猪，英语中猪的统称是 pig，公猪是 boar，母猪的则是 sow。
&lt;/p&gt;

&lt;p&gt;
英语中 pig 基本上也带有负面色彩。比如 You greedy pig, you ate all the candy! 你这只馋猫，把糖果都吃光了！They live like pigs in that house over the road. 他们住在马路那头猪圈似的房子里。
&lt;/p&gt;

&lt;p&gt;
英语里还有个词 swine，也是猪。通常指讨厌的人，讨厌的事。He&apos;s an arrogant little
swine!  他是个傲慢的小讨厌鬼！The car can be a swine to start. 这辆车有时很难发动。
&lt;/p&gt;

&lt;p&gt;
法语公猪是 le cochon，母猪则是 la cochonne，小猪 le cochonnet。而 la truie 则专指生小猪的母猪：la truie reproductrice。例如：La truie donne naissance à cinq
cochonnets.母猪生了 5 只小猪。法语世界里，对猪也不太友好。例如：histoire
cochonne（关于母猪的故事）黄色故事。Quel cochon de temps ! on ne peut pas
sortir. （猪一样的天气）该死的天气，出不了门。c&apos;est un vieux cochon（这是只老猪）这是个下流坯。écrire comme un cochon（字写得像只猪）字写得很差很乱。C&apos;est une
tête de cochon. 这是个固执的人。c’est une belle cochonne. 她很放荡。
&lt;/p&gt;

&lt;p&gt;
法语中有类似海豚的说法：cochon de mer 就是 le dauphin。
&lt;/p&gt;

&lt;p&gt;
德语中猪叫 des Schwein。也有不好的意思，如 ein armes/faules Schwein 一个穷/懒鬼。但也有运气的意思：Schwein haben 运气好，Schwein gehabt! that’s a stroke of
luck. 意外的好运。
&lt;/p&gt;

&lt;p&gt;
好了，祝大家猪年快乐。猪年有好运 Schwein haben！
&lt;/p&gt;
&lt;div id=&quot;footnotes&quot;&gt;
&lt;h2 class=&quot;footnotes&quot;&gt;Footnotes: &lt;/h2&gt;
&lt;div id=&quot;text-footnotes&quot;&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.1&quot; class=&quot;footnum&quot; href=&quot;#fnr.1&quot;&gt;1&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;http://kimi.im/2017-05-16-english-tigress&quot;&gt;http://kimi.im/2017-05-16-english-tigress&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;


&lt;/div&gt;
&lt;/div&gt;
</content>
 </entry>
 
 <entry>
   <title>EdgeX 简介</title>
   <link href="http://kimi.im/2018-10-11-EdgeX-Introduction"/>
   <updated>2018-10-11T00:00:00+00:00</updated>
   <id>http://kimi.im/EdgeX-Introduction</id>
   <content type="html">&lt;div id=&quot;outline-container-org8a8a47f&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;org8a8a47f&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;1&lt;/span&gt; 概述&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-1&quot;&gt;
&lt;p&gt;
EdgeX Foundry 旨在创建一个通用的、开源的、厂商中立的边缘计算软件平台。所谓边缘就是与物理世界的设备、传感器、执行器等物联网设备直接交互的网络端。
&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;
《边缘计算参考架构 2.0》中对边缘计算的定义：
&lt;/p&gt;

&lt;p&gt;
边缘计算是在靠近物或数据源头的网络边缘侧，融合网络、计算、存储、应用核心能力的分布式开放平台，就近提供边缘智能服务，满足行业数字化在敏捷联接、实时业务、数据优化、应用智能、安全与隐私保护等方面的关键需求。它可以作为联接物理和数字世界的桥梁，使能智能资产、智能网关、智能系统和智能服务。
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;
EdgeX 平台帮助、鼓励快速发展的物联网解决方案提供商在一个可互操作的模块组件生态中互相合作，从而减少技术的不确定性（reduce uncertainty）、加快推向市场的速度（accelerate time to market）、促进行业规模的增长（facilitate scale）。
&lt;/p&gt;

&lt;p&gt;
通过解决可互操作性这一迫切的需求，EdgeX 能够快速将数据传输至北向的云，东西向的网关，以及南向的设备、传感器和执行器，因此 EdgeX 可以简化以下这些操作：
&lt;/p&gt;

&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;监控物理世界的设备&lt;/li&gt;
&lt;li&gt;发送指令给这些设备&lt;/li&gt;
&lt;li&gt;从设备收集数据&lt;/li&gt;
&lt;li&gt;将数据发送到雾节点、云平台进行存储、聚集、分析，从而形成有用信息&lt;/li&gt;
&lt;li&gt;在设备上执行特定任务&lt;/li&gt;
&lt;/ul&gt;


&lt;blockquote&gt;
&lt;p&gt;
南向（South Side）和北向（North Side）的定义：
&lt;/p&gt;

&lt;p&gt;
一般北半球居民会将北方放在地图的上方，相应的，在架构、网络设计图中，北向指的是架构图的上方，南向指的是架构图的下方。
&lt;/p&gt;

&lt;p&gt;
南向（South Side）：指的是物理世界的所有物联网对象。网络边缘直接与这些设备、传感器和执行器等进行通信，获取数据。
&lt;/p&gt;

&lt;p&gt;
北向（North Side）：指的是云（或者叫企业信息系统），对数据进行收集、存储、聚集、分析，并转化为有用信息。
&lt;/p&gt;

&lt;p&gt;
在计算机网络和架构中，组件的北行接口 northbound interface 指的是将底层细节进行封装的接口。上层组件利用北行接口访问下层组件。北行接口在架构图中一般画在组件的顶部。而南行接口 southbound interface 则将技术细节进行细化，分配给南向的某个单一组件。南行接口在架构图中一般画在组件的底部。&lt;sup&gt;&lt;a id=&quot;fnr.1&quot; class=&quot;footref&quot; href=&quot;#fn.1&quot;&gt;1&lt;/a&gt;&lt;/sup&gt;
&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/div&gt;
&lt;/div&gt;


&lt;div id=&quot;outline-container-org9dfe1bc&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;org9dfe1bc&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;2&lt;/span&gt; EdgeX Foundry 架构原则&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-2&quot;&gt;
&lt;p&gt;
EdgeX Foundry 基于以下核心原则构建整体架构：
&lt;/p&gt;

&lt;ol class=&quot;org-ol&quot;&gt;
&lt;li&gt;EdgeX Foundry 必须秉承平台不可知论者（platform agnostic）
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;不用关心平台的硬件是什么&lt;/li&gt;
&lt;li&gt;不用关心操作系统是什么（Linux、Windows 等都要能支持）&lt;/li&gt;
&lt;li&gt;允许将功能组件的微服务部署在边缘节点、网关、雾节点、以及云上&lt;/li&gt;
&lt;li&gt;协议和传感器不可知论者，即任何协议、传感器类型都能够通过扩展设备服务扩展支持&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;EdgeX Foundry 必须非常灵活
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;平台的任何部分都能够独立地升级、替换、或者通过其他微服务和软件模块进行增强&lt;/li&gt;
&lt;li&gt;所有服务必须能根据设备性能和应用场景扩容缩容&lt;/li&gt;
&lt;li&gt;EdgeX Foundry 须提供一个参考实现，并鼓励集成其他更好的解决方案&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;EdgeX Foundry 必须支持存储转发能力（即支持断线/远程边缘系统）&lt;/li&gt;
&lt;li&gt;EdgeX Foundry 必须支持将更多智能转移到边缘侧
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;执行系统的时延敏感性&lt;/li&gt;
&lt;li&gt;带宽和存储的资费顾虑&lt;/li&gt;
&lt;li&gt;远程操作？&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;EdgeX Foundry 必须支持棕地绿地（即存量工业基地和新工业基地）的设备传感器部署&lt;/li&gt;
&lt;li&gt;EdgeX Foundry 必须足够安全可靠、容易管理&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
&lt;/div&gt;


&lt;div id=&quot;outline-container-orgd586c2f&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgd586c2f&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;3&lt;/span&gt; EdgeX Foundry 的多层服务架构&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-3&quot;&gt;
&lt;p&gt;
EdgeX Foundry 是一个开源微服务集合，由 4 个服务层和 2 个系统服务组成。自下而上分别为设备服务层、核心服务层、支持服务层和传输服务层。另外两个系统服务分别为安全服务和系统管理服务。
&lt;/p&gt;

&lt;a data-flickr-embed=&quot;true&quot;  href=&quot;https://www.flickr.com/photos/kimim-photo/30297561367/in/dateposted-public/&quot; title=&quot;EdgeX_architecture&quot;&gt;&lt;img src=&quot;https://farm2.staticflickr.com/1978/30297561367_a74a6374ff_z.jpg&quot; width=&quot;640&quot; height=&quot;377&quot; alt=&quot;EdgeX_architecture&quot;&gt;&lt;/a&gt;&lt;script async src=&quot;//embedr.flickr.com/assets/client-code.js&quot; charset=&quot;utf-8&quot;&gt;&lt;/script&gt;
&lt;/div&gt;


&lt;div id=&quot;outline-container-org9aed0cb&quot; class=&quot;outline-3&quot;&gt;
&lt;h3 id=&quot;org9aed0cb&quot;&gt;&lt;span class=&quot;section-number-3&quot;&gt;3.1&lt;/span&gt; 核心服务层（Core Services Layer - CS）&lt;/h3&gt;
&lt;div class=&quot;outline-text-3&quot; id=&quot;text-3-1&quot;&gt;
&lt;p&gt;
核心服务层桥接了北向和南向服务层，包含以下组件：
&lt;/p&gt;

&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;核心数据（Core Data）：南向设备数据的持久存储和管理服务。&lt;/li&gt;
&lt;li&gt;命令（Command）：北向到南向的执行控制请求服务。&lt;/li&gt;
&lt;li&gt;元数据（Metadata）：接入 EdgeX Foundry 的设备的元数据存储和管理。提供设定新设备和关联相应设备服务的能力。&lt;/li&gt;
&lt;li&gt;注册和配置（Registry and Configuration）：提供在 EdgeX Foundry 注册的微服务的查询信息和属性配置信息。&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;


&lt;div id=&quot;outline-container-org813bcb8&quot; class=&quot;outline-3&quot;&gt;
&lt;h3 id=&quot;org813bcb8&quot;&gt;&lt;span class=&quot;section-number-3&quot;&gt;3.2&lt;/span&gt; 支持服务层（Supporting Services Layer - SS）&lt;/h3&gt;
&lt;div class=&quot;outline-text-3&quot; id=&quot;text-3-2&quot;&gt;
&lt;p&gt;
支持服务层包含多个微服务：
&lt;/p&gt;

&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;边缘分析和边缘智能&lt;/li&gt;
&lt;li&gt;提供给 EdgeX Foundry 本身的服务&lt;/li&gt;
&lt;li&gt;通用软件服务，如日志、调度、以及数据清理（Scrubbing）&lt;/li&gt;
&lt;li&gt;规则引擎&lt;/li&gt;
&lt;li&gt;告警和消息通知微服务&lt;/li&gt;
&lt;li&gt;本地分析能力（目前的实现也叫简单规则引擎）&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;


&lt;div id=&quot;outline-container-orgebe8cda&quot; class=&quot;outline-3&quot;&gt;
&lt;h3 id=&quot;orgebe8cda&quot;&gt;&lt;span class=&quot;section-number-3&quot;&gt;3.3&lt;/span&gt; 传输服务层（Export Services Layer - ES）&lt;/h3&gt;
&lt;div class=&quot;outline-text-3&quot; id=&quot;text-3-3&quot;&gt;
&lt;p&gt;
EdgeX Foundry 的一个设计原则是独立于其他系统运行，即原则 3：EdgeX Foundry 必须支持存储转发能力。因为部署在网关上的边缘计算服务经常会处于离线环境，需要能独立运作监控管理某些不需要外部监控的设备和传感器。因此，EdgeX Foundry 必须能够不接入北向系统独立运行相当长一段时间。传输服务层的任务就是将边缘侧采集的数据传输到云端。
&lt;/p&gt;

&lt;p&gt;
ES 层的微服务提供一下服务：
&lt;/p&gt;

&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;提供注册服务接口给网关外部客户端，注册接受从南向对象采集的数据。&lt;/li&gt;
&lt;li&gt;提供数据将在何时发向何处的信息&lt;/li&gt;
&lt;li&gt;为其传输的数据提供数据的格式&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
ES 服务层目前提供以下微服务：
&lt;/p&gt;

&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;客户端注册&lt;/li&gt;
&lt;li&gt;分发&lt;/li&gt;
&lt;li&gt;AWS IoT Core&lt;/li&gt;
&lt;li&gt;Azure IoT Core&lt;/li&gt;
&lt;li&gt;Google IoT Core&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;


&lt;div id=&quot;outline-container-orgc09ef73&quot; class=&quot;outline-3&quot;&gt;
&lt;h3 id=&quot;orgc09ef73&quot;&gt;&lt;span class=&quot;section-number-3&quot;&gt;3.4&lt;/span&gt; 设备服务层（Device Services Layer - DS）&lt;/h3&gt;
&lt;div class=&quot;outline-text-3&quot; id=&quot;text-3-4&quot;&gt;
&lt;p&gt;
设备服务层是边缘的连接器直接和设备通信。这些物联网设备包括但不限于：
&lt;/p&gt;

&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;报警系统&lt;/li&gt;
&lt;li&gt;办公家居的冷热空调系统&lt;/li&gt;
&lt;li&gt;照明灯具&lt;/li&gt;
&lt;li&gt;工业机器&lt;/li&gt;
&lt;li&gt;灌溉系统&lt;/li&gt;
&lt;li&gt;无人机&lt;/li&gt;
&lt;li&gt;轨道交通系统&lt;/li&gt;
&lt;li&gt;自动化工厂&lt;/li&gt;
&lt;li&gt;智能家居&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
未来还可能支持：
&lt;/p&gt;

&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;无人汽车，无人卡车&lt;/li&gt;
&lt;li&gt;交通信号系统&lt;/li&gt;
&lt;li&gt;全自动快餐系统&lt;/li&gt;
&lt;li&gt;无人商店&lt;/li&gt;
&lt;li&gt;医疗监控系统&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
设备服务不仅可以连接一个设备，也可以连接多个设备。DS 所管理的设备可以是简单设备，也可以是设备网关，设备管理器，设备聚合器等。
&lt;/p&gt;

&lt;p&gt;
DS 层通过设备原生的通信协议与设备进行通信，然后将数据转成 EdgeX Foundry 内部通信的标准数据结构，再发送给核心服务层和其他服务层。
&lt;/p&gt;

&lt;p&gt;
EdgeX Foundry 提供一个设备服务软件开发工具（SDK），通过命令行的方式生成设备服务的基本框架。
&lt;/p&gt;

&lt;p&gt;
目前，EdgeX Foundry 的设备服务层包含以下微服务：
&lt;/p&gt;

&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;虚拟设备服务&lt;/li&gt;
&lt;li&gt;BACnet 设备服务&lt;/li&gt;
&lt;li&gt;Modbus 设备服务&lt;/li&gt;
&lt;li&gt;SNMP 设备服务&lt;/li&gt;
&lt;li&gt;低功耗蓝牙（BLE）设备服务&lt;/li&gt;
&lt;li&gt;串口设备服务&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
具体例子，比如：
&lt;/p&gt;

&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;BACnet DS 将 BACnet 温湿度传感器设备的温度、湿度信息转换成 EdgeX Foundry 通用数据结构&lt;/li&gt;
&lt;li&gt;接收翻译来自其他 EdgeX Foundry 服务和企业系统的命令，传输给南向设备进行执行。&lt;/li&gt;
&lt;li&gt;接收关机请求，命令 Modbus PLC 关闭其控制的电机。DS 服务将通用的“shutoff”请求转换成 Modbus 串口命令，让 PLC 控制的电机执行操作。&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;


&lt;div id=&quot;outline-container-org0448f2f&quot; class=&quot;outline-3&quot;&gt;
&lt;h3 id=&quot;org0448f2f&quot;&gt;&lt;span class=&quot;section-number-3&quot;&gt;3.5&lt;/span&gt; 系统服务层（System Services Layer - SS）&lt;/h3&gt;
&lt;div class=&quot;outline-text-3&quot; id=&quot;text-3-5&quot;&gt;
&lt;p&gt;
主要是安全基础设施和系统管理服务。
&lt;/p&gt;

&lt;p&gt;
EdgeX Foundry 内部外部的安全组件保护 EdgeX Foundry 管理的设备、传感器和其他物联网对象的数据和命令安全。
&lt;/p&gt;

&lt;p&gt;
系统管理设施提供了系统安装、升级、启动、停止，以及对 EdgeX Foundry 微服务、BIOS 固件、操作系统和网关相关软件的监控服务。另外通过外部接口，支持企业系统和外部系统调用这些功能。
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;footnotes&quot;&gt;
&lt;h2 class=&quot;footnotes&quot;&gt;Footnotes: &lt;/h2&gt;
&lt;div id=&quot;text-footnotes&quot;&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.1&quot; class=&quot;footnum&quot; href=&quot;#fnr.1&quot;&gt;1&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;https://en.wikipedia.org/wiki/Northbound_interface&quot;&gt;https://en.wikipedia.org/wiki/Northbound_interface&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;


&lt;/div&gt;
&lt;/div&gt;
</content>
 </entry>
 
 <entry>
   <title>Windows 深色主题深色标题栏</title>
   <link href="http://kimi.im/2018-10-11-windows-dark-theme-with-dark-inactive-title-bar"/>
   <updated>2018-10-11T00:00:00+00:00</updated>
   <id>http://kimi.im/windows-dark-theme-with-dark-inactive-title-bar</id>
   <content type="html">&lt;p&gt;
有时候亮色的主题看久了，眼镜会觉得有些刺眼，所以偶尔换成深色主题缓解眼部压力。深色主题深色标题栏，深色内容，看起来还不错。但是没有设置项可以将非活动标题栏也弄成深色。这样多个窗口工作的时候，那些非活动标题栏灰白色会显得很刺眼。
&lt;/p&gt;

&lt;p&gt;
经过搜索，发现需要修改注册表，增加一个键值，内容如下，可保存成 &lt;code&gt;.reg&lt;/code&gt; 直接导入注册表：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-bat&quot;&gt;Windows Registry Editor Version 5.00

[HKEY_CURRENT_USER\Software\Microsoft\Windows\DWM]
&lt;span style=&quot;color: #f4a460;&quot;&gt;&quot;AccentColorInactive&quot;&lt;/span&gt;=dword:ff222222
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
RGB222222 是以下这种深灰色：
&lt;/p&gt;

&lt;h3 style=&quot;background-color: #222222; width: 80px;&quot;&gt;&amp;nbsp;&lt;/h3&gt;

&lt;p&gt;
这样，几个标题栏颜色相近，就舒服多了。
&lt;/p&gt;

&lt;a data-flickr-embed=&quot;true&quot;  href=&quot;https://www.flickr.com/photos/kimim-photo/45188225182/in/dateposted-public/&quot; title=&quot;darktheme&quot;&gt;&lt;img src=&quot;https://farm2.staticflickr.com/1971/45188225182_187fb2f4b9_z.jpg&quot; width=&quot;640&quot; height=&quot;360&quot; alt=&quot;darktheme&quot;&gt;&lt;/a&gt;&lt;script async src=&quot;//embedr.flickr.com/assets/client-code.js&quot; charset=&quot;utf-8&quot;&gt;&lt;/script&gt;
</content>
 </entry>
 
 <entry>
   <title>修改 Firefox 阅读模式的工具栏颜色</title>
   <link href="http://kimi.im/2018-10-11-change-firefox-reader-toolbar-color"/>
   <updated>2018-10-11T00:00:00+00:00</updated>
   <id>http://kimi.im/change-firefox-reader-toolbar-color</id>
   <content type="html">&lt;p&gt;
进入秋天，昼短夜长，倘若再遇到白天阴雨天，办公室比较昏暗。昏暗的光线下亮色主题会显得比较刺眼，所以尝试着将 Emacs 的主题换成了 color-theme-jekyll，同时 Firefox 里也选择了暗色主题。但是 Firefox 的阅读模式下，左侧的工具栏还是亮灰色，这样在整屏暗色的桌面上，工具栏就会显得很刺眼。于是找到了办法修改 Firefox 阅读模式的 css 文件。
&lt;/p&gt;

&lt;p&gt;
具体方法如下：
&lt;/p&gt;

&lt;ol class=&quot;org-ol&quot;&gt;
&lt;li&gt;在 Firefox 浏览器输入 &lt;code&gt;about:profiles&lt;/code&gt; 找到配置文件路径，例如 &lt;code&gt;gscurz1i.default&lt;/code&gt; 。&lt;/li&gt;
&lt;li&gt;在配置文件路径下创建 &lt;code&gt;chrome&lt;/code&gt; 文件夹。&lt;/li&gt;
&lt;li&gt;&lt;p&gt;
添加 &lt;code&gt;userContent.css&lt;/code&gt; 文件，文件内容：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-css&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;@-moz-document&lt;/span&gt; url-prefix(&lt;span style=&quot;color: #3a5fcd;&quot;&gt;&quot;about:reader&quot;&lt;/span&gt;) {
    &lt;span style=&quot;color: #0000cd;&quot;&gt;.toolbar &lt;/span&gt;{

        &lt;span style=&quot;color: #8b008b; font-weight: bold;&quot;&gt;background-color&lt;/span&gt;: &lt;span style=&quot;color: #ffffff; background-color: #333333;&quot;&gt;#333333&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;!important&lt;/span&gt;;
        &lt;span style=&quot;color: #8b008b; font-weight: bold;&quot;&gt;border-right&lt;/span&gt;: 1px solid &lt;span style=&quot;color: #ffffff; background-color: #555;&quot;&gt;#555&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;!important&lt;/span&gt;;

    }

    &lt;span style=&quot;color: #0000cd;&quot;&gt;.button &lt;/span&gt;{

        &lt;span style=&quot;color: #8b008b; font-weight: bold;&quot;&gt;color&lt;/span&gt;: &lt;span style=&quot;color: #ffffff; background-color: #444444;&quot;&gt;#444444&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;!important&lt;/span&gt;;
        &lt;span style=&quot;color: #8b008b; font-weight: bold;&quot;&gt;background-color&lt;/span&gt;: &lt;span style=&quot;color: #ffffff; background-color: #333333;&quot;&gt;#333333&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;!important&lt;/span&gt;;

    }

    &lt;span style=&quot;color: #0000cd;&quot;&gt;.toolbar .button &lt;/span&gt;{

        &lt;span style=&quot;color: #8b008b; font-weight: bold;&quot;&gt;border-right&lt;/span&gt;: 1px solid &lt;span style=&quot;color: #ffffff; background-color: #555;&quot;&gt;#555&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;!important&lt;/span&gt;;
        &lt;span style=&quot;color: #8b008b; font-weight: bold;&quot;&gt;border-bottom&lt;/span&gt;: 1px solid &lt;span style=&quot;color: #ffffff; background-color: #555;&quot;&gt;#555&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;!important&lt;/span&gt;;

    }
}
&lt;/pre&gt;
&lt;/div&gt;&lt;/li&gt;

&lt;li&gt;重启 Firefox&lt;/li&gt;
&lt;/ol&gt;


&lt;p&gt;
效果图：
&lt;/p&gt;

&lt;a data-flickr-embed=&quot;true&quot;  href=&quot;https://www.flickr.com/photos/kimim-photo/45242037531/in/dateposted-public/&quot; title=&quot;dark_reader_view&quot;&gt;&lt;img src=&quot;https://farm2.staticflickr.com/1951/45242037531_61bf545869_z.jpg&quot; width=&quot;640&quot; height=&quot;558&quot; alt=&quot;dark_reader_view&quot;&gt;&lt;/a&gt;&lt;script async src=&quot;//embedr.flickr.com/assets/client-code.js&quot; charset=&quot;utf-8&quot;&gt;&lt;/script&gt;

&lt;p&gt;
可惜还不知道怎么把滚动条的颜色也调整一下。。。
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>看新聞學外語：Was du hier als Erstes siehst, ist von deinem Alter abhängig</title>
   <link href="http://kimi.im/2018-09-24-Was-du-hier-als-Erstes-siehst"/>
   <updated>2018-09-24T00:00:00+00:00</updated>
   <id>http://kimi.im/Was-du-hier-als-Erstes-siehst</id>
   <content type="html">&lt;p&gt;
心理學家最近發現，人的年紀差別，會導致看實物的角度不同。
&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;
Die Zeichnung „Meine Frau und meine Schwiegermutter“ (englisch: „My Wife and My
Mother-In-Law“) lässt dir die Wahl, ob du das eine (eine junge Frau) oder das
andere (eine ältere Frau) siehst – typisch für ein Kippbild. Das ist die
berühmteste Version des Kippbilds und stammt aus einer Ausgabe des
„Puck“-Magazins 1915.
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;Die Zeichnung：圖案、花紋。das Zeichen：信號、記號、標點、符號、跡象。&lt;/li&gt;
&lt;li&gt;die Schwiegermutter：婆婆、岳母。Die Schwiegertochter hat ein super Verhältnis
（狀況、關係）zu ihrer Schwiegermutter. 兒媳和婆婆相處的非常好。 另外，
Schwiegersohn：女婿，Schwiegertochter：兒媳，Schwiegervater：公公、岳父。&lt;/li&gt;
&lt;li&gt;lassen dir die Wahl：給你選擇。die Wahl：選擇。Du bist meine Wahl. 你是我的選擇。&lt;/li&gt;
&lt;li&gt;berühmteste：著名的測試。berühmt：著名的、出名的。Die Schweizer Uhren sind
sehr berühmt. 瑞士表很出名。Die Stadt ist berühmt für den handwerklichen
Markt. 這座城市以手工業市場而出名。&lt;/li&gt;
&lt;li&gt;stammen：出生於、來自。Diese Sprache stammt aus Deutschland. 这一语言来自于德国。&lt;/li&gt;
&lt;/ul&gt;

&lt;a data-flickr-embed=&quot;true&quot;  href=&quot;https://www.flickr.com/photos/kimim-photo/31007467268/in/dateposted-public/&quot; title=&quot;Wife-and-My-Mother-in-Law&quot;&gt;&lt;img src=&quot;https://farm2.staticflickr.com/1941/31007467268_6dd1900784_z.jpg&quot; width=&quot;461&quot; height=&quot;640&quot; alt=&quot;Wife-and-My-Mother-in-Law&quot;&gt;&lt;/a&gt;&lt;script async src=&quot;//embedr.flickr.com/assets/client-code.js&quot; charset=&quot;utf-8&quot;&gt;&lt;/script&gt;

&lt;blockquote&gt;
&lt;p&gt;
Falls du nur die junge Frau siehst, so entdeckst du die alte: Die Kette am Hals
der jungen Frau musst dir als Mund der alten Frau vorstellen. Das Kinn der
jungen Frau ist die Nasenspitze der alten.
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;entdecken：發現、發覺。&lt;/li&gt;
&lt;li&gt;vorstellen：表現、介紹。Darf ich Ihnen Herrn Wang vorstellen? 我可以把您介紹給王先生嗎？&lt;/li&gt;
&lt;li&gt;die Kette 項鏈，der Hals 脖子，der Mund 嘴巴，das Kinn 下巴，die Nasenspitze 鼻尖。
die Spitze 尖兒、尖端。&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;
Warum dich das alles jucken soll? Psychologen von der australischen Flinders
University und der University of South Australia haben herausgefunden: Was du
zuerst siehst, könnte dein Alter verraten. Ihre nun in „Scientific Reports“
veröffentlichte Studie verrät: Jüngere Betrachter sahen zuerst die junge Frau im
Bild, ältere Personen die alte Frau.
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;herausfinden：找到、查明。Hast du schon herausgefunden, wir die Heizung
funktioniert? 你是否已弄清空调运作的原理？&lt;/li&gt;
&lt;li&gt;verraten：背叛，出賣，洩露。&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
其實，我覺得，這個結論很明顯的。年輕人更容易看出年輕女子，年紀大的更容易看到年紀大的婦人。
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>看新聞學外語：Trump n'a pas dit «tous les terroristes sont à Paris»</title>
   <link href="http://kimi.im/2018-06-17-tous-les-terroristes-sont-a-Paris"/>
   <updated>2018-06-17T00:00:00+00:00</updated>
   <id>http://kimi.im/tous-les-terroristes-sont-a-Paris</id>
   <content type="html">&lt;p&gt;
最近看到不少特朗普的負面新聞，尤其是一張歐洲諸國咄咄逼人圍著他的照片。一時間網友們紛紛轉發高呼大快人心。然而，法國方面迅速做出回應：
&lt;/p&gt;

&lt;p&gt;
L&apos;Elysée a démenti catégoriquement samedi des propos attribués à Donald Trump
par le Wall Street Journal, selon lequel le président américain aurait lancé au
président français Emmanuel Macron au G7 que «tous les terroristes sont à
Paris».
&lt;/p&gt;

&lt;blockquote&gt;
&lt;dl class=&quot;org-dl&quot;&gt;
&lt;dt&gt;démentir&lt;/dt&gt;&lt;dd&gt;to deny. 否認。démentir une rumeur. 闢謠。&lt;/dd&gt;
&lt;dt&gt;catégoriquement&lt;/dt&gt;&lt;dd&gt;adv. categorical. unambiguously explicit and direct. 明確地，毫不含糊地。&lt;/dd&gt;
&lt;dt&gt;lancer qch à qn&lt;/dt&gt;&lt;dd&gt;to throw sth to sb. 往某人身上投擲東西。此處是指特朗普用言語炮轟法國總統埃馬紐埃爾·馬克龍。&lt;/dd&gt;
&lt;/dl&gt;
&lt;/blockquote&gt;

&lt;p&gt;
«Nous démentons fermement. Tout est faux», a commenté l&apos;Elysée auprès de
l&apos;AFP. Selon le journal américain, qui cite des diplomates européens présents
dans la salle, Donald Trump aurait tenu des propos abrupts à ses homologues du
G7, notamment sur les migrants et le terrorisme, pendant leurs réunions les 8 et
9 juin au Québec.
&lt;/p&gt;

&lt;blockquote&gt;
&lt;dl class=&quot;org-dl&quot;&gt;
&lt;dt&gt;fermement&lt;/dt&gt;&lt;dd&gt;堅決的。前面用了 catégoriquement，這裡用了 fermement. 法國官方明確又堅決的否認特朗普炮轟法國。&lt;/dd&gt;
&lt;dt&gt;abrupt&lt;/dt&gt;&lt;dd&gt;steep, sheer. 陡峭的，嚴厲的。&lt;/dd&gt;
&lt;dt&gt;homologue&lt;/dt&gt;&lt;dd&gt;counterpart. 對等人物。美國總統的對等人物，也就是法國總統。&lt;/dd&gt;
&lt;dt&gt;notamment&lt;/dt&gt;&lt;dd&gt;adv. in particular. 特別是，尤其。&lt;/dd&gt;
&lt;/dl&gt;
&lt;/blockquote&gt;

&lt;p&gt;
A l&apos;adresse du Premier ministre japonais, Shinzo Abe, il aurait ainsi lancé:
«Shinzo, tu n&apos;as pas ce problème (d&apos;immigration), mais je peux t&apos;envoyer 25
millions de Mexicains et tu perdras ton poste très vite».
&lt;/p&gt;

&lt;blockquote&gt;
&lt;dl class=&quot;org-dl&quot;&gt;
&lt;dt&gt;perdre&lt;/dt&gt;&lt;dd&gt;to lose, to get out of. 丟掉，遺落，丟工作。le Président perd trois
points dans le dernier sondage. the President is down three points
in the latest poll.&lt;/dd&gt;
&lt;/dl&gt;
&lt;/blockquote&gt;

&lt;p&gt;
Au président Macron, il aurait asséné : «Tu dois connaître ça, Emmanuel, parce
que tous les terroristes sont à Paris».
&lt;/p&gt;

&lt;blockquote&gt;
&lt;dl class=&quot;org-dl&quot;&gt;
&lt;dt&gt;asséner&lt;/dt&gt;&lt;dd&gt;猛烈的給予（打擊、批評）。asséner une critique. 狠狠地批評。&lt;/dd&gt;
&lt;/dl&gt;
&lt;/blockquote&gt;

&lt;p&gt;
特朗普總統也發推特闢謠。
&lt;/p&gt;

&lt;p&gt;
所以呢，這些新聞媒體其實往往抓住片面的圖像和言辭添油加醋地報道。我們也不能全信。到底，還是應該用一個批判的眼光看待這紛擾世界的各種聲音。
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>看新闻学语言：China reagiert</title>
   <link href="http://kimi.im/2018-06-16-china-reagiert"/>
   <updated>2018-06-16T00:00:00+00:00</updated>
   <id>http://kimi.im/china-reagiert</id>
   <content type="html">&lt;p&gt;
这是一篇 6 月 16 日发布在德语新闻网站 Zeit Online 的文章。我会选择一些我不认识的单词进行查询翻译。仅仅作为我看新闻学德语的一个方法。也许不会对所有人都有用，不过最好还是能够有些学习价值吧。
&lt;/p&gt;

&lt;p&gt;
China wird vom 6. Juli an Strafzölle in Höhe von 50 Milliarden Dollar auf
US-amerikanische Produkte erheben.
&lt;/p&gt;

&lt;blockquote&gt;
&lt;dl class=&quot;org-dl&quot;&gt;
&lt;dt&gt;Strafe&lt;/dt&gt;&lt;dd&gt;f. punishment, sentence, fine. 惩罚、判决、罚款。动词形式 strafen: to
punish; 比如 Das Kind wird körperlich gestraft. 孩子被体罚了。&lt;/dd&gt;
&lt;dt&gt;zoll&lt;/dt&gt;&lt;dd&gt;m. customs, duty. zollfrei: duty-free, 免税的。Zollkontrolle
f. customs check, 关税检查。&lt;/dd&gt;
&lt;dt&gt;Strafzölle&lt;/dt&gt;&lt;dd&gt;惩罚性关税(Penalty Tariff)是指当出口国家某种商品的出口违反了与进口国之间的协议，或者未按进口国的规定办理进口手续时，由进口国海关对该进口商品所征收的一种具有惩罚或罚款性质的进口附加税。 又称为报复性关税。&lt;/dd&gt;
&lt;dt&gt;Höhe&lt;/dt&gt;&lt;dd&gt;f. height, amount; 高度，总量。in Höhe von 5000 Metern: at an altitude
of 5000 metres; 于海拔 5000 米处。&lt;/dd&gt;
&lt;dt&gt;in Höhe von 50 Milliarden Dollar&lt;/dt&gt;&lt;dd&gt;in amount of 50 billion dollars; 以总额 500
亿美元。德语 Million 是 million 百万，而 Milliarde 则是 billion 十亿。&lt;/dd&gt;
&lt;dt&gt;erheben&lt;/dt&gt;&lt;dd&gt;征收。eine Steuer erheben 征收赋税。&lt;/dd&gt;
&lt;/dl&gt;
&lt;/blockquote&gt;


&lt;p&gt;
Das teilte die amtliche chinesische Nachrichtenagentur Xinhua mit. In einem
ersten Schritt sollen 34 Milliarden Dollar Sonderabgaben auf 545 Produktarten
US-amerikanischer Herkunft anfallen, darunter Agrargüter wie Sojabohnen, Autos
und Meeresfrüchte. Weitere 16 Milliarden Dollar sollen auf 114 US-Warengruppen
erhoben werden, darunter Chemikalien, medizinisches Gerät und
Energieerzeugnisse. Die Importzölle sind die Antwort auf die Entscheidung des
US-Präsidenten Donald Trump, solche auf chinesische Waren zu erheben.
&lt;/p&gt;

&lt;blockquote&gt;
&lt;dl class=&quot;org-dl&quot;&gt;
&lt;dt&gt;Teil&lt;/dt&gt;&lt;dd&gt;m. part, share, n. component. 部分，份额，零件。teilen: to share, to
divide. 20 durch 4 teilen: to divide 20 by 4.&lt;/dd&gt;
&lt;dt&gt;Amt&lt;/dt&gt;&lt;dd&gt;nt. office, department, post. 办公室。von Amts wegen: [书]因公，奉命，以官方之名。amtlich: official, 官方的。Amtszeichen: dialling tone, dial
tone. 电话拨号音。为啥德语是官方字符？&lt;/dd&gt;
&lt;dt&gt;Schritt&lt;/dt&gt;&lt;dd&gt;m. step. 步伐，脚步，不走。Schritt für Schritt: step by step. 逐步地，一步一步地。Das ist ein großer Schritt vorwärts. 这是一个很大的进步。&lt;/dd&gt;
&lt;dt&gt;Sonderabgaben&lt;/dt&gt;&lt;dd&gt;特别征税。Sonder- special. 特别的。Sonderpreis: special
price. Sonderschule: special school. Sonderzeichen: special
character. Sonderzug: special train.&lt;/dd&gt;
&lt;dt&gt;Herkunft&lt;/dt&gt;&lt;dd&gt;f. 来源。Ein Wort lateinischer Herkunft. 来源于拉丁文的一个词。&lt;/dd&gt;
&lt;dt&gt;Sojabohne&lt;/dt&gt;&lt;dd&gt;soybean. 黄豆。&lt;/dd&gt;
&lt;dt&gt;Meeresfrüchte&lt;/dt&gt;&lt;dd&gt;海鲜。比如 der Hummer, die Krabbe, die Garnele, die
Jakobsmuschel.&lt;/dd&gt;
&lt;/dl&gt;
&lt;/blockquote&gt;

&lt;p&gt;
Trump hatte am Freitag mitgeteilt, auf chinesische Einfuhren in die USA
vom 6. Juli an 50 Milliarden Dollar zusätzliche Zölle zu erheben. Die Maßnahmen
sollen 1.102 chinesische Produktgruppen betreffen, darunter Autos,
Flugzeugteile, Produkte aus der Informations- und Kommunikationstechnologie
sowie aus dem Roboter- und Maschinenbau.
&lt;/p&gt;

&lt;blockquote&gt;
&lt;dl class=&quot;org-dl&quot;&gt;
&lt;dt&gt;Maßnahmen&lt;/dt&gt;&lt;dd&gt;措施。Es gibt ein Katalog wirtschaftspolitischer Maßnahmen. 有一系列的经济政策。&lt;/dd&gt;
&lt;dt&gt;sowie&lt;/dt&gt;&lt;dd&gt;以及，如同。&lt;/dd&gt;
&lt;dt&gt;Maschinenbau&lt;/dt&gt;&lt;dd&gt;mechanical engineering. 机械工程。&lt;/dd&gt;
&lt;/dl&gt;
&lt;/blockquote&gt;

&lt;p&gt;
Trump: &quot;Es gibt keinen Handelskrieg&quot;
&lt;/p&gt;

&lt;blockquote&gt;
&lt;dl class=&quot;org-dl&quot;&gt;
&lt;dt&gt;Handelskrieg&lt;/dt&gt;&lt;dd&gt;贸易战。&lt;/dd&gt;
&lt;/dl&gt;
&lt;/blockquote&gt;

&lt;p&gt;
Weitere US-Importzölle in Höhe von nochmals 50 Milliarden Dollar sind in
Vorbereitung und könnten als Gegenreaktion auf die nun beschlossenen
chinesischen Maßnahmen erhoben werden. Diese Ankündigungen habe die chinesische
Regierung zur Kenntnis genommen, meldete Xinhua. China behalte sich das Recht
auf entsprechende Gegenmaßnahmen vor.
&lt;/p&gt;

&lt;blockquote&gt;
&lt;dl class=&quot;org-dl&quot;&gt;
&lt;dt&gt;Vorbereitung&lt;/dt&gt;&lt;dd&gt;f. 准备工作。Die Anpassung sei aber in Vorbereitung. 调整要有准备。&lt;/dd&gt;
&lt;dt&gt;beschlossenen&lt;/dt&gt;&lt;dd&gt;采用。&lt;/dd&gt;
&lt;dt&gt;Ankündigungen&lt;/dt&gt;&lt;dd&gt;公告、条约。&lt;/dd&gt;
&lt;dt&gt;Kenntnis&lt;/dt&gt;&lt;dd&gt;了解，认识。Wollen Sie gefälligst zur Kenntnis nehmen. (旧)敬请台阅。&lt;/dd&gt;
&lt;/dl&gt;
&lt;/blockquote&gt;

&lt;p&gt;
Hintergrund des Handelsstreits ist der Vorwurf der US-Regierung, China betreibe
eine unfaire Industrie- und Handelspolitik. Die Regierung in Peking missachte
Patent- und Urheberrechte, um fortschrittliche Technologien etwa für Roboter und
Elektroautos zu entwickeln, lautet der Vorwurf aus Washington. Schon in seinem
Wahlkampf hatte Donald Trump versprochen, solche nach seiner Ansicht unfairen
Praktiken bekämpfen zu wollen. Befürchtungen, eine Eskalation mit China könnte
größere Auswirkungen auf die Weltwirtschaft haben, wies Trump am Freitag zurück:
&quot;Es gibt keinen Handelskrieg&quot;, sagte er in einem Interview mit Fox News. &quot;Sie
haben so viel genommen&quot;, fügte er mit Blick auf China hinzu.
&lt;/p&gt;

&lt;blockquote&gt;
&lt;dl class=&quot;org-dl&quot;&gt;
&lt;dt&gt;Handelsstreit&lt;/dt&gt;&lt;dd&gt;贸易争端。&lt;/dd&gt;
&lt;dt&gt;Vorwurf&lt;/dt&gt;&lt;dd&gt;谴责。Sein Vorwurf trieb ihr die Röte ins Gesicht. 他的责备使她脸都红了。&lt;/dd&gt;
&lt;dt&gt;Handelspolitik&lt;/dt&gt;&lt;dd&gt;贸易政策。&lt;/dd&gt;
&lt;/dl&gt;
&lt;/blockquote&gt;
</content>
 </entry>
 
 <entry>
   <title>Compile Emacs Version 26.1</title>
   <link href="http://kimi.im/2018-05-30-compile_emacs_v26"/>
   <updated>2018-05-30T00:00:00+00:00</updated>
   <id>http://kimi.im/compile_emacs_v26</id>
   <content type="html">&lt;p&gt;
Emacs version 26.1 was released yesterday, but there is no binary download for
Windows. Now it is time to compile it manually:
&lt;/p&gt;

&lt;ol class=&quot;org-ol&quot;&gt;
&lt;li&gt;Download and install msys2 from &lt;a href=&quot;https://sourceforge.net/projects/msys2/files/Base/x86_64&quot;&gt;https://sourceforge.net/projects/msys2/files/Base/x86_64&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;
Run c:/msys64/msys2.exe and install necessary packages
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-sh&quot;&gt;pacman -S --needed base-devel &lt;span style=&quot;color: #3a5fcd;&quot;&gt;\&lt;/span&gt;
mingw-w64-x86_64-toolchain &lt;span style=&quot;color: #3a5fcd;&quot;&gt;\&lt;/span&gt;
mingw-w64-x86_64-xpm-nox &lt;span style=&quot;color: #3a5fcd;&quot;&gt;\&lt;/span&gt;
mingw-w64-x86_64-libtiff &lt;span style=&quot;color: #3a5fcd;&quot;&gt;\&lt;/span&gt;
mingw-w64-x86_64-giflib &lt;span style=&quot;color: #3a5fcd;&quot;&gt;\&lt;/span&gt;
mingw-w64-x86_64-libpng &lt;span style=&quot;color: #3a5fcd;&quot;&gt;\&lt;/span&gt;
mingw-w64-x86_64-libjpeg-turbo &lt;span style=&quot;color: #3a5fcd;&quot;&gt;\&lt;/span&gt;
mingw-w64-x86_64-librsvg &lt;span style=&quot;color: #3a5fcd;&quot;&gt;\&lt;/span&gt;
mingw-w64-x86_64-lcms2 &lt;span style=&quot;color: #3a5fcd;&quot;&gt;\&lt;/span&gt;
mingw-w64-x86_64-libxml2 &lt;span style=&quot;color: #3a5fcd;&quot;&gt;\&lt;/span&gt;
mingw-w64-x86_64-gnutls &lt;span style=&quot;color: #3a5fcd;&quot;&gt;\&lt;/span&gt;
mingw-w64-x86_64-zlib
&lt;/pre&gt;
&lt;/div&gt;&lt;/li&gt;

&lt;li&gt;&lt;p&gt;
configure; make; make install
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-sh&quot;&gt;./autogen.sh
&lt;span style=&quot;color: #0000ff; font-style: italic;&quot;&gt;PKG_CONFIG_PATH&lt;/span&gt;=/mingw64/lib/pkgconfig ./configure --without-imagemagick
make
make install &lt;span style=&quot;color: #0000ff; font-style: italic;&quot;&gt;prefix&lt;/span&gt;=/c/emacs
&lt;/pre&gt;
&lt;/div&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;
Now you can run emacs from &lt;code&gt;C:/emacs/bin/runemacs&lt;/code&gt;
&lt;/p&gt;

&lt;p&gt;
Quite easy :-)
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>垂钓的乐趣</title>
   <link href="http://kimi.im/2018-05-01-fishing"/>
   <updated>2018-05-01T00:00:00+00:00</updated>
   <id>http://kimi.im/fishing</id>
   <content type="html">&lt;p&gt;
自从上次更新至今，已经过去半年有余了。目前的工作也变了。由原来外企的研发经理，变成民企的技术总监；由原来管着嵌入式软件开发一个部门，变成统筹协调内外部研发资源，支持一个庞大的平台生态。
&lt;/p&gt;

&lt;p&gt;
所以呢，一直很忙啊。
&lt;/p&gt;

&lt;p&gt;
不过偶尔也会有些感想，所以，也记录记录。
&lt;/p&gt;

&lt;p&gt;
比如最近看到家附近的小河边常有人在垂钓，于是突发奇想写了首诗：
&lt;/p&gt;

&lt;p class=&quot;verse&quot;&gt;
余每见钓者，悠闲自得，常欲一试，然念及鱼为饵死，于心又不忍。或垂直钩而钓，观绿波&lt;br /&gt;
悠悠，赏黄鸟嘤嘤，亦美之美矣。作诗一首如下：&lt;br /&gt;
&lt;br /&gt;
云卷云舒杨柳下，&lt;br /&gt;
悠悠绿水闲钓翁。&lt;br /&gt;
素饵直钩共鱼戏，&lt;br /&gt;
嘤嘤黄鸟沐春风。&lt;br /&gt;
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>在 Swift 中增加对 Dropbox 访问的支持</title>
   <link href="http://kimi.im/2018-04-05-enable-dropbox-API-in-swift"/>
   <updated>2018-04-05T00:00:00+00:00</updated>
   <id>http://kimi.im/enable-dropbox-API-in-swift</id>
   <content type="html">&lt;p&gt;
最近想开发一款支持 Dropbox 文件同步的基于 orgmode 的任务管理 App，但是 iOS 程序开发基础基本为零。所以一切都是全新的。
&lt;/p&gt;

&lt;div id=&quot;outline-container-org3397b78&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;org3397b78&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;1&lt;/span&gt; 第一步&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-1&quot;&gt;
&lt;p&gt;
先试着使用 Dropbox API。首先你得注册一个 Dropbox 开发者账户， 然后注册你的 App，在此链接中填写相关信息：&lt;a href=&quot;https://www.dropbox.com/developers/apps%EF%BC%8C%E9%9C%80%E8%A6%81%E6%B3%A8%E6%84%8F%E7%9A%84%E6%98%AF&quot;&gt;https://www.dropbox.com/developers/apps，需要注意的是&lt;/a&gt;，在第二个选项“Choose the type of access you need”中，如果选 App folder 的话，就只能访问与你的 App 同名的文件夹，为了灵活，最好还是选择 Full dropbox，全盘访问。注册好之后，可以得到一个 App key。
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgee2c6ec&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgee2c6ec&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;2&lt;/span&gt; 安装 SDK&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-2&quot;&gt;
&lt;p&gt;
访问 SwiftyDropbox，一步一步照着做就好了。用 CocoaPods 比较方便，全部自动完成了：
&lt;a href=&quot;https://github.com/dropbox/SwiftyDropbox#cocoapods&quot;&gt;https://github.com/dropbox/SwiftyDropbox#cocoapods&lt;/a&gt;
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-org92da3e4&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;org92da3e4&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;3&lt;/span&gt; 配置项目的 .plist 文件&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-3&quot;&gt;
&lt;p&gt;
&lt;a href=&quot;https://github.com/dropbox/SwiftyDropbox#configure-your-project&quot;&gt;https://github.com/dropbox/SwiftyDropbox#configure-your-project&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
添加两个 Key：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre&gt;&lt;code class=&quot;src src-xml&quot;&gt;&amp;lt;&lt;span style=&quot;color: #0000cd;&quot;&gt;key&lt;/span&gt;&amp;gt;LSApplicationQueriesSchemes&amp;lt;/&lt;span style=&quot;color: #0000cd;&quot;&gt;key&lt;/span&gt;&amp;gt;
    &amp;lt;&lt;span style=&quot;color: #0000cd;&quot;&gt;array&lt;/span&gt;&amp;gt;
        &amp;lt;&lt;span style=&quot;color: #0000cd;&quot;&gt;string&lt;/span&gt;&amp;gt;dbapi-8-emm&amp;lt;/&lt;span style=&quot;color: #0000cd;&quot;&gt;string&lt;/span&gt;&amp;gt;
        &amp;lt;&lt;span style=&quot;color: #0000cd;&quot;&gt;string&lt;/span&gt;&amp;gt;dbapi-2&amp;lt;/&lt;span style=&quot;color: #0000cd;&quot;&gt;string&lt;/span&gt;&amp;gt;
    &amp;lt;/&lt;span style=&quot;color: #0000cd;&quot;&gt;array&lt;/span&gt;&amp;gt;

&amp;lt;&lt;span style=&quot;color: #0000cd;&quot;&gt;key&lt;/span&gt;&amp;gt;CFBundleURLTypes&amp;lt;/&lt;span style=&quot;color: #0000cd;&quot;&gt;key&lt;/span&gt;&amp;gt;
    &amp;lt;&lt;span style=&quot;color: #0000cd;&quot;&gt;array&lt;/span&gt;&amp;gt;
        &amp;lt;&lt;span style=&quot;color: #0000cd;&quot;&gt;dict&lt;/span&gt;&amp;gt;
            &amp;lt;&lt;span style=&quot;color: #0000cd;&quot;&gt;key&lt;/span&gt;&amp;gt;CFBundleURLSchemes&amp;lt;/&lt;span style=&quot;color: #0000cd;&quot;&gt;key&lt;/span&gt;&amp;gt;
            &amp;lt;&lt;span style=&quot;color: #0000cd;&quot;&gt;array&lt;/span&gt;&amp;gt;
                &amp;lt;&lt;span style=&quot;color: #0000cd;&quot;&gt;string&lt;/span&gt;&amp;gt;db-&amp;lt;&lt;span style=&quot;color: #0000cd;&quot;&gt;APP_KEY&lt;/span&gt;&amp;gt;&amp;lt;/&lt;span style=&quot;color: #0000cd;&quot;&gt;string&lt;/span&gt;&amp;gt;
            &amp;lt;/&lt;span style=&quot;color: #0000cd;&quot;&gt;array&lt;/span&gt;&amp;gt;
            &amp;lt;&lt;span style=&quot;color: #0000cd;&quot;&gt;key&lt;/span&gt;&amp;gt;CFBundleURLName&amp;lt;/&lt;span style=&quot;color: #0000cd;&quot;&gt;key&lt;/span&gt;&amp;gt;
            &amp;lt;&lt;span style=&quot;color: #0000cd;&quot;&gt;string&lt;/span&gt;&amp;gt;&amp;lt;/&lt;span style=&quot;color: #0000cd;&quot;&gt;string&lt;/span&gt;&amp;gt;
        &amp;lt;/&lt;span style=&quot;color: #0000cd;&quot;&gt;dict&lt;/span&gt;&amp;gt;
    &amp;lt;/&lt;span style=&quot;color: #0000cd;&quot;&gt;array&lt;/span&gt;&amp;gt;

&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
其中 APP KEY 就是在 Dropbox 注册的那一串字符。
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-org0484578&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;org0484578&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;4&lt;/span&gt; 增加代码支持&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-4&quot;&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-orgba35b78&quot; class=&quot;outline-3&quot;&gt;
&lt;h3 id=&quot;orgba35b78&quot;&gt;&lt;span class=&quot;section-number-3&quot;&gt;4.1&lt;/span&gt; 创建 Dropbox 客户端&lt;/h3&gt;
&lt;div class=&quot;outline-text-3&quot; id=&quot;text-4-1&quot;&gt;
&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre&gt;&lt;code class=&quot;src src-swift&quot;&gt;&lt;span style=&quot;color: #8b008b; font-weight: bold;&quot;&gt;import&lt;/span&gt; SwiftyDropbox

&lt;span style=&quot;color: #8b008b; font-weight: bold;&quot;&gt;func&lt;/span&gt; &lt;span style=&quot;color: #0000cd;&quot;&gt;application&lt;/span&gt;(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -&amp;gt; Bool {
    DropboxClientsManager.setupWithAppKey(&lt;span style=&quot;color: #3a5fcd;&quot;&gt;&quot;&amp;lt;APP_KEY&amp;gt;&quot;&lt;/span&gt;)
    &lt;span style=&quot;color: #8b008b; font-weight: bold;&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #5f9ea0;&quot;&gt;true&lt;/span&gt;
}
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgeb83714&quot; class=&quot;outline-3&quot;&gt;
&lt;h3 id=&quot;orgeb83714&quot;&gt;&lt;span class=&quot;section-number-3&quot;&gt;4.2&lt;/span&gt; 添加访问事件&lt;/h3&gt;
&lt;div class=&quot;outline-text-3&quot; id=&quot;text-4-2&quot;&gt;
&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre&gt;&lt;code class=&quot;src src-swift&quot;&gt;&lt;span style=&quot;color: #8b008b; font-weight: bold;&quot;&gt;import&lt;/span&gt; SwiftyDropbox

&lt;span style=&quot;color: #8b008b; font-weight: bold;&quot;&gt;func&lt;/span&gt; &lt;span style=&quot;color: #0000cd;&quot;&gt;myButtonInControllerPressed&lt;/span&gt;() {
    DropboxClientsManager.authorizeFromController(UIApplication.shared,
                                                  controller: &lt;span style=&quot;color: #8b008b; font-weight: bold;&quot;&gt;self&lt;/span&gt;,
                                                  openURL: { (url: URL) -&amp;gt; Void &lt;span style=&quot;color: #8b008b; font-weight: bold;&quot;&gt;in&lt;/span&gt;
                                                    UIApplication.shared.openURL(url)
                                                  })
}
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-org9aefaa5&quot; class=&quot;outline-3&quot;&gt;
&lt;h3 id=&quot;org9aefaa5&quot;&gt;&lt;span class=&quot;section-number-3&quot;&gt;4.3&lt;/span&gt; 返回 App&lt;/h3&gt;
&lt;div class=&quot;outline-text-3&quot; id=&quot;text-4-3&quot;&gt;
&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre&gt;&lt;code class=&quot;src src-swift&quot;&gt;&lt;span style=&quot;color: #8b008b; font-weight: bold;&quot;&gt;import&lt;/span&gt; SwiftyDropbox

&lt;span style=&quot;color: #8b008b; font-weight: bold;&quot;&gt;func&lt;/span&gt; &lt;span style=&quot;color: #0000cd;&quot;&gt;application&lt;/span&gt;(_ app: UIApplication, &lt;span style=&quot;color: #8b008b; font-weight: bold;&quot;&gt;open&lt;/span&gt; url: URL, options: [UIApplicationOpenURLOptionsKey : Any] = [:]) -&amp;gt; Bool {
    &lt;span style=&quot;color: #8b008b; font-weight: bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #8b008b; font-weight: bold;&quot;&gt;let&lt;/span&gt; authResult = DropboxClientsManager.handleRedirectURL(url) {
        &lt;span style=&quot;color: #8b008b; font-weight: bold;&quot;&gt;switch&lt;/span&gt; authResult {
        &lt;span style=&quot;color: #8b008b; font-weight: bold;&quot;&gt;case&lt;/span&gt; .success:
            &lt;span style=&quot;color: #000000;&quot;&gt;print&lt;/span&gt;(&lt;span style=&quot;color: #3a5fcd;&quot;&gt;&quot;Success! User is logged into Dropbox.&quot;&lt;/span&gt;)
        &lt;span style=&quot;color: #8b008b; font-weight: bold;&quot;&gt;case&lt;/span&gt; .cancel:
            &lt;span style=&quot;color: #000000;&quot;&gt;print&lt;/span&gt;(&lt;span style=&quot;color: #3a5fcd;&quot;&gt;&quot;Authorization flow was manually canceled by user!&quot;&lt;/span&gt;)
        &lt;span style=&quot;color: #8b008b; font-weight: bold;&quot;&gt;case&lt;/span&gt; .error(_, &lt;span style=&quot;color: #8b008b; font-weight: bold;&quot;&gt;let&lt;/span&gt; description):
            &lt;span style=&quot;color: #000000;&quot;&gt;print&lt;/span&gt;(&lt;span style=&quot;color: #3a5fcd;&quot;&gt;&quot;Error: \(&lt;/span&gt;description&lt;span style=&quot;color: #3a5fcd;&quot;&gt;)&quot;&lt;/span&gt;)
        }
    }
    &lt;span style=&quot;color: #8b008b; font-weight: bold;&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #5f9ea0;&quot;&gt;true&lt;/span&gt;
}
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
</content>
 </entry>
 
 <entry>
   <title>单词本：母老虎</title>
   <link href="http://kimi.im/2017-05-16-english-tigress"/>
   <updated>2017-05-16T00:00:00+00:00</updated>
   <id>http://kimi.im/english-tigress</id>
   <content type="html">&lt;p&gt;
最近对一个表示女性的词缀 -ess 有了一些新的认识。所以，写下来做个记录吧。
&lt;/p&gt;

&lt;div id=&quot;outline-container-orgade0328&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgade0328&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;1&lt;/span&gt; 表示女性的名词&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-1&quot;&gt;
&lt;p&gt;
通常，-ess 添加在一类名词后面表示女性的意思。这类名词通常由 -er 或者 -or 结尾，比如：
&lt;/p&gt;

&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;waiter 男服务员，waitress 女服务员。&lt;/li&gt;
&lt;li&gt;actor 男演员，actress 女演员&lt;/li&gt;
&lt;li&gt;host 主人，hostess 女主人&lt;/li&gt;
&lt;li&gt;poet 诗人，poetess 女诗人&lt;/li&gt;
&lt;li&gt;steward 管家，stewardess 女管家，空中小姐&lt;/li&gt;
&lt;li&gt;emperor 皇帝，empress 女皇&lt;/li&gt;
&lt;li&gt;prince 王子，princess 公主&lt;/li&gt;
&lt;li&gt;god 神，goddess 女神&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-org8afa699&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;org8afa699&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;2&lt;/span&gt; 表示雌性的名词&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-2&quot;&gt;
&lt;p&gt;
但是呢，我看英语语法名词的性部分，发现某一些凶猛动物也用 -ess 结尾来表示雌性，比如：
&lt;/p&gt;

&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;lion 狮子，lioness 母狮子&lt;/li&gt;
&lt;li&gt;leopard 猎豹，leopardess 母豹&lt;/li&gt;
&lt;li&gt;tiger 老虎，tigress 母老虎&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
然而像牛，羊，马之类的，就不用 -ess 来表示雌性的动物。比如：
&lt;/p&gt;

&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;bull 公牛，cow 母牛&lt;/li&gt;
&lt;li&gt;ram 公羊，ewe 母羊&lt;/li&gt;
&lt;li&gt;stallion 公马，mare 母马&lt;/li&gt;
&lt;li&gt;pig 公猪，sow 母猪&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
于是，我心中就有了一个疑问了，英语世界的人们，你们是因为老虎狮子豹比较凶猛，你们害怕它们，就给它们比较高的构词待遇，而对于比较温顺的动物就敷衍了事了？
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
</content>
 </entry>
 
 <entry>
   <title>单词本：易怒的木片</title>
   <link href="http://kimi.im/2017-05-16-english-chip-on-shoulder"/>
   <updated>2017-05-16T00:00:00+00:00</updated>
   <id>http://kimi.im/english-chip-on-shoulder</id>
   <content type="html">&lt;p&gt;
今天听到一个英语成语：a chip on one&apos;s shoulder，字面意思是某人肩膀上的木片。而引申意思是因为自卑、嫉妒或者苦恼而易怒。为什么肩膀上的木片是易怒的意思呢？待我细细说来~
&lt;/p&gt;

&lt;div id=&quot;outline-container-orge3c6497&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orge3c6497&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;1&lt;/span&gt; 造船工人 shipwright 的权利&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-1&quot;&gt;
&lt;p&gt;
用肩膀扛些木片回家曾经是造船工人的权利之一。大约在 1634 年的时候，英国皇家海军造船码头工厂有一条不成文的规矩，造船工人享有一项福利，可以把船厂的木材下脚料扛回家。就这样，大概过了 100 年，船厂主发现，这项福利造成的损失越来越大，工人们开始想方设法浪费木材，砍下下脚料带回家。于是，船厂主制定规矩，今后的木片下脚料只能用手拿回家，而不能用肩膀扛回家。因为手臂承重有限，拿回家的木片就少一些。这项规矩刚实施的时候，有一个叫 John Miller 的强壮造船工人扛着一堆木片回家，监管的人说，请把木片从你肩膀上拿下来。John Miller 就发火了，说，这些木片不是属于我的吗？我不放下来！然后一群造船工人一拥而上扛着木头就闯了出去。&lt;sup&gt;&lt;a id=&quot;fnr.1&quot; class=&quot;footref&quot; href=&quot;#fn.1&quot;&gt;1&lt;/a&gt;&lt;/sup&gt;
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgedbe98b&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgedbe98b&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;2&lt;/span&gt; 决斗的信号&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-2&quot;&gt;
&lt;p&gt;
后来，肩膀上的木片也被用来互相挑衅。1830 年的时候，北美的粗野孩子如果想出去打一架，就会把木片放在肩膀上，一旦有人把它拿下来，那这一架就非打不可了：
&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;
when two churlish boys were determined to fight, a chip would be placed on the
shoulder of one, and the other demanded to knock it off at his peril&lt;sup&gt;&lt;a id=&quot;fnr.1.100&quot; class=&quot;footref&quot; href=&quot;#fn.1&quot;&gt;1&lt;/a&gt;&lt;/sup&gt;
&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgeebf4dd&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgeebf4dd&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;3&lt;/span&gt; 易怒&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-3&quot;&gt;
&lt;p&gt;
现在 a chip on one&apos;s shoulder 是因为自卑、嫉妒或者牢骚而易怒的意思。我不知道最开始的时候，是不是因为造船工人因为福利降低了所以满腹牢骚，发起怒来。反正现在它的意思就有些积怨导致发怒的意思了。比如：
&lt;/p&gt;

&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;Why did you get so angry at the slightest criticism? You seem to have a chip
on your shoulder.&lt;sup&gt;&lt;a id=&quot;fnr.2&quot; class=&quot;footref&quot; href=&quot;#fn.2&quot;&gt;2&lt;/a&gt;&lt;/sup&gt; 你为啥收到一点点指责就发怒呢？你看起来就好像肩膀上有木片呀。&lt;/li&gt;
&lt;li&gt;Fred has such a chip on his shoulder — you never know what&apos;s going to set him
off next. 弗雷德肩膀上似乎有木片，你永远不知道啥他下一次啥时候会发怒。&lt;/li&gt;
&lt;li&gt;She won&apos;t admit it, but Kate has a chip on her shoulder when it comes to
discussing her career.&lt;sup&gt;&lt;a id=&quot;fnr.3&quot; class=&quot;footref&quot; href=&quot;#fn.3&quot;&gt;3&lt;/a&gt;&lt;/sup&gt; 凯特肯定不会承认，但是当人们讨论她的职业时，她肩膀上好像有木片。&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
那么自卑、嫉妒的人为什么会容易发怒呢？我想大概是因为他/她内心深处是没有接纳自己的，他/她恨的是自己不如他人，恨自己无能，贫穷，难看，无知……所以一旦有人触碰了他/
她内心严密保护起来的自尊心，就会随时和这个世界拼命。然而，不论如何发怒，依然会保持原样，于是就会陷入抑郁寡欢，蛰伏着等待下一次爆发。
&lt;/p&gt;

&lt;p&gt;
我想，唯一的解药应该是放下肩膀上的那块木片，放下心中的我执，接纳真实的自己。只有如此，才能在纷繁复杂的世界上，保持一颗平静的心灵。
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;footnotes&quot;&gt;
&lt;h2 class=&quot;footnotes&quot;&gt;Footnotes: &lt;/h2&gt;
&lt;div id=&quot;text-footnotes&quot;&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.1&quot; class=&quot;footnum&quot; href=&quot;#fnr.1&quot;&gt;1&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;https://en.wikipedia.org/wiki/Chip_on_shoulder&quot;&gt;https://en.wikipedia.org/wiki/Chip_on_shoulder&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.2&quot; class=&quot;footnum&quot; href=&quot;#fnr.2&quot;&gt;2&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;http://idioms.thefreedictionary.com/chip+on+shoulder&quot;&gt;http://idioms.thefreedictionary.com/chip+on+shoulder&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.3&quot; class=&quot;footnum&quot; href=&quot;#fnr.3&quot;&gt;3&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;http://idioms.thefreedictionary.com/a+chip+on+(one&apos;s)&quot;&gt;http://idioms.thefreedictionary.com/a+chip+on+(one&apos;s)&lt;/a&gt;+shoulder
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;


&lt;/div&gt;
&lt;/div&gt;
</content>
 </entry>
 
 <entry>
   <title>从希望杯全国数学竞赛看杭州小学排名</title>
   <link href="http://kimi.im/2017-04-22-hopecup_elementaryschool"/>
   <updated>2017-04-22T00:00:00+00:00</updated>
   <id>http://kimi.im/hopecup_elementaryschool</id>
   <content type="html">&lt;div id=&quot;outline-container-org950c0db&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;org950c0db&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;1&lt;/span&gt; 小学学区&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-1&quot;&gt;
&lt;p&gt;
最近又到了一年一度小学报名的日子了。看到前几天民办小学报名火爆的场面，心里甚是恐慌。于是也开始关注起小学学区房的事情，于是就有一个疑问，到底哪个小学比较好呢？网上关于杭州小学好坏的排名非常多，无非就是这么几所：
&lt;/p&gt;

&lt;p&gt;
公办小学
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;学军小学&lt;/li&gt;
&lt;li&gt;天长小学&lt;/li&gt;
&lt;li&gt;胜利小学&lt;/li&gt;
&lt;li&gt;求是小学&lt;/li&gt;
&lt;li&gt;安吉路小学&lt;/li&gt;
&lt;li&gt;保俶塔小学&lt;/li&gt;
&lt;li&gt;采荷二小&lt;/li&gt;
&lt;li&gt;西湖小学&lt;/li&gt;
&lt;li&gt;长寿桥小学&lt;/li&gt;
&lt;li&gt;文三街小学&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
民办小学
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;崇文实验小学&lt;/li&gt;
&lt;li&gt;钱塘外国语学校&lt;/li&gt;
&lt;li&gt;天地实验小学&lt;/li&gt;
&lt;li&gt;育才实验学校&lt;/li&gt;
&lt;li&gt;时代小学&lt;/li&gt;
&lt;li&gt;杭州绿城育华学校&lt;/li&gt;
&lt;li&gt;江南实验学校&lt;/li&gt;
&lt;li&gt;新世纪外国语学校&lt;/li&gt;
&lt;li&gt;大成实验学校&lt;/li&gt;
&lt;li&gt;长江实验学校&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
那么他们到底好在哪里呢？以工程师的角度来看，我们应该让数据来说话。本文以希望杯数学全国数学邀请赛 2017 年四五六年级二试一等二等获奖名单为依据，对小学排名进行简单的分析汇总。
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-org9ca19d2&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;org9ca19d2&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;2&lt;/span&gt; 希望杯&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-2&quot;&gt;
&lt;p&gt;
希望杯数学邀请赛是 1990 年,中国科学技术协会普及部、中国优选法统筹法与经济数学研究会、高等教育出版社、中国青年报学校工作部和华罗庚实验室五家单位共同发起组织的全国数学邀请赛。自创办以来，希望杯大大激发了参赛地区中小学生的学习热情，为数学教师们的教学研究注入了新的活力，为地区教育部门检测数学教学质量提供了一个参考坐标。希望杯为千千万万的学生播种希望。&lt;sup&gt;&lt;a id=&quot;fnr.1&quot; class=&quot;footref&quot; href=&quot;#fn.1&quot;&gt;1&lt;/a&gt;&lt;/sup&gt;
&lt;/p&gt;

&lt;p&gt;
2017 年希望杯数学邀请赛四五六年级一二等奖获奖人数分别为四年级 346 人，五年级 338 人，六年级 406 人。
&lt;/p&gt;

&lt;p&gt;
杭州市小学获奖人数前十四所学校汇总如下：
&lt;/p&gt;

&lt;a data-flickr-embed=&quot;true&quot;  href=&quot;https://www.flickr.com/photos/kimim-photo/33354704504/in/dateposted-public/&quot; title=&quot;获奖汇总&quot;&gt;&lt;img src=&quot;https://c1.staticflickr.com/3/2926/33354704504_4aef40c568_z.jpg&quot; width=&quot;640&quot; height=&quot;403&quot; alt=&quot;获奖汇总&quot;&gt;&lt;/a&gt;&lt;script async src=&quot;//embedr.flickr.com/assets/client-code.js&quot; charset=&quot;utf-8&quot;&gt;&lt;/script&gt;

&lt;p&gt;
柱状图显示如下：
&lt;/p&gt;

&lt;a data-flickr-embed=&quot;true&quot;  href=&quot;https://www.flickr.com/photos/kimim-photo/34197221055/in/dateposted-public/&quot; title=&quot;汇总图表&quot;&gt;&lt;img src=&quot;https://c1.staticflickr.com/3/2927/34197221055_e1962398e2_z.jpg&quot; width=&quot;640&quot; height=&quot;423&quot; alt=&quot;汇总图表&quot;&gt;&lt;/a&gt;&lt;script async src=&quot;//embedr.flickr.com/assets/client-code.js&quot; charset=&quot;utf-8&quot;&gt;&lt;/script&gt;

&lt;p&gt;
获奖总人数前五名为学军小学紫金港校区，天长小学，采荷二小，崇文实验小学和求是星洲小学。一等奖人数则以天长小学崇文实验小学和育才中学附属小学胜出。
&lt;/p&gt;

&lt;p&gt;
另外根据网上能找到的班级数据：学军小学紫金港校区 2016 年总共 6 班级，天长小学 6
or 7 个班，采荷二小 8 个班，崇文实验小学 8 个班（据说是小班 30 人左右），求是星洲小学 5 个班。由此看，这几所小学每个年级的总人数相差不太多。
&lt;/p&gt;

&lt;p&gt;
所以我们可以得出结论，就希望杯而言，杭州排名前五的小学为：
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;第一：学军小学紫金港校区&lt;/li&gt;
&lt;li&gt;第二：天长小学&lt;/li&gt;
&lt;li&gt;第三：采荷二小&lt;/li&gt;
&lt;li&gt;第四：崇文实验小学（民办）&lt;/li&gt;
&lt;li&gt;第五：求是星洲小学&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
但是，一个小学的好坏，除了数学竞赛之外，还有比如学校人文关怀，教师品性，综合素质等。所以本文的结论仅能当做一个很片面的参考吧。
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;footnotes&quot;&gt;
&lt;h2 class=&quot;footnotes&quot;&gt;Footnotes: &lt;/h2&gt;
&lt;div id=&quot;text-footnotes&quot;&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.1&quot; class=&quot;footnum&quot; href=&quot;#fnr.1&quot;&gt;1&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;http://hopecup.org/index.html&quot;&gt;http://hopecup.org/index.html&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;


&lt;/div&gt;
&lt;/div&gt;
</content>
 </entry>
 
 <entry>
   <title>单词本：无人机</title>
   <link href="http://kimi.im/2017-03-13-english-drone"/>
   <updated>2017-03-13T00:00:00+00:00</updated>
   <id>http://kimi.im/english-drone</id>
   <content type="html">&lt;p&gt;
近年来，无人机已经变得家喻户晓了。上周在上塘河边散步晒太阳，看到一位老者在河面上放飞着一架海飞丝沐浴露大小的无人机。从心态来看，他比我年轻十几岁啊！老人家说他过几天要和老伴要去内蒙古大草原玩，所以花了 6 千多买了个市面上最轻巧的无人机去航拍。真是令人羡慕啊。我们这个时代五六十岁的老年人是最幸福的一群人了，他们已经退休，儿女也已成家，手里领着养老金，自由自在，跳跳广场舞，玩玩无人机。而 30 岁上下年纪的则是最辛苦的一群人了，他们上有老下有小，每天要勤勤恳恳工作。
&lt;/p&gt;

&lt;p&gt;
不过，转念一想，其实我也不太有时间玩无人机，一般来说买来后基本上会放在家里积灰，而且还占空间。于是，我又心情愉悦的享受午后的阳光去了。
&lt;/p&gt;

&lt;div id=&quot;outline-container-org446127b&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;org446127b&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;1&lt;/span&gt; drone&lt;sup&gt;(en)&lt;/sup&gt;&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-1&quot;&gt;
&lt;p&gt;
刚才提到的无人机，通常都是用 drone[drəʊn]这个单词。专业一点叫 unmanned aerial
vehicle（UAV）无人飞行器，有时候也叫 unmanned aircraft system（UAS）无人飞机系统。
&lt;/p&gt;

&lt;p&gt;
之所以叫 drone 是因为无人机在空中飞的时候像雄蜂一样发出嗡嗡声，而 drone 的本意就是嗡嗡叫、雄蜂：
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;A drone is a male bee. Drone 是雄蜂。&lt;/li&gt;
&lt;li&gt;A few are dimwitted drones, but most are talented, frustrated, wasted
people. 有几个是愚笨的寄生虫，但是大多数是有才能却不得志而自暴自弃的人。（蜂巢里的雄峰通常比工蜂大，唯一的职责就是繁殖后代，一生只和母蜂王抱抱一次，完了就死掉了。所以不明就里的人以为它们是好吃懒做的寄生虫，其实真是错怪它们了，它们真的好伟大，牺牲了自己，繁衍了蜜蜂种群啊。）根据人们的误解，drone 也就有好吃懒做的寄生虫之意了。&lt;/li&gt;
&lt;li&gt;Ivy&apos;s voice droned, maddening as an insect around Kimi&apos;s head&amp;#x2026; 艾薇一直在吉米耳边嗡嗡地说个不停，他都快疯了。（这里 drone 用作动词：喋喋不休唠叨）&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgae796ea&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgae796ea&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;2&lt;/span&gt; le drone&lt;sup&gt;(fr)&lt;/sup&gt;&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-2&quot;&gt;
&lt;p&gt;
法语则是直接从英语中借来 un drone 这个单词。
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;L&apos;exposition des drones a attiré l&apos;attention de nombreux visiteurs. 中国的彩虹无人机系统吸引了众多观众的目光。&lt;sup&gt;&lt;a id=&quot;fnr.1&quot; class=&quot;footref&quot; href=&quot;#fn.1&quot;&gt;1&lt;/a&gt;&lt;/sup&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-org0d9c1d9&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;org0d9c1d9&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;3&lt;/span&gt; die Drohne&lt;sup&gt;(de)&lt;/sup&gt;&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-3&quot;&gt;
&lt;p&gt;
德语中的无人机貌似也是从英语借来的 eine Drohne：
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;Unbemannte Luftfahrzeuge werden als Drohnen bezeichnet. 无人机也称作 Drohne。&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
另外，德语 ein Drohn&lt;sup&gt;&lt;a id=&quot;fnr.2&quot; class=&quot;footref&quot; href=&quot;#fn.2&quot;&gt;2&lt;/a&gt;&lt;/sup&gt; 一只雄峰。
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgd9083bb&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgd9083bb&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;4&lt;/span&gt; Summary&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-4&quot;&gt;
&lt;p&gt;
英语里，drone 是飞行的时候嗡嗡响的雄峰，而雄峰看起来吃吃喝喝不干活所以也用来骂那些好吃懒做的人，嗡嗡响形容人就是喋喋不休的说个不停，嗡嗡叫也引申为工作时候嗡嗡响的无人机。
&lt;/p&gt;

&lt;p&gt;
法语，德语也分别用 le drone 和 die Drohne 表示无人机。德语里 ein Drohn 也是雄峰之意。
&lt;/p&gt;

&lt;p&gt;
最后，我想问，哪为小读者家里有无人机，借我玩玩呗！
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;footnotes&quot;&gt;
&lt;h2 class=&quot;footnotes&quot;&gt;Footnotes: &lt;/h2&gt;
&lt;div id=&quot;text-footnotes&quot;&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.1&quot; class=&quot;footnum&quot; href=&quot;#fnr.1&quot;&gt;1&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;http://french.china.org.cn/china/txt/2012-11/15/content_27124114.htm&quot;&gt;http://french.china.org.cn/china/txt/2012-11/15/content_27124114.htm&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.2&quot; class=&quot;footnum&quot; href=&quot;#fnr.2&quot;&gt;2&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;https://de.wikipedia.org/wiki/Drohn&quot;&gt;https://de.wikipedia.org/wiki/Drohn&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;


&lt;/div&gt;
&lt;/div&gt;
</content>
 </entry>
 
 <entry>
   <title>单词本：作秀</title>
   <link href="http://kimi.im/2017-03-06-english-showboat"/>
   <updated>2017-03-06T00:00:00+00:00</updated>
   <id>http://kimi.im/english-showboat</id>
   <content type="html">&lt;div id=&quot;outline-container-org0f6b80b&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;org0f6b80b&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;1&lt;/span&gt; 与主题无关的一些琐事&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-1&quot;&gt;
&lt;p&gt;
在春天刚刚开始的上周末，我收拾了一下家里的杂物，把满是杂物的杂物间收拾干净，变成了一个我专有的书房。这样一来，家里就再也没有卫生死角了。之前堆满杂物角落里积满灰尘，现在统统清理干净。以后也可以一直保持干净了。不知道你们能不能体会到这种改变带来的好心情。另外，原来一直拉着窗帘的杂物间有老大一扇窗户，我现在坐着的位置看下去正好是对面豪宅小区的花园，感觉老好了。
&lt;/p&gt;

&lt;p&gt;
我写这些可不是什么 showboat，而是真的开心，能够拥有一间明亮整洁清静的书房。在这里，我写写文字都觉得很享受。
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgcc22462&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgcc22462&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;2&lt;/span&gt; Showboat&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-2&quot;&gt;
&lt;p&gt;
至于什么是 showboat，那么待我慢慢解释：
&lt;/p&gt;

&lt;p&gt;
一开始 showboat 指的是美国漂流在密西西比河和俄亥俄河上面，为河边居民提供戏剧演出用的船只。&lt;sup&gt;&lt;a id=&quot;fnr.1&quot; class=&quot;footref&quot; href=&quot;#fn.1&quot;&gt;1&lt;/a&gt;&lt;/sup&gt;
&lt;/p&gt;

&lt;a data-flickr-embed=&quot;true&quot;  href=&quot;https://www.flickr.com/photos/kimim-photo/33244086016/in/dateposted-public/&quot; title=&quot;Branson_Belle_Table_Rock_Lake_2012_cropped&quot;&gt;&lt;img src=&quot;https://c1.staticflickr.com/1/779/33244086016_8aeb78648f_z.jpg&quot; width=&quot;640&quot; height=&quot;435&quot; alt=&quot;Branson_Belle_Table_Rock_Lake_2012_cropped&quot;&gt;&lt;/a&gt;&lt;script async src=&quot;//embedr.flickr.com/assets/client-code.js&quot; charset=&quot;utf-8&quot;&gt;&lt;/script&gt;
&lt;p&gt;
&lt;i&gt;The Showboat Branson Belle on Table Rock Lake, Branson, Missouri&lt;/i&gt;
&lt;/p&gt;

&lt;p&gt;
后来，不知什么时候，因为 showboat 具有华丽的装饰，于是成了作秀、炫技的意思。通常更多用在体育运动员身上。比如篮球运动员投篮之前展示一系列优美的过人动作，然后才去投篮，就是一种 showboat 行为。
&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;
Based on the supposedly gaudy look of showboats, the term &quot;showboat&quot; also came
to mean someone who wants his or her ostentatious behavior to be seen at all
costs. This term is particularly applied in sports, where a showboat (or
sometimes &quot;showboater&quot;) will do something flashy before (or even instead of)
actually achieving his or her goal.&lt;sup&gt;&lt;a id=&quot;fnr.2&quot; class=&quot;footref&quot; href=&quot;#fn.2&quot;&gt;2&lt;/a&gt;&lt;/sup&gt;
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;
例句：
&lt;/p&gt;

&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;That skateboarder was showboating to impress that girl when he broke his
ankle. 滑板南海向女生秀技术，结果弄破了膝盖。&lt;/li&gt;
&lt;li&gt;The professor has a tendency to showboat beafore his classes.  这位教授喜欢向学生卖弄学问.&lt;/li&gt;
&lt;li&gt;He&apos;s not a real basketball player, he&apos;s more of a showboat with all the
tattoos and fancy cars. 他不是个真正的篮球选手。他不过是个爱炫耀自己的刺青和好车的人。&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;footnotes&quot;&gt;
&lt;h2 class=&quot;footnotes&quot;&gt;Footnotes: &lt;/h2&gt;
&lt;div id=&quot;text-footnotes&quot;&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.1&quot; class=&quot;footnum&quot; href=&quot;#fnr.1&quot;&gt;1&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;https://en.wikipedia.org/wiki/Showboat&quot;&gt;https://en.wikipedia.org/wiki/Showboat&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.2&quot; class=&quot;footnum&quot; href=&quot;#fnr.2&quot;&gt;2&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;https://en.wikipedia.org/wiki/Showboat#Showboating&quot;&gt;https://en.wikipedia.org/wiki/Showboat#Showboating&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;


&lt;/div&gt;
&lt;/div&gt;
</content>
 </entry>
 
 <entry>
   <title>单词本：代码分支不可至</title>
   <link href="http://kimi.im/2017-01-04-deutch-zweig"/>
   <updated>2017-01-04T00:00:00+00:00</updated>
   <id>http://kimi.im/deutch-zweig</id>
   <content type="html">&lt;div id=&quot;outline-container-orgf31255a&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgf31255a&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;1&lt;/span&gt; 老北京炸酱面&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-1&quot;&gt;
&lt;p&gt;
今晚在杭州滨江的东方郡外面议价面馆吃了晚饭。三四年前，有同事住在那里，大家一起去过那里，那时候周围一片黑。现在完全不一样了，各种小吃挨家挨户。
&lt;/p&gt;

&lt;p&gt;
我吃了碗老北京炸酱面，味道一般般，但是看起来真是很美味。
&lt;/p&gt;

&lt;a data-flickr-embed=&quot;true&quot;  href=&quot;https://www.flickr.com/photos/kimim-photo/31950693092/in/dateposted-public/&quot; title=&quot;老北京炸酱面&quot;&gt;&lt;img src=&quot;https://c5.staticflickr.com/1/676/31950693092_8e5afde68a_z.jpg&quot; width=&quot;640&quot; height=&quot;427&quot; alt=&quot;老北京炸酱面&quot;&gt;&lt;/a&gt;&lt;script async src=&quot;//embedr.flickr.com/assets/client-code.js&quot; charset=&quot;utf-8&quot;&gt;&lt;/script&gt;

&lt;a data-flickr-embed=&quot;true&quot;  href=&quot;https://www.flickr.com/photos/kimim-photo/31950687112/in/dateposted-public/&quot; title=&quot;炸酱面&quot;&gt;&lt;img src=&quot;https://c1.staticflickr.com/6/5524/31950687112_25931c1002_z.jpg&quot; width=&quot;640&quot; height=&quot;427&quot; alt=&quot;炸酱面&quot;&gt;&lt;/a&gt;&lt;script async src=&quot;//embedr.flickr.com/assets/client-code.js&quot; charset=&quot;utf-8&quot;&gt;&lt;/script&gt;

&lt;p&gt;
如果不是因为有同事住在那里，以前我们也就不曾去过那里。就好像一个代码分支，永远不会执行到。
&lt;/p&gt;

&lt;p&gt;
今天读德国人写的几个 C 代码文件，看到这样一条注释：
&lt;/p&gt;

&lt;a data-flickr-embed=&quot;true&quot;  href=&quot;https://www.flickr.com/photos/kimim-photo/32099140445/in/dateposted-public/&quot; title=&quot;niemals vorkommen&quot;&gt;&lt;img src=&quot;https://c6.staticflickr.com/1/319/32099140445_2ab6a027cd_z.jpg&quot; width=&quot;590&quot; height=&quot;220&quot; alt=&quot;niemals vorkommen&quot;&gt;&lt;/a&gt;&lt;script async src=&quot;//embedr.flickr.com/assets/client-code.js&quot; charset=&quot;utf-8&quot;&gt;&lt;/script&gt;

&lt;p&gt;
Zweig darf niemals vorkommen 的意思就是分支不可至。
&lt;/p&gt;

&lt;p&gt;
本着聚沙成塔、积少成多、厚积薄发的原则，我们就来好好学习学习这句德语中出现的单词吧。
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-org36ebc39&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;org36ebc39&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;2&lt;/span&gt; 代码分支不可至&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-2&quot;&gt;
&lt;p&gt;
代码分支不可至就是说图中的 else 这个条件分支不会被执行到。niemals vorkommen 就是绝不会发生的意思。在这个语境中，我认为，翻译成“尼玛，弗可能”就很贴切自然，意译音译完美贴合。为什么这么说呢？
&lt;/p&gt;

&lt;p&gt;
首先，程序员经常会遇到这种情况，各种分析规划设计后的代码，绝对不会跑进某个代码分支，但是在调试的时候，程序就是会跑进那个完全不可能进去的分支。这个时候，一句“尼玛，不可能！”最符合当时的心情了。
&lt;/p&gt;

&lt;p&gt;
其次，niemals vorkommen 读音为[ˈniːmaːls foːɐ̯ˌkɔmən]和“尼玛，弗可能”发音神似！
&lt;/p&gt;

&lt;p&gt;
再者，这样调侃一下，这两个单词真是很容易记住了。难怪小周同学会说“人生第一个能人的德语就这么被带歪了，记住了，忘不掉了，突如其来，躲闪不及。”
&lt;/p&gt;

&lt;p&gt;
接下来，我们逐个学习这条注释中的德语单词吧。
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-org67ebf5e&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;org67ebf5e&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;3&lt;/span&gt; der Zweig&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-3&quot;&gt;
&lt;p&gt;
对应英语单词就是 branch。有树枝，分支，家族分支，科学分支学科之意。其实英语单词
twig 嫩枝和 Zweig 可能是同源的，一看俩词长得就很像。
&lt;/p&gt;

&lt;p&gt;
果然，荷兰语中 twijg，德语 Zweig，英语 twig 都源自原始印欧语。据说 two 和 twig 其实是同源的。最简单的分支方法不就是二分法嘛。
&lt;/p&gt;

&lt;p&gt;
这个网页&lt;sup&gt;&lt;a id=&quot;fnr.1&quot; class=&quot;footref&quot; href=&quot;#fn.1&quot;&gt;1&lt;/a&gt;&lt;/sup&gt;还有卖名叫 Two Twig Branches 的 LED 灯呢。
&lt;/p&gt;

&lt;p&gt;
德语有个俗语 nie auf einen grünen Zweig kommen，发不了财，不会飞黄腾达之意。字面意思是没法走上一根绿色的枝条，绿色的枝条往往意味着希望和成长吧，所以也就不会飞黄腾达了。
&lt;/p&gt;

&lt;p&gt;
比如说：Mathe und Englisch, das sind Basics, wenn Du die nicht lernst, dann
wirst Du nie auf einen grünen Zweig kommen. 数学和英语是很基础的知识，如果你不学好，就不会飞黄腾达。
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-org691f8de&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;org691f8de&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;4&lt;/span&gt; niemals&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-4&quot;&gt;
&lt;p&gt;
副词：从不，绝不。
&lt;/p&gt;

&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;Mathematik war niemals meine Stärke. 数学从来都不是我的强项。&lt;/li&gt;
&lt;li&gt;So etwas hatte er noch niemals gesehen. 这样的东西他从来没有看过。&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-org5bb28f0&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;org5bb28f0&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;5&lt;/span&gt; vorkommen&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-5&quot;&gt;
&lt;p&gt;
发生，碰见，存在。也做为名词 das Vorkommen：出现的情况。
&lt;/p&gt;

&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;So etwas kann vorkommen. 这样的事情可能发生。&lt;/li&gt;
&lt;li&gt;So etwas darf nicht wieder vorkommen! 这样的事情不许再发生了！&lt;/li&gt;
&lt;li&gt;Das ist schon öfters vorgekommen. 这已经发生好多次了。&lt;/li&gt;
&lt;li&gt;Das Vorkommen von Schangen in diesem Gebiet ist normal. 蛇在此处出现的情况是很正常的。&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-org61f0a3f&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;org61f0a3f&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;6&lt;/span&gt; Summary&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-6&quot;&gt;
&lt;p&gt;
因为一条代码注释，我们有机会学习到这么多德语单词，这真是外语学习的乐趣所在了。就像网上流传的&lt;sup&gt;&lt;a id=&quot;fnr.2&quot; class=&quot;footref&quot; href=&quot;#fn.2&quot;&gt;2&lt;/a&gt;&lt;/sup&gt;，犹太人对学习外语的信念所说的那样：“会说几门语言，你就具有几个人的价值。&lt;sup&gt;&lt;a id=&quot;fnr.3&quot; class=&quot;footref&quot; href=&quot;#fn.3&quot;&gt;3&lt;/a&gt;&lt;/sup&gt;” 多学一门外语，就好像在世界地图上点亮了一块地方，就能有机会去了解那个地方的历史和正在发生的故事。
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;footnotes&quot;&gt;
&lt;h2 class=&quot;footnotes&quot;&gt;Footnotes: &lt;/h2&gt;
&lt;div id=&quot;text-footnotes&quot;&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.1&quot; class=&quot;footnum&quot; href=&quot;#fnr.1&quot;&gt;1&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;http://www.binbin.net/compare/two-twig-branches.htm&quot;&gt;http://www.binbin.net/compare/two-twig-branches.htm&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.2&quot; class=&quot;footnum&quot; href=&quot;#fnr.2&quot;&gt;2&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
犹太人会好几种语言这个故事，只是在网上经常看到，我没有查证过，不敢说这是不是真实的。但听起来挺美好的。
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.3&quot; class=&quot;footnum&quot; href=&quot;#fnr.3&quot;&gt;3&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;http://learning.sohu.com/20160829/n466601229.shtml&quot;&gt;http://learning.sohu.com/20160829/n466601229.shtml&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;


&lt;/div&gt;
&lt;/div&gt;
</content>
 </entry>
 
 <entry>
   <title>单词本：亡命之徒</title>
   <link href="http://kimi.im/2017-01-03-english-fugetive"/>
   <updated>2017-01-03T00:00:00+00:00</updated>
   <id>http://kimi.im/english-fugetive</id>
   <content type="html">&lt;div id=&quot;outline-container-org11b1795&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;org11b1795&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;1&lt;/span&gt; 巴西囚犯越狱在逃&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-1&quot;&gt;
&lt;p&gt;
事情是这样的，前天，也就是 2017 年的元旦，巴西 Amasonas 州 Manaus 市 Antonio
Trindade 监狱发生暴乱，死伤惨重，50 名囚犯遇难，87 名囚犯在逃。其中一名叫做
Brayan Bremer 的在逃囚犯居然还抽空摆了个漂亮的 pose 拍了张自拍照上传到脸书。一时间引起网络一片哗然，人们纷纷用 Brayan 的头像制作影视剧海报，比如《Um Sonho de
Liberdade》，《Prison Break》。
&lt;/p&gt;

&lt;p&gt;
在 BBC 的一则新闻里《&lt;a href=&quot;http://www.bbc.com/news/world-latin-america-38495374&quot;&gt;Brazil prison escape: Fugitive posts selfies on the run&lt;/a&gt;》
 &lt;sup&gt;&lt;a id=&quot;fnr.1&quot; class=&quot;footref&quot; href=&quot;#fn.1&quot;&gt;1&lt;/a&gt;&lt;/sup&gt;，我们可以学习到逃犯的英语单词：fugitive[ˈfju:dʒətɪv]和
 escapee[ɪˌskeɪˈpi:]。
&lt;/p&gt;

&lt;p&gt;
今天首先学习那个复杂一点的单词 fugitive 吧。
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-org62e8798&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;org62e8798&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;2&lt;/span&gt; fugitive&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-2&quot;&gt;
&lt;p&gt;
从根源上来说，fugitive 源自拉丁语 fugio&lt;sup&gt;(latin)&lt;/sup&gt;，例如：Tempus fugit.&lt;sup&gt;(latin)&lt;/sup&gt;
时间过得飞快。
&lt;/p&gt;

&lt;p&gt;
基于这样的词源，fugitive 就有两重意思。首先，它表示逃亡、消逝，其次，它有转瞬即逝之意。
&lt;/p&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgf3eedd6&quot; class=&quot;outline-3&quot;&gt;
&lt;h3 id=&quot;orgf3eedd6&quot;&gt;&lt;span class=&quot;section-number-3&quot;&gt;2.1&lt;/span&gt; 逃犯、逃亡者&lt;/h3&gt;
&lt;div class=&quot;outline-text-3&quot; id=&quot;text-2-1&quot;&gt;
&lt;p&gt;
作为名词，fugitive 有普通的逃亡者之意，也专门指从逃脱法网的逃犯（fugitive from
justice）之意。
&lt;/p&gt;

&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;police in Manaus continued their search for the fugitives.&lt;sup&gt;&lt;a id=&quot;fnr.1.100&quot; class=&quot;footref&quot; href=&quot;#fn.1&quot;&gt;1&lt;/a&gt;&lt;/sup&gt; Manaus 的警察继续巡捕这些逃犯。&lt;/li&gt;
&lt;li&gt;The rebel leader was a fugitive from justice. 叛乱头目是一名逃犯。在法律上，
fugitive from justice 特指逃脱法律的逃犯。&lt;/li&gt;
&lt;li&gt;A solitary fugitive, he crossed the Turkish frontier.&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-org0251004&quot; class=&quot;outline-3&quot;&gt;
&lt;h3 id=&quot;org0251004&quot;&gt;&lt;span class=&quot;section-number-3&quot;&gt;2.2&lt;/span&gt; 流浪者&lt;/h3&gt;
&lt;div class=&quot;outline-text-3&quot; id=&quot;text-2-2&quot;&gt;
&lt;p&gt;
不过，有时候逃亡的目的是远离世俗的话，就不是逃犯了，是主动流浪的隐逸者。
&lt;/p&gt;

&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;We also chanced upon fugitive monks. 我们有时候会偶遇流浪的僧侣，&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-org551c58b&quot; class=&quot;outline-3&quot;&gt;
&lt;h3 id=&quot;org551c58b&quot;&gt;&lt;span class=&quot;section-number-3&quot;&gt;2.3&lt;/span&gt; 短暂的，转瞬即逝的&lt;/h3&gt;
&lt;div class=&quot;outline-text-3&quot; id=&quot;text-2-3&quot;&gt;
&lt;p&gt;
容易逃逸的，容易消逝的，就是短暂的，转瞬即逝的。
&lt;/p&gt;

&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;fugitive beauty 转瞬即逝的美，或者说是韶华易逝，也许更简洁点可以翻译成浮华吧。&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orged3f518&quot; class=&quot;outline-3&quot;&gt;
&lt;h3 id=&quot;orged3f518&quot;&gt;&lt;span class=&quot;section-number-3&quot;&gt;2.4&lt;/span&gt; 难以捉摸的&lt;/h3&gt;
&lt;div class=&quot;outline-text-3&quot; id=&quot;text-2-4&quot;&gt;
&lt;p&gt;
因为转瞬即逝，所以难以捉摸，难以理解。就好比是女孩子的想法，总是转瞬即逝，因此难以捉摸难以理解。
&lt;/p&gt;

&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;fugitive solutions to the problem. 乍看起来好像是说逃犯的方案，不太合法的样子。其实是指难以捉摸的答案，或者说是费解的答案。其实我觉得可以翻译成逸解，逸：逃逸；解：答案。&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-org0f3c8a8&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;org0f3c8a8&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;3&lt;/span&gt; Summary&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-3&quot;&gt;
&lt;p&gt;
读新闻的时候看到 fugitive 这个单词，简单的挖掘了一下，发现它不仅是逃犯的意思，还有逃亡，流浪，短暂，难以捉摸之意。
&lt;/p&gt;

&lt;p&gt;
2017 年一开始就发生这种惨烈的越狱时间，注定了这是一个不同寻常的一年。这一年，特朗普将上任做美国总统，这一年，法国和德国将开始总统大选。不知道欧美国家还会发生什么样的大闹剧。
&lt;/p&gt;

&lt;p&gt;
然而 2017 年，伟大的祖国将迎来中国人民解放军建军 90 周年，香港回归 20 周年，“一带一路”国际合作高峰论坛，首艘货运飞船“天舟一号”升空，“嫦娥五号”登月。祝愿祖国繁荣昌盛，早日完胜欧美。
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;footnotes&quot;&gt;
&lt;h2 class=&quot;footnotes&quot;&gt;Footnotes: &lt;/h2&gt;
&lt;div id=&quot;text-footnotes&quot;&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.1&quot; class=&quot;footnum&quot; href=&quot;#fnr.1&quot;&gt;1&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;http://www.bbc.com/news/world-latin-america-38495374&quot;&gt;http://www.bbc.com/news/world-latin-america-38495374&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;


&lt;/div&gt;
&lt;/div&gt;
</content>
 </entry>
 
 <entry>
   <title>2017 新年快乐</title>
   <link href="http://kimi.im/2017-01-01-happy-new-year"/>
   <updated>2017-01-01T00:00:00+00:00</updated>
   <id>http://kimi.im/happy-new-year</id>
   <content type="html">&lt;p&gt;
2016 年转眼就过去了，15 年还恍如隔日，17 年就已经到来。是什么原因导致日子过得越来越匆匆呢？可能是我们生活的世界搭上了信息化的高速公路，运转越来越快；也可能是随着年纪增长，各种琐事增多，时间都被填满，没有了用来浪费的闲暇时光。然而，可悲的是，
2016 年一整年过来，却没发现自己有多大的收获。
&lt;/p&gt;

&lt;div id=&quot;outline-container-orgdb7ada5&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgdb7ada5&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;1&lt;/span&gt; 电影&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-1&quot;&gt;
&lt;p&gt;
2016 年已经难得去一趟电影院了，一次是趁着 G20 去看了《谍影重重 5》和《冰河时代 5：星际碰撞》，还有一次是公司工会活动，看了《血战钢锯岭》。《冰河 5》还是一次值得纪念的电影，因为我们第一次带了宝宝去看，熄灯那一刻，她还吓得大哭，整场电影是趴在妈妈身上看完的。
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-org95ddbe8&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;org95ddbe8&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;2&lt;/span&gt; 旅游&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-2&quot;&gt;
&lt;p&gt;
2 月去了苏州，住在吴宫泛太平洋酒店，游览了他们家的后花园盘门景区。
&lt;/p&gt;

&lt;a data-flickr-embed=&quot;true&quot;  href=&quot;https://www.flickr.com/photos/kimim-photo/31646700480/in/dateposted-public/&quot; title=&quot;DSCF9463&quot;&gt;&lt;img src=&quot;https://c1.staticflickr.com/1/604/31646700480_0436bd827f_z.jpg&quot; width=&quot;640&quot; height=&quot;427&quot; alt=&quot;DSCF9463&quot;&gt;&lt;/a&gt;&lt;script async src=&quot;//embedr.flickr.com/assets/client-code.js&quot; charset=&quot;utf-8&quot;&gt;&lt;/script&gt;

&lt;p&gt;
4 月跑去安吉的 HelloKitty 乐园。
&lt;/p&gt;

&lt;a data-flickr-embed=&quot;true&quot;  href=&quot;https://www.flickr.com/photos/kimim-photo/31180742314/in/dateposted-public/&quot; title=&quot;HelloKitty 乐园&quot;&gt;&lt;img src=&quot;https://c3.staticflickr.com/1/772/31180742314_715f1054dd_z.jpg&quot; width=&quot;640&quot; height=&quot;427&quot; alt=&quot;HelloKitty 乐园&quot;&gt;&lt;/a&gt;&lt;script async src=&quot;//embedr.flickr.com/assets/client-code.js&quot; charset=&quot;utf-8&quot;&gt;&lt;/script&gt;

&lt;p&gt;
5 月公司旅游去嵊泗海岛住了两天，游览了和尚套，六井潭，还在五龙乡的乡间公路夜跑了一圈。
&lt;/p&gt;

&lt;a data-flickr-embed=&quot;true&quot;  href=&quot;https://www.flickr.com/photos/kimim-photo/31982990746/in/dateposted-public/&quot; title=&quot;嵊泗&quot;&gt;&lt;img src=&quot;https://c3.staticflickr.com/1/639/31982990746_7978658c8f_z.jpg&quot; width=&quot;640&quot; height=&quot;427&quot; alt=&quot;嵊泗&quot;&gt;&lt;/a&gt;&lt;script async src=&quot;//embedr.flickr.com/assets/client-code.js&quot; charset=&quot;utf-8&quot;&gt;&lt;/script&gt;

&lt;p&gt;
接着出差去了趟武汉，工作的间隙逛了逛武汉大学校园，黄鹤楼和晴川阁，还在酒店附近的宝岛公园晨跑了 5 公里。
&lt;/p&gt;

&lt;a data-flickr-embed=&quot;true&quot;  href=&quot;https://www.flickr.com/photos/kimim-photo/31180799214/in/dateposted-public/&quot; title=&quot;武汉大学&quot;&gt;&lt;img src=&quot;https://c7.staticflickr.com/1/601/31180799214_1462a73bcc_z.jpg&quot; width=&quot;640&quot; height=&quot;427&quot; alt=&quot;武汉大学&quot;&gt;&lt;/a&gt;&lt;script async src=&quot;//embedr.flickr.com/assets/client-code.js&quot; charset=&quot;utf-8&quot;&gt;&lt;/script&gt;

&lt;a data-flickr-embed=&quot;true&quot;  href=&quot;https://www.flickr.com/photos/kimim-photo/31180824584/in/dateposted-public/&quot; title=&quot;黄鹤楼上&quot;&gt;&lt;img src=&quot;https://c1.staticflickr.com/6/5586/31180824584_b96b4d8d2c_z.jpg&quot; width=&quot;640&quot; height=&quot;427&quot; alt=&quot;黄鹤楼上&quot;&gt;&lt;/a&gt;&lt;script async src=&quot;//embedr.flickr.com/assets/client-code.js&quot; charset=&quot;utf-8&quot;&gt;&lt;/script&gt;

&lt;a data-flickr-embed=&quot;true&quot;  href=&quot;https://www.flickr.com/photos/kimim-photo/31983080046/in/dateposted-public/&quot; title=&quot;黄鹤楼&quot;&gt;&lt;img src=&quot;https://c7.staticflickr.com/6/5796/31983080046_96ec6385c1_z.jpg&quot; width=&quot;427&quot; height=&quot;640&quot; alt=&quot;黄鹤楼&quot;&gt;&lt;/a&gt;&lt;script async src=&quot;//embedr.flickr.com/assets/client-code.js&quot; charset=&quot;utf-8&quot;&gt;&lt;/script&gt;

&lt;a data-flickr-embed=&quot;true&quot;  href=&quot;https://www.flickr.com/photos/kimim-photo/31180852224/in/dateposted-public/&quot; title=&quot;武汉宝岛公园&quot;&gt;&lt;img src=&quot;https://c1.staticflickr.com/1/314/31180852224_ab08f22e2b_z.jpg&quot; width=&quot;480&quot; height=&quot;640&quot; alt=&quot;武汉宝岛公园&quot;&gt;&lt;/a&gt;&lt;script async src=&quot;//embedr.flickr.com/assets/client-code.js&quot; charset=&quot;utf-8&quot;&gt;&lt;/script&gt;

&lt;p&gt;
5 月底 6 月初一家人去了趟日本。路线由杭州到东京，再到箱根，接着去京都，转大阪，再回到杭州。在东京体验了热情洋溢的日本迪斯尼乐园；在箱根体验了日式酒店，坐了登山小火车，游览了小王子公园，泡了温泉；在京都访问了清水寺，梅小路公园；在大阪参观了大阪博物馆，大阪企业家博物馆。
&lt;/p&gt;

&lt;a data-flickr-embed=&quot;true&quot;  href=&quot;https://www.flickr.com/photos/kimim-photo/31211744983/in/dateposted-public/&quot; title=&quot;日本迪斯尼&quot;&gt;&lt;img src=&quot;https://c8.staticflickr.com/1/387/31211744983_85d601894b_z.jpg&quot; width=&quot;427&quot; height=&quot;640&quot; alt=&quot;日本迪斯尼&quot;&gt;&lt;/a&gt;&lt;script async src=&quot;//embedr.flickr.com/assets/client-code.js&quot; charset=&quot;utf-8&quot;&gt;&lt;/script&gt;

&lt;a data-flickr-embed=&quot;true&quot;  href=&quot;https://www.flickr.com/photos/kimim-photo/31211760743/in/dateposted-public/&quot; title=&quot;箱根登山电车&quot;&gt;&lt;img src=&quot;https://c8.staticflickr.com/1/721/31211760743_20b965c2c4_z.jpg&quot; width=&quot;640&quot; height=&quot;427&quot; alt=&quot;箱根登山电车&quot;&gt;&lt;/a&gt;&lt;script async src=&quot;//embedr.flickr.com/assets/client-code.js&quot; charset=&quot;utf-8&quot;&gt;&lt;/script&gt;

&lt;a data-flickr-embed=&quot;true&quot;  href=&quot;https://www.flickr.com/photos/kimim-photo/31211773093/in/dateposted-public/&quot; title=&quot;小王子公园&quot;&gt;&lt;img src=&quot;https://c6.staticflickr.com/1/558/31211773093_774afa7dd3_z.jpg&quot; width=&quot;640&quot; height=&quot;427&quot; alt=&quot;小王子公园&quot;&gt;&lt;/a&gt;&lt;script async src=&quot;//embedr.flickr.com/assets/client-code.js&quot; charset=&quot;utf-8&quot;&gt;&lt;/script&gt;

&lt;a data-flickr-embed=&quot;true&quot;  href=&quot;https://www.flickr.com/photos/kimim-photo/31873359922/in/dateposted-public/&quot; title=&quot;小王子公园&quot;&gt;&lt;img src=&quot;https://c3.staticflickr.com/1/466/31873359922_bbbb005fc1_z.jpg&quot; width=&quot;640&quot; height=&quot;427&quot; alt=&quot;小王子公园&quot;&gt;&lt;/a&gt;&lt;script async src=&quot;//embedr.flickr.com/assets/client-code.js&quot; charset=&quot;utf-8&quot;&gt;&lt;/script&gt;

&lt;a data-flickr-embed=&quot;true&quot;  href=&quot;https://www.flickr.com/photos/kimim-photo/31873382132/in/dateposted-public/&quot; title=&quot;清水寺&quot;&gt;&lt;img src=&quot;https://c5.staticflickr.com/6/5764/31873382132_91b1abb755_z.jpg&quot; width=&quot;640&quot; height=&quot;427&quot; alt=&quot;清水寺&quot;&gt;&lt;/a&gt;&lt;script async src=&quot;//embedr.flickr.com/assets/client-code.js&quot; charset=&quot;utf-8&quot;&gt;&lt;/script&gt;

&lt;a data-flickr-embed=&quot;true&quot;  href=&quot;https://www.flickr.com/photos/kimim-photo/31873389922/in/dateposted-public/&quot; title=&quot;大阪企业家博物馆&quot;&gt;&lt;img src=&quot;https://c3.staticflickr.com/1/740/31873389922_9aabe6eab6_z.jpg&quot; width=&quot;640&quot; height=&quot;427&quot; alt=&quot;大阪企业家博物馆&quot;&gt;&lt;/a&gt;&lt;script async src=&quot;//embedr.flickr.com/assets/client-code.js&quot; charset=&quot;utf-8&quot;&gt;&lt;/script&gt;

&lt;a data-flickr-embed=&quot;true&quot;  href=&quot;https://www.flickr.com/photos/kimim-photo/31646896340/in/dateposted-public/&quot; title=&quot;DSCF1839&quot;&gt;&lt;img src=&quot;https://c5.staticflickr.com/1/705/31646896340_73b3c7c9d7_z.jpg&quot; width=&quot;640&quot; height=&quot;427&quot; alt=&quot;DSCF1839&quot;&gt;&lt;/a&gt;&lt;script async src=&quot;//embedr.flickr.com/assets/client-code.js&quot; charset=&quot;utf-8&quot;&gt;&lt;/script&gt;


&lt;p&gt;
12 月避开了杭州的寒潮，躲到普吉岛的巴东和麦考海滩切换回夏天，吃遍了泰国餐，学了基础泰拳和泰语，还在酒店见到了巨大的蜥蜴。
&lt;/p&gt;

&lt;a data-flickr-embed=&quot;true&quot;  href=&quot;https://www.flickr.com/photos/kimim-photo/31983200986/in/dateposted-public/&quot; title=&quot;巴东日落&quot;&gt;&lt;img src=&quot;https://c3.staticflickr.com/1/585/31983200986_3b2aff5da8_z.jpg&quot; width=&quot;640&quot; height=&quot;427&quot; alt=&quot;巴东日落&quot;&gt;&lt;/a&gt;&lt;script async src=&quot;//embedr.flickr.com/assets/client-code.js&quot; charset=&quot;utf-8&quot;&gt;&lt;/script&gt;

&lt;a data-flickr-embed=&quot;true&quot;  href=&quot;https://www.flickr.com/photos/kimim-photo/31983218076/in/dateposted-public/&quot; title=&quot;麦考万豪&quot;&gt;&lt;img src=&quot;https://c5.staticflickr.com/6/5672/31983218076_d2bd1f5031_z.jpg&quot; width=&quot;640&quot; height=&quot;427&quot; alt=&quot;麦考万豪&quot;&gt;&lt;/a&gt;&lt;script async src=&quot;//embedr.flickr.com/assets/client-code.js&quot; charset=&quot;utf-8&quot;&gt;&lt;/script&gt;

&lt;a data-flickr-embed=&quot;true&quot;  href=&quot;https://www.flickr.com/photos/kimim-photo/31216117993/in/dateposted-public/&quot; title=&quot;蜥蜴&quot;&gt;&lt;img src=&quot;https://c2.staticflickr.com/1/738/31216117993_704abcf576_z.jpg&quot; width=&quot;640&quot; height=&quot;423&quot; alt=&quot;蜥蜴&quot;&gt;&lt;/a&gt;&lt;script async src=&quot;//embedr.flickr.com/assets/client-code.js&quot; charset=&quot;utf-8&quot;&gt;&lt;/script&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-org3cf8a81&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;org3cf8a81&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;3&lt;/span&gt; 读书&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-3&quot;&gt;
&lt;p&gt;
这一年读过最多的还是绘本故事吧。三岁的宝宝爱上了读书，亲子陪读其实也挺涨见识的。回顾一下&lt;a href=&quot;https://book.douban.com/people/kimim/collect?start=0&amp;amp;sort=time&amp;amp;rating=all&amp;amp;tag=%E7%B9%AA%E6%9C%AC&amp;amp;mode=list&amp;amp;filter=all&quot;&gt;豆瓣读书绘本故事书列表&lt;/a&gt; &lt;sup&gt;&lt;a id=&quot;fnr.1&quot; class=&quot;footref&quot; href=&quot;#fn.1&quot;&gt;1&lt;/a&gt;&lt;/sup&gt;，居然已经看了 91 本绘本故事书，其中有几本甚至读过超过 20 遍！
&lt;/p&gt;

&lt;p&gt;
除了绘本，其他书只读了 9 本[：
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;A+时间管理法 2016-11-27&lt;/li&gt;
&lt;li&gt;慢的力量 2016-11-26&lt;/li&gt;
&lt;li&gt;管理你的每一天 2016-11-13&lt;/li&gt;
&lt;li&gt;断舍离：心灵减负篇    2016-10-05&lt;/li&gt;
&lt;li&gt;断舍离·瑜伽篇 2016-10-03&lt;/li&gt;
&lt;li&gt;禅说庄子：庚桑楚 至乐 2016-11-13&lt;/li&gt;
&lt;li&gt;“逍遥游”释论 2016-10-03&lt;/li&gt;
&lt;li&gt;庄子陪你走红尘 2016-09-27&lt;/li&gt;
&lt;li&gt;Intel Edison 智能硬件开发指南 2016-10-05&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
其中三本庄子相关，五本时间整理方法，一本智能硬件开发。
&lt;/p&gt;

&lt;p&gt;
豆瓣真是个不错的网站，可以记录电影、音乐、读书，还能浏览别人的书评、影评。正如
APP 起始页中说的：我们的精神家园。欢迎在豆瓣上联系我：
&lt;a href=&quot;https://www.douban.com/people/kimim/&quot;&gt;https://www.douban.com/people/kimim/&lt;/a&gt;
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;


&lt;div id=&quot;outline-container-org00846f6&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;org00846f6&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;4&lt;/span&gt; 学习&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-4&quot;&gt;
&lt;p&gt;
2016 年 5 月开始在微信公众号《馬上得天下》中发布英语和工作上相关的学习文章，总计
67 篇，积累订阅用户 303 位。阅读量最高的一篇获得了 264 次阅读：《单词本：洪荒之力》。
&lt;/p&gt;

&lt;p&gt;
另外，9 月份《人人词典》APP 收录了我的单词学习相关的文章，并推荐到 APP 主页。因此也带来了不少订阅用户和浏览量。
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgf4f6cb1&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgf4f6cb1&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;5&lt;/span&gt; 运动&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-5&quot;&gt;
&lt;p&gt;
2016 年找到了手机 APP Keep 来记录运动。这一年总共训练 24 次 23 小时，跑步 21 次
128 公里。实在是很差的一个成绩了。从考勤表分布来看，四五月份是运动做多的月份。
&lt;/p&gt;

&lt;a data-flickr-embed=&quot;true&quot;  href=&quot;https://www.flickr.com/photos/kimim-photo/31651096820/in/dateposted-public/&quot; title=&quot;Keep 2016&quot;&gt;&lt;img src=&quot;https://c5.staticflickr.com/1/292/31651096820_d91794550b_z.jpg&quot; width=&quot;640&quot; height=&quot;569&quot; alt=&quot;Keep 2016&quot;&gt;&lt;/a&gt;&lt;script async src=&quot;//embedr.flickr.com/assets/client-code.js&quot; charset=&quot;utf-8&quot;&gt;&lt;/script&gt;

&lt;p&gt;
2016 年是一个很好的开始，2017 年，继续努力，好好学习，多多分享，多多认识更多共同爱好的人。
&lt;/p&gt;

&lt;p&gt;
最后，祝愿正在读这篇文章的朋友们，2017 年幸福安康，学习进步，工作顺利，收获满满！
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;footnotes&quot;&gt;
&lt;h2 class=&quot;footnotes&quot;&gt;Footnotes: &lt;/h2&gt;
&lt;div id=&quot;text-footnotes&quot;&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.1&quot; class=&quot;footnum&quot; href=&quot;#fnr.1&quot;&gt;1&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;https://book.douban.com/people/kimim/collect&quot;&gt;https://book.douban.com/people/kimim/collect&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;


&lt;/div&gt;
&lt;/div&gt;
</content>
 </entry>
 
 <entry>
   <title>单词本：前所未有</title>
   <link href="http://kimi.im/2016-12-18-english-precedent"/>
   <updated>2016-12-18T00:00:00+00:00</updated>
   <id>http://kimi.im/english-precedent</id>
   <content type="html">&lt;div id=&quot;outline-container-org16ce6c3&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;org16ce6c3&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;1&lt;/span&gt; 史无前例 or 非总统行为&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-1&quot;&gt;
&lt;p&gt;
上周中国海军在南海水域扣留了一只美国海军的无人潜航器，于是，美国的新总统特朗普在
twitter 上发话说这是一起前所未有（unprecedented）的行为。大概因为最近竞选总统，总统（president）这个单词打多了，把前所未有写成了 unpresidented：
&lt;/p&gt;

&lt;a data-flickr-embed=&quot;true&quot;  href=&quot;https://www.flickr.com/photos/kimim-photo/31604630291/in/dateposted-public/&quot; title=&quot;unpresidented&quot;&gt;&lt;img src=&quot;https://c4.staticflickr.com/6/5550/31604630291_a620fb01cb_z.jpg&quot; width=&quot;640&quot; height=&quot;474&quot; alt=&quot;unpresidented&quot;&gt;&lt;/a&gt;&lt;script async src=&quot;//embedr.flickr.com/assets/client-code.js&quot; charset=&quot;utf-8&quot;&gt;&lt;/script&gt;

&lt;p&gt;
那么，具有好学精神的我们，就来学习学习这个新单词吧。
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-org15e464e&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;org15e464e&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;2&lt;/span&gt; precedent&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-2&quot;&gt;
&lt;p&gt;
不出意外，前所未有(unprecedented)去掉 un- 就是前所有的，也就是先例之意。
precedent 作为名词表示事例，先例，案例。
&lt;/p&gt;

&lt;p&gt;
德语 das Präzedens&lt;sup&gt;(de)&lt;/sup&gt;，法语 le précédent&lt;sup&gt;(fr)&lt;/sup&gt;。
&lt;/p&gt;

&lt;p&gt;
很明显，他们都来自一个更古老的单词拉丁语 praecēdēns&lt;sup&gt;(latin)&lt;/sup&gt;，
praecēdere&lt;sup&gt;(latin)&lt;/sup&gt;的过去分词。而 praecēdere ‎意为在某某之前。
&lt;/p&gt;

&lt;p&gt;
拉丁语中 cedere&lt;sup&gt;(latin)&lt;/sup&gt; 为 to go 之意。因此词根 ced 常常与趋向有关。比如
precede：to go before，exceed：to go beyond a limit，proceed：to go forward。
&lt;/p&gt;

&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;They&apos;re keenly aware that whatever they decide will set a precedent. 他们深知，无论他们怎么决定，都将开创先例。&lt;/li&gt;
&lt;li&gt;They were determined to break from precedent. 他们决心打破先例。&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-org5bea6b4&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;org5bea6b4&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;3&lt;/span&gt; precede&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-3&quot;&gt;
&lt;p&gt;
precede 走在前面，领先于，发生在前。preceding：在先的；前面的；先前的。
existing, coming, or occurring immediately before in time or place &amp;lt;the
preceding day&amp;gt; &amp;lt;preceding paragraphs&amp;gt;
&lt;/p&gt;

&lt;p&gt;
法语 précéder&lt;sup&gt;(fr)&lt;/sup&gt; 与英语同出而异形。德语 vorausgehen&lt;sup&gt;(de)&lt;/sup&gt; 则没有继续延续拉丁语传统。voraus&lt;sup&gt;(de)&lt;/sup&gt; 为事先之意。比如 Vielen Dank im Voraus&lt;sup&gt;(de)&lt;/sup&gt; 先向你致谢。
&lt;/p&gt;

&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;She preceded him into the room. 她在他前面进屋。&lt;/li&gt;
&lt;li&gt;The preceding week he had been on vacation. 前一周，我们在度假。&lt;/li&gt;
&lt;li&gt;The new mayor is very different from the person who preceded her in office. 新市长与前任市长非常迥异。&lt;/li&gt;
&lt;li&gt;Maurice le précéda pour lui ouvrir la porte de son cabinet.&lt;sup&gt;(fr)&lt;/sup&gt; 莫里斯在他之前把他的柜子门打开。&lt;/li&gt;
&lt;li&gt;Die Kinder sind schon vorausgegangen, aber ihr werdet sie schnell
einholen.&lt;sup&gt;(de)&lt;/sup&gt; 孩子们已经先走了，但是你们会很快赶上他们的。&lt;/li&gt;
&lt;li&gt;Er ging voraus, um Tür zu öffnen.&lt;sup&gt;(de)&lt;/sup&gt; 他走在前面以便开门。&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-org7d23e0f&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;org7d23e0f&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;4&lt;/span&gt; unprecedented&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-4&quot;&gt;
&lt;p&gt;
回到本文最开始提到的单词，unprecedented，就是 having no precedent 之意，新的，无先例的，unexampled。
&lt;/p&gt;

&lt;p&gt;
法语 sans précédent&lt;sup&gt;(fr)&lt;/sup&gt;，德语 beispiellos&lt;sup&gt;(de)&lt;/sup&gt;。我个人更喜欢法语德语这样的表述，直白易懂，不像 unprecedented 这样那么难拼写，就连美国总统都会不小心写错。
&lt;/p&gt;

&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;Our team has enjoyed unprecedented success this year. 这一年我们团队坐享了史无前例的成功。&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgb9fdf60&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgb9fdf60&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;5&lt;/span&gt; summary&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-5&quot;&gt;
&lt;p&gt;
今天的话题是由特朗普的一个错别词展开的，我们学习到 precede，preceding，precedent
和 unprecedented。我觉得这样结合时事学习新单词，一方面能记住历史，另一方面又加深对单词的记忆，真是一举两得。
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
</content>
 </entry>
 
 <entry>
   <title>单词本：通用语言</title>
   <link href="http://kimi.im/2016-12-06-english-lingua-franca"/>
   <updated>2016-12-06T00:00:00+00:00</updated>
   <id>http://kimi.im/english-lingua-franca</id>
   <content type="html">&lt;div id=&quot;outline-container-org6904340&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;org6904340&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;1&lt;/span&gt; 琐碎的前言&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-1&quot;&gt;
&lt;p&gt;
今天又收到同学们的留言，督促我赶紧发布更新。谢谢来自新加坡的 Mr. Z 同学提醒，离上次更新转眼又过去了 2 周了。
&lt;/p&gt;

&lt;p&gt;
前几天跟我的同事聊起来，都说年纪越来越大，一年过得越来越快。一周感觉就像过了一天，一年就像一两个月。深深的觉得“日月忽其不淹兮，春与秋其代序，汨余若将不及兮，恐年岁之不吾与”。
&lt;/p&gt;

&lt;p&gt;
不过，看到这两周公众号的订阅用户增长了 8 位，还是觉得挺开心的。
&lt;/p&gt;

&lt;a data-flickr-embed=&quot;true&quot;  href=&quot;https://www.flickr.com/photos/kimim-photo/31089026390/in/dateposted-public/&quot; title=&quot;公众号用户数&quot;&gt;&lt;img src=&quot;https://c7.staticflickr.com/6/5601/31089026390_0f5f635319_z.jpg&quot; width=&quot;640&quot; height=&quot;422&quot; alt=&quot;公众号用户数&quot;&gt;&lt;/a&gt;&lt;script async src=&quot;//embedr.flickr.com/assets/client-code.js&quot; charset=&quot;utf-8&quot;&gt;&lt;/script&gt;

&lt;p&gt;
不如就设定一个小目标：每增长 5 位订阅用户，就不论有多忙，披星戴月也要写一篇新文章。
&lt;/p&gt;

&lt;p&gt;
之前学习了不少蔬菜水果的单词，感觉有点腻烦了，今天换些不一样的。前几天看书，遇到这句话：
&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;
C is the lingua franca of programming, and you should be competent in making
heads and tails of it.
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;
意思是说，C 编程语言是编程语言中的通用语言，你必须对它非常了解。
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-org1b3ff25&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;org1b3ff25&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;2&lt;/span&gt; Lingua franca&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-2&quot;&gt;
&lt;p&gt;
wikipedia 是这么解释的&lt;sup&gt;&lt;a id=&quot;fnr.1&quot; class=&quot;footref&quot; href=&quot;#fn.1&quot;&gt;1&lt;/a&gt;&lt;/sup&gt;：
&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;
A lingua franca &lt;i&gt;ˌlɪŋɡwə ˈfræŋkə&lt;/i&gt; also known as a bridge language, common
language, trade language or vehicular language, is a language or dialect
systematically used to make communication possible between people who do not
share a native language or dialect, particularly when it is a third language
that is distinct from both native languages.
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;
lingua franca 又叫桥语言，共同语言，贸易语言，传输语言。总之是一种在不同母语人群之间可以沟通的语言。
&lt;/p&gt;

&lt;p&gt;
之所以说 C 语言是计算机编程语言的 lingua franca 是因为它是使用最广泛、最简洁的语言，同时很多其他语言，比如 Java，C++，C#，Python 都或多或少继承借用了 C 语言的一些语法。而且这些语言也是非常流行的。
&lt;/p&gt;

&lt;p&gt;
当今世界，最主要的 lingua franca 应该非英语莫属了。但是在人类历史上，欧洲和东亚的 lingua franca 分别是法语和文言文&lt;sup&gt;&lt;a id=&quot;fnr.2&quot; class=&quot;footref&quot; href=&quot;#fn.2&quot;&gt;2&lt;/a&gt;&lt;/sup&gt;：
&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;
The popularity of languages changes over time, and there are many lingua francas
that are of historical importance. These include French, which was the language
of European diplomacy from the 17th until the mid-20th century, and Classical
Chinese, which served as both the written lingua franca and the diplomatic
language in Far East Asia until the early 20th century. French and Chinese are
still significant lingua francas today.
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;
20 世纪前，蒙古，高丽，日本，琉球，越南国都曾以文言文作为通用书面语和外交语言。可惜慢慢的他们也不再学讲中国话了，大概一方面中国国力日渐衰弱，另外一方面中国开始了白话文改革了，周边国家也懒得学白话文了。总之，几百年前，蒙古、日本国王贵族都曾以会写汉字为荣的：
&lt;/p&gt;

&lt;img src=&quot;https://upload.wikimedia.org/wikipedia/commons/e/e2/LetterFromKhubilaiToJapan1266.jpg&quot;
width=&quot;640&quot; height=&quot;422&quot; alt=&quot;蒙古日本国王写的汉字&quot;&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgb9dd505&quot; class=&quot;outline-3&quot;&gt;
&lt;h3 id=&quot;orgb9dd505&quot;&gt;&lt;span class=&quot;section-number-3&quot;&gt;2.1&lt;/span&gt; Lingua&lt;/h3&gt;
&lt;div class=&quot;outline-text-3&quot; id=&quot;text-2-1&quot;&gt;
&lt;p&gt;
Lingua 其实在拉丁语里是舌头（tongue）的意思，引申过来就是语言的意思了。所以就有这些英语单词：
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;language：语言&lt;/li&gt;
&lt;li&gt;languageless：无语&lt;/li&gt;
&lt;li&gt;linguist：通晓数国语言的人；语言学家&lt;/li&gt;
&lt;li&gt;linguistics：语言学&lt;/li&gt;
&lt;li&gt;linguister：语言学家&lt;/li&gt;
&lt;li&gt;bilingualism：双语教学&lt;/li&gt;
&lt;li&gt;bilinguality：能说两种语言的。He is bilingual in an Asian language and
English.&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-org389b317&quot; class=&quot;outline-3&quot;&gt;
&lt;h3 id=&quot;org389b317&quot;&gt;&lt;span class=&quot;section-number-3&quot;&gt;2.2&lt;/span&gt; &lt;span class=&quot;todo TODO&quot;&gt;TODO&lt;/span&gt; : franca?&lt;/h3&gt;
&lt;div class=&quot;outline-text-3&quot; id=&quot;text-2-2&quot;&gt;
&lt;p&gt;
我猜应该是通用的意思，一时还没找到，下次找到了补上吧。
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-org3e984af&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;org3e984af&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;3&lt;/span&gt; make heads and tails of it&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-3&quot;&gt;
&lt;p&gt;
在本文最开始的例句里面，另外一个有趣的词组：make heads and tails of it:
&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;
C is the lingua franca of programming, and you should be competent in making
heads and tails of it.
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;
TheFreeDictionary 的解释是这样的&lt;sup&gt;&lt;a id=&quot;fnr.3&quot; class=&quot;footref&quot; href=&quot;#fn.3&quot;&gt;3&lt;/a&gt;&lt;/sup&gt;：to understand someone or something that someone
has said. (Usually with the negative.) 理解某人或者某人说的话，但是经常用在否定形式上，比如：
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;I can&apos;t make heads or tails of Fred. 我不理解 Fred 同学。&lt;/li&gt;
&lt;li&gt;I couldn&apos;t make heads or tails of the document. 我看不懂这份文件。&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
注意，如果是否定用法，and 要写成 or 哦。
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-org7859c91&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;org7859c91&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;4&lt;/span&gt; Summary&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-4&quot;&gt;
&lt;p&gt;
花一个小时，好好理解一句话，学会两个词组，其实也是一件挺愉快的事情的。下次遇到
lingua franca 就不用猜测是什么意思了。遇到不懂的人，不懂的文章，就可以说：Sorry,
I can&apos;t make heads or tails of it.
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;footnotes&quot;&gt;
&lt;h2 class=&quot;footnotes&quot;&gt;Footnotes: &lt;/h2&gt;
&lt;div id=&quot;text-footnotes&quot;&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.1&quot; class=&quot;footnum&quot; href=&quot;#fnr.1&quot;&gt;1&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;https://en.wikipedia.org/wiki/Lingua_franca&quot;&gt;https://en.wikipedia.org/wiki/Lingua_franca&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.2&quot; class=&quot;footnum&quot; href=&quot;#fnr.2&quot;&gt;2&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;https://en.wikipedia.org/wiki/List_of_lingua_francas&quot;&gt;https://en.wikipedia.org/wiki/List_of_lingua_francas&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.3&quot; class=&quot;footnum&quot; href=&quot;#fnr.3&quot;&gt;3&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;http://idioms.thefreedictionary.com/make+heads+or+tails+of&quot;&gt;http://idioms.thefreedictionary.com/make+heads+or+tails+of&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;


&lt;/div&gt;
&lt;/div&gt;
</content>
 </entry>
 
 <entry>
   <title>单词本：水果之浆果</title>
   <link href="http://kimi.im/2016-11-21-english-berry"/>
   <updated>2016-11-21T00:00:00+00:00</updated>
   <id>http://kimi.im/english-berry</id>
   <content type="html">&lt;div id=&quot;outline-container-orgb049bb5&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgb049bb5&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;1&lt;/span&gt; 琐碎的前言&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-1&quot;&gt;
&lt;p&gt;
天气冷了，真是越来越懒惰了，又是隔了好长时间才来更新。今天 Aira 同学给我留言说希望可以在单词旁边加上音标，于是触发了我要继续写一篇的念头。
&lt;/p&gt;

&lt;p&gt;
我记得之前有几篇里面的单词是加了音标的，比如：
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;&lt;a href=&quot;http://kimi.im/2016-09-21-english-spinach&quot;&gt;单词本：蔬菜之菠菜&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://kimi.im/2016-09-03-english-gourd&quot;&gt;单词本：蔬菜之瓜瓜&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
总之，要虚心接受大家的意见，以后附上单词的音标。
&lt;/p&gt;

&lt;p&gt;
另外，Aira 同学还说文章里面的链接都是失效的。原因是这样的，个人公众号是不能认证的，而未认证的公众号文章内的链接是不能直接跳转的，所以只能复制粘贴到浏览器的地址栏中访问。没办法，只能这样了，也许哪天订阅用户多了，腾讯会为我开放这个功能也说不定。
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgbdff2c4&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgbdff2c4&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;2&lt;/span&gt; berry&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-2&quot;&gt;
&lt;p&gt;
今天要学习的单词是 berry，这也是我最喜欢的水果之一。In everyday language, a
berry is a small, pulpy and often edible fruit.&lt;sup&gt;&lt;a id=&quot;fnr.1&quot; class=&quot;footref&quot; href=&quot;#fn.1&quot;&gt;1&lt;/a&gt;&lt;/sup&gt;
&lt;/p&gt;

&lt;p&gt;
berry 是那种软软的，捣碎了烂烂的小果子的统称。
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;We got a lot of sweet big berry this year. 我们今年收获了不少大而甜的浆果。&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
德语叫 die Beere[`be:rə]&lt;sup&gt;(de)&lt;/sup&gt;.
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;Die Beere hängt am Strauch.&lt;sup&gt;(de)&lt;/sup&gt; 小树丛上挂满浆果。&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-org893ea3b&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;org893ea3b&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;3&lt;/span&gt; berry color&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-3&quot;&gt;
&lt;p&gt;
大概是因为不少浆果是红红黑黑的，所以也用来形容皮肤黝黑，比如：
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;Those three sturdy children as brown as a berry. 那三个健壮结实的孩子，皮肤黝黑。&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-org8e77035&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;org8e77035&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;4&lt;/span&gt; 各种 berry&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-4&quot;&gt;
&lt;/div&gt;&lt;div id=&quot;outline-container-org1159609&quot; class=&quot;outline-3&quot;&gt;
&lt;h3 id=&quot;org1159609&quot;&gt;&lt;span class=&quot;section-number-3&quot;&gt;4.1&lt;/span&gt; blackberry&lt;/h3&gt;
&lt;div class=&quot;outline-text-3&quot; id=&quot;text-4-1&quot;&gt;
&lt;p&gt;
提到黑莓，不得不提奥巴马代言的 BBM&lt;sup&gt;&lt;a id=&quot;fnr.2&quot; class=&quot;footref&quot; href=&quot;#fn.2&quot;&gt;2&lt;/a&gt;&lt;/sup&gt;。从官网看，好像还没倒闭呢。可惜我从来没用过。不过，我倒是了解过 QNX&lt;sup&gt;&lt;a id=&quot;fnr.3&quot; class=&quot;footref&quot; href=&quot;#fn.3&quot;&gt;3&lt;/a&gt;&lt;/sup&gt; 操作系统，Blackberry 旗下的实时操作系统，据说性能很好的微内核实现，有机会值得深入学习一下。
&lt;/p&gt;

&lt;p&gt;
德语 die Brombeere[Brọmbeere]&lt;sup&gt;(de)&lt;/sup&gt;。
&lt;/p&gt;

&lt;p&gt;
法语黑莓叫 la mûre[myʀ]&lt;sup&gt;(fr)&lt;/sup&gt;，也作为形容词，形容成熟的。大概莓类说过成熟的时候都有些黑红黑红，所以黑莓也用来表示成熟：
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;Est-ce que les pastèques sont mûres?&lt;sup&gt;(fr)&lt;/sup&gt; 西瓜熟了吗？&lt;/li&gt;
&lt;li&gt;La poire est mûre.&lt;sup&gt;(fr)&lt;/sup&gt; 时机已经成熟。&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-org6775acc&quot; class=&quot;outline-3&quot;&gt;
&lt;h3 id=&quot;org6775acc&quot;&gt;&lt;span class=&quot;section-number-3&quot;&gt;4.2&lt;/span&gt; blueberry&lt;/h3&gt;
&lt;div class=&quot;outline-text-3&quot; id=&quot;text-4-2&quot;&gt;
&lt;p&gt;
蓝莓，再熟悉不过的水果了。味道酸酸甜甜，rich in antioxidants 富含抗氧化剂，可以清除体内杂质。
&lt;/p&gt;

&lt;p&gt;
德语 die Blaubeere&lt;sup&gt;(de)&lt;/sup&gt;，和英语组词方式一样，很好记。
&lt;/p&gt;

&lt;p&gt;
但是，法语的蓝莓叫 la myrtille[mirtij]&lt;sup&gt;(fr)&lt;/sup&gt;，这就有点麻烦了，英语
myrtil[ˈmɜ:tl] 是香桃木。
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;J&apos;ai fait une tarte aux myrtilles, tu en veux?&lt;sup&gt;(fr)&lt;/sup&gt; 我做了点蓝莓饼，要不要来一点？&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
我不知道为什么……
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orge39acf0&quot; class=&quot;outline-3&quot;&gt;
&lt;h3 id=&quot;orge39acf0&quot;&gt;&lt;span class=&quot;section-number-3&quot;&gt;4.3&lt;/span&gt; strawberry&lt;/h3&gt;
&lt;div class=&quot;outline-text-3&quot; id=&quot;text-4-3&quot;&gt;
&lt;p&gt;
草莓。
&lt;/p&gt;

&lt;p&gt;
德语 die Erdbeere[ertber]&lt;sup&gt;(de)&lt;/sup&gt;，不过这里 die Erde&lt;sup&gt;(de)&lt;/sup&gt; 不是草的意思，而是泥土、地球的意思。可能草莓长的比较小，贴着泥土，所以德国人管它们叫土莓。
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;Reife Erdbeere sieht rot aus.&lt;sup&gt;(de)&lt;/sup&gt; 成熟的草（土）莓看起来是红色的。&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
法语 la fraise[frɛz]&lt;sup&gt;(fr)&lt;/sup&gt;，法国人总是不太喜欢用合成词，增加记忆的麻烦！
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;Elle aime vraiment les fraises. 她真的很喜欢草莓。&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-org932b2cc&quot; class=&quot;outline-3&quot;&gt;
&lt;h3 id=&quot;org932b2cc&quot;&gt;&lt;span class=&quot;section-number-3&quot;&gt;4.4&lt;/span&gt; raspberry&lt;/h3&gt;
&lt;div class=&quot;outline-text-3&quot; id=&quot;text-4-4&quot;&gt;
&lt;p&gt;
树莓，木莓，覆盆子。
&lt;/p&gt;

&lt;p&gt;
RaspberryPi&lt;sup&gt;&lt;a id=&quot;fnr.4&quot; class=&quot;footref&quot; href=&quot;#fn.4&quot;&gt;4&lt;/a&gt;&lt;/sup&gt; 是开源的 mini PC，是嵌入式系统爱好者床前案头必备的玩具。
&lt;/p&gt;

&lt;p&gt;
另外顺便欣赏一下苏东坡的覆盆子贴：
&lt;/p&gt;

&lt;a data-flickr-embed=&quot;true&quot;  href=&quot;https://www.flickr.com/photos/kimim-photo/31118004676/in/dateposted-public/&quot; title=&quot;覆盆子贴&quot;&gt;&lt;img src=&quot;https://c5.staticflickr.com/6/5461/31118004676_29855df606_z.jpg&quot; width=&quot;601&quot; height=&quot;640&quot; alt=&quot;覆盆子贴&quot;&gt;&lt;/a&gt;&lt;script async src=&quot;//embedr.flickr.com/assets/client-code.js&quot; charset=&quot;utf-8&quot;&gt;&lt;/script&gt;

&lt;p&gt;
德语 die Himbeere[Hịmbeere]&lt;sup&gt;(de)&lt;/sup&gt;，据说英语 hindberry 也就是 raspberry。
&lt;/p&gt;

&lt;p&gt;
顺带学一学 rasp[rɑ:sp]：vt. 以粗锉打磨，粗刮; 发出摩擦的刺耳声; 伤（人感情），使焦急; 用急躁刺耳的声音说; n. 粗锉，木锉; [机] 锉机，锉磨而发出的刺耳声音; （心里的） 焦急，烦躁
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;&quot;Where&apos;ve you put it?&quot; he rasped. “你把它放在哪里了？”他尖声叫道。&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
法语 la framboise[fʀɑ̃bwaz]&lt;sup&gt;(fr)&lt;/sup&gt;。法语一如既往的不喜欢用合成词。不过和草莓的 la
fraise 有点神似，聊可帮助记忆吧。
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;Les framboise ressemblent aux fraises, mais ils sont plus petites.&lt;sup&gt;(fr)&lt;/sup&gt; 覆盆子和草莓有点相似，但是比草莓更小一些。&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;


&lt;div id=&quot;outline-container-orgff5f82f&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgff5f82f&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;5&lt;/span&gt; Summary&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-5&quot;&gt;
&lt;p&gt;
好了，今天的主题是各种莓 berry。黑莓，蓝莓，草莓，树莓。
&lt;/p&gt;

&lt;p&gt;
英语只要记住 berry 就很容易猜出这些莓：blackberry，blueberry，strawberry，
raspberry。
&lt;/p&gt;

&lt;p&gt;
德语也一样，记住了 beere，就很容易记住这些莓子：die Brombeere，die Blaubeere，
die Erdbeere，die Himbeere。而且都是阴性的。
&lt;/p&gt;

&lt;p&gt;
法语就麻烦一点了，他们很喜欢造新词：la mûre，la myrtille，la fraise，la
framboise。
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;footnotes&quot;&gt;
&lt;h2 class=&quot;footnotes&quot;&gt;Footnotes: &lt;/h2&gt;
&lt;div id=&quot;text-footnotes&quot;&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.1&quot; class=&quot;footnum&quot; href=&quot;#fnr.1&quot;&gt;1&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;https://en.wikipedia.org/wiki/Berry&quot;&gt;https://en.wikipedia.org/wiki/Berry&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.2&quot; class=&quot;footnum&quot; href=&quot;#fnr.2&quot;&gt;2&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;http://blackberry.com&quot;&gt;http://blackberry.com&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.3&quot; class=&quot;footnum&quot; href=&quot;#fnr.3&quot;&gt;3&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;http://www.qnx.com/&quot;&gt;http://www.qnx.com/&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.4&quot; class=&quot;footnum&quot; href=&quot;#fnr.4&quot;&gt;4&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;https://www.raspberrypi.org&quot;&gt;https://www.raspberrypi.org&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;


&lt;/div&gt;
&lt;/div&gt;
</content>
 </entry>
 
 <entry>
   <title>单词本：水果之橙子</title>
   <link href="http://kimi.im/2016-10-23-english-orange"/>
   <updated>2016-10-23T00:00:00+00:00</updated>
   <id>http://kimi.im/english-orange</id>
   <content type="html">&lt;div id=&quot;outline-container-orgheadline1&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgheadline1&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;1&lt;/span&gt; Orange&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-1&quot;&gt;
&lt;p&gt;
昨天“暗地有光”同学回复消息说，好久没看到我更新了，督促我快点更新。算来距离上次的推送已经有两周了，再不耕耘就要荒芜了。
&lt;/p&gt;

&lt;p&gt;
最近没有及时更新有这么些原因：
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;家里有些忙，杂事比较多&lt;/li&gt;
&lt;li&gt;写作工具升级，需要配置更新一些脚本插件&lt;/li&gt;
&lt;li&gt;天气也有些凉意，晚上睡得早，早上起得晚，学习的时间也越来越少&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
顺便截个图给大家看看，我是用 Emacs&lt;sup&gt;&lt;a id=&quot;fnr.1&quot; class=&quot;footref&quot; href=&quot;#fn.1&quot;&gt;1&lt;/a&gt;&lt;/sup&gt; + orgmode&lt;sup&gt;&lt;a id=&quot;fnr.2&quot; class=&quot;footref&quot; href=&quot;#fn.2&quot;&gt;2&lt;/a&gt;&lt;/sup&gt; 写文章的，Emacs 是编辑器之神，而 orgmode 则是文本文档编辑神器，不过 orgmode 只有在 Emacs 里才能用，据说很多人是为了 orgmode 而使用 Emacs。今后有空可以给大家专题介绍一下，先看下截图吧：
&lt;/p&gt;

&lt;p&gt;
TODO: add the picture later when flickr service is available
&lt;/p&gt;


&lt;p&gt;
言归正传，今天要学的单词是 Orange 橙子。
&lt;/p&gt;

&lt;p&gt;
像橙子这样稀疏平常的水果，德语法语英语里面拼法都是一样的，而且德语法语里都是阴性的名词：
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;Orange&lt;/li&gt;
&lt;li&gt;die Orange&lt;sup&gt;(de)&lt;/sup&gt;&lt;/li&gt;
&lt;li&gt;l(a)&apos;orange&lt;sup&gt;(fr)&lt;/sup&gt;&lt;/li&gt;

&lt;li&gt;The woman cut up the orange and share it out among the four children. 这个女人把桔子切成了几半分给4个孩子。&lt;/li&gt;
&lt;li&gt;Children shouldn&apos;t drink so much orange juice. 小孩子不好喝太多橙汁。&lt;/li&gt;
&lt;li&gt;J’ai envie de manger une orange.&lt;sup&gt;(fr)&lt;/sup&gt; 我想吃个橙子。&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;


&lt;div id=&quot;outline-container-orgheadline2&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgheadline2&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;2&lt;/span&gt; der Chinaapfel/die Apfelsine&lt;sup&gt;(de)&lt;/sup&gt;&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-2&quot;&gt;
&lt;p&gt;
从字面看是中国苹果，但是其实是 alternative Bezeichnung für die Apfelsine oder
Orange，甜橙或橙子的另一种称呼。
&lt;/p&gt;

&lt;p&gt;
原因是这样的：
&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;
Die seit dem 16. Jahrhundert in Europa bekannte, aus China stammende Frucht
nannte man Anfang des 18. Jahrhunderts im Niederdeutschen Apel de Sina und
Appelsina. Die verhochdeutschte Pluralform lautete Äpfelsina. Auch kamen die
Namen Apfel von Sina, Chinaapfel und Sineser Apfel vor. In der Zeit um 1700 war
Sina die gängige Bezeichnung von China. Ab 1750 dominierte die hochdeutsche Form
Apfelsine im nord- und mitteldeutschen Sprachraum, während in Süddeutschland der
Name Orange verwendet wurde.&lt;sup&gt;&lt;a id=&quot;fnr.3&quot; class=&quot;footref&quot; href=&quot;#fn.3&quot;&gt;3&lt;/a&gt;&lt;/sup&gt;
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;
大概在 16 世纪开始，欧洲就从中国进口橙子，那时候荷兰德语称之为 Apel de Sina，
Appelsina，到了德国就转变成 Apfel von Sina，Chinaapfel 以及 Sineser Apfel。后来在 1750 年代德国北部就一直称呼橙子为 Apfelsine 和 Chinaapfel 了。而德国南部可能受到法国影响，管橙子叫 Orange。
&lt;/p&gt;

&lt;p&gt;
不过据说瑞士是没有这个说法的：The word Apfelsine is not used in Switzerland.&lt;sup&gt;&lt;a id=&quot;fnr.4&quot; class=&quot;footref&quot; href=&quot;#fn.4&quot;&gt;4&lt;/a&gt;&lt;/sup&gt;
Beispiele:
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;Ich habe viele Apfelsine eingekauft.&lt;sup&gt;(de)&lt;/sup&gt; 我买了很多橙子。&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;


&lt;div id=&quot;outline-container-orgheadline3&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgheadline3&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;3&lt;/span&gt; Mandarin Orange&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-3&quot;&gt;
&lt;p&gt;
我们常吃的橘子叫做 Mandarin Orange：
&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;
The mandarin orange (Citrus reticulata; Chinese: 橘子, Pinyin júzi; Cantonese:
柑, kam or gam), also known as the mandarin, is a small citrus tree with fruit
resembling other oranges.&lt;sup&gt;&lt;a id=&quot;fnr.5&quot; class=&quot;footref&quot; href=&quot;#fn.5&quot;&gt;5&lt;/a&gt;&lt;/sup&gt;
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;
另外，我惊奇的发现，Mandarin 有如下几个意思：
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;n. 普通话&lt;/li&gt;
&lt;li&gt;n. （旧时）中国政府的高级官员&lt;/li&gt;
&lt;li&gt;n. 柑橘， A mandarin or a mandarin orange is a small orange whose skin comes
off easily. （橘子皮容易剥真是太形象的描述了）&lt;/li&gt;
&lt;li&gt;adj. 官僚的； 中国式服装的； 过分文雅的&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
一直以为 Mandarin 就是普通话，普通话就是 Mandarin，不曾想到，Mandarin 还有这些个意思，尤其是柑橘这层意思，有些出人意料之外。标准普通话听起来有柑橘的韵味？
&lt;/p&gt;

&lt;p&gt;
Example:
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;Canned mandarin oranges are prepared with the unique speciality of Hunan
province - Fu Rong mandarin oranges. 独具风味的糖水桔子罐头，主要是采用了湖南省的特产 &amp;#x2013; 芙蓉蜜柑所制成。&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgheadline4&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgheadline4&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;4&lt;/span&gt; Summary&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-4&quot;&gt;
&lt;p&gt;
今天的主题是橙子，调查后发现英法德橙子的拼写都是一样的。然后我们发现德国北部有些地方橙子叫做  der Chinaapfel/die Apfelsine&lt;sup&gt;(de)&lt;/sup&gt; 中国苹果，于是我们进一步了解了其中的渊源。
&lt;/p&gt;

&lt;p&gt;
另外，这次我们顺带还了解到，橘子叫 Mandarin orange，而 Mandarin 不仅仅是普通话的意思，还直接有橘子的意思。
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;footnotes&quot;&gt;
&lt;h2 class=&quot;footnotes&quot;&gt;Footnotes: &lt;/h2&gt;
&lt;div id=&quot;text-footnotes&quot;&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.1&quot; class=&quot;footnum&quot; href=&quot;#fnr.1&quot;&gt;1&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;https://www.gnu.org/software/emacs/&quot;&gt;https://www.gnu.org/software/emacs/&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.2&quot; class=&quot;footnum&quot; href=&quot;#fnr.2&quot;&gt;2&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;http://orgmode.org/&quot;&gt;http://orgmode.org/&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.3&quot; class=&quot;footnum&quot; href=&quot;#fnr.3&quot;&gt;3&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;https://de.wiktionary.org/wiki/Apfelsine&quot;&gt;https://de.wiktionary.org/wiki/Apfelsine&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.4&quot; class=&quot;footnum&quot; href=&quot;#fnr.4&quot;&gt;4&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;http://forum.wordreference.com/threads/apfelsine-vs-orange.1329938/&quot;&gt;http://forum.wordreference.com/threads/apfelsine-vs-orange.1329938/&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.5&quot; class=&quot;footnum&quot; href=&quot;#fnr.5&quot;&gt;5&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;https://en.wikipedia.org/wiki/Mandarin_orange&quot;&gt;https://en.wikipedia.org/wiki/Mandarin_orange&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;


&lt;/div&gt;
&lt;/div&gt;
</content>
 </entry>
 
 <entry>
   <title>单词本：水果之香蕉</title>
   <link href="http://kimi.im/2016-10-09-english-banana"/>
   <updated>2016-10-09T00:00:00+00:00</updated>
   <id>http://kimi.im/english-banana</id>
   <content type="html">&lt;div id=&quot;outline-container-orgheadline3&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgheadline3&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;1&lt;/span&gt; banana&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-1&quot;&gt;
&lt;p&gt;
香蕉 banana。
&lt;/p&gt;

&lt;p&gt;
在我读大学的时候，香蕉还是很便宜的，学校水果店里一元钱好几个香蕉可以买。最喜欢吃黄色的水果，像芒果啊，香蕉啊，橘子啊，菠萝啊之类的水果，都是我的最爱。所以，大学时候常常每天买很多黄色的水果吃。好怀念啊。
&lt;/p&gt;

&lt;p&gt;
为了更好的阅读本文，请响起背景音乐：&lt;a href=&quot;http://www.kuwo.cn/yinyue/5429060/&quot;&gt;http://www.kuwo.cn/yinyue/5429060/&lt;/a&gt;
&lt;/p&gt;

&lt;p class=&quot;verse&quot;&gt;
来来 我是一个菠菜&lt;br  /&gt;
菜菜菜菜菜菜菜菜菜菜菜菜菜菜菜菜&lt;br  /&gt;
来来 我是一片芒果&lt;br  /&gt;
果果果果果果果果果果果果果果果&lt;br  /&gt;
来来 我是一个竹笋&lt;br  /&gt;
笋笋笋笋笋笋笋笋笋笋笋笋笋笋笋笋&lt;br  /&gt;
来来 我是一快菠萝&lt;br  /&gt;
萝萝萝萝萝萝萝萝萝萝萝萝萝萝萝&lt;br  /&gt;
来来 我是一粒草莓&lt;br  /&gt;
莓莓莓莓莓莓莓莓莓莓莓莓莓莓莓莓&lt;br  /&gt;
来来 我是一只香蕉&lt;br  /&gt;
蕉蕉蕉蕉蕉蕉蕉蕉蕉蕉蕉蕉蕉蕉蕉&lt;br  /&gt;
来来 我是一个葡萄&lt;br  /&gt;
萄萄萄萄萄萄萄萄萄萄萄萄萄萄萄萄&lt;br  /&gt;
来来 我是一个蜜糖&lt;br  /&gt;
糖糖糖糖糖糖糖糖糖糖糖糖糖糖糖&lt;sup&gt;&lt;a id=&quot;fnr.1&quot; class=&quot;footref&quot; href=&quot;#fn.1&quot;&gt;1&lt;/a&gt;&lt;/sup&gt;&lt;br  /&gt;
&lt;/p&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgheadline1&quot; class=&quot;outline-3&quot;&gt;
&lt;h3 id=&quot;orgheadline1&quot;&gt;&lt;span class=&quot;section-number-3&quot;&gt;1.1&lt;/span&gt; banana color&lt;/h3&gt;
&lt;div class=&quot;outline-text-3&quot; id=&quot;text-1-1&quot;&gt;
&lt;p&gt;
香蕉黄。
&lt;/p&gt;

&lt;p&gt;
有的认为 banana color RGB 颜色编号为#FFE135&lt;sup&gt;&lt;a id=&quot;fnr.2&quot; class=&quot;footref&quot; href=&quot;#fn.2&quot;&gt;2&lt;/a&gt;&lt;/sup&gt;：
&lt;/p&gt;
&lt;h3 style=&quot;background-color: #FFE135; width: 80px;&quot;&gt;&amp;nbsp;&lt;/h3&gt;

&lt;p&gt;
也有的认为是 #E3CF57&lt;sup&gt;&lt;a id=&quot;fnr.3&quot; class=&quot;footref&quot; href=&quot;#fn.3&quot;&gt;3&lt;/a&gt;&lt;/sup&gt;
&lt;/p&gt;
&lt;h3 style=&quot;background-color: #E3CF57; width: 80px;&quot;&gt;&amp;nbsp;&lt;/h3&gt;

&lt;p&gt;
我比较觉得应该是第二种颜色。你觉得呢？
&lt;/p&gt;

&lt;p&gt;
另外还有个绿香蕉（Green Banana）色，RGB #B7BD6B&lt;sup&gt;&lt;a id=&quot;fnr.4&quot; class=&quot;footref&quot; href=&quot;#fn.4&quot;&gt;4&lt;/a&gt;&lt;/sup&gt;
&lt;/p&gt;
&lt;h3 style=&quot;background-color: #B7BD6B; width: 80px;&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgheadline2&quot; class=&quot;outline-3&quot;&gt;
&lt;h3 id=&quot;orgheadline2&quot;&gt;&lt;span class=&quot;section-number-3&quot;&gt;1.2&lt;/span&gt; 香蕉人&lt;/h3&gt;
&lt;div class=&quot;outline-text-3&quot; id=&quot;text-1-2&quot;&gt;
&lt;p&gt;
上次的文章&lt;a href=&quot;http://kimi.im/2016-10-03-english-apple&quot;&gt;October 3, 2016 » 单词本：水果之苹果&lt;/a&gt;中提到苹果人的时候也扯到香蕉人的说法：
&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;
A person of Asian descent, especially a Chinese American, who has assimilated
into Western culture or married a Caucasian (from the &quot;yellow&quot; outside and
&quot;white&quot; inside). Compare coconut ‎(“assimilated Hispanic or Black”) or Oreo
‎(“Black person who is &quot;black outside&quot; and &quot;white inside&quot;”).&lt;sup&gt;&lt;a id=&quot;fnr.5&quot; class=&quot;footref&quot; href=&quot;#fn.5&quot;&gt;5&lt;/a&gt;&lt;/sup&gt;
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;
所谓的香蕉人指的是美国亚裔，当然亚裔中最多的还是华人，用香蕉形象的比喻 yellow
outside and white inside。椰子和奥利奥则形容 black outside white inside。
&lt;/p&gt;

&lt;p&gt;
看来人们比较喜欢用色彩斑斓的水果形容人种文化差异。
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgheadline4&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgheadline4&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;2&lt;/span&gt; die Banane&lt;sup&gt;(de)&lt;/sup&gt;, la banane&lt;sup&gt;(fr)&lt;/sup&gt;&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-2&quot;&gt;
&lt;p&gt;
香蕉在法语和德语比较一致，都是阴性，拼写也都一样。
&lt;/p&gt;

&lt;p&gt;
法语口语里用香蕉形容别人幼稚愚蠢 personne ayant une pensée naïve ou idiote：
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;Tu veux ma photo, banane？ 笨香蕉，你看过我的照片？&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgheadline5&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgheadline5&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;3&lt;/span&gt; le bananier&lt;sup&gt;(fr)&lt;/sup&gt;&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-3&quot;&gt;
&lt;p&gt;
香蕉树
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgheadline6&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgheadline6&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;4&lt;/span&gt; je suis une banana&lt;sup&gt;(fr)&lt;/sup&gt;&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-4&quot;&gt;
&lt;p&gt;
我找到一首法语神曲，和古天乐《我是一个芒果》真是异曲同工：
&lt;/p&gt;

&lt;p class=&quot;verse&quot;&gt;
Je suis une banane,&lt;br  /&gt;
Je suis une banane,&lt;br  /&gt;
Je suis une banane,&lt;br  /&gt;
Regarde-moi bouger&lt;br  /&gt;
&lt;br  /&gt;
Ouais, ouais!&lt;sup&gt;&lt;a id=&quot;fnr.6&quot; class=&quot;footref&quot; href=&quot;#fn.6&quot;&gt;6&lt;/a&gt;&lt;/sup&gt;&lt;br  /&gt;
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgheadline7&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgheadline7&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;5&lt;/span&gt; 香蕉的食疗价值&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-5&quot;&gt;
&lt;p&gt;
根据百度百科的建议，秋季似乎是比较适合吃香蕉的季节。天干物燥的，心情烦闷，最适合吃香蕉了：
&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;
根据“热者寒之”的原理，最适合燥热人士享用。痔疮出血者、因燥热而致胎动不安者，都可生吃蕉肉。
&lt;/p&gt;

&lt;p&gt;
德国研究人员表示，用香蕉可治抑郁和情绪不安，因它能促进大脑分泌内啡化学物质。它能缓和紧张的情绪，提高工作效率，降低疲劳。&lt;sup&gt;&lt;a id=&quot;fnr.7&quot; class=&quot;footref&quot; href=&quot;#fn.7&quot;&gt;7&lt;/a&gt;&lt;/sup&gt;
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;
最近睡眠不太好，心情有些烦躁，看来该多吃点香蕉！
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;footnotes&quot;&gt;
&lt;h2 class=&quot;footnotes&quot;&gt;Footnotes: &lt;/h2&gt;
&lt;div id=&quot;text-footnotes&quot;&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.1&quot; class=&quot;footnum&quot; href=&quot;#fnr.1&quot;&gt;1&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;http://pu.onegreen.net/GeCi/HTML/22079.html&quot;&gt;http://pu.onegreen.net/GeCi/HTML/22079.html&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.2&quot; class=&quot;footnum&quot; href=&quot;#fnr.2&quot;&gt;2&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;http://colors.findthedata.com/l/557/Banana-Yellow&quot;&gt;http://colors.findthedata.com/l/557/Banana-Yellow&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.3&quot; class=&quot;footnum&quot; href=&quot;#fnr.3&quot;&gt;3&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;https://rgbcolorcode.com/color/banana&quot;&gt;https://rgbcolorcode.com/color/banana&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.4&quot; class=&quot;footnum&quot; href=&quot;#fnr.4&quot;&gt;4&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;https://www.pantone.com/color-finder/14-0434-TPX&quot;&gt;https://www.pantone.com/color-finder/14-0434-TPX&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.5&quot; class=&quot;footnum&quot; href=&quot;#fnr.5&quot;&gt;5&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;https://en.wiktionary.org/wiki/banana&quot;&gt;https://en.wiktionary.org/wiki/banana&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.6&quot; class=&quot;footnum&quot; href=&quot;#fnr.6&quot;&gt;6&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;http://lyricstranslate.com/en/im-banana-je-suis-une-banane.html&quot;&gt;http://lyricstranslate.com/en/im-banana-je-suis-une-banane.html&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.7&quot; class=&quot;footnum&quot; href=&quot;#fnr.7&quot;&gt;7&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;http://baike.baidu.com/subview/3907/14798168.htm&quot;&gt;http://baike.baidu.com/subview/3907/14798168.htm&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;


&lt;/div&gt;
&lt;/div&gt;
</content>
 </entry>
 
 <entry>
   <title>读书笔记：《断舍离 瑜伽篇》</title>
   <link href="http://kimi.im/2016-10-04-reading-notes-%E6%96%AD%E8%88%8D%E7%A6%BB-%E7%91%9C%E4%BC%BD%E7%AF%87"/>
   <updated>2016-10-04T00:00:00+00:00</updated>
   <id>http://kimi.im/reading-notes-断舍离-瑜伽篇</id>
   <content type="html">&lt;div id=&quot;outline-container-orgheadline1&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgheadline1&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;1&lt;/span&gt; 《断舍离 瑜伽篇》&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-1&quot;&gt;
&lt;p&gt;
本来是冲着最近流行的“断舍离”找来这本书的，后来发现不是关于断舍离整理方法的，而是《断舍离》作者山下英子和龙村修合著的关于倒是冲正弘（OKI MASAHIRO）的回忆录。本书记录了冲正弘老师在冲道瑜伽修行法中点点滴滴智慧。
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgheadline2&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgheadline2&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;2&lt;/span&gt; 冲瑜伽的真谛&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-2&quot;&gt;
&lt;p&gt;
冲瑜伽并非完全以健康为目的，而是作为自我支柱、可以让人医生不断收益、“让人坚强地、朝气蓬勃地活下去的人生真谛”。
&lt;/p&gt;

&lt;p&gt;
在信息爆炸的时代保持坚强的自我支柱，我们最需要的是无论何时都能依靠、都能新来的强大自我，具体来说，维护这样一个强大自我需要做到以下三点：
&lt;/p&gt;

&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;寻找既坚强又灵活的哲学&lt;/li&gt;
&lt;li&gt;选择它作为自我支柱&lt;/li&gt;
&lt;li&gt;以选定的自我支柱为基础，通过积累人生阅历，实现自我成长&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgheadline3&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgheadline3&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;3&lt;/span&gt; 生命即神&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-3&quot;&gt;
&lt;p&gt;
“生命本身就是神”是冲瑜伽哲学的核心。
&lt;/p&gt;

&lt;p&gt;
另外“部分即全体”，“初学者应从形式入门”等观点也是冲瑜伽哲学的核心。山下英子就是从这些观点中找到解决潜意识范围内的问题的线索，从而开发出断舍离理论。
&lt;/p&gt;

&lt;p&gt;
冲瑜伽的本质目的是让人们坚强地走过人生旅程，实现坚定不移的自我成长。
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgheadline4&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgheadline4&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;4&lt;/span&gt; 培养一颗坚定不移的心&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-4&quot;&gt;
&lt;p&gt;
瑜伽是一种获取坚定不移信念的行为。
&lt;/p&gt;

&lt;p&gt;
因为每个人都是独一无二的值得尊重的存在，因为人生是仅此一次的珍贵人生，所以我们才能体会今天这一天、当下这一瞬间是多么珍贵和重要。我们必须领悟”对我们来说最重要的是什么“，并在生活中重视它、付诸实践。
&lt;/p&gt;

&lt;p&gt;
对自己真正必要的事物其实比我们想象的要少的多。
&lt;/p&gt;

&lt;p&gt;
凡事都要冷静应对。
&lt;/p&gt;

&lt;p&gt;
身体的姿势出现问题，就意味着生命这一自我的神明收到了损伤，反过来，让人呼吸顺畅、神清气爽的姿势才能让生命充满喜悦。因此冲老师要求学员做出健康人的动作，不管学员是生病的还是严重关节炎患者。
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgheadline5&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgheadline5&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;5&lt;/span&gt; 生存的力量就是做选择是的决断力&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-5&quot;&gt;
&lt;p&gt;
询问自己，对事物做出决断的力量就是一种活下去的力量。决断力也是可以训练提高的。如果事事询问他人让人做决断的话，自己的决断力是毫无长进的。只有自己判断并做出行动，才能磨炼自己的生存能力。
&lt;/p&gt;

&lt;p&gt;
忽视自我判断，不以自我支柱为基础，而以他人为支柱进行判断，所以身心才会摇摆不定。彻底地询问自己，反复这样的体验，便不再为他人所左右。
&lt;/p&gt;

&lt;p&gt;
当人们注意到回答也可能千变万化的时候，就可以从自我的偏执，从不知不觉间形成的固定思维，从特定的价值观中解脱出来。
&lt;/p&gt;

&lt;p&gt;
一切都在变化。感受着变化的主体是自己的生命。意识到这样的可能性，我们的思维方式才会获得解脱。而且，偏执和固有思维越少，越不会为琐事而动摇。
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgheadline6&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgheadline6&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;6&lt;/span&gt; 雅俗参半人生路&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-6&quot;&gt;
&lt;p&gt;
印度有一种”四住期“理论。认为人生可以划分为四个时期，最初 20 年是学生期，学习将来如何在社会上立足。之后 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;/p&gt;

&lt;p&gt;
生死都是神的旨意，人无能为力，但是健康确实人们可以触及的范围，对于维持健康应该竭尽全力。
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgheadline7&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgheadline7&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;7&lt;/span&gt; 部分即全体，全体即部分&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-7&quot;&gt;
&lt;p&gt;
作为部分的人和全体的宇宙是关联的，部分的改变会影响全体，全体的变化也会影响部分。基于这个理论，山下英子得出个人的物品与其潜意识的关系。观察人们摆放某个物品的理由，或者是舍不得丢弃物品的理由，就会发现这几乎都是源自人际关系。
&lt;/p&gt;

&lt;p&gt;
只有直面人际关系，才能找到最符合自己的生存的真谛和价值观。
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgheadline8&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgheadline8&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;8&lt;/span&gt; 学习体验冥想&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-8&quot;&gt;
&lt;p&gt;
一天睡几个小时的问题，根据不同的情况是不一样的，重要的是适合自己的身体。
&lt;/p&gt;

&lt;p&gt;
通过”学习、体验、冥想“，边可以不拘细节，以更宏观的视野来审视事物。所学和所掌握的知识的用途也会进一步拓展。所谓冥想就是俯瞰的视角。
&lt;/p&gt;

&lt;p&gt;
练习瑜伽可以让身心保持平衡。
&lt;/p&gt;

&lt;p&gt;
为了真正得到放松，在这之前需要让身体彻底紧张。
&lt;/p&gt;

&lt;p&gt;
事物在举杯阴阳两面时才能取得平衡，并且阴阳之间存在调和的关系。
&lt;/p&gt;

&lt;p&gt;
日本从古时候就有”八百万神明庇护“的俗语。日本人认为水也是神圣的，并且极力保持水的清洁。饮用干净的税，心中会涌起感激的心情，浪费水或者将污水若无其事的排向大海则被认为是羞耻的。
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgheadline9&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgheadline9&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;9&lt;/span&gt; 正确审视&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-9&quot;&gt;
&lt;p&gt;
“别轻信，别怀疑，只需亲身体验”
&lt;/p&gt;

&lt;p&gt;
是否能正确审视事物，为了确认这一点，首先要逐一验证自己手中的信息。将自己手中的信息的层面明确的分开，这是正确审视的第一步。哪些是单纯的信息，哪些是知识，哪些是智慧。
&lt;/p&gt;

&lt;p&gt;
“别自缚，别拘泥，别体谅”
&lt;/p&gt;

&lt;p&gt;
不能彻底领悟和把握普遍性的真理，我们的心灵就无法得到真正的平静。
&lt;/p&gt;

&lt;p&gt;
不丹人内心极其平静的。
&lt;/p&gt;

&lt;p&gt;
明白自己的灵魂到底在追求什么，到底喜好什么，如果能认为某个工作是自己的天职，那么他就能够专注于这份工作，而且专注于工作对他来说也是一件愉快的事情。
&lt;/p&gt;

&lt;p&gt;
感到厌恶是改变自我的好机会。假设自己对某个事物怀有厌恶感。这时只要观察自己的内心，就能发现这样的厌恶感其实来源于自己的某个价值观。究竟为什么会产生厌恶感？这是因为他人的言行或外界和自己的价值观不一致。也就是说厌恶感不是外界的问题，而是内心的问题，一切都是源自自己的感觉。
&lt;/p&gt;

&lt;p&gt;
感到厌恶的时候坦然接受，将它视为重新审视自己价值观的契机，并通过冥想回顾过去就能得到新的领悟。
&lt;/p&gt;

&lt;p&gt;
自己周围所发生的一切，其实都是自己选择的结果。承担责任做出新的选择，以及不承担责任而重复同样的事态，两种可能都取决于自己。
&lt;/p&gt;

&lt;p&gt;
真正的为人着想，就不应该随意踏入他人做决断的范围内，为了他人能够按照自我的意志做出决断就应当保持一定的距离。
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgheadline10&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgheadline10&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;10&lt;/span&gt; 鼓起勇气&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-10&quot;&gt;
&lt;p&gt;
人要从既定事实中好好吸取经验，增强自己的实力，凡事都要意志埋头苦干，奋勇前进。
&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 个过程。最初的阶段叫做”Yama（禁戒、禁止的意思）“和“Niyama
（劝诫、积极行事的意思）”。禁止做某事和积极行事，只有当两者共存的时候才能获得平衡。
&lt;/p&gt;

&lt;p&gt;
让身体处于最佳状态，只在最佳状态的时候工作，如果感觉疲劳就立刻结束工作。
&lt;/p&gt;

&lt;p&gt;
人们应该积极的发散能量，并只接纳必需的能量。近年来罹患抑郁症的人非常多，其中的一个原因就在于没有顺畅地发泄能量。在日常生活中拼命工作、发散能量的人，原本是不可能患上抑郁症的。
&lt;/p&gt;

&lt;p&gt;
看清自我是一件很恐怖的事。但是如果真能看清，心里就会轻松不少。因为没有必要对自己撒谎。我并不是那么优秀，也不是那么差劲，我也不希望给别人那么优秀或者那么差劲的印象，勇于接受真实的自我，才能保持这样坦然的态度。
&lt;/p&gt;

&lt;p&gt;
改变外界和接受改变的勇气，最终都将拯救自己的生命。
&lt;/p&gt;

&lt;p&gt;
困扰我们的问题，是源自过剩还是源自不足？对于这个问题，我想大多数人的原因都是能量过剩。人际关系过剩和信息过剩等都体现在周围物品的堆积中。过剩本来就已经是严重的问题，如果还多买几个箱子来收纳物品，那真的能够解决问题吗？
&lt;/p&gt;

&lt;p&gt;
冲瑜伽修行的原则是别勉强，别浪费，坚持下去。而哲学原则是别轻信，别怀疑，只需亲身体验。
&lt;/p&gt;

&lt;p&gt;
印度瑜伽修行分为八个阶段：Yama（禁戒），Niyama（劝诫），Asana（动禅），
Puranayama（调气），Puratyahara（制感），Dharana（凝念），Dhyana（静虑），
Samadhi（三昧）。Samadhi 指石英社会生活。冲瑜伽增加了 Buddi（佛启）和
Purasado（法悦）。
&lt;/p&gt;

&lt;p&gt;
冲老师提倡将神的喜悦、自我喜悦和社会的喜悦融为一体。
&lt;/p&gt;

&lt;p&gt;
不管学到了多么高深的知识，如果不能再生活中灵活运用，那就只是一纸空谈。
&lt;/p&gt;

&lt;p&gt;
现在的父母经常剥夺孩子的体验。“我很担心你”这句话的潜台词其实是“你要是一个人的话，就什么也干不了”或者是“我不信任你”。“我是为了你好”这句话的潜台词是“我是为了我自己”。
&lt;/p&gt;

&lt;p&gt;
充分散发能量后感到的疲劳，以及由于能量没能彻底发散而感到的疲劳，两者是完全不同的。
&lt;/p&gt;

&lt;p&gt;
无视应该感恩的对象，无视应该感应的现象，这些都是麻痹。心一旦麻痹，就和死去没有区别。
&lt;/p&gt;

&lt;p&gt;
丹田最大的功效是让人们的精神保持平稳。不论何时都能有意识地保持冷静，做出正确的判断。
&lt;/p&gt;

&lt;p&gt;
冲瑜伽所有的训练都有一个共同的目的：在任何场合都能瞬间找回自己的意识，冷静地采取最佳的应对措施。
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
</content>
 </entry>
 
 <entry>
   <title>单词本：水果之苹果</title>
   <link href="http://kimi.im/2016-10-03-english-apple"/>
   <updated>2016-10-03T00:00:00+00:00</updated>
   <id>http://kimi.im/english-apple</id>
   <content type="html">&lt;div id=&quot;outline-container-orgheadline1&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgheadline1&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;1&lt;/span&gt; apple&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-1&quot;&gt;
&lt;p&gt;
苹果是最最常见的水果了。
&lt;/p&gt;

&lt;p&gt;
这里有 50 种苹果的吃法 &lt;sup&gt;&lt;a id=&quot;fnr.1&quot; class=&quot;footref&quot; href=&quot;#fn.1&quot;&gt;1&lt;/a&gt;&lt;/sup&gt;
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;Apple Pie Coconut Ice Cream&lt;/li&gt;
&lt;li&gt;Apple Pie Dessert Pizza&lt;/li&gt;
&lt;li&gt;Apple Spice Dump Cake&lt;/li&gt;
&lt;li&gt;Apple Bundt Cake with Praline Frosting&lt;/li&gt;
&lt;li&gt;&amp;#x2026;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
德语 der Apfel&lt;sup&gt;(de)&lt;/sup&gt;，法语 la pomme&lt;sup&gt;(fr)&lt;/sup&gt;。
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgheadline2&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgheadline2&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;2&lt;/span&gt; Apple Inc.&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-2&quot;&gt;
&lt;p&gt;
由于 iPhone 的流行，苹果作为手机的知名度，已经超越作为水果的品种了。
&lt;/p&gt;

&lt;p&gt;
苹果公司最早的 logo 是 1976 年 4 月 1 日设计的，当时用的主题是牛顿坐在苹果树下，等待着一个苹果掉落。
&lt;/p&gt;

&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;Apple&apos;s first logo, designed by Ron Wayne, depicts Sir Isaac Newton sitting
under an apple tree.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
但是很快，就更改了设计，选定了咬了一口的彩虹苹果，直到 1998 年换成黑色 logo。然而咬了一口的苹果很容易让人想到计算机史上一位伟大的科学家图灵自杀的方式，他在苹果上涂上氰化物，咬了一口自杀。不过苹果公司澄清了这个猜想是不对的。
&lt;/p&gt;

&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;On 8 June 1954, Turing&apos;s housekeeper found him dead. He had died the previous
day. A post-mortem examination established that the cause of death was cyanide
poisoning. When his body was discovered, an apple lay half-eaten beside his
bed, and although the &lt;i&gt;apple&lt;/i&gt; was not tested for cyanide, it was speculated
that this was the means by which a fatal dose was consumed.&lt;sup&gt;&lt;a id=&quot;fnr.2&quot; class=&quot;footref&quot; href=&quot;#fn.2&quot;&gt;2&lt;/a&gt;&lt;/sup&gt; But both
Janoff and Apple deny any homage to Turing in the design of the logo.&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgheadline3&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgheadline3&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;3&lt;/span&gt; forbiden fruit&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-3&quot;&gt;
&lt;p&gt;
苹果的另一个比较有名的典故是伊甸园里发生的事情，夏娃受了蛇的诱惑吃了知识树上的红苹果。
&lt;/p&gt;

&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;Woman ate the apple, and discovered sex, and lost all shame, and lift up her
fig—leaf, and she must suffer the pains of hell. Monthly.&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgheadline4&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgheadline4&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;4&lt;/span&gt; white on the inside and red on the outside&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-4&quot;&gt;
&lt;p&gt;
不少人可能知道香蕉人指的是海外华人移民的第二代、第三代子女。他们虽然也是黑发黄皮，但不识中文，说一口地道的美国英语。他们自小就受美国文化、美国教育的熏陶，其思维方式、价值观也是完全美国化的。他们“黄皮其外、白瓤其内”，所以叫香蕉人。
&lt;/p&gt;

&lt;p&gt;
而苹果人可能就不太熟悉了，苹果人指的是那些皮肤红色，但是自小受美国文化教育的人：
&lt;/p&gt;

&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;The presenter, close to tears, told the audience that she&apos;s really an apple —
white on the inside and red on the outside—Native American.&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgheadline5&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgheadline5&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;5&lt;/span&gt; Apfel&lt;sup&gt;(de)&lt;/sup&gt;&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-5&quot;&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;Das ist ein fauler Apfel.&lt;sup&gt;(de)&lt;/sup&gt; 此乃烂苹果也。&lt;/li&gt;
&lt;li&gt;Der Apfel fällt nicht weit vom Stamm.&lt;sup&gt;(de)&lt;/sup&gt; 苹果必落于果树不远处。有其父必有其子，老鼠的儿子会打洞。&lt;/li&gt;
&lt;li&gt;Etwas für einen Apfel und ein Ei kaufen.&lt;sup&gt;(de)&lt;/sup&gt; When Germans say they bought
something for an apple and an egg, they tell you that they got something for
little money or that they made a bargain.&lt;sup&gt;&lt;a id=&quot;fnr.3&quot; class=&quot;footref&quot; href=&quot;#fn.3&quot;&gt;3&lt;/a&gt;&lt;/sup&gt; 买某样东西花了一个苹果和一个鸡蛋，表示这个东西很便宜，或者很划算。大概在德国苹果鸡蛋是比较不值钱的东西。不过我们天朝的苹果现在都要几十块一个了。不知他们的如何。&lt;/li&gt;
&lt;li&gt;Der Laden lief unter Wolfgang auch deshalb finanziell ganz gut, weil er die
Künstler dazu brachte, in Bayreuth für &apos;n Appel und &apos;n Ei zu arbeiten.&lt;sup&gt;&lt;a id=&quot;fnr.4&quot; class=&quot;footref&quot; href=&quot;#fn.4&quot;&gt;4&lt;/a&gt;&lt;/sup&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
另外，德语中 Apfel 的复数形式 Äpfel 在诗歌中还用来形容 weblichen Brüste&lt;sup&gt;(de)&lt;/sup&gt;，非礼勿视哦。
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgheadline6&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgheadline6&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;6&lt;/span&gt; Pomme&lt;sup&gt;(fr)&lt;/sup&gt;&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-6&quot;&gt;
&lt;p&gt;
不得不提一下，法语里土豆叫 la pomme de terre&lt;sup&gt;(fr)&lt;/sup&gt; 泥土中的苹果。大概因为有些土豆是圆圆的，形状像苹果。
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;footnotes&quot;&gt;
&lt;h2 class=&quot;footnotes&quot;&gt;Footnotes: &lt;/h2&gt;
&lt;div id=&quot;text-footnotes&quot;&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.1&quot; class=&quot;footnum&quot; href=&quot;#fnr.1&quot;&gt;1&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;http://thetiptoefairy.com/2016/09/50-apple-recipes-more/&quot;&gt;http://thetiptoefairy.com/2016/09/50-apple-recipes-more/&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.2&quot; class=&quot;footnum&quot; href=&quot;#fnr.2&quot;&gt;2&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;https://en.wikipedia.org/wiki/Alan_Turing#Death&quot;&gt;https://en.wikipedia.org/wiki/Alan_Turing#Death&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.3&quot; class=&quot;footnum&quot; href=&quot;#fnr.3&quot;&gt;3&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;http://deutschhappen.com/german-expressions-etwas-fur-einen-apfel-und-ein-ei-kaufen&quot;&gt;http://deutschhappen.com/german-expressions-etwas-fur-einen-apfel-und-ein-ei-kaufen&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.4&quot; class=&quot;footnum&quot; href=&quot;#fnr.4&quot;&gt;4&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;http://www.phraseo.de/phrase/fuer-einen-apfel-und-ein-ei/&quot;&gt;http://www.phraseo.de/phrase/fuer-einen-apfel-und-ein-ei/&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;


&lt;/div&gt;
&lt;/div&gt;
</content>
 </entry>
 
 <entry>
   <title>单词本：蔬菜之菠菜</title>
   <link href="http://kimi.im/2016-09-21-english-spinach"/>
   <updated>2016-09-21T00:00:00+00:00</updated>
   <id>http://kimi.im/english-spinach</id>
   <content type="html">&lt;div id=&quot;outline-container-orgheadline3&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgheadline3&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;1&lt;/span&gt; Spinach&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-1&quot;&gt;
&lt;p&gt;
大概 70、80 后的大叔大婶们的集体记忆中都认为对吃菠菜长力气。那是因为在我们的童年，有一部很有名的动画片，叫做《大力水手》，水手波派（Popeye the Sailor&lt;sup&gt;&lt;a id=&quot;fnr.1&quot; class=&quot;footref&quot; href=&quot;#fn.1&quot;&gt;1&lt;/a&gt;&lt;/sup&gt;），和女友奥利佛开心的生活在一起。波派和奥利佛的幸福生活引起了坏蛋的布鲁托的嫉妒，他千方百计要将奥利佛抢走。于是，每一集中布鲁托总是想尽办法来抢奥利佛，每每在他即将得手的时候，波派总能得到他的救命符——菠菜(spinach)。只要吃了菠菜，波派就能变得力大无穷，布鲁托的亦会随之被无敌的波派制服！&lt;sup&gt;&lt;a id=&quot;fnr.2&quot; class=&quot;footref&quot; href=&quot;#fn.2&quot;&gt;2&lt;/a&gt;&lt;/sup&gt;
&lt;/p&gt;

&lt;p&gt;
《大力水手》之所以拿菠菜作为救命稻草，可能是因为菠菜的营养价值比较高。菠菜有“营养模范生”之称，它富含类胡萝卜素、维生素C、维生素K、矿物质（钙质、铁质等）、辅酶
Q10 等多种营养素。
&lt;/p&gt;

&lt;p&gt;
菠菜在英语中写作 spinach[ˈspɪnɪdʒ, ˈspɪnɪtʃ]，据说是来自古法语 espinache&lt;sup&gt;(old
fr)&lt;/sup&gt;，而古法语则从波斯引入 aspānāḵ&lt;sup&gt;(Persian)&lt;/sup&gt;。而现在的法语则写成
l(e)&apos;épinard[epinaʀ]&lt;sup&gt;(fr)&lt;/sup&gt;，德语也长得差不多 der Spinat[Spinat]&lt;sup&gt;(de)&lt;/sup&gt;，估计都是从波斯传入。
&lt;/p&gt;

&lt;p&gt;
菠菜的历史源头可以追溯到 2000 年前亚洲西部的波斯（今伊朗），并经北非，由摩尔人传到西欧西班牙等国。L&apos;épinard est originaire de Perse. Il a été introduit en
France au début du XII siècle, puis a été popularisé par Catherine de Médicis à
la Renaissance. 菠菜大概在公元 12 世纪传入法国，并在凯瑟琳皇后时期流行开来。
&lt;/p&gt;

&lt;p&gt;
另外，《唐会要》上明确记载：菠菜种子是唐太宗时从尼泊尔作为贡品传入中国的。
&lt;/p&gt;

&lt;p&gt;
我们再来看一看中文里的菠菜，其实有一半是音译，“菠”不就是 aspānāḵ 中 “pānā” 么。
&lt;/p&gt;

&lt;p&gt;
终上所述，菠菜来自波斯伊朗，中英法德里的菠菜基本上都音译自波斯语 aspānāḵ。
&lt;/p&gt;

&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;Eating &lt;i&gt;spinach&lt;/i&gt; is supposed to make you strong.&lt;sup&gt;(en)&lt;/sup&gt; 据说吃菠菜变强壮。估计是从大力水手那里听说的。&lt;/li&gt;
&lt;li&gt;Les &lt;i&gt;épinards&lt;/i&gt; contiennent du fer.&lt;sup&gt;(fr)&lt;/sup&gt; 菠菜含有铁质。似乎红色的物质都是含铁的，比如鲜血。&lt;/li&gt;
&lt;li&gt;Kinder essen nicht gern &lt;i&gt;Spinat&lt;/i&gt;.&lt;sup&gt;(de)&lt;/sup&gt; 孩子们不喜欢菠菜。通常营养好的东西口感都不怎么样。这个矛盾怎么破？&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgheadline1&quot; class=&quot;outline-3&quot;&gt;
&lt;h3 id=&quot;orgheadline1&quot;&gt;&lt;span class=&quot;section-number-3&quot;&gt;1.1&lt;/span&gt; mettre du beurre dans les épinards&lt;/h3&gt;
&lt;div class=&quot;outline-text-3&quot; id=&quot;text-1-1&quot;&gt;
&lt;p&gt;
往菠菜里加一点黄油 &amp;#x2013;&amp;gt; （通过加班等）增加收入，改善物质条件或生活条件。挺奇怪的一种说法。你知道为什么吗？
&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;
Le beurre est souvent associé à la richesse (&quot;Faire son beurre&quot;, par exemple, ou
bien &quot;avoir le cul dans le beurre&quot; chez nos amis Wallons). Probablement parce
que c&apos;est un aliment riche (en calories et lipides) qui fut, en certaines
périodes troublées, réservé aux riches ou aux champions du marché noir.
&lt;/p&gt;

&lt;p&gt;
La métaphore de cette expression est parfaitement compréhensible : les épinards
sans beurre, c&apos;est diététique mais nettement moins bon pour nos palais actuels
qu&apos;avec du beurre ou de la crème.  Donc pour améliorer le goût de ses épinards
(ses conditions de vie) mieux vaut y ajouter une bonne dose de beurre
(d&apos;argent).&lt;sup&gt;&lt;a id=&quot;fnr.3&quot; class=&quot;footref&quot; href=&quot;#fn.3&quot;&gt;3&lt;/a&gt;&lt;/sup&gt;
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;
原来黄油这种高热量的食物被认为是有钱人享受的，所以在菠菜（平凡生活）中添加一些黄油（钱）就能改善菠菜的口味。
&lt;/p&gt;

&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;Les actives d&apos;aujourd&apos;hui, en revanche, ne se contentent plus de mettre du
beurre dans les épinards.&lt;sup&gt;&lt;a id=&quot;fnr.4&quot; class=&quot;footref&quot; href=&quot;#fn.4&quot;&gt;4&lt;/a&gt;&lt;/sup&gt; 相反的，如今的收入（？）根本不够改善生活啊。en
revanche&lt;sup&gt;(fr)&lt;/sup&gt; 相反地、作为报答；se contenter&lt;sup&gt;(fr)&lt;/sup&gt; 凑合。&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgheadline2&quot; class=&quot;outline-3&quot;&gt;
&lt;h3 id=&quot;orgheadline2&quot;&gt;&lt;span class=&quot;section-number-3&quot;&gt;1.2&lt;/span&gt; to sweeten the pot&lt;/h3&gt;
&lt;div class=&quot;outline-text-3&quot; id=&quot;text-1-2&quot;&gt;
&lt;p&gt;
英语里类似的成语是往锅里加点糖：
&lt;/p&gt;

&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;He sweetened the pot since there were no takers in the office pool.&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgheadline4&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgheadline4&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;2&lt;/span&gt; recettes d&apos;épinards&lt;sup&gt;(fr)&lt;/sup&gt;&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-2&quot;&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;Spinat mit Reisnudeln&lt;sup&gt;(de)&lt;/sup&gt; 菠菜粉丝&lt;/li&gt;
&lt;li&gt;Spinat mit Ei&lt;sup&gt;(de)&lt;/sup&gt; 菠菜炒蛋&lt;/li&gt;
&lt;li&gt;Spinat mit Knoblauch&lt;sup&gt;(de)&lt;/sup&gt; 蒜蓉菠菜&lt;/li&gt;
&lt;li&gt;quiches aux épinards&lt;sup&gt;(fr)&lt;/sup&gt; 法式菠菜奶酪咸派&lt;sup&gt;&lt;a id=&quot;fnr.5&quot; class=&quot;footref&quot; href=&quot;#fn.5&quot;&gt;5&lt;/a&gt;&lt;/sup&gt;&lt;/li&gt;
&lt;li&gt;Épinards à la crème&lt;sup&gt;(fr)&lt;/sup&gt; 法式奶油菠菜&lt;sup&gt;&lt;a id=&quot;fnr.6&quot; class=&quot;footref&quot; href=&quot;#fn.6&quot;&gt;6&lt;/a&gt;&lt;/sup&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgheadline5&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgheadline5&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;3&lt;/span&gt; Summary&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-3&quot;&gt;
&lt;p&gt;
本文的主题是菠菜，由菠菜想到70、80后的集体记忆《大力水手》。并发现，菠菜源自波斯，菠菜的名字也就自然源自波斯语：
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;aspānāḵ&lt;sup&gt;(Persian)&lt;/sup&gt;&lt;/li&gt;
&lt;li&gt;spinach&lt;sup&gt;(en)&lt;/sup&gt;&lt;/li&gt;
&lt;li&gt;l&apos;épinard&lt;sup&gt;(fr)&lt;/sup&gt;&lt;/li&gt;
&lt;li&gt;der Spinat&lt;sup&gt;(de)&lt;/sup&gt;&lt;/li&gt;
&lt;li&gt;菠菜&lt;sup&gt;(zh)&lt;/sup&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
有趣的是法国人把赚外快补贴家用叫做菠菜加点黄油 mettre du beurre dans les
épinards&lt;sup&gt;(fr)&lt;/sup&gt;。希望《单词本》系列文章的发展能为我的菠菜增加点黄油，lol，烦请帮忙转发推广下。
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;footnotes&quot;&gt;
&lt;h2 class=&quot;footnotes&quot;&gt;Footnotes: &lt;/h2&gt;
&lt;div id=&quot;text-footnotes&quot;&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.1&quot; class=&quot;footnum&quot; href=&quot;#fnr.1&quot;&gt;1&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;https://en.wikipedia.org/wiki/Popeye&quot;&gt;https://en.wikipedia.org/wiki/Popeye&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.2&quot; class=&quot;footnum&quot; href=&quot;#fnr.2&quot;&gt;2&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;http://baike.baidu.com/link?url=U8pn7XWR7bysZxG3sshZYnbiaYSsIkB7OwuVWXMMtIqeI52qnfwLEducb57Avd7KmjEBP1XwBsRu-_iFvUN7R0WFWy5MKwzK6o5Nc3PZj-a&quot;&gt;http://baike.baidu.com/link?url=U8pn7XWR7bysZxG3sshZYnbiaYSsIkB7OwuVWXMMtIqeI52qnfwLEducb57Avd7KmjEBP1XwBsRu-_iFvUN7R0WFWy5MKwzK6o5Nc3PZj-a&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.3&quot; class=&quot;footnum&quot; href=&quot;#fnr.3&quot;&gt;3&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;https://answers.yahoo.com/question/index?qid=20070223084225AAd0WPu&quot;&gt;https://answers.yahoo.com/question/index?qid=20070223084225AAd0WPu&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.4&quot; class=&quot;footnum&quot; href=&quot;#fnr.4&quot;&gt;4&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;http://www.collinsdictionary.com/dictionary/french-english/mettre-du-beurre-dans-les-%C3%A9pinards&quot;&gt;http://www.collinsdictionary.com/dictionary/french-english/mettre-du-beurre-dans-les-%C3%A9pinards&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.5&quot; class=&quot;footnum&quot; href=&quot;#fnr.5&quot;&gt;5&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;http://www.xiachufang.com/recipe/100625049/&quot;&gt;http://www.xiachufang.com/recipe/100625049/&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.6&quot; class=&quot;footnum&quot; href=&quot;#fnr.6&quot;&gt;6&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;http://www.cuisine-libre.fr/epinards-a-la-creme&quot;&gt;http://www.cuisine-libre.fr/epinards-a-la-creme&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;


&lt;/div&gt;
&lt;/div&gt;
</content>
 </entry>
 
 <entry>
   <title>Solution to python error [WinError 5] Access is denied</title>
   <link href="http://kimi.im/2016-09-19-python-WinError5-access-is-denied"/>
   <updated>2016-09-19T00:00:00+00:00</updated>
   <id>http://kimi.im/python-WinError5-access-is-denied</id>
   <content type="html">&lt;p&gt;
Today I executed a python script to load an DLL file and come across an error:
[WinError 5] Access is denied. Finnally, I found the reason, it is because the
permission of DLL file is not correct, the original permision is group read,
write and executable. So I should change the permission to 0x777:
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;

&lt;pre class=&quot;src src-sh&quot;&gt;drwxrwxr-x+ 1 KIMIM Domain Users    0 Sep 18 10:13 ./
drwxrwxr-x+ 1 KIMIM Domain Users    0 Sep 19 09:19 ../
-rwx---rwx+ 1 KIMIM Domain Users 201K Sep 18 10:13 kimim.dll*
-------rwx+ 1 KIMIM Domain Users  182 Sep 18 10:13 kimim.ini*
kma@milkyway /cygdrive/c/lib
$ chmod +777 *
kma@milkyway /cygdrive/c/lib
$ ls -al
total 209K
drwxrwxr-x+ 1 KIMIM Domain Users    0 Sep 18 10:13 ./
drwxrwxr-x+ 1 KIMIM Domain Users    0 Sep 19 09:19 ../
-rwxrwxrwx+ 1 KIMIM Domain Users 201K Sep 18 10:13 kimim.dll*
-rwxrwxrwx+ 1 KIMIM Domain Users  182 Sep 18 10:13 kimim.ini*
&lt;/pre&gt;
&lt;/div&gt;
</content>
 </entry>
 
 <entry>
   <title>单词本：蔬菜之莴笋</title>
   <link href="http://kimi.im/2016-09-19-english-celtuce"/>
   <updated>2016-09-19T00:00:00+00:00</updated>
   <id>http://kimi.im/english-celtuce</id>
   <content type="html">&lt;div id=&quot;outline-container-orgheadline1&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgheadline1&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;1&lt;/span&gt; celtuce&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-1&quot;&gt;
&lt;p&gt;
莴笋，又叫莴苣菜、千金菜、莴菜、蕂菜、藤菜&lt;sup&gt;&lt;a id=&quot;fnr.1&quot; class=&quot;footref&quot; href=&quot;#fn.1&quot;&gt;1&lt;/a&gt;&lt;/sup&gt;；是中国特有的一种蔬菜。莴笋的叶子单独吃的时候我们管它叫生菜，而它的茎我们称之为莴笋或者莴苣。
&lt;/p&gt;

&lt;p&gt;
celtuce[ˈseltəs] 是莴笋的茎的名字，哈芬顿邮报有一篇文章专门介绍莴苣《What The
Hell Is Celtuce? All About The Cool Obscure Veggie Of The Moment》&lt;sup&gt;&lt;a id=&quot;fnr.2&quot; class=&quot;footref&quot; href=&quot;#fn.2&quot;&gt;2&lt;/a&gt;&lt;/sup&gt;：
&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;
celtuce is a type of lettuce bred in southern China for long, flavorful stems
rather than abundant, tasty leaves.
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;
这是 2014 年的文章了，据说当时在美国只有四家餐厅提供莴笋菜肴：But a search on
MenuPages turned up just four restaurants in the country that serve it: Blanca
and Fung Tu in New York, and Alma and Joe’s in Los Angeles.&lt;sup&gt;&lt;a id=&quot;fnr.2.100&quot; class=&quot;footref&quot; href=&quot;#fn.2&quot;&gt;2&lt;/a&gt;&lt;/sup&gt;
&lt;/p&gt;

&lt;p&gt;
celtuce 这个词看起来就像是芹菜 celery 和 lettuce[ˈletɪs] 的组合词（portmanteau）：
the name sounded like a portmanteau of “celery” and “lettuce,” two of the most
familiar vegetables around.&lt;sup&gt;&lt;a id=&quot;fnr.2.100&quot; class=&quot;footref&quot; href=&quot;#fn.2&quot;&gt;2&lt;/a&gt;&lt;/sup&gt;
&lt;/p&gt;

&lt;p&gt;
法语称莴笋为 la laitue asperge&lt;sup&gt;(fr)&lt;/sup&gt; 芦笋生菜。
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgheadline2&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgheadline2&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;2&lt;/span&gt; lettuce&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-2&quot;&gt;
&lt;p&gt;
那么 lettuce 是什么呢？lettuce 就是最开始我们提到的生菜。也就是说莴笋的茎的英语单词是由芹菜和生菜组合而成的。那么就可以理解为像芹菜一样吃的生菜的茎。这样联想起来是不是比较容易记住呢？
&lt;/p&gt;

&lt;p&gt;
如果你看到德语法语里 lettuce 是怎么拼写的你一定会很吃惊。德语 der Salat&lt;sup&gt;(de)&lt;/sup&gt;，法语 la salade&lt;sup&gt;(f)&lt;/sup&gt;，是不是感觉和 salad 很像呢？换句话说，在德国法国人看来生菜就是蔬菜沙拉，沙拉就是生菜，也就是莴苣的叶子。
&lt;/p&gt;

&lt;p&gt;
当然法语中也说 la laitue&lt;sup&gt;(fr)&lt;/sup&gt;，这个在前文见到过。
&lt;/p&gt;

&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;J’aime toujours prendre une salade de laitue au déjeuner.&lt;sup&gt;(fr)&lt;/sup&gt; 我总是喜欢在午餐时吃莴苣沙拉。&lt;/li&gt;
&lt;li&gt;J’aime faire le salade et j&apos;aime surtout ajouter des concombres.&lt;sup&gt;(fr)&lt;/sup&gt; 我喜欢做沙拉，尤其是放黄瓜。&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgheadline3&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgheadline3&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;3&lt;/span&gt; avoir les idées en salade&lt;sup&gt;(fr)&lt;/sup&gt;&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-3&quot;&gt;
&lt;p&gt;
凉拌生菜一样的想法 &amp;#x2013;&amp;gt; 脑子里一团浆糊。
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgheadline4&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgheadline4&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;4&lt;/span&gt; summary&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-4&quot;&gt;
&lt;p&gt;
今天的主题是莴笋，莴笋的茎叫 celtuce，la laitue asperge&lt;sup&gt;(fr)&lt;/sup&gt;。而它的叶子呢，就叫
lettuce，la laitue&lt;sup&gt;(fr)&lt;/sup&gt;。因为是沙拉的主角，所以莴笋叶，也就是生菜，在法语德语就叫 la salade&lt;sup&gt;(f)&lt;/sup&gt; 和 der Salat&lt;sup&gt;(de)&lt;/sup&gt;。
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgheadline5&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgheadline5&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;5&lt;/span&gt; some digression&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-5&quot;&gt;
&lt;p&gt;
最近天气转凉了，早上也不太起得来，晚上也想早早的睡觉了。所以更新速度有些慢下来，估计今后更新会越来越慢了吧。请见谅。不过这样对身体有好处，符合《黄帝内经》第二篇四气调神大论，兹引用四气调神大论之秋三月养生法以飨读者：
&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;
秋三月，此谓容平，天气以急，地气以明，早卧早起，与鸡俱兴，使志安宁，以缓秋刑，收敛神气，使秋气平，无外其志，使肺气清，此秋气之应，养收之道也，逆之则伤肺，冬为飧泄，奉藏者少。
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;
秋天是草木自然成熟的季节，天气劲急，地气清明。这个季节的作息呢，最好是晚上早点上床睡觉，不要夜里去外面到处玩的很嗨，搞到很晚才睡觉，而早上呢，伴着公鸡叫，就好起床了。一般公鸡都是早上日出时分叫的，所以就是伴随着太阳一起起床。我看天气预报说这几天日出时间是早上 5:46 而日落时间是下午 5:58。也就是说，最近的起床时间调整到 6
点钟差不多。除了要早睡早起外，还要注意情绪思绪的调整，不要想东向西想个不停，而要心平气和保持安定，精神内守，不急不躁，那样就可以抵消一部分秋天的杀气。另外还要注意不要太过追逐外物，耗散精气，比如买房子这种事情，就不该在秋冬天去考虑，而应该在夏天去操作。我看最近房产中介门口老多人了，吵吵闹闹的，急不可耐的买房子，其实是不太符合秋天养生大论的。所以政府就出台限购政策，让老百姓好好过秋冬天。秋天经常去公园散散步，呼吸呼吸新鲜空气，保持肺气的清新。用这样的办法去对付秋天的肃杀之气，就叫做收养之道。收养之道做的好了，人的肺就会健康，冬天消化能力会比较好，人体的储藏能力就好，过冬就舒服些，不容易生病。如果违逆秋天的收养之道，就会损伤肺，冬天容易拉肚子，就会过得不舒服。至于为什么要在秋天保护好肺，是因为秋天在气候来看属于金，金克木，而肺在五脏中属于木的属性，秋天就容易伤到肺，所以秋天要注意保护好肺。
&lt;/p&gt;

&lt;p&gt;
以上为四气调神大论的秋三月养生大法。
&lt;/p&gt;

&lt;p&gt;
所以，累了一天了，晚上差不多了，就早点睡觉吧。等来年春天了，才有力气去拼搏创造更多的成就。
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;footnotes&quot;&gt;
&lt;h2 class=&quot;footnotes&quot;&gt;Footnotes: &lt;/h2&gt;
&lt;div id=&quot;text-footnotes&quot;&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.1&quot; class=&quot;footnum&quot; href=&quot;#fnr.1&quot;&gt;1&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;http://www.a-hospital.com/w/%E8%8E%B4%E8%8B%A3&quot;&gt;http://www.a-hospital.com/w/%E8%8E%B4%E8%8B%A3&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.2&quot; class=&quot;footnum&quot; href=&quot;#fnr.2&quot;&gt;2&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;http://www.huffingtonpost.com/2014/12/17/celtuce_n_6330026.html&quot;&gt;http://www.huffingtonpost.com/2014/12/17/celtuce_n_6330026.html&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;


&lt;/div&gt;
&lt;/div&gt;
</content>
 </entry>
 
 <entry>
   <title>单词本：蔬菜之竹笋</title>
   <link href="http://kimi.im/2016-09-12-english-bamboo-shoots"/>
   <updated>2016-09-12T00:00:00+00:00</updated>
   <id>http://kimi.im/english-bamboo-shoots</id>
   <content type="html">&lt;div id=&quot;outline-container-orgheadline1&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgheadline1&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;1&lt;/span&gt; bamboo&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-1&quot;&gt;
&lt;p&gt;
上一篇介绍了芦笋，接着是竹笋 bamboo shoot。第一个单词是竹子 bamboo，德语 der
Bambus&lt;sup&gt;(de)&lt;/sup&gt;，法语 le bambou&lt;sup&gt;(fr)&lt;/sup&gt;，这个奇怪的读音据说来自马来西亚的 bambu。提到马来西亚，不得不提一提我最近一直听到的神曲《Malaysia Chabor（来自马来西亚的查某）》
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;http://c.y.qq.com/v8/playsong.html?songid=104995257&amp;amp;source=yqq#wechat_redirect&quot;&gt;http://c.y.qq.com/v8/playsong.html?songid=104995257&amp;amp;source=yqq#wechat_redirect&lt;/a&gt;
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgheadline4&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgheadline4&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;2&lt;/span&gt; bamboo shoot&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-2&quot;&gt;
&lt;p&gt;
那么为什么竹笋被叫做竹子射击呢？原来 shoot 不仅仅有射击的意思，还有快速长大的意思。竹笋的法语名字叫 la pousse de bambou&lt;sup&gt;(fr)&lt;/sup&gt;，和英语如出一撤，la pousse&lt;sup&gt;(fr)&lt;/sup&gt; 指的是快速生长，la pousse des ongles/cheveux 指甲/头发生长。德语也一样，叫 der
Bambusspross&lt;sup&gt;(de)&lt;/sup&gt;，竹芽。Im Frühling sprossen wieder Bäume und Sträucher&lt;sup&gt;(de)&lt;/sup&gt; 春天草木抽新枝。
&lt;/p&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgheadline2&quot; class=&quot;outline-3&quot;&gt;
&lt;h3 id=&quot;orgheadline2&quot;&gt;&lt;span class=&quot;section-number-3&quot;&gt;2.1&lt;/span&gt; shoot up&lt;/h3&gt;
&lt;div class=&quot;outline-text-3&quot; id=&quot;text-2-1&quot;&gt;
&lt;p&gt;
特指小孩子发育期快速长高，(especially of a child) grow taller rapidly:
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;When she hit thirteen she shot up to a startling 5 foot 9.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
所以 bamboo shoot 就是竹子快速长大的阶段，因为我们知道，雨后春笋般长高就是用来形容某些事物飞快发展。
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgheadline3&quot; class=&quot;outline-3&quot;&gt;
&lt;h3 id=&quot;orgheadline3&quot;&gt;&lt;span class=&quot;section-number-3&quot;&gt;2.2&lt;/span&gt; mushroom&lt;/h3&gt;
&lt;div class=&quot;outline-text-3&quot; id=&quot;text-2-2&quot;&gt;
&lt;p&gt;
不过据我所知，蘑菇也是下雨天之后快速长高的。所以蘑菇也常常做动词用，比如：
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;New houses have mushroomed on the edge of the town. 城市边缘的新建房屋犹如雨后春笋。&lt;/li&gt;
&lt;li&gt;The population mushroomed in the postwar decades. 战后数十年里人口快速增长。&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgheadline6&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgheadline6&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;3&lt;/span&gt; bamboo ceiling&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-3&quot;&gt;
&lt;p&gt;
提到竹子，还有一个奇怪的名词叫竹子天花板，是这么解释的：
&lt;/p&gt;

&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;Especially in America, a social barrier to further promotion or progression,
in employment and elsewhere, for a person of East Asian ethnicity.&lt;/li&gt;
&lt;li&gt;In East Asia, a social barrier to further promotion or progression, in
employment and elsewhere, for women.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
bamboo ceiling 有两层含义，第一是，东亚裔在美国职场中遇到的升职发展瓶颈，第二是，东亚地区女人在职场中遇到的升职发展瓶颈。这是算是一种潜规则吧，就是东亚裔的黄皮肤黑头发的人在欧美发展到一定程度会遇到一种无形的阻力。就如同东亚的女人在职业发展中遇到的阻力一样。
&lt;/p&gt;

&lt;p&gt;
话又说回来，为什么叫竹子天花板呢？我猜可能是竹子在东亚地区分布最广的原因吧，所以提到竹子可能会联想到东亚人，主要也就是中国人，日本人和韩国人。所以竹子在西方人眼中有时候是中日韩黄种人的形象符号。wikipedia 对 bamboo ceiling 是这么解释的：
&lt;/p&gt;

&lt;p&gt;
The term &quot;bamboo ceiling&quot; was coined by Jane Hyun in her book focusing on Asians
in the workplace, Breaking the Bamboo Ceiling: Career Strategies for Asians.&lt;sup&gt;&lt;a id=&quot;fnr.1&quot; class=&quot;footref&quot; href=&quot;#fn.1&quot;&gt;1&lt;/a&gt;&lt;/sup&gt;
&lt;/p&gt;

&lt;p&gt;
原来是有个叫 Jane Hyun 的女人写了本书叫《打破竹子天花板：针对亚洲人的职业策略》。
&lt;/p&gt;

&lt;p&gt;
AlexZ 同学有一段经典的抱怨，很好的解释了 bamboo ceiling 的现象：不是你不努力，不是你不能干，只是你不是同一种人。&lt;sup&gt;&lt;a id=&quot;fnr.2&quot; class=&quot;footref&quot; href=&quot;#fn.2&quot;&gt;2&lt;/a&gt;&lt;/sup&gt;
&lt;/p&gt;

&lt;p&gt;
Dan Harrison 有针对亚裔澳大利亚人的 bamboo ceiling 论述： &apos;Bamboo ceiling&apos;
blocking Asian Australians, says commissioner&lt;sup&gt;&lt;a id=&quot;fnr.3&quot; class=&quot;footref&quot; href=&quot;#fn.3&quot;&gt;3&lt;/a&gt;&lt;/sup&gt; 看来 bamboo ceiling 不仅仅在美国，在所有西方欧美白人国家都存在啊。
&lt;/p&gt;

&lt;p&gt;
其实所谓的 bamboo ceiling 就是一种更具体的 glass ceiling 吧。
&lt;/p&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgheadline5&quot; class=&quot;outline-3&quot;&gt;
&lt;h3 id=&quot;orgheadline5&quot;&gt;&lt;span class=&quot;section-number-3&quot;&gt;3.1&lt;/span&gt; glass ceiling&lt;/h3&gt;
&lt;div class=&quot;outline-text-3&quot; id=&quot;text-3-1&quot;&gt;
&lt;p&gt;
玻璃天花板是针对特定地区人群的一种不成文的升职阻力：
&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;
An unwritten, uncodified barrier to further promotion or progression, in
employment and elsewhere, for a member of a specific demographic group.
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;
那么具体到黄种人，就叫 bamboo ceiling 了，而 bamboo ceiling 又被黄种人应用到东亚女性身上就成了妇女职场发展阻力了。
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgheadline7&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgheadline7&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;4&lt;/span&gt; Summary&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-4&quot;&gt;
&lt;p&gt;
本文主要介绍作为蔬菜的竹笋的英法德单词是如何拼写的：
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;bamboo shoot&lt;/li&gt;
&lt;li&gt;la pousse de bambou&lt;sup&gt;(fr)&lt;/sup&gt;&lt;/li&gt;
&lt;li&gt;der Bambusspross&lt;sup&gt;(de)&lt;/sup&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
然后由 shoot 联想到 shoot up 以及 mashroom。
&lt;/p&gt;

&lt;p&gt;
又碰巧遇到 bamboo ceiling 这一说法，进一步引出 glass ceiling 现象。
&lt;/p&gt;

&lt;p&gt;
最后，希望不管是白种人还是黄种人，都能享受竹笋的美味，而忘记竹子天花板吧！
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;footnotes&quot;&gt;
&lt;h2 class=&quot;footnotes&quot;&gt;Footnotes: &lt;/h2&gt;
&lt;div id=&quot;text-footnotes&quot;&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.1&quot; class=&quot;footnum&quot; href=&quot;#fnr.1&quot;&gt;1&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;https://en.wikipedia.org/wiki/Bamboo_ceiling&quot;&gt;https://en.wikipedia.org/wiki/Bamboo_ceiling&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.2&quot; class=&quot;footnum&quot; href=&quot;#fnr.2&quot;&gt;2&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;https://www.douban.com/note/293388096/&quot;&gt;https://www.douban.com/note/293388096/&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.3&quot; class=&quot;footnum&quot; href=&quot;#fnr.3&quot;&gt;3&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;http://www.smh.com.au/federal-politics/political-news/bamboo-ceiling-blocking-asian-australians-says-commissioner-20140710-3bq45.html&quot;&gt;http://www.smh.com.au/federal-politics/political-news/bamboo-ceiling-blocking-asian-australians-says-commissioner-20140710-3bq45.html&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;


&lt;/div&gt;
&lt;/div&gt;
</content>
 </entry>
 
 <entry>
   <title>在 MantisBT 中使用管理员账号修改用户密码</title>
   <link href="http://kimi.im/2016-09-11-update-password-mannually-in-mantisbt"/>
   <updated>2016-09-11T00:00:00+00:00</updated>
   <id>http://kimi.im/update-password-mannually-in-mantisbt</id>
   <content type="html">&lt;div id=&quot;outline-container-orgheadline1&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgheadline1&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;1&lt;/span&gt; 再见 Bugfree&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-1&quot;&gt;
&lt;p&gt;
最近在本地一直用的缺陷管理工具 bugfree&lt;sup&gt;&lt;a id=&quot;fnr.1&quot; class=&quot;footref&quot; href=&quot;#fn.1&quot;&gt;1&lt;/a&gt;&lt;/sup&gt; 没法用了。原因有两点：第一，我们的
IT 管理员最近升级了 PHP 导致依赖老版本的 PHP 的 bugfree 跑不起来了；第二，
bugfree 官网说不在继续开发维护了，他们转向开发禅道了，公告如下：
&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;
感谢您对BugFree的支持，我们现在向您推荐我们团队全新的产品——禅道项目管理软件。禅道是我们历时三年精心打造的一款完整的项目管理软件，涵盖了需求管理、任务管理、缺陷管理和用例管理，是研发类项目管理的必备软件！ BugFree项目以后将不再有任何更新，我们也不再提供任何技术支持。
&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgheadline2&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgheadline2&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;2&lt;/span&gt; 拥抱 MantisBT&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-2&quot;&gt;
&lt;p&gt;
所以，开发团队在内部外部都得不到有效的支持，就只好切换了工具了。在浩瀚如烟的缺陷管理工具中寻寻觅觅，终于选定了这只捕虫专家螳螂 MantisBT&lt;sup&gt;&lt;a id=&quot;fnr.2&quot; class=&quot;footref&quot; href=&quot;#fn.2&quot;&gt;2&lt;/a&gt;&lt;/sup&gt;。Mantis 简洁高效使用方便，还有一个不错的 changelog 和 milestone 管理界面，实在是难得的一个好工具。请看官网介绍及用户评价：
&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;
MantisBT makes collaboration with team members &amp;amp; clients easy, fast, and
professional.
&lt;/p&gt;

&lt;p&gt;
&quot;We&apos;ve come to respect mantis for its powerful simplicity and I go around
recommending it to friends and clients alike.&quot;
&lt;/p&gt;

&lt;p&gt;
&amp;#x2013; John Zastrow / Tetra Tech, Inc.
&lt;/p&gt;

&lt;p&gt;
&quot;Great product! We tried 6 different issue trackers before settling on Mantis.&quot;
&lt;/p&gt;

&lt;p&gt;
&amp;#x2013; John Locke / Freelock Computing
&lt;/p&gt;

&lt;p&gt;
&quot;Very flexible great project, exactly what we need for our software
development.&quot;
&lt;/p&gt;

&lt;p&gt;
&amp;#x2013; Attila Strba / EnOcean
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;
之所以选择它，还有另外一个原因，就是我一直在用的开源文件管理程序叫 Double
Commander（DC）&lt;sup&gt;&lt;a id=&quot;fnr.3&quot; class=&quot;footref&quot; href=&quot;#fn.3&quot;&gt;3&lt;/a&gt;&lt;/sup&gt; 也是用 MantisBT 管理缺陷和需求的。
&lt;/p&gt;

&lt;p&gt;
如果想对 MantisBT 有个直观的了解可以点开 DC 的问题单管理页面查看：
&lt;a href=&quot;http://doublecmd.sourceforge.net/mantisbt/view_all_bug_page.php&quot;&gt;http://doublecmd.sourceforge.net/mantisbt/view_all_bug_page.php&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
另外，也你也可以看到 DC 团队是如何用 MantisBT 管理 roadmap 的：
&lt;a href=&quot;http://doublecmd.sourceforge.net/mantisbt/roadmap_page.php&quot;&gt;http://doublecmd.sourceforge.net/mantisbt/roadmap_page.php&lt;/a&gt;
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgheadline3&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgheadline3&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;3&lt;/span&gt; 安装配置 MantisBT&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-3&quot;&gt;
&lt;p&gt;
我下载安装的是 1.3.1 版本的 MantisBT，在安装了 XAMPP&lt;sup&gt;&lt;a id=&quot;fnr.4&quot; class=&quot;footref&quot; href=&quot;#fn.4&quot;&gt;4&lt;/a&gt;&lt;/sup&gt; 的机器上安装MantisBT
简直是小菜一碟，只要几下鼠标就可以了。相对来说配置稍微麻烦一些，如果需要简单的定制你得做这些事情：
&lt;/p&gt;

&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;创建项目，MantisBT 支持多个项目&lt;/li&gt;
&lt;li&gt;添加自定义的输入域，用来支持额外的缺陷信息，比如缺陷发现的阶段等&lt;/li&gt;
&lt;li&gt;设置并简化缺陷状态变迁表，默认的状态变迁表比较繁琐，有 feedback，acknowledge
等，可以精简掉，只保留 new，assigned，resolved，close&lt;/li&gt;
&lt;li&gt;添加用户，并将用户关联到项目&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgheadline4&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgheadline4&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;4&lt;/span&gt; 修改用户密码&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-4&quot;&gt;
&lt;p&gt;
但是问题来了，新添加的用户密码不能手动更改，系统会发一封邮件给新用户，让她/他用随机密码登陆自己去设置新密码。但是配置 SMTP 邮箱服务器又很繁琐，只好想办法通过管理员账户手动修改。
&lt;/p&gt;

&lt;p&gt;
参考了以往用户的经验总结之后，修改了两个文件，成功在最新版本的 MantisBT 上实现手动修改用户密码功能。
&lt;/p&gt;

&lt;p&gt;
首先，请确保使用的 MantisBT 版本为 =1.3.1=，不然的话文件内容可能不太一样，但是基本上也差不了多少，我就是参考了 simon-杨&lt;sup&gt;&lt;a id=&quot;fnr.5&quot; class=&quot;footref&quot; href=&quot;#fn.5&quot;&gt;5&lt;/a&gt;&lt;/sup&gt;的文章修改的，他是 2013 年 2 月 26
日写的，所以面向的是比较老的版本，有不少差异，感兴趣的朋友可以对比一下。
&lt;/p&gt;

&lt;p&gt;
然后，在 &lt;code&gt;manage_user_edit_page.php&lt;/code&gt; 文件中找到 &lt;code&gt;&amp;lt;!-- Access Level --&amp;gt;&lt;/code&gt; ，在其上方添加：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;

&lt;pre class=&quot;src src-html&quot;&gt;&lt;span style=&quot;color: #228b22; font-style: italic;&quot;&gt;&amp;lt;!-- &lt;/span&gt;&lt;span style=&quot;color: #228b22; font-style: italic;&quot;&gt;Password &lt;/span&gt;&lt;span style=&quot;color: #228b22; font-style: italic;&quot;&gt;--&amp;gt;&lt;/span&gt;
&amp;lt;&lt;span style=&quot;color: #0000cd;&quot;&gt;div&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-style: italic;&quot;&gt;class&lt;/span&gt;=&lt;span style=&quot;color: #3a5fcd;&quot;&gt;&quot;field-container&quot;&lt;/span&gt;&amp;gt;
    &amp;lt;&lt;span style=&quot;color: #0000cd;&quot;&gt;label&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-style: italic;&quot;&gt;for&lt;/span&gt;=&lt;span style=&quot;color: #3a5fcd;&quot;&gt;&quot;edit-password&quot;&lt;/span&gt;&amp;gt;&amp;lt;&lt;span style=&quot;color: #0000cd;&quot;&gt;span&lt;/span&gt;&amp;gt;&amp;lt;&lt;span style=&quot;color: #8b008b; font-weight: bold;&quot;&gt;?php&lt;/span&gt; echo &lt;span style=&quot;color: #3a5fcd;&quot;&gt;&quot;Password (change only)&quot;&lt;/span&gt; ?&amp;gt;&amp;lt;/&lt;span style=&quot;color: #0000cd;&quot;&gt;span&lt;/span&gt;&amp;gt;&amp;lt;/&lt;span style=&quot;color: #0000cd;&quot;&gt;label&lt;/span&gt;&amp;gt;
    &amp;lt;&lt;span style=&quot;color: #0000cd;&quot;&gt;span&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-style: italic;&quot;&gt;class&lt;/span&gt;=&lt;span style=&quot;color: #3a5fcd;&quot;&gt;&quot;input&quot;&lt;/span&gt;&amp;gt;&amp;lt;&lt;span style=&quot;color: #0000cd;&quot;&gt;input&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-style: italic;&quot;&gt;id&lt;/span&gt;=&lt;span style=&quot;color: #3a5fcd;&quot;&gt;&quot;edit-password&quot;&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-style: italic;&quot;&gt;type&lt;/span&gt;=&lt;span style=&quot;color: #3a5fcd;&quot;&gt;&quot;text&quot;&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-style: italic;&quot;&gt;size&lt;/span&gt;=&lt;span style=&quot;color: #3a5fcd;&quot;&gt;&quot;32&quot;&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-style: italic;&quot;&gt;maxlength&lt;/span&gt;=&lt;span style=&quot;color: #3a5fcd;&quot;&gt;&quot;100&quot;&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-style: italic;&quot;&gt;name&lt;/span&gt;=&lt;span style=&quot;color: #3a5fcd;&quot;&gt;&quot;password&quot;&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-style: italic;&quot;&gt;value&lt;/span&gt;=&lt;span style=&quot;color: #3a5fcd;&quot;&gt;&quot;&quot;&lt;/span&gt; /&amp;gt;&amp;lt;/&lt;span style=&quot;color: #0000cd;&quot;&gt;span&lt;/span&gt;&amp;gt;
    &amp;lt;&lt;span style=&quot;color: #0000cd;&quot;&gt;span&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-style: italic;&quot;&gt;class&lt;/span&gt;=&lt;span style=&quot;color: #3a5fcd;&quot;&gt;&quot;label-style&quot;&lt;/span&gt;&amp;gt;&amp;lt;/&lt;span style=&quot;color: #0000cd;&quot;&gt;span&lt;/span&gt;&amp;gt;
&amp;lt;/&lt;span style=&quot;color: #0000cd;&quot;&gt;div&lt;/span&gt;&amp;gt;
&lt;span style=&quot;color: #228b22; font-style: italic;&quot;&gt;&amp;lt;!-- &lt;/span&gt;&lt;span style=&quot;color: #228b22; font-style: italic;&quot;&gt;Access Level &lt;/span&gt;&lt;span style=&quot;color: #228b22; font-style: italic;&quot;&gt;--&amp;gt;&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
接着，在 &lt;code&gt;manage_user_update.php&lt;/code&gt; 的 74 行左右的地方找到：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;

&lt;pre class=&quot;src src-C&quot;&gt;$f_user_id      = gpc_get_int( &lt;span style=&quot;color: #3a5fcd;&quot;&gt;&apos;user_id&apos;&lt;/span&gt; );
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
在其下方增加 &lt;code&gt;$f_pass       = gpc_get_string(&apos;password&apos;);&lt;/code&gt;
&lt;/p&gt;
&lt;div class=&quot;org-src-container&quot;&gt;

&lt;pre class=&quot;src src-C&quot;&gt;$f_user_id      = gpc_get_int( &lt;span style=&quot;color: #3a5fcd;&quot;&gt;&apos;user_id&apos;&lt;/span&gt; );
$f_pass       = gpc_get_string(&lt;span style=&quot;color: #3a5fcd;&quot;&gt;&apos;password&apos;&lt;/span&gt;);
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
最后，找到
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;

&lt;pre class=&quot;src src-C&quot;&gt;$t_result = db_query( $t_query, $t_query_params );
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
在这句后面添加几行：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;

&lt;pre class=&quot;src src-C&quot;&gt;$t_result = db_query( $t_query, $t_query_params );
&lt;span style=&quot;color: #228b22; font-style: italic;&quot;&gt;//&lt;/span&gt;&lt;span style=&quot;color: #228b22; font-style: italic;&quot;&gt;Reset the password if specified.&lt;/span&gt;
&lt;span style=&quot;color: #8b008b; font-weight: bold;&quot;&gt;if&lt;/span&gt; ($f_pass) user_set_password($f_user_id, $f_pass);
event_signal( &lt;span style=&quot;color: #3a5fcd;&quot;&gt;&apos;EVENT_MANAGE_USER_UPDATE&apos;&lt;/span&gt;, array( $c_user_id ) );
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
然后刷新一下用户编辑页面就能修改用户密码啦。
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;footnotes&quot;&gt;
&lt;h2 class=&quot;footnotes&quot;&gt;Footnotes: &lt;/h2&gt;
&lt;div id=&quot;text-footnotes&quot;&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.1&quot; class=&quot;footnum&quot; href=&quot;#fnr.1&quot;&gt;1&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;http://www.bugfree.cn/&quot;&gt;http://www.bugfree.cn/&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.2&quot; class=&quot;footnum&quot; href=&quot;#fnr.2&quot;&gt;2&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;http://www.mantisbt.org/&quot;&gt;http://www.mantisbt.org/&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.3&quot; class=&quot;footnum&quot; href=&quot;#fnr.3&quot;&gt;3&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;http://doublecmd.sourceforge.net/&quot;&gt;http://doublecmd.sourceforge.net/&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.4&quot; class=&quot;footnum&quot; href=&quot;#fnr.4&quot;&gt;4&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;https://www.apachefriends.org&quot;&gt;https://www.apachefriends.org&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.5&quot; class=&quot;footnum&quot; href=&quot;#fnr.5&quot;&gt;5&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;http://blog.csdn.net/simongyley/article/details/8612728&quot;&gt;http://blog.csdn.net/simongyley/article/details/8612728&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;


&lt;/div&gt;
&lt;/div&gt;
</content>
 </entry>
 
 <entry>
   <title>单词本：蔬菜之黄花菜</title>
   <link href="http://kimi.im/2016-09-06-english-daylily"/>
   <updated>2016-09-06T00:00:00+00:00</updated>
   <id>http://kimi.im/english-daylily</id>
   <content type="html">&lt;blockquote&gt;
&lt;p&gt;
« Un jour, j’ai vu le soleil se coucher quarante-trois fois! »
&lt;/p&gt;

&lt;p&gt;
Et un peu plus tard tu ajoutais:
&lt;/p&gt;

&lt;p&gt;
« Tu sais&amp;#x2026; quand on est tellement triste on aime les couchers de soleil&amp;#x2026; »
&lt;/p&gt;

&lt;p&gt;
« Le jour des quarante-trois fois tu étais donc tellement triste? »
&lt;/p&gt;

&lt;p&gt;
Mais le petit prince ne répondit pas.
&lt;/p&gt;

&lt;p&gt;
&amp;#x2013; Le Petit Prince, Chapitre VI
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;div id=&quot;outline-container-orgheadline1&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgheadline1&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;1&lt;/span&gt; daylily&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-1&quot;&gt;
&lt;p&gt;
惊奇的发现，黄花菜原来是一种萱草属植物又叫黄花菜属。萱草在英语里叫 daylily，德语
die Taglilien&lt;sup&gt;(de)&lt;/sup&gt; 白日百合花。其学名叫 Hemerocallis，故法语中称之为
l(a)&apos;hémérocalle&lt;sup&gt;(fr)&lt;/sup&gt;，其描述为：
&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;
Ces plantes vivaces doivent leur nom au grec ἡμέρα (hemera), « jour », et καλός
(kalos), « beauté ».&lt;sup&gt;&lt;a id=&quot;fnr.1&quot; class=&quot;footref&quot; href=&quot;#fn.1&quot;&gt;1&lt;/a&gt;&lt;/sup&gt;
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;
此花之名源自希腊，hemera 意为白日，而 kalos 意为美人。所以可不可以这么认为，英语之 daylily 与德语之 Taglilien 皆为希腊白日美人之意译。
&lt;/p&gt;

&lt;p&gt;
据说萱草有忘忧之功效。在《诗经·卫风·伯兮》中就有记载：
&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;
伯兮朅兮，邦之桀兮。伯也执殳，为王前驱。自伯之东，首如飞蓬。岂无膏沐？谁适为容！其雨其雨，杲杲出日。愿言思伯，甘心首疾。焉得谖草？言树之背。愿言思伯，使我心痗。
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;
这首诗描述了当年陈蔡卫等小国的武士跟随周王讨伐郑伯时，留在国中的女人们思念丈夫的心情。因为当时的周王已经很弱了，而陈蔡卫又是小国，他们讨伐的郑伯当时却很强大，所以女人们对于外出行军的丈夫能否回归很是担心，于是就吟诵道“焉得谖草，言树之背。愿言思伯，使我心痗。”，谖草就是萱草，她们希望靠解忧的萱草暂时忘忧。
&lt;/p&gt;

&lt;p&gt;
西晋张华撰写的《博物志》中说：“萱草，食之令人好欢乐，忘忧思，故曰忘忧草。”李时珍《本草纲目》中是这么说的：“萱本作谖。谖，忘也。《诗》云︰焉得谖草？言树之背。谓忧思不能自遣，故欲树此草，玩味以忘忧也。吴人谓之疗愁。《董子》云故也。其苗烹食，气味如葱，而鹿食九种解毒之草，萱乃其一，故又名鹿葱。”江南吴人称萱草为疗愁，萱草还是鹿喜欢吃的解毒草之一，所以又叫鹿葱。&lt;sup&gt;&lt;a id=&quot;fnr.2&quot; class=&quot;footref&quot; href=&quot;#fn.2&quot;&gt;2&lt;/a&gt;&lt;/sup&gt;
&lt;/p&gt;

&lt;p&gt;
所以呢，我们经常吃的黄花菜原来是忘忧草的一种，这么想来，下次吃到黄花菜时，得好好体会体会忘忧的感觉。
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgheadline2&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgheadline2&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;2&lt;/span&gt; golden needles&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-2&quot;&gt;
&lt;p&gt;
其实呢，黄花菜更准确的翻译应该是 golden needles 金针。
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgheadline3&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgheadline3&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;3&lt;/span&gt; yellow flower vegetables&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-3&quot;&gt;
&lt;p&gt;
或者逐字翻译 yellow flower vegetables。
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgheadline4&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgheadline4&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;4&lt;/span&gt; Summary&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-4&quot;&gt;
&lt;p&gt;
在学习黄花菜的时候惊喜的发现，原来黄花菜是一种萱草（daylily，die Taglilien&lt;sup&gt;(de)&lt;/sup&gt;，
l&apos;hémérocalle&lt;sup&gt;(fr)&lt;/sup&gt; ），而萱草又叫谖草，忘忧草，疗愁，鹿葱。从诗经时代就被人们发现具有忘忧之功效。不过黄花菜更准确一些的翻译应该是 golden needles 或者 yellow
flower vegetables。
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;footnotes&quot;&gt;
&lt;h2 class=&quot;footnotes&quot;&gt;Footnotes: &lt;/h2&gt;
&lt;div id=&quot;text-footnotes&quot;&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.1&quot; class=&quot;footnum&quot; href=&quot;#fnr.1&quot;&gt;1&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;https://fr.wikipedia.org/wiki/H%C3%A9m%C3%A9rocalle&quot;&gt;https://fr.wikipedia.org/wiki/H%C3%A9m%C3%A9rocalle&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.2&quot; class=&quot;footnum&quot; href=&quot;#fnr.2&quot;&gt;2&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
很多介绍黄花菜的文章提到苏东坡的诗：“莫道农家无宝玉，遍地黄花是金针。”可是我一直找不到诗歌全文以及出处。好郁闷！
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;


&lt;/div&gt;
&lt;/div&gt;
</content>
 </entry>
 
 <entry>
   <title>单词本：蔬菜之芦笋</title>
   <link href="http://kimi.im/2016-09-06-english-asparagus"/>
   <updated>2016-09-06T00:00:00+00:00</updated>
   <id>http://kimi.im/english-asparagus</id>
   <content type="html">&lt;div id=&quot;outline-container-orgheadline1&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgheadline1&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;1&lt;/span&gt; asparagus&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-1&quot;&gt;
&lt;p&gt;
之前在学习韭菜的时候见到过芦笋的法语单词 l&apos;asperge&lt;sup&gt;(fr)&lt;/sup&gt;&lt;sup&gt;&lt;a id=&quot;fnr.1&quot; class=&quot;footref&quot; href=&quot;#fn.1&quot;&gt;1&lt;/a&gt;&lt;/sup&gt;，当时是作为大葱的名字出现在l&apos;asperge du pauvre&lt;sup&gt;(fr)&lt;/sup&gt;，穷人的芦笋。
&lt;/p&gt;

&lt;p&gt;
很明显这是一个拉丁语单词，源自 asparagos&lt;sup&gt;(latin)&lt;/sup&gt;，其法语写法为 l&apos;asperge&lt;sup&gt;(fr)&lt;/sup&gt;，其德语写法为 der Gemüsespargel&lt;sup&gt;(de)&lt;/sup&gt;，蔬菜天门冬，那是因为芦笋属于天门冬属（der
Spargel&lt;sup&gt;(de)&lt;/sup&gt; ）。
&lt;/p&gt;

&lt;p&gt;
从德语 Spargel 中略微还是能看出 sparagus 的影子的，果不出所料，sparagus 是
asparagus的一个曾用名：sparagus ‎is an obsolete form of asparagus.&lt;sup&gt;&lt;a id=&quot;fnr.2&quot; class=&quot;footref&quot; href=&quot;#fn.2&quot;&gt;2&lt;/a&gt;&lt;/sup&gt;
&lt;/p&gt;

&lt;p&gt;
不得不提一提日本韩国，他们管芦笋叫 アスパラガス ‎(asuparagasu)，아스파라거스‎(aseuparageoseu)。他们用自己的拼音文字直接拼写 asparagus！我很怀疑日本人韩国人英语口语比较重是因为他们有很多外来词是拿这种近似的读音来读的。
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgheadline2&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgheadline2&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;2&lt;/span&gt; asparagus color&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-2&quot;&gt;
&lt;p&gt;
芦笋，RGB 颜色编号为#87A96B：
&lt;/p&gt;
&lt;h3 style=&quot;background-color: #87A96B; width: 80px;&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgheadline3&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgheadline3&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;3&lt;/span&gt; 石刁柏&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-3&quot;&gt;
&lt;p&gt;
原来芦笋还有看起来这么 cool 的名字：
&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;
石刁柏通常被称为芦笋，是世界著名蔬菜之一，在国际市场上享有“蔬菜之王”的美称，芦笋富含多种氨基酸、蛋白质和维生素，其含量均高于一般水果和蔬菜，特别是芦笋中的天冬酰胺和微量元素硒、钼、铬、锰等，具有调节机体代谢，提高身体免疫力的功效，在对高血压、心脏病、白血病、血癌、水肿、膀胱炎等的预防和治疗中，具有很强的抑制作用和药理效应。
&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgheadline4&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgheadline4&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;4&lt;/span&gt; Summary&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-4&quot;&gt;
&lt;p&gt;
本文介绍了芦笋的英法德名字：
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;asparagus&lt;/li&gt;
&lt;li&gt;l&apos;asperge&lt;sup&gt;(fr)&lt;/sup&gt;&lt;/li&gt;
&lt;li&gt;der Gemüsespargel&lt;sup&gt;(de)&lt;/sup&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
同时介绍了芦笋的另外一个中文名石刁柏。
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;footnotes&quot;&gt;
&lt;h2 class=&quot;footnotes&quot;&gt;Footnotes: &lt;/h2&gt;
&lt;div id=&quot;text-footnotes&quot;&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.1&quot; class=&quot;footnum&quot; href=&quot;#fnr.1&quot;&gt;1&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;http://kimi.im/2016-09-05-english-chives&quot;&gt;September 5, 2016 » 单词本：蔬菜之韭菜&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.2&quot; class=&quot;footnum&quot; href=&quot;#fnr.2&quot;&gt;2&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;https://en.wiktionary.org/wiki/sparagus#English&quot;&gt;https://en.wiktionary.org/wiki/sparagus#English&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;


&lt;/div&gt;
&lt;/div&gt;
</content>
 </entry>
 
 <entry>
   <title>单词本：蔬菜之洋葱</title>
   <link href="http://kimi.im/2016-09-05-english-onion"/>
   <updated>2016-09-05T00:00:00+00:00</updated>
   <id>http://kimi.im/english-onion</id>
   <content type="html">&lt;div id=&quot;outline-container-orgheadline4&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgheadline4&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;1&lt;/span&gt; onion&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-1&quot;&gt;
&lt;p&gt;
洋葱应该也算是一种葱吧。小香葱叫 chives，大葱叫 leek，而洋葱却叫 onion，作为中国人，我觉得很恼火，为什么他们要给不同的葱取那么多不同的名字呢？
&lt;/p&gt;

&lt;p&gt;
德语 die Zwiebel[`tsvi:bl]&lt;sup&gt;(de)&lt;/sup&gt;，法语 l(e)&apos;oignon&lt;sup&gt;(fr)&lt;/sup&gt;。其实有时候觉得法语德语的词性还是很讨厌的，法语有阴阳性，而德语居然还有中性。更麻烦的是，德语法语中同样的东西还可能不同性。比如洋葱，德语里是阴性，而法语里却是阳性。
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;Die Zwiebel hat mehrere Häute. 洋葱有好几层外皮。&lt;/li&gt;
&lt;li&gt;La vie est comme un oignon, on retient toujours ses larmes en
l&apos;épluchant.&lt;sup&gt;(fr)&lt;/sup&gt; 人生就像一个洋葱，人们泪汪汪的将它层层剥开。&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
到底还是邻国日韩的文字的感觉更熟悉些。日语洋葱叫玉葱（たまねぎ，tamanegi）&lt;sup&gt;(jp)&lt;/sup&gt;，我记得日语鸡蛋叫玉子 (たまご，tamago)&lt;sup&gt;(ja)&lt;/sup&gt;，所以，是不是可以推断日本人管白色的东西叫玉呢？而朝鲜语叫 양파（yangpa）&lt;sup&gt;(ko)&lt;/sup&gt;，파：葱。看来和我们一样，洋葱是从西洋引进的，所以都叫洋葱。
&lt;/p&gt;

&lt;p&gt;
另外，我找到了关于洋葱的 40 个事实：
&lt;/p&gt;

&lt;blockquote&gt;
&lt;ol class=&quot;org-ol&quot;&gt;
&lt;li&gt;Onions are vegetables&lt;/li&gt;
&lt;li&gt;Onions are edible&lt;/li&gt;
&lt;li&gt;They make you cry…&lt;/li&gt;
&lt;li&gt;They make good dip&lt;/li&gt;
&lt;li&gt;Onions grow underground&lt;/li&gt;
&lt;li&gt;They taste bad raw&lt;/li&gt;
&lt;li&gt;They give you bad breath&lt;/li&gt;
&lt;li&gt;Onions come in 3 designer colours (red yellow and white)&lt;/li&gt;
&lt;li&gt;They can predict the weather in winter&lt;/li&gt;
&lt;li&gt;They go good in a BBQ&lt;/li&gt;
&lt;li&gt;They are not sweet&lt;/li&gt;
&lt;li&gt;Onions have layers&lt;/li&gt;
&lt;li&gt;If you chew gum while cooking them you wont cry&lt;/li&gt;
&lt;li&gt;They are about 30 calories&lt;/li&gt;
&lt;li&gt;They can be sliced, chopped and diced&lt;/li&gt;
&lt;li&gt;Onions are shallot‘s cousin&lt;/li&gt;
&lt;li&gt;They can be pickled&lt;/li&gt;
&lt;li&gt;Onions are like ogres&lt;/li&gt;
&lt;li&gt;They can be peeled&lt;/li&gt;
&lt;li&gt;They are highly water based&lt;/li&gt;
&lt;li&gt;Onion breath can be cured with some parsley&lt;/li&gt;
&lt;li&gt;Onion in Japanese is onion&lt;/li&gt;
&lt;li&gt;If you leave them out in the sun for too long they start to grow roots&lt;/li&gt;
&lt;li&gt;They are eaten heaps in Libya&lt;/li&gt;
&lt;li&gt;The heaviest onion was 10 pounds and 14 ounces&lt;/li&gt;
&lt;li&gt;Onions don’t grow on the moon&lt;/li&gt;
&lt;li&gt;Onion spelled backwards is noinO&lt;/li&gt;
&lt;li&gt;They are not like cakes&lt;/li&gt;
&lt;li&gt;Onion is pronounced UN-YIN&lt;/li&gt;
&lt;li&gt;If onion was a number it would be 151491514&lt;/li&gt;
&lt;li&gt;An onion can make a bland sauce&lt;/li&gt;
&lt;li&gt;Onions has 3 vowels&lt;/li&gt;
&lt;li&gt;Onions have skins&lt;/li&gt;
&lt;li&gt;Onions don’t like garlic&lt;/li&gt;
&lt;li&gt;there are nice deep fried as rings&lt;/li&gt;
&lt;li&gt;Onion rhymes with bunion&lt;/li&gt;
&lt;li&gt;Onions make really bad gifts…&lt;/li&gt;
&lt;li&gt;Alliumphobia is the fear of smelling onion and garlic&lt;/li&gt;
&lt;li&gt;Onions wont stop vampires…&lt;/li&gt;
&lt;li&gt;Onions should NEVER be juiced&lt;/li&gt;
&lt;/ol&gt;
&lt;/blockquote&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgheadline1&quot; class=&quot;outline-3&quot;&gt;
&lt;h3 id=&quot;orgheadline1&quot;&gt;&lt;span class=&quot;section-number-3&quot;&gt;1.1&lt;/span&gt; to know one&apos;s onions&lt;/h3&gt;
&lt;div class=&quot;outline-text-3&quot; id=&quot;text-1-1&quot;&gt;
&lt;p&gt;
形容某人在某一方面很在行：
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;That car salesman certainly knew his onions, didn&apos;t he? 那个汽车销售一定（对汽车销售）很在行，不是吗？&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
那么问题又来了，为什么“知道自己的洋葱”是很在行的意思呢？根据我的调查，是因为一百多年前，有一个叫 Charles Talbut Onions 的人，他参与了牛津英语词典（Oxford
English Dictionary）编撰，是位单词专家，后来不知道为什么就有 to know one&apos;s
onions 的说法，用来形容某人在某一行业很在行的意思。欲知详情，请点击附录链接阅读。
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgheadline2&quot; class=&quot;outline-3&quot;&gt;
&lt;h3 id=&quot;orgheadline2&quot;&gt;&lt;span class=&quot;section-number-3&quot;&gt;1.2&lt;/span&gt; traiter qn aux petits oignons&lt;/h3&gt;
&lt;div class=&quot;outline-text-3&quot; id=&quot;text-1-2&quot;&gt;
&lt;p&gt;
精心照顾某人。把某人放到小洋葱里（层层呵护）？法国人的浪漫气息体现在在日常生活中啊。
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;Je les traite aux petits oignons.&lt;sup&gt;(fr)&lt;/sup&gt; I give them total care. 我精心照顾他们。&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;


&lt;div id=&quot;outline-container-orgheadline3&quot; class=&quot;outline-3&quot;&gt;
&lt;h3 id=&quot;orgheadline3&quot;&gt;&lt;span class=&quot;section-number-3&quot;&gt;1.3&lt;/span&gt; Occupe-toi de tes oignons&lt;/h3&gt;
&lt;div class=&quot;outline-text-3&quot; id=&quot;text-1-3&quot;&gt;
&lt;p&gt;
管好自己的事情。管好自己的洋葱？Mind your own business.
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgheadline5&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgheadline5&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;2&lt;/span&gt; Summary&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-2&quot;&gt;
&lt;p&gt;
这次学习了洋葱的英法德写法，并且尝试性的扩展到了日韩的单词学习。感觉有点心有余而力不足啊……
&lt;/p&gt;

&lt;p&gt;
I feel that, in vacabulary study, I am not the one who knows his onions, but I
will try to learn as many as possible.
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
</content>
 </entry>
 
 <entry>
   <title>单词本：蔬菜之大蒜</title>
   <link href="http://kimi.im/2016-09-05-english-garlic"/>
   <updated>2016-09-05T00:00:00+00:00</updated>
   <id>http://kimi.im/english-garlic</id>
   <content type="html">&lt;div id=&quot;outline-container-orgheadline1&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgheadline1&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;1&lt;/span&gt; garlic&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-1&quot;&gt;
&lt;p&gt;
前面几篇文章学习了小葱 chives，大葱 leek，洋葱 onion，本文继续学习另一个在我看来差不多是同类的东西：大蒜 garlic。
&lt;/p&gt;

&lt;p&gt;
说起 garlic，其实我一直以来以为咖喱就是 garlic 的中文音译，也就是说，我一直以为咖喱就是大蒜粉做的乱七八糟的东西。至今，我才知道，咖喱是 curry，是由多种香料组成的调料，主料是姜黄:
&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;
咖喱是以姜黄为主料，另加多种香辛料（如芫荽籽、桂皮、辣椒、白胡椒、小茴香、八角、孜然等）配制而成的复合调味料。其味辛辣带甜，具有一种特别的香气。&lt;sup&gt;&lt;a id=&quot;fnr.1&quot; class=&quot;footref&quot; href=&quot;#fn.1&quot;&gt;1&lt;/a&gt;&lt;/sup&gt;
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;
以上澄清了我一直以来的困惑。不知诸位是否有这样的疑惑？也有可能这仅仅是我的孤陋寡闻了。
&lt;/p&gt;

&lt;p&gt;
回到大蒜主题，德语写作 der Knoblauch&lt;sup&gt;(de)&lt;/sup&gt;，而法语写作 l(e)&apos;ail&lt;sup&gt;(fr)&lt;/sup&gt;。
&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;
Homère, 850 ans avant Jésus Christ, insistait sur les vertus médicinales de
&lt;i&gt;l&apos;ail&lt;/i&gt;. Hippocrate, Aristophane et Aristote ont longuement vanté les mérites de
&lt;i&gt;l&apos;ail&lt;/i&gt;, symbole de force physique.&lt;sup&gt;&lt;a id=&quot;fnr.2&quot; class=&quot;footref&quot; href=&quot;#fn.2&quot;&gt;2&lt;/a&gt;&lt;/sup&gt;
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;
以上法语引文说：公元前 850 年的荷马坚信大蒜油很高的药用价值。古希腊的希波克拉底，阿里斯托芬以及亚里士多德都曾赞美过大蒜的功效。
&lt;/p&gt;

&lt;a data-flickr-embed=&quot;true&quot;  href=&quot;https://www.flickr.com/photos/kimim-photo/28852070073/in/dateposted-public/&quot; title=&quot;荷马&quot;&gt;&lt;img src=&quot;https://c2.staticflickr.com/8/7750/28852070073_ae3ca92008_b.jpg&quot; width=&quot;470&quot; height=&quot;690&quot; alt=&quot;荷马&quot;&gt;&lt;/a&gt;&lt;script async src=&quot;//embedr.flickr.com/assets/client-code.js&quot; charset=&quot;utf-8&quot;&gt;&lt;/script&gt;
&lt;p&gt;
&lt;i&gt;19世纪末的法国学院派画家威廉·阿道夫 ·布格罗（ William Adolphe Bouguereau）的作品《荷马和他的向导》&lt;/i&gt;
&lt;/p&gt;

&lt;p&gt;
可见大蒜是多么古老的一种蔬菜啊！
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgheadline2&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgheadline2&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;2&lt;/span&gt; garlicky&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-2&quot;&gt;
&lt;p&gt;
大蒜似的，有大蒜气的。
&lt;/p&gt;

&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;nuts and chips are even seasoned with garlic powder in order to improve its
garlicky taste. 一些坚果和薯片甚至直接用蒜粉来增加其蒜的味道。&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgheadline3&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgheadline3&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;3&lt;/span&gt; alliaceous&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-3&quot;&gt;
&lt;p&gt;
葱蒜味的。如果知道大蒜的学名叫 Allium sativum 就比较容易弄明白为什么大蒜味可以写成这样了。allium &amp;#x2013;&amp;gt; alliaceous，同时也就知道了为什么法语里大蒜写作 ail 了。另外，法语里蒜味写作 alliacé&lt;sup&gt;(fr)&lt;/sup&gt;。
&lt;/p&gt;

&lt;p&gt;
另外，如果知道 garlic 源自古英语 gārlēac，也就知道了大蒜和大葱 leek（lēac）其实是有一些渊源的。
&lt;/p&gt;

&lt;p&gt;
所以说，事物内在都是有着千丝万缕的联系的。
&lt;/p&gt;

&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;Onions, leeks, garlic, chives are alliaceous plants. 洋葱、大葱、大蒜、香葱都是葱蒜味调料的植物。&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgheadline4&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgheadline4&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;4&lt;/span&gt; Summary&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-4&quot;&gt;
&lt;p&gt;
本文主要讨论了大蒜的单词 garlic，der Knoblauch&lt;sup&gt;(de)&lt;/sup&gt;，和 l&apos;ail&lt;sup&gt;(fr)&lt;/sup&gt;；以及大蒜味
garlicky 和 alliaceous，以及法语的 alliacé&lt;sup&gt;(fr)&lt;/sup&gt;。
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;footnotes&quot;&gt;
&lt;h2 class=&quot;footnotes&quot;&gt;Footnotes: &lt;/h2&gt;
&lt;div id=&quot;text-footnotes&quot;&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.1&quot; class=&quot;footnum&quot; href=&quot;#fnr.1&quot;&gt;1&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;http://baike.baidu.com/subview/36704/10159996.htm&quot;&gt;http://baike.baidu.com/subview/36704/10159996.htm&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.2&quot; class=&quot;footnum&quot; href=&quot;#fnr.2&quot;&gt;2&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;http://plant-certifie-ail.org/pages/vertus.php&quot;&gt;http://plant-certifie-ail.org/pages/vertus.php&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;


&lt;/div&gt;
&lt;/div&gt;
</content>
 </entry>
 
 <entry>
   <title>单词本：蔬菜之韭菜</title>
   <link href="http://kimi.im/2016-09-05-english-chives"/>
   <updated>2016-09-05T00:00:00+00:00</updated>
   <id>http://kimi.im/english-chives</id>
   <content type="html">&lt;div id=&quot;outline-container-orgheadline1&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgheadline1&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;1&lt;/span&gt; chives&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-1&quot;&gt;
&lt;p&gt;
本来打算学习韭菜的，后来发现韭菜原来叫 Chinese chives 中国细香葱。而 chives 则是细香葱的意思。百度百科说：
&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;
虾夷葱 (Allium schoenoprasum)，又称小葱、细香葱、香葱，或直接简称为葱。&lt;sup&gt;&lt;a id=&quot;fnr.1&quot; class=&quot;footref&quot; href=&quot;#fn.1&quot;&gt;1&lt;/a&gt;&lt;/sup&gt;
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;
虾夷葱我还是头一次听说，好奇怪的名字啊。说起虾夷，我记得之前我在一本关于日本的书中了解到，北海道地区的原住民就叫虾夷人&lt;sup&gt;&lt;a id=&quot;fnr.2&quot; class=&quot;footref&quot; href=&quot;#fn.2&quot;&gt;2&lt;/a&gt;&lt;/sup&gt;，体型比较矮小，但很凶悍。经常骚扰日本天皇的领地，但最终被天皇给灭了。或许是因为这种葱来自北海道，又或许是葱的体型细细的如虾夷人？不得而知了。顺便提一下，北海道古称虾夷，日语写法为：えみし（emishi）。也许下一次你去北海道玩，和北海道的日本人说 えみし，他们定会惊讶于你的人文地理历史知识渊博。
&lt;/p&gt;

&lt;p&gt;
德语管虾夷葱叫 der Schnittlauch&lt;sup&gt;(de)&lt;/sup&gt;，schnitt 切割，der Lauch[laux]&lt;sup&gt;(de)&lt;/sup&gt; 葱。小切葱？
&lt;/p&gt;

&lt;p&gt;
法语叫 la ciboulette[sibulɛt]&lt;sup&gt;(fr)&lt;/sup&gt;，而 la ciboule[sibul]&lt;sup&gt;(fr)&lt;/sup&gt; 则是葱的名号。La
ciboulette est une plante aromatique&lt;sup&gt;(fr)&lt;/sup&gt;. 小香葱是一种香料植物。
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgheadline2&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgheadline2&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;2&lt;/span&gt; Chinese chives&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-2&quot;&gt;
&lt;p&gt;
韭菜好像是中国特有，所以被叫做中国细香葱。另外还有其他好多名字：garlic chives 大蒜葱, oriental garlic 东方大蒜, Asian chives 亚洲小香葱, Chinese chives 中国小香葱, Chinese leek 中国大葱&lt;sup&gt;&lt;a id=&quot;fnr.3&quot; class=&quot;footref&quot; href=&quot;#fn.3&quot;&gt;3&lt;/a&gt;&lt;/sup&gt;。
&lt;/p&gt;

&lt;p&gt;
法语叫 la ciboule(tte) chinoise&lt;sup&gt;(fr)&lt;/sup&gt;，和英语一样，也认为韭菜是中国特有的小葱。
&lt;/p&gt;

&lt;p&gt;
德语叫 der Knoblauch-Schnittlauch&lt;sup&gt;(fr)&lt;/sup&gt;，就有点怪怪的了：葱蒜切葱&lt;sup&gt;&lt;a id=&quot;fnr.4&quot; class=&quot;footref&quot; href=&quot;#fn.4&quot;&gt;4&lt;/a&gt;&lt;/sup&gt;吗？
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgheadline5&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgheadline5&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;3&lt;/span&gt; leek&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-3&quot;&gt;
&lt;p&gt;
前面出现过的，韭菜又叫 Chinese leek，而 leek 则是大葱的名字。知道了 leek 再回过头看看小葱的的名字 der Schnittlauch 就不太陌生了。Lauch 和 leek 不就是一对双胞胎么。
&lt;/p&gt;

&lt;p&gt;
大葱的法语名字却叫 le poireau[pwaʀo]&lt;sup&gt;(fr)&lt;/sup&gt;，另外还有法语名字如 l(a)&apos;asperge du
pauvre&lt;sup&gt;(fr)&lt;/sup&gt;，l&apos;asperge&lt;sup&gt;(fr)&lt;/sup&gt; 芦笋，pauvre&lt;sup&gt;(fr)&lt;/sup&gt; 穷人。正如后面会提到的，在英语里
not worth a leek 形容毫无价值，在法语里穷人的芦笋就是大葱。可见英国法国人的心目中大葱多么低廉啊。
&lt;/p&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgheadline3&quot; class=&quot;outline-3&quot;&gt;
&lt;h3 id=&quot;orgheadline3&quot;&gt;&lt;span class=&quot;section-number-3&quot;&gt;3.1&lt;/span&gt; not worth a leek&lt;/h3&gt;
&lt;div class=&quot;outline-text-3&quot; id=&quot;text-3-1&quot;&gt;
&lt;p&gt;
大葱可能比较容易种植，所以比较廉价，就有毫无价值之意了：
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;What he said is not worth a leek. 他说的东西不值一葱。只值一葱已经很低贱了，不值一葱那简直太伤人了。&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgheadline4&quot; class=&quot;outline-3&quot;&gt;
&lt;h3 id=&quot;orgheadline4&quot;&gt;&lt;span class=&quot;section-number-3&quot;&gt;3.2&lt;/span&gt; to eat the leek&lt;/h3&gt;
&lt;div class=&quot;outline-text-3&quot; id=&quot;text-3-2&quot;&gt;
&lt;p&gt;
另外大葱的味道不是人人都喜欢，所以 to eat the leek 有忍辱负重之意：
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;James felt bad when he was obliged to eat the leek. 詹姆士被迫忍受屈辱感觉很难受。&lt;/li&gt;
&lt;li&gt;She had to eat the leek then. 那时候她只能忍受屈辱。&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgheadline6&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgheadline6&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;4&lt;/span&gt; Summary&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-4&quot;&gt;
&lt;p&gt;
本文本来计划学习韭菜的名字，后来发现韭菜其实在英国法国被称作中国小香葱（Chinese
chives，la ciboulette chinoise&lt;sup&gt;(fr)&lt;/sup&gt; ），在德国被称作葱蒜切葱（der
Knoblauch-Schnittlauch&lt;sup&gt;(de)&lt;/sup&gt;）。于是又学习了小香葱（chives，la ciboulette&lt;sup&gt;(fr)&lt;/sup&gt;，
der Schnittlauch&lt;sup&gt;(de)&lt;/sup&gt; ）和大葱（leek，le poireau&lt;sup&gt;(fr)&lt;/sup&gt;，der Lauch&lt;sup&gt;(de)&lt;/sup&gt; ）两组单词。
&lt;/p&gt;

&lt;p&gt;
另外还学会了英语里两个成语不值一葱（not worth a leek）和忍辱吃葱（to eat the
leek）。下次吃葱的时候可以羞辱讨厌的人说：You are not worth a leek, I must let
you to eat the leek!  （你不值一文，我必定让你忍受屈辱！）
&lt;/p&gt;

&lt;p&gt;
不过话说回来，我还是希望诸位这一生不要遇到这样的混蛋，希望你们能遇到的都是和小香葱一样可爱的人。
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;footnotes&quot;&gt;
&lt;h2 class=&quot;footnotes&quot;&gt;Footnotes: &lt;/h2&gt;
&lt;div id=&quot;text-footnotes&quot;&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.1&quot; class=&quot;footnum&quot; href=&quot;#fnr.1&quot;&gt;1&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;http://baike.baidu.com/view/92921.htm&quot;&gt;http://baike.baidu.com/view/92921.htm&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.2&quot; class=&quot;footnum&quot; href=&quot;#fnr.2&quot;&gt;2&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;http://baike.baidu.com/view/76793.htm&quot;&gt;http://baike.baidu.com/view/76793.htm&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.3&quot; class=&quot;footnum&quot; href=&quot;#fnr.3&quot;&gt;3&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;https://en.wikipedia.org/wiki/Allium_tuberosum&quot;&gt;https://en.wikipedia.org/wiki/Allium_tuberosum&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.4&quot; class=&quot;footnum&quot; href=&quot;#fnr.4&quot;&gt;4&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;https://de.wikipedia.org/wiki/Knoblauch-Schnittlauch&quot;&gt;https://de.wikipedia.org/wiki/Knoblauch-Schnittlauch&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;


&lt;/div&gt;
&lt;/div&gt;
</content>
 </entry>
 
 <entry>
   <title>单词本：蔬菜之豆豆</title>
   <link href="http://kimi.im/2016-09-04-english-pea"/>
   <updated>2016-09-04T00:00:00+00:00</updated>
   <id>http://kimi.im/english-pea</id>
   <content type="html">&lt;p&gt;
上一篇我们一起学习了各种瓜瓜的名字，这篇再来一起学一学各种豆豆。
&lt;/p&gt;

&lt;div id=&quot;outline-container-orgheadline7&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgheadline7&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;1&lt;/span&gt; pea&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-1&quot;&gt;
&lt;p&gt;
pea 是豌豆的名字：
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;Every Sunday, dad made a beautiful pean and ham soup. 每周日晚上老爸会做美味的豌豆火腿汤。&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
豌豆是豆类的一种，英语中豆类叫 legume，而法语中 le légume&lt;sup&gt;(fr)&lt;/sup&gt; 其实是蔬菜的统称。这个在之前的文章中有介绍（&lt;a href=&quot;http://kimi.im/2016-08-16-english-vegetable&quot;&gt;August 16, 2016 » 单词本：蔬菜&lt;/a&gt;）。我们是不是可以这样认为，英国人的豆类在法国人看来是蔬菜的代表性品种。
&lt;/p&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgheadline1&quot; class=&quot;outline-3&quot;&gt;
&lt;h3 id=&quot;orgheadline1&quot;&gt;&lt;span class=&quot;section-number-3&quot;&gt;1.1&lt;/span&gt; pea pod&lt;/h3&gt;
&lt;div class=&quot;outline-text-3&quot; id=&quot;text-1-1&quot;&gt;
&lt;p&gt;
豌豆荚。iPod 是指某种智能豆荚吗？la cosse&lt;sup&gt;(fr)&lt;/sup&gt;，die Schote&lt;sup&gt;(de)&lt;/sup&gt;。
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgheadline2&quot; class=&quot;outline-3&quot;&gt;
&lt;h3 id=&quot;orgheadline2&quot;&gt;&lt;span class=&quot;section-number-3&quot;&gt;1.2&lt;/span&gt; cowpea&lt;/h3&gt;
&lt;div class=&quot;outline-text-3&quot; id=&quot;text-1-2&quot;&gt;
&lt;p&gt;
豇豆，直译是牛豆。这是为什么呢？是牛喜欢吃吗？
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgheadline3&quot; class=&quot;outline-3&quot;&gt;
&lt;h3 id=&quot;orgheadline3&quot;&gt;&lt;span class=&quot;section-number-3&quot;&gt;1.3&lt;/span&gt; suger pea&lt;/h3&gt;
&lt;div class=&quot;outline-text-3&quot; id=&quot;text-1-3&quot;&gt;
&lt;p&gt;
甜豆。大概是豌豆的一种，趁嫩的时候吃，口味甜甜的。
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgheadline4&quot; class=&quot;outline-3&quot;&gt;
&lt;h3 id=&quot;orgheadline4&quot;&gt;&lt;span class=&quot;section-number-3&quot;&gt;1.4&lt;/span&gt; snow pea&lt;/h3&gt;
&lt;div class=&quot;outline-text-3&quot; id=&quot;text-1-4&quot;&gt;
&lt;p&gt;
荷兰豆。豆荚扁扁的，连豆荚一起炒着吃的。
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgheadline5&quot; class=&quot;outline-3&quot;&gt;
&lt;h3 id=&quot;orgheadline5&quot;&gt;&lt;span class=&quot;section-number-3&quot;&gt;1.5&lt;/span&gt; like two peas in a pod&lt;/h3&gt;
&lt;div class=&quot;outline-text-3&quot; id=&quot;text-1-5&quot;&gt;
&lt;p&gt;
就像同一个豆荚里的俩豌豆，形容两个事物长的很像。
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;Doris and Flora are inseparable and they&apos;re like two peas in a pod. 多丽丝和福罗拉总是不分开，就像一个豆荚里的两个豌豆。&lt;/li&gt;
&lt;li&gt;You can tell they&apos;re brothers at a glance - they&apos;re like two peas in a pod. 你一眼就能看出他俩是兄弟，他们就像一个豌豆荚里的两颗豌豆。&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgheadline6&quot; class=&quot;outline-3&quot;&gt;
&lt;h3 id=&quot;orgheadline6&quot;&gt;&lt;span class=&quot;section-number-3&quot;&gt;1.6&lt;/span&gt; peabrain&lt;/h3&gt;
&lt;div class=&quot;outline-text-3&quot; id=&quot;text-1-6&quot;&gt;
&lt;p&gt;
“没脑子”的不太文明的说法。
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;You&apos;re always knocking things over you stupid, stupid peabrain.&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgheadline13&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgheadline13&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;2&lt;/span&gt; bean&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-2&quot;&gt;
&lt;p&gt;
另外一种豆。比豌豆要大一些的另外一种豆。说实话，像我这样稻谷不分的人，真的不知道豌豆类豆子和大豆类豆子有什么差别。只能大概猜测一下，bean 应该是大黄豆这样的大豆子，而 pea 则是圆圆的小豌豆，小甜豆那一类的豆子。
&lt;/p&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgheadline8&quot; class=&quot;outline-3&quot;&gt;
&lt;h3 id=&quot;orgheadline8&quot;&gt;&lt;span class=&quot;section-number-3&quot;&gt;2.1&lt;/span&gt; soybean&lt;/h3&gt;
&lt;div class=&quot;outline-text-3&quot; id=&quot;text-2-1&quot;&gt;
&lt;p&gt;
大豆。soy 酱油。也许因为主要用来做酱油，所以取名叫 soybean。
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgheadline9&quot; class=&quot;outline-3&quot;&gt;
&lt;h3 id=&quot;orgheadline9&quot;&gt;&lt;span class=&quot;section-number-3&quot;&gt;2.2&lt;/span&gt; young soybean&lt;/h3&gt;
&lt;div class=&quot;outline-text-3&quot; id=&quot;text-2-2&quot;&gt;
&lt;p&gt;
毛豆。年轻的大豆。
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgheadline10&quot; class=&quot;outline-3&quot;&gt;
&lt;h3 id=&quot;orgheadline10&quot;&gt;&lt;span class=&quot;section-number-3&quot;&gt;2.3&lt;/span&gt; broad bean&lt;/h3&gt;
&lt;div class=&quot;outline-text-3&quot; id=&quot;text-2-3&quot;&gt;
&lt;p&gt;
蚕豆。豆子扁扁宽宽的，所以就叫“宽豆”。
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgheadline11&quot; class=&quot;outline-3&quot;&gt;
&lt;h3 id=&quot;orgheadline11&quot;&gt;&lt;span class=&quot;section-number-3&quot;&gt;2.4&lt;/span&gt; haricot bean&lt;/h3&gt;
&lt;div class=&quot;outline-text-3&quot; id=&quot;text-2-4&quot;&gt;
&lt;p&gt;
扁豆，四季豆。
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgheadline12&quot; class=&quot;outline-3&quot;&gt;
&lt;h3 id=&quot;orgheadline12&quot;&gt;&lt;span class=&quot;section-number-3&quot;&gt;2.5&lt;/span&gt; sword bean&lt;/h3&gt;
&lt;div class=&quot;outline-text-3&quot; id=&quot;text-2-5&quot;&gt;
&lt;p&gt;
刀豆。
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgheadline14&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgheadline14&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;3&lt;/span&gt; Summary&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-3&quot;&gt;
&lt;p&gt;
说实在的，有关豆子的名词有些难到我了，因为我平时吃豆子真的不太关心豆子分别叫什么名字。不过系统的学了一下之后，渐渐还是有一些清晰直观的感受了。
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
</content>
 </entry>
 
 <entry>
   <title>单词本：蔬菜之瓜瓜</title>
   <link href="http://kimi.im/2016-09-03-english-gourd"/>
   <updated>2016-09-03T00:00:00+00:00</updated>
   <id>http://kimi.im/english-gourd</id>
   <content type="html">&lt;div id=&quot;outline-container-orgheadline1&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgheadline1&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;1&lt;/span&gt; 回顾&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-1&quot;&gt;
&lt;p&gt;
今天的主题是各类瓜瓜，在学习瓜瓜之前，我们来复习一下半个月时间学的食物类单词，回过头看看学过的单词还是很有成就感的，第一次坚持这么长时间一直不断写点东西：
&lt;/p&gt;

&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;&lt;a href=&quot;http://kimi.im/2016-08-14-english-food&quot;&gt;August 14, 2016 » 单词本：谷物&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://kimi.im/2016-08-16-english-vegetable&quot;&gt;August 16, 2016 » 单词本：蔬菜之萝卜胡萝卜&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://kimi.im/2016-08-17-english-cabbage&quot;&gt;August 17, 2016 » 单词本：蔬菜之卷心菜&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://kimi.im/2016-08-19-english-cauliflower&quot;&gt;August 19, 2016 » 单词本：蔬菜之花菜&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://kimi.im/2016-08-20-english-celery&quot;&gt;August 20, 2016 » 单词本：蔬菜之芹菜&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://kimi.im/2016-08-22-english-aubergine&quot;&gt;August 22, 2016 » 单词本：蔬菜之茄子&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://kimi.im/2016-08-25-english-tomato&quot;&gt;August 25, 2016 » 单词本：蔬菜之番茄&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://kimi.im/2016-08-26-english-chilli&quot;&gt;August 26, 2016 » 单词本：蔬菜之红辣椒&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://kimi.im/2016-08-28-english-cucumber&quot;&gt;August 28, 2016 » 单词本：蔬菜之黄瓜&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://kimi.im/2016-08-29-english-courgette&quot;&gt;August 29, 2016 » 单词本：蔬菜之西葫芦&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://kimi.im/2016-08-31-english-pumpkin&quot;&gt;August 31, 2016 » 单词本：蔬菜之南瓜&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
看完上面的列表，心中真是满满的成就感。
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgheadline3&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgheadline3&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;2&lt;/span&gt; gourd[gʊəd]&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-2&quot;&gt;
&lt;p&gt;
自我满足之后，还是回到现实，踏踏实实继续学习吧。
&lt;/p&gt;

&lt;p&gt;
不少瓜的名字都带有 gourd，而 gourd 其实是葫芦的意思：a fleshy, typically large
fruit with a hard skin, some varieties of which are edible。实际上西瓜（water
melon），南瓜（pumpkin），黄瓜（cucumber）也属于 gourd，只是可能太常见了，就有了专属名字。
&lt;/p&gt;

&lt;p&gt;
另外，其实我一直有这么个疑问，gourd 和我朝的瓜（Guā）是否有一些联系，因为两者的读音很相似啊。有待继续考证，暂且不论。
&lt;/p&gt;

&lt;p&gt;
gourd，德语 der Kürbis[Kụ̈rbis]&lt;sup&gt;(de)&lt;/sup&gt;，法语 la calebasse[kalbas]&lt;sup&gt;(fr)&lt;/sup&gt;。
&lt;/p&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgheadline2&quot; class=&quot;outline-3&quot;&gt;
&lt;h3 id=&quot;orgheadline2&quot;&gt;&lt;span class=&quot;section-number-3&quot;&gt;2.1&lt;/span&gt; out of one&apos;s gourd&lt;/h3&gt;
&lt;div class=&quot;outline-text-3&quot; id=&quot;text-2-1&quot;&gt;
&lt;p&gt;
离开某人的葫芦？形容一个人的心不在焉的样子，或者疯狂的状态。
&lt;/p&gt;

&lt;p&gt;
这令我想到了庄子《齐物论》篇中南郭子綦与颜成子游的一段对话：
&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;
南郭子綦隐机而坐，仰天而嘘，荅焉似丧其耦。颜成子游立侍乎前，曰：“何居乎？形固可使如槁木，而心固可使如死灰乎？今之隐机者，非昔之隐机者也。”子綦曰：“偃，不亦善乎，而问之也？今者吾丧我，汝知之乎？”
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;
《齐物论》开篇描写了南郭子綦靠着桌子在那一坐，仰着头往天空吐一口气，吧嗒一下好像灵魂离开肉体。学生颜成子游站在旁边感觉很奇怪，说：“老师啊，今天你怎么回事？你的身体看起来像块烂木头，而你的心怎么像烧尽了的煤灰一样没有生机？今天靠在桌子边上的样子，跟往常不太一样啊。”老师就回答说：“小偃啊，你的问题问的太好了（潜台词就是：你太了解老师了，老师很喜欢你），你知道吗，今天我让我的那个灵魂飞出去玩了一圈，你不知道吧？”
&lt;/p&gt;

&lt;p&gt;
我觉得，南郭子綦“吧嗒”一下趴在桌子上的样子大概就是 out of his gourd 的状态，就是灵魂离开了身体的状态。用葫芦来形容一个人的肉体其实满贴切的，葫芦的样子看起来就好像是一个坐着的人么。
&lt;/p&gt;

&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;he was obviously stoned out of his gourd. 他已经石化，灵魂已经出体。&lt;/li&gt;
&lt;li&gt;He&apos;s out of his gourd with 1,249-pound pumpkin.&lt;sup&gt;&lt;a id=&quot;fnr.1&quot; class=&quot;footref&quot; href=&quot;#fn.1&quot;&gt;1&lt;/a&gt;&lt;/sup&gt; 1249 磅的南瓜让他魂不守舍（大概是惊喜的意思吧）。&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgheadline4&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgheadline4&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;3&lt;/span&gt; white gourd&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-3&quot;&gt;
&lt;p&gt;
冬瓜的一个名字，大概因为它果皮比较白，所以叫 white gourd，此外它还有其他名字：
&lt;/p&gt;

&lt;p&gt;
The white gourd, also called winter melon（冬瓜）, ash gourd（灰葫芦）, wax
gourd（蜡葫芦）, winter gourd（冬葫芦）, tallow gourd（脂葫芦）.&lt;sup&gt;&lt;a id=&quot;fnr.2&quot; class=&quot;footref&quot; href=&quot;#fn.2&quot;&gt;2&lt;/a&gt;&lt;/sup&gt;
&lt;/p&gt;


&lt;p&gt;
德语叫 der Wachskürbis auch Wintermelone&lt;sup&gt;(de)&lt;/sup&gt;，法语叫 La courge cireuse&lt;sup&gt;(fr)&lt;/sup&gt;。
&lt;/p&gt;

&lt;p&gt;
还有其他好多名字，就不一一解释了：
&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;
Nom commun : courge cireuse, courge à la cire, bidao, bénincasa, pastèque de
Chine. de : Wachskürbis ; en : winter melon, ash gourd, wax gourd ; es :
calabaza blanca.&lt;sup&gt;&lt;a id=&quot;fnr.3&quot; class=&quot;footref&quot; href=&quot;#fn.3&quot;&gt;3&lt;/a&gt;&lt;/sup&gt;
&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgheadline5&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgheadline5&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;4&lt;/span&gt; towel gourd&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-4&quot;&gt;
&lt;p&gt;
丝瓜。正如我们给它取名是因为它的瓤可以做洗碗丝，洋人叫它毛巾瓜，应该也是这个原因。
&lt;/p&gt;

&lt;p&gt;
另外丝瓜属的学名叫 luffa，所以有时候丝瓜也叫 luffa。法语和德语一样都叫 luffa。
&lt;/p&gt;

&lt;p&gt;
丝瓜络叫 loofah 大概就是从丝瓜属这个学名变过来的，法语 le loofa&lt;sup&gt;(fr)&lt;/sup&gt;，德语 der
Luffaschwamm&lt;sup&gt;(de)&lt;/sup&gt;。
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgheadline6&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgheadline6&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;5&lt;/span&gt; bitter gourd&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-5&quot;&gt;
&lt;p&gt;
苦瓜。再来看看它的其他名字：
&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;
Momordica charantia, known as bitter melon, bitter gourd, bitter squash, or
balsam-pear, has names in other languages which have entered English as
loanwords, e.g. goya from Okinawan and karela from Sanskrit.&lt;sup&gt;&lt;a id=&quot;fnr.4&quot; class=&quot;footref&quot; href=&quot;#fn.4&quot;&gt;4&lt;/a&gt;&lt;/sup&gt;
&lt;/p&gt;

&lt;p&gt;
Die Bittermelone (Momordica charantia, auch Bittergurke, Balsambirne oder
Bittere Spring-Gurke; In Japan und vor allem Okinawa als Gōyā bekannt, in
Sanskrit als Karela und in Malayalam als Pavaykka bekannt)&lt;sup&gt;&lt;a id=&quot;fnr.5&quot; class=&quot;footref&quot; href=&quot;#fn.5&quot;&gt;5&lt;/a&gt;&lt;/sup&gt;
&lt;/p&gt;

&lt;p&gt;
La margose, melon amer ou momordique&lt;sup&gt;&lt;a id=&quot;fnr.6&quot; class=&quot;footref&quot; href=&quot;#fn.6&quot;&gt;6&lt;/a&gt;&lt;/sup&gt;
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;
归纳起来有这么几种来源：
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;学名派 Momordica charantia，momordique&lt;sup&gt;(fr)&lt;/sup&gt;&lt;/li&gt;
&lt;li&gt;味道派 bitter melon, bitter squash, die Bittermelone&lt;sup&gt;(de)&lt;/sup&gt;，Bittergurke&lt;sup&gt;(de)&lt;/sup&gt;，
Bittere Spring-Gurke&lt;sup&gt;(de)&lt;/sup&gt;，melon amer&lt;sup&gt;(fr)&lt;/sup&gt;&lt;/li&gt;
&lt;li&gt;外来语派：从日本冲绳语借来的 goya，Gōyā&lt;sup&gt;(de)&lt;/sup&gt;，goyah&lt;sup&gt;(fr)&lt;/sup&gt;，冲绳方言拼法：ゴーヤー。从梵语里借来的叫 karela&lt;/li&gt;
&lt;li&gt;从花的样子联想到的 balsam-pear（凤仙花梨），Balsambirne&lt;sup&gt;(de)&lt;/sup&gt;。&lt;/li&gt;
&lt;li&gt;另外还有无法考证的法语名字 la margose&lt;sup&gt;(fr)&lt;/sup&gt;，&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgheadline7&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgheadline7&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;6&lt;/span&gt; 小结&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-6&quot;&gt;
&lt;p&gt;
本文主要学习了几种常见瓜类的名字，冬瓜 winter gourd，也叫 white gourd 等名字。丝瓜叫 towel gourd，苦瓜叫 bitter gourd。
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;footnotes&quot;&gt;
&lt;h2 class=&quot;footnotes&quot;&gt;Footnotes: &lt;/h2&gt;
&lt;div id=&quot;text-footnotes&quot;&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.1&quot; class=&quot;footnum&quot; href=&quot;#fnr.1&quot;&gt;1&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;http://www.nydailynews.com/new-york/gourd-1-249-pound-pumpkin-article-1.228718&quot;&gt;http://www.nydailynews.com/new-york/gourd-1-249-pound-pumpkin-article-1.228718&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.2&quot; class=&quot;footnum&quot; href=&quot;#fnr.2&quot;&gt;2&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;https://en.wikipedia.org/wiki/Winter_melon&quot;&gt;https://en.wikipedia.org/wiki/Winter_melon&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.3&quot; class=&quot;footnum&quot; href=&quot;#fnr.3&quot;&gt;3&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;https://fr.wikipedia.org/wiki/Courge_cireuse&quot;&gt;https://fr.wikipedia.org/wiki/Courge_cireuse&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.4&quot; class=&quot;footnum&quot; href=&quot;#fnr.4&quot;&gt;4&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;https://en.wikipedia.org/wiki/Momordica_charantia&quot;&gt;https://en.wikipedia.org/wiki/Momordica_charantia&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.5&quot; class=&quot;footnum&quot; href=&quot;#fnr.5&quot;&gt;5&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;https://de.wikipedia.org/wiki/Bittermelone&quot;&gt;https://de.wikipedia.org/wiki/Bittermelone&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.6&quot; class=&quot;footnum&quot; href=&quot;#fnr.6&quot;&gt;6&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;https://fr.wikipedia.org/wiki/Momordica_charantia&quot;&gt;https://fr.wikipedia.org/wiki/Momordica_charantia&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;


&lt;/div&gt;
&lt;/div&gt;
</content>
 </entry>
 
 <entry>
   <title>单词本：蔬菜之南瓜</title>
   <link href="http://kimi.im/2016-08-31-english-pumpkin"/>
   <updated>2016-08-31T00:00:00+00:00</updated>
   <id>http://kimi.im/english-pumpkin</id>
   <content type="html">&lt;p&gt;
昨天柯同学留言说最好可以在单词后面加注音标，这样就不需要额外再查词典了解单词读音。所以今后我会单词后面再附上音标。感谢柯同学的建议！
&lt;/p&gt;

&lt;div id=&quot;outline-container-orgheadline1&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgheadline1&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;1&lt;/span&gt; pumpkin&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-1&quot;&gt;
&lt;p&gt;
南瓜，pumpkin [ˈpʌmpkɪn]，又叫 das Kürbis[ˈkʏɐ.bɪs]&lt;sup&gt;(de)&lt;/sup&gt; 和 la
citrouille[si.tʁuj]&lt;sup&gt;(fr)&lt;/sup&gt;。
&lt;/p&gt;

&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;Starbucks&apos; &lt;i&gt;pumpkin&lt;/i&gt; spice latte chat bot is the perfect Facebook friend. 据说歪果仁喜欢和 Facebook Messenger 中的星巴克南瓜味拿铁&lt;sup&gt;&lt;a id=&quot;fnr.1&quot; class=&quot;footref&quot; href=&quot;#fn.1&quot;&gt;1&lt;/a&gt;&lt;/sup&gt;聊天机器人闲聊。
&lt;sup&gt;&lt;a id=&quot;fnr.2&quot; class=&quot;footref&quot; href=&quot;#fn.2&quot;&gt;2&lt;/a&gt;&lt;/sup&gt;&lt;/li&gt;
&lt;li&gt;Il plante une &lt;i&gt;citrouille&lt;/i&gt; géante. 他种出了一个巨大的南瓜。&lt;/li&gt;
&lt;li&gt;&lt;i&gt;Kürbisse&lt;/i&gt; zählen zu den größten Einzelfrüchten in der Botanik.&lt;sup&gt;(de)&lt;/sup&gt; 南瓜是植物中果实最大的品种之一。&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
此外，还用来指代头，Kopf eines Menschen：
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;avoir la tête comme une &lt;i&gt;citrouille&lt;/i&gt;.&lt;sup&gt;(fr)&lt;/sup&gt; to feel as if one&apos;s head was going to
burst. 感觉头像个南瓜一样大。感觉头要炸掉了。想得太多，生病头痛，或者环境太闹。&lt;/li&gt;
&lt;li&gt;mir dröhnt, schmerzt der &lt;i&gt;Kürbis&lt;/i&gt;.&lt;sup&gt;(de)&lt;/sup&gt; 我的脑袋又涨又疼。&lt;/li&gt;
&lt;li&gt;Kein Hut paßt auf seinen &lt;i&gt;Kürbis&lt;/i&gt;.&lt;sup&gt;(de)&lt;/sup&gt; 他的头戴啥帽子都不合适。&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgheadline2&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgheadline2&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;2&lt;/span&gt; jack-o&apos;-lantern&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-2&quot;&gt;
&lt;p&gt;
学习南瓜单词的时候知道了万圣节的南瓜灯叫 Jack-o&apos;-lantern 或者叫 Jack of the
Lantern。
&lt;/p&gt;

&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;À l’Halloween, les enfants ont placé une &lt;i&gt;citrouille&lt;/i&gt; devant la maison.&lt;sup&gt;(fr)&lt;/sup&gt;
万圣节的时候小朋友会做南瓜灯玩。jack-o&apos;-lantern，也叫 der Halloweenkürbis&lt;sup&gt;(de)&lt;/sup&gt;，
Kürbislaterne&lt;sup&gt;(de)&lt;/sup&gt;。la citrouille halloween&lt;sup&gt;(fr)&lt;/sup&gt;。&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
那么问题来了，为什么南瓜灯叫 Jack 灯笼呢？原来故事是这样的&lt;sup&gt;&lt;a id=&quot;fnr.3&quot; class=&quot;footref&quot; href=&quot;#fn.3&quot;&gt;3&lt;/a&gt;&lt;/sup&gt;：
&lt;/p&gt;

&lt;p&gt;
很久以前有一个叫 Stingy Jacky&lt;sup&gt;&lt;a id=&quot;fnr.4&quot; class=&quot;footref&quot; href=&quot;#fn.4&quot;&gt;4&lt;/a&gt;&lt;/sup&gt;，或者叫 Jack the Smith，他是一个铁匠。这个
Jack 很懒，但脑子还算机灵。有一回他偷了村民的金币，一路被村民们追着逃跑。路上遇到了恶魔撒旦，撒旦说他的死期到了，要来收走他的灵魂。Jack 就想办法逃避死期。告诉撒旦说他有办法证明追他的看似虔诚的村民们是有罪的。这个办法是这样，先让撒旦变成金币藏进 Jack的钱包，等到村民们追上来之后，把撒旦成的金币还给村民，之后，再让撒旦变得金币消失，这样村民们就会互相怀疑谁偷走了金币，互相打起来。撒旦觉得这个办法不错，就答应了。等到撒旦变成金币跳进 Jack 的钱包之后发现钱包里还有一个十字架，十字架的威力限制了撒旦的法力，于是撒旦就被困在钱包里了。
&lt;/p&gt;

&lt;p&gt;
于是 Jack 就要求撒旦答应不拿走他的灵魂，才放撒旦出来。过不了多久，Jack 死了，但是因为他的灵魂充满罪恶，既不能去天堂，也没法跟着撒旦去地狱，所以就变成幽魂游荡在世界上。无处可去的 Jack 再一次去找撒旦说没有光，他不知道该去哪里。撒旦就抛给他一簇冥王哈迪斯的冥火，永远不会熄灭。Jack 就用自己最喜欢出的萝卜雕刻出了一盏灯，把冥火放进去，提着萝卜灯笼到处寻找休息的地方。后来大概因为南瓜比较容易雕刻，就演变为南瓜灯了。
&lt;/p&gt;

&lt;p&gt;
南瓜灯据说能防止幽灵闯入家中。还能让吸血鬼现出原型，现出原形的吸血鬼就不敢伤害他人了。
&lt;/p&gt;

&lt;p&gt;
以上就是 Jack-o&apos;-lantern 的由来了。
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgheadline3&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgheadline3&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;3&lt;/span&gt; Summary&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-3&quot;&gt;
&lt;p&gt;
本文先学习了南瓜的单词 pumpkin&lt;sup&gt;(en)&lt;/sup&gt;，das Kürbis[ˈkʏɐ.bɪs]&lt;sup&gt;(de)&lt;/sup&gt; 和 la
citrouille[si.tʁuj]&lt;sup&gt;(fr)&lt;/sup&gt;。知道了南瓜还常常被用来形容疼痛发胀的大头。之后还知道万圣节南瓜灯 Jack-o&apos;-lantern 的由来。
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;footnotes&quot;&gt;
&lt;h2 class=&quot;footnotes&quot;&gt;Footnotes: &lt;/h2&gt;
&lt;div id=&quot;text-footnotes&quot;&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.1&quot; class=&quot;footnum&quot; href=&quot;#fnr.1&quot;&gt;1&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;http://www.starbucks.com/menu/drinks/espresso/pumpkin-spice-latte&quot;&gt;http://www.starbucks.com/menu/drinks/espresso/pumpkin-spice-latte&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.2&quot; class=&quot;footnum&quot; href=&quot;#fnr.2&quot;&gt;2&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;http://www.theverge.com/2016/8/29/12693096/starbucks-pumpkin-spice-latte-chat-bot-facebook-messenger&quot;&gt;http://www.theverge.com/2016/8/29/12693096/starbucks-pumpkin-spice-latte-chat-bot-facebook-messenger&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.3&quot; class=&quot;footnum&quot; href=&quot;#fnr.3&quot;&gt;3&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;https://en.wikipedia.org/wiki/Jack-o&apos;-lantern#Folklore&quot;&gt;https://en.wikipedia.org/wiki/Jack-o&apos;-lantern#Folklore&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.4&quot; class=&quot;footnum&quot; href=&quot;#fnr.4&quot;&gt;4&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;https://en.wikipedia.org/wiki/Stingy_Jack&quot;&gt;https://en.wikipedia.org/wiki/Stingy_Jack&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;


&lt;/div&gt;
&lt;/div&gt;
</content>
 </entry>
 
 <entry>
   <title>单词本：蔬菜之西葫芦</title>
   <link href="http://kimi.im/2016-08-29-english-courgette"/>
   <updated>2016-08-29T00:00:00+00:00</updated>
   <id>http://kimi.im/english-courgette</id>
   <content type="html">&lt;div id=&quot;outline-container-orgheadline1&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgheadline1&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;1&lt;/span&gt; courgette&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-1&quot;&gt;
&lt;p&gt;
说起西葫芦，说实话，从外观来看，本人不太能把它和丝瓜区分开来的。但是两者的口味还是有一些差异的。西葫芦更脆一些，略微有些苦味；而丝瓜则嫩一些，有些甜味。从口感和口味来看，我更推荐丝瓜。
&lt;/p&gt;

&lt;p&gt;
西葫芦英式英语名字叫 courgette，美式英语叫 zucchini。德语叫 die Zucchini&lt;sup&gt;(de)&lt;/sup&gt;，法语叫 le zucchini&lt;sup&gt;(fr)&lt;/sup&gt; ou le courgette&lt;sup&gt;(fr)&lt;/sup&gt;。
&lt;/p&gt;

&lt;p&gt;
总之 courgette 和 zucchini 都可以。看起来好像 zucchini 更全球通用一些。
&lt;/p&gt;

&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;Even just one &lt;i&gt;courgette&lt;/i&gt; plant will keep you well supplied for much of the
summer, and it&apos;s one of the easiest veg plants to grow. 一株西葫芦就可提供一整个夏天的果实。这让我想起一个宁波同事，他家院子种了老多的丝瓜黄瓜西葫芦，夏天的时候每天带来冰镇的黄瓜解暑。他说这些都是自家院子里产的，纯天然无污染。真是令人羡慕。&lt;/li&gt;
&lt;li&gt;Chocolate Zucchini Banana Muffins are the perfect breakfast muffins! They are
a great way to use up those garden veggies! 巧克力西葫芦香蕉松饼蛋糕。我实在很难想象会是什么样的口味。如果想尝试下，可以点击附录链接找到食谱做几个尝尝看。&lt;sup&gt;&lt;a id=&quot;fnr.1&quot; class=&quot;footref&quot; href=&quot;#fn.1&quot;&gt;1&lt;/a&gt;&lt;/sup&gt;&lt;/li&gt;
&lt;li&gt;Zucchini Bread 还有西葫芦面包&lt;sup&gt;&lt;a id=&quot;fnr.2&quot; class=&quot;footref&quot; href=&quot;#fn.2&quot;&gt;2&lt;/a&gt;&lt;/sup&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgheadline2&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgheadline2&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;2&lt;/span&gt; Summary&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-2&quot;&gt;
&lt;p&gt;
西葫芦这样冷门的蔬菜，除了认识怎么拼写，还真不知道能写些什么了。这次的推送内容不够丰盛，请多担待了。下次一定会有更有趣的。
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;footnotes&quot;&gt;
&lt;h2 class=&quot;footnotes&quot;&gt;Footnotes: &lt;/h2&gt;
&lt;div id=&quot;text-footnotes&quot;&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.1&quot; class=&quot;footnum&quot; href=&quot;#fnr.1&quot;&gt;1&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;http://www.thebittersideofsweet.com/2016/08/28/chocolate-zucchini-banana-muffins/&quot;&gt;http://www.thebittersideofsweet.com/2016/08/28/chocolate-zucchini-banana-muffins/&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.2&quot; class=&quot;footnum&quot; href=&quot;#fnr.2&quot;&gt;2&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;http://www.the36thavenue.com/zucchini-chocolate-bread-recipe/&quot;&gt;http://www.the36thavenue.com/zucchini-chocolate-bread-recipe/&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;


&lt;/div&gt;
&lt;/div&gt;
</content>
 </entry>
 
 <entry>
   <title>单词本：蔬菜之黄瓜</title>
   <link href="http://kimi.im/2016-08-28-english-cucumber"/>
   <updated>2016-08-28T00:00:00+00:00</updated>
   <id>http://kimi.im/english-cucumber</id>
   <content type="html">&lt;div id=&quot;outline-container-orgheadline1&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgheadline1&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;1&lt;/span&gt; cucumber&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-1&quot;&gt;
&lt;p&gt;
黄瓜属不属于蔬菜还是值得商榷的，很多人把黄瓜当水果吃的。
&lt;/p&gt;

&lt;p&gt;
水果必须是有水分而且有甜味的吗？好像也没有这么明确的定义。所以我们常常在意识中自己给自己设下了壁垒，随着年龄增长，慢慢变得成见在心，师心自用，顽固不化，分别我执。究其原因可能是思维的惰性吧。因为当我们在头脑中固化某些思维范式之后，就可以免得思考，直接使用了。好的方面是可以快速思考节省脑力，而坏的方面就会限制我们思考的创造性。
&lt;/p&gt;

&lt;p&gt;
除了打破水果必须是甜的这个成见，另外我们可以打破另外一个成见：“蔬菜和水果的标签只能选其一”。那就是有些植物既是蔬菜也是水果。
&lt;/p&gt;

&lt;p&gt;
所以，窃以为黄瓜既是蔬菜也是水果:-)
&lt;/p&gt;

&lt;p&gt;
言归正传，黄瓜在英语里叫 cucumber 据说是来自法语 le concombre&lt;sup&gt;(fr)&lt;/sup&gt;。德语就不太一样了，叫 die Gurke&lt;sup&gt;(de)&lt;/sup&gt;，读起来好像“果壳”。果壳，Gurke 关联起来记忆还是挺容易的。
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgheadline2&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgheadline2&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;2&lt;/span&gt; gherkin&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-2&quot;&gt;
&lt;p&gt;
德语叫 Gurke&lt;sup&gt;(de)&lt;/sup&gt; 可能和英语里另外一个单词 gherkin 同源吧。读音还是挺像的。
gherkin 指的是嫩嫩的小黄瓜，通常整个腌制了吃的。le cornichon&lt;sup&gt;(fr)&lt;/sup&gt;，die
Salzgurke&lt;sup&gt;(de)&lt;/sup&gt;。
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgheadline3&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgheadline3&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;3&lt;/span&gt; the Gherkin&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-3&quot;&gt;
&lt;p&gt;
据说伦敦的 Swiss Re Tower，又叫 the Gherkin：
&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;
The Gherkin is London’s most instantly recognisable tower. Totalling 500,000 sq
ft, The Gherkin is an iconic structure housing a flourishing community.&lt;sup&gt;&lt;a id=&quot;fnr.1&quot; class=&quot;footref&quot; href=&quot;#fn.1&quot;&gt;1&lt;/a&gt;&lt;/sup&gt;
&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgheadline4&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgheadline4&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;4&lt;/span&gt; cucumber.io&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-4&quot;&gt;
&lt;p&gt;
顺便提一下有一个开源的行为驱动开发框架叫 Cucumber（&lt;a href=&quot;https://cucumber.io/&quot;&gt;https://cucumber.io/&lt;/a&gt; ），而编写 Cucumber 框架下的测试用例使用的编程语言就叫 Gherkin。
&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;
Gherkin is the language that Cucumber understands. It is a Business Readable,
Domain Specific Language that lets you describe software’s behaviour without
detailing how that behaviour is implemented.&lt;sup&gt;&lt;a id=&quot;fnr.2&quot; class=&quot;footref&quot; href=&quot;#fn.2&quot;&gt;2&lt;/a&gt;&lt;/sup&gt;
&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgheadline5&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgheadline5&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;5&lt;/span&gt; pickled cucumber&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-5&quot;&gt;
&lt;p&gt;
腌黄瓜，酸黄瓜。
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgheadline6&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgheadline6&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;6&lt;/span&gt; sea cucumber&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-6&quot;&gt;
&lt;p&gt;
海黄瓜？不是的，其实是指海参。也许是因为作为棘皮动物（echinoderms）的海参长在海底皮肤像黄瓜。
&lt;/p&gt;

&lt;p&gt;
法语也叫海黄瓜：le concombre de mer&lt;sup&gt;(fr)&lt;/sup&gt;。
&lt;/p&gt;

&lt;p&gt;
海参也叫 trepang，teripang：
&lt;/p&gt;

&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;The island all around is rich in marine products and so on &lt;i&gt;trepang&lt;/i&gt;, sea
scallop, abalone, shrimp, oyster, long standing reputation. 海岛周围海产丰富。比如海参、扇贝、鲍鱼、对虾、牡蛎等海产，久负盛名。&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgheadline7&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgheadline7&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;7&lt;/span&gt; cucumiform&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-7&quot;&gt;
&lt;p&gt;
黄瓜状的，黄瓜形的。
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgheadline8&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgheadline8&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;8&lt;/span&gt; 淡定的黄瓜&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-8&quot;&gt;
&lt;p&gt;
英语里有句成语 to be as cool as a cucumber 像黄瓜一样淡定：
&lt;/p&gt;

&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;he leaps up the six flights of stairs and arrives at the top as cool as a
cucumber. 他窜上 6 层楼梯，爬到楼顶的时候像一根黄瓜一样气定神闲。&lt;/li&gt;
&lt;li&gt;she looked as efficient as a hospital matron, as cool as a cucumber. 她看起来像医院护士长一样高效率，像黄瓜一样冷静。&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgheadline9&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgheadline9&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;9&lt;/span&gt; Summary&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-9&quot;&gt;
&lt;p&gt;
今天的主题是黄瓜，黄瓜又分大黄瓜（cucumber）和小黄瓜（gherkin）。不过德语不分大小黄瓜都叫 die Gurke&lt;sup&gt;(fr)&lt;/sup&gt;。此外，淡定、冷静、气定神闲、从容不迫可以用黄瓜来形容：
to be as cool as a cucumber。
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;footnotes&quot;&gt;
&lt;h2 class=&quot;footnotes&quot;&gt;Footnotes: &lt;/h2&gt;
&lt;div id=&quot;text-footnotes&quot;&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.1&quot; class=&quot;footnum&quot; href=&quot;#fnr.1&quot;&gt;1&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;http://www.thegherkinlondon.com/&quot;&gt;http://www.thegherkinlondon.com/&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.2&quot; class=&quot;footnum&quot; href=&quot;#fnr.2&quot;&gt;2&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;https://github.com/cucumber/cucumber/wiki/Gherkin&quot;&gt;https://github.com/cucumber/cucumber/wiki/Gherkin&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;


&lt;/div&gt;
&lt;/div&gt;
</content>
 </entry>
 
 <entry>
   <title>单词本：蔬菜之红辣椒</title>
   <link href="http://kimi.im/2016-08-26-english-chilli"/>
   <updated>2016-08-26T00:00:00+00:00</updated>
   <id>http://kimi.im/english-chilli</id>
   <content type="html">&lt;div id=&quot;outline-container-orgheadline1&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgheadline1&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;1&lt;/span&gt; chilli&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-1&quot;&gt;
&lt;p&gt;
好像 pepper 和 chilli 都是辣椒。不过还是有一些区别。chilli 指的是那种尖尖的红辣椒，而 pepper 则是指不怎么辣的辣椒还有胡椒。
&lt;/p&gt;

&lt;p&gt;
说起 chilli 的来源，我们又不得不提一提伟大的纳瓦特人，chilli 和 tomato&lt;sup&gt;&lt;a id=&quot;fnr.1&quot; class=&quot;footref&quot; href=&quot;#fn.1&quot;&gt;1&lt;/a&gt;&lt;/sup&gt; 一样都是来自纳瓦特语（Nahuatl）。好像也和 pepper 连用叫 chilli pepper。
&lt;/p&gt;

&lt;p&gt;
Chilli peppers were domesticated in Americas. As early as 6000 years ago and
spread all over the world.
&lt;/p&gt;

&lt;p&gt;
咱们中国出名的红辣椒有：益都辣椒 Yidu chilli，金塔辣椒 Jinta chilli，朝天辣椒
Chaotian chilli 等。
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgheadline2&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgheadline2&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;2&lt;/span&gt; Scoville Heat Unit&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-2&quot;&gt;
&lt;p&gt;
顺便介绍一些冷知识，辣椒的辣度单位叫 SHU（Scoville Heat Unit）&lt;sup&gt;&lt;a id=&quot;fnr.2&quot; class=&quot;footref&quot; href=&quot;#fn.2&quot;&gt;2&lt;/a&gt;&lt;/sup&gt;是国际辣椒的辣度单位。
&lt;/p&gt;

&lt;p&gt;
通常河北的朝天椒辣度在 35,000-45,000 SHU 之间，吉林的益度红辣度在 20,000-30,000
SHU 之间，金塔辣椒比益度红的辣度要少，在 15,000-25,000 SHU 之间，美国红的辣度也在这个范围。&lt;sup&gt;&lt;a id=&quot;fnr.3&quot; class=&quot;footref&quot; href=&quot;#fn.3&quot;&gt;3&lt;/a&gt;&lt;/sup&gt;
&lt;/p&gt;

&lt;p&gt;
据说世界上最辣的几种辣椒是：
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;Carolina Reaper&lt;sup&gt;&lt;a id=&quot;fnr.4&quot; class=&quot;footref&quot; href=&quot;#fn.4&quot;&gt;4&lt;/a&gt;&lt;/sup&gt; 卡罗莱纳死神辣椒，辣度 1,570,000 SHU&lt;/li&gt;
&lt;li&gt;Komodo Dragon Chilli Pepper 科莫多龙辣椒&lt;/li&gt;
&lt;li&gt;Naga Viper Pepper 娜迦毒蛇辣椒，辣度 1,382,118 SHU&lt;/li&gt;
&lt;li&gt;Trinidad moruga scorpion&lt;sup&gt;&lt;a id=&quot;fnr.5&quot; class=&quot;footref&quot; href=&quot;#fn.5&quot;&gt;5&lt;/a&gt;&lt;/sup&gt; 特立尼达岛莫鲁加蝎辣椒，辣度 1,200,000 SHU&lt;/li&gt;
&lt;li&gt;Infinity chilli&lt;sup&gt;&lt;a id=&quot;fnr.6&quot; class=&quot;footref&quot; href=&quot;#fn.6&quot;&gt;6&lt;/a&gt;&lt;/sup&gt; 无限辣辣椒，辣度 1,067,286 SHU&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
以上这些辣椒听名字就很恐怖了。咱们天朝的朝天椒的辣度比起 Carolina Reaper 简直小巫见大巫了。
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgheadline3&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgheadline3&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;3&lt;/span&gt; chili&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-3&quot;&gt;
&lt;p&gt;
chilli 在美式英语，德语和法语里都写成 chili，少了一个 l。der Chili&lt;sup&gt;(de)&lt;/sup&gt;，le
chili&lt;sup&gt;(fr)&lt;/sup&gt;。
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgheadline4&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgheadline4&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;4&lt;/span&gt; paprika&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-4&quot;&gt;
&lt;p&gt;
paprika 则指的是红辣椒的干粉末。
&lt;/p&gt;

&lt;p&gt;
paprika color 指的是红辣椒粉末的那种略微有些橘色的红色，RGB 值为 #E25822 &lt;sup&gt;&lt;a id=&quot;fnr.7&quot; class=&quot;footref&quot; href=&quot;#fn.7&quot;&gt;7&lt;/a&gt;&lt;/sup&gt;
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgheadline5&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgheadline5&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;5&lt;/span&gt; Summary&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-5&quot;&gt;
&lt;p&gt;
今天主要学习了红辣椒 chilli，又一个来自纳瓦特语的单词，依然感觉拼写有点怪怪的。顺便学了点冷知识国际辣度单位 SHU。另外也发现了美式，德法的拼写比英式的少了个 l。此外，还学了红辣椒粉的单词 paprika。
&lt;/p&gt;

&lt;p&gt;
下次去餐厅记得来一碗卡罗莱纳死神辣椒哦，再撒一些 paprika，一定很辣爽！
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;footnotes&quot;&gt;
&lt;h2 class=&quot;footnotes&quot;&gt;Footnotes: &lt;/h2&gt;
&lt;div id=&quot;text-footnotes&quot;&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.1&quot; class=&quot;footnum&quot; href=&quot;#fnr.1&quot;&gt;1&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;http://kimi.im/2016-08-25-english-tomato&quot;&gt;August 25, 2016 » 单词本：蔬菜之番茄&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.2&quot; class=&quot;footnum&quot; href=&quot;#fnr.2&quot;&gt;2&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;https://en.wikipedia.org/wiki/Scoville_scale&quot;&gt;https://en.wikipedia.org/wiki/Scoville_scale&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.3&quot; class=&quot;footnum&quot; href=&quot;#fnr.3&quot;&gt;3&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;http://zhidao.baidu.com/link?url=Y01otMugxM92Dz_NPY9Es_oScAKSaa9Dtx24oEAjBgfy5b9HPoa5yjzrUfsJSbaKqFw4ojBjf0x4p2OBMQM4n&quot;&gt;http://zhidao.baidu.com/link?url=Y01otMugxM92Dz_NPY9Es_oScAKSaa9Dtx24oEAjBgfy5b9HPoa5yjzrUfsJSbaKqFw4ojBjf0x4p2OBMQM4n&lt;/a&gt;_
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.4&quot; class=&quot;footnum&quot; href=&quot;#fnr.4&quot;&gt;4&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;https://en.wikipedia.org/wiki/Carolina_Reaper&quot;&gt;https://en.wikipedia.org/wiki/Carolina_Reaper&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.5&quot; class=&quot;footnum&quot; href=&quot;#fnr.5&quot;&gt;5&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;https://en.wikipedia.org/wiki/Trinidad_moruga_scorpion&quot;&gt;https://en.wikipedia.org/wiki/Trinidad_moruga_scorpion&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.6&quot; class=&quot;footnum&quot; href=&quot;#fnr.6&quot;&gt;6&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;https://en.wikipedia.org/wiki/Infinity_chili&quot;&gt;https://en.wikipedia.org/wiki/Infinity_chili&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.7&quot; class=&quot;footnum&quot; href=&quot;#fnr.7&quot;&gt;7&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;http://colors.findthedata.com/l/728/Flame&quot;&gt;http://colors.findthedata.com/l/728/Flame&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;


&lt;/div&gt;
&lt;/div&gt;
</content>
 </entry>
 
 <entry>
   <title>单词本：蔬菜之番茄</title>
   <link href="http://kimi.im/2016-08-25-english-tomato"/>
   <updated>2016-08-25T00:00:00+00:00</updated>
   <id>http://kimi.im/english-tomato</id>
   <content type="html">&lt;div id=&quot;outline-container-orgheadline1&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgheadline1&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;1&lt;/span&gt; Tomato&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-1&quot;&gt;
&lt;p&gt;
今天的主题是番茄。法语 la tomate&lt;sup&gt;(fr)&lt;/sup&gt;，德语 die Tomate&lt;sup&gt;(de)&lt;/sup&gt;。德语法语中都是阴性名词。可能番茄是从墨西哥纳瓦特人那边引进的，所以这个单词发源于纳瓦特（Nahuatl）语言 tomatl。
&lt;/p&gt;

&lt;p&gt;
除了 tomatl，还有比如 chocolate 巧克力，源自纳瓦特语 xocolātl，本意为苦水；
avacado 牛油果，源自 ahuacatl; coyote 丛林狼，源自 coyotl；ocelot 山猫来自
ocelotl。&lt;sup&gt;&lt;a id=&quot;fnr.1&quot; class=&quot;footref&quot; href=&quot;#fn.1&quot;&gt;1&lt;/a&gt;&lt;/sup&gt; 有没有发现一个规律，就是纳瓦特语特别喜欢在每个单词后面加上 l，就如同他们的语言 Nahuatl 一样。
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgheadline2&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgheadline2&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;2&lt;/span&gt; cherry tomato&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-2&quot;&gt;
&lt;p&gt;
还有一种我们常吃的小番茄，又叫圣女果，英语名字叫 cherry tomato 樱桃番茄。好像我们有时候也叫它樱桃番茄。叫圣女果是因为台湾有一种小番茄的品种名叫“圣女”。台湾还有个说法叫车厘茄，这是中西合璧的结晶。
&lt;/p&gt;

&lt;p&gt;
法语叫 tomate cerise&lt;sup&gt;(fr)&lt;/sup&gt;，德语叫 Johannisbeertomate&lt;sup&gt;(de)&lt;/sup&gt;。
&lt;/p&gt;

&lt;p&gt;
法语还是很好理解的cerise&lt;sup&gt;(fr)&lt;/sup&gt; 就是樱桃。
&lt;/p&gt;

&lt;p&gt;
但是德语 Johannisbeer 是什么东西呢？原来是醋栗 currant&lt;sup&gt;(en)&lt;/sup&gt; ，一种小小的红红的酸甜的小浆果。记得在芬兰的时候经常吃到醋栗酱。而德国人每年6 月 24 日施洗者圣约翰节的时候会吃一吃，所以就叫 Johannisbeere 了。die Beere&lt;sup&gt;(de)&lt;/sup&gt; 浆果，草莓就叫 die
Erdbeere&lt;sup&gt;(de)&lt;/sup&gt;。另外圣约翰是耶稣基督的表兄，在耶稣基督开始传福音之前在旷野向犹太人劝勉悔改，并为耶稣基督施洗。施洗者圣约翰节在每年的6月24日。&lt;sup&gt;&lt;a id=&quot;fnr.2&quot; class=&quot;footref&quot; href=&quot;#fn.2&quot;&gt;2&lt;/a&gt;&lt;/sup&gt;
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgheadline3&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgheadline3&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;3&lt;/span&gt; spoon tomato&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-3&quot;&gt;
&lt;p&gt;
比圣女果还要小的番茄，一勺能兜起一大把。
&lt;/p&gt;

&lt;p&gt;
Spoon tomato plants get as tall as regular cherry tomato plants. It produce many
small tomatoes. Tomatoes are small but you can harvest many so it&apos;s fun! Kids
love them. &lt;sup&gt;&lt;a id=&quot;fnr.3&quot; class=&quot;footref&quot; href=&quot;#fn.3&quot;&gt;3&lt;/a&gt;&lt;/sup&gt;
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgheadline4&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgheadline4&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;4&lt;/span&gt; Summary&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-4&quot;&gt;
&lt;p&gt;
Tomato 这种欧美世界通用的单词也没什么好多说的，唯一考究一下它的来源还是挺好玩的，头一次知道有纳瓦特语。还知道了巧克力，牛油果，丛林狼，山猫都是来自纳瓦特语的单词。
&lt;/p&gt;

&lt;p&gt;
另外还学习了番茄的两个品种 cherry tomato 和 spoon tomato。另外从小番茄的德语名字
Johannisbeertomate 中，我们了解到了每年的 6 月 24 日是西方施洗者圣约翰节。
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;footnotes&quot;&gt;
&lt;h2 class=&quot;footnotes&quot;&gt;Footnotes: &lt;/h2&gt;
&lt;div id=&quot;text-footnotes&quot;&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.1&quot; class=&quot;footnum&quot; href=&quot;#fnr.1&quot;&gt;1&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;https://en.wikipedia.org/wiki/Nahuatl&quot;&gt;https://en.wikipedia.org/wiki/Nahuatl&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.2&quot; class=&quot;footnum&quot; href=&quot;#fnr.2&quot;&gt;2&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;http://ask.rednet.cn/question/81125&quot;&gt;http://ask.rednet.cn/question/81125&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.3&quot; class=&quot;footnum&quot; href=&quot;#fnr.3&quot;&gt;3&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;http://www.reimerseeds.com/worlds-smallest-tomato.aspx&quot;&gt;http://www.reimerseeds.com/worlds-smallest-tomato.aspx&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;


&lt;/div&gt;
&lt;/div&gt;
</content>
 </entry>
 
 <entry>
   <title>单词本：茄子</title>
   <link href="http://kimi.im/2016-08-22-english-aubergine"/>
   <updated>2016-08-22T00:00:00+00:00</updated>
   <id>http://kimi.im/english-aubergine</id>
   <content type="html">&lt;p&gt;
茄子一直是我的最爱。红烧茄子的味道非常棒。
&lt;/p&gt;

&lt;div id=&quot;outline-container-orgheadline1&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgheadline1&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;1&lt;/span&gt; eggplant&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-1&quot;&gt;
&lt;p&gt;
我见识不广，只知道茄子是长条形状的，后来才知道，西洋的茄子长的鸡蛋形状。所以他们叫它 eggplant 鸡蛋植物。
&lt;/p&gt;

&lt;p&gt;
茄子这个东西在美国澳大利亚叫 eggplant，而在英国则称之为 aubergine，到了印度南非又叫brinjal。实在是令人费解。
&lt;/p&gt;

&lt;p&gt;
美国人澳大利亚人大概文化底蕴比较少，所以看着茄子外形长的像鸡蛋，就命名为eggplant
了。
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgheadline2&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgheadline2&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;2&lt;/span&gt; aubergine&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-2&quot;&gt;
&lt;p&gt;
据说 aubergine 源自法语 l&apos;aubergine&lt;sup&gt;(fr)&lt;/sup&gt;，德语也源自法语：die Aubergine&lt;sup&gt;(de)&lt;/sup&gt;。这么看来，英法德他们又一次在茄子的命名上面达成了很好的共识。欧洲到底还是比较相亲相爱的一家人啊。
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgheadline3&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgheadline3&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;3&lt;/span&gt; brinjal&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-3&quot;&gt;
&lt;p&gt;
而印度南非叫 brinjal 则是受了葡萄牙语的影响，葡语中茄子叫 berinjela&lt;sup&gt;(pt)&lt;/sup&gt;。
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgheadline4&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgheadline4&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;4&lt;/span&gt; mad apple&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-4&quot;&gt;
&lt;p&gt;
至于 mad apple 疯苹果这类称呼则是因为历史上有趣的意大利人一度怀疑吃了茄子会神经错乱：
&lt;/p&gt;

&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;In Italy, where eggplant was suspected of causing insanity, it was called mala
insana, &quot;mad apple&quot;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgheadline5&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgheadline5&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;5&lt;/span&gt; 小结&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-5&quot;&gt;
&lt;p&gt;
综上所述，如果你想显得高雅贵族一点，那就管茄子叫 aubergine 吧，如果想平民化一点就叫它 eggplant，如果想非主流一些，那尽管叫它 brinjal 好了，没几个人听得懂的。
&lt;/p&gt;

&lt;p&gt;
另外因为茄子的颜色很有特色：深紫色，所以 aubergine/eggplant 有时候也表示这种颜色：
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;an aubergine dress， an eggplant dress  一件深紫色的衣服&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;
顺便提一下，其实，对于茄子的别名，汉语中的称呼我都感觉茫茫然：
&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;
茄子，别名落苏（孟诜）、昆仑瓜（《大业杂记》），草鳖甲（《养生主论》），酪酥（《五代贻子录》），矮瓜、吊菜子（《广州植物志》）。&lt;sup&gt;&lt;a id=&quot;fnr.1&quot; class=&quot;footref&quot; href=&quot;#fn.1&quot;&gt;1&lt;/a&gt;&lt;/sup&gt;
&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;footnotes&quot;&gt;
&lt;h2 class=&quot;footnotes&quot;&gt;Footnotes: &lt;/h2&gt;
&lt;div id=&quot;text-footnotes&quot;&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.1&quot; class=&quot;footnum&quot; href=&quot;#fnr.1&quot;&gt;1&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;http://old.zhongyibaike.com/wiki/%E5%90%8A%E8%8F%9C%E5%AD%90&quot;&gt;http://old.zhongyibaike.com/wiki/%E5%90%8A%E8%8F%9C%E5%AD%90&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;


&lt;/div&gt;
&lt;/div&gt;
</content>
 </entry>
 
 <entry>
   <title>单词本：蔬菜之芹菜</title>
   <link href="http://kimi.im/2016-08-20-english-celery"/>
   <updated>2016-08-20T00:00:00+00:00</updated>
   <id>http://kimi.im/english-celery</id>
   <content type="html">&lt;div id=&quot;outline-container-orgheadline1&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgheadline1&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;1&lt;/span&gt; celery&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-1&quot;&gt;
&lt;p&gt;
上一篇蔬菜系列学习了花菜（cauliflower）和西兰花（broccoli）。今天来看一看芹菜
celery。这个单词在之前系列文章的例句中也出现过。现在来整理整理吧。
&lt;/p&gt;

&lt;p&gt;
不过 celery 不是我们国人常吃的那种细细的芹菜，而是很粗的西芹。细细的芹菜称之为
Chinese celery。但是还有个单词 parsley 也是西芹欧芹。这样我就分不清 celery 和
parsley 到底有什么区别了。
&lt;/p&gt;

&lt;p&gt;
还好有百度知道：
&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;
celery 一般指平时所说的西芹，和我们在菜场看到的普通芹菜还不太一样，很粗大，可以直接作为蔬菜食用的，比如在西餐中作为烤鸡翅的配菜沾奶酪调味汁吃。
&lt;/p&gt;

&lt;p&gt;
parsley 并不是西芹，中文译名为欧芹或是法香，作为西餐中非常常用的一种香料，中餐馆里也用它作装饰，有扁叶和卷曲叶两种，两种植物并不是同一属，相差比较多。&lt;sup&gt;&lt;a id=&quot;fnr.1&quot; class=&quot;footref&quot; href=&quot;#fn.1&quot;&gt;1&lt;/a&gt;&lt;/sup&gt;
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;Chinese celery is used in cooking more for its flavor than for its texture,
and is rarely served by itself as a vegetable. It has a crunchy, watery
flavor.&lt;sup&gt;&lt;a id=&quot;fnr.2&quot; class=&quot;footref&quot; href=&quot;#fn.2&quot;&gt;2&lt;/a&gt;&lt;/sup&gt; 这里说芹菜主要用来调味，因为口感脆脆的淡淡的。但是我好像经常吃肉丝炒芹菜啊，口感脆脆的很好吃。&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
据说西芹榨汁喝还能排除毒素&lt;sup&gt;&lt;a id=&quot;fnr.3&quot; class=&quot;footref&quot; href=&quot;#fn.3&quot;&gt;3&lt;/a&gt;&lt;/sup&gt;：
&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;
Celery is chock-full of dietary fiber that keeps your bowels healthy and
clean. It also contains antioxidants like quercetin and phenolic acids that
fight inflammation and oxidative stress. The healthy veggie is used to treat
treating joint pain, lower blood pressure, fight cancer and soothe the nervous
system. Plus, it’s very low in calories.
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;
西芹 celery 法语 le céleri&lt;sup&gt;(fr)&lt;/sup&gt;，德语 der Sellerie&lt;sup&gt;(de)&lt;/sup&gt;。都是阳性，发音也都一样。最喜欢这样的单词了，很通用。
&lt;/p&gt;

&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;a stick of celery 一根芹菜，une côte de céleri&lt;sup&gt;(fr)&lt;/sup&gt;&lt;/li&gt;
&lt;li&gt;a head of celery 一棵芹菜，un pied de céleri&lt;sup&gt;(fr)&lt;/sup&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
欧芹 parsley 法语 le persil&lt;sup&gt;(fr)&lt;/sup&gt;，德语 die Petersilie&lt;sup&gt;(de)&lt;/sup&gt;。
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgheadline2&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgheadline2&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;2&lt;/span&gt; Celery project&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-2&quot;&gt;
&lt;p&gt;
另外 Celery 还是 Python 的一个消息分发系统。
&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;
Celery: Distributed Task QueueCelery is an asynchronous task queue/job queue
based on distributed message passing.&lt;sup&gt;&lt;a id=&quot;fnr.4&quot; class=&quot;footref&quot; href=&quot;#fn.4&quot;&gt;4&lt;/a&gt;&lt;/sup&gt;
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;
用起来还挺方便的，比如以下例子创建一个任务执行器，然后用 @app.task 指定 hello()
函数分发给该任务执行。
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;

&lt;pre class=&quot;src src-python&quot;&gt;&lt;span style=&quot;color: #8b008b; font-weight: bold;&quot;&gt;from&lt;/span&gt; celery &lt;span style=&quot;color: #8b008b; font-weight: bold;&quot;&gt;import&lt;/span&gt; Celery

&lt;span style=&quot;color: #0000ff; font-style: italic;&quot;&gt;app&lt;/span&gt; = Celery(&lt;span style=&quot;color: #3a5fcd;&quot;&gt;&apos;hello&apos;&lt;/span&gt;, broker=&lt;span style=&quot;color: #3a5fcd;&quot;&gt;&apos;amqp://guest@localhost//&apos;&lt;/span&gt;)

&lt;span style=&quot;color: #551a8b;&quot;&gt;@app.task&lt;/span&gt;
&lt;span style=&quot;color: #8b008b; font-weight: bold;&quot;&gt;def&lt;/span&gt; &lt;span style=&quot;color: #0000cd;&quot;&gt;hello&lt;/span&gt;():
    &lt;span style=&quot;color: #8b008b; font-weight: bold;&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #3a5fcd;&quot;&gt;&apos;hello world&apos;&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgheadline3&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgheadline3&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;3&lt;/span&gt; Parsley JavaScript project&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-3&quot;&gt;
&lt;p&gt;
既然西芹被用作开源项目名字，欧芹也不能输。有个 JavaScript 项目叫 ParsleyJS&lt;sup&gt;&lt;a id=&quot;fnr.5&quot; class=&quot;footref&quot; href=&quot;#fn.5&quot;&gt;5&lt;/a&gt;&lt;/sup&gt;
主要用来验证 HTML 页面表格输入是否合法。比如输入一个邮箱地址要有字符串中间要有 @，
@ 后面要是合法的域名。
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgheadline4&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgheadline4&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;4&lt;/span&gt; celeriac&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-4&quot;&gt;
&lt;p&gt;
这是另外一种芹菜，主要食用它的块根。le céleri-rave&lt;sup&gt;(fr)&lt;/sup&gt; 我是没有见过也没有吃过的。据说可以放汤吃。
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgheadline5&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgheadline5&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;5&lt;/span&gt; 总结&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-5&quot;&gt;
&lt;p&gt;
今天学习了这几个蔬菜：
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;西芹： celery， le céleri&lt;sup&gt;(fr)&lt;/sup&gt;，der Sellerie&lt;sup&gt;(de)&lt;/sup&gt;&lt;/li&gt;
&lt;li&gt;欧芹：parsley，le persil&lt;sup&gt;(fr)&lt;/sup&gt;，die Petersilie&lt;sup&gt;(de)&lt;/sup&gt;&lt;/li&gt;
&lt;li&gt;根芹：celeriac，le céleri-rave&lt;sup&gt;(fr)&lt;/sup&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
以及两个开源项目 celeryproject.org 和 parsleyjs.org。下回要发起 C 语言的开源项目可以考虑用 celeriac，这个单词结尾就是 C 呀。
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;footnotes&quot;&gt;
&lt;h2 class=&quot;footnotes&quot;&gt;Footnotes: &lt;/h2&gt;
&lt;div id=&quot;text-footnotes&quot;&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.1&quot; class=&quot;footnum&quot; href=&quot;#fnr.1&quot;&gt;1&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;http://zhidao.baidu.com/link?url=rui0t8MccCfQnxATrFcu07h1c2DHRBDR79uDs6X2Nb9EkgkJJs52Iq1wdrA8zuwt-S7BBegmIvsFZqh8Nzldj&quot;&gt;http://zhidao.baidu.com/link?url=rui0t8MccCfQnxATrFcu07h1c2DHRBDR79uDs6X2Nb9EkgkJJs52Iq1wdrA8zuwt-S7BBegmIvsFZqh8Nzldj&lt;/a&gt;_
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.2&quot; class=&quot;footnum&quot; href=&quot;#fnr.2&quot;&gt;2&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;https://en.wikipedia.org/wiki/Chinese_celery&quot;&gt;https://en.wikipedia.org/wiki/Chinese_celery&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.3&quot; class=&quot;footnum&quot; href=&quot;#fnr.3&quot;&gt;3&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;http://health-flash.com/3-ingredient-celery-juice-to-quickly-detox-your-kidneys-heart-and-joints/&quot;&gt;http://health-flash.com/3-ingredient-celery-juice-to-quickly-detox-your-kidneys-heart-and-joints/&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.4&quot; class=&quot;footnum&quot; href=&quot;#fnr.4&quot;&gt;4&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;http://www.celeryproject.org&quot;&gt;http://www.celeryproject.org&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.5&quot; class=&quot;footnum&quot; href=&quot;#fnr.5&quot;&gt;5&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;http://parsleyjs.org&quot;&gt;http://parsleyjs.org&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;


&lt;/div&gt;
&lt;/div&gt;
</content>
 </entry>
 
 <entry>
   <title>单词本：速度和芹菜无关</title>
   <link href="http://kimi.im/2016-08-20-english-celerity"/>
   <updated>2016-08-20T00:00:00+00:00</updated>
   <id>http://kimi.im/english-celerity</id>
   <content type="html">&lt;div id=&quot;outline-container-orgheadline1&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgheadline1&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;1&lt;/span&gt; celerity&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-1&quot;&gt;
&lt;p&gt;
上次学到芹菜 celery 的时候偶遇了单词 celerity。看起来像是芹菜的某些名词属性，后来一查才知道跟芹菜没什么关系，是速度快的意思。
&lt;/p&gt;

&lt;p&gt;
人需要某种联系来帮助增强记忆。
&lt;/p&gt;

&lt;p&gt;
这也是为什么前段时间王宝强的新闻这么受人们关注。我觉得人们潜意识中有一种想把生活过的每一天都好好记住保存的愿望，倘若把一个普通的日子与公众人物私人生活的重大变更联结在一起，参与到讨论中去，这个普通的日子 2016 年 8 月14 日就变得很有意义了，也就很好的在记忆中保存了这一天。尽管王宝强离婚事件和普通人没有一毛钱关系。
&lt;/p&gt;

&lt;p&gt;
从人的生物属性去分析，可能因为我们的头脑中的神经元是空间网状结构互相联系着的，所以用联想的方式去记忆更符合人脑的生物特性。
&lt;/p&gt;

&lt;p&gt;
所以在学会了芹菜 celery 之后再顺便学一学快速celerity，就把芹菜和速度联系在一起了。这两个概念在头脑中形成关联，就很难忘记了。
&lt;/p&gt;

&lt;p&gt;
While it looks a lot like celery, celerity means something that vegetables are
not — fast moving. Gossip often travels with celerity, as do children trying to
get to a big plate of cookies.&lt;sup&gt;&lt;a id=&quot;fnr.1&quot; class=&quot;footref&quot; href=&quot;#fn.1&quot;&gt;1&lt;/a&gt;&lt;/sup&gt;
&lt;/p&gt;

&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;He moved with a celerity that amazed me, when I remembered how exasperatingly
slow he could be, fooling with kites.&lt;/li&gt;
&lt;li&gt;Celerity is the soul of warfare. 兵贵神速。&lt;/li&gt;
&lt;li&gt;I am by no means convinced that you would be gone with such celerity. 我怎么也不信你做事情居然这么当机立断。&lt;/li&gt;
&lt;li&gt;Celerity Management 灵捷管理&lt;sup&gt;&lt;a id=&quot;fnr.2&quot; class=&quot;footref&quot; href=&quot;#fn.2&quot;&gt;2&lt;/a&gt;&lt;/sup&gt;，敏捷管理（Agile Management）的另一种说法。&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgheadline2&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgheadline2&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;2&lt;/span&gt; celeron&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-2&quot;&gt;
&lt;p&gt;
Intel Corporation&apos;s trade name for its family of Pentium II microprocessors
meant for use in low-end computers. &lt;sup&gt;&lt;a id=&quot;fnr.3&quot; class=&quot;footref&quot; href=&quot;#fn.3&quot;&gt;3&lt;/a&gt;&lt;/sup&gt;
&lt;/p&gt;

&lt;p&gt;
英特尔赛扬处理器。据说是命名是从芯片 cell 演变来的。但我觉得不如说是从 celerity，更能表现处理器的高速运转性能。
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgheadline4&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgheadline4&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;3&lt;/span&gt; accelerate&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-3&quot;&gt;
&lt;p&gt;
既然 celerity 是速度，那么 accelerate 自然就是加速之意。
&lt;/p&gt;

&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;accelerate economic growth，加速经济发展&lt;/li&gt;
&lt;li&gt;Didn&apos;t you see him accelerate to an impossible speed in an impossible time?&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgheadline3&quot; class=&quot;outline-3&quot;&gt;
&lt;h3 id=&quot;orgheadline3&quot;&gt;&lt;span class=&quot;section-number-3&quot;&gt;3.1&lt;/span&gt; overaccelerate&lt;/h3&gt;
&lt;div class=&quot;outline-text-3&quot; id=&quot;text-3-1&quot;&gt;
&lt;p&gt;
过度加速。
&lt;/p&gt;

&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;But at the same time, we need to have tactical patience. And I think we need
to be careful not to overaccelerate this and actually rush to failure.&lt;sup&gt;&lt;a id=&quot;fnr.4&quot; class=&quot;footref&quot; href=&quot;#fn.4&quot;&gt;4&lt;/a&gt;&lt;/sup&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgheadline6&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgheadline6&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;4&lt;/span&gt; decelerate&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-4&quot;&gt;
&lt;p&gt;
减速；制动。
&lt;/p&gt;

&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;Sociologists are trying to adopt an approach to decelerate the growth of
population. 社会学家正试图采取某种方式减缓人口的增长速度。&lt;/li&gt;
&lt;li&gt;Crude oil demand is anemic, gasoline demand has decelerated globally, and
China crude oil imports are likely to decelerate.&lt;sup&gt;&lt;a id=&quot;fnr.5&quot; class=&quot;footref&quot; href=&quot;#fn.5&quot;&gt;5&lt;/a&gt;&lt;/sup&gt; 原油需求匮乏（anemic
贫血症），全球汽油需求减速，中国原油进口也可能减速。&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgheadline5&quot; class=&quot;outline-3&quot;&gt;
&lt;h3 id=&quot;orgheadline5&quot;&gt;&lt;span class=&quot;section-number-3&quot;&gt;4.1&lt;/span&gt; deceleration&lt;/h3&gt;
&lt;div class=&quot;outline-text-3&quot; id=&quot;text-4-1&quot;&gt;
&lt;p&gt;
减速的名词。
&lt;/p&gt;

&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;The harder the brake pedal is pressed, the greater the car&apos;s deceleration. 刹车踩得越用力，车子减速越猛。&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgheadline7&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgheadline7&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;5&lt;/span&gt; unaccelerate&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-5&quot;&gt;
&lt;p&gt;
非加速。
&lt;/p&gt;

&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;Newton&apos;s first two laws hold only when observed in unaccelerated reference
frames. 牛顿第一、第二定律只有在非加速的参照系中作观察时才是成立的。&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgheadline8&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgheadline8&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;6&lt;/span&gt; reaccelerate&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-6&quot;&gt;
&lt;p&gt;
accelerated again，重新加速。
&lt;/p&gt;

&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;Wells Fargo believes &apos;iPhone 7&apos; will reaccelerate Apple growth, sell 80M+ this
holiday.&lt;sup&gt;&lt;a id=&quot;fnr.6&quot; class=&quot;footref&quot; href=&quot;#fn.6&quot;&gt;6&lt;/a&gt;&lt;/sup&gt; Wells Fargo 相信 iPhone 7 将重新加速苹果的增长，今年假期将创造
8000 万销售量。&lt;/li&gt;
&lt;li&gt;As a result, he states that a new MacBook Pro could be what is needed to
reaccelerate Apple’s share gains in the market.&lt;sup&gt;&lt;a id=&quot;fnr.7&quot; class=&quot;footref&quot; href=&quot;#fn.7&quot;&gt;7&lt;/a&gt;&lt;/sup&gt; 新的 MacBook Pro 也将有助于重新加速苹果市场份额。&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgheadline9&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgheadline9&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;7&lt;/span&gt; 小结&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-7&quot;&gt;
&lt;p&gt;
本文是学习芹菜 celery 的一篇跑题文章，因为 celerity 和 celery 有很高的相似度，所以顺带学习一下。celerity 快速，accelerate 加速，有加速就有过加速 overaccelerate，在加速 reaccelerate 和不加速 unaccelerate。以及减速 decelerate。
&lt;/p&gt;

&lt;p&gt;
跑题文章的再跑题就是英特尔赛扬处理器型号 Celeron，看似和 celerity 没什么关系。但是联想到光子叫 photon，那快速子不就可以叫 celeron 么。这是我瞎掰的，我姑妄言之，汝亦妄听之。
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;footnotes&quot;&gt;
&lt;h2 class=&quot;footnotes&quot;&gt;Footnotes: &lt;/h2&gt;
&lt;div id=&quot;text-footnotes&quot;&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.1&quot; class=&quot;footnum&quot; href=&quot;#fnr.1&quot;&gt;1&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;https://www.vocabulary.com/dictionary/celerity&quot;&gt;https://www.vocabulary.com/dictionary/celerity&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.2&quot; class=&quot;footnum&quot; href=&quot;#fnr.2&quot;&gt;2&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;http://wiki.mbalib.com/wiki/%E7%81%B5%E6%8D%B7%E7%AE%A1%E7%90%86&quot;&gt;http://wiki.mbalib.com/wiki/%E7%81%B5%E6%8D%B7%E7%AE%A1%E7%90%86&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.3&quot; class=&quot;footnum&quot; href=&quot;#fnr.3&quot;&gt;3&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;http://www.dictionary.com/browse/celeron&quot;&gt;http://www.dictionary.com/browse/celeron&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.4&quot; class=&quot;footnum&quot; href=&quot;#fnr.4&quot;&gt;4&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;http://www.mprnews.org/story/npr/6952481&quot;&gt;http://www.mprnews.org/story/npr/6952481&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.5&quot; class=&quot;footnum&quot; href=&quot;#fnr.5&quot;&gt;5&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;http://www.metro.us/news/oil-posts-strong-weekly-gains-analysts-say-rally-unjustified/wrlphs---ZDA0SQppX_qj2If0uuEUJg/&quot;&gt;http://www.metro.us/news/oil-posts-strong-weekly-gains-analysts-say-rally-unjustified/wrlphs---ZDA0SQppX_qj2If0uuEUJg/&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.6&quot; class=&quot;footnum&quot; href=&quot;#fnr.6&quot;&gt;6&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;http://appleinsider.com/articles/16/04/26/wells-fargo-believes-iphone-7-will-reaccelerate-apple-growth-sell-80m-this-holiday&quot;&gt;http://appleinsider.com/articles/16/04/26/wells-fargo-believes-iphone-7-will-reaccelerate-apple-growth-sell-80m-this-holiday&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.7&quot; class=&quot;footnum&quot; href=&quot;#fnr.7&quot;&gt;7&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;http://zenexp.com/new-macbook-pro-with-touchscreen-to-release-after-iphone-7-event-analyst-8290269&quot;&gt;http://zenexp.com/new-macbook-pro-with-touchscreen-to-release-after-iphone-7-event-analyst-8290269&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;


&lt;/div&gt;
&lt;/div&gt;
</content>
 </entry>
 
 <entry>
   <title>单词本：蔬菜之花菜</title>
   <link href="http://kimi.im/2016-08-19-english-cauliflower"/>
   <updated>2016-08-19T00:00:00+00:00</updated>
   <id>http://kimi.im/english-cauliflower</id>
   <content type="html">&lt;div id=&quot;outline-container-orgheadline1&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgheadline1&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;1&lt;/span&gt; 前言&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-1&quot;&gt;
&lt;p&gt;
本文是食物系列单词学习的第四篇，蔬菜子系列的第三篇，前面我们学习了：
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;&lt;a href=&quot;http://kimi.im/2016-08-14-english-food&quot;&gt;August 14, 2016 » 单词本：谷物&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://kimi.im/2016-08-16-english-vegetable&quot;&gt;August 16, 2016 » 单词本：蔬菜之萝卜和胡萝卜&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://kimi.im/2016-08-17-english-cabbage&quot;&gt;August 17, 2016 » 单词本：蔬菜之卷心菜&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
慢慢的发现，食物系列真是个大坑啊，好多平时常吃的食物的单词都挺陌生的，学习一下还是挺有必要的。
&lt;/p&gt;

&lt;p&gt;
言归正传，今天继续学习蔬菜系列单词 cauliflower
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgheadline4&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgheadline4&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;2&lt;/span&gt; cauliflower&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-2&quot;&gt;
&lt;p&gt;
a cabbage of a variety that bears a large immature flower head of small
creamy-white flower buds. 花椰菜是卷心菜的一种，只是它又一簇非常大的不成熟的花丛，看起来像奶油一样白（creamy-white）。我们餐桌上吃的是它的花，所以称之为花菜。
&lt;/p&gt;

&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;These cauliflower fritters are a healthier and lower carb alternative to
potato pancakes.&lt;sup&gt;&lt;a id=&quot;fnr.1&quot; class=&quot;footref&quot; href=&quot;#fn.1&quot;&gt;1&lt;/a&gt;&lt;/sup&gt; 花菜馅饼比土豆煎饼更健康更低热量。&lt;/li&gt;
&lt;li&gt;Adults appreciate the excellent taste of the mild, tender cauliflower and
sweet, toothsome shrimp simmered in coconut milk with lots of aromatic
flavors.&lt;sup&gt;&lt;a id=&quot;fnr.2&quot; class=&quot;footref&quot; href=&quot;#fn.2&quot;&gt;2&lt;/a&gt;&lt;/sup&gt;&lt;/li&gt;
&lt;li&gt;Kids have long seen cauliflower as a mortal enemy. Adults, however, often
recognize cauliflower&apos;s nutritional value.&lt;sup&gt;&lt;a id=&quot;fnr.3&quot; class=&quot;footref&quot; href=&quot;#fn.3&quot;&gt;3&lt;/a&gt;&lt;/sup&gt; 小孩子一直视花菜为死敌，大人则认为其很有营养价值。附录这篇文章介绍了一种以印度方式烹制花菜的方法可以极大提高口味。&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
英语中花菜看起来像是个专有名词，但是据说很可能来自法语 chou-fleur&lt;sup&gt;(fr)&lt;/sup&gt;。
&lt;/p&gt;

&lt;p&gt;
法语和德语的组词方式就很像中文了：
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;der Blumenkohl&lt;sup&gt;(de)&lt;/sup&gt;：die Blume(n) 花，der Kohl&lt;sup&gt;(de)&lt;/sup&gt; 卷心菜。另外南德也称花菜为
der Karfiol&lt;sup&gt;(de)&lt;/sup&gt;，大概是比较靠近法国受法语影响吧，有点接近 chou-fleur&lt;sup&gt;(fr)&lt;/sup&gt; 了。也叫 Italienischer Kohl 可能源自意大利。&lt;/li&gt;
&lt;li&gt;le chou-fleur&lt;sup&gt;(fr)&lt;/sup&gt;：la fleur&lt;sup&gt;(fr)&lt;/sup&gt;：花，le chou&lt;sup&gt;(fr)&lt;/sup&gt;：卷心菜。&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgheadline2&quot; class=&quot;outline-3&quot;&gt;
&lt;h3 id=&quot;orgheadline2&quot;&gt;&lt;span class=&quot;section-number-3&quot;&gt;2.1&lt;/span&gt; cauliflower ear&lt;/h3&gt;
&lt;div class=&quot;outline-text-3&quot; id=&quot;text-2-1&quot;&gt;
&lt;p&gt;
被打肿成花菜一样的耳朵。
&lt;/p&gt;

&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;Cauliflower ears: Badge of honor for wrestlers.&lt;sup&gt;&lt;a id=&quot;fnr.4&quot; class=&quot;footref&quot; href=&quot;#fn.4&quot;&gt;4&lt;/a&gt;&lt;/sup&gt; 想看看什么样子的话可以点进去看看这个链接&lt;sup&gt;&lt;a id=&quot;fnr.4.100&quot; class=&quot;footref&quot; href=&quot;#fn.4&quot;&gt;4&lt;/a&gt;&lt;/sup&gt;，比较血腥暴力就不放图了。&lt;/li&gt;
&lt;li&gt;Cauliflower ear is a condition that occurs when the external portion of the
ear suffers a blow, blood clot or other collection of fluid under the
perichondrium.&lt;sup&gt;&lt;a id=&quot;fnr.5&quot; class=&quot;footref&quot; href=&quot;#fn.5&quot;&gt;5&lt;/a&gt;&lt;/sup&gt;&lt;/li&gt;
&lt;li&gt;Le terme &lt;i&gt;oreilles en choux-fleur&lt;/i&gt; désigne l&apos;aspect du pavillon de l&apos;oreille
secondaire à une périchondrite.&lt;sup&gt;&lt;a id=&quot;fnr.6&quot; class=&quot;footref&quot; href=&quot;#fn.6&quot;&gt;6&lt;/a&gt;&lt;/sup&gt;&lt;/li&gt;
&lt;li&gt;Das &lt;i&gt;Blumenkohlohr&lt;/i&gt; oder Ringerohr ist eine bleibende Entstellung des äußeren
Ohres, die durch Blutergüsse in der Ohrmuschel (Othämatome) entsteht, wenn es
zur bindegewebigen Organisation des Blutergusses kommt oder die Versorgung des
Knorpelgewebes mit Nährstoffen verhindert wird und dieses zugrunde geht.&lt;sup&gt;&lt;a id=&quot;fnr.7&quot; class=&quot;footref&quot; href=&quot;#fn.7&quot;&gt;7&lt;/a&gt;&lt;/sup&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgheadline3&quot; class=&quot;outline-3&quot;&gt;
&lt;h3 id=&quot;orgheadline3&quot;&gt;&lt;span class=&quot;section-number-3&quot;&gt;2.2&lt;/span&gt; cauliflower fungus&lt;/h3&gt;
&lt;div class=&quot;outline-text-3&quot; id=&quot;text-2-2&quot;&gt;
&lt;blockquote&gt;
&lt;p&gt;
An edible fungus which forms a distinctive fruiting body with a yellowish lobed
surface, growing on wood and other plant debris. Also called brain fungus.&lt;sup&gt;&lt;a id=&quot;fnr.8&quot; class=&quot;footref&quot; href=&quot;#fn.8&quot;&gt;8&lt;/a&gt;&lt;/sup&gt;
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;
甘蓝菌。不知道为什么不称之为花菜菌。看起来好像是一种长的像花菜的银耳。但好像比银耳要厚实一点。也叫 brain fungus 脑菌……
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgheadline6&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgheadline6&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;3&lt;/span&gt; Broccoli&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-3&quot;&gt;
&lt;p&gt;
西兰花，因为和花菜比起来颜色是绿色的，所以又叫绿菜花、青花菜。
&lt;/p&gt;

&lt;p&gt;
Brokkoli schmeckt sehr gut und ist noch dazu gesund.（&lt;a href=&quot;http://www.brokkoli.net&quot;&gt;http://www.brokkoli.net&lt;/a&gt;）居然有德国人专门为西兰花建了个网站。那是多么热爱这个蔬菜啊。
&lt;/p&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgheadline5&quot; class=&quot;outline-3&quot;&gt;
&lt;h3 id=&quot;orgheadline5&quot;&gt;&lt;span class=&quot;section-number-3&quot;&gt;3.1&lt;/span&gt; Broccolini&lt;/h3&gt;
&lt;div class=&quot;outline-text-3&quot; id=&quot;text-3-1&quot;&gt;
&lt;p&gt;
Broccolini (original Japanese: ブロッコリーニ) is a green vegetable similar to
broccoli but with smaller florets and longer, thin stalks. Often misidentified
as young broccoli, it is a hybrid of broccoli and kai-lan.&lt;sup&gt;&lt;a id=&quot;fnr.9&quot; class=&quot;footref&quot; href=&quot;#fn.9&quot;&gt;9&lt;/a&gt;&lt;/sup&gt;
&lt;/p&gt;

&lt;p&gt;
一种来自日本的西蓝花和芥蓝杂交的蔬菜。好像在哪儿看到过……
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgheadline7&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgheadline7&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;4&lt;/span&gt; 小结&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-4&quot;&gt;
&lt;p&gt;
今天主要学了俩单词奶白色的花菜 caulliflower 和青绿色的西兰花 broccoli。以后吃这两种蔬菜就知道英语单词是不一样的了。
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;footnotes&quot;&gt;
&lt;h2 class=&quot;footnotes&quot;&gt;Footnotes: &lt;/h2&gt;
&lt;div id=&quot;text-footnotes&quot;&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.1&quot; class=&quot;footnum&quot; href=&quot;#fnr.1&quot;&gt;1&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;http://kirbiecravings.com/2016/08/cauliflower-fritters.html&quot;&gt;http://kirbiecravings.com/2016/08/cauliflower-fritters.html&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.2&quot; class=&quot;footnum&quot; href=&quot;#fnr.2&quot;&gt;2&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;http://www.wnyc.org/story/flavorwalla/&quot;&gt;http://www.wnyc.org/story/flavorwalla/&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.3&quot; class=&quot;footnum&quot; href=&quot;#fnr.3&quot;&gt;3&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;http://www.timesjournal.com/community/article_0946d7bd-6c06-59b8-873a-d6690cf97e18.html&quot;&gt;http://www.timesjournal.com/community/article_0946d7bd-6c06-59b8-873a-d6690cf97e18.html&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.4&quot; class=&quot;footnum&quot; href=&quot;#fnr.4&quot;&gt;4&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;http://www.usatoday.com/story/sports/olympics/rio-2016/2016/08/14/wrestling-cauliflower-ears-kyle-snyder/88714754/&quot;&gt;http://www.usatoday.com/story/sports/olympics/rio-2016/2016/08/14/wrestling-cauliflower-ears-kyle-snyder/88714754/&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.5&quot; class=&quot;footnum&quot; href=&quot;#fnr.5&quot;&gt;5&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;https://en.wikipedia.org/wiki/Cauliflower_ear&quot;&gt;https://en.wikipedia.org/wiki/Cauliflower_ear&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.6&quot; class=&quot;footnum&quot; href=&quot;#fnr.6&quot;&gt;6&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;https://fr.wikipedia.org/wiki/Oreille_en_chou-fleur&quot;&gt;https://fr.wikipedia.org/wiki/Oreille_en_chou-fleur&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.7&quot; class=&quot;footnum&quot; href=&quot;#fnr.7&quot;&gt;7&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;https://de.wikipedia.org/wiki/Blumenkohlohr&quot;&gt;https://de.wikipedia.org/wiki/Blumenkohlohr&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.8&quot; class=&quot;footnum&quot; href=&quot;#fnr.8&quot;&gt;8&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;http://www.oxforddictionaries.com/definition/english/cauliflower-fungus&quot;&gt;http://www.oxforddictionaries.com/definition/english/cauliflower-fungus&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.9&quot; class=&quot;footnum&quot; href=&quot;#fnr.9&quot;&gt;9&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;https://en.wikipedia.org/wiki/Broccolini&quot;&gt;https://en.wikipedia.org/wiki/Broccolini&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;


&lt;/div&gt;
&lt;/div&gt;
</content>
 </entry>
 
 <entry>
   <title>单词本：精神焕发</title>
   <link href="http://kimi.im/2016-08-18-english-invigorate"/>
   <updated>2016-08-18T00:00:00+00:00</updated>
   <id>http://kimi.im/english-invigorate</id>
   <content type="html">&lt;div id=&quot;outline-container-orgheadline1&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgheadline1&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;1&lt;/span&gt; 11 届 G20 峰会主题&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-1&quot;&gt;
&lt;p&gt;
早上起来看新闻，中国日报新闻说习大大要参加主持在杭州举办的 11 届 G20 峰会。外交部发言人陆慷说：
&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;
The theme of the 11th G20 summit will be &quot;Toward an Innovative, &lt;i&gt;Invigorated&lt;/i&gt;,
Interconnected and Inclusive World Economy&quot;.
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;
本届 G20 峰会主题为：构建创新、/活力/、联动、包容的世界经济。
&lt;/p&gt;

&lt;p&gt;
因为第一次见到 invigorate 这个单词，所以本文重点对此展开学习学习。
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgheadline2&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgheadline2&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;2&lt;/span&gt; invigorate&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-2&quot;&gt;
&lt;p&gt;
to import vigor, strength, or vitality to, to give life or energy to 赋予精力、能量、活力、生命、能量。也写成 envigorate, invigourate。beleben&lt;sup&gt;(de)&lt;/sup&gt;,
kräftigen&lt;sup&gt;(de)&lt;/sup&gt;, stärken&lt;sup&gt;(de)&lt;/sup&gt;；revigorer&lt;sup&gt;(fr)&lt;/sup&gt;。
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;Exercise is &lt;i&gt;invigorating&lt;/i&gt;. 运动带来活力。&lt;/li&gt;
&lt;li&gt;they were &lt;i&gt;invigorated&lt;/i&gt; by the chilly autumn air. 秋天的冷空气使他们神清气爽。&lt;/li&gt;
&lt;li&gt;The cold water &lt;i&gt;invigorated&lt;/i&gt; him. 冰水给他能量。 L‘eau froide s&apos;a revigoré。&lt;/li&gt;
&lt;li&gt;China aims to &lt;i&gt;invigorate&lt;/i&gt; EU ties.&lt;sup&gt;&lt;a id=&quot;fnr.1&quot; class=&quot;footref&quot; href=&quot;#fn.1&quot;&gt;1&lt;/a&gt;&lt;/sup&gt; 中国要激活与英国的联系。to
invigorate ties, Beziehung beleben&lt;sup&gt;(de)&lt;/sup&gt;&lt;/li&gt;
&lt;li&gt;Ce cordial m’a &lt;i&gt;revigoré&lt;/i&gt;.&lt;sup&gt;(fr)&lt;/sup&gt; 此甜酒赋予我活力。&lt;/li&gt;
&lt;li&gt;Cette bonne nouvelle l’a tout &lt;i&gt;revigoré&lt;/i&gt;.&lt;sup&gt;(fr)&lt;/sup&gt; 这本新小说赋予他活力。&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgheadline3&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgheadline3&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;3&lt;/span&gt; vigor/vigour&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-3&quot;&gt;
&lt;p&gt;
力量，健康，活力。die Vitalität&lt;sup&gt;(de)&lt;/sup&gt;, die Kraft&lt;sup&gt;(de)&lt;/sup&gt;. la vigueur&lt;sup&gt;(fr)&lt;/sup&gt;.
&lt;/p&gt;

&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;Do you have a &lt;i&gt;vigor&lt;/i&gt;? A &lt;i&gt;vigor&lt;/i&gt; for rigor?&lt;sup&gt;&lt;a id=&quot;fnr.2&quot; class=&quot;footref&quot; href=&quot;#fn.2&quot;&gt;2&lt;/a&gt;&lt;/sup&gt;&lt;/li&gt;
&lt;li&gt;Before long, you’ll be jumping out of bed with more &lt;i&gt;vigor&lt;/i&gt; than ever because
you know people are relying on you.&lt;sup&gt;&lt;a id=&quot;fnr.3&quot; class=&quot;footref&quot; href=&quot;#fn.3&quot;&gt;3&lt;/a&gt;&lt;/sup&gt; 曾几何时，你从床上跃起，充满能量，因为你知道有人需要你。&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgheadline4&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgheadline4&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;4&lt;/span&gt; reinvigorate&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-4&quot;&gt;
&lt;p&gt;
使再振作，使复兴。
&lt;/p&gt;

&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;How can Kenya &lt;i&gt;reinvigorate&lt;/i&gt; manufacturing?&lt;sup&gt;&lt;a id=&quot;fnr.4&quot; class=&quot;footref&quot; href=&quot;#fn.4&quot;&gt;4&lt;/a&gt;&lt;/sup&gt; 肯尼亚如何振兴制造业？&lt;/li&gt;
&lt;li&gt;The fresh figures are bad news Prime Minister Shinzo Abe, whose government has
been struggling to &lt;i&gt;reinvigorate&lt;/i&gt; the faltering domestic economy.&lt;sup&gt;&lt;a id=&quot;fnr.5&quot; class=&quot;footref&quot; href=&quot;#fn.5&quot;&gt;5&lt;/a&gt;&lt;/sup&gt; 最近的日本财政数字不佳，安倍晋三政府在努力振兴经济。&lt;/li&gt;
&lt;li&gt;The modern, high-quality space that has been created is set to &lt;i&gt;reinvigorate&lt;/i&gt;
the working environment for employees and provides a clean, modern
infrastructure complete with the latest technology.&lt;sup&gt;&lt;a id=&quot;fnr.6&quot; class=&quot;footref&quot; href=&quot;#fn.6&quot;&gt;6&lt;/a&gt;&lt;/sup&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgheadline5&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgheadline5&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;5&lt;/span&gt; 总结&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-5&quot;&gt;
&lt;p&gt;
本文首先学习了 G20 峰会的主题词“Toward an Innovative, &lt;i&gt;Invigorated&lt;/i&gt;,
Interconnected and Inclusive World Economy”，然后学习了其中的单词 invigorate，并挖掘出它的词根 vigor，以及衍生词 reinvigorate。
&lt;/p&gt;

&lt;p&gt;
无知的好处是随时随地都有机会学习新东西，可以学习新东西是多么幸福的事情呀。这可以算是傻人有傻福的一种新解释吧。
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;footnotes&quot;&gt;
&lt;h2 class=&quot;footnotes&quot;&gt;Footnotes: &lt;/h2&gt;
&lt;div id=&quot;text-footnotes&quot;&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.1&quot; class=&quot;footnum&quot; href=&quot;#fnr.1&quot;&gt;1&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;http://english.gov.cn/state_council/2015/03/16/content_281475072547652.htm&quot;&gt;http://english.gov.cn/state_council/2015/03/16/content_281475072547652.htm&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.2&quot; class=&quot;footnum&quot; href=&quot;#fnr.2&quot;&gt;2&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;http://ask.metafilter.com/299046/Do-you-have-a-vigor-A-vigor-for-rigor&quot;&gt;http://ask.metafilter.com/299046/Do-you-have-a-vigor-A-vigor-for-rigor&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.3&quot; class=&quot;footnum&quot; href=&quot;#fnr.3&quot;&gt;3&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;https://incomeclub.co/avoid-non-financial-problems-new-retiree/&quot;&gt;https://incomeclub.co/avoid-non-financial-problems-new-retiree/&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.4&quot; class=&quot;footnum&quot; href=&quot;#fnr.4&quot;&gt;4&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;http://africanbusinessmagazine.com/sectors/infrastructure/can-kenya-reinvigorate-manufacturing/&quot;&gt;http://africanbusinessmagazine.com/sectors/infrastructure/can-kenya-reinvigorate-manufacturing/&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.5&quot; class=&quot;footnum&quot; href=&quot;#fnr.5&quot;&gt;5&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;http://myhealthbowl.com/2016/08/18/japans-trade-shrinks-in-july-exports-sink-14-percent.html&quot;&gt;http://myhealthbowl.com/2016/08/18/japans-trade-shrinks-in-july-exports-sink-14-percent.html&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.6&quot; class=&quot;footnum&quot; href=&quot;#fnr.6&quot;&gt;6&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;http://www.travelmole.com/news_feature.php?news_id=2023352&quot;&gt;http://www.travelmole.com/news_feature.php?news_id=2023352&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;


&lt;/div&gt;
&lt;/div&gt;
</content>
 </entry>
 
 <entry>
   <title>单词本：蔬菜之卷心菜</title>
   <link href="http://kimi.im/2016-08-17-english-cabbage"/>
   <updated>2016-08-17T00:00:00+00:00</updated>
   <id>http://kimi.im/english-cabbage</id>
   <content type="html">&lt;p&gt;
上一篇学习到蔬菜类食物的萝卜和胡萝卜&lt;sup&gt;&lt;a id=&quot;fnr.1&quot; class=&quot;footref&quot; href=&quot;#fn.1&quot;&gt;1&lt;/a&gt;&lt;/sup&gt;，今天继续学习蔬菜单词。
&lt;/p&gt;

&lt;div id=&quot;outline-container-orgheadline1&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgheadline1&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;1&lt;/span&gt; cabbage&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-1&quot;&gt;
&lt;p&gt;
包菜、甘蓝、卷心菜。德语 der Kohl&lt;sup&gt;de&lt;/sup&gt;，法语 le chou&lt;sup&gt;fr&lt;/sup&gt;。
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;We have fresh cabbage, celery, lettuce and spinach. 我们有新鲜的卷心菜、芹菜、生菜和菠菜。&lt;/li&gt;
&lt;li&gt;Spinach, egg-plant, cabbage, cauliflower, cucumber and radish are our
fabourite vegetables. 菠菜、茄子、卷心菜、花菜、黄瓜和萝卜都是我们爱吃的蔬菜。&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
说来也奇怪，卷心菜在英语里还有纸钞（paper money）的意思。比如
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;I&apos;d have &lt;i&gt;cabbage&lt;/i&gt; galore in the bank if I were more frugal. 我如果节省一点的话，银行里就会有些钞票结余。&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
另外卷心菜可能给人一种笨笨的感觉，所以也用来形容一个人很木讷， le légume&lt;sup&gt;fr&lt;/sup&gt;：
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;Oh My God, Lily! Your such a cabbage! 总之这种说法都是比较不太礼貌的用法，知道就好，最好别乱用……&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
卷心菜还有植物人之意 a person whose physical or mental activity is impaired or
destroyed by injury or illness，不过这样的说法依然有些不太礼貌，知道就好。
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;After the car crash, he became a cabbage.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
德语和法语里用 Vegetable 来形容：
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;nach seinem Unfall vegetierte er hur noch dahin 他车祸后成了植物人&lt;/li&gt;
&lt;li&gt;l&apos;éta végétatif 植物人状态&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgheadline2&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgheadline2&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;2&lt;/span&gt; Chinese cabbage&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-2&quot;&gt;
&lt;p&gt;
我们常吃的大白菜，大概是中国特有的白菜吧。le chou chinois&lt;sup&gt;fr&lt;/sup&gt;， 连芬兰语都叫中国包菜 kiinankaali&lt;sup&gt;fi&lt;/sup&gt;。
&lt;/p&gt;

&lt;p&gt;
北方的大白菜，叫 Chinese cabbage，也叫 celery cabbage，英国人叫 Chinese leaf。从日语传过去的叫 Napa cabbage。Bok Choy 广东话“白菜”的音译，和北方人说的大白菜不是一个东西，其实是北方人说的油菜，上海人说的小青菜，或上海青。&lt;sup&gt;&lt;a id=&quot;fnr.2&quot; class=&quot;footref&quot; href=&quot;#fn.2&quot;&gt;2&lt;/a&gt;&lt;/sup&gt;
&lt;/p&gt;

&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;Napa cabbage is the main ingredient in traditional kimchi.&lt;sup&gt;&lt;a id=&quot;fnr.3&quot; class=&quot;footref&quot; href=&quot;#fn.3&quot;&gt;3&lt;/a&gt;&lt;/sup&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgheadline3&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgheadline3&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;3&lt;/span&gt; Summary&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-3&quot;&gt;
&lt;p&gt;
总算知道了 cabbage 是包菜，甘蓝，卷心菜这一类蔬菜，而 Chinese cabbage 指的是东北大白菜，而 Bok Choy 则是小白菜、小青菜。
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;footnotes&quot;&gt;
&lt;h2 class=&quot;footnotes&quot;&gt;Footnotes: &lt;/h2&gt;
&lt;div id=&quot;text-footnotes&quot;&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.1&quot; class=&quot;footnum&quot; href=&quot;#fnr.1&quot;&gt;1&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;http://kimi.im/2016-08-16-english-vegetable&quot;&gt;http://kimi.im/2016-08-16-english-vegetable&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.2&quot; class=&quot;footnum&quot; href=&quot;#fnr.2&quot;&gt;2&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;http://icade.me/questions/2164&quot;&gt;http://icade.me/questions/2164&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.3&quot; class=&quot;footnum&quot; href=&quot;#fnr.3&quot;&gt;3&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;http://www.maangchi.com/ingredient/napa-cabbage&quot;&gt;http://www.maangchi.com/ingredient/napa-cabbage&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;


&lt;/div&gt;
&lt;/div&gt;
</content>
 </entry>
 
 <entry>
   <title>单词本：蔬菜</title>
   <link href="http://kimi.im/2016-08-16-english-vegetable"/>
   <updated>2016-08-16T00:00:00+00:00</updated>
   <id>http://kimi.im/english-vegetable</id>
   <content type="html">&lt;p&gt;
上一篇小文章提到学习食物相关的一些单词，文章开头列了几种食物分类，全文只是介绍了谷物类食物的单词，今天继续学习一下蔬菜相关的单词。
&lt;/p&gt;

&lt;div id=&quot;outline-container-orgheadline1&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgheadline1&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;1&lt;/span&gt; Vegetable&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-1&quot;&gt;
&lt;p&gt;
vegetable 是蔬菜的统称，法语 le légume&lt;sup&gt;fr&lt;/sup&gt; 德语 der Gemüse&lt;sup&gt;de&lt;/sup&gt;。
&lt;/p&gt;

&lt;p&gt;
只吃蔬菜的人素食者就是 vegetarian，vegan 和 veggie 大概是昵称吧。我记得王菲的微博名就叫 Veggieg&lt;sup&gt;&lt;a id=&quot;fnr.1&quot; class=&quot;footref&quot; href=&quot;#fn.1&quot;&gt;1&lt;/a&gt;&lt;/sup&gt;，大概是王菲是素食主义者吧。
&lt;/p&gt;

&lt;p&gt;
法语 végétarien(ne)，德语 Veganer(in)，Vegetarier(in)。
&lt;/p&gt;

&lt;p&gt;
素食主义 veganism 又叫 vegetarianism，le veganisme&lt;sup&gt;fr&lt;/sup&gt;, le végétalisme&lt;sup&gt;fr&lt;/sup&gt;, der
Veganismus&lt;sup&gt;de&lt;/sup&gt;. 顺便提一下： carnivorism 肉食主义，carnivorse 食肉动物。
&lt;/p&gt;

&lt;p&gt;
veggieburger, Gemüseburger&lt;sup&gt;de&lt;/sup&gt;，素汉堡。
&lt;/p&gt;

&lt;p&gt;
蔬菜的种类实在太多了，比如萝卜、胡萝卜、白菜、甘蓝、花菜、芹菜、茄子、番茄、辣椒、黄瓜、西葫芦、南瓜、冬瓜、丝瓜、苦瓜、豇豆、豌豆、蚕豆、毛豆、扁豆、刀豆、韭菜、洋葱、大蒜、黄花菜、芦笋、竹笋、百合、莴苣、莴笋、茼蒿、菠菜……
&lt;/p&gt;

&lt;p&gt;
看来今天也只能先选两三个学习一下了，就先看看萝卜和胡萝卜这两个很容易混在一起的蔬菜吧。其实，萝卜和胡萝卜在英语中完全是两类毫不相干的蔬菜，大概都是根茎蔬菜，又长的比较像，所以咱们统称他们为萝卜吧。
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgheadline2&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgheadline2&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;2&lt;/span&gt; radish&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-2&quot;&gt;
&lt;p&gt;
萝卜：radish&lt;sup&gt;en&lt;/sup&gt;，der Rettich&lt;sup&gt;de&lt;/sup&gt;, le radis。英法德在萝卜的命名上保持了很好的一致性。往往能保持很好的一致性的单词，其背后都有古老的拉丁语支持着。
&lt;/p&gt;

&lt;p&gt;
果然 radish 源自拉丁语 radix，radic，“root”的意思。也就是说 radix有“根”“根基”“根本”之意。
&lt;/p&gt;

&lt;p&gt;
比如 radical 根本的，彻底的，free redicals 自由基，radical sign 开根号：√,radicle 胚根。萝卜这个单词扩展开还是蛮多知识点可以讨论的，暂且不展开了吧，下次有空了另写一篇吧。
&lt;/p&gt;

&lt;p&gt;
dried radish slices 萝卜干
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgheadline3&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgheadline3&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;3&lt;/span&gt; carrot&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-3&quot;&gt;
&lt;p&gt;
胡萝卜，la carrote&lt;sup&gt;fr&lt;/sup&gt;, die Karotte&lt;sup&gt;de&lt;/sup&gt;, die Möhre&lt;sup&gt;de&lt;/sup&gt;。胡萝卜含有特殊的成分叫胡萝卜素 carotene，le carotène&lt;sup&gt;fr&lt;/sup&gt;。这里要注意一下，ca 和 o 之间只有一个 r，英语和法语的拼写一样。
&lt;/p&gt;

&lt;p&gt;
另外还有几个胡萝卜相关的成语：
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;the carrot and the stick 胡萝卜加大棒，威逼利诱；manier la carotte et le
bâton&lt;sup&gt;fr&lt;/sup&gt;，法语版胡萝卜+大棒；mit Zuckerbrot und Peitsche
德语版甜面包+皮鞭；&lt;/li&gt;
&lt;li&gt;hold out/offer a carrot to sb. 利诱某人；德语版 jmdm. einen Köder vor die Nase
halten 在某人鼻子前挂个诱饵。carotter qch à qn&lt;sup&gt;fr&lt;/sup&gt;，法语直接将胡萝卜动词化：从某人那里胡萝卜了某物，换句话说，从某人哪里骗取了某物。Elle m&apos;a carotté dix
euros&lt;sup&gt;fr&lt;/sup&gt; 她从我这里骗走了 10 欧元。Je me suis encore fait carrotter&lt;sup&gt;fr&lt;/sup&gt; 我又被骗了一次。&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
胡萝卜做的菜：
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;grated carrots，carottes râpées&lt;sup&gt;fr&lt;/sup&gt;，geraspelte Möhren od. Karotten&lt;sup&gt;de&lt;/sup&gt;，擦碎的胡萝卜。&lt;/li&gt;
&lt;li&gt;boiled beef and carrots 胡萝卜清炖牛肉&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgheadline4&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgheadline4&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;4&lt;/span&gt; 小结&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-4&quot;&gt;
&lt;p&gt;
今天本打算学习几个主要的蔬菜相关的单词，但是写着写着发现仅仅萝卜和胡萝卜就占据了很大的篇幅，看来今后一篇文章只能学习两种蔬菜了。不着急，慢慢来，太快了，就享受不了学习的乐趣了，再说了，反正人生还很漫长，急什么。
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;footnotes&quot;&gt;
&lt;h2 class=&quot;footnotes&quot;&gt;Footnotes: &lt;/h2&gt;
&lt;div id=&quot;text-footnotes&quot;&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.1&quot; class=&quot;footnum&quot; href=&quot;#fnr.1&quot;&gt;1&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;http://weibo.com/u/1629810574&quot;&gt;http://weibo.com/u/1629810574&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;


&lt;/div&gt;
&lt;/div&gt;
</content>
 </entry>
 
 <entry>
   <title>单词本：食物</title>
   <link href="http://kimi.im/2016-08-14-english-food"/>
   <updated>2016-08-14T00:00:00+00:00</updated>
   <id>http://kimi.im/english-food</id>
   <content type="html">&lt;p&gt;
上周出差去上海，回来发现公司领导组织了一次常见食物英语单词学习的活动。既然错过了，就好好自学一下吧。
&lt;/p&gt;

&lt;p&gt;
常见食物可以分成这样几类：
&lt;/p&gt;
&lt;ol class=&quot;org-ol&quot;&gt;
&lt;li&gt;Cereal grain：谷物&lt;/li&gt;
&lt;li&gt;Vegetables：蔬菜&lt;/li&gt;
&lt;li&gt;Fruits：水果&lt;/li&gt;
&lt;li&gt;Animal source food：动物性食物&lt;/li&gt;
&lt;li&gt;Bean：豆类，豆制品&lt;/li&gt;
&lt;li&gt;Edible fungi, especially mushrooms：食用菌，蘑菇&lt;/li&gt;
&lt;li&gt;Drinks：饮料&lt;/li&gt;
&lt;/ol&gt;

&lt;div id=&quot;outline-container-orgheadline6&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgheadline6&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;1&lt;/span&gt; Cereal grain&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-1&quot;&gt;
&lt;p&gt;
Cereal grain is a staple food. 谷物类食物中最常见的就是米饭了，另外还有比如小米，大麦，黑米，玉米。
&lt;/p&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgheadline1&quot; class=&quot;outline-3&quot;&gt;
&lt;h3 id=&quot;orgheadline1&quot;&gt;&lt;span class=&quot;section-number-3&quot;&gt;1.1&lt;/span&gt; rice&lt;/h3&gt;
&lt;div class=&quot;outline-text-3&quot; id=&quot;text-1-1&quot;&gt;
&lt;p&gt;
大米，水稻的种子。
&lt;/p&gt;

&lt;p&gt;
As a cereal grain, &lt;b&gt;rice&lt;/b&gt; is the most widely consumed staple food for a large
part of the world&apos;s human population, especially in Asia.&lt;sup&gt;&lt;a id=&quot;fnr.1&quot; class=&quot;footref&quot; href=&quot;#fn.1&quot;&gt;1&lt;/a&gt;&lt;/sup&gt;
&lt;/p&gt;

&lt;p&gt;
法语 &lt;b&gt;Le riz&lt;sup&gt;fr&lt;/sup&gt;&lt;/b&gt; est une céréale de la famille des poacées.&lt;sup&gt;&lt;a id=&quot;fnr.2&quot; class=&quot;footref&quot; href=&quot;#fn.2&quot;&gt;2&lt;/a&gt;&lt;/sup&gt;
&lt;/p&gt;

&lt;p&gt;
德语 &lt;b&gt;Der Reis&lt;sup&gt;de&lt;/sup&gt;&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
米饭就是煮熟的大米，所以就叫 cooked rice 或者 boiled rice。顺便提一下，水稻学名叫 Oryza sativa，稻田叫 paddy。
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgheadline2&quot; class=&quot;outline-3&quot;&gt;
&lt;h3 id=&quot;orgheadline2&quot;&gt;&lt;span class=&quot;section-number-3&quot;&gt;1.2&lt;/span&gt; wheat&lt;/h3&gt;
&lt;div class=&quot;outline-text-3&quot; id=&quot;text-1-2&quot;&gt;
&lt;p&gt;
小麦，学名 Triticum。德语 der Weizen&lt;sup&gt;de&lt;/sup&gt;，法语 le blé&lt;sup&gt;fr&lt;/sup&gt;.
&lt;/p&gt;

&lt;p&gt;
Le blé fait partie des trois grandes céréales avec le maïs et le riz.&lt;sup&gt;&lt;a id=&quot;fnr.3&quot; class=&quot;footref&quot; href=&quot;#fn.3&quot;&gt;3&lt;/a&gt;&lt;/sup&gt; 小麦和玉米，大米号称三大谷物。
&lt;/p&gt;

&lt;p&gt;
小麦是以下这些食物的原料：
&lt;/p&gt;

&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;bread：面包，le pain&lt;sup&gt;fr&lt;/sup&gt;, das Brot&lt;sup&gt;de&lt;/sup&gt;.&lt;/li&gt;
&lt;li&gt;porridge：麦片粥，La bouillie&lt;sup&gt;fr&lt;/sup&gt;, der Brei&lt;sup&gt;de&lt;/sup&gt;.&lt;/li&gt;
&lt;li&gt;biscuit：饼干，le biscuit&lt;sup&gt;fr&lt;/sup&gt;, das Keks&lt;sup&gt;de&lt;/sup&gt;.&lt;/li&gt;
&lt;li&gt;Muesli：木斯里，流行德国瑞士的一种麦片+水果+坚果的牛奶泡着吃的食物。之前我们公司一个德国同事经常早上泡着吃。Müsli&lt;sup&gt;de&lt;/sup&gt;.&lt;/li&gt;
&lt;li&gt;muffin：玛芬蛋糕，松饼。德语，法语英语拼写都一样。&lt;/li&gt;
&lt;li&gt;rolls：小圆面包，das Brötchen&lt;sup&gt;de&lt;/sup&gt;, le petit pain&lt;sup&gt;fr&lt;/sup&gt;&lt;/li&gt;
&lt;li&gt;doughnuts：甜甜圈，le donut&lt;sup&gt;fr&lt;/sup&gt;, der Donut&lt;sup&gt;de&lt;/sup&gt;.&lt;/li&gt;
&lt;li&gt;boza (a fermented beverage)：小麦发酵饮料。好像之前在一家墨西哥餐厅喝到过。&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgheadline3&quot; class=&quot;outline-3&quot;&gt;
&lt;h3 id=&quot;orgheadline3&quot;&gt;&lt;span class=&quot;section-number-3&quot;&gt;1.3&lt;/span&gt; millet&lt;/h3&gt;
&lt;div class=&quot;outline-text-3&quot; id=&quot;text-1-3&quot;&gt;
&lt;p&gt;
小米，粟米。德语叫 die Hirse&lt;sup&gt;de&lt;/sup&gt;, 法语叫 le millet&lt;sup&gt;fr&lt;/sup&gt;. 说起小米，有一回和德国人去餐厅吃小米糕，怎么也没法沟通到底是什么东西做的。最后大概是互相理解了，也只能呵呵当做理解了。现在想起来，可能当时他们在说这东西在我们那儿叫 Hirse。不过谁知道呢？今天学习到了，下次倒是可以很好的解释了。
&lt;/p&gt;

&lt;p&gt;
既然小米是 millet，那么小米糕就是 millet cake 了。
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgheadline4&quot; class=&quot;outline-3&quot;&gt;
&lt;h3 id=&quot;orgheadline4&quot;&gt;&lt;span class=&quot;section-number-3&quot;&gt;1.4&lt;/span&gt; black rice&lt;/h3&gt;
&lt;div class=&quot;outline-text-3&quot; id=&quot;text-1-4&quot;&gt;
&lt;p&gt;
黑米，也叫紫米，长寿米。相应的，英语叫 black rice，purple rice，又叫 longevity
rice。称它为长寿米是因为古代医书有记载：黑米有滋阴补肾，健身暖胃，明目活血，清肝润肠，滑湿益精，补肺缓筋等功效。这么看来，早上喝喝黑米粥还是健康的事情了。
&lt;/p&gt;

&lt;p&gt;
法语 le riz noir&lt;sup&gt;fr&lt;/sup&gt;, 黑的米。德语自然就叫 der schwerz Reis&lt;sup&gt;de&lt;/sup&gt;.
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgheadline5&quot; class=&quot;outline-3&quot;&gt;
&lt;h3 id=&quot;orgheadline5&quot;&gt;&lt;span class=&quot;section-number-3&quot;&gt;1.5&lt;/span&gt; corn(maize)&lt;/h3&gt;
&lt;div class=&quot;outline-text-3&quot; id=&quot;text-1-5&quot;&gt;
&lt;p&gt;
玉米，corn 又叫 maize。英语里 corn 可能指各种类型的谷物，因为玉米的学名是 Zea
mays L. 所以用 maize 来称呼玉米可能更精确一些。
&lt;/p&gt;

&lt;p&gt;
法语 le maïs&lt;sup&gt;fr&lt;/sup&gt;. 以前学法语的时候，mais 和 maïs 经常被拿出来用于说明两个小圆点分音符的作用，还有一个例子就是 naïve。
&lt;/p&gt;

&lt;p&gt;
德语叫 der Mais&lt;sup&gt;de&lt;/sup&gt;，没什么悬念。西方世界对玉米的称呼比较统一。
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgheadline7&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgheadline7&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;2&lt;/span&gt; 小结&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-2&quot;&gt;
&lt;p&gt;
本来计划是要把食物相关的主要单词都学习一下的，但是写着写着发现仅仅谷物部分就已经有不少篇幅了。所以就把其他几种食物放到后续的文章中去学习吧。
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;footnotes&quot;&gt;
&lt;h2 class=&quot;footnotes&quot;&gt;Footnotes: &lt;/h2&gt;
&lt;div id=&quot;text-footnotes&quot;&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.1&quot; class=&quot;footnum&quot; href=&quot;#fnr.1&quot;&gt;1&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;https://en.wikipedia.org/wiki/Rice&quot;&gt;https://en.wikipedia.org/wiki/Rice&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.2&quot; class=&quot;footnum&quot; href=&quot;#fnr.2&quot;&gt;2&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;https://fr.wikipedia.org/wiki/Riz&quot;&gt;https://fr.wikipedia.org/wiki/Riz&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.3&quot; class=&quot;footnum&quot; href=&quot;#fnr.3&quot;&gt;3&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;https://fr.wikipedia.org/wiki/Bl%C3%A9&quot;&gt;https://fr.wikipedia.org/wiki/Bl%C3%A9&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;


&lt;/div&gt;
&lt;/div&gt;
</content>
 </entry>
 
 <entry>
   <title>單詞本：德語單詞 benötigen</title>
   <link href="http://kimi.im/2016-08-13-deutsch-benoetigen"/>
   <updated>2016-08-13T00:00:00+00:00</updated>
   <id>http://kimi.im/deutsch-benoetigen</id>
   <content type="html">&lt;p&gt;
讀德國人寫的代碼的時候在注釋終於到這個單詞： benötigen（ to need, to require&lt;sup&gt;en&lt;/sup&gt;
，avoir besoin de&lt;sup&gt;fr&lt;/sup&gt; ）&lt;sup&gt;&lt;a id=&quot;fnr.1&quot; class=&quot;footref&quot; href=&quot;#fn.1&quot;&gt;1&lt;/a&gt;&lt;/sup&gt; 。
&lt;/p&gt;

&lt;div id=&quot;outline-container-orgheadline4&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgheadline4&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;1&lt;/span&gt; benötigen&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-1&quot;&gt;
&lt;p&gt;
benötigen 是由 nötig 增加前後綴生成的一個動詞： be- + nötig + -en。
&lt;/p&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgheadline1&quot; class=&quot;outline-3&quot;&gt;
&lt;h3 id=&quot;orgheadline1&quot;&gt;&lt;span class=&quot;section-number-3&quot;&gt;1.1&lt;/span&gt; nötig&lt;/h3&gt;
&lt;div class=&quot;outline-text-3&quot; id=&quot;text-1-1&quot;&gt;
&lt;p&gt;
形容詞“必需的”，“必不可少的”，“急需的”，necessary&lt;sup&gt;en&lt;/sup&gt;。比如
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;Es ist nötig, ein Handwerk zu erlernen. It is necessary to learn a
handicraft.&lt;/li&gt;
&lt;li&gt;Danke, es ist nicht nötig. Thanks, it is not necessary.&lt;/li&gt;
&lt;li&gt;Schnelle Hilfe ist nötig. First aid is required.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
這個詞和英語的 needy，瑞典語的 nödig 應該都是來自同一個古單詞，意義為“急需”：
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;The needy advertise themselves, and how much they want. 急需錢的人向大家公佈，并告知需要多少金錢。&lt;/li&gt;
&lt;li&gt;He gave away a part of his income to his needy friends. 他將自己部分收入送給急需的朋友。&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgheadline2&quot; class=&quot;outline-3&quot;&gt;
&lt;h3 id=&quot;orgheadline2&quot;&gt;&lt;span class=&quot;section-number-3&quot;&gt;1.2&lt;/span&gt; nötigen&lt;/h3&gt;
&lt;div class=&quot;outline-text-3&quot; id=&quot;text-1-2&quot;&gt;
&lt;p&gt;
動詞形式的 nötigen 則有強迫，勸請客的意思：
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;Er nötigte den Freund zur Mahlzeit. 他一再要求請他朋友去吃飯。&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgheadline3&quot; class=&quot;outline-3&quot;&gt;
&lt;h3 id=&quot;orgheadline3&quot;&gt;&lt;span class=&quot;section-number-3&quot;&gt;1.3&lt;/span&gt; 德語前綴 be-&lt;/h3&gt;
&lt;div class=&quot;outline-text-3&quot; id=&quot;text-1-3&quot;&gt;
&lt;p&gt;
德語前綴 “be-” 可以改變動詞的性質，主要有如下幾個作用：
&lt;/p&gt;

&lt;p&gt;
第一， macht in Bildungen mit intransitiven Verben diese transitiv，可以使不及物動詞變成及物動詞，比如：antworten（回答）, beantworten（答復）, urteilen（判斷，評價）, beurteilen（評價某物，鑒定某事）&lt;sup&gt;&lt;a id=&quot;fnr.2&quot; class=&quot;footref&quot; href=&quot;#fn.2&quot;&gt;2&lt;/a&gt;&lt;/sup&gt;
&lt;/p&gt;

&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;Ich wusste &lt;b&gt;auf&lt;/b&gt; seine Frage sofort antworten.　我要對他的問題立刻做出回答。（不及物動詞）&lt;/li&gt;
&lt;li&gt;Er beantwortet die Fragen blitzschnell.　他很快便回答了這個問題。（及物動詞）&lt;/li&gt;
&lt;li&gt;Wer es nicht versucht, kann nicht urteilen. 不嘗試就無法評判。（不及物動詞）&lt;/li&gt;
&lt;li&gt;Wie beurteilen Sie Ihre Fitness? 你如何評價你的健康狀況？（及物動詞）&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
第二，macht in Bildungen mit transitiven Verben mit Präpositionalobjekt dieses
zum Akkusativobjekt，通過添加 be- 使得及物動詞的支配關係發生變化。沒有 be- 的及物動詞直接支配第四格的賓語，而添加 be- 之後則先作用于第三格賓語再作用於第四格賓語：
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;Die Vögel bauen ihre Nester. 小鳥築巢。這裡的 bauen 是接受第四格賓語的動詞。&lt;/li&gt;
&lt;li&gt;Er bebaut die Erde mit Kartoffeln. 他種在土裡一棵土豆。這裡的 bebauen 就是配合第三格賓語＋第四格賓語的動詞啦。&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
第三，When used with a verb that is already a transitive verb, it will change
the focus of the relationship.&lt;sup&gt;&lt;a id=&quot;fnr.3&quot; class=&quot;footref&quot; href=&quot;#fn.3&quot;&gt;3&lt;/a&gt;&lt;/sup&gt; 改變及物動詞動作的關注點。比如 Ich streue
Salz auf mein Mettbrötchen. 我撒鹽在我的肉餡小麵包上。Ich bestreue mein
Mettbrötchen mit Salz. 我撒我的肉餡小麵包，用鹽。實在是有些費解，據說德國人也搞不清楚，其實就是一種約定俗成的語言習慣。
&lt;/p&gt;


&lt;p&gt;
在分析了 nötig，nötigen 和 be- 之後，回到 benötigen 的探討。nötigen 好像是側重於對人的要求，或者說對主動主體的要求，而 benötigen 則側重於對被動主體的要求。換句話說，nötigen 是對人的要求，而 benötigen 是對物的要求。有點像中文中的“必須”和“必需”的區別。
&lt;/p&gt;

&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;Man benötigt ein Visum zur Einreise. 人們必需簽證才可入境。&lt;/li&gt;
&lt;li&gt;Für diese Aufgabe benötigen wir jemanden mit besonderen Qualitäten. 對於此項任務，我們必需專業的資質。&lt;/li&gt;
&lt;li&gt;Er nötigte den Freund zur Mahlzeit. 他一定要求請（必須）朋友去吃飯。&lt;/li&gt;
&lt;li&gt;Er war zu der Unterschrift genötigt worden. 他被迫（被必須）簽了字。&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;


&lt;div id=&quot;outline-container-orgheadline7&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgheadline7&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;2&lt;/span&gt; Deviation&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-2&quot;&gt;
&lt;/div&gt;&lt;div id=&quot;outline-container-orgheadline5&quot; class=&quot;outline-3&quot;&gt;
&lt;h3 id=&quot;orgheadline5&quot;&gt;&lt;span class=&quot;section-number-3&quot;&gt;2.1&lt;/span&gt; Nötigung&lt;/h3&gt;
&lt;div class=&quot;outline-text-3&quot; id=&quot;text-2-1&quot;&gt;
&lt;p&gt;
duress&lt;sup&gt;en&lt;/sup&gt;，監禁，coercion&lt;sup&gt;en&lt;/sup&gt;，壓制，compulsion&lt;sup&gt;en&lt;/sup&gt;，強迫行為。
&lt;/p&gt;

&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;Er wurde wegen Nötigung verurteilt. 他因侵犯他人而被判刑。&lt;/li&gt;
&lt;li&gt;sexuelle Nötigung: sexual assault&lt;sup&gt;en&lt;/sup&gt;，侵犯。&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgheadline6&quot; class=&quot;outline-3&quot;&gt;
&lt;h3 id=&quot;orgheadline6&quot;&gt;&lt;span class=&quot;section-number-3&quot;&gt;2.2&lt;/span&gt; benötigte&lt;/h3&gt;
&lt;div class=&quot;outline-text-3&quot; id=&quot;text-2-2&quot;&gt;
&lt;p&gt;
required&lt;sup&gt;en&lt;/sup&gt;，必需的
&lt;/p&gt;

&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;nicht mehr benötigte Arbeiter，冗餘員工&lt;/li&gt;
&lt;li&gt;benötigte Reserven，required reserves&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;footnotes&quot;&gt;
&lt;h2 class=&quot;footnotes&quot;&gt;Footnotes: &lt;/h2&gt;
&lt;div id=&quot;text-footnotes&quot;&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.1&quot; class=&quot;footnum&quot; href=&quot;#fnr.1&quot;&gt;1&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;http://en.wiktionary.org/wiki/ben%C3%B6tigen&quot;&gt;http://en.wiktionary.org/wiki/ben%C3%B6tigen&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.2&quot; class=&quot;footnum&quot; href=&quot;#fnr.2&quot;&gt;2&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;http://www.dedecn.com/inhalte/deutsch/deyucihui/20091231468.html&quot;&gt;http://www.dedecn.com/inhalte/deutsch/deyucihui/20091231468.html&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.3&quot; class=&quot;footnum&quot; href=&quot;#fnr.3&quot;&gt;3&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;https://www.quora.com/Does-the-prefix-be-in-German-mean-something&quot;&gt;https://www.quora.com/Does-the-prefix-be-in-German-mean-something&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;


&lt;/div&gt;
&lt;/div&gt;
</content>
 </entry>
 
 <entry>
   <title>Linux 下用命令行工具 xdotool 模拟图形界面的鼠标键盘操作</title>
   <link href="http://kimi.im/2016-08-12-xdotool"/>
   <updated>2016-08-12T00:00:00+00:00</updated>
   <id>http://kimi.im/xdotool</id>
   <content type="html">&lt;p&gt;
最近发现一个叫 xdotool 的 Linux 工具，可以用来在命令行下操作鼠标移动、点击以及键盘输入，同时也支持窗口管理动作比如切换窗口，移动窗口等。&lt;sup&gt;&lt;a id=&quot;fnr.1&quot; class=&quot;footref&quot; href=&quot;#fn.1&quot;&gt;1&lt;/a&gt;&lt;/sup&gt;
&lt;/p&gt;

&lt;p&gt;
至于我为什么找这个工具的原因是这样的。我们的这边团队开发任务管理用的是一个基于
Web 的应用，工程师登录到网页中更新任务时间，然后服务器会自动产生进度状态报表。为了提高开发进度的透明度，我把这个报表投放到办公室墙上的电视机上，大家抬头就能清楚的看到开发进展。电视机通过一个 RaspberryPi 自动连到服务器获取进度报表，并展示在全屏浏览器中。
&lt;/p&gt;

&lt;p&gt;
那么问题来了，有时候自动打开的网页需要按一个登录按钮才能登录进去，但是我们的电视机和 RaspberryPi 是挂在墙上的，没有连接鼠标和键盘。为了可以通过远程 ssh 的终端去虚拟鼠标移动和点击动作，就需要一个命令行操作鼠标键盘的工具。所以就找到了 xdotool。
&lt;/p&gt;


&lt;div id=&quot;outline-container-orgheadline1&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgheadline1&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;1&lt;/span&gt; 安装&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-1&quot;&gt;
&lt;p&gt;
安装非常方便，在 Debian 系统里只要运行如下命令即可：
&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;
pi@maserati ~ $ sudo apt-get install xdotool
&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgheadline2&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgheadline2&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;2&lt;/span&gt; 使用&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-2&quot;&gt;
&lt;p&gt;
以下命令移动鼠标动 1050 85 的位置（我们网页程序登录按钮所在的位置），然后点击鼠标左键：
&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;
pi@maserati ~ $ xdotool mousemove 1050 85 click 1
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;
如果是远程 ssh 登录到 Linux 终端还需要设置显示器变量：
&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;
pi@maserati ~ $ export DISPLAY=:0.0
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;
不然会报如下错误：
&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;
pi@maserati ~ $ xdotool mousemove 1050 85
Error: Can&apos;t open display: (null)
Failed creating new xdo instance
&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;footnotes&quot;&gt;
&lt;h2 class=&quot;footnotes&quot;&gt;Footnotes: &lt;/h2&gt;
&lt;div id=&quot;text-footnotes&quot;&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.1&quot; class=&quot;footnum&quot; href=&quot;#fnr.1&quot;&gt;1&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;http://www.semicomplete.com/projects/xdotool/&quot;&gt;http://www.semicomplete.com/projects/xdotool/&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;


&lt;/div&gt;
&lt;/div&gt;
</content>
 </entry>
 
 <entry>
   <title>单词本：牛的</title>
   <link href="http://kimi.im/2016-08-11-english-bovine"/>
   <updated>2016-08-11T00:00:00+00:00</updated>
   <id>http://kimi.im/english-bovine</id>
   <content type="html">&lt;p&gt;
不久前不是刚过七夕节么，那天看到 China Daily 有介绍中国情人节牛郎织女的故事，其中有提到神牛的来历：
&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;
The cow, however, was a former god who had violated imperial rules and was sent
to earth in &lt;i&gt;bovine&lt;/i&gt; form.&lt;sup&gt;&lt;a id=&quot;fnr.1&quot; class=&quot;footref&quot; href=&quot;#fn.1&quot;&gt;1&lt;/a&gt;&lt;/sup&gt;
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;
前世大神违反天条贬为牛形。
&lt;/p&gt;

&lt;p&gt;
在文中见到一个新单词 bovine。
&lt;/p&gt;

&lt;div id=&quot;outline-container-orgheadline1&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgheadline1&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;1&lt;/span&gt; Bovine&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-1&quot;&gt;
&lt;blockquote&gt;
&lt;ol class=&quot;org-ol&quot;&gt;
&lt;li&gt;of, relating to, or resembling bovines and especially the ox or cow&lt;/li&gt;
&lt;li&gt;having qualities (as placidity or dullness) characteristic of oxen or cows&lt;/li&gt;
&lt;/ol&gt;
&lt;/blockquote&gt;

&lt;p&gt;
1） 和牛相关的；2）和牛一样蠢笨迟钝的。
&lt;/p&gt;

&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;California declared free of bovine tuberculosis. 加州宣称没有牛肺结核病。&lt;sup&gt;&lt;a id=&quot;fnr.2&quot; class=&quot;footref&quot; href=&quot;#fn.2&quot;&gt;2&lt;/a&gt;&lt;/sup&gt;&lt;/li&gt;
&lt;li&gt;But is there something vaguely bovine, dull, about the state of being
unstressed? Is there something slow, unfruitful, stagnant or dense about
calm?&lt;sup&gt;&lt;a id=&quot;fnr.3&quot; class=&quot;footref&quot; href=&quot;#fn.3&quot;&gt;3&lt;/a&gt;&lt;/sup&gt; 摘自 ft.com 关于如何享受压力的一篇文章：“但是，是不是会在没有压力的时候感觉依稀有些像牛一样笨拙，迟钝？是不是会在平静的时候觉得有些慢悠悠，没成果，停顿不前，又愚钝呢？”很明显作者是个驱动（Driver）型的人。（关于社交风格类型的讨论详见前几天的文章：&lt;a href=&quot;http://kimi.im/2016-08-03-versatile-communication&quot;&gt;August 3, 2016 » 管理技能：溝通中的迎合能力&lt;/a&gt;）&lt;/li&gt;
&lt;li&gt;Mr Mad Eyebrows said: “What worries me is the impression given by the 40% who
say they won’t. At best it suggests closed minds, a certain bigotry. At worst
it conveys an image of bovine stupidity.” &lt;sup&gt;&lt;a id=&quot;fnr.4&quot; class=&quot;footref&quot; href=&quot;#fn.4&quot;&gt;4&lt;/a&gt;&lt;/sup&gt;疯眉毛先生说：“让我担心的是
40% 说不会的人对我的印象。好的方面表示心灵闭塞，某种程度的顽固不化。坏的方面传递了一个如牛一般蠢笨迟钝的形象。”&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgheadline4&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgheadline4&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;2&lt;/span&gt; Derivation / 衍&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-2&quot;&gt;
&lt;/div&gt;&lt;div id=&quot;outline-container-orgheadline2&quot; class=&quot;outline-3&quot;&gt;
&lt;h3 id=&quot;orgheadline2&quot;&gt;&lt;span class=&quot;section-number-3&quot;&gt;2.1&lt;/span&gt; bovid&lt;/h3&gt;
&lt;div class=&quot;outline-text-3&quot; id=&quot;text-2-1&quot;&gt;
&lt;p&gt;
牛科动物
&lt;/p&gt;

&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;Bovidae is the biological family of cloven-hoofed, ruminant mammals that
includes bison, African buffalo, water buffalo, antelopes, gazelles, sheep,
goats, muskoxen, and domestic cattle. A member of this family is called a
bovid.&lt;sup&gt;&lt;a id=&quot;fnr.5&quot; class=&quot;footref&quot; href=&quot;#fn.5&quot;&gt;5&lt;/a&gt;&lt;/sup&gt;&lt;/li&gt;
&lt;li&gt;Neanderthals just wore cape-like clothing mainly from bovids and animals of
the deer family.&lt;sup&gt;&lt;a id=&quot;fnr.6&quot; class=&quot;footref&quot; href=&quot;#fn.6&quot;&gt;6&lt;/a&gt;&lt;/sup&gt; 尼安得特尔人穿牛科动物或者鹿类皮毛做的斗篷。&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgheadline3&quot; class=&quot;outline-3&quot;&gt;
&lt;h3 id=&quot;orgheadline3&quot;&gt;&lt;span class=&quot;section-number-3&quot;&gt;2.2&lt;/span&gt; beef&lt;/h3&gt;
&lt;div class=&quot;outline-text-3&quot; id=&quot;text-2-2&quot;&gt;
&lt;p&gt;
牛肉，肉牛。
&lt;/p&gt;

&lt;p&gt;
看起来好像和 bovine 差别有些大，但是如果知道法语里牛肉是这么写的： bœuf，就感觉和 bovine 接近了一些了，如果进一步把 f 改成 v 就差不多了。
&lt;/p&gt;

&lt;p&gt;
beef 除了是牛肉的意思，还有“抱怨，大发牢骚”之意，这倒是有些出其不意：
&lt;/p&gt;

&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;Instead of beefing about what Mrs Martin has not done, her critics might take
a look at what she is trying to do. 批评者不要老是抱怨马丁太太没有做什么事情，不妨看看她正要做什么事情。&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgheadline12&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgheadline12&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;3&lt;/span&gt; Synonym / 同&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-3&quot;&gt;
&lt;/div&gt;&lt;div id=&quot;outline-container-orgheadline5&quot; class=&quot;outline-3&quot;&gt;
&lt;h3 id=&quot;orgheadline5&quot;&gt;&lt;span class=&quot;section-number-3&quot;&gt;3.1&lt;/span&gt; cow&lt;/h3&gt;
&lt;div class=&quot;outline-text-3&quot; id=&quot;text-3-1&quot;&gt;
&lt;p&gt;
母牛，奶牛
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgheadline6&quot; class=&quot;outline-3&quot;&gt;
&lt;h3 id=&quot;orgheadline6&quot;&gt;&lt;span class=&quot;section-number-3&quot;&gt;3.2&lt;/span&gt; heifer&lt;/h3&gt;
&lt;div class=&quot;outline-text-3&quot; id=&quot;text-3-2&quot;&gt;
&lt;p&gt;
小母牛，还没结婚生小牛的母牛。
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgheadline7&quot; class=&quot;outline-3&quot;&gt;
&lt;h3 id=&quot;orgheadline7&quot;&gt;&lt;span class=&quot;section-number-3&quot;&gt;3.3&lt;/span&gt; bull&lt;/h3&gt;
&lt;div class=&quot;outline-text-3&quot; id=&quot;text-3-3&quot;&gt;
&lt;p&gt;
公牛，力大如牛的人，股票牛市。
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgheadline8&quot; class=&quot;outline-3&quot;&gt;
&lt;h3 id=&quot;orgheadline8&quot;&gt;&lt;span class=&quot;section-number-3&quot;&gt;3.4&lt;/span&gt; bullock&lt;/h3&gt;
&lt;div class=&quot;outline-text-3&quot; id=&quot;text-3-4&quot;&gt;
&lt;p&gt;
阉小公牛。但是 Sandra Bullock 就不一样了:-) 她是个美女。
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgheadline9&quot; class=&quot;outline-3&quot;&gt;
&lt;h3 id=&quot;orgheadline9&quot;&gt;&lt;span class=&quot;section-number-3&quot;&gt;3.5&lt;/span&gt; calf&lt;/h3&gt;
&lt;div class=&quot;outline-text-3&quot; id=&quot;text-3-5&quot;&gt;
&lt;p&gt;
小牛。
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgheadline10&quot; class=&quot;outline-3&quot;&gt;
&lt;h3 id=&quot;orgheadline10&quot;&gt;&lt;span class=&quot;section-number-3&quot;&gt;3.6&lt;/span&gt; ox&lt;/h3&gt;
&lt;div class=&quot;outline-text-3&quot; id=&quot;text-3-6&quot;&gt;
&lt;p&gt;
公牛。
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgheadline11&quot; class=&quot;outline-3&quot;&gt;
&lt;h3 id=&quot;orgheadline11&quot;&gt;&lt;span class=&quot;section-number-3&quot;&gt;3.7&lt;/span&gt; bison&lt;/h3&gt;
&lt;div class=&quot;outline-text-3&quot; id=&quot;text-3-7&quot;&gt;
&lt;p&gt;
野牛。
&lt;/p&gt;

&lt;p&gt;
不过 GNU Bison 是 GCC 的语法分析生成器。&lt;sup&gt;&lt;a id=&quot;fnr.7&quot; class=&quot;footref&quot; href=&quot;#fn.7&quot;&gt;7&lt;/a&gt;&lt;/sup&gt;
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;footnotes&quot;&gt;
&lt;h2 class=&quot;footnotes&quot;&gt;Footnotes: &lt;/h2&gt;
&lt;div id=&quot;text-footnotes&quot;&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.1&quot; class=&quot;footnum&quot; href=&quot;#fnr.1&quot;&gt;1&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;http://www.chinadaily.com.cn/culture/2016-08/09/content_26391352.htm&quot;&gt;Culture Insider: Qixi - the Chinese Valentine&apos;s Day&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.2&quot; class=&quot;footnum&quot; href=&quot;#fnr.2&quot;&gt;2&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;http://www.bendbulletin.com/business/4564823-151/california-declared-free-of-bovine-tuberculosis?referrer=bullet1&quot;&gt;California declared free of bovine tuberculosis&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.3&quot; class=&quot;footnum&quot; href=&quot;#fnr.3&quot;&gt;3&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;http://www.ft.com/intl/cms/s/2/9b46859c-afcb-11e3-9cd1-00144feab7de.html#axzz4H1uxKvCv&quot;&gt;The joy of stress&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.4&quot; class=&quot;footnum&quot; href=&quot;#fnr.4&quot;&gt;4&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;http://www.liverpoolecho.co.uk/news/news-opinion/paddy-shennan-bovine-stupidity-bernard-6345600&quot;&gt;Paddy Shennan: &apos;Bovine stupidity&apos;? Bernard Ingham should take a look in the mirror&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.5&quot; class=&quot;footnum&quot; href=&quot;#fnr.5&quot;&gt;5&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;https://en.wikipedia.org/wiki/Bovidae&quot;&gt;Wikipedia: Bovidae&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.6&quot; class=&quot;footnum&quot; href=&quot;#fnr.6&quot;&gt;6&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;http://www.livescience.com/55624-parkas-helped-early-humans-survive.html&quot;&gt;Parkas Helped Early Humans Survive&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.7&quot; class=&quot;footnum&quot; href=&quot;#fnr.7&quot;&gt;7&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;http://baike.baidu.com/link?url=28GEfXCTy3LTjp3wVXJb8B4EnsXof6YE4Shxu6z2CWWkvlGQmZjePsyYU50CpviPfrI1wU93IFDy1OZ4kcwvA_&quot;&gt;GNU Bison&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;


&lt;/div&gt;
&lt;/div&gt;
</content>
 </entry>
 
 <entry>
   <title>管理技能：先要了解企业愿景与使命</title>
   <link href="http://kimi.im/2016-08-09-vision-and-mission"/>
   <updated>2016-08-09T00:00:00+00:00</updated>
   <id>http://kimi.im/vision-and-mission</id>
   <content type="html">&lt;p&gt;
企业的发展方向是一个企业的灵魂所在。如果我们呆在一个公司里面，却不知道公司的发展方向是什么，那是一件很可怕的事情。更可怕的情况是，我们的价值观、个人选择是和企业的发展方向相违背的。因此，选择一家企业工作的一个至关重要的问题是企业的发展方向是否和自己的价值观相匹配。只有匹配上，我们才能激发出自己的创造力去和企业共同成长。
&lt;/p&gt;

&lt;p&gt;
所谓的企业发展方向就是企业愿景。
&lt;/p&gt;

&lt;div id=&quot;outline-container-orgheadline1&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgheadline1&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;1&lt;/span&gt; 企业愿景&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-1&quot;&gt;
&lt;p&gt;
企业愿景是指企业战略家对企业前景和发展方向一个高度概括的描述。由企业核心理念和对未来 10~20 年的展望构成。企业愿景的本质就是将企业的存在价值提升到极限。
&lt;/p&gt;

&lt;p&gt;
加里·胡佛的《愿景》一书中明确了愿景的四大要素：清晰、持久、独特和服务精神。
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgheadline2&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgheadline2&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;2&lt;/span&gt; 企业愿景的产生背景&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-2&quot;&gt;
&lt;p&gt;
吉姆·柯林斯（Jim Collins）和杰里·波拉斯（Jerry I．Porras）在《Built to last:
successful habits of visionary companies》一书中将企业划分为两种类型&lt;sup&gt;&lt;a id=&quot;fnr.1&quot; class=&quot;footref&quot; href=&quot;#fn.1&quot;&gt;1&lt;/a&gt;&lt;/sup&gt;：
&lt;/p&gt;

&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;第一种类型是明确企业愿景，并将它扎根于员工之中的企业。这些企业大多是排位世界首位的企业。&lt;/li&gt;
&lt;li&gt;第二种类型是认为只要提高销售额即万事大吉，而没有明确的企业愿景。这些企业绝不可能居世界首位。&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
企业愿景往往会附有一份描述当前企业的使命陈述。
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgheadline3&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgheadline3&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;3&lt;/span&gt; 企业使命&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-3&quot;&gt;
&lt;p&gt;
所谓企业使命是指企业在社会经济发展中所应担当的角色和责任，是指企业的根本性质和存在的理由，说明企业的经营领域、经营思想，为企业目标的确立与战略的制定提供依据。
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgheadline4&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgheadline4&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;4&lt;/span&gt; 企业愿景与使命的区别&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-4&quot;&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;企业愿景是指企业长期的发展方向、目标、自我设定的社会责任和义务，明确界定公司的在未来社会范围里是什么样子。&lt;/li&gt;
&lt;li&gt;企业使命是在界定了企业愿景的基础上，具体表述企业在社会中的经济身份或角色，在社会领域里，该企业是分工做什么的，在哪些经济领域里为社会做贡献。企业使命主要考虑的是对目标领域、特定客户或社会人在某确定方面的供需关系的经济行为及行为效果。&lt;/li&gt;
&lt;li&gt;从企业愿景和企业使命的关系来讲，企业使命是企业愿景的一个方面，换句话说企业愿景包括企业使命，企业使命是企业愿景中具体说明企业经济活动和行为的理念，如果要分开来表述企业愿景和企业使命，企业愿景里就应不再表达企业经济行为的领域和目标，以免重复或矛盾。&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgheadline8&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgheadline8&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;5&lt;/span&gt; 企业愿景与使命举例&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-5&quot;&gt;
&lt;p&gt;
在明确了企业愿景和使命的定义之后，那就找几个案例来看看吧。
&lt;/p&gt;
&lt;/div&gt;


&lt;div id=&quot;outline-container-orgheadline5&quot; class=&quot;outline-3&quot;&gt;
&lt;h3 id=&quot;orgheadline5&quot;&gt;&lt;span class=&quot;section-number-3&quot;&gt;5.1&lt;/span&gt; 西门子的企业愿景与使命&lt;/h3&gt;
&lt;div class=&quot;outline-text-3&quot; id=&quot;text-5-1&quot;&gt;
&lt;p&gt;
西门子公司的企业愿景实在很难找，找了好久才在他们最新的 2020 愿景计划书中找到。
&lt;/p&gt;

&lt;p&gt;
西门子的企业愿景：
&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;
We make real what matters.&lt;sup&gt;&lt;a id=&quot;fnr.2&quot; class=&quot;footref&quot; href=&quot;#fn.2&quot;&gt;2&lt;/a&gt;&lt;/sup&gt; 我们实现真正有意义的东西。
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;
西门子的企业使命:
&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;
We make real what matters by setting the benchmark in the way we electrify,
automate and digitalize the world around us. Ingenuity drives us and what we
create is yours. Together we deliver. 我们实现真正有意义的东西。我们的指标是电气化、自动化和数字化我们周围的世界。精心设计驱动我们，我们创造的就是你的。我们一起来完成。
&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgheadline6&quot; class=&quot;outline-3&quot;&gt;
&lt;h3 id=&quot;orgheadline6&quot;&gt;&lt;span class=&quot;section-number-3&quot;&gt;5.2&lt;/span&gt; ABB 的企业愿景与使命&lt;/h3&gt;
&lt;div class=&quot;outline-text-3&quot; id=&quot;text-5-2&quot;&gt;
&lt;p&gt;
ABB 的企业愿景：
&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;
Power and productivity for a better world.&lt;sup&gt;&lt;a id=&quot;fnr.3&quot; class=&quot;footref&quot; href=&quot;#fn.3&quot;&gt;3&lt;/a&gt;&lt;/sup&gt; (能源与效率创造更好的世界。
^(zh)&lt;sup&gt;&lt;a id=&quot;fnr.4&quot; class=&quot;footref&quot; href=&quot;#fn.4&quot;&gt;4&lt;/a&gt;&lt;/sup&gt; Energie und Produktivität für eine bessere Welt.&lt;sup&gt;(de)&lt;/sup&gt;&lt;sup&gt;&lt;a id=&quot;fnr.5&quot; class=&quot;footref&quot; href=&quot;#fn.5&quot;&gt;5&lt;/a&gt;&lt;/sup&gt; Énergie
et productivité pour un monde meilleur.&lt;sup&gt;(fr)&lt;/sup&gt;&lt;sup&gt;&lt;a id=&quot;fnr.6&quot; class=&quot;footref&quot; href=&quot;#fn.6&quot;&gt;6&lt;/a&gt;&lt;/sup&gt;)
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;
顺便提一下，我觉得中文版的愿景陈述不够朗朗上口。建议改成：
&lt;/p&gt;

&lt;p&gt;
“节能又高效，世界更美妙！”
&lt;/p&gt;

&lt;p&gt;
又押韵，又对仗，还很容易记。
&lt;/p&gt;


&lt;p&gt;
ABB 的愿景是这么解读的：
&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;
As one of the world’s leading engineering companies, we help our customers to
use electrical power efficiently, to increase industrial productivity and to
lower environmental impact in a sustainable way.
&lt;/p&gt;
&lt;/blockquote&gt;


&lt;p&gt;
包含三层意思，
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;第一，帮助客户提高电力使用效率&lt;/li&gt;
&lt;li&gt;第二，帮助客户提高工业生产效率：保障生产运行时间，速度，产出和效率。&lt;/li&gt;
&lt;li&gt;第三，通过可持续发展方式降低对环境的影响：减少每单位 GDP 的能耗，减少每单位能耗的环境污染。&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;
ABB 的企业是使命：&lt;sup&gt;&lt;a id=&quot;fnr.7&quot; class=&quot;footref&quot; href=&quot;#fn.7&quot;&gt;7&lt;/a&gt;&lt;/sup&gt;
&lt;/p&gt;

&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;Improve performance: ABB helps customers improve their operating performance,
grid reliability and productivity whilst saving energy and lowering
environmental impact. 提高绩效：帮助客户提高运营绩效、电网可靠性和生产效率，同事节省能源并降低对环境的影响。&lt;/li&gt;
&lt;li&gt;Drive innovation: Innovation and quality are key characteristics of our
product, systems and service offering. 推动创新：创新和质量是我们产品、系统和服务的关键特性。&lt;/li&gt;
&lt;li&gt;Attract talent: ABB is committed to attracting and retaining dedicated and
skilled people and offering employees an attractive, global work
environment. 吸引人才：ABB 致力于吸引并留住富有奉献精神人才，为员工提供具有吸引力的国际化的工作环境。&lt;/li&gt;
&lt;li&gt;Act responsibly: Sustainability, lowering environmental impact and business
ethics are at the core of our market offering and our own operations. 行事负责：可持续发展、降低对环境的影响和遵守商业道德是我们市场营销和运营的核心。&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;
使命和愿景是精密联系的。
&lt;/p&gt;

&lt;p&gt;
“提高绩效”是实现“节能又高效”的最直接明确的使命。
&lt;/p&gt;

&lt;p&gt;
“推动创新”则是不断提升“提高绩效”能力的前提。ABB 历史上的一次次科技突破，为世界效能的提升带来了新的飞跃。比如 1901 年 ABB 的前生 BBC 建成了欧洲首台蒸汽涡轮机。
1978 年 ABB 的前生 ASEA 发明并推出全球第一批工业机器人。  1984 在位于南美洲伊泰普的世界上最大的水力发电站安装了首台（共九台）BBC 发电机。
&lt;/p&gt;

&lt;p&gt;
”吸引人才“是”推动创新“的原动力。唯有引进全球具有奉献精神的人才，才可以保障持续不断的创新。
&lt;/p&gt;

&lt;p&gt;
“行事负责”则保障了企业这条大船经历风浪持续前进的前提。
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgheadline7&quot; class=&quot;outline-3&quot;&gt;
&lt;h3 id=&quot;orgheadline7&quot;&gt;&lt;span class=&quot;section-number-3&quot;&gt;5.3&lt;/span&gt; 对比&lt;/h3&gt;
&lt;div class=&quot;outline-text-3&quot; id=&quot;text-5-3&quot;&gt;
&lt;p&gt;
要么是我通过网络搜索找到的西门子的企业愿景和使命是不对的，不然 “We make
real what matters” 这个表述实在是有点费解。使命的表达也有点摸不着头脑的感觉。
&lt;/p&gt;

&lt;p&gt;
相对来讲，ABB 的 “Power and productivity for a better world” 就包含了愿景的四要素。它清晰的表明企业的发展方向，这个方向是可以持久发展的，涵盖了企业独特的业务领域，并且造福全世界人民具有服务精神。
&lt;/p&gt;

&lt;p&gt;
另外 ABB 的 logo 总是和文字一同出现，更是不断的对这个愿景进行强化。所以非常有助于将它根植于员工内心，这也是公司能够持续排名世界 500 强的原因之一吧。
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;footnotes&quot;&gt;
&lt;h2 class=&quot;footnotes&quot;&gt;Footnotes: &lt;/h2&gt;
&lt;div id=&quot;text-footnotes&quot;&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.1&quot; class=&quot;footnum&quot; href=&quot;#fnr.1&quot;&gt;1&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;http://wiki.mbalib.com/wiki/%E4%BC%81%E4%B8%9A%E6%84%BF%E6%99%AF&quot;&gt;http://wiki.mbalib.com/wiki/%E4%BC%81%E4%B8%9A%E6%84%BF%E6%99%AF&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.2&quot; class=&quot;footnum&quot; href=&quot;#fnr.2&quot;&gt;2&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;http://www.siemens.com/about/pool/strategy/siemens-strategy-overview.pdf&quot;&gt;http://www.siemens.com/about/pool/strategy/siemens-strategy-overview.pdf&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.3&quot; class=&quot;footnum&quot; href=&quot;#fnr.3&quot;&gt;3&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;https://library.e.abb.com/public/b8c652a6ec80435eb55d3c5fae67883c/ABB%20CZ.pdf&quot;&gt;https://library.e.abb.com/public/b8c652a6ec80435eb55d3c5fae67883c/ABB%20CZ.pdf&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.4&quot; class=&quot;footnum&quot; href=&quot;#fnr.4&quot;&gt;4&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;http://new.abb.com/sustainability/creating-value&quot;&gt;http://new.abb.com/sustainability/creating-value&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.5&quot; class=&quot;footnum&quot; href=&quot;#fnr.5&quot;&gt;5&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;https://library.e.abb.com/public/8e3c5d227d730c47c125746a002ce5aa/ABB%20Technik%202_2008_72dpi.pdf&quot;&gt;https://library.e.abb.com/public/8e3c5d227d730c47c125746a002ce5aa/ABB%20Technik%202_2008_72dpi.pdf&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.6&quot; class=&quot;footnum&quot; href=&quot;#fnr.6&quot;&gt;6&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;http://new.abb.com/docs/librariesprovider9/ABOUT-US-FR---Corporate/profile-du-groupe-abb.pdf?sfvrsn=4&quot;&gt;http://new.abb.com/docs/librariesprovider9/ABOUT-US-FR---Corporate/profile-du-groupe-abb.pdf?sfvrsn=4&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.7&quot; class=&quot;footnum&quot; href=&quot;#fnr.7&quot;&gt;7&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;http://www02.abb.com/global/abbzh/abbzh251.nsf!OpenDatabase&amp;amp;db=/global/abbzh/abbzh252.nsf&amp;amp;v=7182A&amp;amp;e=us&amp;amp;m=6D4A&amp;amp;c=5F47D0088B5396DEC125702A004C96B0&quot;&gt;http://www02.abb.com/global/abbzh/abbzh251.nsf!OpenDatabase&amp;amp;db=/global/abbzh/abbzh252.nsf&amp;amp;v=7182A&amp;amp;e=us&amp;amp;m=6D4A&amp;amp;c=5F47D0088B5396DEC125702A004C96B0&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;


&lt;/div&gt;
&lt;/div&gt;
</content>
 </entry>
 
 <entry>
   <title>管理技能：行为面试法</title>
   <link href="http://kimi.im/2016-08-09-behavioural-based-interview"/>
   <updated>2016-08-09T00:00:00+00:00</updated>
   <id>http://kimi.im/behavioural-based-interview</id>
   <content type="html">&lt;p&gt;
最近又招聘新员工了，查阅一份份简历，一个个打电话约谈，大海淘沙般挑选最合适的团队成员。这时候该拿出好久前学到的行为面试法来复习复习了。
&lt;/p&gt;

&lt;div id=&quot;outline-container-orgheadline1&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgheadline1&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;1&lt;/span&gt; 行为面试法&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-1&quot;&gt;
&lt;p&gt;
行为面试法（BBI, Behavioural Based Interview）也叫关键行为面试法（CBI, Critical
Behaviour Interview）是通过要求面试对象描述其过去某个工作或者生活经历的具体情况来了解面试对象各方面素质特征的方法。
&lt;/p&gt;

&lt;p&gt;
行为面试法的基本假设是：通过一个人过去相似情况下的行为可以预测这个人将来的行为。（the most accurate predictor of future performance is past performance in a
similar situation.）
&lt;/p&gt;

&lt;p&gt;
传统的面试方法容易导致被试者信口开河发挥想象去迎合面试者的期望听到的：“加班，没问题！周末加班，需要的话也不是问题！长期出差，我的最爱！”
&lt;/p&gt;

&lt;p&gt;
而行为面试法要求被试者描述已经发生的事情，在当时的情形，自己是如何处理应对的。因此是基于事实的询问，被试者无法随意夸张信口开河。
&lt;/p&gt;

&lt;p&gt;
这里又要提一下孔子的经典论断：“視其所以，觀其所由，察其所安，人焉廋哉？人焉廋哉？”详见上一篇文章&lt;a href=&quot;http://kimi.im/2016-08-03-versatile-communication&quot;&gt;管理技能：溝通中的迎合能力&lt;/a&gt;。
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgheadline2&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgheadline2&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;2&lt;/span&gt; 行为面试法基本步骤&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-2&quot;&gt;
&lt;p&gt;
行为面试法主要有三个步骤：
&lt;/p&gt;

&lt;ol class=&quot;org-ol&quot;&gt;
&lt;li&gt;互相介绍和解释&lt;/li&gt;
&lt;li&gt;了解工作与职责&lt;/li&gt;
&lt;li&gt;具体事件的询问&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;
步骤一，互相介绍和解释。先进行互相介绍，旨在建立面试者和被试者之间的信任关系，创造融洽的谈话气氛，使被试者感到放松，并愿意讲出自己的经历。同时解释面试的保密性原则。时间大概是 3 分钟左右。
&lt;/p&gt;

&lt;p&gt;
步骤二，了解工作与职责。通过简单的提问了解被试者目前的头衔，工作内容，工作职责，项目经历，技术特长，性格特征等。这一步骤的目的是为后续详细提问收集突破口。比如参与过哪些重大的项目，负责过哪个技术的难点攻克，具备哪些优秀的品质等。这一步骤大概持续 5 分钟左右。
&lt;/p&gt;

&lt;p&gt;
步骤三，具体事件的询问。通过对具体时间的询问，让被试者讲述事件发生的情景，任务，所发生的行为，以及事件最终的结果。就是所谓的 STAR 方法。
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgheadline3&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgheadline3&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;3&lt;/span&gt; STAR 方法&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-3&quot;&gt;
&lt;p&gt;
STAR 方法是一种结构化的行为面试提问法，有如下四个方面组成：&lt;sup&gt;&lt;a id=&quot;fnr.1&quot; class=&quot;footref&quot; href=&quot;#fn.1&quot;&gt;1&lt;/a&gt;&lt;/sup&gt;
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;S（Situation that existed) ）事件发生的时间、地点和涉及到的人员&lt;/li&gt;
&lt;li&gt;T（Task or problem to be undertaken）要完成的任务或遇到的问题&lt;/li&gt;
&lt;li&gt;A（Action taken by yourself）自己采取了哪些步骤或行动&lt;/li&gt;
&lt;li&gt;R（Result what happened）得出了什么样的结果，取得了什么成就&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
这四个方面内容缺一不可，必须完整。
&lt;/p&gt;

&lt;p&gt;
其实反过来说，STAR 也是被试者在面试过程中回答问题的顺序方法。
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgheadline6&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgheadline6&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;4&lt;/span&gt; 实际案例分析&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-4&quot;&gt;
&lt;p&gt;
接下来，一起看看今天面试遇到的几个 STAR 情景吧。
&lt;/p&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgheadline4&quot; class=&quot;outline-3&quot;&gt;
&lt;h3 id=&quot;orgheadline4&quot;&gt;&lt;span class=&quot;section-number-3&quot;&gt;4.1&lt;/span&gt; 做事严谨，追求卓越&lt;/h3&gt;
&lt;div class=&quot;outline-text-3&quot; id=&quot;text-4-1&quot;&gt;
&lt;p&gt;
面试过一个年轻人，他在自我评价中写自己做事严谨。
&lt;/p&gt;

&lt;p&gt;
我的提问：可不可以告诉我你觉得哪一件事情当中最能体现你做事严谨的风格？
&lt;/p&gt;

&lt;p&gt;
被试者的回答：之前在一家公司开发了一个应用程序，但是由于项目任务紧，程序代码结构不够优化，没有做到模块之间的松耦合，但是程序已经冻结上线了（Situation）。为了更好的掌握优秀代码结构的开发（Task），我利用自己的业余时间重新实现了一遍该程序的功能（Action）。重新设计的程序代码结构耦合性很好，独立模块的改动不会影响主程序（Result）。
&lt;/p&gt;

&lt;p&gt;
这个 STAR 情景描述了被试者做事有始有终，尽管项目工作已经结束，依然不懈努力追求卓越的品性。
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgheadline5&quot; class=&quot;outline-3&quot;&gt;
&lt;h3 id=&quot;orgheadline5&quot;&gt;&lt;span class=&quot;section-number-3&quot;&gt;4.2&lt;/span&gt; 坚韧不拔，不轻易放弃&lt;/h3&gt;
&lt;div class=&quot;outline-text-3&quot; id=&quot;text-4-2&quot;&gt;
&lt;p&gt;
另一个年轻人则称自己有坚韧不拔，不轻易放弃的品质。
&lt;/p&gt;

&lt;p&gt;
我的提问：讲一讲最能体现你坚韧不拔的一件事情？
&lt;/p&gt;

&lt;p&gt;
被试者的回答：在其开发的一款产品遇到噪声很大的问题，经过多次尝试，很多同事已经决定放弃的情况下（Situation）。为了确保提交高质量的产品（Task），我一个人持续在现场调试控制算法一个多月（Action），最终把噪音问题解决（Result）。
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgheadline7&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgheadline7&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;5&lt;/span&gt; 总结&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-5&quot;&gt;
&lt;p&gt;
面试者可以通过行为面试法中的 STAR 方法获得被试者在特定情境下的行为事实，从而可以分析其行为背后的内在品质，从而推测被试者在未来相似情境下行为选择；基于这些判断，选择合适的候选人。
&lt;/p&gt;

&lt;p&gt;
所以为了确保顺利完成招聘任务，我要不断的熟悉 STAR 方法的运用，提高自己鉴别人才的能力。
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;footnotes&quot;&gt;
&lt;h2 class=&quot;footnotes&quot;&gt;Footnotes: &lt;/h2&gt;
&lt;div id=&quot;text-footnotes&quot;&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.1&quot; class=&quot;footnum&quot; href=&quot;#fnr.1&quot;&gt;1&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;http://careers.ls.wisc.edu/documents/STAR_Method_for_Behavioral_Interview_Questions_8.12.pdf&quot;&gt;http://careers.ls.wisc.edu/documents/STAR_Method_for_Behavioral_Interview_Questions_8.12.pdf&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;


&lt;/div&gt;
&lt;/div&gt;
</content>
 </entry>
 
 <entry>
   <title>单词本：洪荒之力</title>
   <link href="http://kimi.im/2016-08-08-english-primitive"/>
   <updated>2016-08-08T00:00:00+00:00</updated>
   <id>http://kimi.im/english-primitive</id>
   <content type="html">&lt;p&gt;
今天被傅园慧的“洪荒之力”视频刷屏了：
&lt;/p&gt;

&lt;embed src=&quot;http://static.video.qq.com/TPout.swf?vid=a002170phjn&amp;auto=0&quot; allowFullScreen=&quot;true&quot; quality=&quot;high&quot; width=&quot;480&quot; height=&quot;400&quot; align=&quot;middle&quot; allowScriptAccess=&quot;always&quot; type=&quot;application/x-shockwave-flash&quot;&gt;&lt;/embed&gt;

&lt;p&gt;
那么什么是洪荒呢？洪荒指的是混沌、蒙昧（不是萌妹）的状态，也指远古时代。谢灵运《三月三日侍宴西池》诗：“详观记牒，洪荒莫传。”《千字文》：“宇宙洪荒，天地玄黄。”指的都是那个远古的时代。
&lt;/p&gt;

&lt;p&gt;
再拆开来看，洪指的是大水，如山洪，洪水。荒指的是未开垦的，荒凉的地方。所以洪荒的字面意思就是泛着大水的荒凉时代。这就是上古时期的那个大洪水时代。&lt;sup&gt;&lt;a id=&quot;fnr.1&quot; class=&quot;footref&quot; href=&quot;#fn.1&quot;&gt;1&lt;/a&gt;&lt;/sup&gt; 世界各地都有大洪水的传说，比如大禹治水，欧洲诺亚方舟，印度摩奴之舟等。
&lt;/p&gt;

&lt;p&gt;
所以呢，我觉得“洪荒之力”可以翻译成 power of the Great Flood 挺贴切的。如果了解人类历史上这段大洪水的历史的话，理解起来应该挺容易的。
&lt;/p&gt;

&lt;p&gt;
但是如果不太了解的话，那就有点费解。
&lt;/p&gt;

&lt;p&gt;
另外也可以意译成 primitive power， prehistoric power 或者 primeval power。可能相对比较容易理解。
&lt;/p&gt;

&lt;p&gt;
顺便提一下，奥特曼中的一个怪兽叫哥美斯&lt;sup&gt;&lt;a id=&quot;fnr.2&quot; class=&quot;footref&quot; href=&quot;#fn.2&quot;&gt;2&lt;/a&gt;&lt;/sup&gt;，它的技能就是 primitive power，原始パワー&lt;sup&gt;(jp)&lt;/sup&gt;。它的必杀技是 Antiquity strike，上古强袭，上古ストライク&lt;sup&gt;(jp)&lt;/sup&gt;。
&lt;/p&gt;

&lt;p&gt;
Jason Buss 2013 年出了一本书叫《Primeval Power》&lt;sup&gt;&lt;a id=&quot;fnr.3&quot; class=&quot;footref&quot; href=&quot;#fn.3&quot;&gt;3&lt;/a&gt;&lt;/sup&gt;，讲的大概是一个神秘武器的故事：
&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;
After an elite team of mercenaries break into one of the best protected military
bases in the world to steal a secret weapon, a seemingly random group of
civilians is recruited to find it. With an enemy that seems to know their every
move before they make it, there’s no one they can trust. Before long, without
issuing any demands, a terrorist turns the weapon on US cities. In a race
against time, the small group tries to untangle the web of secrets around the
weapon with one goal: stop the terrorist before he can strike again.
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;
2007 年有一部电视剧《远古入侵》英文名为《Primeval》&lt;sup&gt;&lt;a id=&quot;fnr.4&quot; class=&quot;footref&quot; href=&quot;#fn.4&quot;&gt;4&lt;/a&gt;&lt;/sup&gt;。
&lt;/p&gt;


&lt;p&gt;
In order to find out how to translate HongHuangZhiLi, I&apos;ve utilized the primeval
power to find the correct translation!
&lt;/p&gt;

&lt;p&gt;
CCTV News 用的是 prehistorical power 的：
&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;
&quot;A new Internet meme has emerged after Chinese swimmer Fu Yuanhui reacted
exaggeratedly to her personal best performance in Rio 2016 women&apos;s backstroke
semi-final. &quot;&lt;b&gt;I&apos;ve been utilizing prehistorical powers.&lt;/b&gt;&quot; she told CCTV
reporter. Her comment has also become part of the meme.&quot;
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;
你觉得怎么翻译比较好呢？
&lt;/p&gt;
&lt;div id=&quot;footnotes&quot;&gt;
&lt;h2 class=&quot;footnotes&quot;&gt;Footnotes: &lt;/h2&gt;
&lt;div id=&quot;text-footnotes&quot;&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.1&quot; class=&quot;footnum&quot; href=&quot;#fnr.1&quot;&gt;1&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;https://en.wikipedia.org/wiki/List_of_flood_myths&quot;&gt;https://en.wikipedia.org/wiki/List_of_flood_myths&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.2&quot; class=&quot;footnum&quot; href=&quot;#fnr.2&quot;&gt;2&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;http://baike.baidu.com/link?url=oSdxQzxDSDoEq_fknJLDiFftha-SzJiuZ43j50J5HClafKWHeYpGOgo5rHJBuPaTrFBVFPZeKg4MdvnMrPwkVK&quot;&gt;http://baike.baidu.com/link?url=oSdxQzxDSDoEq_fknJLDiFftha-SzJiuZ43j50J5HClafKWHeYpGOgo5rHJBuPaTrFBVFPZeKg4MdvnMrPwkVK&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.3&quot; class=&quot;footnum&quot; href=&quot;#fnr.3&quot;&gt;3&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;https://www.amazon.com/Primeval-Power-Jason-Buss/dp/1494738627/ref=sr_1_1?ie=UTF8&amp;amp;qid=1470662426&amp;amp;sr=8-1&amp;amp;keywords=primeval+power&quot;&gt;https://www.amazon.com/Primeval-Power-Jason-Buss/dp/1494738627/ref=sr_1_1?ie=UTF8&amp;amp;qid=1470662426&amp;amp;sr=8-1&amp;amp;keywords=primeval+power&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.4&quot; class=&quot;footnum&quot; href=&quot;#fnr.4&quot;&gt;4&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;http://movie.mtime.com/52708/&quot;&gt;http://movie.mtime.com/52708/&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;


&lt;/div&gt;
&lt;/div&gt;
</content>
 </entry>
 
 <entry>
   <title>管理技能：溝通中的迎合能力</title>
   <link href="http://kimi.im/2016-08-03-versatile-communication"/>
   <updated>2016-08-03T00:00:00+00:00</updated>
   <id>http://kimi.im/versatile-communication</id>
   <content type="html">&lt;p&gt;
出差來上海參加爲期五天的管理能力培訓。
&lt;/p&gt;

&lt;p&gt;
白天上課強度還是挺大的：知識點學習，案例分析，小組討論，即興演講，等等活動都要積极參與，注意力高度集中，大腦飛速運轉，能力迅速提升。
&lt;/p&gt;

&lt;p&gt;
晚上的複習工作必須不能少，不然到第二天腦子裏殘留的東西會迅速減少，數日之後，殘存的記憶就更少了。
&lt;/p&gt;

&lt;div id=&quot;outline-container-orgheadline1&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgheadline1&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;1&lt;/span&gt; 迎合能力&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-1&quot;&gt;
&lt;p&gt;
第一天課的主題是溝通中的迎合能力，又叫應變能力，權變能力，適應能力。其實稱之爲人際交往中的權變能力更恰當。不過教材是這麼翻譯的，就權且這麼稱呼它吧。
&lt;/p&gt;

&lt;p&gt;
Wilson Learning 網站上是這麼定義迎合能力的：&lt;sup&gt;&lt;a id=&quot;fnr.1&quot; class=&quot;footref&quot; href=&quot;#fn.1&quot;&gt;1&lt;/a&gt;&lt;/sup&gt;
&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;
Versatility&lt;sup&gt;&lt;a id=&quot;fnr.2&quot; class=&quot;footref&quot; href=&quot;#fn.2&quot;&gt;2&lt;/a&gt;&lt;/sup&gt; is defined as the ability to understand differences in
communication preferences and to adapt to make others more open and receptive —
creating more effective and productive relationships.
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;
迎合能力是一種理解溝通習慣差異，並調整自己與他人溝通的方式，從而使他人更願意接納你的觀點，從而提高人際關係的效率和產出的能力。
&lt;/p&gt;

&lt;p&gt;
根據我的上司、同事和下屬的課前測評來看，我的迎合能力處在中等偏下水平，有許多值得改進的地方。因此，這一天的課，對我來說是非常重要的。
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgheadline4&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgheadline4&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;2&lt;/span&gt; 迎合能力靈活應變模型&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-2&quot;&gt;
&lt;p&gt;
迎合能力具體的操作方法可歸納爲 IAA：識別（Identify），分析（Analyze），調整（Adjust）。
&lt;/p&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgheadline2&quot; class=&quot;outline-3&quot;&gt;
&lt;h3 id=&quot;orgheadline2&quot;&gt;&lt;span class=&quot;section-number-3&quot;&gt;2.1&lt;/span&gt; 識別&lt;/h3&gt;
&lt;div class=&quot;outline-text-3&quot; id=&quot;text-2-1&quot;&gt;
&lt;p&gt;
識別溝通對方的社交風格：
&lt;/p&gt;

&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;主張方式（Assertiveness）是命令導向（Tell-Directed）還是詢問導向（Ask-Directed）&lt;/li&gt;
&lt;li&gt;迴應方式（Responsiveness）是任務導向（Task-Directed）還是人際導向（People-Directed）&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
下圖根據主張方式和迴應方式將社交風格氛圍四個主要類型：
&lt;/p&gt;

&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; xmlns:p=&quot;http://www.evolus.vn/Namespace/Pencil&quot; xmlns:pencil=&quot;http://www.evolus.vn/Namespace/Pencil&quot; xmlns:html=&quot;http://www.w3.org/1999/xhtml&quot; xmlns:xhtml=&quot;http://www.w3.org/1999/xhtml&quot; xmlns:office=&quot;urn:oasis:names:tc:opendocument:xmlns:office:1.0&quot; xmlns:style=&quot;urn:oasis:names:tc:opendocument:xmlns:style:1.0&quot; xmlns:text=&quot;urn:oasis:names:tc:opendocument:xmlns:text:1.0&quot; xmlns:table=&quot;urn:oasis:names:tc:opendocument:xmlns:table:1.0&quot; xmlns:draw=&quot;urn:oasis:names:tc:opendocument:xmlns:drawing:1.0&quot; xmlns:fo=&quot;urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0&quot; xmlns:xlink=&quot;http://www.w3.org/1999/xlink&quot; xmlns:dc=&quot;http://purl.org/dc/elements/1.1/&quot; xmlns:meta=&quot;urn:oasis:names:tc:opendocument:xmlns:meta:1.0&quot; xmlns:number=&quot;urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0&quot; xmlns:svg=&quot;urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0&quot; xmlns:chart=&quot;urn:oasis:names:tc:opendocument:xmlns:chart:1.0&quot; xmlns:dr3d=&quot;urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0&quot; xmlns:math=&quot;http://www.w3.org/1998/Math/MathML&quot; xmlns:form=&quot;urn:oasis:names:tc:opendocument:xmlns:form:1.0&quot; xmlns:script=&quot;urn:oasis:names:tc:opendocument:xmlns:script:1.0&quot; xmlns:ooo=&quot;http://openoffice.org/2004/office&quot; xmlns:ooow=&quot;http://openoffice.org/2004/writer&quot; xmlns:oooc=&quot;http://openoffice.org/2004/calc&quot; xmlns:dom=&quot;http://www.w3.org/2001/xml-events&quot; xmlns:xforms=&quot;http://www.w3.org/2002/xforms&quot; xmlns:xsd=&quot;http://www.w3.org/2001/XMLSchema&quot; xmlns:xsi=&quot;http://www.w3.org/2001/XMLSchema-instance&quot; xmlns:rpt=&quot;http://openoffice.org/2005/report&quot; xmlns:of=&quot;urn:oasis:names:tc:opendocument:xmlns:of:1.2&quot; xmlns:rdfa=&quot;http://docs.oasis-open.org/opendocument/meta/rdfa#&quot; xmlns:field=&quot;urn:openoffice:names:experimental:ooo-ms-interop:xmlns:field:1.0&quot; xmlns:regexp=&quot;http://exslt.org/regular-expressions&quot; xmlns:em=&quot;http://exslt.org/math&quot; xmlns:sodipodi=&quot;http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd&quot; xmlns:inkscape=&quot;http://www.inkscape.org/namespaces/inkscape&quot; width=&quot;744.09448819&quot; height=&quot;1052.3622047&quot; id=&quot;exportedSVG&quot; version=&quot;1.1&quot; pencil:version=&quot;1.2.2&quot; sodipodi:docname=&quot;SocialStyle&quot;&gt;&lt;g inkscape:label=&quot;Untitled Page&quot; inkscape:groupmode=&quot;layer&quot; id=&quot;layer_untitled_page&quot;&gt;&lt;g&gt;&lt;rect x=&quot;0&quot; y=&quot;0&quot; width=&quot;452&quot; height=&quot;452&quot; fill=&quot;none&quot;/&gt;&lt;g p:type=&quot;Shape&quot; p:def=&quot;Evolus.Common:RoundedRectV2&quot; id=&quot;5f0897519e454f37829955a548307bc3&quot; transform=&quot;matrix(1,0,0,1,116,84)&quot;&gt;&lt;p:metadata&gt;&lt;p:property name=&quot;box&quot;&gt;218,193&lt;/p:property&gt;&lt;p:property name=&quot;withBlur&quot;&gt;false&lt;/p:property&gt;&lt;p:property name=&quot;radius&quot;&gt;0,0&lt;/p:property&gt;&lt;p:property name=&quot;textPadding&quot;&gt;0,24.125&lt;/p:property&gt;&lt;p:property name=&quot;fillColor&quot;&gt;#FFFFFFFF&lt;/p:property&gt;&lt;p:property name=&quot;strokeColor&quot;&gt;#1B3280FF&lt;/p:property&gt;&lt;p:property name=&quot;strokeStyle&quot;&gt;2|&lt;/p:property&gt;&lt;p:property name=&quot;textContent&quot;&gt;
                &lt;/p:property&gt;&lt;p:property name=&quot;textFont&quot;&gt;&quot;Liberation Sans&quot;,Arial,sans-serif|normal|normal|13px|none&lt;/p:property&gt;&lt;p:property name=&quot;textColor&quot;&gt;#000000FF&lt;/p:property&gt;&lt;p:property name=&quot;textAlign&quot;&gt;1,1&lt;/p:property&gt;&lt;/p:metadata&gt;

            &lt;defs&gt;
                &lt;rect width=&quot;216&quot; height=&quot;191&quot; rx=&quot;0&quot; ry=&quot;0&quot; x=&quot;0&quot; y=&quot;0&quot; style=&quot;stroke-width: 2; fill: rgb(255, 255, 255); fill-opacity: 1; stroke: rgb(27, 50, 128); stroke-opacity: 1;&quot; p:name=&quot;rrRect&quot; id=&quot;ae18591b3d40442baf4d30b7f5178759&quot; transform=&quot;translate(1,1)&quot;/&gt;
                &lt;filter height=&quot;1.2558399&quot; y=&quot;-0.12792&quot; width=&quot;1.06396&quot; x=&quot;-0.03198&quot; p:name=&quot;shadingFilter&quot; id=&quot;0fb6e38d22d44d9f9afde3661058206a&quot;&gt;
                    &lt;feGaussianBlur stdDeviation=&quot;1&quot; in=&quot;SourceAlpha&quot;/&gt;
                &lt;/filter&gt;
                &lt;clipPath p:name=&quot;textClipPath&quot; id=&quot;8d78d1a11bbb4454a8fe36d4bcf020f1&quot;&gt;
                    &lt;rect p:name=&quot;textClipPathRect&quot; id=&quot;85d056c077854977b57b5f15b5cc46df&quot; x=&quot;24.125&quot; y=&quot;24.125&quot; width=&quot;169.75&quot; height=&quot;144.75&quot;/&gt;
                &lt;/clipPath&gt;
            &lt;/defs&gt;
            &lt;use xlink:href=&quot;#ae18591b3d40442baf4d30b7f5178759&quot; transform=&quot;translate(2, 2)&quot; p:filter=&quot;url(#0fb6e38d22d44d9f9afde3661058206a)&quot; style=&quot;opacity: 0.5; visibility: hidden; display: none;&quot; p:heavy=&quot;true&quot; p:name=&quot;bgCopy&quot; id=&quot;798a8df070a84883bd1e4d34ff087596&quot;/&gt;
            &lt;use xlink:href=&quot;#ae18591b3d40442baf4d30b7f5178759&quot;/&gt;
            &lt;g clip-path=&quot;url(#8d78d1a11bbb4454a8fe36d4bcf020f1)&quot; p:name=&quot;text&quot; id=&quot;23efe3c5725c454cbcd481e82a6a9b1a&quot; dominant-baseline=&quot;auto&quot; style=&quot;font-family: &amp;quot;Liberation Sans&amp;quot;, Arial, sans-serif; font-size: 13px; font-weight: normal; font-style: normal; text-decoration: none; fill: rgb(0, 0, 0); fill-opacity: 1; color: rgb(0, 0, 0); opacity: 1;&quot;&gt;&lt;g transform=&quot;translate(0,60)&quot;&gt;&lt;text/&gt;&lt;/g&gt;&lt;/g&gt;
        &lt;/g&gt;&lt;g p:type=&quot;Shape&quot; p:def=&quot;Evolus.Common:Line&quot; id=&quot;825fff62f3f64346bc90a9c2e36949a4&quot; transform=&quot;matrix(1,0,0,1,96,175)&quot;&gt;&lt;p:metadata&gt;&lt;p:property name=&quot;box&quot;&gt;259,10&lt;/p:property&gt;&lt;p:property name=&quot;strokeColor&quot;&gt;#1B3280FF&lt;/p:property&gt;&lt;p:property name=&quot;strokeStyle&quot;&gt;2|&lt;/p:property&gt;&lt;/p:metadata&gt;
            &lt;rect style=&quot;fill: #000000; fill-opacity: 0; stroke: none;&quot; x=&quot;0&quot; y=&quot;0&quot; p:name=&quot;bgRect&quot; id=&quot;cf408740b87c493fb0e2a5404f5cabee&quot; width=&quot;259&quot; height=&quot;10&quot;/&gt;
            &lt;path style=&quot;fill: none; stroke: rgb(27, 50, 128); stroke-width: 2; stroke-opacity: 1;&quot; d=&quot;M 0 5 L 259 5&quot; p:name=&quot;line1&quot; id=&quot;061d2ff0969348f78998fd82f5741840&quot; transform=&quot;translate(0,0)&quot;/&gt;
        &lt;/g&gt;&lt;g p:type=&quot;Shape&quot; p:def=&quot;Evolus.Common:Line&quot; id=&quot;04dea28ccfe14c5e9a4ae8fbf992f74d&quot; transform=&quot;matrix(6.123233601181349e-17,1,-1,6.123233601181349e-17,230.5,50.5)&quot;&gt;&lt;p:metadata&gt;&lt;p:property name=&quot;box&quot;&gt;259,10&lt;/p:property&gt;&lt;p:property name=&quot;strokeColor&quot;&gt;#1B3280FF&lt;/p:property&gt;&lt;p:property name=&quot;strokeStyle&quot;&gt;2|&lt;/p:property&gt;&lt;/p:metadata&gt;
            &lt;rect style=&quot;fill: #000000; fill-opacity: 0; stroke: none;&quot; x=&quot;0&quot; y=&quot;0&quot; p:name=&quot;bgRect&quot; id=&quot;4c025fcf7be44c40969b37b45a8a3c20&quot; width=&quot;259&quot; height=&quot;10&quot;/&gt;
            &lt;path style=&quot;fill: none; stroke: rgb(27, 50, 128); stroke-width: 2; stroke-opacity: 1;&quot; d=&quot;M 0 5 L 259 5&quot; p:name=&quot;line1&quot; id=&quot;5c5b638029e141cdb6db5f5569988a38&quot; transform=&quot;translate(0,0)&quot;/&gt;
        &lt;/g&gt;&lt;g p:type=&quot;Shape&quot; p:def=&quot;Evolus.Common:RichTextBoxV2&quot; id=&quot;153fcf91c7dd4f3584cfb8dbf6aa3e17&quot; transform=&quot;matrix(1,0,0,1,177,5)&quot;&gt;&lt;p:metadata&gt;&lt;p:property name=&quot;width&quot;&gt;200,0&lt;/p:property&gt;&lt;p:property name=&quot;fixedWidth&quot;&gt;false&lt;/p:property&gt;&lt;p:property name=&quot;textContent&quot;&gt;&amp;lt;div xmlns=&quot;http://www.w3.org/1999/xhtml&quot; style=&quot;text-align: center;&quot;&amp;gt;&amp;lt;span style=&quot;line-height: 1.1;&quot;&amp;gt;Task-Directed&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div xmlns=&quot;http://www.w3.org/1999/xhtml&quot; style=&quot;text-align: center;&quot;&amp;gt;&amp;lt;span style=&quot;line-height: 1.1;&quot;&amp;gt;Responsiveness&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&lt;/p:property&gt;&lt;p:property name=&quot;textFont&quot;&gt;&quot;Liberation Sans&quot;,Arial,sans-serif|normal|normal|13px|none&lt;/p:property&gt;&lt;p:property name=&quot;textColor&quot;&gt;#000000FF&lt;/p:property&gt;&lt;p:property name=&quot;customStyle&quot;&gt;
                &lt;/p:property&gt;&lt;/p:metadata&gt;

            &lt;foreignObject x=&quot;0&quot; y=&quot;0&quot; width=&quot;96&quot; height=&quot;36&quot; p:name=&quot;htmlObject&quot; id=&quot;600fd0ba1d4d427890ef3e095c286908&quot; style=&quot;color: rgb(0, 0, 0); opacity: 1; font-family: &amp;quot;Liberation Sans&amp;quot;, Arial, sans-serif; font-size: 13px; font-weight: normal; font-style: normal; text-decoration: none;&quot;&gt;
                &lt;div xmlns=&quot;http://www.w3.org/1999/xhtml&quot; p:name=&quot;textDiv&quot; id=&quot;9d9ccbc93e1a4fa78968bab0d063dadb&quot; style=&quot;display: inline-block; white-space: nowrap; text-decoration: none;&quot;&gt;&lt;div&gt;&lt;div style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;line-height: 1.1;&quot;&gt;Task-Directed&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;line-height: 1.1;&quot;&gt;Responsiveness&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
            &lt;/foreignObject&gt;
        &lt;/g&gt;&lt;g p:type=&quot;Shape&quot; p:def=&quot;Evolus.Common:RichTextBoxV2&quot; id=&quot;5a954b0bc1e44dc1a0b6391d0180c491&quot; transform=&quot;matrix(1,0,0,1,177,319)&quot;&gt;&lt;p:metadata&gt;&lt;p:property name=&quot;width&quot;&gt;200,0&lt;/p:property&gt;&lt;p:property name=&quot;fixedWidth&quot;&gt;false&lt;/p:property&gt;&lt;p:property name=&quot;textContent&quot;&gt;&amp;lt;div xmlns=&quot;http://www.w3.org/1999/xhtml&quot; style=&quot;text-align: center;&quot;&amp;gt;&amp;lt;span style=&quot;line-height: 1.1;&quot;&amp;gt;People-Directed&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div xmlns=&quot;http://www.w3.org/1999/xhtml&quot; style=&quot;text-align: center;&quot;&amp;gt;&amp;lt;span style=&quot;line-height: 1.1;&quot;&amp;gt;Responsiveness&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&lt;/p:property&gt;&lt;p:property name=&quot;textFont&quot;&gt;&quot;Liberation Sans&quot;,Arial,sans-serif|normal|normal|13px|none&lt;/p:property&gt;&lt;p:property name=&quot;textColor&quot;&gt;#000000FF&lt;/p:property&gt;&lt;p:property name=&quot;customStyle&quot;&gt;
                &lt;/p:property&gt;&lt;/p:metadata&gt;

            &lt;foreignObject x=&quot;0&quot; y=&quot;0&quot; width=&quot;96&quot; height=&quot;36&quot; p:name=&quot;htmlObject&quot; id=&quot;d5730e23b6414387af11c558d48b946c&quot; style=&quot;color: rgb(0, 0, 0); opacity: 1; font-family: &amp;quot;Liberation Sans&amp;quot;, Arial, sans-serif; font-size: 13px; font-weight: normal; font-style: normal; text-decoration: none;&quot;&gt;
                &lt;div xmlns=&quot;http://www.w3.org/1999/xhtml&quot; p:name=&quot;textDiv&quot; id=&quot;2baec96934fd425298460c7d0e29dc20&quot; style=&quot;display: inline-block; white-space: nowrap; text-decoration: none;&quot;&gt;&lt;div&gt;&lt;div style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;line-height: 1.1;&quot;&gt;People-Directed&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;line-height: 1.1;&quot;&gt;Responsiveness&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
            &lt;/foreignObject&gt;
        &lt;/g&gt;&lt;g p:type=&quot;Shape&quot; p:def=&quot;Evolus.Common:RichTextBoxV2&quot; id=&quot;19dcd8f4b8014c4ab67b9d572d45a95c&quot; transform=&quot;matrix(1,0,0,1,364,162)&quot;&gt;&lt;p:metadata&gt;&lt;p:property name=&quot;width&quot;&gt;200,0&lt;/p:property&gt;&lt;p:property name=&quot;fixedWidth&quot;&gt;false&lt;/p:property&gt;&lt;p:property name=&quot;textContent&quot;&gt;&amp;lt;div xmlns=&quot;http://www.w3.org/1999/xhtml&quot; style=&quot;text-align: center;&quot;&amp;gt;Tell-Directed&amp;lt;br /&amp;gt;Assertiveness&amp;lt;/div&amp;gt;&lt;/p:property&gt;&lt;p:property name=&quot;textFont&quot;&gt;&quot;Liberation Sans&quot;,Arial,sans-serif|normal|normal|13px|none&lt;/p:property&gt;&lt;p:property name=&quot;textColor&quot;&gt;#000000FF&lt;/p:property&gt;&lt;p:property name=&quot;customStyle&quot;&gt;
                &lt;/p:property&gt;&lt;/p:metadata&gt;

            &lt;foreignObject x=&quot;0&quot; y=&quot;0&quot; width=&quot;83&quot; height=&quot;36&quot; p:name=&quot;htmlObject&quot; id=&quot;04a50dadf0d24f16bade71fef807c1a6&quot; style=&quot;color: rgb(0, 0, 0); opacity: 1; font-family: &amp;quot;Liberation Sans&amp;quot;, Arial, sans-serif; font-size: 13px; font-weight: normal; font-style: normal; text-decoration: none;&quot;&gt;
                &lt;div xmlns=&quot;http://www.w3.org/1999/xhtml&quot; p:name=&quot;textDiv&quot; id=&quot;bb911aff364c4fbba4258e24944413c8&quot; style=&quot;display: inline-block; white-space: nowrap; text-decoration: none;&quot;&gt;&lt;div&gt;&lt;div style=&quot;text-align: center;&quot;&gt;Tell-Directed&lt;br /&gt;Assertiveness&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
            &lt;/foreignObject&gt;
        &lt;/g&gt;&lt;g p:type=&quot;Shape&quot; p:def=&quot;Evolus.Common:RichTextBoxV2&quot; id=&quot;126164fff11f4e18949f525a91623590&quot; transform=&quot;matrix(1,0,0,1,5,162)&quot;&gt;&lt;p:metadata&gt;&lt;p:property name=&quot;width&quot;&gt;200,0&lt;/p:property&gt;&lt;p:property name=&quot;fixedWidth&quot;&gt;false&lt;/p:property&gt;&lt;p:property name=&quot;textContent&quot;&gt;&amp;lt;div xmlns=&quot;http://www.w3.org/1999/xhtml&quot; style=&quot;text-align: center;&quot;&amp;gt;Ask-Directed&amp;lt;br /&amp;gt;Assertiveness&amp;lt;/div&amp;gt;&lt;/p:property&gt;&lt;p:property name=&quot;textFont&quot;&gt;&quot;Liberation Sans&quot;,Arial,sans-serif|normal|normal|13px|none&lt;/p:property&gt;&lt;p:property name=&quot;textColor&quot;&gt;#000000FF&lt;/p:property&gt;&lt;p:property name=&quot;customStyle&quot;&gt;
                &lt;/p:property&gt;&lt;/p:metadata&gt;

            &lt;foreignObject x=&quot;0&quot; y=&quot;0&quot; width=&quot;83&quot; height=&quot;36&quot; p:name=&quot;htmlObject&quot; id=&quot;7bce78fd487843fb94298f2959be9617&quot; style=&quot;color: rgb(0, 0, 0); opacity: 1; font-family: &amp;quot;Liberation Sans&amp;quot;, Arial, sans-serif; font-size: 13px; font-weight: normal; font-style: normal; text-decoration: none;&quot;&gt;
                &lt;div xmlns=&quot;http://www.w3.org/1999/xhtml&quot; p:name=&quot;textDiv&quot; id=&quot;26a3a937acfa42dbbc0866bb75979bc5&quot; style=&quot;display: inline-block; white-space: nowrap; text-decoration: none;&quot;&gt;&lt;div&gt;&lt;div style=&quot;text-align: center;&quot;&gt;Ask-Directed&lt;br /&gt;Assertiveness&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
            &lt;/foreignObject&gt;
        &lt;/g&gt;&lt;g p:type=&quot;Shape&quot; p:def=&quot;Evolus.Common:RichTextBoxV2&quot; id=&quot;fa9160782b5941d3a24cf6a45df49b01&quot; transform=&quot;matrix(1,0,0,1,262,125)&quot;&gt;&lt;p:metadata&gt;&lt;p:property name=&quot;width&quot;&gt;200,0&lt;/p:property&gt;&lt;p:property name=&quot;fixedWidth&quot;&gt;false&lt;/p:property&gt;&lt;p:property name=&quot;textContent&quot;&gt;&amp;lt;div xmlns=&quot;http://www.w3.org/1999/xhtml&quot; style=&quot;text-align: center;&quot;&amp;gt;&amp;lt;span style=&quot;font-weight: bold;&quot;&amp;gt;Driver&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&lt;/p:property&gt;&lt;p:property name=&quot;textFont&quot;&gt;&quot;Liberation Sans&quot;,Arial,sans-serif|normal|normal|13px|none&lt;/p:property&gt;&lt;p:property name=&quot;textColor&quot;&gt;#FF9900FF&lt;/p:property&gt;&lt;p:property name=&quot;customStyle&quot;&gt;
                &lt;/p:property&gt;&lt;/p:metadata&gt;

            &lt;foreignObject x=&quot;0&quot; y=&quot;0&quot; width=&quot;37&quot; height=&quot;18&quot; p:name=&quot;htmlObject&quot; id=&quot;488154346eb243ab8138cbe512458686&quot; style=&quot;color: rgb(255, 153, 0); opacity: 1; font-family: &amp;quot;Liberation Sans&amp;quot;, Arial, sans-serif; font-size: 13px; font-weight: normal; font-style: normal; text-decoration: none;&quot;&gt;
                &lt;div xmlns=&quot;http://www.w3.org/1999/xhtml&quot; p:name=&quot;textDiv&quot; id=&quot;623912a7b71f4e84926f99c67d1cbaa5&quot; style=&quot;display: inline-block; white-space: nowrap; text-decoration: none;&quot;&gt;&lt;div&gt;&lt;div style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;Driver&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
            &lt;/foreignObject&gt;
        &lt;/g&gt;&lt;g p:type=&quot;Shape&quot; p:def=&quot;Evolus.Common:RichTextBoxV2&quot; id=&quot;2b7382ff22a0475e99bfde593a832153&quot; transform=&quot;matrix(1,0,0,1,247,221)&quot;&gt;&lt;p:metadata&gt;&lt;p:property name=&quot;width&quot;&gt;200,0&lt;/p:property&gt;&lt;p:property name=&quot;fixedWidth&quot;&gt;false&lt;/p:property&gt;&lt;p:property name=&quot;textContent&quot;&gt;&amp;lt;div xmlns=&quot;http://www.w3.org/1999/xhtml&quot; style=&quot;text-align: center;&quot;&amp;gt;&amp;lt;span style=&quot;font-weight: bold;&quot;&amp;gt;Expressive&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&lt;/p:property&gt;&lt;p:property name=&quot;textFont&quot;&gt;&quot;Liberation Sans&quot;,Arial,sans-serif|normal|normal|13px|none&lt;/p:property&gt;&lt;p:property name=&quot;textColor&quot;&gt;#FF0000FF&lt;/p:property&gt;&lt;p:property name=&quot;customStyle&quot;&gt;
                &lt;/p:property&gt;&lt;/p:metadata&gt;

            &lt;foreignObject x=&quot;0&quot; y=&quot;0&quot; width=&quot;68&quot; height=&quot;18&quot; p:name=&quot;htmlObject&quot; id=&quot;c93947b0133a4c268b932e33116131aa&quot; style=&quot;color: rgb(255, 0, 0); opacity: 1; font-family: &amp;quot;Liberation Sans&amp;quot;, Arial, sans-serif; font-size: 13px; font-weight: normal; font-style: normal; text-decoration: none;&quot;&gt;
                &lt;div xmlns=&quot;http://www.w3.org/1999/xhtml&quot; p:name=&quot;textDiv&quot; id=&quot;ab5a8bd7efc247cc8791efa0aa825a5f&quot; style=&quot;display: inline-block; white-space: nowrap; text-decoration: none;&quot;&gt;&lt;div&gt;&lt;div style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;Expressive&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
            &lt;/foreignObject&gt;
        &lt;/g&gt;&lt;g p:type=&quot;Shape&quot; p:def=&quot;Evolus.Common:RichTextBoxV2&quot; id=&quot;6dd07ec08e2f430f8d680fbbf2796a70&quot; transform=&quot;matrix(1,0,0,1,145,221)&quot;&gt;&lt;p:metadata&gt;&lt;p:property name=&quot;width&quot;&gt;200,0&lt;/p:property&gt;&lt;p:property name=&quot;fixedWidth&quot;&gt;false&lt;/p:property&gt;&lt;p:property name=&quot;textContent&quot;&gt;&amp;lt;div xmlns=&quot;http://www.w3.org/1999/xhtml&quot; style=&quot;text-align: center;&quot;&amp;gt;Amiable&amp;lt;/div&amp;gt;&lt;/p:property&gt;&lt;p:property name=&quot;textFont&quot;&gt;Arial|bold|normal|13px|none&lt;/p:property&gt;&lt;p:property name=&quot;textColor&quot;&gt;#009900FF&lt;/p:property&gt;&lt;p:property name=&quot;customStyle&quot;&gt;
                &lt;/p:property&gt;&lt;/p:metadata&gt;

            &lt;foreignObject x=&quot;0&quot; y=&quot;0&quot; width=&quot;51&quot; height=&quot;18&quot; p:name=&quot;htmlObject&quot; id=&quot;ab320d94b2d44b54b782fff4f61a7ddf&quot; style=&quot;color: rgb(0, 153, 0); opacity: 1; font-family: Arial; font-size: 13px; font-weight: bold; font-style: normal; text-decoration: none;&quot;&gt;
                &lt;div xmlns=&quot;http://www.w3.org/1999/xhtml&quot; p:name=&quot;textDiv&quot; id=&quot;e4499ec4fa3e4d0d96434ad8fbe9f275&quot; style=&quot;display: inline-block; white-space: nowrap; text-decoration: none;&quot;&gt;&lt;div&gt;&lt;div style=&quot;text-align: center;&quot;&gt;Amiable&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
            &lt;/foreignObject&gt;
        &lt;/g&gt;&lt;g p:type=&quot;Shape&quot; p:def=&quot;Evolus.Common:RichTextBoxV2&quot; id=&quot;5be6a1cd483f41af938e726b5fbf4025&quot; transform=&quot;matrix(1,0,0,1,140,125)&quot;&gt;&lt;p:metadata&gt;&lt;p:property name=&quot;width&quot;&gt;200,0&lt;/p:property&gt;&lt;p:property name=&quot;fixedWidth&quot;&gt;false&lt;/p:property&gt;&lt;p:property name=&quot;textContent&quot;&gt;&amp;lt;div xmlns=&quot;http://www.w3.org/1999/xhtml&quot; style=&quot;text-align: center;&quot;&amp;gt;Analytical&amp;lt;/div&amp;gt;&lt;/p:property&gt;&lt;p:property name=&quot;textFont&quot;&gt;Arial|bold|normal|13px|none&lt;/p:property&gt;&lt;p:property name=&quot;textColor&quot;&gt;#3333FFFF&lt;/p:property&gt;&lt;p:property name=&quot;customStyle&quot;&gt;
                &lt;/p:property&gt;&lt;/p:metadata&gt;

            &lt;foreignObject x=&quot;0&quot; y=&quot;0&quot; width=&quot;61&quot; height=&quot;18&quot; p:name=&quot;htmlObject&quot; id=&quot;07d8ffe4651a4084932381c05b563d1d&quot; style=&quot;color: rgb(51, 51, 255); opacity: 1; font-family: Arial; font-size: 13px; font-weight: bold; font-style: normal; text-decoration: none;&quot;&gt;
                &lt;div xmlns=&quot;http://www.w3.org/1999/xhtml&quot; p:name=&quot;textDiv&quot; id=&quot;48fbbaafce964d79ae262761d734ff2f&quot; style=&quot;display: inline-block; white-space: nowrap; text-decoration: none;&quot;&gt;&lt;div&gt;&lt;div style=&quot;text-align: center;&quot;&gt;Analytical&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
            &lt;/foreignObject&gt;
        &lt;/g&gt;&lt;/g&gt;&lt;/g&gt;&lt;/svg&gt;

&lt;p&gt;
我順便在上圖四象限中做了四種顏色標記，我把樂嘉所謂的性格色彩學&lt;sup&gt;&lt;a id=&quot;fnr.3&quot; class=&quot;footref&quot; href=&quot;#fn.3&quot;&gt;3&lt;/a&gt;&lt;/sup&gt;也映射到社交風格類型中。四種性格顏色是這麼定義的：
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;紅色：“元氣族”，快樂外向的團隊帶動者，做事情的動機很大程度上是爲了快樂，隨性而又善於交際。&lt;/li&gt;
&lt;li&gt;藍色：“心機蛇”，最佳執行官，過度認真，善於分析。&lt;/li&gt;
&lt;li&gt;黃色：“山林之王”，強有力的激進指揮者。深層次的驅動力來自對目標的實現和完成。&lt;/li&gt;
&lt;li&gt;綠色：“和事佬”，和平的促進者，追求和諧穩定，適應性強，很好的傾聽者。&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
兩種分類模型側重點不同，但是還是有不少的重合。姑且組合着用吧。
&lt;/p&gt;

&lt;p&gt;
有以上兩種識別社交風格和性格特徵的參考指標之後，就可以通過觀察、試探等多種方法去識別溝通對方的社交風格和性格類型了。
&lt;/p&gt;

&lt;p&gt;
這裏我想順便提一提老祖宗孔子在《論語》中提到的一句經典論斷：“視其所以，觀其所由，察其所安，人焉廋哉？人焉廋哉？”
&lt;/p&gt;

&lt;p&gt;
這句話很好的總結了看人識人的方法學。我們在考察人的時候，要先觀察他做事情的原因是什麼，他的動機是什麼；然後再觀察他做事情的途徑方法是什麼，他是怎麼去解決問題的；最後再深入的考察他做事情的內心狀態是如何的，他是不是心安於所做的事情。如此層層深入的去探究一個人，那麼他哪還怎麼可能藏匿自己呢？
&lt;/p&gt;

&lt;p&gt;
這種系統的考察人的動機、行爲和心理的方法還是很值得借鑑的。
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgheadline3&quot; class=&quot;outline-3&quot;&gt;
&lt;h3 id=&quot;orgheadline3&quot;&gt;&lt;span class=&quot;section-number-3&quot;&gt;2.2&lt;/span&gt; 分析 &amp;amp; 調整&lt;/h3&gt;
&lt;div class=&quot;outline-text-3&quot; id=&quot;text-2-2&quot;&gt;
&lt;p&gt;
在識別了溝通對象的社交風格之後，就要分析對方的期望和反感，再根據自己的風格類型，跳出自己的舒適區，像對方的社交風格舒適區邁進，做出相應的調整，從而提高溝通效率，工作輸出。
&lt;/p&gt;

&lt;p&gt;
具體來說，和命令導向的人溝通，要注意：
&lt;/p&gt;

&lt;ol class=&quot;org-ol&quot;&gt;
&lt;li&gt;快速進入主題，說重點&lt;/li&gt;
&lt;li&gt;提供充足信息做參考&lt;/li&gt;
&lt;li&gt;充分表達不同意見&lt;/li&gt;
&lt;li&gt;主動發起溝通談話&lt;/li&gt;
&lt;li&gt;快速果斷做出決定&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;
和詢問導向的人溝通，注意：
&lt;/p&gt;
&lt;ol class=&quot;org-ol&quot;&gt;
&lt;li&gt;徵詢對方意見&lt;/li&gt;
&lt;li&gt;放慢步調，充分討論&lt;/li&gt;
&lt;li&gt;注意傾聽，避免打斷對方&lt;/li&gt;
&lt;li&gt;預留足夠的停頓和安靜思考的時間&lt;/li&gt;
&lt;li&gt;避免施加太大的壓力&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;
和任務導向的人溝通時：
&lt;/p&gt;
&lt;ol class=&quot;org-ol&quot;&gt;
&lt;li&gt;就事論事，討論工作事實&lt;/li&gt;
&lt;li&gt;解釋論斷後面的邏輯思路&lt;/li&gt;
&lt;li&gt;認可其時間效率上的顧慮&lt;/li&gt;
&lt;li&gt;減少誇張的手勢和面部表情&lt;/li&gt;
&lt;li&gt;避免閒談&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;
和人際導向的人溝通時：
&lt;/p&gt;
&lt;ol class=&quot;org-ol&quot;&gt;
&lt;li&gt;表達自己的個人感情&lt;/li&gt;
&lt;li&gt;對個人的貢獻給予肯定&lt;/li&gt;
&lt;li&gt;願意在工作場合以外分享私人生活經歷&lt;/li&gt;
&lt;li&gt;增加身體語言，面部表情以及身體接觸&lt;/li&gt;
&lt;li&gt;增加聲調的變化，抑揚頓挫&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;
說到調整溝通方式以迎合溝通對象這個話題，不得不提莊子《人間世》篇。《人間世》可以說完全是有效溝通的案例分析論文。
&lt;/p&gt;

&lt;p&gt;
《人間世》第一個故事借顏回打算去衛國匡正獨斷專行的衛王，和他的老師提出自己應對衛王的策略：
&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;
我內直而外曲，成而上比。內直者，與天為徒。與天為徒者，知天子之與己皆天之所子，而獨以己言蘄乎而人善之，蘄乎而人不善之邪？若然者，人謂之童子，是之謂與天為徒。外曲者，與人之為徒也。擎、跽、曲拳，人臣之禮也，人皆為之，吾敢不為邪！為人之所為者，人亦无疵焉，是之謂與人為徒。成而上比者，與古為徒。其言雖教，讁之實也。古之有也，非吾有也。若然者，雖直不為病，是之謂與古為徒。
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;
顏回提出了很重要的一個方法：“內直而外曲，成而上比”。“內直”就是直面人的本性，接受人性的種種事實以及弱點，“外曲”就是所謂的迎合，人臣之禮人皆爲之，也不能少。“成而上比”就是根據歷史經驗事實來發表論斷，這樣就不會遭受攻擊。儘管顏回這樣做已經非常高妙了，但是後面孔子還是給予否定，並提出了更加高超的“氣聽心齋法”。暫且不論。
&lt;/p&gt;

&lt;p&gt;
《人間世》後面還有一則故事，這次是顏闔要去做衛太子的老師。這個衛太子就是前面提到的衛王，故事發生的時間線更早一些，那時候衛王還只是個太子。顏闔就去請教蘧伯玉，說：“有人於此，其德天殺。與之為無方，則危吾國；與之為有方，則危吾身。”（老師啊，我要去做這樣一種人的老師，他的品性簡直是 God damned，不好好教他，那我們國家就完了；好好教他，恐怕他會恨我，我小命不保！）蘧伯玉就教他：
&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;
形莫若就，心莫若和。雖然，之二者有患。就不欲入，和不欲出。形就而入，且為顛為滅，為崩為蹶。心和而出，且為聲為名，為妖為孽。彼且為嬰兒，亦與之為嬰兒；彼且為無町畦，亦與之為無町畦；彼且為無崖，亦與之為無崖。達之，入於無疵。
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;
這段也很好的描述了迎合方法，並且講了迎合中的注意事項：外在言語、行爲儘量的去迎合，內在要保持自己的原則暗中疏導。但是要注意，不可以一味的迎合而失去內在的主張，也不可內在主張太過顯露。對方像個嬰兒一樣喜怒無常天真直率，那就表現和他一樣做個性情中人；對方如果和你沒有隔閡，那就表現和他一樣率性而爲；對方如果無拘無束，那就和他一樣無拘無束。這樣就可以達到沒有過錯，就可以慢慢對其進行疏導了。
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgheadline5&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgheadline5&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;3&lt;/span&gt; 總結&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-3&quot;&gt;
&lt;p&gt;
本文首先介紹了社交風格類型和性格色彩學，並引用了孔子的觀人識人方法，然後介紹了分析和調整的方法，並圍繞莊子《人間世》中的兩個運用迎合能力的案例進行了討論。
&lt;/p&gt;

&lt;p&gt;
迎合的方法是先識別自己和對方的社交風格，再分析，最後調整自己的溝通方式。但這不是溝通的結束，在後續的溝通中要繼續識別，再持續分析，不斷調整。
&lt;/p&gt;

&lt;p&gt;
迎合能力是一種非常重要的人際交往技巧，不僅可以用在工作溝通中，也可以用在生活的方方面面，好好學習運用必定可以提高工作和人生的效能。
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;footnotes&quot;&gt;
&lt;h2 class=&quot;footnotes&quot;&gt;Footnotes: &lt;/h2&gt;
&lt;div id=&quot;text-footnotes&quot;&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.1&quot; class=&quot;footnum&quot; href=&quot;#fnr.1&quot;&gt;1&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;http://www.wilsonlearning.com/wlw/articles/w/hidden-cost-comm/en&quot;&gt;http://www.wilsonlearning.com/wlw/articles/w/hidden-cost-comm/en&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.2&quot; class=&quot;footnum&quot; href=&quot;#fnr.2&quot;&gt;2&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
關於 versatile，請詳見上月的文章 July 9, 2016 » 单词本：英语单词versatile
&lt;a href=&quot;http://kimi.im/2016-07-09-english-versatile&quot;&gt;http://kimi.im/2016-07-09-english-versatile&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.3&quot; class=&quot;footnum&quot; href=&quot;#fnr.3&quot;&gt;3&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;http://baike.baidu.com/view/3438641.htm&quot;&gt;http://baike.baidu.com/view/3438641.htm&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;


&lt;/div&gt;
&lt;/div&gt;
</content>
 </entry>
 
 <entry>
   <title>單詞本：搶座</title>
   <link href="http://kimi.im/2016-08-02-english-grap"/>
   <updated>2016-08-02T00:00:00+00:00</updated>
   <id>http://kimi.im/english-grap</id>
   <content type="html">&lt;p&gt;
昨晚花了三個小時從杭州來到了上海。虹橋火車站下車之後坐 2 號線地鐵。各個車門前早已排起了長隊，提着行李的，拎着包的，揹着包的，還有抱着棉被枕頭的；滿頭大汗的，汗流浹背的，神色慌張的，急急忙忙的，鬼鬼祟祟的，東張西望的。
&lt;/p&gt;

&lt;p&gt;
等到地鐵呼嘯着進站，人們齊刷刷地地望向地鐵車廂，抓緊行李，雙手拎包，抱緊棉被，等着門開的一刻，泄洪般涌進車廂，說時遲那時快，不到兩秒鍾時間，地鐵內的座位已經被填滿。然後剩餘的地方也陸陸續續的被站滿。
&lt;/p&gt;

&lt;p&gt;
沒有搶到座的人們只能無奈的笑笑，抓緊了把手，等待地鐵發動。我也是那無奈的一個。這就是上海虹橋地鐵首發站站驚心動魄的一刻。
&lt;/p&gt;

&lt;p&gt;
地鐵搶座（grab the seat）也是很有趣的一道風景。座位資源有限，拼的就是速度。大家都講規則，等車時按前後順序車門兩側排好隊伍。腿快有，腿慢無，實在是很公平的競爭。搶到座的，掏出手機看看小說，讀讀新聞，聊聊微信，不亦樂乎；搶不到座的，調整好站姿，也能掏出手機，沉浸在信息知識的海洋裏，忘卻剛才汲汲營營的追逐。
&lt;/p&gt;

&lt;p&gt;
比如那位抱着棉被枕頭的小姑娘，如果不搶個好的座兒，豈不是要擁着枕頭、棉被、行李箱站着，那實在是太辛苦了。其實她已經錯過一班車了，這次是她等的第二班車。估計前一班車她沒有搶到座，所以不辭辛勞，再等一班，這次她排在隊伍前面，所以找到了一個心儀的座位。有了穩妥的座位，她就可以愉快的和夥伴語音聊微信了。
&lt;/p&gt;

&lt;p&gt;
而旁邊這位姑娘就不怎麼幸運，被擠在了人羣中間，看似她業務很忙，左手一個 iPhone 6
plus，右手一個華爲榮耀，兩隻手同時開工，突然地鐵一陣剎車，她被甩到了一位手臂紋着骷髏紋身，正在坐在座位上用手機閱讀小說的男子懷中。他不曾想到佔個座位還能有美女投懷送抱的福利。
&lt;/p&gt;

&lt;p&gt;
搶座這個動作，在英語裏是 grab the/a seat：
&lt;/p&gt;

&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;Overall, it is safe to travel in Shanghai. But you should take good care of
your belongings if you are in a highly crowded place as there might be
cutpurses. Theft is highly likely to occur while people rush for arriving bus
or sub ways, hoping to &lt;i&gt;grab a seat&lt;/i&gt;.&lt;sup&gt;&lt;a id=&quot;fnr.1&quot; class=&quot;footref&quot; href=&quot;#fn.1&quot;&gt;1&lt;/a&gt;&lt;/sup&gt;&lt;/li&gt;
&lt;li&gt;It’s happened to Hannah Horvath on Girls, and maybe it’s even happened to
you. You &lt;i&gt;grab a seat&lt;/i&gt; on the New York subway, let your eyes flutter shut, and
when you open them again, you’re in Coney Island.&lt;sup&gt;&lt;a id=&quot;fnr.2&quot; class=&quot;footref&quot; href=&quot;#fn.2&quot;&gt;2&lt;/a&gt;&lt;/sup&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;div id=&quot;outline-container-orgheadline7&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgheadline7&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;1&lt;/span&gt; Grab&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-1&quot;&gt;
&lt;p&gt;
越是簡單的單詞，越是含義豐富。似乎到哪裏都一樣。學習這種單詞還是挺繁瑣的，因爲含義豐富，要好好掌握難度很大。
&lt;/p&gt;

&lt;blockquote&gt;
&lt;ol class=&quot;org-ol&quot;&gt;
&lt;li&gt;to seize suddenly, eagerly, or roughly; snatch. 突然抓取&lt;/li&gt;
&lt;li&gt;to take illegal possession of; seize forcibly or unscrupulously 霸佔，搶奪:
to grab land. 霸佔土地。&lt;/li&gt;
&lt;li&gt;a sudden, eager grasp or snatch. 猛抓的動作。&lt;/li&gt;
&lt;li&gt;seizure or acquisition by violent or unscrupulous means. 搶奪的動作。&lt;/li&gt;
&lt;li&gt;something that is grabbed. 被抓住的東西。&lt;/li&gt;
&lt;li&gt;a mechanical device for gripping objects. 抓取設備。&lt;/li&gt;
&lt;li&gt;to obtain and consume quickly 猛吃: Let&apos;s grab a sandwich. 讓我們快速解決這個三明治。&lt;/li&gt;
&lt;li&gt;to cause a reaction in; affect 引入注意: How does my idea grab you? 你對我的想法感興趣不？&lt;/li&gt;
&lt;/ol&gt;
&lt;/blockquote&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgheadline1&quot; class=&quot;outline-3&quot;&gt;
&lt;h3 id=&quot;orgheadline1&quot;&gt;&lt;span class=&quot;section-number-3&quot;&gt;1.1&lt;/span&gt; 突然抓取&lt;/h3&gt;
&lt;div class=&quot;outline-text-3&quot; id=&quot;text-1-1&quot;&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;He grabbed the pen from me.&lt;/li&gt;
&lt;li&gt;The woman with him to grab a seat, he did not.&lt;/li&gt;
&lt;li&gt;A man then got out and grabbed a white turkey and drove off southbound on
S.R. 3. &lt;sup&gt;&lt;a id=&quot;fnr.3&quot; class=&quot;footref&quot; href=&quot;#fn.3&quot;&gt;3&lt;/a&gt;&lt;/sup&gt; 昨天的新聞，美國的有人在馬路上抓了只火雞就跑了。&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgheadline2&quot; class=&quot;outline-3&quot;&gt;
&lt;h3 id=&quot;orgheadline2&quot;&gt;&lt;span class=&quot;section-number-3&quot;&gt;1.2&lt;/span&gt; 霸佔，搶奪&lt;/h3&gt;
&lt;div class=&quot;outline-text-3&quot; id=&quot;text-1-2&quot;&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;Fans line up outside store to &lt;i&gt;grab&lt;/i&gt; Harry Potter book&lt;/li&gt;
&lt;li&gt;Anurag Pathak, a 27-year-old Harry Potter fan, cancelled his office trip to
Nainital to be able to &lt;i&gt;grab&lt;/i&gt; the book. She had reached the Hazratganj shop at
10am, two hours before the sale of &apos;Harry Potter and the Cursed Child&apos; had to
begin.&lt;/li&gt;
&lt;li&gt;Not only children, but adults too, made sure to steer clear of other plans on
the weekend and visit the bookstore to &lt;i&gt;grab&lt;/i&gt; their copy.&lt;sup&gt;&lt;a id=&quot;fnr.4&quot; class=&quot;footref&quot; href=&quot;#fn.4&quot;&gt;4&lt;/a&gt;&lt;/sup&gt; 不止小朋友，大人們也跑去書店搶買哈利波特新書《哈利波波特和被詛咒的孩子》。&lt;/li&gt;
&lt;li&gt;Turkey, US meet after power grab attempt.&lt;sup&gt;&lt;a id=&quot;fnr.5&quot; class=&quot;footref&quot; href=&quot;#fn.5&quot;&gt;5&lt;/a&gt;&lt;/sup&gt; 前一篇文章《單詞本：德語單詞
Putsch》提到過政變可以稱 Putsch attempt，也可以叫 coup d&apos;état，這則新聞有出來個說法：power grab attempt。能把所學的知識連貫起來是一件很好玩的事情。不是嗎？&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgheadline3&quot; class=&quot;outline-3&quot;&gt;
&lt;h3 id=&quot;orgheadline3&quot;&gt;&lt;span class=&quot;section-number-3&quot;&gt;1.3&lt;/span&gt; 猛抓的動作&lt;/h3&gt;
&lt;div class=&quot;outline-text-3&quot; id=&quot;text-1-3&quot;&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;Fan reaches way over the rail for sweet grab&lt;sup&gt;&lt;a id=&quot;fnr.6&quot; class=&quot;footref&quot; href=&quot;#fn.6&quot;&gt;6&lt;/a&gt;&lt;/sup&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgheadline4&quot; class=&quot;outline-3&quot;&gt;
&lt;h3 id=&quot;orgheadline4&quot;&gt;&lt;span class=&quot;section-number-3&quot;&gt;1.4&lt;/span&gt; 猛吃，快速吃掉&lt;/h3&gt;
&lt;div class=&quot;outline-text-3&quot; id=&quot;text-1-4&quot;&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;Let me just grab some French bread for dinner and we can check out. 我去弄些法國麪包當晚餐，然後我們就離開。&lt;/li&gt;
&lt;li&gt;I think I&apos;ll just run downstairs and grab a cup of coffee.&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgheadline5&quot; class=&quot;outline-3&quot;&gt;
&lt;h3 id=&quot;orgheadline5&quot;&gt;&lt;span class=&quot;section-number-3&quot;&gt;1.5&lt;/span&gt; 引人注意&lt;/h3&gt;
&lt;div class=&quot;outline-text-3&quot; id=&quot;text-1-5&quot;&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;How does that grab you? 你對此感興趣不？&lt;/li&gt;
&lt;li&gt;How does my idea grab you?&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgheadline6&quot; class=&quot;outline-3&quot;&gt;
&lt;h3 id=&quot;orgheadline6&quot;&gt;&lt;span class=&quot;section-number-3&quot;&gt;1.6&lt;/span&gt; grab-and-go&lt;/h3&gt;
&lt;div class=&quot;outline-text-3&quot; id=&quot;text-1-6&quot;&gt;
&lt;p&gt;
拿了就走的快餐，食物：
&lt;/p&gt;

&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;Raw vegetables and fruits are great grab-and-go snacks. 蔬菜和水果是很好的拿着就吃的點心。&lt;/li&gt;
&lt;li&gt;Lately I have been making a raw kale salad, which not only uses up some of the
greens I get, but also makes a great grab-and-go lunch.&lt;sup&gt;&lt;a id=&quot;fnr.7&quot; class=&quot;footref&quot; href=&quot;#fn.7&quot;&gt;7&lt;/a&gt;&lt;/sup&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;footnotes&quot;&gt;
&lt;h2 class=&quot;footnotes&quot;&gt;Footnotes: &lt;/h2&gt;
&lt;div id=&quot;text-footnotes&quot;&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.1&quot; class=&quot;footnum&quot; href=&quot;#fnr.1&quot;&gt;1&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;http://wiki.magicjudges.org/pool/images/c/c7/Travelguide_GP_Shanghai_2012.pdf&quot;&gt;http://wiki.magicjudges.org/pool/images/c/c7/Travelguide_GP_Shanghai_2012.pdf&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.2&quot; class=&quot;footnum&quot; href=&quot;#fnr.2&quot;&gt;2&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;http://newsfeed.time.com/2013/09/18/napping-on-the-subway-this-app-will-wake-you-up-before-you-miss-your-stop/&quot;&gt;http://newsfeed.time.com/2013/09/18/napping-on-the-subway-this-app-will-wake-you-up-before-you-miss-your-stop/&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.3&quot; class=&quot;footnum&quot; href=&quot;#fnr.3&quot;&gt;3&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;http://wane.com/2016/08/01/turkey-stolen-in-roadside-grab-and-go/&quot;&gt;http://wane.com/2016/08/01/turkey-stolen-in-roadside-grab-and-go/&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.4&quot; class=&quot;footnum&quot; href=&quot;#fnr.4&quot;&gt;4&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;http://www.nyoooz.com/lucknow/558663/fans-line-up-outside-store-to-grab-harry-potter-book&quot;&gt;http://www.nyoooz.com/lucknow/558663/fans-line-up-outside-store-to-grab-harry-potter-book&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.5&quot; class=&quot;footnum&quot; href=&quot;#fnr.5&quot;&gt;5&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;http://www.france24.com/en/20160801-turkey-us-meet-after-power-grab-attempt&quot;&gt;http://www.france24.com/en/20160801-turkey-us-meet-after-power-grab-attempt&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.6&quot; class=&quot;footnum&quot; href=&quot;#fnr.6&quot;&gt;6&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;http://espn.go.com/mlb/story/_/page/tradedeadline_upsidedowndeadline/how-cubs-indians-yankees-turned-deadline-upside-down&quot;&gt;http://espn.go.com/mlb/story/_/page/tradedeadline_upsidedowndeadline/how-cubs-indians-yankees-turned-deadline-upside-down&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.7&quot; class=&quot;footnum&quot; href=&quot;#fnr.7&quot;&gt;7&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;http://www.pressrepublican.com/opinion/columns/with-salads-try-more-than-just-classics/article_c69b68ea-d3b6-547e-9b00-f55b6558cf48.html&quot;&gt;http://www.pressrepublican.com/opinion/columns/with-salads-try-more-than-just-classics/article_c69b68ea-d3b6-547e-9b00-f55b6558cf48.html&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;


&lt;/div&gt;
&lt;/div&gt;
</content>
 </entry>
 
 <entry>
   <title>单词本：采石场</title>
   <link href="http://kimi.im/2016-07-25-english-quarry"/>
   <updated>2016-07-25T00:00:00+00:00</updated>
   <id>http://kimi.im/english-quarry</id>
   <content type="html">&lt;p&gt;
这几天米开朗基罗的大卫雕像成了网民们热议的热点。事情的原委是这样的，一个叫袁立的女演员发表了一则基督教鸡汤微博，大致是这样说的：米开朗基罗在厕所（后来删改为街道）里发现了一块被丢弃的石头，捡回去擦干净雕刻成了大卫王，所以要感激上帝的恩将乞丐变王子。于是引发了大批网民的抨击。The weibo post about David is severely mauled by
the netizens. （有没有发现，我在这里用上了昨天提到的 maul 这个单词，学习生词的乐趣之一就是可以不经意间发现它成为了思考的一个音符）。抨击她的原因大概是因为她忽视了一个重要的事实，那就是大卫雕像这块石头大概有5.5吨重，不是一般人可以轻易拿得动的。所以有的网民说她以为米开朗基罗是那只忍者神龟。袁立微博原文是这样的：
&lt;/p&gt;

&lt;a data-flickr-embed=&quot;true&quot;  href=&quot;https://www.flickr.com/photos/kimim-photo/28539233385/in/dateposted-public/&quot; title=&quot;david&quot;&gt;&lt;img src=&quot;https://c2.staticflickr.com/9/8575/28539233385_a18a7abdb8_z.jpg&quot; width=&quot;640&quot; height=&quot;589&quot; alt=&quot;david&quot;&gt;&lt;/a&gt;&lt;script async src=&quot;//embedr.flickr.com/assets/client-code.js&quot; charset=&quot;utf-8&quot;&gt;&lt;/script&gt;

&lt;p&gt;
其实这个事件很难说谁对谁错。
&lt;/p&gt;

&lt;p&gt;
袁立自己也解释了，她发这个微博的重点不是石头是怎么被老米搬走的，而是要有一颗感恩的心，感激如老米般的上帝把基督徒从厕所里又臭又硬的石头变成美男子。这么看来，这则微博有卖点，有配图，还有重点，实在是一则不可多得的鸡汤好文。袁立自己后来也发微博解释了，说她自己又不是什么专家学者，做不到事事精准，毫无误差。
&lt;/p&gt;

&lt;p&gt;
而网上游荡的网民们有的是时间，看到明星整出低级错误，那就一起看看热闹消遣一下，其实也没什么错。明星混娱乐圈的本来就该有些娱乐精神，坦然接受自己的无知，与民同乐一把也就完了。每天热点变化无穷，没有人会关心2016年的7月22日袁立发过一则无知微博的。当然了，玩笑不宜开得太粗俗。
&lt;/p&gt;

&lt;p&gt;
话说，这块石头到底是怎么来的？
&lt;/p&gt;

&lt;p&gt;
很巧，今天早上看到一篇新闻就讲是 Michelangelo&apos;s moutain&lt;sup&gt;&lt;a id=&quot;fnr.1&quot; class=&quot;footref&quot; href=&quot;#fn.1&quot;&gt;1&lt;/a&gt;&lt;/sup&gt; 即将被挖空（Demolish），于是被科普了一把。从罗马国王，老米到墨索里尼（Mussolini），他们需要上佳的大理石的时候，都会到多斯加尼（Tuscany）的卡拉拉（Carrara）去物色。卡拉拉的采石场（Quarry）有最洁白坚硬的大理石。已经被挖掘了2000多年，至今每年有百万吨大理石被运往中国和迪拜土豪家中建造浴室。在卡拉拉有一块著名的采石场叫 Michelangelo
Cave，老米经常前来挑选最白的大理石。所以呢，大卫像所用的大理石大概就是来自这个采石场。只不过有个传闻说雕刻大卫的那块石头有些残缺，一般雕刻家不敢拿来用，而老米经过考量设计之后，大胆的采用了，成就了一段伯乐相马的佳话。
&lt;/p&gt;

&lt;p&gt;
现在，进入本文的正题，一起来学一学 quarry 这个单词吧。
&lt;/p&gt;

&lt;div id=&quot;outline-container-orgheadline1&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgheadline1&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;1&lt;/span&gt; quarry&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-1&quot;&gt;
&lt;p&gt;
这个单词有大概7层意思：
&lt;/p&gt;
&lt;ol class=&quot;org-ol&quot;&gt;
&lt;li&gt;A hunted animal or bird; prey. 猎物&lt;/li&gt;
&lt;li&gt;person or thing that is being pursued eagerly. 追逐的对象&lt;/li&gt;
&lt;li&gt;place where stone is extracted from the ground. 采石场，石矿&lt;/li&gt;
&lt;li&gt;a rich or productive source. 比喻为某样东西的采石场&lt;/li&gt;
&lt;li&gt;to obtain stone from a quarry. 采石&lt;/li&gt;
&lt;li&gt;search with great effort. 引申为努力钻研&lt;/li&gt;
&lt;li&gt;a square or diamond shape. 方形，钻石形&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;
我们用思维导图分分类大概就是这个样子：
&lt;/p&gt;

&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
&lt;!DOCTYPE svg PUBLIC &quot;-//W3C//DTD SVG 1.1//EN&quot; &quot;http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd&quot;&gt;
&lt;svg version=&quot;1.2&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; xmlns:xlink=&quot;http://www.w3.org/1999/xlink&quot; x=&quot;0&quot; y=&quot;0&quot; width=&quot;500&quot; viewBox=&quot;0 0 421 271&quot;&gt;
&lt;style type=&quot;text/css&quot;&gt;&lt;![CDATA[
text { font:12px Dialog; }
]]&gt;&lt;/style&gt;
&lt;rect x=&quot;-485&quot; y=&quot;-485&quot; width=&quot;1391&quot; height=&quot;1241&quot; style=&quot;fill:rgb(255,255,255);stroke:none&quot; /&gt;
&lt;clipPath id=&quot;clip1&quot;&gt;&lt;path d=&quot;M15,15 L406,15 L406,256 L15,256 Z M141,138 C141,120.326889 113.0177917,106 78.5,106 C43.9822044,106 16,120.326889 16,138 C16,155.673111 43.9822044,170 78.5,170 C113.0177917,170 141,155.673111 141,138 Z M141,138&quot; /&gt;&lt;/clipPath&gt;
&lt;path d=&quot;M101.8830872,107.2145309 C111.0201797,69.7381744 124.7258148,51 143,51&quot; style=&quot;fill:none;stroke:rgb(128,128,128)&quot; clip-path=&quot;url(#clip1)&quot; /&gt;
&lt;clipPath id=&quot;clip2&quot;&gt;&lt;path d=&quot;M15,15 L406,15 L406,256 L15,256 Z M141,138 C141,120.326889 113.0177917,106 78.5,106 C43.9822044,106 16,120.326889 16,138 C16,155.673111 43.9822044,170 78.5,170 C113.0177917,170 141,155.673111 141,138 Z M141,138&quot; /&gt;&lt;/clipPath&gt;
&lt;path d=&quot;M141.6590118,145.3217468 C155.2903442,149.7739105 175.7373352,152 203,152&quot; style=&quot;fill:none;stroke:rgb(128,128,128)&quot; clip-path=&quot;url(#clip2)&quot; /&gt;
&lt;clipPath id=&quot;clip3&quot;&gt;&lt;path d=&quot;M15,15 L406,15 L406,256 L15,256 Z M141,138 C141,120.326889 113.0177917,106 78.5,106 C43.9822044,106 16,120.326889 16,138 C16,155.673111 43.9822044,170 78.5,170 C113.0177917,170 141,155.673111 141,138 Z M141,138&quot; /&gt;&lt;/clipPath&gt;
&lt;path d=&quot;M96.6867218,170.6953583 C106.9785614,226.8984528 122.4163208,255 143,255&quot; style=&quot;fill:none;stroke:rgb(128,128,128)&quot; clip-path=&quot;url(#clip3)&quot; /&gt;
&lt;clipPath id=&quot;clip4&quot;&gt;&lt;path d=&quot;M14,104 L144,104 L144,173 L14,173 L14,104 Z&quot; /&gt;&lt;/clipPath&gt;
&lt;path d=&quot;M141,138 C141,120.326889 113.0177917,106 78.5,106 C43.9822044,106 16,120.326889 16,138 C16,155.673111 43.9822044,170 78.5,170 C113.0177917,170 141,155.673111 141,138 Z M141,138&quot; style=&quot;fill:none;stroke:rgb(128,128,128)&quot; clip-path=&quot;url(#clip4)&quot; /&gt;
&lt;clipPath id=&quot;clip5&quot;&gt;&lt;path d=&quot;M47,124 L111,124 L111,153 L47,153 L47,124 Z&quot; /&gt;&lt;/clipPath&gt;
&lt;path d=&quot;M50.809082,136.746582 C50.809082,135.246582 51.1342735,134.0366211 51.784668,133.1166992 C52.4350624,132.1967773 53.3491135,131.7368164 54.5268555,131.7368164 C55.0424805,131.7368164 55.4995117,131.8510742 55.8979492,132.0795898 C56.2963867,132.3081055 56.6391602,132.6333008 56.9262695,133.0551758 L57.128418,131.9125977 L59.3520508,131.9125977 L59.3520508,143.2680664 L60.5913086,143.5317383 L60.5913086,145.0786133 L55.5463867,145.0786133 L55.5463867,143.5317383 L56.7856445,143.2680664 L56.7856445,140.543457 C56.5043945,140.8950195 56.1748047,141.1601563 55.796875,141.3388672 C55.4189453,141.5175781 54.9897461,141.6069336 54.5092773,141.6069336 C53.3373947,141.6069336 52.4277382,141.1791992 51.7802734,140.3237305 C51.1328087,139.4682617 50.809082,138.3374023 50.809082,136.9311523 Z M53.3754883,136.9311523 C53.3754883,137.769043 53.5146484,138.4296875 53.7929688,138.9130859 C54.0712891,139.3964844 54.5268517,139.6381836 55.159668,139.6381836 C55.534668,139.6381836 55.8569336,139.5693359 56.1264648,139.4316406 C56.3959961,139.2939453 56.6157227,139.090332 56.7856445,138.8208008 L56.7856445,134.5932617 C56.6157227,134.3120117 56.3974609,134.0952148 56.1308594,133.9428711 C55.8642578,133.7905273 55.5463867,133.7143555 55.1772461,133.7143555 C54.5502892,133.7143555 54.0932617,133.9941406 53.8061523,134.5537109 C53.519043,135.1132813 53.3754883,135.8442383 53.3754883,136.746582 Z M67.5698242,140.2182617 C67.2651367,140.6635742 66.8886719,141.0063477 66.4404297,141.246582 C65.9921875,141.4868164 65.480957,141.6069336 64.9067383,141.6069336 C63.9047813,141.6069336 63.1196327,141.2861328 62.5512695,140.6445313 C61.9829102,140.0029297 61.6987305,139.0053711 61.6987305,137.6518555 L61.6987305,133.7231445 L60.652832,133.4594727 L60.652832,131.9125977 L61.6987305,131.9125977 L64.2651367,131.9125977 L64.2651367,137.6694336 C64.2651367,138.3608398 64.3808594,138.8574219 64.6123047,139.1591797 C64.84375,139.4609375 65.1879883,139.6118164 65.6450195,139.6118164 C66.0493164,139.6118164 66.3994141,139.5458984 66.6953125,139.4140625 C66.9912109,139.2822266 67.2329102,139.0932617 67.4204102,138.847168 L67.4204102,133.7231445 L66.2954102,133.4594727 L66.2954102,131.9125977 L67.4204102,131.9125977 L69.9868164,131.9125977 L69.9868164,139.6206055 L71.1381836,139.8842773 L71.1381836,141.4223633 L67.7368164,141.4223633 Z M78.2045898,141.4223633 C78.1342773,141.2641602 78.0727539,141.1015625 78.0200195,140.9345703 C77.9672852,140.7675781 77.9262695,140.5991211 77.8969727,140.4291992 C77.5922852,140.7807617 77.2216797,141.0649414 76.7851563,141.2817383 C76.3486328,141.4985352 75.8491211,141.6069336 75.2866211,141.6069336 C74.3549728,141.6069336 73.6152344,141.3535156 73.0673828,140.8466797 C72.5195313,140.3398438 72.2456055,139.6499023 72.2456055,138.7768555 C72.2456055,137.8862305 72.6030273,137.1977539 73.3178711,136.7114258 C74.0327148,136.2250977 75.0815353,135.9819336 76.4643555,135.9819336 L77.7739258,135.9819336 L77.7739258,135.050293 C77.7739258,134.5932617 77.6420898,134.2387695 77.378418,133.9868164 C77.1147461,133.7348633 76.7250977,133.6088867 76.2094727,133.6088867 C75.9165039,133.6088867 75.6557617,133.6425781 75.4272461,133.7099609 C75.1987305,133.7773438 75.0141602,133.8579102 74.8735352,133.9516602 L74.706543,134.9711914 L72.7729492,134.9711914 L72.7817383,132.8618164 C73.2504883,132.5454102 73.7880859,132.2788086 74.3945313,132.0620117 C75.0009766,131.8452148 75.6616211,131.7368164 76.3764648,131.7368164 C77.5542068,131.7368164 78.5107422,132.0253906 79.2460938,132.6025391 C79.9814453,133.1796875 80.3491211,134.0014648 80.3491211,135.0678711 L80.3491211,138.996582 C80.3491211,139.1430664 80.3505859,139.2807617 80.3535156,139.409668 C80.3564453,139.5385742 80.3666992,139.6616211 80.3842773,139.7788086 L81.1665039,139.8842773 L81.1665039,141.4223633 Z M75.980957,139.7084961 C76.3676758,139.7084961 76.7192383,139.625 77.0356445,139.4580078 C77.3520508,139.2910156 77.5981445,139.081543 77.7739258,138.8295898 L77.7739258,137.3793945 L76.4643555,137.3793945 C75.9194336,137.3793945 75.5063477,137.5068359 75.2250977,137.7617188 C74.9438477,138.0166016 74.8032227,138.3227539 74.8032227,138.6801758 C74.8032227,139.0024414 74.9072266,139.2543945 75.1152344,139.4360352 C75.3232422,139.6176758 75.6118164,139.7084961 75.980957,139.7084961 Z M82.2299805,139.8842773 L83.4604492,139.6206055 L83.4604492,133.7231445 L82.0981445,133.4594727 L82.0981445,131.9125977 L85.8510742,131.9125977 L85.965332,133.3012695 C86.1879883,132.809082 86.4750977,132.425293 86.8266602,132.1499023 C87.1782227,131.8745117 87.5854492,131.7368164 88.0483398,131.7368164 C88.1831055,131.7368164 88.3251953,131.7470703 88.4746094,131.7675781 C88.6240234,131.7880859 88.7485352,131.8129883 88.8481445,131.8422852 L88.5756836,134.1801758 L87.5209961,134.1538086 C87.1459961,134.1538086 86.8354492,134.2270508 86.5893555,134.3735352 C86.3432617,134.5200195 86.1557617,134.7280273 86.0268555,134.9975586 L86.0268555,139.6206055 L87.2573242,139.8842773 L87.2573242,141.4223633 L82.2299805,141.4223633 Z M89.8061523,139.8842773 L91.0366211,139.6206055 L91.0366211,133.7231445 L89.6743164,133.4594727 L89.6743164,131.9125977 L93.4272461,131.9125977 L93.5415039,133.3012695 C93.7641602,132.809082 94.0512695,132.425293 94.402832,132.1499023 C94.7543945,131.8745117 95.1616211,131.7368164 95.6245117,131.7368164 C95.7592773,131.7368164 95.9013672,131.7470703 96.0507813,131.7675781 C96.2001953,131.7880859 96.324707,131.8129883 96.4243164,131.8422852 L96.1518555,134.1801758 L95.097168,134.1538086 C94.722168,134.1538086 94.4116211,134.2270508 94.1655273,134.3735352 C93.9194336,134.5200195 93.7319336,134.7280273 93.6030273,134.9975586 L93.6030273,139.6206055 L94.8334961,139.8842773 L94.8334961,141.4223633 L89.8061523,141.4223633 Z M107.190918,133.4594727 L106.3032227,133.5913086 L102.8051758,142.8461914 C102.5297852,143.5317383 102.1621094,144.105957 101.7021484,144.5688477 C101.2421875,145.0317383 100.5493164,145.2631836 99.6235352,145.2631836 C99.4067383,145.2631836 99.203125,145.2456055 99.0126953,145.2104492 C98.8222656,145.175293 98.5981445,145.1254883 98.340332,145.0610352 L98.6391602,143.1889648 C98.7211914,143.2006836 98.8061523,143.2124023 98.894043,143.2241211 C98.9819336,143.2358398 99.0581055,143.2416992 99.1225586,143.2416992 C99.550293,143.2416992 99.878418,143.1376953 100.1069336,142.9296875 C100.3354492,142.7216797 100.5112305,142.4624023 100.6342773,142.1518555 L100.9243164,141.4311523 L97.909668,133.6000977 L97.0219727,133.4594727 L97.0219727,131.9125977 L101.6801758,131.9125977 L101.6801758,133.4594727 L100.6166992,133.6352539 L101.9174805,137.4321289 L102.0493164,138.1176758 L102.1020508,138.1264648 L103.6049805,133.6352539 L102.5327148,133.4594727 L102.5327148,131.9125977 L107.190918,131.9125977 Z M107.4458008,141.4223633&quot; style=&quot;fill:rgb(76,76,76);stroke:none&quot; clip-path=&quot;url(#clip5)&quot; /&gt;
&lt;clipPath id=&quot;clip6&quot;&gt;&lt;path d=&quot;M142,15 L303,15 L303,64 L142,64 Z M143,16 L143,50 L196,50 L196,16 Z M143,16&quot; /&gt;&lt;/clipPath&gt;
&lt;path d=&quot;M209,51 L209,43 C209,40.7919998 210.7920074,39 213,39 L218,39&quot; style=&quot;fill:none;stroke:rgb(128,128,128)&quot; clip-path=&quot;url(#clip6)&quot; /&gt;
&lt;clipPath id=&quot;clip7&quot;&gt;&lt;path d=&quot;M142,15 L303,15 L303,64 L142,64 Z M143,16 L143,50 L196,50 L196,16 Z M143,16&quot; /&gt;&lt;/clipPath&gt;
&lt;path d=&quot;M209,51 L209,59 C209,61.2080002 210.7920074,63 213,63 L218,63&quot; style=&quot;fill:none;stroke:rgb(128,128,128)&quot; clip-path=&quot;url(#clip7)&quot; /&gt;
&lt;clipPath id=&quot;clip8&quot;&gt;&lt;path d=&quot;M141,14 L304,14 L304,65 L141,65 L141,14 Z&quot; /&gt;&lt;/clipPath&gt;
&lt;path d=&quot;M196,51 L209,51&quot; style=&quot;fill:none;stroke:rgb(128,128,128)&quot; clip-path=&quot;url(#clip8)&quot; /&gt;
&lt;clipPath id=&quot;clip9&quot;&gt;&lt;path d=&quot;M141,14 L199,14 L199,53 L141,53 L141,14 Z&quot; /&gt;&lt;/clipPath&gt;
&lt;path d=&quot;M143,51 L196,51 Z M143,51&quot; style=&quot;fill:none;stroke:rgb(128,128,128)&quot; clip-path=&quot;url(#clip9)&quot; /&gt;
&lt;clipPath id=&quot;clip10&quot;&gt;&lt;path d=&quot;M154,22 L186,22 L186,45 L154,45 L154,22 Z&quot; /&gt;&lt;/clipPath&gt;
&lt;path d=&quot;M161.9729919,29.0410004 L161.9729919,29.8730011 L163.4810028,29.8730011 L163.4810028,31.5110016 L161.6740112,31.5110016 L161.6740112,32.3949966 L169.2139893,32.3949966 L169.2139893,31.5110016 L167.3809967,31.5110016 L167.3809967,29.8730011 L168.9410095,29.8730011 L168.9410095,29.0410004 L167.3809967,29.0410004 L167.3809967,27.6110001 L166.4710083,27.6110001 L166.4710083,29.0410004 L164.3779907,29.0410004 L164.3779907,27.6110001 L163.4810028,27.6110001 L163.4810028,29.0410004 Z M164.3779907,31.5110016 L164.3779907,29.8730011 L166.4710083,29.8730011 L166.4710083,31.5110016 Z M168.3820038,33.3830032 L162.5449982,33.3830032 L162.5449982,39.3759995 L163.4550018,39.3759995 L163.4550018,38.7779999 L167.4720001,38.7779999 L167.4720001,39.3889999 L168.3820038,39.3889999 Z M163.4550018,37.9199982 L163.4550018,36.5029984 L167.4720001,36.5029984 L167.4720001,37.9199982 Z M163.4550018,35.6709976 L163.4550018,34.2279968 L167.4720001,34.2279968 L167.4720001,35.6709976 Z M161.0370026,27.7279968 C160.6470032,28.3779984 160.2310028,28.9499969 159.7630005,29.4440002 C159.3990021,28.8980026 158.9570007,28.3649979 158.4369965,27.8450012 L157.7089996,28.4169998 C158.2680054,28.9110031 158.7359924,29.4700012 159.1130066,30.0810013 C158.5800018,30.5749969 157.9949951,30.9779968 157.3450012,31.3030014 L157.8519897,32.1090012 C158.4889984,31.7190018 159.0480042,31.3160019 159.5419922,30.913002 C159.5809937,30.9909973 159.6199951,31.0950012 159.6719971,31.211998 C159.802002,31.5759964 159.9060059,31.9919968 159.9840088,32.4729996 C159.3470001,33.5780029 158.4629974,34.5270004 157.3190002,35.3069992 L157.8519897,36.086998 C158.7229919,35.4499969 159.4769897,34.6569977 160.1269989,33.7210007 C160.1529999,34.1760025 160.1790009,34.6699982 160.1920013,35.2160034 C160.1920013,36.9059982 160.0230103,37.9199982 159.7109985,38.2580032 C159.5679932,38.4140015 159.2819977,38.4919968 158.8399963,38.4919968 C158.5279999,38.4919968 158.2030029,38.4660034 157.8649902,38.427002 L158.125,39.2979965 C158.3590088,39.2979965 158.67099,39.310997 159.0480042,39.310997 C159.5939941,39.310997 160.0230103,39.1940002 160.321991,38.9860001 C160.82901,38.5569992 161.0889893,37.3219986 161.0889893,35.2679977 C161.0630035,33.3440018 160.855011,31.8619995 160.4779968,30.8219986 C160.3999939,30.6399994 160.321991,30.4580002 160.2310028,30.276001 C160.7640076,29.7300034 161.2969971,29.0410004 161.8170013,28.2089996 Z M176.2340088,27.5329971 C175.8699951,29.4830017 175.2720032,30.9779968 174.4400024,32.0179977 L175.1289978,32.6029968 C175.5709991,32.0569992 175.9609985,31.3809967 176.3119965,30.5490036 L177.2089996,30.5490036 C176.7149963,33.0449982 175.8049927,34.8779984 174.4660034,36.0220032 L175.0769958,36.723999 C176.5329895,35.4369965 177.5209961,33.3830032 178.0410004,30.5490036 L179.0549927,30.5490036 C178.8079987,32.5250015 178.4309998,34.1240005 177.9240112,35.3330002 C177.3779907,36.5289993 176.571991,37.6210022 175.480011,38.6090012 L176.052002,39.3499985 C177.2350006,38.2709961 178.1190033,37.0490036 178.7170105,35.6969986 C179.223999,34.435997 179.6139984,32.7200012 179.8999939,30.5490036 L180.7839966,30.5490036 C180.7579956,34.3190002 180.7059937,36.5810013 180.6149902,37.3089981 C180.4980011,38.1409988 180.0429993,38.5569992 179.25,38.5569992 C178.9509888,38.5569992 178.6000061,38.5309982 178.1839905,38.5049973 L178.4049988,39.3499985 C178.8730011,39.3759995 179.197998,39.3889999 179.3800049,39.3889999 C180.6409912,39.3889999 181.3430023,38.8170013 181.4859924,37.6729965 C181.6159973,36.6589966 181.6809998,33.9810028 181.6809998,29.6389999 L176.6369934,29.6389999 C176.8190002,29.0670013 176.9750061,28.4430008 177.1180115,27.7669983 Z M171.5279999,31.1729965 L172.5939941,31.1729965 L172.5939941,34.6829987 C171.8659973,34.9690018 171.1119995,35.2030029 170.3320007,35.3850021 L170.553009,36.2949982 C171.2550049,36.0739975 171.9309998,35.8270035 172.5939941,35.5670013 L172.5939941,39.4670029 L173.5039978,39.4670029 L173.5039978,35.177002 C173.855011,35.0080032 174.2059937,34.8389969 174.5440063,34.6569977 L174.5440063,33.7730026 C174.2059937,33.9550018 173.8680115,34.1240005 173.5039978,34.2929993 L173.5039978,31.1729965 L174.5960083,31.1729965 L174.5960083,30.2630005 L173.5039978,30.2630005 L173.5039978,27.5589981 L172.5939941,27.5589981 L172.5939941,30.2630005 L171.6839905,30.2630005 C171.7619934,29.7040024 171.8139954,29.1319962 171.8399963,28.5599976 L171.0209961,28.4950027 C170.9559937,30.0159988 170.6829987,31.4589996 170.1889954,32.836998 L171.0079956,33.0709991 C171.2160034,32.4599991 171.3850098,31.822998 171.5279999,31.1729965 Z M182.7080078,38.1669998&quot; style=&quot;fill:rgb(48,48,48);stroke:none&quot; clip-path=&quot;url(#clip10)&quot; /&gt;
&lt;clipPath id=&quot;clip11&quot;&gt;&lt;path d=&quot;M197,27 L210,27 L210,40 L197,40 L197,27 Z&quot; /&gt;&lt;/clipPath&gt;
&lt;path d=&quot;M207.5,33 C207.5,30.5147171 205.4852905,28.5 203,28.5 C200.5147095,28.5 198.5,30.5147171 198.5,33 C198.5,35.4852829 200.5147095,37.5 203,37.5 C205.4852905,37.5 207.5,35.4852829 207.5,33 Z M207.5,33&quot; style=&quot;fill:rgb(250,250,250);stroke:none&quot; clip-path=&quot;url(#clip11)&quot; /&gt;
&lt;clipPath id=&quot;clip12&quot;&gt;&lt;path d=&quot;M197,27 L210,27 L210,40 L197,40 L197,27 Z&quot; /&gt;&lt;/clipPath&gt;
&lt;path d=&quot;M207.5,33 C207.5,30.5147171 205.4852905,28.5 203,28.5 C200.5147095,28.5 198.5,30.5147171 198.5,33 C198.5,35.4852829 200.5147095,37.5 203,37.5 C205.4852905,37.5 207.5,35.4852829 207.5,33 Z M207.5,33&quot; style=&quot;fill:none;stroke:rgb(128,128,128)&quot; clip-path=&quot;url(#clip12)&quot; /&gt;
&lt;clipPath id=&quot;clip13&quot;&gt;&lt;path d=&quot;M197,27 L210,27 L210,40 L197,40 L197,27 Z&quot; /&gt;&lt;/clipPath&gt;
&lt;path d=&quot;M201,33 L205,33&quot; style=&quot;fill:none;stroke:rgb(150,160,200)&quot; clip-path=&quot;url(#clip13)&quot; /&gt;
&lt;clipPath id=&quot;clip14&quot;&gt;&lt;path d=&quot;M216,16 L274,16 L274,41 L216,41 L216,16 Z&quot; /&gt;&lt;/clipPath&gt;
&lt;path d=&quot;M218,39 L271,39 Z M218,39&quot; style=&quot;fill:none;stroke:rgb(128,128,128)&quot; clip-path=&quot;url(#clip14)&quot; /&gt;
&lt;clipPath id=&quot;clip15&quot;&gt;&lt;path d=&quot;M238,19 L264,19 L264,38 L238,38 L238,19 Z&quot; /&gt;&lt;/clipPath&gt;
&lt;path d=&quot;M244.7100067,25.0699997 L244.7100067,25.7099991 L245.8700104,25.7099991 L245.8700104,26.9699936 L244.480011,26.9699936 L244.480011,27.6499939 L250.2799988,27.6499939 L250.2799988,26.9699936 L248.8700104,26.9699936 L248.8700104,25.7099991 L250.0700073,25.7099991 L250.0700073,25.0699997 L248.8700104,25.0699997 L248.8700104,23.9699936 L248.1699982,23.9699936 L248.1699982,25.0699997 L246.5599976,25.0699997 L246.5599976,23.9699936 L245.8700104,23.9699936 L245.8700104,25.0699997 Z M246.5599976,26.9699936 L246.5599976,25.7099991 L248.1699982,25.7099991 L248.1699982,26.9699936 Z M249.6399994,28.409996 L245.1500092,28.409996 L245.1500092,33.0199966 L245.8500061,33.0199966 L245.8500061,32.5599976 L248.9400024,32.5599976 L248.9400024,33.0299988 L249.6399994,33.0299988 Z M245.8500061,31.8999939 L245.8500061,30.8099976 L248.9400024,30.8099976 L248.9400024,31.8999939 Z M245.8500061,30.1699982 L245.8500061,29.0599976 L248.9400024,29.0599976 L248.9400024,30.1699982 Z M243.9900055,24.0599976 C243.6900024,24.5599976 243.3700104,25 243.0100098,25.3799973 C242.730011,24.9599991 242.3899994,24.5499954 241.9900055,24.1499939 L241.4300079,24.5899963 C241.8600006,24.9699936 242.2200012,25.3999939 242.5100098,25.8699951 C242.1000061,26.25 241.6500092,26.5599976 241.1500092,26.8099976 L241.5400085,27.4299927 C242.0299988,27.1299973 242.4600067,26.8199997 242.8399963,26.5099945 C242.8700104,26.5699997 242.9000092,26.6499939 242.9400024,26.7399979 C243.0400085,27.0199966 243.1200104,27.3399963 243.1800079,27.7099991 C242.6900024,28.5599976 242.0100098,29.2899933 241.1300049,29.8899994 L241.5400085,30.4899979 C242.2100067,30 242.7900085,29.3899994 243.2900085,28.6699982 C243.3099976,29.0199966 243.3300018,29.3999939 243.3399963,29.8199997 C243.3399963,31.1199951 243.2100067,31.8999939 242.9700012,32.159996 C242.8600006,32.2799988 242.6399994,32.3399963 242.3000031,32.3399963 C242.0599976,32.3399963 241.8099976,32.3199997 241.5500031,32.2899933 L241.75,32.9599991 C241.9300079,32.9599991 242.1699982,32.9699936 242.4600067,32.9699936 C242.8800049,32.9699936 243.2100067,32.8799973 243.4400024,32.7199936 C243.8300018,32.3899994 244.0299988,31.4399948 244.0299988,29.859993 C244.0100098,28.3799973 243.8500061,27.2399979 243.5599976,26.4399948 C243.5,26.2999954 243.4400024,26.159996 243.3700104,26.0199966 C243.7799988,25.5999985 244.1900024,25.0699997 244.5899963,24.4299927 Z M255.6800079,23.909996 C255.4000092,25.409996 254.9400024,26.5599976 254.3000031,27.359993 L254.8300018,27.8099976 C255.1699982,27.3899994 255.4700012,26.8699951 255.7400055,26.2299957 L256.4299927,26.2299957 C256.0499878,28.1499939 255.3500061,29.5599976 254.3200073,30.4399948 L254.7900085,30.9799957 C255.9100037,29.9899979 256.6699829,28.409996 257.0700073,26.2299957 L257.8500061,26.2299957 C257.6600037,27.75 257.3699951,28.9799957 256.980011,29.909996 C256.5599976,30.8299942 255.9400024,31.6699982 255.1000061,32.4299927 L255.5400085,33 C256.4500122,32.1699982 257.1300049,31.2299957 257.5899963,30.1899948 C257.980011,29.2199936 258.2799988,27.8999939 258.5,26.2299957 L259.1799927,26.2299957 C259.1600037,29.1299973 259.1199951,30.8699951 259.0499878,31.4299927 C258.960022,32.0699997 258.6099854,32.3899994 258,32.3899994 C257.7700195,32.3899994 257.5,32.3699951 257.1799927,32.3499985 L257.3500061,33 C257.710022,33.0199966 257.960022,33.0299988 258.1000061,33.0299988 C259.0700073,33.0299988 259.6099854,32.5899963 259.7200012,31.7099991 C259.8200073,30.9299927 259.8699951,28.8699951 259.8699951,25.5299988 L255.9900055,25.5299988 C256.1300049,25.0899963 256.25,24.609993 256.3599854,24.0899963 Z M252.0599976,26.7099991 L252.8800049,26.7099991 L252.8800049,29.409996 C252.3200073,29.6299973 251.7400055,29.8099976 251.1399994,29.9499969 L251.3099976,30.6499939 C251.8500061,30.4799957 252.3700104,30.2899933 252.8800049,30.0899963 L252.8800049,33.0899963 L253.5800018,33.0899963 L253.5800018,29.7899933 C253.8500061,29.659996 254.1200104,29.5299988 254.3800049,29.3899994 L254.3800049,28.7099991 C254.1200104,28.8499985 253.8600006,28.9799957 253.5800018,29.109993 L253.5800018,26.7099991 L254.4199982,26.7099991 L254.4199982,26.0099945 L253.5800018,26.0099945 L253.5800018,23.9299927 L252.8800049,23.9299927 L252.8800049,26.0099945 L252.1800079,26.0099945 C252.2400055,25.5799942 252.2799988,25.1399994 252.3000031,24.6999969 L251.6699982,24.6499939 C251.6200104,25.8199997 251.4100037,26.9299927 251.0299988,27.9899979 L251.6600037,28.1699982 C251.8200073,27.6999969 251.9499969,27.2099991 252.0599976,26.7099991 Z M260.6600037,32.0899963&quot; style=&quot;fill:rgb(0,0,0);stroke:none&quot; clip-path=&quot;url(#clip15)&quot; /&gt;
&lt;clipPath id=&quot;clip16&quot;&gt;&lt;path d=&quot;M226,22 L238,22 L238,34 L226,34 L226,22 Z&quot; /&gt;&lt;/clipPath&gt;
&lt;path d=&quot;M230,23.0267334 C228.3431396,23.0267334 227,24.3698788 227,26.0267334 L227,36.0267334 C227,37.6835861 228.3431396,39.0267334 230,39.0267334 L240,39.0267334 C241.6568604,39.0267334 243,37.6835861 243,36.0267334 L243,26.0267334 C243,24.3698788 241.6568604,23.0267334 240,23.0267334 Z M230,23.0267334&quot; style=&quot;fill:rgb(238,67,47);stroke:none&quot; clip-path=&quot;url(#clip16)&quot; /&gt;
&lt;clipPath id=&quot;clip17&quot;&gt;&lt;path d=&quot;M226,22 L238,22 L238,34 L226,34 L226,22 Z&quot; /&gt;&lt;/clipPath&gt;
&lt;path d=&quot;M230,23.0267334 C228.3431396,23.0267334 227,24.3698788 227,26.0267334 L227,36.0267334 C227,37.6835861 228.3431396,39.0267334 230,39.0267334 L240,39.0267334 C241.6568604,39.0267334 243,37.6835861 243,36.0267334 L243,26.0267334 C243,24.3698788 241.6568604,23.0267334 240,23.0267334 Z M230,23.0267334&quot; style=&quot;fill:rgb(239,83,80);stroke:none&quot; clip-path=&quot;url(#clip17)&quot; /&gt;
&lt;clipPath id=&quot;clip18&quot;&gt;&lt;path d=&quot;M226,22 L238,22 L238,34 L226,34 L226,22 Z&quot; /&gt;&lt;/clipPath&gt;
&lt;path d=&quot;M232.4276276,29.3406372 L232.4276276,28.2039185 C232.9549866,28.180481 233.3241119,28.1453247 233.5350494,28.0984497 C233.8710022,28.024231 234.1444244,27.8757935 234.3553619,27.6531372 C234.4998932,27.5007935 234.6092682,27.2976704 234.6834869,27.0437622 C234.7264557,26.8914185 234.7479401,26.7781372 234.7479401,26.7039185 L236.1366119,26.7039185 L236.1366119,35.2000122 L234.4256744,35.2000122 L234.4256744,29.3406372 L232.4276276,29.3406372 Z M232.4276276,29.3406372&quot; style=&quot;fill:rgb(255,255,255);stroke:none&quot; clip-path=&quot;url(#clip18)&quot; /&gt;
&lt;clipPath id=&quot;clip19&quot;&gt;&lt;path d=&quot;M216,40 L304,40 L304,65 L216,65 L216,40 Z&quot; /&gt;&lt;/clipPath&gt;
&lt;path d=&quot;M218,63 L301,63 Z M218,63&quot; style=&quot;fill:none;stroke:rgb(128,128,128)&quot; clip-path=&quot;url(#clip19)&quot; /&gt;
&lt;clipPath id=&quot;clip20&quot;&gt;&lt;path d=&quot;M238,43 L294,43 L294,62 L238,62 L238,43 Z&quot; /&gt;&lt;/clipPath&gt;
&lt;path d=&quot;M241.6399994,48.0849991 L241.1399994,48.5550003 C241.8699951,49.125 242.4400024,49.6549988 242.8600006,50.1450043 L243.3699951,49.6350021 C242.8999939,49.1149979 242.3199921,48.6050034 241.6399994,48.0849991 Z M247.5299988,56.9150009 L249.8000031,56.9150009 L249.9700012,56.1949997 C249.7099915,56.215004 249.3399963,56.2249985 248.8600006,56.2350006 C248.3699951,56.2450027 247.8899994,56.2550049 247.4299927,56.2550049 C246.6399994,56.2550049 245.9799957,56.2450027 245.4400024,56.2350006 C244.8399963,56.215004 244.3899994,56.1350021 244.0699921,55.9950027 C243.7899933,55.8649979 243.5200043,55.6549988 243.2799988,55.3649979 C243.1900024,55.2649994 243.1100006,55.1949997 243.0299988,55.1350021 L243.0299988,51.3950043 L240.9400024,51.3950043 L240.9400024,52.0550003 L242.3600006,52.0550003 L242.3600006,55.0950012 C241.9499969,55.2750015 241.4799957,55.7850037 240.9499969,56.625 L241.4900055,57.1149979 C242.0399933,56.1949997 242.4400024,55.7350006 242.6799927,55.7350006 C242.8000031,55.7350006 242.9400024,55.8150024 243.0800018,55.9850006 C243.3800049,56.3450012 243.7400055,56.5950012 244.1399994,56.715004 C244.5500031,56.8250046 245.0800018,56.8850021 245.7299957,56.8950043 C246.3800049,56.9049988 246.9799957,56.9150009 247.5299988,56.9150009 Z M246.2099915,47.9049988 C246.1499939,48.2949982 246.0699921,48.6750031 245.9499969,49.0449982 L244.4100037,49.0449982 L244.4100037,55.3450012 L249.3000031,55.3450012 L249.3000031,52.6050034 L245.0999908,52.6050034 L245.0999908,51.6350021 L248.9900055,51.6350021 L248.9900055,49.0449982 L246.6600037,49.0449982 C246.7799988,48.7249985 246.8699951,48.3850021 246.9400024,48.0149994 Z M245.0999908,53.2050018 L248.5999908,53.2050018 L248.5999908,54.6750031 L245.0999908,54.6750031 Z M245.0999908,51.0350037 L245.0999908,49.6949997 L248.2899933,49.6949997 L248.2899933,51.0350037 Z M256.9100037,52.3250046 C256.0200195,53.1450043 254.9400024,53.7850037 253.6699982,54.2350006 L254.0699921,54.8150024 C255.1600037,54.3950043 256.1300049,53.8050003 256.9899902,53.0350037 C257,53.2249985 257.0100098,53.4349976 257.0100098,53.6650009 C256.9799805,54.2949982 256.8999939,54.6650009 256.7600098,54.7850037 C256.6400146,54.875 256.4100037,54.9250031 256.0899963,54.9250031 L255.3099976,54.9250031 L255.5200043,55.5750046 L255.9799957,55.5750046 C256.6400146,55.5650024 257.0899963,55.465004 257.3300171,55.2850037 C257.5499878,55.1050034 257.6600037,54.5650024 257.6799927,53.6650009 C257.6699829,53.3450012 257.6499939,53.0350037 257.6300049,52.7550049 C258.1799927,53.2050018 258.8399963,53.8150024 259.6099854,54.5950012 L260,54.0250015 C259.1600037,53.2450027 258.3300171,52.5550003 257.5200195,51.9550018 C257.5100098,51.9049988 257.5,51.8550034 257.4799805,51.8050003 C258.2999878,51.3649979 259,50.8150024 259.5700073,50.1750031 L259.1199951,49.6650009 C258.6199951,50.2649994 258.0200195,50.7750015 257.2999878,51.1849976 C257.1199951,50.7649994 256.8399963,50.3349991 256.4599915,49.9150009 C256.8399963,49.6350021 257.1699829,49.3250046 257.4400024,49.0050049 L259.7299805,49.0050049 L259.7299805,48.3450012 L253.8499908,48.3450012 L253.8499908,49.0050049 L256.7099915,49.0050049 C256.0299988,49.6650009 254.9599915,50.2050018 253.5099945,50.625 L253.8699951,51.215004 C254.6300049,50.9349976 255.3099976,50.6350021 255.8899994,50.2949982 C256.0700073,50.4850006 256.2399902,50.6949997 256.3800049,50.9150009 C255.7400055,51.4950027 254.8399963,51.9749985 253.6900024,52.3550034 L254.0099945,52.9150009 C255.0999908,52.5350037 255.9799957,52.0449982 256.6600037,51.4449997 C256.6600037,51.4550018 256.6699829,51.4749985 256.6799927,51.4950027 C256.7799988,51.7350006 256.8499756,52.0050049 256.9100037,52.3250046 Z M251.6799927,48.0849991 L251.1900024,48.5550003 C251.9199982,49.1149979 252.4900055,49.6450043 252.9100037,50.1450043 L253.4199982,49.6450043 C252.9499969,49.125 252.3699951,48.6050034 251.6799927,48.0849991 Z M257.5299988,56.9150009 L259.7999878,56.9150009 L259.9700012,56.1949997 C259.7099915,56.215004 259.3399963,56.2249985 258.8599854,56.2350006 C258.3699951,56.2450027 257.8900146,56.2550049 257.4299927,56.2550049 C256.6400146,56.2550049 255.9799957,56.2450027 255.4499969,56.2350006 C254.8499908,56.215004 254.3999939,56.1350021 254.0800018,55.9950027 C253.8000031,55.8649979 253.5399933,55.6549988 253.3000031,55.3649979 C253.2099915,55.2649994 253.1300049,55.1949997 253.0500031,55.1350021 L253.0500031,51.3950043 L250.9599915,51.3950043 L250.9599915,52.0550003 L252.3800049,52.0550003 L252.3800049,55.0950012 C251.9700012,55.2750015 251.5,55.7850037 250.9700012,56.625 L251.5099945,57.1149979 C252.0599976,56.1949997 252.4599915,55.7350006 252.6999969,55.7350006 C252.8199921,55.7350006 252.9499969,55.8150024 253.0899963,55.9850006 C253.3999939,56.3450012 253.7599945,56.5950012 254.1600037,56.715004 C254.5599976,56.8250046 255.0899963,56.8850021 255.7400055,56.8950043 C256.3800049,56.9049988 256.9799805,56.9150009 257.5299988,56.9150009 Z M264.4599915,49.6549988 L262.8499756,49.6549988 C263.0499878,49.1549988 263.2000122,48.6050034 263.3200073,48.0149994 L262.5999756,47.9150009 C262.5100098,48.5149994 262.3699951,49.0950012 262.1699829,49.6549988 L261.2399902,49.6549988 L261.2399902,56.7649994 L261.9400024,56.7649994 L261.9400024,55.9049988 L263.7600098,55.9049988 L263.7600098,56.4749985 L264.4599915,56.4749985 Z M261.9400024,55.2350006 L261.9400024,53.0449982 L263.7600098,53.0449982 L263.7600098,55.2350006 Z M261.9400024,52.3950043 L261.9400024,50.3349991 L263.7600098,50.3349991 L263.7600098,52.3950043 Z M266.2000122,51.9749985 L265.6199951,52.3349991 C266.3099976,53.1549988 266.8599854,53.8950043 267.2700195,54.5550003 L267.8399963,54.1549988 C267.4599915,53.5350037 266.9199829,52.8050003 266.2000122,51.9749985 Z M269.6300049,49.6650009 L266.4400024,49.6650009 C266.6199951,49.1450043 266.7600098,48.5849991 266.8800049,47.9950027 L266.1699829,47.9049988 C265.9100037,49.3250046 265.4400024,50.5250015 264.7399902,51.5050049 L265.1699829,52.0750046 C265.5599976,51.5650024 265.8900146,50.9950027 266.1699829,50.3649979 L268.9199829,50.3649979 C268.8999939,53.2450027 268.8599854,54.9749985 268.7999878,55.5350037 C268.7200012,56.0449982 268.4500122,56.3050003 267.9799805,56.3050003 C267.6699829,56.3050003 267.3099976,56.2949982 266.8900146,56.2750015 L267.0599976,56.9349976 C267.539978,56.9550018 267.8800049,56.9749985 268.0800171,56.9749985 C268.9199829,56.9749985 269.3800049,56.5849991 269.4799805,55.8250046 C269.5800171,55.0449982 269.6300049,52.9850006 269.6300049,49.6650009 Z M275.1900024,49.8649979 L275.1900024,50.5550003 L278.0899963,50.5550003 L278.0899963,55.875 C278.0899963,56.2249985 277.8999939,56.4049988 277.5299988,56.4049988 C277.0700073,56.4049988 276.5800171,56.3850021 276.0599976,56.3550034 L276.2099915,57.0650024 L277.7799988,57.0650024 C278.4599915,57.0650024 278.8099976,56.7249985 278.8099976,56.0550003 L278.8099976,50.5550003 L279.9199829,50.5550003 L279.9199829,49.8649979 L278.8099976,49.8649979 L278.8099976,47.9049988 L278.0899963,47.9049988 L278.0899963,49.8649979 Z M271.6099854,50.5149994 L271.1300049,50.965004 C271.8300171,51.7450027 272.4700012,52.5149994 273.0299988,53.2649994 C272.5100098,54.2450027 271.7799988,55.0950012 270.8399963,55.8150024 L271.2600098,56.4449997 C272.1799927,55.6849976 272.9199829,54.8250046 273.4700012,53.8649979 C273.8300171,54.375 274.1600037,54.875 274.4599915,55.375 L274.9799805,54.8550034 C274.6300049,54.2949982 274.2399902,53.7249985 273.8200073,53.1650009 C274.3399963,52.0550003 274.6199951,50.8150024 274.6699829,49.4550018 L274.6699829,48.9250031 L271.2799988,48.9250031 L271.2799988,49.625 L274.0200195,49.625 C273.9500122,50.6849976 273.7299805,51.6650009 273.3599854,52.5650024 C272.8200073,51.8850021 272.2399902,51.1949997 271.6099854,50.5149994 Z M275.7299805,51.7350006 L275.1799927,52.1350021 C275.7999878,52.9049988 276.3099976,53.6350021 276.7099915,54.3250046 L277.2799988,53.9250031 C276.9199829,53.2850037 276.3999939,52.5550003 275.7299805,51.7350006 Z M282.0700073,50.2450027 L282.0700073,52.1350021 L284.2000122,52.1350021 C283.5,52.6149979 282.5299988,52.9550018 281.289978,53.1549988 L281.5700073,53.7550049 C282.9299927,53.5250015 284,53.1149979 284.7799988,52.5250015 C284.9799805,52.6849976 285.1699829,52.8649979 285.3499756,53.0650024 C284.3999939,53.715004 283.0599976,54.2450027 281.3300171,54.6650009 L281.6799927,55.2750015 C283.3699951,54.8150024 284.7099915,54.2249985 285.6900024,53.5050049 C285.8200073,53.7050018 285.9299927,53.9049988 286.0200195,54.125 C284.8999939,54.9749985 283.2999878,55.6650009 281.2299805,56.2050018 L281.5899963,56.8250046 C283.5200195,56.2949982 285.0599976,55.6050034 286.2000122,54.7649994 C286.2299805,54.9150009 286.25,55.0750046 286.25,55.2450027 C286.25,55.7249985 286.1499939,56.0449982 285.9599915,56.2050018 C285.7600098,56.3550034 285.4899902,56.4449997 285.1699829,56.465004 C284.9400024,56.465004 284.6600037,56.4749985 284.3200073,56.4749985 L284.539978,57.1350021 C284.7999878,57.1350021 285.0299988,57.125 285.25,57.1050034 C285.8800049,57.0449982 286.3200073,56.8950043 286.5700073,56.6750031 C286.8399963,56.4049988 286.9799805,55.9250031 286.9799805,55.2450027 C286.9599915,54.875 286.8900146,54.5149994 286.7700195,54.1750031 C286.9199829,54.125 287.0800171,54.0750046 287.25,54.0149994 C287.7099915,54.9950027 288.4899902,55.875 289.5800171,56.6750031 L290.0599976,56.0750046 C289.0100098,55.4150009 288.2700195,54.6450043 287.8499756,53.7850037 C288.4299927,53.5449982 288.9700012,53.2750015 289.4500122,52.9550018 L288.9799805,52.4150009 C288.3200073,52.8850021 287.4899902,53.2750015 286.5100098,53.5849991 C286.2299805,53.0650024 285.8099976,52.5849991 285.2600098,52.1350021 L289.2700195,52.1350021 L289.2700195,49.9049988 L286.6699829,49.9049988 C286.9899902,49.6650009 287.2999878,49.3850021 287.6199951,49.0550003 L287.6199951,48.5750046 L284.4400024,48.5750046 C284.6199951,48.3950043 284.789978,48.215004 284.9599915,48.0350037 L284.2099915,47.8649979 C283.3699951,48.7550049 282.2799988,49.4749985 280.9400024,50.0250015 L281.3900146,50.5750046 C281.6199951,50.4749985 281.8499756,50.3649979 282.0700073,50.2450027 Z M285.7299805,49.9049988 L282.6799927,49.9049988 C283.0700073,49.6650009 283.4400024,49.4150009 283.7799988,49.1450043 L286.7099915,49.1450043 C286.3900146,49.4250031 286.0599976,49.6849976 285.7299805,49.9049988 Z M288.5599976,51.5350037 L285.7099915,51.5350037 C285.8999939,51.2350006 286.0499878,50.8850021 286.1600037,50.5050049 L288.5599976,50.5050049 Z M284.8699951,51.5350037 L282.7799988,51.5350037 L282.7799988,50.5050049 L285.4400024,50.5050049 C285.3200073,50.875 285.1300049,51.215004 284.8699951,51.5350037 Z M290.4199829,56.0950012&quot; style=&quot;fill:rgb(0,0,0);stroke:none&quot; clip-path=&quot;url(#clip20)&quot; /&gt;
&lt;clipPath id=&quot;clip21&quot;&gt;&lt;path d=&quot;M226,46 L238,46 L238,58 L226,58 L226,46 Z&quot; /&gt;&lt;/clipPath&gt;
&lt;path d=&quot;M230.0224609,47.0080566 C228.3656006,47.0080566 227.0224609,48.3512001 227.0224609,50.0080566 L227.0224609,60.0080566 C227.0224609,61.6649094 228.3656006,63.0080566 230.0224609,63.0080566 L240.0224609,63.0080566 C241.6793213,63.0080566 243.0224609,61.6649094 243.0224609,60.0080566 L243.0224609,50.0080566 C243.0224609,48.3512001 241.6793213,47.0080566 240.0224609,47.0080566 Z M230.0224609,47.0080566&quot; style=&quot;fill:rgb(255,182,9);stroke:none&quot; clip-path=&quot;url(#clip21)&quot; /&gt;
&lt;clipPath id=&quot;clip22&quot;&gt;&lt;path d=&quot;M226,46 L238,46 L238,58 L226,58 L226,46 Z&quot; /&gt;&lt;/clipPath&gt;
&lt;path d=&quot;M232.46315,57.4300537 C232.7014465,56.8636436 233.2639313,56.2640419 234.15065,55.6312256 C234.9201965,55.0804405 235.4182281,54.6859131 235.6447906,54.4476318 C235.9924622,54.0765381 236.166275,53.6702919 236.166275,53.2288818 C236.166275,52.8695068 236.0666809,52.5706787 235.8674469,52.3323975 C235.6682281,52.0941162 235.3830872,51.9749756 235.0119781,51.9749756 C234.5041656,51.9749756 234.1584625,52.1644287 233.9748688,52.543335 C233.8694,52.762085 233.8069,53.1097374 233.7873688,53.5863037 L232.1643219,53.5863037 C232.1916656,52.8636436 232.322525,52.2796669 232.5569,51.8343506 C233.0022278,50.9866905 233.7932281,50.5628662 234.9299469,50.5628662 C235.8283997,50.5628662 236.5432281,50.8118858 237.0744781,51.3099365 C237.6057434,51.8079872 237.8713531,52.4671593 237.8713531,53.2874756 C237.8713531,53.9163857 237.6838684,54.4749718 237.3088531,54.9632568 C237.0627594,55.2874756 236.6584778,55.6488037 236.0959625,56.0472412 L235.4279938,56.5218506 C235.010025,56.8187256 234.7238922,57.0335693 234.5695953,57.1663818 C234.4152985,57.2991943 234.2854156,57.4534912 234.1799469,57.6292725 L237.8889313,57.6292725 L237.8889313,59.0999756 L232.0705719,59.0999756 C232.0861969,58.4905968 232.2170563,57.9339638 232.46315,57.4300537 L232.46315,57.4300537 Z M232.46315,57.4300537&quot; style=&quot;fill:rgb(255,255,255);stroke:none&quot; clip-path=&quot;url(#clip22)&quot; /&gt;
&lt;clipPath id=&quot;clip23&quot;&gt;&lt;path d=&quot;M202,94 L406,94 L406,189 L202,189 Z M203,117 L203,151 L269,151 L269,117 Z M203,117&quot; /&gt;&lt;/clipPath&gt;
&lt;path d=&quot;M282,152 L282,120 C282,117.7919998 283.7919922,116 286,116 L291,116&quot; style=&quot;fill:none;stroke:rgb(128,128,128)&quot; clip-path=&quot;url(#clip23)&quot; /&gt;
&lt;clipPath id=&quot;clip24&quot;&gt;&lt;path d=&quot;M202,94 L406,94 L406,189 L202,189 Z M203,117 L203,151 L269,151 L269,117 Z M203,117&quot; /&gt;&lt;/clipPath&gt;
&lt;path d=&quot;M282,152 L282,144 C282,141.7920074 283.7919922,140 286,140 L291,140&quot; style=&quot;fill:none;stroke:rgb(128,128,128)&quot; clip-path=&quot;url(#clip24)&quot; /&gt;
&lt;clipPath id=&quot;clip25&quot;&gt;&lt;path d=&quot;M202,94 L406,94 L406,189 L202,189 Z M203,117 L203,151 L269,151 L269,117 Z M203,117&quot; /&gt;&lt;/clipPath&gt;
&lt;path d=&quot;M282,152 L282,160 C282,162.2080078 283.7919922,164 286,164 L291,164&quot; style=&quot;fill:none;stroke:rgb(128,128,128)&quot; clip-path=&quot;url(#clip25)&quot; /&gt;
&lt;clipPath id=&quot;clip26&quot;&gt;&lt;path d=&quot;M202,94 L406,94 L406,189 L202,189 Z M203,117 L203,151 L269,151 L269,117 Z M203,117&quot; /&gt;&lt;/clipPath&gt;
&lt;path d=&quot;M282,152 L282,184 C282,186.2080078 283.7919922,188 286,188 L291,188&quot; style=&quot;fill:none;stroke:rgb(128,128,128)&quot; clip-path=&quot;url(#clip26)&quot; /&gt;
&lt;clipPath id=&quot;clip27&quot;&gt;&lt;path d=&quot;M201,93 L407,93 L407,190 L201,190 L201,93 Z&quot; /&gt;&lt;/clipPath&gt;
&lt;path d=&quot;M269,152 L282,152&quot; style=&quot;fill:none;stroke:rgb(128,128,128)&quot; clip-path=&quot;url(#clip27)&quot; /&gt;
&lt;clipPath id=&quot;clip28&quot;&gt;&lt;path d=&quot;M201,115 L272,115 L272,154 L201,154 L201,115 Z&quot; /&gt;&lt;/clipPath&gt;
&lt;path d=&quot;M203,152 L269,152 Z M203,152&quot; style=&quot;fill:none;stroke:rgb(128,128,128)&quot; clip-path=&quot;url(#clip28)&quot; /&gt;
&lt;clipPath id=&quot;clip29&quot;&gt;&lt;path d=&quot;M214,123 L259,123 L259,146 L214,146 L214,123 Z&quot; /&gt;&lt;/clipPath&gt;
&lt;path d=&quot;M227.1860046,130.2944946 C226.6660004,131.3605042 226.0420074,132.283493 225.3140106,133.0635071 L226.0550079,133.5964966 C226.8090057,132.7904968 227.4720001,131.8285065 228.0440063,130.710495 Z M223.0910034,130.5285034 L222.2200012,130.8144989 C222.6360016,131.5294952 222.9869995,132.2704926 223.2470093,133.0505066 L224.1570129,132.8294983 C223.8450012,131.9714966 223.4810028,131.2044983 223.0910034,130.5285034 Z M219.5420074,130.8274994 L218.6450043,131.1134949 C219.1130066,131.815506 219.5420074,132.6085052 219.9320068,133.5184937 L220.7900085,133.1414948 C220.4260101,132.309494 220.0100098,131.5424957 219.5420074,130.8274994 Z M227.7450104,128.6044922 C225.1580048,129.0724945 221.9080048,129.3065033 217.9820099,129.3065033 L218.2680054,130.190506 C222.4020081,130.190506 225.70401,129.9174957 228.2000122,129.3975067 Z M217.9690094,134.5975037 L217.9690094,135.5074921 L221.7779999,135.5074921 C220.855011,136.963501 219.3730011,138.1725006 217.3190002,139.1085052 L217.8390045,139.9794922 C220.0490112,138.809494 221.6220093,137.3144989 222.5709991,135.5074921 L222.701004,135.5074921 L222.701004,140.3954926 L223.6370087,140.3954926 L223.6370087,135.5074921 L223.8059998,135.5074921 C224.6900024,137.1195068 226.2110138,138.588501 228.3950043,139.888504 L229.0580139,139.0565033 C226.9520111,138.0164948 225.4570007,136.8334961 224.5730133,135.5074921 L228.3820038,135.5074921 L228.3820038,134.5975037 L223.6370087,134.5975037 L223.6370087,133.3495026 L222.701004,133.3495026 L222.701004,134.5975037 Z M230.4750061,129.2935028 L230.4750061,130.2035065 L234.7779999,130.2035065 C233.8420105,132.7124939 232.3209991,134.7534943 230.1890106,136.3394928 L230.7610016,137.2624969 C231.8010101,136.4434967 232.723999,135.5204926 233.5170135,134.4804993 L233.5170135,140.3175049 L234.4790039,140.3175049 L234.4790039,139.6154938 L239.9130096,139.6154938 L239.9130096,140.3175049 L240.875,140.3175049 L240.875,133.7005005 L234.076004,133.7005005 C234.7779999,132.6345062 235.3370056,131.4774933 235.7660065,130.2035065 L241.8890076,130.2035065 L241.8890076,129.2935028 Z M234.4790039,138.7055054 L234.4790039,134.5975037 L239.9130096,134.5975037 L239.9130096,138.7055054 Z M250.0010071,133.9214935 C249.5850067,135.1954956 248.8570099,136.2225037 247.8170013,137.0285034 L248.4020081,137.7434998 C249.5720062,136.8334961 250.404007,135.559494 250.8850098,133.9214935 L251.9120026,133.9214935 C251.6390076,135.2994995 251.2100067,136.4174957 250.625,137.2494965 C249.9880066,138.0814972 249.052002,138.8484955 247.8170013,139.5375061 L248.3890076,140.2655029 C249.7410126,139.4855042 250.7550049,138.614502 251.4309998,137.6394958 C252.029007,136.7294922 252.4970093,135.4945068 252.8090057,133.9214935 L253.7450104,133.9214935 C253.6670074,136.6775055 253.5500031,138.2765045 253.381012,138.6925049 C253.1990051,139.1604919 252.8480072,139.3945007 252.3410034,139.4075012 C251.8990021,139.4075012 251.4440002,139.3815002 250.9760132,139.3554993 L251.2360077,140.2655029 C251.6390076,140.2785034 252.0550079,140.2915039 252.4840088,140.2915039 C253.4459991,140.2655029 254.0310059,139.8235016 254.2519989,138.9394989 C254.4600067,138.0684967 254.6030121,136.1184998 254.6809998,133.0894928 L249.6890106,133.0894928 C251.1710052,132.1535034 252.5490112,131.1654968 253.7970123,130.0995026 L253.7970123,129.2805023 L248.2460022,129.2805023 L248.2460022,130.138504 L252.4320068,130.138504 C251.1060028,131.1654968 249.6630096,132.1405029 248.0900116,133.0505066 L248.0900116,133.9214935 Z M243.3320007,132.1405029 L243.3320007,133.0375061 L244.8920135,133.0375061 L244.8920135,137.8475037 C244.3330078,137.9774933 243.7610016,138.1074982 243.1760101,138.2115021 L243.4230042,139.1994934 C244.8790131,138.8744965 246.2440033,138.4714966 247.5050049,137.9904938 L247.5050049,137.0155029 C246.9720001,137.2234955 246.4260101,137.4055023 245.8540039,137.5744934 L245.8540039,133.0375061 L247.4790039,133.0375061 L247.4790039,132.1405029 L245.8540039,132.1405029 L245.8540039,128.8255005 L244.8920135,128.8255005 L244.8920135,132.1405029 Z M255.6690063,139.1604919&quot; style=&quot;fill:rgb(48,48,48);stroke:none&quot; clip-path=&quot;url(#clip29)&quot; /&gt;
&lt;clipPath id=&quot;clip30&quot;&gt;&lt;path d=&quot;M270,128 L283,128 L283,141 L270,141 L270,128 Z&quot; /&gt;&lt;/clipPath&gt;
&lt;path d=&quot;M280.5,134 C280.5,131.5147247 278.4852905,129.5 276,129.5 C273.5147095,129.5 271.5,131.5147247 271.5,134 C271.5,136.4852753 273.5147095,138.5 276,138.5 C278.4852905,138.5 280.5,136.4852753 280.5,134 Z M280.5,134&quot; style=&quot;fill:rgb(250,250,250);stroke:none&quot; clip-path=&quot;url(#clip30)&quot; /&gt;
&lt;clipPath id=&quot;clip31&quot;&gt;&lt;path d=&quot;M270,128 L283,128 L283,141 L270,141 L270,128 Z&quot; /&gt;&lt;/clipPath&gt;
&lt;path d=&quot;M280.5,134 C280.5,131.5147247 278.4852905,129.5 276,129.5 C273.5147095,129.5 271.5,131.5147247 271.5,134 C271.5,136.4852753 273.5147095,138.5 276,138.5 C278.4852905,138.5 280.5,136.4852753 280.5,134 Z M280.5,134&quot; style=&quot;fill:none;stroke:rgb(128,128,128)&quot; clip-path=&quot;url(#clip31)&quot; /&gt;
&lt;clipPath id=&quot;clip32&quot;&gt;&lt;path d=&quot;M270,128 L283,128 L283,141 L270,141 L270,128 Z&quot; /&gt;&lt;/clipPath&gt;
&lt;path d=&quot;M274,134 L278,134&quot; style=&quot;fill:none;stroke:rgb(150,160,200)&quot; clip-path=&quot;url(#clip32)&quot; /&gt;
&lt;clipPath id=&quot;clip33&quot;&gt;&lt;path d=&quot;M289,93 L347,93 L347,118 L289,118 L289,93 Z&quot; /&gt;&lt;/clipPath&gt;
&lt;path d=&quot;M291,116 L344,116 Z M291,116&quot; style=&quot;fill:none;stroke:rgb(128,128,128)&quot; clip-path=&quot;url(#clip33)&quot; /&gt;
&lt;clipPath id=&quot;clip34&quot;&gt;&lt;path d=&quot;M311,96 L337,96 L337,115 L311,115 L311,96 Z&quot; /&gt;&lt;/clipPath&gt;
&lt;path d=&quot;M314.1900024,101.4649963 L314.1900024,102.1650009 L317.5,102.1650009 C316.7800293,104.0950012 315.6099854,105.6650009 313.9700012,106.8850021 L314.4100037,107.5950012 C315.210022,106.9649963 315.9200134,106.2550049 316.5300293,105.4550018 L316.5300293,109.9449997 L317.2700195,109.9449997 L317.2700195,109.4049988 L321.4500122,109.4049988 L321.4500122,109.9449997 L322.1900024,109.9449997 L322.1900024,104.8549957 L316.960022,104.8549957 C317.5,104.0350037 317.9299927,103.1450043 318.2600098,102.1650009 L322.9700012,102.1650009 L322.9700012,101.4649963 Z M317.2700195,108.7050018 L317.2700195,105.5449982 L321.4500122,105.5449982 L321.4500122,108.7050018 Z M325.3699951,102.1450043 C325.1400146,103.625 324.6600037,104.9449997 323.9200134,106.1049957 L324.3099976,106.7350006 C324.5300293,106.4049988 324.7399902,106.0550003 324.9400024,105.6949997 L324.9400024,109.7249985 L325.6199951,109.7249985 L325.6199951,108.9950027 L327.2999878,108.9950027 L327.2999878,104.4150009 L325.5,104.4150009 C325.75,103.7149963 325.9400024,102.9550018 326.0800171,102.1450043 L327.6400146,102.1450043 L327.6400146,101.4449997 L324.3099976,101.4449997 L324.3099976,102.1450043 Z M325.6199951,108.3249969 L325.6199951,105.0749969 L326.6400146,105.0749969 L326.6400146,108.3249969 Z M330.6000061,100.8650055 L329.8699951,100.9850006 C330.0700073,101.375 330.2399902,101.8050003 330.4000244,102.2850037 L328.2600098,102.2850037 L328.2600098,105.1549988 C328.230011,107.0749969 327.8500061,108.5650024 327.1300049,109.6450043 L327.6700134,110.1350021 C328.5,108.8850021 328.9400024,107.2249985 328.980011,105.1549988 L328.980011,102.9850006 L333.0300293,102.9850006 L333.0300293,102.2850037 L331.1000061,102.2850037 C330.9400024,101.7449951 330.7800293,101.2750015 330.6000061,100.8650055 Z M333.5700073,109.0550003&quot; style=&quot;fill:rgb(0,0,0);stroke:none&quot; clip-path=&quot;url(#clip34)&quot; /&gt;
&lt;clipPath id=&quot;clip35&quot;&gt;&lt;path d=&quot;M299,99 L311,99 L311,111 L299,111 L299,99 Z&quot; /&gt;&lt;/clipPath&gt;
&lt;path d=&quot;M303.0045166,100 C301.3476563,100 300.0045166,101.3431473 300.0045166,103 L300.0045166,113 C300.0045166,114.6568527 301.3476563,116 303.0045166,116 L313.0045166,116 C314.661377,116 316.0045166,114.6568527 316.0045166,113 L316.0045166,103 C316.0045166,101.3431473 314.661377,100 313.0045166,100 Z M303.0045166,100&quot; style=&quot;fill:rgb(76,145,255);stroke:none&quot; clip-path=&quot;url(#clip35)&quot; /&gt;
&lt;clipPath id=&quot;clip36&quot;&gt;&lt;path d=&quot;M299,99 L311,99 L311,111 L299,111 L299,99 Z&quot; /&gt;&lt;/clipPath&gt;
&lt;path d=&quot;M307.0526428,109.5925903 C307.0526428,109.9324341 307.1073303,110.2136841 307.2167053,110.4363403 C307.4198303,110.8464966 307.7889709,111.0515747 308.3241272,111.0515747 C308.6522522,111.0515747 308.938385,110.93927 309.1825256,110.7146606 C309.4266663,110.4900513 309.5487366,110.1668091 309.5487366,109.7449341 C309.5487366,109.1863403 309.3221741,108.8132935 308.8690491,108.6257935 C308.6112366,108.5203247 308.2049866,108.4675903 307.6502991,108.4675903 L307.6502991,107.2722778 C308.1932678,107.2644653 308.5721741,107.211731 308.7870178,107.1140747 C309.1581116,106.9500122 309.3436584,106.617981 309.3436584,106.117981 C309.3436584,105.7937622 309.2489319,105.5300903 309.0594788,105.3269653 C308.8700256,105.1238403 308.6034241,105.0222778 308.2596741,105.0222778 C307.8651428,105.0222778 307.5751038,105.1472778 307.3895569,105.3972778 C307.20401,105.6472778 307.1151428,105.9812622 307.1229553,106.399231 L305.5643616,106.399231 C305.5799866,105.977356 305.6522522,105.5769653 305.7811584,105.1980591 C305.9178772,104.8660278 306.1327209,104.5593872 306.4256897,104.2781372 C306.6444397,104.0789185 306.9042053,103.9265747 307.2049866,103.821106 C307.5057678,103.7156372 307.8749084,103.6629028 308.3124084,103.6629028 C309.1249084,103.6629028 309.7801819,103.8728638 310.2782288,104.2927856 C310.7762756,104.7127075 311.0252991,105.2761841 311.0252991,105.9832153 C311.0252991,106.4832153 310.8768616,106.9050903 310.5799866,107.2488403 C310.3924866,107.4636841 310.1971741,107.6101685 309.9940491,107.6882935 C310.1463928,107.6882935 310.3651428,107.8191528 310.6502991,108.0808716 C311.0760803,108.4754028 311.2889709,109.0144653 311.2889709,109.6980591 C311.2889709,110.4168091 311.0399475,111.048645 310.5419006,111.5935669 C310.0438538,112.1384888 309.3065491,112.4109497 308.3299866,112.4109497 C307.1268311,112.4109497 306.2909241,112.0183716 305.8221741,111.2332153 C305.5760803,110.8152466 305.4393616,110.2683716 305.4120178,109.5925903 L307.0526428,109.5925903 Z M307.0526428,109.5925903&quot; style=&quot;fill:rgb(255,255,255);stroke:none&quot; clip-path=&quot;url(#clip36)&quot; /&gt;
&lt;clipPath id=&quot;clip37&quot;&gt;&lt;path d=&quot;M289,117 L387,117 L387,142 L289,142 L289,117 Z&quot; /&gt;&lt;/clipPath&gt;
&lt;path d=&quot;M291,140 L384,140 Z M291,140&quot; style=&quot;fill:none;stroke:rgb(128,128,128)&quot; clip-path=&quot;url(#clip37)&quot; /&gt;
&lt;clipPath id=&quot;clip38&quot;&gt;&lt;path d=&quot;M311,120 L377,120 L377,139 L311,139 L311,120 Z&quot; /&gt;&lt;/clipPath&gt;
&lt;path d=&quot;M314.1350098,125.4700012 L314.1350098,126.1699982 L317.4450073,126.1699982 C316.7250061,128.1000061 315.5549927,129.6699982 313.914978,130.8899994 L314.3549805,131.6000061 C315.1549988,130.9700012 315.8649902,130.2599945 316.4750061,129.4600067 L316.4750061,133.9499969 L317.2149963,133.9499969 L317.2149963,133.4100037 L321.3950195,133.4100037 L321.3950195,133.9499969 L322.1350098,133.9499969 L322.1350098,128.8600006 L316.9049988,128.8600006 C317.4450073,128.0399933 317.875,127.1500015 318.2050171,126.1699982 L322.914978,126.1699982 L322.914978,125.4700012 Z M317.2149963,132.7100067 L317.2149963,129.5500031 L321.3950195,129.5500031 L321.3950195,132.7100067 Z M325.3150024,126.1500015 C325.085022,127.6299973 324.6049805,128.9499969 323.8649902,130.1100006 L324.2550049,130.7400055 C324.4750061,130.4100037 324.6849976,130.0599976 324.8850098,129.6999969 L324.8850098,133.7299957 L325.5650024,133.7299957 L325.5650024,133 L327.2449951,133 L327.2449951,128.4199982 L325.4450073,128.4199982 C325.6950073,127.7200012 325.8850098,126.9599991 326.0249939,126.1500015 L327.585022,126.1500015 L327.585022,125.4499969 L324.2550049,125.4499969 L324.2550049,126.1500015 Z M325.5650024,132.3300018 L325.5650024,129.0800018 L326.585022,129.0800018 L326.585022,132.3300018 Z M330.5449829,124.8700027 L329.8150024,124.9899979 C330.0150146,125.3799973 330.1849976,125.8099976 330.3450012,126.2900009 L328.2050171,126.2900009 L328.2050171,129.1600037 C328.1749878,131.0800018 327.7949829,132.5700073 327.0750122,133.6499939 L327.6149902,134.1399994 C328.4450073,132.8899994 328.8850098,131.2299957 328.9249878,129.1600037 L328.9249878,126.9899979 L332.9750061,126.9899979 L332.9750061,126.2900009 L331.0449829,126.2900009 C330.8850098,125.75 330.7250061,125.2799988 330.5449829,124.8700027 Z M333.9750061,129.25 L333.9750061,129.9100037 L334.6950073,129.9100037 C334.6549988,131.3699951 334.4049988,132.5800018 333.9249878,133.5500031 L334.4849854,134.0599976 C335.0249939,132.9900055 335.3150024,131.6100006 335.355011,129.9100037 L337.4049988,129.9100037 L337.4049988,132.9700012 C337.4049988,133.2400055 337.2850037,133.3800049 337.0450134,133.3800049 C336.7850037,133.3800049 336.4849854,133.3600006 336.1650085,133.3399963 L336.355011,134.0299988 L337.2650146,134.0299988 C337.8049927,134.0299988 338.0849915,133.75 338.0849915,133.2100067 L338.0849915,125.9199982 L336.6749878,125.9199982 C336.8049927,125.6200027 336.9049988,125.3000031 336.9849854,124.9599991 L336.2349854,124.8600006 C336.1650085,125.2200012 336.0650024,125.5800018 335.9249878,125.9199982 L334.7050171,125.9199982 L334.7050171,129.25 Z M337.4049988,129.25 L335.3649902,129.25 L335.3649902,126.5899963 L337.4049988,126.5899963 Z M336.3349915,127.0999985 L335.8049927,127.2700043 C336.0249939,127.7300034 336.2049866,128.1999969 336.3450012,128.6999969 L336.9150085,128.5399933 C336.7349854,128 336.5450134,127.5200043 336.3349915,127.0999985 Z M336.2850037,130.4600067 L335.7250061,130.6399994 C335.9849854,131.2200012 336.2049866,131.8200073 336.3850098,132.4499969 L336.9750061,132.2899933 C336.7749939,131.6100006 336.5450134,131 336.2850037,130.4600067 Z M339.3450012,125.3799973 C339.3450012,126.1600037 339.2850037,126.7399979 339.1849976,127.1100006 C339.0750122,127.4700012 338.8349915,127.8600006 338.4549866,128.2700043 L339.0150146,128.7700043 C339.4750061,128.2899933 339.7550049,127.8700027 339.8649902,127.5200043 C339.9750061,127.1800003 340.0350037,126.6800003 340.0350037,126.0299988 L341.4049988,126.0299988 L341.4049988,127.7099991 C341.4049988,128.2400055 341.6650085,128.5099945 342.2049866,128.5099945 L343.0750122,128.5099945 L343.0750122,127.8399963 L342.4049988,127.8399963 C342.2049866,127.8399963 342.105011,127.7399979 342.105011,127.5500031 L342.105011,125.3799973 Z M338.7149963,129.2599945 L338.7149963,129.9100037 L339.0150146,129.9100037 C339.2449951,130.8099976 339.6950073,131.6199951 340.355011,132.3399963 C339.8250122,132.8000031 339.1849976,133.1900024 338.4450073,133.4900055 L338.8349915,134.0899963 C339.6350098,133.7700043 340.3150024,133.3600006 340.875,132.8399963 C341.3850098,133.2899933 342.0050049,133.6999969 342.7449951,134.0700073 L343.1149902,133.4400024 C342.4450073,133.1100006 341.8649902,132.7400055 341.3649902,132.3200073 C341.9349976,131.6499939 342.3450012,130.8300018 342.5849915,129.8699951 L342.5849915,129.2599945 Z M339.6749878,129.9100037 L341.8850098,129.9100037 C341.6549988,130.6399994 341.3049927,131.2799988 340.8450012,131.8399963 C340.2950134,131.2700043 339.9049988,130.6300049 339.6749878,129.9100037 Z M347.5549927,126.6200027 L345.9450073,126.6200027 C346.144989,126.1200027 346.2950134,125.5699997 346.4150085,124.9800034 L345.6950073,124.8799973 C345.605011,125.4800034 345.4649963,126.0599976 345.2650146,126.6200027 L344.3349915,126.6200027 L344.3349915,133.7299957 L345.0350037,133.7299957 L345.0350037,132.8699951 L346.855011,132.8699951 L346.855011,133.4400024 L347.5549927,133.4400024 Z M345.0350037,132.1999969 L345.0350037,130.0099945 L346.855011,130.0099945 L346.855011,132.1999969 Z M345.0350037,129.3600006 L345.0350037,127.3000031 L346.855011,127.3000031 L346.855011,129.3600006 Z M349.2950134,128.9400024 L348.7149963,129.3000031 C349.4049988,130.1199951 349.9549866,130.8600006 350.3649902,131.5200043 L350.9349976,131.1199951 C350.5549927,130.5 350.0150146,129.7700043 349.2950134,128.9400024 Z M352.7250061,126.6299973 L349.5350037,126.6299973 C349.7149963,126.1100006 349.855011,125.5500031 349.9750061,124.9599991 L349.2650146,124.8700027 C349.0050049,126.2900009 348.5350037,127.4899979 347.8349915,128.4700012 L348.2650146,129.0399933 C348.6549988,128.5299988 348.9849854,127.9599991 349.2650146,127.3300018 L352.0150146,127.3300018 C351.9949951,130.2100067 351.9549866,131.9400024 351.894989,132.5 C351.8150024,133.0099945 351.5450134,133.2700043 351.0750122,133.2700043 C350.7650146,133.2700043 350.4049988,133.2599945 349.9849854,133.2400055 L350.1549988,133.8999939 C350.6350098,133.9199982 350.9750061,133.9400024 351.1749878,133.9400024 C352.0150146,133.9400024 352.4750061,133.5500031 352.5750122,132.7899933 C352.6749878,132.0099945 352.7250061,129.9499969 352.7250061,126.6299973 Z M354.6650085,125.0899963 L354.1749878,125.5599976 C354.9349976,126.1100006 355.5350037,126.6299973 355.9750061,127.1100006 L356.4649963,126.6200027 C355.9750061,126.1200027 355.375,125.6100006 354.6650085,125.0899963 Z M354.4849854,127.5400009 L353.9949951,128.0099945 C354.7149963,128.5399933 355.2650146,129.0399933 355.6650085,129.5099945 L356.1549988,129.0200043 C355.7049866,128.5299988 355.144989,128.0399933 354.4849854,127.5400009 Z M355.644989,130.2400055 C355.2149963,131.4299927 354.7049866,132.5899963 354.105011,133.7299957 L354.7749939,134.0299988 C355.3250122,132.9199982 355.8250122,131.7400055 356.2650146,130.4799957 Z M358.3250122,126.8799973 L358.3250122,130.3899994 L360.0350037,130.3899994 L360.0350037,133.0500031 C360.0350037,133.3000031 359.9150085,133.4299927 359.6950073,133.4299927 C359.4549866,133.4299927 359.2049866,133.4100037 358.9450073,133.3800049 L359.0950012,134.0299988 L359.9349976,134.0299988 C360.4549866,134.0299988 360.7250061,133.7599945 360.7250061,133.2200012 L360.7250061,130.3899994 L362.3850098,130.3899994 L362.3850098,126.8799973 L360.4349976,126.8799973 C360.5450134,126.5800018 360.6350098,126.2700043 360.7049866,125.9400024 L362.9150085,125.9400024 L362.9150085,125.2900009 L356.9150085,125.2900009 L356.9150085,128.8500061 C356.8850098,130.8699951 356.5549927,132.4400024 355.9349976,133.5700073 L356.4750061,134.0500031 C357.1950073,132.75 357.5750122,131.0099945 357.6149902,128.8500061 L357.6149902,125.9400024 L360.0249939,125.9400024 C359.9549866,126.2600021 359.8649902,126.5699997 359.7449951,126.8799973 Z M361.7449951,129.8099976 L358.9649963,129.8099976 L358.9649963,128.9100037 L361.7449951,128.9100037 Z M358.9649963,128.3699951 L358.9649963,127.4499969 L361.7449951,127.4499969 L361.7449951,128.3699951 Z M358.5750122,131.1000061 C358.3649902,131.8600006 358.0249939,132.5500031 357.5549927,133.1799927 L358.1350098,133.5399933 C358.5950012,132.8899994 358.9549866,132.1199951 359.2149963,131.2400055 Z M361.9750061,131.0500031 L361.375,131.2599945 C361.7550049,131.9199982 362.1149902,132.6699982 362.4349976,133.5299988 L363.0450134,133.2599945 C362.7449951,132.4799957 362.3850098,131.7400055 361.9750061,131.0500031 Z M365.9150085,127.9700012 L371.144989,127.9700012 L371.144989,128.8300018 L365.9150085,128.8300018 Z M371.144989,127.3600006 L365.9150085,127.3600006 L365.9150085,126.5200043 L371.144989,126.5200043 Z M367.6849976,124.9100037 C367.5849915,125.2399979 367.4249878,125.5599976 367.2250061,125.8799973 L365.2149963,125.8799973 L365.2149963,129.4600067 L368.2449951,129.4600067 L368.2449951,132.8800049 C368.2449951,133.1999969 368.0950012,133.3699951 367.8150024,133.3699951 C367.4349976,133.3699951 367.0350037,133.3500061 366.6149902,133.3200073 L366.7650146,134 L368.0549927,134 C368.644989,134 368.9450073,133.6799927 368.9450073,133.0599976 L368.9450073,130.8600006 C369.7650146,132.0599976 370.9750061,133.0800018 372.5849915,133.9199982 L373.0849915,133.3300018 C372.0650024,132.8500061 371.1950073,132.3099976 370.4750061,131.6900024 C371.2349854,131.3000031 371.894989,130.8500061 372.4450073,130.3300018 L371.9049988,129.8500061 C371.3850098,130.3699951 370.7449951,130.8399963 369.9949951,131.25 C369.5750122,130.8399963 369.2250061,130.3999939 368.9450073,129.9299927 L368.9450073,129.4600067 L371.8450012,129.4600067 L371.8450012,125.8799973 L367.9849854,125.8799973 C368.1849976,125.6100006 368.3349915,125.3199997 368.4450073,125.0100021 Z M364.1950073,130.2400055 L364.1950073,130.9199982 L366.7950134,130.9199982 C366.2449951,131.9499969 365.2749939,132.75 363.875,133.3300018 L364.3150024,133.9100037 C365.9450073,133.1999969 367.0350037,132.1600037 367.5750122,130.8000031 L367.5750122,130.2400055 Z M373.5150146,133.0599976&quot; style=&quot;fill:rgb(0,0,0);stroke:none&quot; clip-path=&quot;url(#clip38)&quot; /&gt;
&lt;clipPath id=&quot;clip39&quot;&gt;&lt;path d=&quot;M299,123 L311,123 L311,135 L299,135 L299,123 Z&quot; /&gt;&lt;/clipPath&gt;
&lt;path d=&quot;M303.0045166,124 C301.3476563,124 300.0045166,125.3431473 300.0045166,127 L300.0045166,137 C300.0045166,138.6568604 301.3476563,140 303.0045166,140 L313.0045166,140 C314.661377,140 316.0045166,138.6568604 316.0045166,137 L316.0045166,127 C316.0045166,125.3431473 314.661377,124 313.0045166,124 Z M303.0045166,124&quot; style=&quot;fill:rgb(0,209,86);stroke:none&quot; clip-path=&quot;url(#clip39)&quot; /&gt;
&lt;clipPath id=&quot;clip40&quot;&gt;&lt;path d=&quot;M299,123 L311,123 L311,135 L299,135 L299,123 Z&quot; /&gt;&lt;/clipPath&gt;
&lt;path d=&quot;M310.8710022,134.3718872 L309.9100647,134.3718872 L309.9100647,136.2000122 L308.2752991,136.2000122 L308.2752991,134.3718872 L304.9120178,134.3718872 L304.9120178,132.9129028 L308.0350647,127.7566528 L309.9100647,127.7566528 L309.9100647,133.0652466 L310.8710022,133.0652466 L310.8710022,134.3718872 Z M308.2752991,133.0652466 L308.2752991,129.3972778 L306.1483459,133.0652466 L308.2752991,133.0652466 Z M308.2752991,133.0652466&quot; style=&quot;fill:rgb(255,255,255);stroke:none&quot; clip-path=&quot;url(#clip40)&quot; /&gt;
&lt;clipPath id=&quot;clip41&quot;&gt;&lt;path d=&quot;M289,141 L347,141 L347,166 L289,166 L289,141 Z&quot; /&gt;&lt;/clipPath&gt;
&lt;path d=&quot;M291,164 L344,164 Z M291,164&quot; style=&quot;fill:none;stroke:rgb(128,128,128)&quot; clip-path=&quot;url(#clip41)&quot; /&gt;
&lt;clipPath id=&quot;clip42&quot;&gt;&lt;path d=&quot;M311,144 L337,144 L337,163 L311,163 L311,144 Z&quot; /&gt;&lt;/clipPath&gt;
&lt;path d=&quot;M321.6400146,150.2649994 C321.2399902,151.0850067 320.7600098,151.7949982 320.2000122,152.3950043 L320.7700195,152.8049927 C321.3500061,152.1849976 321.8599854,151.4450073 322.2999878,150.5850067 Z M318.4899902,150.4450073 L317.8200073,150.6649933 C318.1400146,151.2149963 318.4100037,151.7850037 318.6099854,152.3849945 L319.3099976,152.2149963 C319.0700073,151.5549927 318.7900085,150.9649963 318.4899902,150.4450073 Z M315.7600098,150.6750031 L315.0700073,150.8950043 C315.4299927,151.4349976 315.7600098,152.0449982 316.0599976,152.7449951 L316.7200012,152.4550018 C316.4400024,151.8150024 316.1199951,151.2250061 315.7600098,150.6750031 Z M322.0700073,148.9649963 C320.0800171,149.3249969 317.5800171,149.5050049 314.5599976,149.5050049 L314.7799988,150.1849976 C317.960022,150.1849976 320.5,149.9750061 322.4199829,149.5749969 Z M314.5499878,153.5749969 L314.5499878,154.2749939 L317.4799805,154.2749939 C316.7700195,155.3950043 315.6300049,156.3249969 314.0499878,157.0449982 L314.4500122,157.7149963 C316.1500244,156.8150024 317.3599854,155.6650085 318.0899963,154.2749939 L318.1900024,154.2749939 L318.1900024,158.0350037 L318.9100037,158.0350037 L318.9100037,154.2749939 L319.0400085,154.2749939 C319.7200012,155.5149994 320.8900146,156.6450043 322.5700073,157.6450043 L323.0800171,157.0050049 C321.460022,156.2050018 320.3099976,155.2949982 319.6300049,154.2749939 L322.5599976,154.2749939 L322.5599976,153.5749969 L318.9100037,153.5749969 L318.9100037,152.6150055 L318.1900024,152.6150055 L318.1900024,153.5749969 Z M324.1699829,149.4949951 L324.1699829,150.1950073 L327.4799805,150.1950073 C326.7600098,152.125 325.5899963,153.6950073 323.9500122,154.9150085 L324.3900146,155.625 C325.1900024,154.9949951 325.9000244,154.2850037 326.5100098,153.4850006 L326.5100098,157.9750061 L327.25,157.9750061 L327.25,157.4349976 L331.4299927,157.4349976 L331.4299927,157.9750061 L332.1699829,157.9750061 L332.1699829,152.8849945 L326.9400024,152.8849945 C327.4799805,152.0650024 327.9100037,151.1750031 328.2399902,150.1950073 L332.9500122,150.1950073 L332.9500122,149.4949951 Z M327.25,156.7350006 L327.25,153.5749969 L331.4299927,153.5749969 L331.4299927,156.7350006 Z M333.5499878,157.0849915&quot; style=&quot;fill:rgb(0,0,0);stroke:none&quot; clip-path=&quot;url(#clip42)&quot; /&gt;
&lt;clipPath id=&quot;clip43&quot;&gt;&lt;path d=&quot;M299,147 L311,147 L311,159 L299,159 L299,147 Z&quot; /&gt;&lt;/clipPath&gt;
&lt;path d=&quot;M303.0045166,148 C301.3476563,148 300.0045166,149.3431396 300.0045166,151 L300.0045166,161 C300.0045166,162.6568604 301.3476563,164 303.0045166,164 L313.0045166,164 C314.661377,164 316.0045166,162.6568604 316.0045166,161 L316.0045166,151 C316.0045166,149.3431396 314.661377,148 313.0045166,148 Z M303.0045166,148&quot; style=&quot;fill:rgb(139,186,193);stroke:none&quot; clip-path=&quot;url(#clip43)&quot; /&gt;
&lt;clipPath id=&quot;clip44&quot;&gt;&lt;path d=&quot;M299,147 L311,147 L311,159 L299,159 L299,147 Z&quot; /&gt;&lt;/clipPath&gt;
&lt;path d=&quot;M306.7760925,157.9265747 C306.8424988,158.289856 306.9694519,158.5701294 307.1569519,158.767395 C307.3444519,158.9646606 307.6178894,159.0632935 307.9772644,159.0632935 C308.3913269,159.0632935 308.7067566,158.9177856 308.9235535,158.62677 C309.1403503,158.3357544 309.2487488,157.9695435 309.2487488,157.5281372 C309.2487488,157.0945435 309.1471863,156.7283325 308.9440613,156.4295044 C308.7409363,156.1306763 308.42453,155.9812622 307.9948425,155.9812622 C307.7917175,155.9812622 307.6159363,156.0066528 307.4674988,156.0574341 C307.20578,156.1511841 307.0085144,156.3250122 306.8757019,156.5789185 L305.3757019,156.508606 L305.9733582,151.8152466 L310.6549988,151.8152466 L310.6549988,153.2332153 L307.1803894,153.2332153 L306.8757019,155.0906372 C307.1335144,154.9226685 307.3346863,154.8113403 307.4792175,154.7566528 C307.721405,154.6668091 308.0163269,154.6218872 308.3639832,154.6218872 C309.0671082,154.6218872 309.6803894,154.8582153 310.2038269,155.3308716 C310.7272644,155.8035278 310.9889832,156.4910278 310.9889832,157.3933716 C310.9889832,158.1785278 310.73703,158.8796997 310.2331238,159.4968872 C309.7292175,160.1140747 308.9753113,160.4226685 307.971405,160.4226685 C307.1628113,160.4226685 306.4987488,160.2058716 305.9792175,159.7722778 C305.4596863,159.3386841 305.1706238,158.7234497 305.11203,157.9265747 L306.7760925,157.9265747 Z M306.7760925,157.9265747&quot; style=&quot;fill:rgb(255,255,255);stroke:none&quot; clip-path=&quot;url(#clip44)&quot; /&gt;
&lt;clipPath id=&quot;clip45&quot;&gt;&lt;path d=&quot;M289,165 L407,165 L407,190 L289,190 L289,165 Z&quot; /&gt;&lt;/clipPath&gt;
&lt;path d=&quot;M291,188 L404,188 Z M291,188&quot; style=&quot;fill:none;stroke:rgb(128,128,128)&quot; clip-path=&quot;url(#clip45)&quot; /&gt;
&lt;clipPath id=&quot;clip46&quot;&gt;&lt;path d=&quot;M311,168 L397,168 L397,187 L311,187 L311,168 Z&quot; /&gt;&lt;/clipPath&gt;
&lt;path d=&quot;M321.539978,174.2649994 C321.1400146,175.0849915 320.6600037,175.7949982 320.0999756,176.3950043 L320.6699829,176.8049927 C321.25,176.1849976 321.7600098,175.4450073 322.2000122,174.5849915 Z M318.3900146,174.4450073 L317.7200012,174.6650085 C318.039978,175.2149963 318.3099976,175.7850037 318.5100098,176.3849945 L319.2099915,176.2149963 C318.9700012,175.5549927 318.6900024,174.9649963 318.3900146,174.4450073 Z M315.6600037,174.6750031 L314.9700012,174.8950043 C315.3300171,175.4349976 315.6600037,176.0449982 315.9599915,176.7449951 L316.6199951,176.4550018 C316.3399963,175.8150024 316.0200195,175.2250061 315.6600037,174.6750031 Z M321.9700012,172.9649963 C319.9799805,173.3249969 317.4799805,173.5050049 314.4599915,173.5050049 L314.6799927,174.1849976 C317.8599854,174.1849976 320.3999939,173.9750061 322.3200073,173.5749969 Z M314.4500122,177.5749969 L314.4500122,178.2749939 L317.3800049,178.2749939 C316.6699829,179.3950043 315.5299988,180.3249969 313.9500122,181.0449982 L314.3499756,181.7149963 C316.0499878,180.8150024 317.2600098,179.6650085 317.9899902,178.2749939 L318.0899963,178.2749939 L318.0899963,182.0350037 L318.8099976,182.0350037 L318.8099976,178.2749939 L318.9400024,178.2749939 C319.6199951,179.5149994 320.789978,180.6450043 322.4700012,181.6450043 L322.9799805,181.0050049 C321.3599854,180.2050018 320.2099915,179.2949982 319.5299988,178.2749939 L322.4599915,178.2749939 L322.4599915,177.5749969 L318.8099976,177.5749969 L318.8099976,176.6149902 L318.0899963,176.6149902 L318.0899963,177.5749969 Z M324.0700073,173.4949951 L324.0700073,174.1950073 L327.3800049,174.1950073 C326.6600037,176.125 325.4899902,177.6950073 323.8499756,178.9150085 L324.289978,179.625 C325.0899963,178.9949951 325.7999878,178.2850037 326.4100037,177.4850006 L326.4100037,181.9750061 L327.1499939,181.9750061 L327.1499939,181.4349976 L331.3300171,181.4349976 L331.3300171,181.9750061 L332.0700073,181.9750061 L332.0700073,176.8849945 L326.8399963,176.8849945 C327.3800049,176.0650024 327.8099976,175.1750031 328.1400146,174.1950073 L332.8499756,174.1950073 L332.8499756,173.4949951 Z M327.1499939,180.7350006 L327.1499939,177.5749969 L331.3300171,177.5749969 L331.3300171,180.7350006 Z M333.9100037,177.2749939 L333.9100037,177.9349976 L334.6300049,177.9349976 C334.5899963,179.3950043 334.3399963,180.6049957 333.8599854,181.5749969 L334.4199829,182.0849915 C334.9599915,181.0149994 335.25,179.6349945 335.2900085,177.9349976 L337.3399963,177.9349976 L337.3399963,180.9949951 C337.3399963,181.2649994 337.2200012,181.4049988 336.980011,181.4049988 C336.7200012,181.4049988 336.4199829,181.3849945 336.1000061,181.3649902 L336.2900085,182.0549927 L337.2000122,182.0549927 C337.7399902,182.0549927 338.019989,181.7749939 338.019989,181.2350006 L338.019989,173.9450073 L336.6099854,173.9450073 C336.7399902,173.6450043 336.8399963,173.3249969 336.9199829,172.9850006 L336.1699829,172.8849945 C336.1000061,173.2449951 336,173.6049957 335.8599854,173.9450073 L334.6400146,173.9450073 L334.6400146,177.2749939 Z M337.3399963,177.2749939 L335.2999878,177.2749939 L335.2999878,174.6149902 L337.3399963,174.6149902 Z M336.269989,175.125 L335.7399902,175.2949982 C335.9599915,175.7550049 336.1399841,176.2250061 336.2799988,176.7250061 L336.8500061,176.5650024 C336.6699829,176.0249939 336.480011,175.5449982 336.269989,175.125 Z M336.2200012,178.4850006 L335.6600037,178.6650085 C335.9199829,179.2449951 336.1399841,179.8450012 336.3200073,180.4750061 L336.9100037,180.3150024 C336.7099915,179.6349945 336.480011,179.0249939 336.2200012,178.4850006 Z M339.2799988,173.4049988 C339.2799988,174.1849976 339.2200012,174.7649994 339.1199951,175.1349945 C339.0100098,175.4949951 338.769989,175.8849945 338.3899841,176.2949982 L338.9500122,176.7949982 C339.4100037,176.3150024 339.6900024,175.8950043 339.7999878,175.5449982 C339.9100037,175.2050018 339.9700012,174.7050018 339.9700012,174.0549927 L341.3399963,174.0549927 L341.3399963,175.7350006 C341.3399963,176.2649994 341.6000061,176.5350037 342.1399841,176.5350037 L343.0100098,176.5350037 L343.0100098,175.8649902 L342.3399963,175.8649902 C342.1399841,175.8649902 342.0400085,175.7649994 342.0400085,175.5749969 L342.0400085,173.4049988 Z M338.6499939,177.2850037 L338.6499939,177.9349976 L338.9500122,177.9349976 C339.1799927,178.8349915 339.6300049,179.6450043 340.2900085,180.3649902 C339.7600098,180.8249969 339.1199951,181.2149963 338.3800049,181.5149994 L338.769989,182.1149902 C339.5700073,181.7949982 340.25,181.3849945 340.8099976,180.8649902 C341.3200073,181.3150024 341.9400024,181.7250061 342.6799927,182.0950012 L343.0499878,181.4649963 C342.3800049,181.1349945 341.7999878,180.7649994 341.2999878,180.3450012 C341.8699951,179.6750031 342.2799988,178.8549957 342.519989,177.8950043 L342.519989,177.2850037 Z M339.6099854,177.9349976 L341.8200073,177.9349976 C341.5899963,178.6650085 341.2399902,179.3049927 340.7799988,179.8649902 C340.230011,179.2949982 339.8399963,178.6549988 339.6099854,177.9349976 Z M347.4899902,174.6450043 L345.8800049,174.6450043 C346.0799866,174.1450043 346.230011,173.5950012 346.3500061,173.0050049 L345.6300049,172.9049988 C345.5400085,173.5050049 345.3999939,174.0849915 345.2000122,174.6450043 L344.269989,174.6450043 L344.269989,181.7550049 L344.9700012,181.7550049 L344.9700012,180.8950043 L346.7900085,180.8950043 L346.7900085,181.4649963 L347.4899902,181.4649963 Z M344.9700012,180.2250061 L344.9700012,178.0350037 L346.7900085,178.0350037 L346.7900085,180.2250061 Z M344.9700012,177.3849945 L344.9700012,175.3249969 L346.7900085,175.3249969 L346.7900085,177.3849945 Z M349.230011,176.9649963 L348.6499939,177.3249969 C349.3399963,178.1450043 349.8899841,178.8849945 350.2999878,179.5449982 L350.8699951,179.1450043 C350.4899902,178.5249939 349.9500122,177.7949982 349.230011,176.9649963 Z M352.6600037,174.6549988 L349.4700012,174.6549988 C349.6499939,174.1349945 349.7900085,173.5749969 349.9100037,172.9850006 L349.2000122,172.8950043 C348.9400024,174.3150024 348.4700012,175.5149994 347.769989,176.4949951 L348.2000122,177.0650024 C348.5899963,176.5549927 348.9199829,175.9850006 349.2000122,175.3549957 L351.9500122,175.3549957 C351.9299927,178.2350006 351.8899841,179.9649963 351.8299866,180.5249939 C351.75,181.0350037 351.480011,181.2949982 351.0100098,181.2949982 C350.7000122,181.2949982 350.3399963,181.2850037 349.9199829,181.2649994 L350.0899963,181.9250031 C350.5700073,181.9450073 350.9100037,181.9649963 351.1099854,181.9649963 C351.9500122,181.9649963 352.4100037,181.5749969 352.5100098,180.8150024 C352.6099854,180.0350037 352.6600037,177.9750061 352.6600037,174.6549988 Z M355.8699951,172.8950043 C355.7900085,173.1950073 355.6900024,173.5149994 355.5700073,173.8450012 L354.1900024,173.8450012 L354.1900024,174.5050049 L355.3099976,174.5050049 C355.1300049,174.9450073 354.9100037,175.4049988 354.6699829,175.8849945 C355.1199951,176.0849915 355.5400085,176.2850037 355.9400024,176.4850006 C355.4299927,176.8450012 354.8099976,177.1450043 354.0700073,177.3849945 L354.3999939,177.9649963 C355.269989,177.6750031 356,177.2949982 356.5899963,176.8249969 C357.0700073,177.0749969 357.4899902,177.3249969 357.8599854,177.5749969 L358.25,177.0249939 C357.8699951,176.7850037 357.480011,176.5650024 357.0799866,176.3649902 C357.5799866,175.8249969 357.9299927,175.1950073 358.1300049,174.4550018 L358.1300049,173.8450012 L356.2900085,173.8450012 C356.3899841,173.5650024 356.4899902,173.2749939 356.5799866,172.9750061 Z M356.4599915,176.0549927 C356.1399841,175.8950043 355.8200073,175.7550049 355.480011,175.6149902 C355.6799927,175.2649994 355.8599854,174.8950043 356.0299988,174.5050049 L357.4700012,174.5050049 C357.25,175.0849915 356.9199829,175.5950012 356.4599915,176.0549927 Z M358.8800049,174.3150024 C359.0799866,175.0749969 359.480011,175.7350006 360.0799866,176.3150024 C359.6600037,176.6049957 359.1699829,176.8549957 358.6000061,177.0549927 L358.9199829,177.6549988 C359.5599976,177.4049988 360.1099854,177.1049957 360.5899963,176.7449951 C361.1199951,177.1349945 361.7799988,177.4649963 362.5799866,177.7449951 L362.9100037,177.1450043 C362.2000122,176.8950043 361.6000061,176.6149902 361.1000061,176.2949982 C361.6600037,175.7350006 362.0700073,175.0650024 362.3299866,174.2749939 L362.3299866,173.6650085 L358.6099854,173.6650085 L358.6099854,174.3150024 Z M360.5700073,175.9150085 C360.0100098,175.4550018 359.6699829,174.9150085 359.5299988,174.3150024 L361.6199951,174.3150024 C361.3999939,174.9250031 361.0499878,175.4550018 360.5700073,175.9150085 Z M358,177.7550049 C358,178.0549927 357.9700012,178.3450012 357.9199829,178.625 L354.6399841,178.625 L354.6399841,179.2649994 L357.7200012,179.2649994 C357.6300049,179.4850006 357.519989,179.6849976 357.3899841,179.875 C356.8699951,180.5249939 355.7999878,181.0749969 354.1799927,181.5149994 L354.6499939,182.0849915 C356.4700012,181.5549927 357.6300049,180.8849945 358.1300049,180.0650024 C358.2799988,179.8249969 358.3999939,179.5549927 358.5,179.2649994 L361.4100037,179.2649994 C361.3699951,180.1950073 361.2799988,180.7649994 361.1399841,180.9850006 C360.980011,181.2050018 360.5899963,181.3150024 359.980011,181.3249969 C359.6699829,181.3150024 359.2799988,181.3049927 358.7999878,181.2850037 L358.980011,181.9250031 C359.4299927,181.9450073 359.8200073,181.9550018 360.1399841,181.9550018 C360.8699951,181.9550018 361.3800049,181.7949982 361.6699829,181.4850006 C361.9700012,181.1750031 362.1199951,180.2250061 362.1399841,178.625 L358.6600037,178.625 C358.7000122,178.3549957 358.730011,178.0650024 358.730011,177.7550049 Z M367.6199951,172.9450073 L367.6199951,173.8649902 C367.6099854,174.1849976 367.6000061,174.5149994 367.5799866,174.8349915 L364.6099854,174.8349915 L364.6099854,175.5249939 L367.5299988,175.5249939 C367.4199829,176.7350006 367.1900024,177.7749939 366.8500061,178.6349945 C366.3299866,179.8049927 365.4199829,180.7449951 364.1199951,181.4450073 L364.5100098,182.0749969 C365.8500061,181.3849945 366.8099976,180.4250031 367.3999939,179.1950073 C367.8399963,178.2149963 368.1300049,176.9850006 368.269989,175.5249939 L371.4199829,175.5249939 C371.3599854,177.9550018 371.25,179.5350037 371.0700073,180.2749939 C370.8899841,180.9850006 370.5299988,181.3450012 369.980011,181.3450012 C369.6000061,181.3450012 369.2099915,181.3349915 368.7900085,181.3150024 L368.9899902,182.0149994 L370.3399963,182.0149994 C370.8500061,181.9750061 371.2200012,181.7550049 371.4500122,181.3450012 C371.6900024,180.9150085 371.8599854,180.1650085 371.9599915,179.0950012 C372.0599976,178.0050049 372.1199951,176.5849915 372.1600037,174.8349915 L368.3200073,174.8349915 C368.3399963,174.5249939 368.3500061,174.2050018 368.3599854,173.8649902 L368.3599854,172.9450073 Z M379.7600098,172.9049988 L379.7600098,177.2550049 L378.1799927,177.2550049 L378.1799927,182.0950012 L378.8999939,182.0950012 L378.8999939,181.6349945 L381.8800049,181.6349945 L381.8800049,182.0950012 L382.6099854,182.0950012 L382.6099854,177.2550049 L380.5,177.2550049 L380.5,175.4150085 L383.1000061,175.4150085 L383.1000061,174.7149963 L380.5,174.7149963 L380.5,172.9049988 Z M378.8999939,180.9349976 L378.8999939,177.9450073 L381.8800049,177.9450073 L381.8800049,180.9349976 Z M375.2000122,172.9349976 C374.9199829,174.1450043 374.4599915,175.2449951 373.8399963,176.2449951 L374.4299927,176.6149902 C374.7900085,176.0549927 375.1000061,175.4250031 375.3699951,174.7350006 L377.5100098,174.7350006 L377.5100098,174.0449982 L375.6199951,174.0449982 C375.7200012,173.7350006 375.8099976,173.4150085 375.8999939,173.0749969 Z M374.8899841,176.0650024 L374.8899841,176.7149963 L375.5700073,176.7149963 L375.5700073,177.9450073 L374.1699829,177.9450073 L374.1699829,178.6049957 L375.5700073,178.6049957 L375.5700073,180.8849945 C375.5700073,181.0249939 375.4599915,181.125 375.25,181.1950073 L375.5499878,181.8150024 C376.4199829,181.5849915 377.1799927,181.2850037 377.8399963,180.9250031 L377.7200012,180.2850037 C377.2399902,180.5650024 376.7600098,180.7949982 376.2799988,180.9649963 L376.2799988,178.6049957 L377.6900024,178.6049957 L377.6900024,177.9450073 L376.2799988,177.9450073 L376.2799988,176.7149963 L377.3299866,176.7149963 L377.3299866,176.0650024 Z M391.1699829,174.0950012 L391.1699829,176.8649902 L389.6099854,176.8649902 L389.6099854,174.0950012 Z M391.1699829,177.5549927 L391.1699829,182.0650024 L391.8599854,182.0650024 L391.8599854,177.5549927 L393.0499878,177.5549927 L393.0499878,176.8649902 L391.8599854,176.8649902 L391.8599854,174.0950012 L392.7799988,174.0950012 L392.7799988,173.4150085 L388.0299988,173.4150085 L388.0299988,174.0950012 L388.9100037,174.0950012 L388.9100037,176.8649902 L387.8099976,176.8649902 L387.8099976,177.5549927 L388.8999939,177.5549927 C388.8399963,179.4049988 388.2999878,180.7550049 387.2799988,181.6149902 L387.8099976,182.0950012 C388.9299927,181.125 389.519989,179.6149902 389.6000061,177.5549927 Z M385.3299866,174.1549988 C385.0799866,175.6049957 384.5700073,176.8950043 383.7900085,178.0149994 L384.1699829,178.6349945 C384.4199829,178.2949982 384.6499939,177.9349976 384.8599854,177.5549927 L384.8599854,181.7350006 L385.519989,181.7350006 L385.519989,180.9450073 L387.2399902,180.9450073 L387.2399902,176.4150085 L385.3899841,176.4150085 C385.6600037,175.7149963 385.8699951,174.9550018 386.0100098,174.1549988 L387.5899963,174.1549988 L387.5899963,173.4550018 L384.1300049,173.4550018 L384.1300049,174.1549988 Z M385.519989,180.3150024 L385.519989,177.0549927 L386.5700073,177.0549927 L386.5700073,180.3150024 Z M393.4500122,181.0849915&quot; style=&quot;fill:rgb(0,0,0);stroke:none&quot; clip-path=&quot;url(#clip46)&quot; /&gt;
&lt;clipPath id=&quot;clip47&quot;&gt;&lt;path d=&quot;M299,171 L311,171 L311,183 L299,183 L299,171 Z&quot; /&gt;&lt;/clipPath&gt;
&lt;path d=&quot;M303.0294189,172.0219727 C301.3725586,172.0219727 300.0294189,173.3651123 300.0294189,175.0219727 L300.0294189,185.0219727 C300.0294189,186.678833 301.3725586,188.0219727 303.0294189,188.0219727 L313.0294189,188.0219727 C314.6862793,188.0219727 316.0294189,186.678833 316.0294189,185.0219727 L316.0294189,175.0219727 C316.0294189,173.3651123 314.6862793,172.0219727 313.0294189,172.0219727 Z M303.0294189,172.0219727&quot; style=&quot;fill:rgb(139,186,193);stroke:none&quot; clip-path=&quot;url(#clip47)&quot; /&gt;
&lt;clipPath id=&quot;clip48&quot;&gt;&lt;path d=&quot;M299,171 L311,171 L311,183 L299,183 L299,171 Z&quot; /&gt;&lt;/clipPath&gt;
&lt;path d=&quot;M307.2155457,182.6296997 C307.4616394,182.9187622 307.7741394,183.0632935 308.1530457,183.0632935 C308.5241394,183.0632935 308.8161316,182.923645 309.0290222,182.6443481 C309.2419128,182.3650513 309.3483582,182.0027466 309.3483582,181.5574341 C309.3483582,181.0613403 309.2272644,180.6814575 308.9850769,180.4177856 C308.7428894,180.1541138 308.4460144,180.0222778 308.0944519,180.0222778 C307.8092957,180.0222778 307.5573425,180.1082153 307.3385925,180.2800903 C307.0104675,180.5339966 306.846405,180.9441528 306.846405,181.5105591 C306.846405,181.9675903 306.9694519,182.3406372 307.2155457,182.6296997 L307.2155457,182.6296997 Z M309.1960144,177.8425903 C309.1960144,177.7058716 309.14328,177.555481 309.0378113,177.3914185 C308.8581238,177.1257935 308.5866394,176.992981 308.2233582,176.992981 C307.6803894,176.992981 307.2936707,177.2976685 307.0632019,177.9070435 C306.9382019,178.242981 306.8522644,178.7390747 306.8053894,179.3953247 C307.0124207,179.149231 307.252655,178.9695435 307.5260925,178.8562622 C307.79953,178.742981 308.11203,178.6863403 308.4635925,178.6863403 C309.2174988,178.6863403 309.8356628,178.9421997 310.3180847,179.4539185 C310.8005066,179.9656372 311.0417175,180.6199341 311.0417175,181.4168091 C311.0417175,182.2097778 310.8053894,182.9089966 310.3327332,183.5144653 C309.8600769,184.1199341 309.1257019,184.4226685 308.1296082,184.4226685 C307.0592957,184.4226685 306.2702332,183.9754028 305.7624207,183.0808716 C305.3678894,182.3816528 305.1706238,181.4793091 305.1706238,180.3738403 C305.1706238,179.7254028 305.1979675,179.1980591 305.252655,178.7918091 C305.3503113,178.0691528 305.5397644,177.4675903 305.8210144,176.9871216 C306.0632019,176.5769653 306.3805847,176.2468872 306.7731628,175.9968872 C307.165741,175.7468872 307.6354675,175.6218872 308.1823425,175.6218872 C308.971405,175.6218872 309.6003113,175.8240356 310.0690613,176.2283325 C310.5378113,176.6326294 310.8014832,177.1707153 310.8600769,177.8425903 L309.1960144,177.8425903 Z M309.1960144,177.8425903&quot; style=&quot;fill:rgb(255,255,255);stroke:none&quot; clip-path=&quot;url(#clip48)&quot; /&gt;
&lt;clipPath id=&quot;clip49&quot;&gt;&lt;path d=&quot;M141,218 L214,218 L214,257 L141,257 L141,218 Z&quot; /&gt;&lt;/clipPath&gt;
&lt;path d=&quot;M143,255 L211,255 Z M143,255&quot; style=&quot;fill:none;stroke:rgb(128,128,128)&quot; clip-path=&quot;url(#clip49)&quot; /&gt;
&lt;clipPath id=&quot;clip50&quot;&gt;&lt;path d=&quot;M169,226 L201,226 L201,249 L169,249 L169,226 Z&quot; /&gt;&lt;/clipPath&gt;
&lt;path d=&quot;M172.1239929,233.4700012 L172.1239929,234.3670044 L175.7510071,234.3670044 C175.7380066,234.8089905 175.7120056,235.4329987 175.6730042,236.2519989 C175.6080017,237.4869995 175.3609924,238.605011 174.9190063,239.6060028 C174.4639893,240.6069946 173.5410004,241.6860046 172.1629944,242.8560028 L172.8389893,243.5059967 C173.9830017,242.5830078 174.8670044,241.5690002 175.5039978,240.4509888 C175.9720001,239.5930023 176.2969971,238.6439972 176.4660034,237.5910034 L181.0159912,237.5910034 C180.9899902,239.3850098 180.9509888,240.5679932 180.8730011,241.1139984 C180.7170105,242.0240021 180.3139954,242.4920044 179.651001,242.5180054 C179.1959991,242.5180054 178.6369934,242.5050049 177.9609985,242.4790039 L178.2470093,243.3240051 C178.8190002,243.3500061 179.3259888,243.3760071 179.7420044,243.3760071 C180.7689972,243.3370056 181.4060059,242.7649994 181.6660004,241.6600037 C181.8349915,240.9320068 181.9389954,239.2810059 181.9649963,236.7070007 L176.5700073,236.7070007 L176.5700073,236.6809998 L176.6869965,234.3670044 L183.5379944,234.3670044 L183.5379944,233.4700012 L178.6759949,233.4700012 C178.3639984,232.7030029 178.026001,232.0400085 177.6620026,231.4940033 L176.7779999,231.8190002 C177.1549988,232.3389893 177.4670105,232.8980103 177.7269897,233.4700012 Z M185.0849915,232.053009 L185.0849915,232.9369965 L186.423996,232.9369965 L186.423996,236.6940002 L184.8509979,236.6940002 L184.8509979,237.5910034 L186.4110107,237.5910034 C186.3200073,239.9570007 185.8000031,241.6990051 184.8509979,242.8170013 L185.553009,243.428009 C186.6579895,242.1799927 187.2689972,240.230011 187.3730011,237.5910034 L189.322998,237.5910034 L189.322998,243.3760071 L190.2720032,243.3760071 L190.2720032,237.5910034 L191.7669983,237.5910034 L191.7669983,236.6940002 L190.2720032,236.6940002 L190.2720032,232.9369965 L191.571991,232.9369965 L191.571991,232.053009 Z M187.3860016,232.9369965 L189.322998,232.9369965 L189.322998,236.6940002 L187.3860016,236.6940002 Z M195.3679962,231.5849915 C194.3800049,232.651001 193.1319885,233.5090027 191.6239929,234.1589966 L192.0270081,235.0169983 C193.6130066,234.2890015 194.9259949,233.3789978 195.9790039,232.2870026 Z M195.927002,235.1080017 C194.9389954,236.2519989 193.6910095,237.1880035 192.1699982,237.8899994 L192.572998,238.7350006 C194.1589966,237.9550018 195.4720001,236.980011 196.5379944,235.8099976 Z M196.2519989,238.7089996 C195.0039978,240.2949982 193.4309998,241.5690002 191.519989,242.5310059 L191.9230042,243.4020081 C193.8990021,242.348999 195.5500031,241.0230103 196.8760071,239.4110107 Z M197.2789917,242.1669922&quot; style=&quot;fill:rgb(48,48,48);stroke:none&quot; clip-path=&quot;url(#clip50)&quot; /&gt;
&lt;clipPath id=&quot;clip51&quot;&gt;&lt;path d=&quot;M154,230 L169,230 L169,245 L154,245 L154,230 Z&quot; /&gt;&lt;/clipPath&gt;
&lt;path d=&quot;M158.0045166,231 C156.3476563,231 155.0045166,232.3431396 155.0045166,234 L155.0045166,244 C155.0045166,245.6568604 156.3476563,247 158.0045166,247 L168.0045166,247 C169.661377,247 171.0045166,245.6568604 171.0045166,244 L171.0045166,234 C171.0045166,232.3431396 169.661377,231 168.0045166,231 Z M158.0045166,231&quot; style=&quot;fill:rgb(139,186,193);stroke:none&quot; clip-path=&quot;url(#clip51)&quot; /&gt;
&lt;clipPath id=&quot;clip52&quot;&gt;&lt;path d=&quot;M154,230 L169,230 L169,245 L154,245 L154,230 Z&quot; /&gt;&lt;/clipPath&gt;
&lt;path d=&quot;M166.4870605,236.1833191 C166.2370605,236.4294128 165.8894196,236.8678894 165.4440918,237.4987488 C164.9987793,238.1296082 164.6257477,238.7809753 164.3249512,239.4528503 C164.0866699,239.9801941 163.8718414,240.6247253 163.6804199,241.3864441 C163.4890137,242.1481628 163.3933105,242.7731628 163.3933105,243.2614441 L161.6589508,243.2614441 C161.7097321,241.7380066 162.2097168,240.1540375 163.1589355,238.509491 C163.7722321,237.4899597 164.2858887,236.7790222 164.6999512,236.3766785 L160.4636383,236.3766785 L160.4870758,234.8766785 L166.4870605,234.8766785 L166.4870605,236.1833191 Z M166.4870605,236.1833191&quot; style=&quot;fill:rgb(255,255,255);stroke:none&quot; clip-path=&quot;url(#clip52)&quot; /&gt;
&lt;/svg&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgheadline3&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgheadline3&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;2&lt;/span&gt; Derivation&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-2&quot;&gt;
&lt;/div&gt;&lt;div id=&quot;outline-container-orgheadline2&quot; class=&quot;outline-3&quot;&gt;
&lt;h3 id=&quot;orgheadline2&quot;&gt;&lt;span class=&quot;section-number-3&quot;&gt;2.1&lt;/span&gt; quarrymen&lt;/h3&gt;
&lt;div class=&quot;outline-text-3&quot; id=&quot;text-2-1&quot;&gt;
&lt;p&gt;
采石工
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;All around me are &lt;i&gt;quarrymen&lt;/i&gt; covered in cream - boots caked, trucks
spattered - removing great slabs of precious marble from the surrounding
cliff-face with diamond-edged cutters.&lt;sup&gt;&lt;a id=&quot;fnr.1.100&quot; class=&quot;footref&quot; href=&quot;#fn.1&quot;&gt;1&lt;/a&gt;&lt;/sup&gt;&lt;/li&gt;
&lt;li&gt;Four Chinese quarrymen died from carbon monoxide poisoning while extracting
stalactites in an underground limestone cave, mainland media reports.&lt;sup&gt;&lt;a id=&quot;fnr.2&quot; class=&quot;footref&quot; href=&quot;#fn.2&quot;&gt;2&lt;/a&gt;&lt;/sup&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgheadline4&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgheadline4&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;3&lt;/span&gt; Example&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-3&quot;&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;The hunter is looking his &lt;i&gt;quarries&lt;/i&gt;. 猎人在寻找他的猎物（1）。&lt;/li&gt;
&lt;li&gt;It took policemen 2 hours to locate their quarry. 警方花了2小时定位追踪目标（2）。&lt;/li&gt;
&lt;li&gt;some are worried about the future of the quarries that have been used for
thousands of years&lt;sup&gt;&lt;a id=&quot;fnr.1.100&quot; class=&quot;footref&quot; href=&quot;#fn.1&quot;&gt;1&lt;/a&gt;&lt;/sup&gt;. 人们担心这个用了上千年的采石场（3）的未来，可能会挖掘完。&lt;/li&gt;
&lt;li&gt;I found the book is an indispensable quarry of information. 我发现这本书是非常有价值的咨询源泉（4）。&lt;/li&gt;
&lt;li&gt;The old man quarried one block of marble from the mountain. 老人从山上开采（5）了一块大理石。&lt;/li&gt;
&lt;li&gt;I quarried the word &quot;quarry&quot; from all the news sites. 我从新闻网站中寻找（6）“quarry”这个单词。&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;footnotes&quot;&gt;
&lt;h2 class=&quot;footnotes&quot;&gt;Footnotes: &lt;/h2&gt;
&lt;div id=&quot;text-footnotes&quot;&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.1&quot; class=&quot;footnum&quot; href=&quot;#fnr.1&quot;&gt;1&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;http://www.bbc.co.uk/news/magazine-36865396&quot;&gt;http://www.bbc.co.uk/news/magazine-36865396&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.2&quot; class=&quot;footnum&quot; href=&quot;#fnr.2&quot;&gt;2&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
www.scmp.com/news/china/society/article/1983129/four-chinese-quarrymen-killed-carbon-monoxide-poisoning-inside
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;


&lt;/div&gt;
&lt;/div&gt;
</content>
 </entry>
 
 <entry>
   <title>单词本：撕咬</title>
   <link href="http://kimi.im/2016-07-24-english-maul"/>
   <updated>2016-07-24T00:00:00+00:00</updated>
   <id>http://kimi.im/english-maul</id>
   <content type="html">&lt;p&gt;
据央视新闻消息，昨天下午两名自驾游女士在八达岭野生动物园遭遇老虎攻击，造成一死一伤。也许我孤陋寡闻，原来还可以自驾游进入有猛兽的野生动物园的。因为，我一直以来以为进这样的动物园是要配备专业持枪导游和带有铁笼的专业游览车的。换言之，就是让动物们在外面欣赏笼子里神情紧张的人类们。没想到可以开自己的车进野生动物园，更没想到游客还敢擅自开车门出去的。据说一位年轻姑娘发怒甩门而出，一位年长女士出去劝说，而导致惨剧发生。
&lt;/p&gt;

&lt;p&gt;
这件事有很多教训值得我们深思。首先，动物园方面是否应该配备安防人员和专业车辆？第二，动物园是否提供了充足的安全说明？第三，游客是否好好了解安全须知？第四，尽管天气燥热，年轻姑娘是不是应该控制好自己的情绪。第五，车里的人是不是不该让姑娘冒险胡来？
&lt;/p&gt;

&lt;p&gt;
不管时候想想有多少需要注意的事项，在血淋淋的事故之后都是那么的苍白无力。只能祈祷今后动物园在保障游客安全方面深思熟虑，游客能吸取教训时刻注意安全吧。
&lt;/p&gt;

&lt;p&gt;
BBC 今天的新闻标题是“Tigers maul two women at Beijing wildlife park&lt;sup&gt;&lt;a id=&quot;fnr.1&quot; class=&quot;footref&quot; href=&quot;#fn.1&quot;&gt;1&lt;/a&gt;&lt;/sup&gt;”。这里老虎对游客的袭击用了 maul 这个单词。
&lt;/p&gt;

&lt;div id=&quot;outline-container-orgheadline1&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgheadline1&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;1&lt;/span&gt; maul&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-1&quot;&gt;
&lt;p&gt;
maul 来自拉丁语 malleus&lt;sup&gt;(latin)&lt;/sup&gt;，原意是锤子 hammer。作为名词意为大槌，作为动词则有粗暴攻击之意。
&lt;/p&gt;

&lt;blockquote&gt;
&lt;ol class=&quot;org-ol&quot;&gt;
&lt;li&gt;hammer
&lt;ol class=&quot;org-ol&quot;&gt;
&lt;li&gt;A heavy hammer having a wedge-shaped head and used for splitting logs.&lt;/li&gt;
&lt;li&gt;To split (wood) with a maul and wedge.&lt;/li&gt;
&lt;/ol&gt;&lt;/li&gt;
&lt;li&gt;Treat brutally
&lt;ol class=&quot;org-ol&quot;&gt;
&lt;li&gt;To savage; to injure or mutilate, as by scratching or beating&lt;/li&gt;
&lt;li&gt;To handle or treat roughly, causing damage&lt;/li&gt;
&lt;li&gt;(Rugby) rugby a loose scrum that forms around a player who is holding the
ball and on his feet&lt;/li&gt;
&lt;/ol&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/blockquote&gt;

&lt;p&gt;
1.1：楔形头的劈柴大槌；1.2：用这种大槌劈柴；2.1：撕裂攻击使其毁伤；2.2：粗暴处理使其损坏；2.3：玩橄榄球围着带球队员的争夺。
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgheadline4&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgheadline4&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;2&lt;/span&gt; Derivation&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-2&quot;&gt;
&lt;/div&gt;&lt;div id=&quot;outline-container-orgheadline2&quot; class=&quot;outline-3&quot;&gt;
&lt;h3 id=&quot;orgheadline2&quot;&gt;&lt;span class=&quot;section-number-3&quot;&gt;2.1&lt;/span&gt; maulstick&lt;/h3&gt;
&lt;div class=&quot;outline-text-3&quot; id=&quot;text-2-1&quot;&gt;
&lt;p&gt;
支腕杖，画家们用来支撑手腕用的杆子。也叫 mahlstick。我已开始以为这是锤子形状的原因才取这个名字，后来发现原来是从荷兰语里 maalstok 引入到英语中的。malen&lt;sup&gt;(nl)&lt;/sup&gt; 绘画，stok&lt;sup&gt;(nl)&lt;/sup&gt; 杆子。所以又叫 mahlstick。因此这个词中的 maul 和 hanmmer 之 maul
没有任何关系啊。仅仅是长的一摸一样罢了。
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgheadline3&quot; class=&quot;outline-3&quot;&gt;
&lt;h3 id=&quot;orgheadline3&quot;&gt;&lt;span class=&quot;section-number-3&quot;&gt;2.2&lt;/span&gt; mauler&lt;/h3&gt;
&lt;div class=&quot;outline-text-3&quot; id=&quot;text-2-2&quot;&gt;
&lt;p&gt;
使用木槌之人，粗暴对待他人之人，拳击手，拳头。
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgheadline5&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgheadline5&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;3&lt;/span&gt; Example&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-3&quot;&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;He was mauled by a tiger. Il a été mis en pièces par un tiger&lt;sup&gt;(fr)&lt;/sup&gt;. 他被老虎袭击。&lt;/li&gt;
&lt;li&gt;She died after being mauled by a tiger. 被老虎袭击后她死了。&lt;/li&gt;
&lt;li&gt;Her novel has been badly mauled by the critics. 她的小说横遭批评家抨击。&lt;/li&gt;
&lt;li&gt;Tigers maul woman to death and wound another at Chinese Wildlife Park.&lt;sup&gt;&lt;a id=&quot;fnr.2&quot; class=&quot;footref&quot; href=&quot;#fn.2&quot;&gt;2&lt;/a&gt;&lt;/sup&gt;&lt;/li&gt;
&lt;li&gt;Sharks in South Africa that regularly maul people are now facing
extinction.&lt;sup&gt;&lt;a id=&quot;fnr.3&quot; class=&quot;footref&quot; href=&quot;#fn.3&quot;&gt;3&lt;/a&gt;&lt;/sup&gt; 据本周发布的调研结果显示，南非大白鲨数量骤减，面临灭绝风险。&lt;/li&gt;
&lt;li&gt;The South African coast is notorious for shark attacks, with regular cases of
deadly mauling of surfers and swimmers.&lt;sup&gt;&lt;a id=&quot;fnr.3.100&quot; class=&quot;footref&quot; href=&quot;#fn.3&quot;&gt;3&lt;/a&gt;&lt;/sup&gt;&lt;/li&gt;
&lt;li&gt;Rampant Lions maul Crusaders. &lt;sup&gt;&lt;a id=&quot;fnr.4&quot; class=&quot;footref&quot; href=&quot;#fn.4&quot;&gt;4&lt;/a&gt;&lt;/sup&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;footnotes&quot;&gt;
&lt;h2 class=&quot;footnotes&quot;&gt;Footnotes: &lt;/h2&gt;
&lt;div id=&quot;text-footnotes&quot;&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.1&quot; class=&quot;footnum&quot; href=&quot;#fnr.1&quot;&gt;1&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;http://www.bbc.com/news/world-asia-china-36877836&quot;&gt;http://www.bbc.com/news/world-asia-china-36877836&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.2&quot; class=&quot;footnum&quot; href=&quot;#fnr.2&quot;&gt;2&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;http://vegassports-odds.com/2016/07/tigers-maul-woman-to-death-and-wound-another-at-chinese/&quot;&gt;http://vegassports-odds.com/2016/07/tigers-maul-woman-to-death-and-wound-another-at-chinese/&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.3&quot; class=&quot;footnum&quot; href=&quot;#fnr.3&quot;&gt;3&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;http://www.thejournal.ie/sharks-decline-maul-2891009-Jul2016/&quot;&gt;http://www.thejournal.ie/sharks-decline-maul-2891009-Jul2016/&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.4&quot; class=&quot;footnum&quot; href=&quot;#fnr.4&quot;&gt;4&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;http://www.sport24.co.za/Rugby/SuperRugby/rampant-lions-maul-crusaders-20160723&quot;&gt;http://www.sport24.co.za/Rugby/SuperRugby/rampant-lions-maul-crusaders-20160723&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;


&lt;/div&gt;
&lt;/div&gt;
</content>
 </entry>
 
 <entry>
   <title>单词本：不许抄袭</title>
   <link href="http://kimi.im/2016-07-19-english-plagiarize"/>
   <updated>2016-07-19T00:00:00+00:00</updated>
   <id>http://kimi.im/english-plagiarize</id>
   <content type="html">&lt;p&gt;
昨天大概是特朗普的名模妻子 Melania 在共和党代表大会上演讲，为自己的丈夫塑造温情的一面。这事情听起来好像挺好的，可是演讲稿的撰写团队 C&amp;amp;P 了部分奥巴马妻子的演讲内容，于是各大媒体纷纷报道说她涉嫌抄袭。感觉好像是因为特朗普的地产大亨的身份，不怎么被大众待见，所以呢，被媒体纷纷报道嘲讽。
&lt;/p&gt;

&lt;p&gt;
当然了，本文的重点不是关注名模 Melania 是不是身材好没内涵。本文的重点是
plagiarize（抄袭）这个单词。
&lt;/p&gt;

&lt;div id=&quot;outline-container-orgheadline1&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgheadline1&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;1&lt;/span&gt; plagiarize&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-1&quot;&gt;
&lt;p&gt;
也写成 plagiarise，就好像 analyze analyse 一样。但是我不知道 -se 和 -ze 有什么细微区别没有。
&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;
Pronunciation: &lt;i&gt;ˈpleɪdʒərʌɪz&lt;/i&gt;
&lt;/p&gt;

&lt;p&gt;
Take (the work or an idea of someone else) and pass it off as one’s own.
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;
动词，剽窃，抄袭，作弊，拾人牙慧，拾人涕唾。
&lt;/p&gt;

&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;Donald Trump&apos;s wife, Melania, took centre stage on the first day of the
Republican National Convention but faced accusations that a portion of her
speech &lt;i&gt;plagiarised&lt;/i&gt; Michelle Obama.&lt;sup&gt;&lt;a id=&quot;fnr.1&quot; class=&quot;footref&quot; href=&quot;#fn.1&quot;&gt;1&lt;/a&gt;&lt;/sup&gt;&lt;/li&gt;
&lt;li&gt;Did Melania Trump &lt;i&gt;plagiarise&lt;/i&gt; Michelle Obama in her Republican Convention 2016
speech?&lt;sup&gt;&lt;a id=&quot;fnr.2&quot; class=&quot;footref&quot; href=&quot;#fn.2&quot;&gt;2&lt;/a&gt;&lt;/sup&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;


&lt;div id=&quot;outline-container-orgheadline2&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgheadline2&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;2&lt;/span&gt; Origin / 源&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-2&quot;&gt;
&lt;blockquote&gt;
&lt;p&gt;
In the 1st century, the use of the Latin word plagiarius (literally kidnapper)
to denote stealing someone else&apos;s work was pioneered by the Roman poet Martial,
who complained that another poet had &quot;kidnapped his verses&quot;. &quot;Plagiary&quot;, a
derivative of &quot;plagiarus&quot; was introduced into English in 1601 by dramatist Ben
Jonson to describe someone guilty of literary theft. &lt;sup&gt;&lt;a id=&quot;fnr.3&quot; class=&quot;footref&quot; href=&quot;#fn.3&quot;&gt;3&lt;/a&gt;&lt;/sup&gt;
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;
plagiarise 源自拉丁语 plagiarius，本意是绑架的意思。罗马诗人 Martial 抱怨他人绑架了他的诗歌。后来就被用来表示抄袭了。
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgheadline3&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgheadline3&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;3&lt;/span&gt; Derivation / 衍&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-3&quot;&gt;
&lt;p&gt;
plagiarism：抄袭行为
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;Melania Trump found herself at the centre of a &lt;i&gt;plagiarism&lt;/i&gt; row after it
appeared she had lifted a section of a speech by Michelle Obama.&lt;sup&gt;&lt;a id=&quot;fnr.2.100&quot; class=&quot;footref&quot; href=&quot;#fn.2&quot;&gt;2&lt;/a&gt;&lt;/sup&gt;&lt;/li&gt;
&lt;li&gt;The Trump campaign has denied accusations of plagiarism.&lt;sup&gt;&lt;a id=&quot;fnr.4&quot; class=&quot;footref&quot; href=&quot;#fn.4&quot;&gt;4&lt;/a&gt;&lt;/sup&gt;&lt;/li&gt;
&lt;li&gt;Trump campaign chairman denies Melania &lt;i&gt;plagiarism&lt;/i&gt; allegations.&lt;sup&gt;&lt;a id=&quot;fnr.5&quot; class=&quot;footref&quot; href=&quot;#fn.5&quot;&gt;5&lt;/a&gt;&lt;/sup&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
plagiaristic: 有抄袭行为的
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;Did Bill Clinton tweak Biden&apos;s &lt;i&gt;plagiaristic&lt;/i&gt; past? Number of pages into Bill
Clinton&apos;s &quot;Back to Work&quot; where one finds a curious comment about Joe
Biden.&lt;sup&gt;&lt;a id=&quot;fnr.6&quot; class=&quot;footref&quot; href=&quot;#fn.6&quot;&gt;6&lt;/a&gt;&lt;/sup&gt; 克林顿在他的书中揭露了 Biden 的有抄袭行为的过去？原文是这么说的：“Vice President Biden &amp;#x2013; whose speeches provided much of the same information
and made many of the same arguments mine did &amp;#x2026;”&lt;sup&gt;&lt;a id=&quot;fnr.6.100&quot; class=&quot;footref&quot; href=&quot;#fn.6&quot;&gt;6&lt;/a&gt;&lt;/sup&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
plagiarist: 抄袭者
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;Donald Trump’s campaign chairman says Melania Trump is no &lt;i&gt;plagiarist&lt;/i&gt; — she
just shares “common” values with the first lady and other Americans.&lt;sup&gt;&lt;a id=&quot;fnr.5.100&quot; class=&quot;footref&quot; href=&quot;#fn.5&quot;&gt;5&lt;/a&gt;&lt;/sup&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
plagiary: 抄袭行为，应该和 plagiarism 一个意思，但是好像后者用的比较广泛。
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;The sin of &lt;i&gt;plagiary&lt;/i&gt; is a development of modern civilisation.&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgheadline4&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgheadline4&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;4&lt;/span&gt; MultiLanguage&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-4&quot;&gt;
&lt;p&gt;
法语和英语同源，都来自拉丁语，只是略微有点变化：plagier
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;La polémique enfle déjà. Montée sur scène lundi 18 juillet lors de la
convention républicaine pour soutenir la candidature de son époux, Melania
Trump est accusée d&apos;avoir &lt;i&gt;plagié&lt;/i&gt; des passages d&apos;un discours de Michelle Obama,
prononcée en 2008.&lt;sup&gt;&lt;a id=&quot;fnr.7&quot; class=&quot;footref&quot; href=&quot;#fn.7&quot;&gt;7&lt;/a&gt;&lt;/sup&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
德语新闻里用 plagiieren。不过我也看到有直接用 klauen Zitate/Rede（偷窃引文/演讲）的。
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;Melania muss Obamas Rede von 2008 gemocht haben, wenn sie sie schon plagiiert.&lt;sup&gt;&lt;a id=&quot;fnr.8&quot; class=&quot;footref&quot; href=&quot;#fn.8&quot;&gt;8&lt;/a&gt;&lt;/sup&gt;&lt;/li&gt;
&lt;li&gt;Trumps Ehefrau &lt;i&gt;klaut Rede&lt;/i&gt; von Michelle Obama.&lt;sup&gt;&lt;a id=&quot;fnr.9&quot; class=&quot;footref&quot; href=&quot;#fn.9&quot;&gt;9&lt;/a&gt;&lt;/sup&gt;&lt;/li&gt;
&lt;li&gt;Trumps Ehefrau Melania scheitert beim Parteitag der US-Republikaner daran,
ihren Mann sympathischer wirken zu lassen. Alles dreht sich um &lt;i&gt;geklaute Zitate&lt;/i&gt;
von Michelle Obama.&lt;sup&gt;&lt;a id=&quot;fnr.10&quot; class=&quot;footref&quot; href=&quot;#fn.10&quot;&gt;10&lt;/a&gt;&lt;/sup&gt;&lt;/li&gt;
&lt;li&gt;Melania Trump in der Plagiatsfalle.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
总之，大家都是从拉丁语抄袭来的，英国人抄袭成了 plagiarize，法国人抄袭成了plagier，德国人抄袭成了 plagiieren。抄袭的时候既保留了原词的样子，有添加了本国人的语言习惯。就像以前上课前抄同学的答案，抄的过程中纠正了错误的答案，结果比被抄袭的同学分数好一些。实在是有些无耻的。
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;footnotes&quot;&gt;
&lt;h2 class=&quot;footnotes&quot;&gt;Footnotes: &lt;/h2&gt;
&lt;div id=&quot;text-footnotes&quot;&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.1&quot; class=&quot;footnum&quot; href=&quot;#fnr.1&quot;&gt;1&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;http://www.bbc.com/news/election-us-2016-36832095&quot;&gt;http://www.bbc.com/news/election-us-2016-36832095&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.2&quot; class=&quot;footnum&quot; href=&quot;#fnr.2&quot;&gt;2&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;http://www.telegraph.co.uk/news/2016/07/19/did-melania-trump-plagiarise-michelle-obama-in-her-republican-co/&quot;&gt;http://www.telegraph.co.uk/news/2016/07/19/did-melania-trump-plagiarise-michelle-obama-in-her-republican-co/&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.3&quot; class=&quot;footnum&quot; href=&quot;#fnr.3&quot;&gt;3&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;https://en.wikipedia.org/wiki/Plagiarism&quot;&gt;https://en.wikipedia.org/wiki/Plagiarism&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.4&quot; class=&quot;footnum&quot; href=&quot;#fnr.4&quot;&gt;4&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;https://www.theguardian.com/us-news/2016/jul/19/melania-trump-republican-convention-plagiarism-michelle-obama&quot;&gt;https://www.theguardian.com/us-news/2016/jul/19/melania-trump-republican-convention-plagiarism-michelle-obama&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.5&quot; class=&quot;footnum&quot; href=&quot;#fnr.5&quot;&gt;5&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;http://www.nydailynews.com/news/politics/trump-campaign-chairman-denies-melania-plagiarism-allegations-article-1.2716904&quot;&gt;http://www.nydailynews.com/news/politics/trump-campaign-chairman-denies-melania-plagiarism-allegations-article-1.2716904&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.6&quot; class=&quot;footnum&quot; href=&quot;#fnr.6&quot;&gt;6&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;https://www.bloomberg.com/view/articles/2011-11-09/did-bill-clinton-tweak-biden-s-plagiaristic-past-the-ticker&quot;&gt;https://www.bloomberg.com/view/articles/2011-11-09/did-bill-clinton-tweak-biden-s-plagiaristic-past-the-ticker&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.7&quot; class=&quot;footnum&quot; href=&quot;#fnr.7&quot;&gt;7&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;http://www.france24.com/fr/20160719-us-etats-unis-melania-trump-plagie-discours-michelle-obama-convention-republicaine-clevelan&quot;&gt;http://www.france24.com/fr/20160719-us-etats-unis-melania-trump-plagie-discours-michelle-obama-convention-republicaine-clevelan&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.8&quot; class=&quot;footnum&quot; href=&quot;#fnr.8&quot;&gt;8&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;http://www.watson.ch/International/USA/645401161-Melania-Trump-h%C3%A4lt-ihre-erste-grosse-Rede-%E2%80%93-und-klaut-mehrere-Abs%C3%A4tze-von-Michelle-Obama&quot;&gt;http://www.watson.ch/International/USA/645401161-Melania-Trump-h%C3%A4lt-ihre-erste-grosse-Rede-%E2%80%93-und-klaut-mehrere-Abs%C3%A4tze-von-Michelle-Obama&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.9&quot; class=&quot;footnum&quot; href=&quot;#fnr.9&quot;&gt;9&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;http://www.20min.ch/community/stories/story/Trumps-Ehefrau-klaut-Rede-von-Michelle-Obama-15065340&quot;&gt;http://www.20min.ch/community/stories/story/Trumps-Ehefrau-klaut-Rede-von-Michelle-Obama-15065340&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.10&quot; class=&quot;footnum&quot; href=&quot;#fnr.10&quot;&gt;10&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;http://www.newsdeutschland.com/n/Top/759phpchs/Melania-Trump-in-der-Plagiatsfalle.htm&quot;&gt;http://www.newsdeutschland.com/n/Top/759phpchs/Melania-Trump-in-der-Plagiatsfalle.htm&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;


&lt;/div&gt;
&lt;/div&gt;
</content>
 </entry>
 
 <entry>
   <title>单词本：德语单词 Putsch</title>
   <link href="http://kimi.im/2016-07-18-deutsch-putsch"/>
   <updated>2016-07-18T00:00:00+00:00</updated>
   <id>http://kimi.im/deutsch-putsch</id>
   <content type="html">&lt;p&gt;
虽然标题是德语单词 Putsch，但其实主要还是学习英语单词 putsch 和 coup。
&lt;/p&gt;

&lt;p&gt;
自从上周五晚上土耳其发生武装政变（Militärputsch）以来，就滔滔不绝的关于土耳其政变的新闻。其实我最早看到这次政变的新闻标题是用的 coup d&apos;état 这个单词。总之
putsch 和 coup d&apos;état 都出现在英语新闻中，比如：
&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;
A coup d&apos;état attempt took place in Turkey on 15 July 2016. It is believed it
was done by part of the Turkish Armed Forces.
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;
又比如：
&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;
Turkey&apos;s Putsch and the Democratic Dilemma.
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;
所以我一开始也选不好标题，到底是该定这篇文章的主题为 putsch 呢，还是 coup d&apos;état？无论如何，这两个词对我来说都是新单词，所以就一起来学一学好了。
&lt;/p&gt;

&lt;div id=&quot;outline-container-orgheadline1&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgheadline1&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;1&lt;/span&gt; Putsch&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-1&quot;&gt;
&lt;p&gt;
很明显，Putsch 对英语来说是个外来词。尽管在英语词典里有 putsch 这个词，但是追根溯源，还是来自德语：
&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;
A sudden attempt by a group to overthrow a government. From German Putsch.
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;
其实有一个小技巧可以很容易区分是不是德语单词，就像 Deutsch 一样，有 -tsch 结尾的单词，一般来说都来自德国（Deutschland）。
&lt;/p&gt;

&lt;p&gt;
那么在德语里，Der Putsch 有两个意思：
&lt;/p&gt;

&lt;blockquote&gt;
&lt;ol class=&quot;org-ol&quot;&gt;
&lt;li&gt;Von einer kleineren Gruppe [von Militärs] durchgeführter Umsturz[versuch] zur
Übernahme der Staatsgewalt&lt;/li&gt;
&lt;li&gt;Stoß&lt;/li&gt;
&lt;/ol&gt;
&lt;/blockquote&gt;

&lt;p&gt;
第一，一小撮军方发起的夺权行动，即政变。第二，重击。我们后面会知道，coup 在法语里也是重击的意思。所以，英语里博采众长，coup 和 putsch 都采纳进来了。
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgheadline2&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgheadline2&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;2&lt;/span&gt; Coup d&apos;état&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-2&quot;&gt;
&lt;p&gt;
再一次很明显，这个词组来自法语，带小帽子的 é 出卖了它。
&lt;/p&gt;

&lt;p&gt;
让我们回过头来先看看在英语词典里 coup 是什么意思：
&lt;/p&gt;

&lt;p&gt;
surprising and successful action. 意外并且成功的行动。比如 She pulled off a
great coup in getting the president to agree to an interview. 她成功办到让总统接受她的采访。注意，因为 coup 是从法语里面借来的，所以保留了法语发音，结尾p 是不发音的，coup 读作 [kuː]，great [kuː]，伟大的酷。重要的事情说三遍。
&lt;/p&gt;

&lt;p&gt;
言归正传，coup d&apos;état 就是所谓的政变，复数形式的 -s 要加在 coup 后面，写作 coup
d&apos;état。发音也仿照法语读作 [kuː dei &apos;ta] 或者快一些 [ku de &apos;ta]。顺便提一下，英语中还引入了 coup 的另一个词组 coup de grâce，这个词指的是”出于好意使其免遭痛苦的致命一击“，比如 Poor exam results dealt the coup de grâce to his hopes of
becoming a PhD. 对了，还是要注意 coup de grâce 得用法语发音：[ku də ɡrɑː]。
&lt;/p&gt;

&lt;p&gt;
好了，现在我们转入法语部分，coup 这个词在法语里是 blow&lt;sup&gt;en&lt;/sup&gt; 重击的意思： Il a pris
un coup sur la tête. 他敲了他的头。Il m&apos;a donné un coup. 他撞了我一下。
&lt;/p&gt;

&lt;p&gt;
coup 组成的词组还是挺有意思的比如：
&lt;/p&gt;

&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;à coup sûr 必须的，肯定的，definitely&lt;/li&gt;
&lt;li&gt;dans le coup, être dans le coup: know all about it. mettre qn dans le coup: to
get sb involved. 把某人牵扯进来。&lt;/li&gt;
&lt;li&gt;du coup: as a result&lt;/li&gt;
&lt;li&gt;du premier coup: 一击必胜。Il a eu son permis de conduire du premier coup. 他一把就通过了驾驶考试。&lt;/li&gt;
&lt;li&gt;tout à coup, tout d&apos;un coup: all of a sudden&lt;/li&gt;
&lt;li&gt;valoir le coup: 值得一试。ça vaut le coup. It&apos;s worth it. c&apos;est un film qui
vaut le coup. 那电影值得一看。&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgheadline3&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgheadline3&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;3&lt;/span&gt; Example / 例&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-3&quot;&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;The Turkish army has historically intervened in politics as it sees itself as
the protector of Turkey&apos;s secularism and democracy - there have been four
military &lt;i&gt;coups&lt;/i&gt; since 1960. 英语里 coup d&apos;état 也可以简写为 coup，military
coup。&lt;/li&gt;
&lt;li&gt;Soon after, Prime Minister Binali Yildirim announced that an attempt to
overthrow the government was under way. 英语里直白的话就用 an attempt to
overthrow the goverment，稍微繁琐一些，但很明白易懂。&lt;/li&gt;
&lt;li&gt;Purge générale en Turquie après le putsch manqué de la nuit du vendredi 15 au
samedi 16 juillet. 法语里也有用 le putsch 表示政变的。&lt;/li&gt;
&lt;li&gt;Le Premier ministre a d&apos;autre part annoncé la mort de de 308 personnes dans la
tentative de coup d&apos;État : 60 policiers, trois soldats et 145 civils. 法语里
coup d&apos;État 中 état 的首字母是大写的。&lt;/li&gt;
&lt;li&gt;Mehr als 250 Menschen sind tot, mehr als 1000 wurden beim Putschversuch in der
Türkei verletzt - Präsident Recep Tayyip Erdoğan antwortet mit
Härte.&lt;/li&gt;
&lt;li&gt;Nun ist Akın Öztürk in Haft. Er soll beim Putschversuch eine zentrale Rolle
gespielt haben. Putschversuch 政变企图，coup attempt。&lt;/li&gt;
&lt;li&gt;Akın Öztürk dementierte, ein &lt;i&gt;Putschist&lt;/i&gt; zu sein. Akın 否认自己是一个政变者。
Putschist 政变者，insurgent&lt;sup&gt;en&lt;/sup&gt;。&lt;/li&gt;
&lt;li&gt;After a night which saw &lt;i&gt;putschist&lt;/i&gt; troops fire into crowds of loyalist
civilians, the government announces it has foiled the attempt and regained
complete control of the country.&lt;sup&gt;&lt;a id=&quot;fnr.1&quot; class=&quot;footref&quot; href=&quot;#fn.1&quot;&gt;1&lt;/a&gt;&lt;/sup&gt; 英语里也有。&lt;/li&gt;
&lt;li&gt;Der versuchte Staatsstreich begann demnach auf der Militärbasis Akıncı bei
Ankara, die der Schwiegersohn von Öztürk kontrollierte. 德语里也有直白一点的说法 der versuchte Staatsstreich，政变企图。&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;footnotes&quot;&gt;
&lt;h2 class=&quot;footnotes&quot;&gt;Footnotes: &lt;/h2&gt;
&lt;div id=&quot;text-footnotes&quot;&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.1&quot; class=&quot;footnum&quot; href=&quot;#fnr.1&quot;&gt;1&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;http://www.dailymail.co.uk/news/article-3693332/Trapped-fire-collapse-terrorism-recession-left-popular-Turkish-president-battling-fronts-decade-unprecedented-growth.html&quot;&gt;http://www.dailymail.co.uk/news/article-3693332/Trapped-fire-collapse-terrorism-recession-left-popular-Turkish-president-battling-fronts-decade-unprecedented-growth.html&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;


&lt;/div&gt;
&lt;/div&gt;
</content>
 </entry>
 
 <entry>
   <title>单词本：英语单词 arbitration</title>
   <link href="http://kimi.im/2016-07-17-english-arbitration"/>
   <updated>2016-07-17T00:00:00+00:00</updated>
   <id>http://kimi.im/english-arbitration</id>
   <content type="html">&lt;blockquote&gt;
&lt;p&gt;
The South China Sea Arbitration: Illegal, Illegitimate and Invalid&lt;sup&gt;&lt;a id=&quot;fnr.1&quot; class=&quot;footref&quot; href=&quot;#fn.1&quot;&gt;1&lt;/a&gt;&lt;/sup&gt;
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;
为什么我们可以说南海仲裁是非法的，违法的并且无效的？那得先从仲裁（arbitration）的定义说起。在学习这个单词之前，先引用一段庄子《齐物论》：
&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;
既使我与若辩矣，若胜我，我不若胜，若果是也，我果非也邪？我胜若，若不吾胜，我果是也，而果非也邪？其或是也，其或非也邪？其俱是也，其俱非也邪？我与若不能相知也，则人固受其黮闇，吾谁使正之？使同乎若者正之？既与若同矣，恶能正之！使同乎我者正之？既同乎我矣，恶能正之！使异乎我与若者正之？既异乎我与若矣，恶能正之！使同乎我与若者正之？既同乎我与若矣，恶能正之！然则我与若与人，俱不能相知也，而待彼也邪？化声之相待，若其不相待，和之以天倪，因之以曼衍，所以穷年也。
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;
这段话的大致意思是两个人争论不分胜负，这时候去找一个第三方来仲裁，但是第三方可能和你观点一样，可能和我观点一样，也可能和你我观点都不一样或者都一样，这样你和我还有第三方那个人都没法下定论了。
&lt;/p&gt;

&lt;p&gt;
《齐物论》说的：人固受其黮闇，吾谁使正之，此正之者即仲裁者也。
&lt;/p&gt;

&lt;p&gt;
言归正传，先来学习学习 arbitration 这个单词。
&lt;/p&gt;

&lt;div id=&quot;outline-container-orgheadline1&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgheadline1&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;1&lt;/span&gt; arbitration&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-1&quot;&gt;
&lt;blockquote&gt;
&lt;p&gt;
Settling of a dispute by a person or people chosen to do this by both sides in
the dispute.
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;
定义非常清晰：经争端双方要求选择中间人解决争端。
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgheadline2&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgheadline2&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;2&lt;/span&gt; Etymology / 源&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-2&quot;&gt;
&lt;p&gt;
arbitration 来自拉丁语 arbitratus, arbitrari&lt;sup&gt;latin&lt;/sup&gt; （作为见证者）的过去分词。
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgheadline3&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgheadline3&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;3&lt;/span&gt; Derivation / 衍&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-3&quot;&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;abiter &amp;amp; arbitrator：仲裁人，裁决人。不过 arbiter 还有权威人士之意。比如 the
arbiters of the fashion. 在计算机里，内存、总线的仲裁用 abiter 这个词，比如
memory access arbiter, bus arbiter.
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;Television and film, not Vogue and similar magazines, are the arbiters of
fashion.&lt;/li&gt;
&lt;li&gt;Tiffany markets itself as an arbiter of taste and style. &lt;sup&gt;&lt;a id=&quot;fnr.2&quot; class=&quot;footref&quot; href=&quot;#fn.2&quot;&gt;2&lt;/a&gt;&lt;/sup&gt;蒂芙尼市场推广自己是品味和风格的权威。&lt;/li&gt;
&lt;li&gt;A memory arbiter is a device used in a shared memory system to decide, for
each memory cycle, which CPU will be allowed to access that shared memory.&lt;/li&gt;
&lt;li&gt;A multiport access memory arbiter was designed to arbitrate the memory
access competition between MCU and several inner modules of FPGA.&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;arbitrary：任意、任性、主观的。霸道、专横、独断的。
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;When the return value of a function is always an arbitrary value, you should
check whether there is any variable not initialized.&lt;/li&gt;
&lt;li&gt;DMA is a feature that permits certain hardware devices to access arbitrary
physical memory addresses in the host computer.&lt;/li&gt;
&lt;li&gt;The choice of our boss seems completely arbitrary.&lt;/li&gt;
&lt;li&gt;This already turns our Constitution into something dependent on his
arbitrary will.&lt;/li&gt;
&lt;li&gt;The way this Trump campaign feels is what arbitrary power feels like. This
is what a Trump presidency would feel like, too.&lt;/li&gt;
&lt;li&gt;One reason constitutional government is such an extremely valuable
possession is because it lessens the uncertainty of the social world. The
point of having a constitution is to get rid of arbitrary power.&lt;sup&gt;&lt;a id=&quot;fnr.3&quot; class=&quot;footref&quot; href=&quot;#fn.3&quot;&gt;3&lt;/a&gt;&lt;/sup&gt;&lt;/li&gt;
&lt;li&gt;not representing any specific value in Maths: an arbitrary constant.&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;arbitrate：仲裁的动词，做出仲裁。
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;Instead of ushering in external forces, why not let the facts arbitrate?&lt;sup&gt;&lt;a id=&quot;fnr.4&quot; class=&quot;footref&quot; href=&quot;#fn.4&quot;&gt;4&lt;/a&gt;&lt;/sup&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgheadline4&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgheadline4&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;4&lt;/span&gt; MultiLanguage / 异&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-4&quot;&gt;
&lt;p&gt;
arbitrate: arbitrer&lt;sup&gt;fr&lt;/sup&gt;, schlichten&lt;sup&gt;de&lt;/sup&gt;
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;Dans la pratique, ces lois religieuses sont utilisées pour arbitrer les
conflits personnels.&lt;/li&gt;
&lt;li&gt;Il a fallu arbitrer entre rapidité, parfois même précipitation, et qualité.&lt;/li&gt;
&lt;li&gt;Ich will, dass Sie einen Streit schlichten.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
arbitrary: arbitraire&lt;sup&gt;fr&lt;/sup&gt;, willkürlich&lt;sup&gt;de&lt;/sup&gt;
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;Mann macht willkürlich fremden Frauen in Japan einen Antrag - ohne ein Wort
Japanisch sprechen zu können.&lt;sup&gt;&lt;a id=&quot;fnr.5&quot; class=&quot;footref&quot; href=&quot;#fn.5&quot;&gt;5&lt;/a&gt;&lt;/sup&gt;&lt;/li&gt;
&lt;li&gt;Sie kann willkürlich Tränen produzieren.&lt;/li&gt;
&lt;li&gt;Ainsi, ils ne sont, par exemple, plus exposés aux risques de décision
arbitraire de la police.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
arbitration: l&apos;arbitrage&lt;sup&gt;fr&lt;/sup&gt;, Schiedsspruch&lt;sup&gt;de&lt;/sup&gt;
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;Toute décision opportuniste, que ce soit de la part des Etats-Unis, des
Philippines ou de la Cour permanente d&apos;arbitrage, s&apos;avérera vaine en
définitive.&lt;sup&gt;&lt;a id=&quot;fnr.6&quot; class=&quot;footref&quot; href=&quot;#fn.6&quot;&gt;6&lt;/a&gt;&lt;/sup&gt;&lt;/li&gt;
&lt;li&gt;Ausländische Experten sehen Schiedsspruch zum Fall im Südchinesischen Meer als
politische Farce.&lt;sup&gt;&lt;a id=&quot;fnr.7&quot; class=&quot;footref&quot; href=&quot;#fn.7&quot;&gt;7&lt;/a&gt;&lt;/sup&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
最后套用上周去上海参加的《Presentation to management team》学到的概念：The
competition in the world is mainly the competition of power of redefinition. 中国应对南海仲裁的办法就是重新定义海牙仲裁法庭的合法性问题，从根本上否决仲裁结果。
&lt;/p&gt;

&lt;p&gt;
With that in mind, people may still wonder, if China is so justified, why China
does not accept or participate in the arbitration? The Torah teaches: “Distance
yourself from that which is false.” The arbitration is totally a false
issue.&lt;sup&gt;&lt;a id=&quot;fnr.4.100&quot; class=&quot;footref&quot; href=&quot;#fn.4&quot;&gt;4&lt;/a&gt;&lt;/sup&gt;
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;footnotes&quot;&gt;
&lt;h2 class=&quot;footnotes&quot;&gt;Footnotes: &lt;/h2&gt;
&lt;div id=&quot;text-footnotes&quot;&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.1&quot; class=&quot;footnum&quot; href=&quot;#fnr.1&quot;&gt;1&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;http://www.chinadaily.com.cn/world/////2016-07/12/content_26060747.htm&quot;&gt;http://www.chinadaily.com.cn/world/////2016-07/12/content_26060747.htm&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.2&quot; class=&quot;footnum&quot; href=&quot;#fnr.2&quot;&gt;2&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;http://www.fyvor.com/coupons/tiffany-co-/&quot;&gt;http://www.fyvor.com/coupons/tiffany-co-/&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.3&quot; class=&quot;footnum&quot; href=&quot;#fnr.3&quot;&gt;3&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;https://www.washingtonpost.com/opinions/donald-trumps-thirst-for-arbitrary-power/2016/03/07/505129bc-e3a3-11e5-a6f3-21ccdbc5f74e_story.html&quot;&gt;https://www.washingtonpost.com/opinions/donald-trumps-thirst-for-arbitrary-power/2016/03/07/505129bc-e3a3-11e5-a6f3-21ccdbc5f74e_story.html&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.4&quot; class=&quot;footnum&quot; href=&quot;#fnr.4&quot;&gt;4&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;http://www.jpost.com/Opinion/Let-the-facts-arbitrate-454791&quot;&gt;http://www.jpost.com/Opinion/Let-the-facts-arbitrate-454791&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.5&quot; class=&quot;footnum&quot; href=&quot;#fnr.5&quot;&gt;5&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;http://www.focus.de/&quot;&gt;http://www.focus.de/&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.6&quot; class=&quot;footnum&quot; href=&quot;#fnr.6&quot;&gt;6&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;http://www.chinadaily.com.cn/chinawatch_fr/2016-07/12/content_26062016.htm&quot;&gt;http://www.chinadaily.com.cn/chinawatch_fr/2016-07/12/content_26062016.htm&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.7&quot; class=&quot;footnum&quot; href=&quot;#fnr.7&quot;&gt;7&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;http://german.people.com.cn/n3/2016/0715/c209052-9086782.html&quot;&gt;http://german.people.com.cn/n3/2016/0715/c209052-9086782.html&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;


&lt;/div&gt;
&lt;/div&gt;
</content>
 </entry>
 
 <entry>
   <title>单词本：德语单词 auskommen</title>
   <link href="http://kimi.im/2016-07-17-deutsch-auskommen"/>
   <updated>2016-07-17T00:00:00+00:00</updated>
   <id>http://kimi.im/deutsch-auskommen</id>
   <content type="html">&lt;p&gt;
前几天公众号订阅好友花花同学提议说希望多增加一些德语单词学习的文章，其实我的生词本里也累计了不少德语单词的，但是本人德语学的太差，就任由长长的生词列表慢慢的增长而没有采取什么积极的行动去消灭它们。有人提议要增加德语学习的比重，那对我来说是最好的激励了，所以就努力去把手头的生词列表消灭掉吧。
&lt;/p&gt;

&lt;p&gt;
很久很久以前，遇到了 auskommen 这个单词，我把它摘录到生词列表中。它就一直躺在那里，渐渐发霉。直到今天，才拎出来钻研学习它。
&lt;/p&gt;

&lt;div id=&quot;outline-container-orgheadline1&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgheadline1&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;1&lt;/span&gt; auskommen&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-1&quot;&gt;
&lt;p&gt;
首先，首字母大写的 Auskommen 是一个中性名词，意为生计（livelihood）或者说是收入、工资。这和英语里的 income 差不多。只是有点奇怪的是 income 很容易理解是 in（入）+
come，而 Auskommen 则是 aus（出）+kommen。大概可以这样理解吧。前者是收入，而后者是产出。有了产出才会有收入吧。当然了，后文中我们会知道，auskommen 是过活的意思，也可以理解为可以用来养活自己的东西。
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;Ich habe ein gutes Auskommen. 我收入还不错。&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
然后呢，auskommen 也是一个动词：合得来，适应的意思。
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;Ich komme gut mit meine Frau aus. 我和太太相处的很融洽。&lt;/li&gt;
&lt;li&gt;Sie kommt ohne Sport nicht aus. 不运动她就难受。&lt;/li&gt;
&lt;li&gt;Wir kommen gut miteinander aus. Nous nous entendons bien l’un avec l’autre&lt;sup&gt;fr&lt;/sup&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgheadline5&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgheadline5&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;2&lt;/span&gt; Derivation / 衍&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-2&quot;&gt;
&lt;/div&gt;&lt;div id=&quot;outline-container-orgheadline2&quot; class=&quot;outline-3&quot;&gt;
&lt;h3 id=&quot;orgheadline2&quot;&gt;&lt;span class=&quot;section-number-3&quot;&gt;2.1&lt;/span&gt; aus&amp;#x2026;kommen&lt;/h3&gt;
&lt;div class=&quot;outline-text-3&quot; id=&quot;text-2-1&quot;&gt;
&lt;p&gt;
可能需要注意的地方是，另外一个组合 aus&amp;#x2026;kommen和auskommen是不一样的。
aus&amp;#x2026;kommen经常用在自我介绍上，比如：
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;Meine Frau kommt aus der Schweiz. 我太太来自瑞士。&lt;/li&gt;
&lt;li&gt;Das Mädchen kommt aus den Philippinen.&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgheadline3&quot; class=&quot;outline-3&quot;&gt;
&lt;h3 id=&quot;orgheadline3&quot;&gt;&lt;span class=&quot;section-number-3&quot;&gt;2.2&lt;/span&gt; auskömmlich&lt;/h3&gt;
&lt;div class=&quot;outline-text-3&quot; id=&quot;text-2-2&quot;&gt;
&lt;p&gt;
形容词：足够的，充裕的，合理的。adequate, sufficient, reasonable.
&lt;/p&gt;

&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;Obwohl die Preise für Zementprodukte im Jahr 2005 im Durchschnitt um 10%
erhöht werden konnten, sind diese immer noch nicht auskömmlich. 尽管水泥产品价格会涨 10%，却仍然不足。&lt;/li&gt;
&lt;li&gt;Trotz zunehmender Belastungen von der Währungsseite bleibt das
weltwirtschaftliche Umfeld für die deutsche Wirtschaft auskömmlich. 尽管有流动性压力，世界经济环境对德国经济来说还是合理的。&lt;/li&gt;
&lt;li&gt;Allerdings sind die Preise immer noch nicht auskömmlich. However, the prices
are still not adequate.&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgheadline4&quot; class=&quot;outline-3&quot;&gt;
&lt;h3 id=&quot;orgheadline4&quot;&gt;&lt;span class=&quot;section-number-3&quot;&gt;2.3&lt;/span&gt; Auskömmlichkeit&lt;/h3&gt;
&lt;div class=&quot;outline-text-3&quot; id=&quot;text-2-3&quot;&gt;
&lt;p&gt;
Die Auskömmlichkeit。名词：充裕性。
&lt;/p&gt;

&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;Die Auskömmlichkeit wird durch regelmäßige aktuarielle Untersuchungen
überprüft.&lt;/li&gt;
&lt;li&gt;Die Auskömmlichkeit von Angeboten ist nicht immer leicht zu ermittlen.&lt;sup&gt;&lt;a id=&quot;fnr.1&quot; class=&quot;footref&quot; href=&quot;#fn.1&quot;&gt;1&lt;/a&gt;&lt;/sup&gt;供给的充裕性总是不太容易估算。&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgheadline6&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgheadline6&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;3&lt;/span&gt; Afterword / 跋&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-3&quot;&gt;
&lt;p&gt;
学习新单词的乐趣之一就不经意间又一次偶遇，比如昨天学习 arbitration 的时候用的例句：Ich will, dass Sie einen Streit schlichten. 遇到了 Streit，今天学习auskommen
又遇到它 streitet：Kommt ihr gut miteinander aus oder streitet ihr häufig? 这样对 Streit/streiten 就留下了很深的记忆了。
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;footnotes&quot;&gt;
&lt;h2 class=&quot;footnotes&quot;&gt;Footnotes: &lt;/h2&gt;
&lt;div id=&quot;text-footnotes&quot;&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.1&quot; class=&quot;footnum&quot; href=&quot;#fnr.1&quot;&gt;1&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
www.abz-bayern.de/abz/inhalte/Aktuelles/thema-des-monats2/januar-2014-die-ermittlung-der-auskoemmlichkeit-von-angeboten.html
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;


&lt;/div&gt;
&lt;/div&gt;
</content>
 </entry>
 
 <entry>
   <title>单词本：英语单词 versatile</title>
   <link href="http://kimi.im/2016-07-09-english-versatile"/>
   <updated>2016-07-09T00:00:00+00:00</updated>
   <id>http://kimi.im/english-versatile</id>
   <content type="html">&lt;blockquote&gt;
&lt;p&gt;
I simply state that I&apos;m a product of a &lt;i&gt;versatile&lt;/i&gt; mind in a restless generation —
with every reason to throw my mind and pen in with the radicals.
&lt;/p&gt;

&lt;p&gt;
&amp;#x2013; F. Scott Fitzgerald, author of The Great Gatsby
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;div id=&quot;outline-container-orgheadline1&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgheadline1&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;1&lt;/span&gt; versatile&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-1&quot;&gt;
&lt;blockquote&gt;
&lt;p&gt;
versatile [&apos;vɜː(r)sətaɪl]
&lt;/p&gt;
&lt;ol class=&quot;org-ol&quot;&gt;
&lt;li&gt;changing or fluctuating readily :  variable &amp;lt;a versatile disposition&amp;gt;&lt;/li&gt;
&lt;li&gt;embracing a variety of subjects, fields, or skills; also :  turning with ease from one thing to another&lt;/li&gt;
&lt;li&gt;having many uses or applications &amp;lt;versatile building material&amp;gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/blockquote&gt;

&lt;ol class=&quot;org-ol&quot;&gt;
&lt;li&gt;多变的，易波动的。 比如 versatile disposition，多变的性格。&lt;/li&gt;
&lt;li&gt;多才多艺的。比如 a versatile cook, writer 多才多艺的厨师，作家。versatile mind,
多面手。&lt;/li&gt;
&lt;li&gt;多用途的。比如 versatile building material 多用途建材，versatile drill 万用钻，
versatile trunk 多用途卡车。&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgheadline2&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgheadline2&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;2&lt;/span&gt; Etymology / 源&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-2&quot;&gt;
&lt;blockquote&gt;
&lt;p&gt;
From Latin versātilis ‎(“turning easily”), from versātus, past participle of
versō ‎(“I turn, change”), frequentative of vertō ‎(“I turn”).&lt;sup&gt;&lt;a id=&quot;fnr.1&quot; class=&quot;footref&quot; href=&quot;#fn.1&quot;&gt;1&lt;/a&gt;&lt;/sup&gt;
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;
这个单词源自拉丁语 versātilis，容易变化的意思。
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgheadline3&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgheadline3&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;3&lt;/span&gt; Derivation / 衍&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-3&quot;&gt;
&lt;p&gt;
从 versatile 的词源来看，vert 这个词根有 turn（转） 的意思。所以英语里很多带有词根
vert 的单词都有转的意味。比如：
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;revert： 转回到之前的状态。“svn revert” 是最近常用的 subversion 命令，用来把当前改变的文件内容全部恢复。revert to smoking when under stress 在压力下恢复了吸烟的恶习；To revert to your earlier question, &amp;#x2026; 让我们回到刚才的问题……；
revert to type, return to a natural or an original condition 回复到自然状况，
When we smell the dirty air, we want to revert to type.&lt;/li&gt;
&lt;li&gt;avert：从某物上转开。avert sth from sth, 将某物移开；avert one&apos;s eye(gaze,
glance) from the terible sight, 将目光从可怕的情景上移开不去看；He managed to
avert syspicion. 他设法避嫌。&lt;/li&gt;
&lt;li&gt;divert：转到别的地方。divert sb from sth to sth, 转移某人注意力从某事到另外某事。divert traffic from one road to another, 转移车辆绕道行驶；divert sb‘s
attention, thoughts, energies 转移某人的注意力，思想和精力到别处；divert 还有消遣娱乐的意思。大概也是从转移注意力这层含义衍生而来，Childre are easily
diverted. 孩子们很容易逗乐。&lt;/li&gt;
&lt;li&gt;vertebra 脊椎。脊椎动物用来支撑身体转动脑袋用。&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
再衍生出去的单词就更多了。
&lt;/p&gt;

&lt;p&gt;
基于 divert 的有 diversion 转移，改道，消遣娱乐，转移，偏离。diversity多样性；
diverting 有趣的；diversify 多样化，diversify one‘s skills, interests；diverse
多种多样的，people from diverse cultures。
&lt;/p&gt;

&lt;p&gt;
基于 avert 又有 averse 反对的， He seems to be averse to hard work. 看起来他不愿做脏活累活； aversion 厌恶感。I&apos;ve always had an aversion to getting up
early. 我一直有起床气；Smoking is one of my pet aversion. 吸烟是我特别讨厌的事情。
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgheadline4&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgheadline4&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;4&lt;/span&gt; MultiLanguage / 异&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-4&quot;&gt;
&lt;p&gt;
渐渐地发现，只要是源自拉丁语的单词，法语基本上和英语保持高度一致。从易变，多用途这层意思上看，法语里也是 versatile&lt;sup&gt;fr&lt;/sup&gt;，和英语拼写也完全一样。多才多艺在法语里写作 polyvalent&lt;sup&gt;fr&lt;/sup&gt;，poly- 多，valent 能力。
&lt;/p&gt;

&lt;p&gt;
德语易变的：wandlungsfähig, wendig，多用途的：vielseitig。
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;Der Schauspieler ist sehr wandlungsfähig. 演员的戏路很宽。&lt;/li&gt;
&lt;li&gt;ein wandlungsfähiger Schauspieler 一个能演多种角色演员&lt;/li&gt;
&lt;li&gt;Sie hat eine wandlungsfähige Stimme. 她有变化多端的歌喉。&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgheadline5&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgheadline5&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;5&lt;/span&gt; Example / 例&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-5&quot;&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;Samsung Galaxy J2 2016 launched; Versatile, large-screen Galaxy J Max also
introduced&lt;sup&gt;&lt;a id=&quot;fnr.2&quot; class=&quot;footref&quot; href=&quot;#fn.2&quot;&gt;2&lt;/a&gt;&lt;/sup&gt;.&lt;/li&gt;
&lt;li&gt;These are my top ten picks for the most versatile foods everyone should have
in their kitchen.&lt;sup&gt;&lt;a id=&quot;fnr.3&quot; class=&quot;footref&quot; href=&quot;#fn.3&quot;&gt;3&lt;/a&gt;&lt;/sup&gt;&lt;/li&gt;
&lt;li&gt;The most versatile robots can climb stairs and navigate other tight
spots&lt;sup&gt;&lt;a id=&quot;fnr.4&quot; class=&quot;footref&quot; href=&quot;#fn.4&quot;&gt;4&lt;/a&gt;&lt;/sup&gt;.&lt;/li&gt;
&lt;li&gt;Newest Jazz players bring versatile skills to changing NBA&lt;sup&gt;&lt;a id=&quot;fnr.5&quot; class=&quot;footref&quot; href=&quot;#fn.5&quot;&gt;5&lt;/a&gt;&lt;/sup&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;footnotes&quot;&gt;
&lt;h2 class=&quot;footnotes&quot;&gt;Footnotes: &lt;/h2&gt;
&lt;div id=&quot;text-footnotes&quot;&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.1&quot; class=&quot;footnum&quot; href=&quot;#fnr.1&quot;&gt;1&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;https://en.wiktionary.org/wiki/versatile&quot;&gt;https://en.wiktionary.org/wiki/versatile&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.2&quot; class=&quot;footnum&quot; href=&quot;#fnr.2&quot;&gt;2&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;http://www.orissadiary.com/ShowBussinessNews.asp?id=68092&quot;&gt;http://www.orissadiary.com/ShowBussinessNews.asp?id=68092&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.3&quot; class=&quot;footnum&quot; href=&quot;#fnr.3&quot;&gt;3&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;http://www.onegreenplanet.org/vegan-food/versatile-foods-everyone-should-have-in-their-kitchen-and-how-to-use-them/&quot;&gt;http://www.onegreenplanet.org/vegan-food/versatile-foods-everyone-should-have-in-their-kitchen-and-how-to-use-them/&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.4&quot; class=&quot;footnum&quot; href=&quot;#fnr.4&quot;&gt;4&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;http://www.indiatvnews.com/news/world-bomb-carrying-robot-used-by-dallas-police-raises-new-ethical-questions-338547&quot;&gt;http://www.indiatvnews.com/news/world-bomb-carrying-robot-used-by-dallas-police-raises-new-ethical-questions-338547&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.5&quot; class=&quot;footnum&quot; href=&quot;#fnr.5&quot;&gt;5&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;http://www.usatoday.com/story/sports/nba/2016/07/08/newest-jazz-players-bring-versatile-skills-to-changing-nba/86881426/&quot;&gt;http://www.usatoday.com/story/sports/nba/2016/07/08/newest-jazz-players-bring-versatile-skills-to-changing-nba/86881426/&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;


&lt;/div&gt;
&lt;/div&gt;
</content>
 </entry>
 
 <entry>
   <title>单词本：英语单词 provisional（临时的）</title>
   <link href="http://kimi.im/2016-07-08-english-provisional"/>
   <updated>2016-07-08T00:00:00+00:00</updated>
   <id>http://kimi.im/english-provisional</id>
   <content type="html">&lt;p&gt;
今天上班的时候解决了一个困扰很久的程序故障，经过了长期测试，相当稳定，真是一块石头落了地，非常踏实的过周末了。
&lt;/p&gt;

&lt;p&gt;
前些日子读新闻的时候遇到一个单词 provisional（临时的）。当时忘记记录新闻内容，这会儿想不起来在那篇新闻里看到了。不管怎么样，学一学吧。
&lt;/p&gt;

&lt;div id=&quot;outline-container-orgheadline1&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgheadline1&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;1&lt;/span&gt; Provisional&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-1&quot;&gt;
&lt;blockquote&gt;
&lt;p&gt;
Pronunciation: &lt;i&gt;prəˈvɪʒ(ə)n(ə)l&lt;/i&gt;
&lt;/p&gt;

&lt;ol class=&quot;org-ol&quot;&gt;
&lt;li&gt;Arranged or existing for the present, possibly to be changed later, such as
&apos;a provisional government&apos; &apos;provisional bookings&apos;&lt;/li&gt;
&lt;li&gt;A small piece of printed paper stuck on an item to be mailed, indicating that
postage has been paid.&lt;/li&gt;
&lt;/ol&gt;
&lt;/blockquote&gt;

&lt;p&gt;
第一个解释是作为形容词，“临时的”。比如
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;provisional government 临时政府&lt;/li&gt;
&lt;li&gt;provisional charter 临时执照&lt;/li&gt;
&lt;li&gt;provisional treaty 临时条约&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
第二个解释是作名词用：临时邮票。wikipedia 有解释：
&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;
The issuance of provisional stamps might be occasioned by a change in name or
government, by occupation of foreign territory, by a change in postal rates, by
a change of currency, or by the need to provide stamps that are in short supply.
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;
这种临时邮票一般发生在政权变更，外族殖民，汇率变更等短暂时期，所发行的临时邮票。
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgheadline2&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgheadline2&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;2&lt;/span&gt; Derivation / 衍&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-2&quot;&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;provisionally 临时地&lt;/li&gt;
&lt;li&gt;provisionality 暂时性。Hugo saw everything he wrote as an experiment, and was,
more than any other great poet of his century, aware of the provisionality of
every position, every thought, every work of art. Some is provisionality, some
is long-standing. 有的是暂时性，有的长期存在。&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgheadline3&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgheadline3&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;3&lt;/span&gt; Example / 例&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-3&quot;&gt;
&lt;p&gt;
真正学好一个单词必须要有充足的例句来培养对单词的熟悉感，所以呢，我搜罗了一些典型的例子给大家：
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;The provisional calendar for the 2017 FIM Motocross World Championship is
announced complete with some awesome new venues such as Pangkal Pinang,
Indonesia and Baldasserona, San Marino. &lt;sup&gt;&lt;a id=&quot;fnr.1&quot; class=&quot;footref&quot; href=&quot;#fn.1&quot;&gt;1&lt;/a&gt;&lt;/sup&gt; 这句话来自 dirtrider 泥泞越野网站上的新闻。大概说 2017 年的世界越野摩托车锦标赛临时日程安排已经公布。FIM 是
Fédération Internationale de Motocyclisme&lt;sup&gt;fr&lt;/sup&gt; 国际摩托车赛车协会&lt;sup&gt;&lt;a id=&quot;fnr.2&quot; class=&quot;footref&quot; href=&quot;#fn.2&quot;&gt;2&lt;/a&gt;&lt;/sup&gt;的缩写，很明显，这是源自法国的一个协会。&lt;/li&gt;
&lt;li&gt;For the last 8 months, the two adults and the three children live in a
provisional “shelter” made of carton boxes they have places in a corner of an
abandoned and half-constructed building.&lt;sup&gt;&lt;a id=&quot;fnr.3&quot; class=&quot;footref&quot; href=&quot;#fn.3&quot;&gt;3&lt;/a&gt;&lt;/sup&gt; 这句话摘自一个忧伤的新闻。希腊帕特雷一家五口人，父母和三个孩子，在过去的八个月里，住在一个纸盒子做的“帐篷”里。&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgheadline4&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgheadline4&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;4&lt;/span&gt; Multilanguage / 异&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-4&quot;&gt;
&lt;p&gt;
这个词在法语里是 provisoire&lt;sup&gt;fr&lt;/sup&gt;, 读若“普霍唯刷赫”，在德语里变成 provisorisch&lt;sup&gt;de&lt;/sup&gt;
读若”普霍唯造黑兮“。我一直觉得，英法德就好比是我们的台湾，温州和杭州话的差异罢了。
&lt;/p&gt;

&lt;p&gt;
我居然找到了一个叫 provisorisch.com 的网站，专门介绍啥是 provisorisch:
&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;
Das Adjektiv “provisorisch” leitet sich ab von dem aus dem Lateinischen
stammenden Substantiv “Provisorium”. Unter einem Provisorium versteht man einen
temporär begrenzten, behelfsmäßigen Umstand als Übergangslösung.&lt;sup&gt;&lt;a id=&quot;fnr.4&quot; class=&quot;footref&quot; href=&quot;#fn.4&quot;&gt;4&lt;/a&gt;&lt;/sup&gt;
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;
感兴趣的朋友可以点进去看看吧。
&lt;/p&gt;

&lt;p&gt;
快十点半了，我得去睡觉了。
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;footnotes&quot;&gt;
&lt;h2 class=&quot;footnotes&quot;&gt;Footnotes: &lt;/h2&gt;
&lt;div id=&quot;text-footnotes&quot;&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.1&quot; class=&quot;footnum&quot; href=&quot;#fnr.1&quot;&gt;1&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;http://www.dirtrider.com/2017-fim-motocross-world-championship-provisional-calendar&quot;&gt;http://www.dirtrider.com/2017-fim-motocross-world-championship-provisional-calendar&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.2&quot; class=&quot;footnum&quot; href=&quot;#fnr.2&quot;&gt;2&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;https://en.wikipedia.org/wiki/F%C3%A9d%C3%A9ration_Internationale_de_Motocyclisme&quot;&gt;https://en.wikipedia.org/wiki/F%C3%A9d%C3%A9ration_Internationale_de_Motocyclisme&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.3&quot; class=&quot;footnum&quot; href=&quot;#fnr.3&quot;&gt;3&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;http://whatreallyhappened.net/ko/content/patras-homeless-family-5-lives-carton-boxes#axzz4DpENnjgs&quot;&gt;http://whatreallyhappened.net/ko/content/patras-homeless-family-5-lives-carton-boxes#axzz4DpENnjgs&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.4&quot; class=&quot;footnum&quot; href=&quot;#fnr.4&quot;&gt;4&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;http://provisorisch.com&quot;&gt;http://provisorisch.com&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;


&lt;/div&gt;
&lt;/div&gt;
</content>
 </entry>
 
 <entry>
   <title>單詞本：英語單詞 symbiosis</title>
   <link href="http://kimi.im/2016-06-27-english-symbiosis"/>
   <updated>2016-06-27T00:00:00+00:00</updated>
   <id>http://kimi.im/english-symbiosis</id>
   <content type="html">&lt;p&gt;
最近協同機器人（Collabrative Robot，CR）很火熱，比較出名的協同機器人有 ABB 的
YuMi&lt;sup&gt;&lt;a id=&quot;fnr.1&quot; class=&quot;footref&quot; href=&quot;#fn.1&quot;&gt;1&lt;/a&gt;&lt;/sup&gt;，Kuka 的 iiwa&lt;sup&gt;&lt;a id=&quot;fnr.2&quot; class=&quot;footref&quot; href=&quot;#fn.2&quot;&gt;2&lt;/a&gt;&lt;/sup&gt;。這些機器人不像傳統機器人需要和人類隔離工作，而是能和人類互相協作工作，無需任何護欄。
&lt;/p&gt;

&lt;a data-flickr-embed=&quot;true&quot;  href=&quot;https://www.flickr.com/photos/kimim-photo/27937552295/in/dateposted-public/&quot; title=&quot;DSCF1294&quot;&gt;&lt;img src=&quot;https://c8.staticflickr.com/8/7652/27937552295_dc9af64bdd_z.jpg&quot; width=&quot;640&quot; height=&quot;427&quot; alt=&quot;DSCF1294&quot;&gt;&lt;/a&gt;&lt;script async src=&quot;//embedr.flickr.com/assets/client-code.js&quot; charset=&quot;utf-8&quot;&gt;&lt;/script&gt;

&lt;p&gt;
有篇介紹協同機器人的論文中提及： CR shares proximity and working in &lt;i&gt;symbiosis&lt;/i&gt;
with human operators. 意思是說 CR 機器人還可以和人類操作員合作共生。
&lt;/p&gt;

&lt;p&gt;
這句話中出現了一個單詞 &lt;i&gt;symbiosis&lt;/i&gt;.
&lt;/p&gt;

&lt;div id=&quot;outline-container-orgheadline1&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgheadline1&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;1&lt;/span&gt; symbiosis&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-1&quot;&gt;
&lt;blockquote&gt;
&lt;p&gt;
symbiosis ‎[.sɪmbaɪ&apos;əʊsɪs] (plural symbioses)
&lt;/p&gt;
&lt;ol class=&quot;org-ol&quot;&gt;
&lt;li&gt;A relationship of mutual benefit. 互利互惠關係。&lt;/li&gt;
&lt;li&gt;(biology) A close, prolonged association between two or more organisms of
different species, regardless of benefit to the members. 共生關係。&lt;/li&gt;
&lt;/ol&gt;
&lt;/blockquote&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgheadline2&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgheadline2&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;2&lt;/span&gt; Etymology / 源&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-2&quot;&gt;
&lt;p&gt;
這個單詞來自古希臘文之共同生活：
&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;
From Ancient Greek συμβίωσις ‎(sumbíōsis, “living together”).
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;
拆開來就是 sum ＋ bíōsis，前者一起，後者生存。
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgheadline3&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgheadline3&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;3&lt;/span&gt; Derivation / 衍&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-3&quot;&gt;
&lt;p&gt;
從 symbiosis 的來源可以推測，前綴 sym- 表示”共同的意思“。於是就有這些單詞：
&lt;/p&gt;

&lt;dl class=&quot;org-dl&quot;&gt;
&lt;dt&gt;symphony&lt;/dt&gt;&lt;dd&gt;交響曲，一起響的聲音。有個單詞 telephone，其中的 phone 就是通話的意思吧，也可以直接作為電話用。所以就推出 symphony 交響曲。&lt;/dd&gt;
&lt;dt&gt;sympathy&lt;/dt&gt;&lt;dd&gt;同情。sym- 共同的，-pathy 感情，合起來就是”同情“。pathetic 招人同情的，the pathetic sight of starving children.&lt;/dd&gt;
&lt;/dl&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgheadline4&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgheadline4&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;4&lt;/span&gt; Example / 例&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-4&quot;&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;The combination of drives and PLC from one supplier and the networking of
these units makes a perfect &lt;i&gt;symbiosis&lt;/i&gt; of the components, so that the
customer gets excellent value for money.&lt;/li&gt;
&lt;li&gt;In 1960, J.C.R. Licklider wrote about the possibilities of human–robot
symbiosis in his classic paper, “Man–Computer &lt;i&gt;Symbiosis&lt;/i&gt;.”&lt;sup&gt;&lt;a id=&quot;fnr.3&quot; class=&quot;footref&quot; href=&quot;#fn.3&quot;&gt;3&lt;/a&gt;&lt;/sup&gt;&lt;/li&gt;
&lt;li&gt;Robotics Inside Amazon’s Warehouse, Human-Robot Symbiosis. Amazon’s newest
warehouse is testing the limits of automation and human-machine collaboration.&lt;sup&gt;&lt;a id=&quot;fnr.4&quot; class=&quot;footref&quot; href=&quot;#fn.4&quot;&gt;4&lt;/a&gt;&lt;/sup&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgheadline5&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgheadline5&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;5&lt;/span&gt; MultiLanguage / 異&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-5&quot;&gt;
&lt;p&gt;
法語和德語共生這個詞根源一樣，所以只是簡單的有一些拼寫差異：
&lt;/p&gt;

&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;La symbiose&lt;sup&gt;fr&lt;/sup&gt; est une association indissoluble et durable entre deux espèces
dont chacune tire bénéfice.&lt;/li&gt;
&lt;li&gt;Symbiose&lt;sup&gt;de&lt;/sup&gt; bezeichnet das Zusammenleben von Organismen verschiedener Arten,
das vielfach für einen oder mehrere Partner Vorteile bietet.&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;footnotes&quot;&gt;
&lt;h2 class=&quot;footnotes&quot;&gt;Footnotes: &lt;/h2&gt;
&lt;div id=&quot;text-footnotes&quot;&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.1&quot; class=&quot;footnum&quot; href=&quot;#fnr.1&quot;&gt;1&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;http://new.abb.com/products/robotics/de/yumi&quot;&gt;http://new.abb.com/products/robotics/de/yumi&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.2&quot; class=&quot;footnum&quot; href=&quot;#fnr.2&quot;&gt;2&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;http://www.kuka-lbr-iiwa.com/&quot;&gt;http://www.kuka-lbr-iiwa.com/&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.3&quot; class=&quot;footnum&quot; href=&quot;#fnr.3&quot;&gt;3&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;https://www.prospus.com/human-robot-symbiosis/&quot;&gt;https://www.prospus.com/human-robot-symbiosis/&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.4&quot; class=&quot;footnum&quot; href=&quot;#fnr.4&quot;&gt;4&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;https://www.technologyreview.com/s/538601/inside-amazons-warehouse-human-robot-symbiosis/&quot;&gt;https://www.technologyreview.com/s/538601/inside-amazons-warehouse-human-robot-symbiosis/&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;


&lt;/div&gt;
&lt;/div&gt;
</content>
 </entry>
 
 <entry>
   <title>單詞本：英語單詞 hermit</title>
   <link href="http://kimi.im/2016-06-26-english-hermit"/>
   <updated>2016-06-26T00:00:00+00:00</updated>
   <id>http://kimi.im/english-hermit</id>
   <content type="html">&lt;p&gt;
今天的單詞學習主題是“隱”。
&lt;/p&gt;

&lt;p&gt;
強權政治是隱士產生的直接原因。在人類歷史的上古時期，人類群體緊密團結沒有嫌隙，也就無所謂隱不隱了。《莊子－齊物論》描述了上古以來人類社會的變化：＂古之人，其知有所至矣。惡乎至？有以為未始有物者，至矣盡矣，不可以加矣。其次以為有物矣，而未始有封也。其次以為有封焉，而未始有是非也。是非之彰也，道之所以虧也。＂這一段極力讚美了上古時期人類生活狀態，人類忘天地，遺萬物，外不察乎宇宙，內不覺其一身，故能曠然無累，與物俱往，而無所不應。人和人之間和睦相處，沒有嫌隙，淳樸本然，無拘無束，沒有拘束，沒有衝突，精神心靈自由無礙。也就不需要想著法子去離群索居歸隱了。然而，隨著人類社會的進步，人們慢慢的開始了＂有物＂的觀念，物質生產資料不再是共享的，而有了歸屬權。有了你的貓貓，我的狗狗，他的玉米之類的區分。再然後，＂有封＂的觀念也產生了，人們開始建立自己的＂封地＂，屬於我的封地，你不許進來，你的封地，我設法去霸佔。緊接著就產生了＂是非＂，人們為了爭奪財富，互相詆毀互相傾軋，勝利者佔據了大量財富，失敗者流離失所淪為奴隸，形成了搶權政治，普通大眾屈服於搶權統治，個人的尊嚴，獨立的人格沒法得到保障，於是就產生了隱士群體。
&lt;/p&gt;

&lt;p&gt;
不過，話又說回來，上古原始部落時期，生產力太弱，實在是沒有辦法一個人獨立支撐下去，必須團結一起去狩獵去採集野果才能維繫生存。莊子故意忽略這點而大力誇讚上古先民，是因為在戰國時期看到太多太多爾虞我詐，背信棄義，見利忘義，從而希望能返璞歸真返回到原始社會的＂美好＂狀態。
&lt;/p&gt;

&lt;p&gt;
《莊子》一書記載了很多有名的隱士，比如許由，巢父，善卷等。他們的故事細說起來相當精彩，但是本文主要目的是學習新單詞，所以暫時不展開了。言歸正傳，先來看看隱士單詞。
&lt;/p&gt;

&lt;p&gt;
在英語中，有隱士意思的單詞有好多個：hermit, recluse, anchoret, anchorite and
eremite. 給它們分分類，可以分成三組：hermit, eremite 一組，anchoret, anchorite
一組，另外一個 recluse。今天我們先來學學第一組單詞吧，後面兩組今後慢慢學。
&lt;/p&gt;

&lt;div id=&quot;outline-container-orgheadline1&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgheadline1&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;1&lt;/span&gt; hermit &amp;amp; eremite&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-1&quot;&gt;
&lt;blockquote&gt;
&lt;p&gt;
eremite [&apos;erɪmaɪt] ‎(plural eremites)
&lt;/p&gt;
&lt;ol class=&quot;org-ol&quot;&gt;
&lt;li&gt;A religious recluse; someone who lives alone for religious reasons; an eremite.&lt;/li&gt;
&lt;li&gt;A recluse; someone who lives alone and shuns human companionship.&lt;/li&gt;
&lt;/ol&gt;
&lt;/blockquote&gt;

&lt;blockquote&gt;
&lt;p&gt;
hermit [&apos;hɜː(r)mɪt] (plural hermits)
&lt;/p&gt;
&lt;ol class=&quot;org-ol&quot;&gt;
&lt;li&gt;A hermit; a religious recluse, someone who lives alone.&lt;/li&gt;
&lt;/ol&gt;
&lt;/blockquote&gt;

&lt;p&gt;
這兩個詞都是隱士的意思，大概可以認為是同一個詞的不同讀音吧。
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgheadline2&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgheadline2&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;2&lt;/span&gt; Etymology / 源&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-2&quot;&gt;
&lt;p&gt;
從詞源看，兩個單詞其實是源自同一個希臘單詞：
&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;
The word hermit comes from the Latin ĕrēmīta, the latinisation of the Greek
ἐρημίτης (erēmitēs), &quot;of the desert&quot;, which in turn comes from ἔρημος (erēmos),
signifying &quot;desert&quot;, &quot;uninhabited&quot;, hence &quot;desert-dweller&quot;; adjective:
&quot;eremitic&quot;.&lt;sup&gt;&lt;a id=&quot;fnr.1&quot; class=&quot;footref&quot; href=&quot;#fn.1&quot;&gt;1&lt;/a&gt;&lt;/sup&gt;
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;
hermit 源自拉丁語 ĕrēmīta，ĕrēmīta 又來自希臘語 ἐρημίτης（屬於荒漠的），ἔρημος（荒漠）。所以，hermit 本意大概就是荒漠居士。也就是離群索居的隱士了。
&lt;/p&gt;

&lt;p&gt;
很明顯，單詞 eremite 也一樣源自拉丁語 ĕrēmīta。
&lt;/p&gt;

&lt;p&gt;
例句：
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;In search of spiritual elevation Thoreau moves to the wilds for a life as an&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
&lt;i&gt;eremite&lt;/i&gt;.
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;The cave was inhabited by a &lt;i&gt;hermit&lt;/i&gt;.&lt;/li&gt;
&lt;li&gt;The &lt;i&gt;hermit&lt;/i&gt; followed an ascetic life style.&lt;/li&gt;
&lt;li&gt;Hsu You is an acient &lt;i&gt;eremite&lt;/i&gt; mentioned in Tseungtze.&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgheadline3&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgheadline3&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;3&lt;/span&gt; Derivation / 衍&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-3&quot;&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;hermitage: a place where a hermit lives. 隱居處，也稱之為修道院，因為歪果仁一般隱居在修道院里修道。後綴 -age 有四種意思 1） 在名詞和動詞后表示狀態和總稱，2）動作的狀態和過程，3）名詞後面表示費用，比如 postage 郵費，carriage 運費，
waterage 水運費，4）表示場所，比如 hemitage 隱居處，village 村莊。
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;We dance on the green, dine at the hermitage, and wander in the woods by
moonlight.&lt;/li&gt;
&lt;li&gt;Eventually he entered a forest, and there suddenly stood before him an old
man, who had left his hermitage to dig for roots.&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;Hermitage 埃米塔日位於 Rhone 河右岸，Drome 省，是公認的法國最好的葡萄酒產區之一。&lt;sup&gt;&lt;a id=&quot;fnr.2&quot; class=&quot;footref&quot; href=&quot;#fn.2&quot;&gt;2&lt;/a&gt;&lt;/sup&gt;看地名或許是很久以前這裡有不少隱士居住吧。&lt;/li&gt;
&lt;li&gt;Hermitage Museum 埃尔米塔日博物馆（俄语：Госуда́рственный Эрмита́ж，IPA：
[gəsʊˈdarstvʲɪnɨjɪrmʲɪˈtaʂ]），又译隐士庐博物馆，位于圣彼得堡的涅瓦河边，共有6
座主要建筑：冬宫、小埃尔米塔日、旧埃尔米塔日、埃尔米塔日剧院、冬宫储备库、新埃尔米塔日。在这个建于18-19世纪的建筑群中，冬宫是一座主要建筑，也曾经是俄罗斯沙皇的宫邸。&lt;sup&gt;&lt;a id=&quot;fnr.3&quot; class=&quot;footref&quot; href=&quot;#fn.3&quot;&gt;3&lt;/a&gt;&lt;/sup&gt;&lt;/li&gt;
&lt;li&gt;hermitical 隱士的，與世隔絕的。&lt;/li&gt;
&lt;li&gt;hermetically 密封地，牢牢的。The probe unit is hermetically sealed. 探測元件緊密的封閉著。&lt;/li&gt;
&lt;li&gt;hermitize: to isolate oneself; to become a hermit.&lt;/li&gt;
&lt;li&gt;hermit crab 寄居蟹。&lt;/li&gt;
&lt;/ul&gt;
&lt;a data-flickr-embed=&quot;true&quot;  href=&quot;https://www.flickr.com/photos/sarahakabmg/4012195216/in/photolist-77xxRA-8ryUAn-8KvsSK-77xwGo-7xcPPd-8voUYL-fKMm9-8sc29u-gNefiU-7oQQnx-4RV8tx-7rGzur-77xxk7-8LVYwT-8LZ5uo-xRGaK-6t5UVU-nKwjUS-EtZfgm-5Dhkmp-ffvKzZ-5ArFDT-cuoiX1-dTXSh-dLk6eT-56b31u-8LZ3zU-77tADn-dtafbN-fLfufw-dLkhGT-bMevfe-nWEaY6-jxy7zU-4RzSgC-4x8hC6-4RvFwe-39Ay1b-eWXEvk-yuNk5-8LJ4TY-7ruD6X-aBNdzE-iMiixa-eZV4q6-8hycsp-byjQwb-4j4gPE-43oi3a-8LZ7pW&quot; title=&quot;Kandy 2&quot;&gt;&lt;img src=&quot;https://c1.staticflickr.com/3/2521/4012195216_d72f4fdcf1_z.jpg&quot; width=&quot;640&quot; height=&quot;446&quot; alt=&quot;Kandy 2&quot;&gt;&lt;/a&gt;&lt;script async src=&quot;//embedr.flickr.com/assets/client-code.js&quot; charset=&quot;utf-8&quot;&gt;&lt;/script&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;hermit trush 隐士夜鸫；隐士鸫。一種北美特有的鳥。&lt;/li&gt;
&lt;/ul&gt;
&lt;a data-flickr-embed=&quot;true&quot;  href=&quot;https://www.flickr.com/photos/vadimkhavkin/5868224768/in/photolist-9WybM7-aNGcnD-gEFHjw-qBeLfv-bmGWS2-ijQBNt-dQahcE-aAfnV4-93H66Z-dLpp27-yKUysP-bRrNrB-bRrNq8-GDf9M5-avsGGm-rMN3H1-7zvDdA-GH6UaF-bDgpmd-bRrNsZ-81GcLn-s78Y6v-s78YcT-s74cqN-bCD37U-bCD35N-eetVum-bCD373-Fyhvaa-bRxKyc-bRxKFe-nbBeET-pJdrRo-bRxKx6-boFLtZ-gVnNkD-avq4cX-dRYVAn-97SxPL-bRxKDM-dknf74-GL71ta-noDWkx-nmViNA-bBtN4A-vwnj4R-vNMrMj-vRtG9D-qGg28N-avq4bZ&quot; title=&quot;Hermit Trush&quot;&gt;&lt;img src=&quot;https://c1.staticflickr.com/4/3181/5868224768_e711fdde78_z.jpg&quot; width=&quot;640&quot; height=&quot;427&quot; alt=&quot;Hermit Trush&quot;&gt;&lt;/a&gt;&lt;script async src=&quot;//embedr.flickr.com/assets/client-code.js&quot; charset=&quot;utf-8&quot;&gt;&lt;/script&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;hermit warbler 隐士林莺；黄脸林莺。&lt;/li&gt;
&lt;/ul&gt;
&lt;a data-flickr-embed=&quot;true&quot;  href=&quot;https://www.flickr.com/photos/usfwshq/14050505806/in/photolist-npAvS7-9H87bP-uWT89s-vc9tgL-uWT4Cu-uhBuyr-vesnfP-uWSZt7-uWTtBG-vdWKAN-uWT6VA-vdWFJu-uWSAP1-veLPRe-veLNcH-uWT4WL-uhrSQb-uhrQ6o-uX1pFc-f9AKgB-f9AKWF-8exEPZ-yFqvGL-f9Anca-efbsR1-f9QYLu-cQwxom-iPnZYv-6rvFgP-yFuYbv-7TMLQR-cXwbK5-f9QYrj-yFptfW-f9QZJN-cXwbDh-vbyGnj-ezxSku-cQwxvY-iPrQSC-iPpJSd-cQyYfN-yY2xrP-mmPZ5S-cXwbnY-cXwbef-oKkhv8-f9AKD8-cQyYo1-gTj13u&quot; title=&quot;Hermit Warbler (Setophaga occidentalis)&quot;&gt;&lt;img src=&quot;https://c7.staticflickr.com/8/7330/14050505806_ef730b4df6_z.jpg&quot; width=&quot;640&quot; height=&quot;426&quot; alt=&quot;Hermit Warbler (Setophaga occidentalis)&quot;&gt;&lt;/a&gt;&lt;script async src=&quot;//embedr.flickr.com/assets/client-code.js&quot; charset=&quot;utf-8&quot;&gt;&lt;/script&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;eremitic 隐士的, 隐士般的&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgheadline4&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgheadline4&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;4&lt;/span&gt; MultiLanguage / 異&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-4&quot;&gt;
&lt;p&gt;
法語 l&apos;ermite&lt;sup&gt;fr&lt;/sup&gt; 德語 der Eremit&lt;sup&gt;de&lt;/sup&gt; 也源自希臘語 ἐρημίτης。從這個單詞上看，德語法語很統一。l&apos;ermitane&lt;sup&gt;fr&lt;/sup&gt; est une femme ermite. L&apos;ermitage&lt;sup&gt;fr&lt;/sup&gt; est la habitation
d&apos;un ermite.
&lt;/p&gt;

&lt;p&gt;
Ein Eremit (deutsch auch „Einsiedler“) ist ein Mensch, der mehr oder weniger
abgeschieden von den Menschen lebt (siehe Einsiedelei oder Eremitage).
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;footnotes&quot;&gt;
&lt;h2 class=&quot;footnotes&quot;&gt;Footnotes: &lt;/h2&gt;
&lt;div id=&quot;text-footnotes&quot;&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.1&quot; class=&quot;footnum&quot; href=&quot;#fnr.1&quot;&gt;1&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;https://en.wikipedia.org/wiki/Hermit#Etymology&quot;&gt;https://en.wikipedia.org/wiki/Hermit#Etymology&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.2&quot; class=&quot;footnum&quot; href=&quot;#fnr.2&quot;&gt;2&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;http://www.wine-world.com/area/france/rhone-valley/hermitage&quot;&gt;http://www.wine-world.com/area/france/rhone-valley/hermitage&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.3&quot; class=&quot;footnum&quot; href=&quot;#fnr.3&quot;&gt;3&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;https://en.wikipedia.org/wiki/Hermitage_Museum&quot;&gt;https://en.wikipedia.org/wiki/Hermitage_Museum&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;


&lt;/div&gt;
&lt;/div&gt;
</content>
 </entry>
 
 <entry>
   <title>單詞本：英語單詞 Referendum</title>
   <link href="http://kimi.im/2016-06-25-english-referendum"/>
   <updated>2016-06-25T00:00:00+00:00</updated>
   <id>http://kimi.im/english-referendum</id>
   <content type="html">&lt;p&gt;
最近英國脫歐公投（referendum）吸引了全世界的眼球。經過一年的籌劃，一個月的喧騰，一天的投票（vote），UK 的公民們最終決定脫離歐洲。
&lt;/p&gt;

&lt;a data-flickr-embed=&quot;true&quot;  href=&quot;https://www.flickr.com/photos/kimim-photo/27850744466/in/dateposted-public/&quot; title=&quot;IMG_2307&quot;&gt;&lt;img src=&quot;https://c3.staticflickr.com/8/7385/27850744466_9304651453_z.jpg&quot; width=&quot;640&quot; height=&quot;640&quot; alt=&quot;IMG_2307&quot;&gt;&lt;/a&gt;&lt;script async src=&quot;//embedr.flickr.com/assets/client-code.js&quot; charset=&quot;utf-8&quot;&gt;&lt;/script&gt;

&lt;p&gt;
讓我們先來看看 Referendum 的意思：
&lt;/p&gt;

&lt;div id=&quot;outline-container-orgheadline1&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgheadline1&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;1&lt;/span&gt; Referendum&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-1&quot;&gt;
&lt;p&gt;
British Dictionary 給出了如下解釋：
&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;
&lt;i&gt;ˌrɛfəˈrɛndəm&lt;/i&gt;
noun (pl) -dums, -da (-də)
&lt;/p&gt;
&lt;ol class=&quot;org-ol&quot;&gt;
&lt;li&gt;submission of an issue of public importance to the direct vote of the electorate&lt;/li&gt;
&lt;li&gt;a vote on such a measure&lt;/li&gt;
&lt;li&gt;a poll of the members of a club, union, or other group to determine their views on some matter&lt;/li&gt;
&lt;li&gt;a diplomatic official&apos;s note to his government requesting instructions&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;
See also (for senses 1, 2) plebiscite
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;ol class=&quot;org-ol&quot;&gt;
&lt;li&gt;向全體選民提交重要公眾事務進行直接投票&lt;/li&gt;
&lt;li&gt;對此事務的投票行為&lt;/li&gt;
&lt;li&gt;向俱樂部，聯盟等組織的成員進行民意調查&lt;/li&gt;
&lt;li&gt;外交官向政府提交的請示書&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;
其中 1 和 2 也可以用 plebiscite。
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-orgheadline2&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgheadline2&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;2&lt;/span&gt; Etymology of Prost / 源&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-2&quot;&gt;
&lt;p&gt;
Wikipedia 解釋了 Referendum 詞源：
&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;
&apos;Referendum&apos; is the gerund of the Latin verb refero, and has the meaning
&apos;bringing back&apos; (i.e. bringing the question back to the people). The term
&apos;plebiscite&apos; has a generally similar meaning in modern usage, and comes from the
Latin plebiscita, which originally meant a decree of the Concilium Plebis
(Plebeian Council), the popular assembly of the Roman Republic. Today, a
referendum can also often be referred to as a plebiscite, but in some countries
the two terms are used differently to refer to votes with differing types of
legal consequences.
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;
Referendum 是拉丁語 refero 的動名詞（gesund）。refero 意思是“交還”，即，把問題交還給人民。另外一個單詞 plebiscite 來自拉丁語 plebiscita，原始意思是來自羅馬平民議會的決定。
&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;
&apos;Referendums&apos; and &apos;referenda&apos; are both commonly used as plurals of
&apos;referendum&apos;. However, the use of &apos;referenda&apos; is deprecated by the Oxford
English Dictionary, which advises that:
&lt;/p&gt;

&lt;p&gt;
&apos;Referendums&apos; is logically preferable as a plural form meaning &apos;ballots on
one issue&apos; (as a Latin gerund, referendum has no plural). The Latin plural
gerundive &apos;referenda&apos;, meaning &apos;things to be referred&apos;, necessarily connotes
a plurality of issues.
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;
在牛津英語詞典里對 Referendum 的複數形式也提出了建議。Referenda 和 Referendums
都可以最為投票的複數形式，但是這兩個複數形式有些差別，是在拉丁語中，referenda
指的是被提交的事務是複數的“things to be referred”，而拉丁語中作為動名詞的
Referendum 是沒有複數形式的，添加 -s 表示“ballots on one issue”，是選票的複數。
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgheadline3&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgheadline3&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;3&lt;/span&gt; MultiLanguage / 異&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-3&quot;&gt;
&lt;p&gt;
德語里也用 Referendum，genitive 第二格寫成 Referendums，複數形式是
Referenden&lt;sup&gt;de&lt;/sup&gt;. 和英語對照著看，還是需要小心的，作為複數的 Referendums 在德語里是第二個名詞。
&lt;/p&gt;

&lt;p&gt;
另外，德語中還有 Plebiszit&lt;sup&gt;de&lt;/sup&gt; ，我們掃一眼就知道，這個詞和 plebiscite&lt;sup&gt;en&lt;/sup&gt; 同源，都來自 plebiscita&lt;sup&gt;latin&lt;/sup&gt;. 與國家主權變更相關的全民公投就要用這個單詞了。
&lt;/p&gt;

&lt;p&gt;
德語種還有兩個本土單詞 Volksabstimmung（全民公投） 和 Volksentscheid（全民公決）。
&lt;/p&gt;

&lt;p&gt;
Volksabstimmung 由 Volks（民眾）＋Abstimmung（投票）組中，自然表示全民投票的意思。值得一提的是，我們馬路上常看到的 Volkswagen 大眾汽車，拆開來就是Volks（大眾）＋
Wagen（汽車）。
&lt;/p&gt;

&lt;p&gt;
Volksentscheid 由 Volks ＋ Entscheid（公決） 組成。意思是 Entscheidung von
Fragen der Gesetzgebung durch Volksabstimmung.
&lt;/p&gt;

&lt;p&gt;
法語出於發音的需要添加了兩個小小的閉音符 accent aigu&lt;sup&gt;fr&lt;/sup&gt; ，就搖身一變成了 le
référendum&lt;sup&gt;fr&lt;/sup&gt; 。和英語德語大同小異。plebiscite 也戴上了小帽子成了 le plébiscite。
&lt;/p&gt;

&lt;p&gt;
和德語一樣，法語里也有更接地氣的詞：vote populaire，這個詞組看起來再直白不過了，大眾的投票，全民公投。
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
</content>
 </entry>
 
 <entry>
   <title>談一談 ABB 智能傳感器解決方案</title>
   <link href="http://kimi.im/2016-05-26-abb-smart-sensor-solution"/>
   <updated>2016-05-26T00:00:00+00:00</updated>
   <id>http://kimi.im/abb-smart-sensor-solution</id>
   <content type="html">&lt;p&gt;
自從上次看到漢諾威展上德國總理默克爾和美國總統奧巴馬一同參觀 ABB 最新的智能傳感器解決方案之後就一直想深入了解一下這個方案的具體細節。
&lt;/p&gt;

&lt;p&gt;
後來，在 5 月 18，19 日兩天去武漢參加了 ABB 自動化世界活動，很慶幸能夠近距離欣賞了一下。
&lt;/p&gt;

&lt;a data-flickr-embed=&quot;true&quot;  href=&quot;https://www.flickr.com/photos/kimim-photo/27264263575/in/dateposted-public/&quot; title=&quot;DSCF1203&quot;&gt;&lt;img src=&quot;https://c8.staticflickr.com/8/7326/27264263575_3d5e43ba37_z.jpg&quot; width=&quot;640&quot; height=&quot;427&quot; alt=&quot;DSCF1203&quot;&gt;&lt;/a&gt;&lt;script async src=&quot;//embedr.flickr.com/assets/client-code.js&quot; charset=&quot;utf-8&quot;&gt;&lt;/script&gt;

&lt;p&gt;
這張照片是 ABB 自動化世界開幕式上 CEO Spiesshofer 介紹 ABB IoTSP 成功案例時候拍的照片，當時他手上拿的就是本文介紹的智能傳感器。
&lt;/p&gt;

&lt;p&gt;
再上一組近距離拍攝的圖片吧：
&lt;/p&gt;

&lt;a data-flickr-embed=&quot;true&quot;  href=&quot;https://www.flickr.com/photos/kimim-photo/26987979860/in/dateposted-public/&quot; title=&quot;DSCF1279&quot;&gt;&lt;img src=&quot;https://c5.staticflickr.com/8/7440/26987979860_9fdc7160d3_z.jpg&quot; width=&quot;640&quot; height=&quot;427&quot; alt=&quot;DSCF1279&quot;&gt;&lt;/a&gt;&lt;script async src=&quot;//embedr.flickr.com/assets/client-code.js&quot; charset=&quot;utf-8&quot;&gt;&lt;/script&gt;

&lt;a data-flickr-embed=&quot;true&quot;  href=&quot;https://www.flickr.com/photos/kimim-photo/26987984360/in/dateposted-public/lightbox/&quot; title=&quot;DSCF1281&quot;&gt;&lt;img src=&quot;https://c1.staticflickr.com/8/7192/26987984360_21e90557f4_z.jpg&quot; width=&quot;640&quot; height=&quot;427&quot; alt=&quot;DSCF1281&quot;&gt;&lt;/a&gt;&lt;script async src=&quot;//embedr.flickr.com/assets/client-code.js&quot; charset=&quot;utf-8&quot;&gt;&lt;/script&gt;

&lt;p&gt;
從圖中可以看到，智能傳感器就是小小的半個手掌大的一片固定在低壓電機上面，通過震動和溫度傳感器測量電機的震動，溫度并計算出工作時長，并將這些數據發送到遠程數據分析軟件進行分析。基於振幅大小，溫度高低以及工作時長可以算出來電機的工作狀況是否正常，是否需要停機檢修，是否需要更換。分析軟件以圖表的形式展示這些數據給現場操作人員供其參考。
&lt;/p&gt;

&lt;p&gt;
根據 CEO Ulrich Spiesshofer 宣稱：
&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;
這個簡易的傳感裝置可以安裝在大部分的新老電機上面，根據傳感器分析報告進行保養維護可以減少 70％ 的宕機時間，延長 30％ 電機使用壽命，同時減少 10％ 的能源消耗。按照預估，如果把此裝備安裝到當今 3 億臺運轉的電機上，節省的能源相當於 100 個發電站的電量。&lt;sup&gt;&lt;a id=&quot;fnr.1&quot; class=&quot;footref&quot; href=&quot;#fn.1&quot;&gt;1&lt;/a&gt;&lt;/sup&gt;
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;
看起來很美好，不過我不清楚這些數據是怎麼計算出來的，還是保持懷疑態度吧。看看什麼時候有機會可以進一步了解一下。
&lt;/p&gt;

&lt;p&gt;
再來看看產品技術細節。根據報道，這個傳感器是由 Swatch 集團子公司 EM
Microelectronic 根據 ABB 的需求開發的。&lt;sup&gt;&lt;a id=&quot;fnr.2&quot; class=&quot;footref&quot; href=&quot;#fn.2&quot;&gt;2&lt;/a&gt;&lt;/sup&gt;
&lt;/p&gt;

&lt;p&gt;
根據 EM Microelectronic 官網描述：
&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;
EM Microelectronic is a semiconductor manufacturer specialized in the design and
production of ultra low power, low voltage integrated circuits for
battery-operated and field-powered applications in consumer, automotive and
industrial areas.
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;
這是一家專門服務于消費電子，汽車和工業領域客戶，專注電池供電現場供電的超低能耗、低壓集成電路開發 35 年的高科技公司。
&lt;/p&gt;

&lt;p&gt;
因為 EM Microelectronic 是藍牙 SIG&lt;sup&gt;&lt;a id=&quot;fnr.3&quot; class=&quot;footref&quot; href=&quot;#fn.3&quot;&gt;3&lt;/a&gt;&lt;/sup&gt; 成員，所以我們可以猜到，他們給 ABB 做的智能傳感器可能是通過低功耗藍牙通信將數據傳輸給工廠現場的分析軟件服務器的。
&lt;/p&gt;

&lt;p&gt;
再根據 EM Microelectronic 描述的公司優勢&lt;sup&gt;&lt;a id=&quot;fnr.4&quot; class=&quot;footref&quot; href=&quot;#fn.4&quot;&gt;4&lt;/a&gt;&lt;/sup&gt;：
&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;
EM Microelectronic as reliable and confidential long term partner is leader in
ultra-low power with its own development-, technology- and production know-how
in the following fields:
&lt;/p&gt;

&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;Ultra-low power integrated circuits – allows many years of battery life&lt;/li&gt;
&lt;li&gt;Ultra-low power wireless solutions  - communication with proprietary and standard protocols&lt;/li&gt;
&lt;li&gt;Ultra-low power sensor interface circuits – unloads main MCU&lt;/li&gt;
&lt;li&gt;Energy harvesting circuits – supports energy sources&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;

&lt;p&gt;
很有可能，這個智能傳感器還具有”Energy harvesting“ 功能，比如可能可以利用電機震動發電。
&lt;/p&gt;

&lt;p&gt;
這樣歸納起來，這個方案還是挺美好的：
&lt;/p&gt;

&lt;p&gt;
一旦安裝上之後，就能感知電機的震動和溫度，并能從電機震動中獲得電力，然後以低功耗的藍牙無線通信將數據傳輸給數據分析服務器，分析軟件以直觀漂亮的圖表形式展示電機的工作狀態給操作人員。操作人員根據這些信息安排維修保養，從而減少電機點擊事件，能源消耗并延長了電機的使用壽命。
&lt;/p&gt;
&lt;div id=&quot;footnotes&quot;&gt;
&lt;h2 class=&quot;footnotes&quot;&gt;Footnotes: &lt;/h2&gt;
&lt;div id=&quot;text-footnotes&quot;&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.1&quot; class=&quot;footnum&quot; href=&quot;#fnr.1&quot;&gt;1&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;http://www.abb.com.cn/cawp/seitp202/999fc8d8b0d21007c1257fa00054a5c7.aspx&quot;&gt;http://www.abb.com.cn/cawp/seitp202/999fc8d8b0d21007c1257fa00054a5c7.aspx&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.2&quot; class=&quot;footnum&quot; href=&quot;#fnr.2&quot;&gt;2&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;http://www.emmicroelectronic.com/&quot;&gt;http://www.emmicroelectronic.com/&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.3&quot; class=&quot;footnum&quot; href=&quot;#fnr.3&quot;&gt;3&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;https://www.bluetooth.org/en-us&quot;&gt;https://www.bluetooth.org/en-us&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.4&quot; class=&quot;footnum&quot; href=&quot;#fnr.4&quot;&gt;4&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;http://www.emmicroelectronic.com/applications/industrial&quot;&gt;http://www.emmicroelectronic.com/applications/industrial&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;


&lt;/div&gt;
&lt;/div&gt;
</content>
 </entry>
 
 <entry>
   <title>單詞本：德語單詞 aufbauen</title>
   <link href="http://kimi.im/2016-05-24-deutsch-aufbauen"/>
   <updated>2016-05-24T00:00:00+00:00</updated>
   <id>http://kimi.im/deutsch-aufbauen</id>
   <content type="html">&lt;p&gt;
aufbauen 這個單詞是在上班看代碼註釋的時候遇到的。和人遇見是一種緣分，和代碼注釋中的單詞遇見也是一種緣分吧。沒有 Mik 就不會知道 ABB，也就不會看到德語註釋和德語文檔。如果還在 Nokia，可能現在看到的大部分就是芬蘭語了，也就可能每天在學芬蘭語了吧。
&lt;/p&gt;

&lt;a href=&quot;https://www.flickr.com/photos/kimim-photo/14050764440/&quot;
title=&quot;Flickr 上 kimim-photo 的 DSCF9203&quot;&gt;
&lt;img src=&quot;https://farm3.staticflickr.com/2920/14050764440_fdf05613f8_z.jpg&quot;
width=&quot;640&quot; height=&quot;427&quot; alt=&quot;DSCF9203&quot;&gt;&lt;/a&gt;

&lt;div id=&quot;outline-container-orgheadline1&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgheadline1&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;1&lt;/span&gt; aufbauen&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-1&quot;&gt;
&lt;p&gt;
aufbauen 有很多個解釋。其根本意義是“建成”。引申出來就有組織，組裝，化合，組合，堆砌等意思。
&lt;/p&gt;

&lt;ol class=&quot;org-ol&quot;&gt;
&lt;li&gt;aufstellen, errichten; zusammensetzen, aufrichten. aufstellen: 搭起，架起。除此之外，aufstellen 还有佈置，排列，表達，列出，研製，創立，提名，動物豎起耳朵等意思。errichten: 樹立，建造，設立。zusammensetzen: 裝配，聚在一起，組成。
aufrichten: 豎起，扶起，建立，鼓舞，寬慰。
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;Kameras für eine Fernsehübertragung aufbauen. 搭起攝像頭轉播電視。
Fernsehübertragung:電視轉播。&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;schaffen, organisieren; gestalten. schaffen: 創作，塑造，創立，建立，獲得。gestalten: 塑造，刻畫，形成，構成，舉辦，制定。
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;eine Partei zentralistisch aufbauen. zentralistisch: 集中制的，中央集權的。&lt;/li&gt;
&lt;li&gt;網上搜 aufbauen 搜到比較多的是 “Schnell Muskeln Aufbauen” 快速塑造肌肉。&lt;/li&gt;
&lt;li&gt;Ich baue mir eine neue Existenz auf. 我建立了新的生計。sich eine Existenz
aufbauen: to make a life for oneself&lt;sup&gt;(en)&lt;/sup&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;etw. als Grundlage, Voraussetzung für etw. nehmen. Grundlage: 地基，基礎，前提，培養基。Voraussetzung: 前提，先決條件，假設。
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;eine Theorie auf einer Annahme aufbauen. 該理論基於一個猜想。Annahme: 猜想，假設。&lt;/li&gt;
&lt;li&gt;die Anklage auf einem Gutachten aufbauen. 該指控基於一個堅定。Anklage: 控訴。
Gutachten: 鑒定。&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;(Chemie) zu einer Verbindung zusammensetzen. 化合成。
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;diese Moleküle bauen die Verbindung auf. 這些分子化合成此化合物。die
Verbindung: 化合物。&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;sich zusammensetzen, gebildet sein. bilden: 建立， =&amp;gt; gebildet: 有文化，有教養的。
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;der Stoff baut sich aus folgenden Elementen auf. 此物質有以下元素組成。&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgheadline2&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgheadline2&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;2&lt;/span&gt; Derivation / 引&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-2&quot;&gt;
&lt;dl class=&quot;org-dl&quot;&gt;
&lt;dt&gt;Bau&lt;/dt&gt;&lt;dd&gt;building, construction&lt;sup&gt;(en)&lt;/sup&gt;&lt;/dd&gt;
&lt;dt&gt;Aufbau&lt;/dt&gt;&lt;dd&gt;structure&lt;/dd&gt;
&lt;dt&gt;Gebäude&lt;/dt&gt;&lt;dd&gt;building&lt;/dd&gt;
&lt;dt&gt;Bauarbeiten&lt;/dt&gt;&lt;dd&gt;construction work&lt;/dd&gt;
&lt;dt&gt;Bauarbeiter(in)&lt;/dt&gt;&lt;dd&gt;construction worker&lt;/dd&gt;
&lt;dt&gt;bauen&lt;/dt&gt;&lt;dd&gt;to build&lt;/dd&gt;
&lt;dt&gt;anbauen&lt;/dt&gt;&lt;dd&gt;to cultivate, to build on&lt;/dd&gt;
&lt;dt&gt;Anbau&lt;/dt&gt;&lt;dd&gt;cultivation&lt;/dd&gt;
&lt;/dl&gt;
&lt;/div&gt;
&lt;/div&gt;
</content>
 </entry>
 
 <entry>
   <title>單詞本：德語單詞 laufen</title>
   <link href="http://kimi.im/2016-05-23-deutsch-laufen"/>
   <updated>2016-05-23T00:00:00+00:00</updated>
   <id>http://kimi.im/deutsch-laufen</id>
   <content type="html">&lt;a data-flickr-embed=&quot;true&quot;  href=&quot;https://www.flickr.com/photos/kimim-photo/26574029534/in/dateposted-public/&quot; title=&quot;IMG_2381&quot;&gt;&lt;img src=&quot;https://farm8.staticflickr.com/7727/26574029534_604bf4aae5_z.jpg&quot; width=&quot;360&quot; height=&quot;640&quot; alt=&quot;IMG_2381&quot;&gt;&lt;/a&gt;&lt;script async src=&quot;//embedr.flickr.com/assets/client-code.js&quot; charset=&quot;utf-8&quot;&gt;&lt;/script&gt;

&lt;div id=&quot;outline-container-orgheadline1&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgheadline1&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;1&lt;/span&gt; Laufen&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-1&quot;&gt;
&lt;p&gt;
德語動詞 laufen 作為不及物動詞使用時意思是跑，移動，運行；作為及物動詞表示跑出一段距離的意思。
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;跑，奔跑
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;Die Pferde laufen im Galopp. der Galopp: 馬的飛馳。&lt;sup&gt;&lt;a id=&quot;fnr.1&quot; class=&quot;footref&quot; href=&quot;#fn.1&quot;&gt;1&lt;/a&gt;&lt;/sup&gt;&lt;/li&gt;
&lt;li&gt;Der Hund läuft hinter dem Auto her.&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;走路，步行
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;Das Kind kann noch nicht laufen.&lt;/li&gt;
&lt;li&gt;Ich laufe die Straße entlang. entlang: 沿著，順著。我順著街道走著。&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;工作，運轉，發展
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;Die Uhr läuft nicht.&lt;/li&gt;
&lt;li&gt;Der Computer läuft wieder!&lt;/li&gt;
&lt;li&gt;Er weiß, wie die Dinge laufen. 他知道事情如何發展。這裡 weiß 不是白色的意思，而是 wissen 的第一、三人稱單數現在時。&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;通向，走向
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;Der Weg läuft bergauf. bergauf: adv. 上坡的嗎，上山的。向上的。累人的，煩人的。&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;流水，漏出
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;Das Fass läuft noch immer.&lt;/li&gt;
&lt;li&gt;Das Wasser läuft den Boden entlang. 水沿著地面流淌。&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;有效，湊效
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;Das Abkommen läuft noch fünf Monate.&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;上映，放映
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;etwas. ist über den Bildschirm gelaufen. der Bildschirm: 電視屏幕&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;及物動詞：走過
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;Wir sind einen Umweg gelaufen. der Umweg: 繞道，繞彎。&lt;/li&gt;
&lt;li&gt;jmd. [etwa.] läuft Gefahr， 某人為【某事】在冒著風險。這裡引申為承擔風險的意思。可以理解為走了很多險路吧。die Gefahr: 危險，危急，危害。反義詞為 Sicherheit。&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
laufen 的動詞變位需要注意在 Indikativ Präteritum 過去時中：
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;ich laufe -&amp;gt; ich lief&lt;/li&gt;
&lt;li&gt;du läufst -&amp;gt; du liefst&lt;/li&gt;
&lt;li&gt;er/sie/es läuft -&amp;gt; er/sie/es lief&lt;/li&gt;
&lt;li&gt;wir laufen -&amp;gt; wir liefen&lt;/li&gt;
&lt;li&gt;ihr lauft -&amp;gt; ihr lieft&lt;/li&gt;
&lt;li&gt;Sie laufen -&amp;gt; Sie liefen&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgheadline2&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgheadline2&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;2&lt;/span&gt; Derivation of Prost / 引&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-2&quot;&gt;
&lt;p&gt;
laufend 是 laufen 轉化而來的形容詞，有連續不斷和進行中的意思。
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;Die Produktion ist laufend gestiegen. gestiegen: adj. 升高的，增長的。&lt;/li&gt;
&lt;li&gt;das laufende Jahr. 今年，正在經歷的一年。&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
ablaufen: 到期，停止，結束。走壞，跑壞。流走，流下。to wear out&lt;sup&gt;(en)&lt;/sup&gt;,
to expire&lt;sup&gt;(en)&lt;/sup&gt;. parcourir&lt;sup&gt;(fr)&lt;/sup&gt;, se terminer&lt;sup&gt;(fr)&lt;/sup&gt;.
&lt;/p&gt;

&lt;p&gt;
der Ablauf: process, procedure; expiry, expiration; flow, course. 流程，渠道。
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;Können Sie den vorgesehenen Ablauf noch einmal erklären? 可以再澄清一次既定流程嗎？&lt;/li&gt;
&lt;li&gt;Durch diesen Ablauf kann das Regenwasser entweichen. 通過這個渠道，雨水可以流走。大家有沒有發現流程和渠道看起來好像是非常像在說同一個東西。流水的歷程不就是渠道麼？&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
anlaufen: 開始，加熱，激活，啟動
&lt;/p&gt;

&lt;p&gt;
auslaufen: 起航、啟航、下水、下海
&lt;/p&gt;

&lt;p&gt;
einlaufen: 流進，流入
&lt;/p&gt;

&lt;p&gt;
entlaufen: 跑走。
&lt;/p&gt;

&lt;p&gt;
davonlaufen: 逃離，逃
&lt;/p&gt;

&lt;p&gt;
durchlaufen: vi.(穿越&amp;#x2026;)跑過，不間斷地跑，連續跑，流過，滲透，濾
&amp;lt;BAR&amp;gt;vt.跑壞(鞋子)，跑傷，跑腫，跑步穿過，快步穿過，跑完(路程)，上完，念完(學校)，經歷過，熟悉
&lt;/p&gt;

&lt;p&gt;
eislaufen: 溜冰，滑冰
&lt;/p&gt;

&lt;p&gt;
heißlaufen: 過熱
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;footnotes&quot;&gt;
&lt;h2 class=&quot;footnotes&quot;&gt;Footnotes: &lt;/h2&gt;
&lt;div id=&quot;text-footnotes&quot;&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.1&quot; class=&quot;footnum&quot; href=&quot;#fnr.1&quot;&gt;1&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
etwas im Galopp tun - etwas sehr schnell tun。另外，Galopp 也是一種舞曲的名字，schneller Rundtanz im 2/4-Takt 是一种快速的德国舞曲，名称来源于马的奔跑，是2/4拍子，舞蹈动作是以跳跃为主，18世纪初被引进巴黎的上流社会（Galop），并迅速在欧洲风行，用于方阵舞蹈，作为其中最快的结束部分。“圆舞曲之王“施特劳斯、李斯特、萧斯塔科维奇等都写作过加洛普舞曲。
&lt;/p&gt;

&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;Un cheval pure race espagnole au galop.&lt;/li&gt;
&lt;li&gt;Le galop d&apos;un cheval retentit soudain.&lt;/li&gt;
&lt;/ul&gt;&lt;/div&gt;&lt;/div&gt;


&lt;/div&gt;
&lt;/div&gt;
</content>
 </entry>
 
 <entry>
   <title>ABB自動化世界</title>
   <link href="http://kimi.im/2016-05-22-abb-automation-world"/>
   <updated>2016-05-22T00:00:00+00:00</updated>
   <id>http://kimi.im/abb-automation-world</id>
   <content type="html">&lt;p&gt;
ABB 自動化世界為期兩天，第一天開幕式，行業論壇＋晚宴，第二天幾十個 seminar 會場同時進行。武漢會展中心 A 號展廳展出 ABB 最新的產品。
&lt;/p&gt;

&lt;p&gt;
5 月 18 日早上五點半起牀散步到寶島公園回來吃好飯就搭上班車前往武漢國際展覽中心參觀ABB自動化世界展覽。
&lt;/p&gt;

&lt;div id=&quot;outline-container-orgheadline3&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgheadline3&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;1&lt;/span&gt; 開幕式&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-1&quot;&gt;
&lt;p&gt;
第一天的活動安排是 10 點開幕式，中國區CEO顧純元博士致開幕詞，CEO 史畢福（Ulrich
Spiesshofer）介紹 ABB 125 年發展歷史以及對中國經濟新常態的戰略規劃，武漢市副市長劉立勇致辭，張斌博士演講主題《從製造到服務&amp;#x2013;中國經濟轉型與前景》。
&lt;/p&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgheadline1&quot; class=&quot;outline-3&quot;&gt;
&lt;h3 id=&quot;orgheadline1&quot;&gt;&lt;span class=&quot;section-number-3&quot;&gt;1.1&lt;/span&gt; CEO Spiesshofer 主題演講《智能技術，智慧跨越》&lt;/h3&gt;
&lt;div class=&quot;outline-text-3&quot; id=&quot;text-1-1&quot;&gt;
&lt;p&gt;
因爲 ABB 主要業務是電力與自動化，所以 Spiesshofer 首先分析了全球電力系統的重大變革：
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;電源結構調整：電源來源專項可再生能源，發電不穩不可預測，上網節點增多&lt;/li&gt;
&lt;li&gt;輸配電：複雜化，控制信息越來越重要，輸電線路更長電壓更高&lt;/li&gt;
&lt;li&gt;微網/納網結構發展&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
電力系統的變革動力是可再生能源、儲能、用電端連接、電力傳輸和自產自銷。
&lt;/p&gt;

&lt;p&gt;
另外，自動化領域的重大變革由工業 3.0 向工業 4.0 發展，工業 4.0 的核心是物聯網+，也就是 Internet of Thing, Service &amp;amp; People。
&lt;/p&gt;

&lt;p&gt;
自動化領域的變革是更高的數據可用性、互聯互通以及高速增長的處理能力。
&lt;/p&gt;

&lt;p&gt;
物聯網+的經典案例：
&lt;/p&gt;
&lt;ol class=&quot;org-ol&quot;&gt;
&lt;li&gt;前不久在漢諾威工業展上展示的利用智能傳感器遠程監測低壓電機的方案。 該方案減少了70％故障停工時間，減少了10％能源消耗，增加了30％使用期限；吸引了奧巴馬，默克爾同志的關注。&lt;/li&gt;
&lt;li&gt;與微軟攜手開發的電動汽車充電服務中心方案，將駕駛者，充電網絡運營商，支付商和合作伙伴相連。&lt;/li&gt;
&lt;li&gt;爲 140 艘馬士基集裝箱船提供導航優化軟件，根據船體設計以及天氣信息優化航線保障安全準時抵達&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgheadline2&quot; class=&quot;outline-3&quot;&gt;
&lt;h3 id=&quot;orgheadline2&quot;&gt;&lt;span class=&quot;section-number-3&quot;&gt;1.2&lt;/span&gt; 張斌《從製造到服務&amp;#x2013;中國經濟轉型與前景》&lt;/h3&gt;
&lt;div class=&quot;outline-text-3&quot; id=&quot;text-1-2&quot;&gt;
&lt;p&gt;
首先介紹了工業革命的國際經驗。工業革命的背後邏輯線索是：更大的市場規模 &amp;#x2013;&amp;gt; 更高的專業化/生產效率 &amp;#x2013;&amp;gt; 更高的真實收入對更高級產品的需求/服務（亞當斯密） &amp;#x2013;&amp;gt; 更大的市場規模。
&lt;/p&gt;

&lt;p&gt;
根據發達國家以往的經驗，1990 國際元是經濟結構轉型的收入臨界點，美國，加拿大，英國，法國，德國，日本在 1950 - 1970  年抵達。香港，台灣，韓國在 1981 - 1992 年達到。中國在 2014 年附近接近臨界點。
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgheadline4&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgheadline4&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;2&lt;/span&gt; 行業論壇&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-2&quot;&gt;
&lt;p&gt;
開幕式結束后是七場行業論壇：
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;ABB 助力石化企业实现可持续发展&lt;/li&gt;
&lt;li&gt;从制造到智造：聚焦方案，技术对谈&lt;/li&gt;
&lt;li&gt;为未来充电&lt;/li&gt;
&lt;li&gt;打造从船到闸口的高效智慧港口&lt;/li&gt;
&lt;li&gt;把握机遇   推动水行业可持续发展&lt;/li&gt;
&lt;li&gt;可再生能源发展在中国的机遇与挑战&lt;/li&gt;
&lt;li&gt;“一带一路”—— 铁路发展与机遇&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
我參加了第一場行業論壇，由 ABB 過程自動化事業部 CEO Peter Terwiesch 主講，介紹了公司在石油化工領域的解決方案。
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
</content>
 </entry>
 
 <entry>
   <title>歷屆 ABB 自動化世界</title>
   <link href="http://kimi.im/2016-05-17-abb-automation-world"/>
   <updated>2016-05-17T00:00:00+00:00</updated>
   <id>http://kimi.im/abb-automation-world</id>
   <content type="html">&lt;p&gt;
明天一年一度的“ABB自動化世界”將在湖北武漢開啓。
&lt;/p&gt;

&lt;p&gt;
ABB自動化世界是ABB集團在亞洲最大的客戶活動。活動歷經七年的發展，已經成爲中國國內自動化領域的年度盛典。活動內容包括主題論壇、行業論壇、培訓講座、案例分析以及新產品展覽展示。
&lt;/p&gt;

&lt;p&gt;
今天，全國各地的行業客戶、合作夥伴、分銷商代表、集成商、設備製造商、學術機構、行業協會以及行業媒體從世界各地雲集武漢參加此次盛會。武漢天河機場到處掛滿了選場橫幅，足見集團對這個活動的支持力度。幾十輛機場大巴源源不斷的接收訪客前往酒店下榻，準備迎接第二天豐富多彩的活動。
&lt;/p&gt;

&lt;a data-flickr-embed=&quot;true&quot;  href=&quot;https://www.flickr.com/photos/kimim-photo/26798036740/in/dateposted-public/&quot; title=&quot;aw2016&quot;&gt;&lt;img src=&quot;https://farm8.staticflickr.com/7276/26798036740_a4928214c5_c.jpg&quot; width=&quot;800&quot; height=&quot;413&quot; alt=&quot;aw2016&quot;&gt;&lt;/a&gt;&lt;script async src=&quot;//embedr.flickr.com/assets/client-code.js&quot; charset=&quot;utf-8&quot;&gt;&lt;/script&gt;

&lt;p&gt;
此次大會的主題是“智能技術，智慧跨越（Smart Technology, Intelligent Upgrading）”。口號主題和2014，2015年一樣，可見智慧跨越不是一觸而就的事業。根據顧純元博士的邀請函，2016年活動響應兩個國家戰略：“一帶一路”和“中部崛起”。因此活動地點也選擇了華中地區工業重鎮武漢。
&lt;/p&gt;


&lt;blockquote&gt;
&lt;p&gt;
顧博士如是說：
&lt;/p&gt;

&lt;p&gt;
2016年是中国“十三五”规划的开局之年，中国经济正面临着下行的压力和供给侧改革的课题，工业领域亟待转型与结构调整，经济发展的方式、速度和动力都发生了改变，全面进入“新常态”。在目前的宏观环境下，植根中国市场二十余载的ABB始终坚定信心，顺势而为，积极整合内部资源，在支持中国能源结构调整、工业生产效率提升、新型城镇化建设、“一带一路”战略推进等方面发力，挖掘“新常态”下的新机遇，成为中国全面建成小康社会进程中的可靠合作伙伴。
&lt;/p&gt;

&lt;p&gt;
“ABB自动化世界”活动正是充分展示ABB自动化及电力技术如何满足当前中国工业市场发展需求的最佳平台。这一年度盛事已连续举办了七年，也将ABB的品牌影响力扩展到了不同的城市，今年5月，我们将“挺进”华中地区最大的城市——武汉，在江城与来自全国各地的合作伙伴共商发展大计。武汉地处长江经济带，地理位置优越，且拥有光电子、钢铁化工、汽车、装备制造、能源环保、食品烟草等优势产业，在“中部崛起”的国家战略推动下，武汉近年来经济发展迅速，蕴藏着巨大潜力。ABB希望借“自动化世界”的举办，走进武汉及周边城市的工业企业和行业机构，深入沟通，增进了解，为未来的广泛合作夯实基础。
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;
今晚，先來溫故一下歷屆“ABB自動化世界”都有哪些精彩的活動。
&lt;/p&gt;

&lt;div id=&quot;outline-container-orgheadline1&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgheadline1&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;1&lt;/span&gt; 2009 年&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-1&quot;&gt;
&lt;p&gt;
2009年ABB自動化世界在上海舉辦了第一次活動。其主題是“創新與資源效率（Innovation
and resource efficiency）”。活動邀請了1000多名嘉賓參與，爲低迷的自動化市場注射了一劑強心劑。
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgheadline2&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgheadline2&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;2&lt;/span&gt; 2010 年&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-2&quot;&gt;
&lt;p&gt;
第二屆“ABB自動化世界”依然在上海舉辦，活動主題是“智能技術與能源效率（Smart
Technologies and Energy Efficiency）”。這一年世博會在上海召開，ABB機器人走進瑞典國家館，ABB積極投身世博項目建設。
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgheadline3&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgheadline3&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;3&lt;/span&gt; 2011 年&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-3&quot;&gt;
&lt;p&gt;
第三屆“ABB自動化世界”於5月11日，在北京召開。活動主題是“能源效率與可再生能源（Energy Efficiency and Renewable Energy）”。這一年國家“十二五”計劃出臺，公司爲響應政府號召，第一次在首都舉辦了這次活動。這一年，我入職ABB。
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgheadline4&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgheadline4&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;4&lt;/span&gt; 2012 年&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-4&quot;&gt;
&lt;p&gt;
第四屆“ABB自動化世界”於6月6日，在上海召開。活動主題是“產業升級與服務（Industry
upgrade and service）”。參會人數突破2700人。
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgheadline5&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgheadline5&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;5&lt;/span&gt; 2013 年&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-5&quot;&gt;
&lt;p&gt;
第五屆“ABB自動化世界”於5月23日，在北京召開。活動主題是“創新技術提升產業效率（Innovative Technologies Improve Productivity）”。參會人數突破3000人。
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgheadline6&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgheadline6&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;6&lt;/span&gt; 2014 年&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-6&quot;&gt;
&lt;p&gt;
第六屆“ABB自動化世界”於5月15日，在廣州召開。活動主題是“智能技術，智慧跨越（Smart
Technology, Intelligent Upgrading）”。首次在北京上海以外的廣州召開，參會人數突破
4000人。
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgheadline7&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgheadline7&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;7&lt;/span&gt; 2015 年&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-7&quot;&gt;
&lt;p&gt;
第七屆“ABB自動化世界”於6月3日，在成都召開。活動主題依然是“智能技術，智慧跨越（Smart Technology, Intelligent Upgrading）”。首次在內陸城市召開，參會人數突破
4500人。
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
</content>
 </entry>
 
 <entry>
   <title>从2016汉诺威工业展看工业4.0的发展现状</title>
   <link href="http://kimi.im/2016-05-16-hannover-messe-2016"/>
   <updated>2016-05-16T00:00:00+00:00</updated>
   <id>http://kimi.im/hannover-messe-2016</id>
   <content type="html">&lt;p&gt;
在刚刚结束的汉诺威展上展示了很多工业和能源方面的创新科技，呈现了工业4.0从概念到现实的突破。虽然不能亲临现场参观观摩，但是从前方记者采集的资料学习学习还是会有收获的。
&lt;/p&gt;


&lt;div id=&quot;outline-container-orgheadline1&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgheadline1&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;1&lt;/span&gt; 美国，奥巴马&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-1&quot;&gt;
&lt;p&gt;
首先值得一提的是，这次的 Hannover Messe 居然还吸引了美国总统奥巴马前来参观。展会开幕当晚，奥巴马和默克尔同台发表了演说表明了对汉诺威展的支持，以及对工业4.0发展的展望。根据参展人员介绍，奥马巴参观的两个展厅严格限制了闲杂人员的走动，相当具有安全意识，万一出岔子那是全世界要轰动的。
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgheadline6&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgheadline6&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;2&lt;/span&gt; 全球工业 4.0 战略&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-2&quot;&gt;
&lt;/div&gt;&lt;div id=&quot;outline-container-orgheadline2&quot; class=&quot;outline-3&quot;&gt;
&lt;h3 id=&quot;orgheadline2&quot;&gt;&lt;span class=&quot;section-number-3&quot;&gt;2.1&lt;/span&gt; 中国&lt;/h3&gt;
&lt;div class=&quot;outline-text-3&quot; id=&quot;text-2-1&quot;&gt;
&lt;p&gt;
中国提出了中国制造 2025 计划。另外 2015 年 7 月 14 日中国工信部还和德国
BMWi（Die Kommunikations- und Informationsplattform des Bundesministeriums für
Wirtschaft und Energie&lt;sup&gt;(de)&lt;/sup&gt;，German Federal Ministry for Economic Affairs and
Energy&lt;sup&gt;(en)&lt;/sup&gt;）&lt;sup&gt;&lt;a id=&quot;fnr.1&quot; class=&quot;footref&quot; href=&quot;#fn.1&quot;&gt;1&lt;/a&gt;&lt;/sup&gt; 签订了谅解备忘录，旨在增强两国智能制造领域的创新合作。
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgheadline3&quot; class=&quot;outline-3&quot;&gt;
&lt;h3 id=&quot;orgheadline3&quot;&gt;&lt;span class=&quot;section-number-3&quot;&gt;2.2&lt;/span&gt; 美国&lt;/h3&gt;
&lt;div class=&quot;outline-text-3&quot; id=&quot;text-2-2&quot;&gt;
&lt;p&gt;
美国组建了 SMLC 协会（Smart Manufacturing Leadership Coalition），并提出了开放的平台标准： Open Smart Manufacturing Platform，其目标是整合开放的网络信息技术来帮助制造企业实现智能化生产，从而缩减制造成本，减少商业风险。
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgheadline4&quot; class=&quot;outline-3&quot;&gt;
&lt;h3 id=&quot;orgheadline4&quot;&gt;&lt;span class=&quot;section-number-3&quot;&gt;2.3&lt;/span&gt; 日本&lt;/h3&gt;
&lt;div class=&quot;outline-text-3&quot; id=&quot;text-2-3&quot;&gt;
&lt;p&gt;
日本经济产业省（経済産業省&lt;sup&gt;(jp)&lt;/sup&gt;，Ministry of Economy, Trade and Industry&lt;sup&gt;(en)&lt;/sup&gt;）以及企业组织提出了Industrial Value Chain Initiative（www.iv-i.org），旨在通过物联网技术和工业 4.0概念帮助制造企业实现高效协作。IVI 官网表明了其宗旨：The
Industrial Value Chain Initiative (IVI) is a forum to design a new society by
combining manufacturing and information technologies, and for all enterprises to
take an initiative collaboratively.
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgheadline5&quot; class=&quot;outline-3&quot;&gt;
&lt;h3 id=&quot;orgheadline5&quot;&gt;&lt;span class=&quot;section-number-3&quot;&gt;2.4&lt;/span&gt; 印度&lt;/h3&gt;
&lt;div class=&quot;outline-text-3&quot; id=&quot;text-2-4&quot;&gt;
&lt;p&gt;
2014 年 9 月 25 日，印度首相 Narendra Modi 宣布了“Make in India”计划。目标是鼓励印度国内企业以及跨国公司在印度生产。另外印度还有一个数字印度计划（Digital India），目标是通过工业 4.0 技术以及智能信息化技术来构建印度数字社会和知识经济：The
Digital India programme is a flagship programme of the Government of India with
a vision to transform India into a digitally empowered society and knowledge
economy.
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgheadline11&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgheadline11&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;3&lt;/span&gt; 工业 4.0 成果&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-3&quot;&gt;
&lt;p&gt;
目前已经实施的标准包括 OPC UA（OPC Unified Architecture），ISA95。另外 Plattform
Industrie 4.0 和 IIC 在今年 3 月份提出的两个参考架构模型 Reference Architecture
Model for Industry 4.0（RAMI4.0）和 Industrial Internet Reference
Architecture（IIRA）。以下先简单了解下他们的概念，今后逐个学习一番：
&lt;/p&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgheadline7&quot; class=&quot;outline-3&quot;&gt;
&lt;h3 id=&quot;orgheadline7&quot;&gt;&lt;span class=&quot;section-number-3&quot;&gt;3.1&lt;/span&gt; OPC UA&lt;/h3&gt;
&lt;div class=&quot;outline-text-3&quot; id=&quot;text-3-1&quot;&gt;
&lt;p&gt;
The OPC Unified Architecture (UA), released in 2008, is a platform independent
service-oriented architecture that integrates all the functionality of the
individual OPC Classic specifications into one extensible framework.&lt;sup&gt;&lt;a id=&quot;fnr.2&quot; class=&quot;footref&quot; href=&quot;#fn.2&quot;&gt;2&lt;/a&gt;&lt;/sup&gt;
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgheadline8&quot; class=&quot;outline-3&quot;&gt;
&lt;h3 id=&quot;orgheadline8&quot;&gt;&lt;span class=&quot;section-number-3&quot;&gt;3.2&lt;/span&gt; ISA95&lt;/h3&gt;
&lt;div class=&quot;outline-text-3&quot; id=&quot;text-3-2&quot;&gt;
&lt;p&gt;
ISA-95 is an international standard that defines the terminology and models used
in the integration of business systems at the enterprise level with control
systems at the plant-floor level.
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgheadline9&quot; class=&quot;outline-3&quot;&gt;
&lt;h3 id=&quot;orgheadline9&quot;&gt;&lt;span class=&quot;section-number-3&quot;&gt;3.3&lt;/span&gt; RAMI 4.0&lt;/h3&gt;
&lt;div class=&quot;outline-text-3&quot; id=&quot;text-3-3&quot;&gt;
&lt;p&gt;
The German Industrie 4.0 platform, consisting of ZVEI, VDMA, and BITKOM, has
jointly reached important milestones in the standardization of Industrie
4.0. The first version of a reference architecture model for Industrie 4.0 (RAMI
4.0) which precisely describes Industrie 4.0-compliant production equipment, has
been developed.
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgheadline10&quot; class=&quot;outline-3&quot;&gt;
&lt;h3 id=&quot;orgheadline10&quot;&gt;&lt;span class=&quot;section-number-3&quot;&gt;3.4&lt;/span&gt; IIRA&lt;/h3&gt;
&lt;div class=&quot;outline-text-3&quot; id=&quot;text-3-4&quot;&gt;
&lt;p&gt;
The Industrial Internet Reference Architecture (IIRA) is a standard based open
architecture for IISs. To maximize its value, the IIRA has broad industry
applicability to drive interoperability, to 85 map applicable technologies, and
to guide technology and standard development.
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;footnotes&quot;&gt;
&lt;h2 class=&quot;footnotes&quot;&gt;Footnotes: &lt;/h2&gt;
&lt;div id=&quot;text-footnotes&quot;&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.1&quot; class=&quot;footnum&quot; href=&quot;#fnr.1&quot;&gt;1&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;http://www.bmwi.de/&quot;&gt;http://www.bmwi.de/&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.2&quot; class=&quot;footnum&quot; href=&quot;#fnr.2&quot;&gt;2&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;https://opcfoundation.org/about/opc-technologies/opc-ua/&quot;&gt;https://opcfoundation.org/about/opc-technologies/opc-ua/&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;


&lt;/div&gt;
&lt;/div&gt;
</content>
 </entry>
 
 <entry>
   <title>ABB PLC  產品學習</title>
   <link href="http://kimi.im/2016-05-11-abb-plc"/>
   <updated>2016-05-11T00:00:00+00:00</updated>
   <id>http://kimi.im/abb-plc</id>
   <content type="html">&lt;p&gt;
今天早上 5 點半起床，6 點出去狂奔了一個小時 10 公里，跑步的時候腦子裡出現了強迫性思維，一直在想著 PLC，不是拌麵，餛飩和小籠包，而是 PLC，PLC 啊。
&lt;/p&gt;

&lt;p&gt;
所以晚上趁著家人睡覺時間來學習學習 ABB 公司的 PLC 系列產品。
&lt;/p&gt;

&lt;div id=&quot;outline-container-orgheadline1&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgheadline1&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;1&lt;/span&gt; 什麼是 PLC&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-1&quot;&gt;
&lt;p&gt;
要學習 PLC 產品，首先得知道 PLC 是個什麼東西。按照誤導了魏則西找錯醫院的搜索公司百度公司的百科應用《百度百科》的介紹，PLC 的全稱是 Programmable Logic Controller，中文名叫可編程邏輯控制器：
&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;
PLC 是一類採用可編程存儲器的存儲器，用於其內部存儲程序，執行邏輯運算、順序控制、定時、計數和算術操作等面向用戶的指令，并通過數字或模擬式輸入/輸出控制各種類型的機械或生產過程。
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;
是不是覺得相當費解？我也這麼覺得。
&lt;/p&gt;

&lt;p&gt;
我的思考方式一向來喜歡先解構后歸納。所以一起先把 PLC 解構一下。
&lt;/p&gt;

&lt;p&gt;
剛才知道了，P 代表 Programmable，也就是說 PLC 這款產品具有可編程的特性。所謂的可編程就是可以反復不斷的進行程序的修改變動，是一種很靈活的特性。其對立面就是不可編程（unprogrammable, not able to be programmed）。拿美術來打比方，unprogrammable
的設備就好像是版畫，一次刻版就不能再改了，以後就可以不斷的印版。而 programmable
就好像是黑板報，出完一期，拿黑板擦擦乾淨又可以繼續畫畫圖圖了。
&lt;/p&gt;

&lt;p&gt;
logic 邏輯，是 program 的對象，這個設備上可以設置的是 logic 運算，狹義的 logic
運算包括求與求或求反。廣義的 logic 表示計算機能出來的各種運算。顯然這裡用廣義的概念。
&lt;/p&gt;

&lt;p&gt;
controller 控制器，這個是 PLC 的主體，一種可以通過數字（0 或者 1）以及模擬（0 ~
100%）輸入輸出信號來操作被控對象，并根據反饋信號進行調整的裝置。
&lt;/p&gt;

&lt;p&gt;
綜上所訴，簡單的說：PLC 是一款可以通過編程配置邏輯運算的控制器。
&lt;/p&gt;

&lt;p&gt;
順便提一下，德語稱之為 SPS（Speicherprogramierbare Steuerung）, 存儲可編程迴路控制器：
&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;
Eine speicherprogrammierbare Steuerung (SPS, englisch: Programmable Logic
Controller, PLC) ist ein Gerät, das zur Steuerung oder Regelung einer Maschine
oder Anlage eingesetzt und auf digitaler Basis programmiert wird.
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;
法語叫 API（Automate programmable industriel），自動化可編程工業：
&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;
Un automate programmable industriel, ou API, est un dispositif électronique
programmable destiné à la commande de processus industriels par un traitement
séquentiel.
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;
看起來英語和德語完勝法語名稱。
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgheadline2&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgheadline2&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;2&lt;/span&gt; ABB PLC 控制器&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-2&quot;&gt;
&lt;p&gt;
前面章節本來想簡單了解一下 PLC 的概念的，一不小心就跑題了。接下來調研一下 ABB 的
PLC 控制器。
&lt;/p&gt;

&lt;p&gt;
ABB 目前市面上有四款 PLC 產品，分別是 AC500, AC500-eCo, AC500-S 和 AC500-XC。這幾款 PLC 產品覆蓋了小中大各種應用場景。
&lt;/p&gt;

&lt;p&gt;
其中 AC500 是 ABB PLC 旗艦產品，提供了高效的性能，豐富的通訊接口和輸入輸出能力。適合複雜高速的機械控制應用。
&lt;/p&gt;

&lt;p&gt;
AC500﹣eCo 是一款緊湊型號的 PLC 產品，特色是靈活便捷、價廉物美。適合于小型控制應用。
&lt;/p&gt;

&lt;p&gt;
AC500-S 符合 SIL3 安全認證，適合複雜的安全相關應用。
&lt;/p&gt;

&lt;p&gt;
AC500-XC(Extreme Condition)，從字面來看這款 PLC 產品能在極限工作環境下工作，比如超高超低溫度( -40 到 +70 °C )、濕度、震動、有毒易燃環境等。
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgheadline3&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgheadline3&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;3&lt;/span&gt; ABB PLC 配套系統&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-3&quot;&gt;
&lt;p&gt;
AC500 系列是 PLC 的核心控制器組建，提供了邏輯控制功能，另外還需要有周邊配套設備才能構成完整的 PLC 控制系統：
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;輸入輸出設備 S500 I/O，包括 digital input，digital output，analog input 以及 analog
output 等&lt;/li&gt;
&lt;li&gt;此外還有通信接口卡用於擴展工廠已有的系統，比如 PROFIBUS DP，PROFINET，Ethernet，
Modbus TCP，CANopen 等。&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
</content>
 </entry>
 
 <entry>
   <title>可愛的招財貓</title>
   <link href="http://kimi.im/2016-05-08-Maneki-neko"/>
   <updated>2016-05-08T00:00:00+00:00</updated>
   <id>http://kimi.im/Maneki-neko</id>
   <content type="html">&lt;p&gt;
因為過幾日要去日本遊玩觀光，所以補一補日本相關知識，這幾天看了《這次徹底了解日本
3》。這本書介紹範圍很廣，包括日本的建築，工匠，節日，風景等。
&lt;/p&gt;

&lt;p&gt;
在 4.1 章“神靈八百萬”講了些有趣的神靈故事。日本人認為自然萬物都是有神靈的，和我們古人一樣認為萬物有靈。他們號稱世上神靈八百萬。對日本而言，8 這個數字意味著多，一般中國以 9 表示多，這其中有些有趣的差異。
&lt;/p&gt;

&lt;p&gt;
日本人認為山川、河流、土地、風雨雷電、動物、植物都是有相應的神靈的，甚至廁所也有“廁所之神”。據說還是一位非常美麗的女神，掌管人類的生育。我們在商店裡經常看到的可愛的招財貓也是日本八百萬神之一。據說彥根藩藩主井伊直孝（天正 18 年 2 月 11 日（ 1590 年 3 月 16 日 ）- 萬治元年 6 月 28 日（ 1659 年 8 月 16 日 ））有一天獵鷹歸來遇到大雨就躲到了東京的豪德寺（ごうとくじ，Gohtokuji）前避雨。突然出現一隻可愛的白貓，朝著井伊直孝招招爪子，然後跑進廟裡。直孝就跟著這隻貓進了廟裡，剛一進廟，廟門口就被雷劈了，直孝藩主就很慶幸的躲過了雷劈。為了表達感激之情，直孝同學就給這個廟捐贈大量財物。那隻小白貓死後，廟裡的主持非常難過，就把小貓埋葬在豪德寺墳墓一角，并命名為“招福貓兒”，還在寺廟裡建了“招貓殿”供奉招貓觀音。所以後來豪德寺也被人們稱為貓寺。
&lt;/p&gt;

&lt;a data-flickr-embed=&quot;true&quot;  href=&quot;https://www.flickr.com/photos/kimim-photo/26277822424/in/dateposted-public/&quot; title=&quot;豪德寺&quot;&gt;&lt;img src=&quot;https://farm8.staticflickr.com/7705/26277822424_2258868e12_z.jpg&quot; width=&quot;640&quot; height=&quot;485&quot; alt=&quot;豪德寺&quot;&gt;&lt;/a&gt;&lt;script async src=&quot;//embedr.flickr.com/assets/client-code.js&quot; charset=&quot;utf-8&quot;&gt;&lt;/script&gt;

&lt;p&gt;
豪德寺位於東京涉谷西面，廟裡到處拜訪了招財貓，可謂貓山貓海。去東京旅遊可以去從涉谷出發去轉一圈，然後再往西前往多摩遊玩另一個貓貓樂園三麗鷗彩虹樂園那裡是小朋友的最愛。
&lt;/p&gt;

&lt;a data-flickr-embed=&quot;true&quot;  href=&quot;https://www.flickr.com/photos/kimim-photo/26849553856/in/dateposted-public/&quot; title=&quot;DSCF0303&quot;&gt;&lt;img src=&quot;https://farm8.staticflickr.com/7235/26849553856_14155c7ea3_z.jpg&quot; width=&quot;640&quot; height=&quot;427&quot; alt=&quot;DSCF0303&quot;&gt;&lt;/a&gt;&lt;script async src=&quot;//embedr.flickr.com/assets/client-code.js&quot; charset=&quot;utf-8&quot;&gt;&lt;/script&gt;

&lt;a data-flickr-embed=&quot;true&quot;  href=&quot;https://www.flickr.com/photos/kimim-photo/26279029823/in/dateposted-public/&quot; title=&quot;DSCF0306&quot;&gt;&lt;img src=&quot;https://farm8.staticflickr.com/7211/26279029823_e776f1f985_z.jpg&quot; width=&quot;640&quot; height=&quot;427&quot; alt=&quot;DSCF0306&quot;&gt;&lt;/a&gt;&lt;script async src=&quot;//embedr.flickr.com/assets/client-code.js&quot; charset=&quot;utf-8&quot;&gt;&lt;/script&gt;
</content>
 </entry>
 
 <entry>
   <title>工業 4.0 的基本概念</title>
   <link href="http://kimi.im/2016-05-07-induststrie-4.0"/>
   <updated>2016-05-07T00:00:00+00:00</updated>
   <id>http://kimi.im/induststrie-4.0</id>
   <content type="html">&lt;p&gt;
最近幾年來“工業 4.0” 這個概念變得很火。政府在提倡，企業在跟進，大家在熱議。作為工業自動化行業的小白，好好做功課學習是義不容辭的事情了。
&lt;/p&gt;

&lt;div id=&quot;outline-container-orgheadline1&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgheadline1&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;1&lt;/span&gt; 名詞解析&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-1&quot;&gt;
&lt;p&gt;
“工業 4.0” 從字面看，包含兩部分，首先是“工業”，其次是“4.0”。
&lt;/p&gt;

&lt;p&gt;
首先，工業（industry）是指採集原料，並把它們加工成產品的工作和過程。是第二產業的重要組成部分，分為輕工業和重工業。2014 年中國工業總產值達到 4 萬億美元，號稱超過了美國，成為世界頭號工業生產國&lt;sup&gt;&lt;a id=&quot;fnr.1&quot; class=&quot;footref&quot; href=&quot;#fn.1&quot;&gt;1&lt;/a&gt;&lt;/sup&gt;。2015 年的工業總產值達到了 4.18 萬億美元。（27.17645  萬億人民幣）&lt;sup&gt;&lt;a id=&quot;fnr.2&quot; class=&quot;footref&quot; href=&quot;#fn.2&quot;&gt;2&lt;/a&gt;&lt;/sup&gt;
&lt;/p&gt;

&lt;p&gt;
其次，4.0 這種數字在軟件領域常用來表示第四個大版本。在這裡用來表示工業的第四代階段。那麼相應的前幾代分別是工業 1.0，工業 2.0 和工業 3.0。
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;工業 1.0 的主要代表是機械化（mechanization）， 水力（water power），蒸汽機（steam power）。&lt;/li&gt;
&lt;li&gt;工業 2.0 以大規模生產（mass production），生產線（assembly line），電力為代表。&lt;/li&gt;
&lt;li&gt;工業 3.0 以電子設備，信息技術，計算機輔助和自動化為代表的現代化生產。&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
工業 4.0 以智能集成傳感系統（Cyber-Physical Systems，CPS）為核心，引入物聯網（Internet of Things，IoT），雲計算（Cloud Computing），大數據分析（Big Data），智能工廠（Smart Factory）等概念第四代工業革命。其目的是講所有工業相關技術統合在一起，創建具有適應性，資源高效率用，優化整合價值鏈，萬物互聯的具有感知意識的新型智能工業世界。
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgheadline2&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgheadline2&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;2&lt;/span&gt; 工業 4.0 的誕生&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-2&quot;&gt;
&lt;p&gt;
”工業 4.0“ 這個概念最早是在 2011 年的漢諾威工業展上提出的：
&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;
Zur Hannover Messe tritt die Initiative &quot;Industrie 4.0&quot; an die
Öffentlichkeit. Henning Kagermann, Wolf-Dieter Lukas, Wolfgang Wahlster, drei
Vertreter aus Wirtschaft, Politik und Wissenschaft, zeigen im nachfolgenden
Beitrag, wie der Paradigmenwechsel in der Industrie ablaufen wird. In der
nächsten Dekade werden auf der Basis Cyber-Physischer Systeme neue
Geschäftsmodelle möglich. Deutschland könnte hierbei &quot;die erste Geige&quot; spielen.
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;
2011 年的 4 月 4 日，Henning Kagermann 等人向德國政府倡議發展基於
Cyber-Physischer Systeme 技術的“工業 4.0”規劃。此後，在 2013 年 4 月 8 日的
Hannover Messe 上，Siegfried Dais 和 Henning Kagermann 展示了 Industrie 4.0 工作小組報告戰略計劃。德國政府計劃為此投入 2 萬億歐元。從此，工業 4.0 成為德國的一個重要標籤，全球範圍內引發了新一輪的轉型競賽。
&lt;/p&gt;

&lt;p&gt;
去年，中國政府實施了製造強國戰略第一個十年行動綱領《中國製造 2025》規劃，可以認為是中國版的工業 4.0 計劃：
&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;
Laut Medienberichten soll dem chinesischen Staatsrat ein Plan „Made in China
2025“ – die chinesische Version von „Industrie 4.0“ – vorgelegt werden.&lt;sup&gt;&lt;a id=&quot;fnr.3&quot; class=&quot;footref&quot; href=&quot;#fn.3&quot;&gt;3&lt;/a&gt;&lt;/sup&gt;
&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;footnotes&quot;&gt;
&lt;h2 class=&quot;footnotes&quot;&gt;Footnotes: &lt;/h2&gt;
&lt;div id=&quot;text-footnotes&quot;&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.1&quot; class=&quot;footnum&quot; href=&quot;#fnr.1&quot;&gt;1&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;http://finance.people.com.cn/n/2013/0904/c1004-22803247.html&quot;&gt;http://finance.people.com.cn/n/2013/0904/c1004-22803247.html&lt;/a&gt; 中国工业产值超美国26% 取代其成头号制造国
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.2&quot; class=&quot;footnum&quot; href=&quot;#fnr.2&quot;&gt;2&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;http://data.stats.gov.cn/easyquery.htm?cn=C01&quot;&gt;http://data.stats.gov.cn/easyquery.htm?cn=C01&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.3&quot; class=&quot;footnum&quot; href=&quot;#fnr.3&quot;&gt;3&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;http://german.people.com.cn/n/2015/0323/c209052-8867323.html&quot;&gt;http://german.people.com.cn/n/2015/0323/c209052-8867323.html&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;


&lt;/div&gt;
&lt;/div&gt;
</content>
 </entry>
 
 <entry>
   <title>德國人的生日習俗</title>
   <link href="http://kimi.im/2016-04-16-german-birthday-taboo"/>
   <updated>2016-04-16T00:00:00+00:00</updated>
   <id>http://kimi.im/german-birthday-taboo</id>
   <content type="html">&lt;p&gt;
因為和德國人接觸比較多，所以對他們了解也會多一些，就比如他們的生日習俗有些注意事項。
&lt;/p&gt;

&lt;a data-flickr-embed=&quot;true&quot;  href=&quot;https://www.flickr.com/photos/kimim-photo/26450752245/in/dateposted-public/&quot; title=&quot;Geburtstagskuchen&quot;&gt;&lt;img src=&quot;https://farm2.staticflickr.com/1718/26450752245_a09f153af7_z.jpg&quot; width=&quot;640&quot; height=&quot;427&quot; alt=&quot;Geburtstagskuchen&quot;&gt;&lt;/a&gt;&lt;script async src=&quot;//embedr.flickr.com/assets/client-code.js&quot; charset=&quot;utf-8&quot;&gt;&lt;/script&gt;

&lt;div id=&quot;outline-container-orgheadline1&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgheadline1&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;1&lt;/span&gt; 德國人生日習俗，生日傳統&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-1&quot;&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;絕對不要在德國人的生日那天之前向他們祝福生日快樂。因為他們認為這是一件不吉利的事情。德國人在生日那一天之前沒有生日祝福，沒有禮物，沒有蛋糕（der
Geburtstagskuchen），賀卡。&lt;/li&gt;
&lt;li&gt;在部分奧地利地區，他們在生日前一天晚上慶祝生日（Geburtstagfeier）。&lt;/li&gt;
&lt;li&gt;假如德國人邀請你參加他們的生日宴會，一般來說都是他們請客的。&lt;/li&gt;
&lt;li&gt;德國北部地區還有一個習俗，就是如果你在 30 歲生日的時候還是單身的話，好友們會要求女生用牙刷幫他們清洗門把手，要求男生去公共場所去掃地。如果想避免懲罰，就得找到一名異性來給你一個 kiss。&lt;/li&gt;
&lt;li&gt;16歲生日的時候，人們通常會往你頭上撒麵粉。&lt;/li&gt;
&lt;li&gt;18歲生日的時候，人們會往你頭上砸雞蛋。&lt;/li&gt;
&lt;li&gt;25歲生日的時候：
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;如果你還是單身男生，用在繩子上串上襪子（Sockenkranz），一直從你家連到生日
party。每隔幾米你就得喝掉一杯酒。在德語里，老襪子（alte Socke）表示光棍的意思。&lt;/li&gt;
&lt;li&gt;如果是女生，人們會掛上一串香煙盒。德語里， 老盒子（eine alte Schachtel）表示老處女的意思。&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;小孩子生日的時候，大人們通常會準備一種叫 Geburtstagskranz 的木頭小圈，上面打了小孔，可以插蠟燭。&lt;/li&gt;
&lt;/ul&gt;

&lt;a data-flickr-embed=&quot;true&quot;  href=&quot;https://www.flickr.com/photos/kimim-photo/26450713515/in/dateposted-public/&quot; title=&quot;Geburtstagskranz&quot;&gt;&lt;img src=&quot;https://farm2.staticflickr.com/1463/26450713515_b4f58f6aee_o.jpg&quot; width=&quot;500&quot; height=&quot;381&quot; alt=&quot;Geburtstagskranz&quot;&gt;&lt;/a&gt;&lt;script async src=&quot;//embedr.flickr.com/assets/client-code.js&quot; charset=&quot;utf-8&quot;&gt;&lt;/script&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgheadline2&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgheadline2&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;2&lt;/span&gt; 經驗教訓&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-2&quot;&gt;
&lt;p&gt;
對於像生日，紀念日，忌日，宗教紀念日等日子的活動，有外賓在場的時候，最好能好好查一查，有什麼注意事項，避免出錯。
&lt;/p&gt;

&lt;p&gt;
還有飲食上面其實也有不少禁忌吧。
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
</content>
 </entry>
 
 <entry>
   <title>漂亮的不鏽鋼簽字筆</title>
   <link href="http://kimi.im/2016-04-15-pretty-pen"/>
   <updated>2016-04-15T00:00:00+00:00</updated>
   <id>http://kimi.im/pretty-pen</id>
   <content type="html">&lt;p&gt;
最近在某寶買了兩支不鏽鋼簽字筆， 握在手裡超級有質感，沉甸甸的，對於我這樣的金屬控，完全沒法抗拒。
&lt;/p&gt;

&lt;a data-flickr-embed=&quot;true&quot;  href=&quot;https://www.flickr.com/photos/kimim-photo/26351119032/in/dateposted-public/&quot; title=&quot;IMG_2047&quot;&gt;&lt;img src=&quot;https://farm2.staticflickr.com/1689/26351119032_5f504f47de_z.jpg&quot; width=&quot;480&quot; height=&quot;640&quot; alt=&quot;IMG_2047&quot;&gt;&lt;/a&gt;&lt;script async src=&quot;//embedr.flickr.com/assets/client-code.js&quot; charset=&quot;utf-8&quot;&gt;&lt;/script&gt;

&lt;p&gt;
於是就計劃著讓賣家給我定制我的專屬系列 手繪小河馬不鏽鋼簽字筆，全球唯一編號，這個世界上只有這麼一款。想想就很激動。
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>單詞本：德語單詞 prost</title>
   <link href="http://kimi.im/2016-04-12-deutsch-prost"/>
   <updated>2016-04-12T00:00:00+00:00</updated>
   <id>http://kimi.im/deutsch-prost</id>
   <content type="html">&lt;div id=&quot;outline-container-orgheadline1&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgheadline1&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;1&lt;/span&gt; Prost&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-1&quot;&gt;
&lt;p&gt;
今天我們的前老闆，一個德國老頭回來了。喝酒的時候就試著用德語說乾杯，一開始說
Prast，結果人家愣是沒聽懂，旁邊一個懂德語的同事提醒才知道，應該是 Prost。中間的母音說錯了。不過呢，學習語言，說錯了在所難免的。所以晚上回家趁熱打鐵，扒一扒
Prost 這個單詞是怎麼來的，什麼含義，怎麼用。
&lt;/p&gt;

&lt;p&gt;
順便提一下，prast 是立陶宛語裡面理解和感知的意思&lt;sup&gt;&lt;a id=&quot;fnr.1&quot; class=&quot;footref&quot; href=&quot;#fn.1&quot;&gt;1&lt;/a&gt;&lt;/sup&gt;。另外，Prast 和 Prost 都可以用作人名，分別是 普拉斯特&lt;sup&gt;&lt;a id=&quot;fnr.2&quot; class=&quot;footref&quot; href=&quot;#fn.2&quot;&gt;2&lt;/a&gt;&lt;/sup&gt; 和  普洛斯特&lt;sup&gt;&lt;a id=&quot;fnr.3&quot; class=&quot;footref&quot; href=&quot;#fn.3&quot;&gt;3&lt;/a&gt;&lt;/sup&gt;。
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgheadline2&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgheadline2&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;2&lt;/span&gt; Etymology of Prost / 源&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-2&quot;&gt;
&lt;p&gt;
這個詞原來是來自拉丁語，拉丁語里 pro 是“for，為了某某某”的意思。sit  是“may
it be”的意思，字面翻譯就是“may it be for (you)”。 那到底是 be 什麼呢？喝酒的時候當然是希望這個酒是對你有好處的，那麼，最大的希望就是希望這酒對你的健康有好處啦。因為人人都希望自己身體健康了。所以就引申為“但願這個對你健康有好處”，或者“祝你健康”。
&lt;/p&gt;

&lt;p&gt;
再後來，這個詞在酒桌上用的多了，就固化為一個常用的祝酒詞了。為了你的健康乾杯~
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgheadline3&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgheadline3&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;3&lt;/span&gt; Derivation of Prost / 引&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-3&quot;&gt;
&lt;ol class=&quot;org-ol&quot;&gt;
&lt;li&gt;prosten: prost 在酒桌上用的多了，就需要有個動詞來表示大家一起乾杯這個動作，於是就把它動詞化，變成 prosten， 就是舉起酒杯互相祝酒這個動作了。 也就是 ein
Prost ausbringen&lt;sup&gt;&lt;a id=&quot;fnr.4&quot; class=&quot;footref&quot; href=&quot;#fn.4&quot;&gt;4&lt;/a&gt;&lt;/sup&gt;。&lt;/li&gt;
&lt;li&gt;zuprosten:  加了前綴 zu-  就是“去敬酒”的意思啦。Er prostete ihr mit seinem
Glas zu&lt;sup&gt;&lt;a id=&quot;fnr.5&quot; class=&quot;footref&quot; href=&quot;#fn.5&quot;&gt;5&lt;/a&gt;&lt;/sup&gt;. 他用酒杯向他敬酒。&lt;/li&gt;
&lt;li&gt;Prost Mahlzeit!  那這個組合又是什麼鬼？不知道是什麼意思。從搜索到的網頁來看，應該是食譜，下酒菜的意思吧，比如這個 &lt;a href=&quot;http://www.prostmahlzeit.net/&quot;&gt;http://www.prostmahlzeit.net/&lt;/a&gt; 。但是 又有在線詞典說是“這下完了，倒黴了”的意思&lt;sup&gt;&lt;a id=&quot;fnr.6&quot; class=&quot;footref&quot; href=&quot;#fn.6&quot;&gt;6&lt;/a&gt;&lt;/sup&gt;。【更新 2016-04-13】後來找了地道的德國人確認了，確實就是倒黴了的意思。&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgheadline4&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgheadline4&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;4&lt;/span&gt; Synonym of Prost / 同&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-4&quot;&gt;
&lt;p&gt;
在德語里 prost 的同義詞還有
&lt;/p&gt;
&lt;dl class=&quot;org-dl&quot;&gt;
&lt;dt&gt;prosit&lt;/dt&gt;&lt;dd&gt;這個是拉丁語原詞。估計是學術派比較喜歡用吧。&lt;/dd&gt;
&lt;dt&gt;zum Wohl&lt;/dt&gt;&lt;dd&gt;這個說法可能更本土一些，Wohl 是本土德語里 good，well-being 的意思。&lt;/dd&gt;
&lt;dt&gt;zum Wohlsein&lt;/dt&gt;&lt;dd&gt;和前面那個一樣。可能更正式一些。Wohlsein, well-being&lt;sup&gt;(en)&lt;/sup&gt;&lt;/dd&gt;
&lt;dt&gt;Stößchen&lt;/dt&gt;&lt;dd&gt;啤酒杯的一種。引申為乾杯&lt;sup&gt;&lt;a id=&quot;fnr.7&quot; class=&quot;footref&quot; href=&quot;#fn.7&quot;&gt;7&lt;/a&gt;&lt;/sup&gt;。 就是這貨：&lt;/dd&gt;
&lt;/dl&gt;

&lt;a href=&quot;https://de.wikipedia.org/wiki/Stößchen&quot; title=&quot;Stößchen&quot;&gt;
&lt;img src=&quot;https://upload.wikimedia.org/wikipedia/commons/9/92/2011-12-27_St%C3%B6sschen_K%C3%B6lschglas_0%2C1_Liter.JPG&quot; width=&quot;640&quot; alt=&quot;Stößchen&quot;&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgheadline5&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgheadline5&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;5&lt;/span&gt; MultiLanguage / 異&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-5&quot;&gt;
&lt;p&gt;
英語我一般都是 cheers&lt;sup&gt;(en)&lt;/sup&gt;，因為大家都這麼說。法語一般說 à votre
santé&lt;sup&gt;(fr)&lt;/sup&gt; &lt;sup&gt;&lt;a id=&quot;fnr.8&quot; class=&quot;footref&quot; href=&quot;#fn.8&quot;&gt;8&lt;/a&gt;&lt;/sup&gt;
&lt;/p&gt;

&lt;p&gt;
此外，英語中也說 here&apos;s to you&lt;sup&gt;(en)&lt;/sup&gt;, here&apos;s to your health&lt;sup&gt;(en)&lt;/sup&gt;, your
health&lt;sup&gt;(en)&lt;/sup&gt;.
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgheadline6&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgheadline6&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;6&lt;/span&gt; 題外話&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-6&quot;&gt;
&lt;p&gt;
歐美人喝酒一般是要舉杯敬酒的，他們稱之為 ein Hoch auf jmdn. ausbringen，舉杯祝某人健康。而我們國內往往把酒杯放的很低，以表示對對方的尊敬。這些細小的文化差異會鬧出一些好玩的笑話。
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;footnotes&quot;&gt;
&lt;h2 class=&quot;footnotes&quot;&gt;Footnotes: &lt;/h2&gt;
&lt;div id=&quot;text-footnotes&quot;&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.1&quot; class=&quot;footnum&quot; href=&quot;#fnr.1&quot;&gt;1&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;https://en.wiktionary.org/wiki/prast&quot;&gt;https://en.wiktionary.org/wiki/prast&lt;/a&gt; &lt;i&gt;prast&lt;/i&gt; basically meant “to
understand,” “to perceive”
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.2&quot; class=&quot;footnum&quot; href=&quot;#fnr.2&quot;&gt;2&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;http://www.iciba.com/prast&quot;&gt;http://www.iciba.com/prast&lt;/a&gt; 释义 [人名] 普拉斯特
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.3&quot; class=&quot;footnum&quot; href=&quot;#fnr.3&quot;&gt;3&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;http://www.iciba.com/prost&quot;&gt;http://www.iciba.com/prost&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.4&quot; class=&quot;footnum&quot; href=&quot;#fnr.4&quot;&gt;4&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;http://www.duden.de/rechtschreibung/prosten&quot;&gt;http://www.duden.de/rechtschreibung/prosten&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.5&quot; class=&quot;footnum&quot; href=&quot;#fnr.5&quot;&gt;5&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;http://www.duden.de/rechtschreibung/zuprosten&quot;&gt;http://www.duden.de/rechtschreibung/zuprosten&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.6&quot; class=&quot;footnum&quot; href=&quot;#fnr.6&quot;&gt;6&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;http://www.godic.net/dicts/de/prost&quot;&gt;http://www.godic.net/dicts/de/prost&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.7&quot; class=&quot;footnum&quot; href=&quot;#fnr.7&quot;&gt;7&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;http://www.dict.cc/german-english/St%C3%B6%C3%9Fchen.html&quot;&gt;http://www.dict.cc/german-english/St%C3%B6%C3%9Fchen.html&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.8&quot; class=&quot;footnum&quot; href=&quot;#fnr.8&quot;&gt;8&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;http://www.merriam-webster.com/dictionary/%C3%A0%20votre%20sant%C3%A9&quot;&gt;http://www.merriam-webster.com/dictionary/%C3%A0%20votre%20sant%C3%A9&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;


&lt;/div&gt;
&lt;/div&gt;
</content>
 </entry>
 
 <entry>
   <title>How to setup ac-clang-complete-async</title>
   <link href="http://kimi.im/2015-09-22-setting-for-ac-clang-complete-async"/>
   <updated>2015-09-22T00:00:00+00:00</updated>
   <id>http://kimi.im/setting-for-ac-clang-complete-async</id>
   <content type="html">&lt;div id=&quot;outline-container-sec-1&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;sec-1&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;1&lt;/span&gt; Introduction&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-1&quot;&gt;
&lt;p&gt;
&lt;code&gt;ac-clang-complete-async&lt;/code&gt; is an emacs extension to complete C and C++
code, it uses libclang to parse the source code on the fly and
provides completion candidates to auto-complete
(&lt;a href=&quot;http://cx4a.org/software/auto-complete&quot;&gt;http://cx4a.org/software/auto-complete&lt;/a&gt;).&lt;sup&gt;&lt;a id=&quot;fnr.1&quot; name=&quot;fnr.1&quot; class=&quot;footref&quot; href=&quot;#fn.1&quot;&gt;1&lt;/a&gt;&lt;/sup&gt;
&lt;/p&gt;

&lt;p&gt;
This extension is deployed in two parts: server application
&lt;code&gt;clang-complete&lt;/code&gt; and client application written in elisp
&lt;code&gt;auto-complete-clang-async.el&lt;/code&gt;.
&lt;/p&gt;

&lt;p&gt;
If it is enabled, whenever you open a C/C++ file, emacs will fork a
&lt;code&gt;clang-complete&lt;/code&gt; server for that file. Then it will send whole buffer
to the server for automatic completion candidates.
&lt;/p&gt;

&lt;a href=&quot;https://www.flickr.com/photos/kimim-photo/21608944085/in/dateposted-public/&quot; title=&quot;ac-clang&quot;&gt;&lt;img src=&quot;https://farm6.staticflickr.com/5770/21608944085_2f1b934f63_z.jpg&quot; width=&quot;640&quot; height=&quot;554&quot; alt=&quot;ac-clang&quot;&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-sec-2&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;sec-2&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;2&lt;/span&gt; Installation&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-2&quot;&gt;
&lt;/div&gt;&lt;div id=&quot;outline-container-sec-2-1&quot; class=&quot;outline-3&quot;&gt;
&lt;h3 id=&quot;sec-2-1&quot;&gt;&lt;span class=&quot;section-number-3&quot;&gt;2.1&lt;/span&gt; lazy man&apos;s way&lt;/h3&gt;
&lt;div class=&quot;outline-text-3&quot; id=&quot;text-2-1&quot;&gt;
&lt;p&gt;
Install &lt;code&gt;clang-complete&lt;/code&gt; server with &lt;code&gt;brew&lt;/code&gt;:
&lt;/p&gt;
&lt;div class=&quot;org-src-container&quot;&gt;

&lt;pre class=&quot;src src-sh&quot;&gt;kimi.im$ brew install emacs-clang-complete-async
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
It will help you fetch the code and compile. &lt;code&gt;clang-complete&lt;/code&gt; is
installed in &lt;code&gt;/usr/local/bin&lt;/code&gt;.
&lt;/p&gt;

&lt;p&gt;
Install &lt;code&gt;ac-clang-complete-async.el&lt;/code&gt; with emacs package system:
&lt;/p&gt;
&lt;pre class=&quot;example&quot;&gt;
M-x package-install&amp;lt;RET&amp;gt;
Install package: auto-complete-clang-async
&lt;/pre&gt;

&lt;a href=&quot;https://www.flickr.com/photos/kimim-photo/21421951989/in/dateposted-public/&quot; title=&quot;auto-complete-clang-async&quot;&gt;&lt;img src=&quot;https://farm6.staticflickr.com/5699/21421951989_0b0361693a_z.jpg&quot; width=&quot;640&quot; height=&quot;203&quot; alt=&quot;auto-complete-clang-async&quot;&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-sec-2-2&quot; class=&quot;outline-3&quot;&gt;
&lt;h3 id=&quot;sec-2-2&quot;&gt;&lt;span class=&quot;section-number-3&quot;&gt;2.2&lt;/span&gt; manual installation&lt;/h3&gt;
&lt;div class=&quot;outline-text-3&quot; id=&quot;text-2-2&quot;&gt;
&lt;p&gt;
Clone from &lt;a href=&quot;https://github.com/Golevka/emacs-clang-complete-async&quot;&gt;https://github.com/Golevka/emacs-clang-complete-async&lt;/a&gt;, and
compile &lt;code&gt;clang-complete&lt;/code&gt; by yourself:
&lt;/p&gt;
&lt;div class=&quot;org-src-container&quot;&gt;

&lt;pre class=&quot;src src-sh&quot;&gt;kimi.im$ git clone https://github.com/Golevka/emacs-clang-complete-async.git
Cloning into &lt;span style=&quot;color: #3a5fcd;&quot;&gt;&apos;emacs-clang-complete-async&apos;&lt;/span&gt;...
remote: Counting objects: 310, done.
remote: Total 310 (delta 0), reused 0 (delta 0), pack-reused 310
Receiving objects: 100% (310/310), 4.15 MiB | 925.00 KiB/s, done.
Resolving deltas: 100% (157/157), done.
Checking connectivity... done.

kimi.im$ cd emacs-clang-complete-async

kimi.im$ make
make: llvm-config: Command not found
make: llvm-config: Command not found
./src/parse_results.c:1:10: fatal error: &lt;span style=&quot;color: #3a5fcd;&quot;&gt;&apos;clang-c/Index.h&apos;&lt;/span&gt; file not found
&lt;span style=&quot;color: #228b22; font-style: italic;&quot;&gt;#&lt;/span&gt;&lt;span style=&quot;color: #228b22; font-style: italic;&quot;&gt;include &amp;lt;clang-c/Index.h&amp;gt;&lt;/span&gt;
         ^
1 error generated.
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
The fatal error indicates that &lt;code&gt;llvm-config&lt;/code&gt; is not in your &lt;code&gt;PATH&lt;/code&gt;,
add &lt;code&gt;llvm-config&lt;/code&gt; to your &lt;code&gt;PATH&lt;/code&gt; or just remove &lt;code&gt;$(shell
$(LLVM_CONFIG)&lt;/code&gt; from &lt;code&gt;Makefile&lt;/code&gt;, and run &lt;code&gt;make&lt;/code&gt; again.
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-sec-3&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;sec-3&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;3&lt;/span&gt; Configuration&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-3&quot;&gt;
&lt;p&gt;
My configuration is to define a hook function and add it to
&lt;code&gt;c-common-hook&lt;/code&gt;:
&lt;/p&gt;
&lt;div class=&quot;org-src-container&quot;&gt;

&lt;pre class=&quot;src src-elisp&quot;&gt;(&lt;span style=&quot;color: #8b008b; font-weight: bold;&quot;&gt;require&lt;/span&gt; &apos;&lt;span style=&quot;color: #5f9ea0;&quot;&gt;auto-complete-clang-async&lt;/span&gt;)

(&lt;span style=&quot;color: #8b008b; font-weight: bold;&quot;&gt;defun&lt;/span&gt; &lt;span style=&quot;color: #0000cd;&quot;&gt;kimim/c-mode-ac-complete&lt;/span&gt;()
  (global-auto-complete-mode t)
  (setq ac-clang-complete-executable &lt;span style=&quot;color: #3a5fcd;&quot;&gt;&quot;clang-complete&quot;&lt;/span&gt;)
  (add-to-list &apos;ac-sources &apos;ac-source-clang-async)
  (&lt;span style=&quot;color: #8b008b; font-weight: bold;&quot;&gt;if&lt;/span&gt; ac-clang-cflags
      (setq ac-clang-cflags (cons ac-clang-cflags &apos;(&lt;span style=&quot;color: #3a5fcd;&quot;&gt;&quot;-I../inc&quot;&lt;/span&gt; &lt;span style=&quot;color: #3a5fcd;&quot;&gt;&quot;-I../include&quot;&lt;/span&gt;)))
    (setq ac-clang-cflags &apos;(&lt;span style=&quot;color: #3a5fcd;&quot;&gt;&quot;-I../inc&quot;&lt;/span&gt; &lt;span style=&quot;color: #3a5fcd;&quot;&gt;&quot;-I../include&quot;&lt;/span&gt;)))
  (ac-clang-launch-completion-process)
  (ac-clang-update-cmdlineargs))

(add-hook &apos;c-mode-common-hook
          (&lt;span style=&quot;color: #8b008b; font-weight: bold;&quot;&gt;lambda&lt;/span&gt; ()
            (kimim/c-mode-ac-complete)))
&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-sec-4&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;sec-4&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;4&lt;/span&gt; Some Tips&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-4&quot;&gt;
&lt;ol class=&quot;org-ol&quot;&gt;
&lt;li&gt;&lt;code&gt;clang-complete&lt;/code&gt; should be in &lt;code&gt;PATH&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;By default, buffer variable &lt;code&gt;ac-clang-cflags&lt;/code&gt; is &lt;code&gt;nil&lt;/code&gt;, set some
common used &lt;code&gt;inlcude&lt;/code&gt; folder.
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ac-clang-update-cmdlineargs&lt;/code&gt; is used to tell &lt;code&gt;clang-complete&lt;/code&gt; to
update &lt;code&gt;cflags&lt;/code&gt;.
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;
If &lt;code&gt;clang-complete&lt;/code&gt; doesn&apos;t work, you can try:
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;&lt;code&gt;M-x ac-clang-set-cflags&lt;/code&gt; to set include folder such as &lt;code&gt;-I../inc&quot;
  &quot;-I../include&lt;/code&gt;, and then tell it to update &lt;code&gt;M-x
  ac-clang-update-cmdlineargs&lt;/code&gt;.
&lt;/li&gt;
&lt;li&gt;you can also set &lt;code&gt;clfags&lt;/code&gt; with dir local file, for example:
&lt;div class=&quot;org-src-container&quot;&gt;

&lt;pre class=&quot;src src-elisp&quot;&gt;((nil . ((indent-tabs-mode . t)
       (tab-width . 8)
       (fill-column . 80)))
(c-mode . ((c-file-style . &lt;span style=&quot;color: #3a5fcd;&quot;&gt;&quot;BSD&quot;&lt;/span&gt;)
          (ac-clang-cflags .
                           (&lt;span style=&quot;color: #3a5fcd;&quot;&gt;&quot;-I/Users/kimim/Workspace/kimix/include&quot;&lt;/span&gt;
                            &lt;span style=&quot;color: #3a5fcd;&quot;&gt;&quot;-I/Users/kimim/Workspace/kimix/sys/include&quot;&lt;/span&gt;
                            &lt;span style=&quot;color: #3a5fcd;&quot;&gt;&quot;-I/Users/kimim/Workspace/kimix/usr/include&quot;&lt;/span&gt;
                            &lt;span style=&quot;color: #3a5fcd;&quot;&gt;&quot;-I../include&quot;&lt;/span&gt;))
          )))
&lt;/pre&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;footnotes&quot;&gt;
&lt;h2 class=&quot;footnotes&quot;&gt;Footnotes: &lt;/h2&gt;
&lt;div id=&quot;text-footnotes&quot;&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.1&quot; name=&quot;fn.1&quot; class=&quot;footnum&quot; href=&quot;#fnr.1&quot;&gt;1&lt;/a&gt;&lt;/sup&gt; &lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;https://github.com/Golevka/emacs-clang-complete-async&quot;&gt;https://github.com/Golevka/emacs-clang-complete-async&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;


&lt;/div&gt;
&lt;/div&gt;
</content>
 </entry>
 
 <entry>
   <title>總是低頭不太好</title>
   <link href="http://kimi.im/2015-09-20-stop-phubbing"/>
   <updated>2015-09-20T00:00:00+00:00</updated>
   <id>http://kimi.im/stop-phubbing</id>
   <content type="html">&lt;p&gt;
週五有一次培訓，我發現一個同事一坐下來就掏出手機開始看手機，如果不是我提醒他把手機放入口袋，他估計會一直看到培訓結束。
&lt;/p&gt;

&lt;p&gt;
隨著智能手機的普及，越來越多的人已經離不開手機了。在家看微博，微信朋友圈打發時間；外出用地圖，點評，滴滴，喵街。
&lt;/p&gt;

&lt;p&gt;
雖然智能設備給我們帶來了不少方便，可是有沒有覺得，好像我們的生活被它們綁架了？
&lt;/p&gt;

&lt;p&gt;
回到本文開頭，我的那個同事本可以利用這次培訓學習的時間好好補充自己的知識，系統化的學習專業知識。那次培訓其實很難得也很精彩，本來應該有很大的收穫。可是我後來問他有哪些收穫。他卻告訴我培訓只是泛泛的講些理論知識，很不切實際，感覺沒啥作用。我其實想反問，你到底聽進多少才覺得這些沒用？但是我沒有。很無奈，也只能無奈。
&lt;/p&gt;

&lt;p&gt;
也許有的人覺得多和朋友聊幾句微信，多看一些小道消息會覺得生活更充實吧。
&lt;/p&gt;

&lt;p&gt;
總是低頭，現在有個新單詞叫 Phubbing， 由 snubbing ＋ phone 組成。其名詞 Phubber 自然就是低頭族的意思。phubbing 的對生活的影響涉及方方面面，我們來一一細數。
&lt;/p&gt;

&lt;div id=&quot;outline-container-sec-1&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;sec-1&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;1&lt;/span&gt; 身體健康&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-1&quot;&gt;
&lt;p&gt;
首先，低頭族總是低頭，直接影響的就是我們的頸椎。據我夫人的小姐妹說，她是一名微商，需要時刻和微信上的好友展示商品信息。長此以往就造成了頸椎問題。需要進行推拿治療。
&lt;/p&gt;

&lt;p&gt;
然後是視力問題，時刻緊盯著細小的發光屏幕，會對視力造成一定影響。我的小外甥吃飯時候喜歡看手機，iPad 上的動畫片。現在幼兒園檢測視力發現只有
1.5 總分的 0.6 分。我想以後應該多讓他出去外面玩了。對於成年人可能不會引起很大的視力下降，但是可能會引起眼球眼壓升高，乾眼症等問題。
&lt;/p&gt;

&lt;p&gt;
還有，我們吃飯的時候低頭玩手機引起消化不良；經常用拇指在小屏幕上輸入信息引起拇指肌肉勞損；走路時候低頭看手機造成交通事故或者跌倒碰撞。這些都會對我們的健康生活造成損害。
&lt;/p&gt;

&lt;a data-flickr-embed=&quot;true&quot; data-footer=&quot;true&quot;  href=&quot;https://www.flickr.com/photos/kimim-photo/21379016670/in/dateposted-public/&quot; title=&quot;Phubbing&quot;&gt;&lt;img src=&quot;https://farm6.staticflickr.com/5646/21379016670_3a201c565a_z.jpg&quot; width=&quot;640&quot; height=&quot;427&quot; alt=&quot;Phubbing&quot;&gt;&lt;/a&gt;&lt;script async src=&quot;//embedr.flickr.com/assets/client-code.js&quot; charset=&quot;utf-8&quot;&gt;&lt;/script&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-sec-2&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;sec-2&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;2&lt;/span&gt; 心裡健康&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-2&quot;&gt;
&lt;p&gt;
第一，社交軟件會不斷檢測更新，發現更新就會出現消息提醒和紅色的消息數量標記。有些人就有不把消息看完，不把紅點清除就難受的強迫症。我的一位同事就曾告訴我說，微信訂閱號的所有更新消息他都要一一點開看掉。不然半夜也睡不安穩。
&lt;/p&gt;

&lt;p&gt;
第二，攀比炫富。當然這不是因為低頭引起，但這和低頭有很大的關係。現在的微博，微信朋友圈裡面經常會有人曬幸福，炫富。於是低頭一族看到別人曬的美食，奢品還有風景，就產生羨慕心裡，於是要想方設法也去擁有。然後把自己的“幸福”曬到朋友圈裡去。朋友圈的“朋友”們看到了紛紛點讚，然後複製“幸福“。如此循環不休，落入人間煉獄，無法超脫。
&lt;/p&gt;

&lt;p&gt;
第三，總是低頭會引起情緒煩躁易怒。前面說的兩種狀態會給人帶來各種壓力，煩惱，困惑，糾結，沮喪。於是人們的情緒就變得煩躁易怒，沒有耐心，蠻不講理。進一步就造成和周圍人關係的惡化。
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-sec-3&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;sec-3&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;3&lt;/span&gt; 人際關係&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-3&quot;&gt;
&lt;p&gt;
最後是人際關係的影響。一起吃飯的親朋好友等菜一上來，就開始低頭撥弄手機，和世界分享美食。公園椅子上並肩坐著的情侶，各自低頭看手機。那是一種多麼糟糕的感覺。
&lt;/p&gt;

&lt;p&gt;
與其關心你的整個朋友圈，不如關心一下你身邊的人，用語言和表情和他們一起分享你的快樂，你的憂傷；也體會他們的快樂和憂傷。
&lt;/p&gt;

&lt;a data-flickr-embed=&quot;true&quot; data-footer=&quot;true&quot;  href=&quot;https://www.flickr.com/photos/kimim-photo/21575915281/in/dateposted-public/&quot; title=&quot;Une jeune femme phubbant son ami, frise sous la sculpture The Meeting Place de Paul Day à la Gare de Saint-Pancras1.&quot;&gt;&lt;img src=&quot;https://farm1.staticflickr.com/710/21575915281_201e7bc217_z.jpg&quot; width=&quot;640&quot; height=&quot;480&quot; alt=&quot;Une jeune femme phubbant son ami, frise sous la sculpture The Meeting Place de Paul Day à la Gare de Saint-Pancras1.&quot;&gt;&lt;/a&gt;&lt;script async src=&quot;//embedr.flickr.com/assets/client-code.js&quot; charset=&quot;utf-8&quot;&gt;&lt;/script&gt;

&lt;p&gt;
寫這些的目的當然不是去勸說他人做一些改變了，大家都一把年紀了，能接受他人建議也是有限了。只是能自己有所改變，有所收穫就夠了：
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;每天減少低頭看手機的次數和時間。我已經刪除了很多需要查看的新聞客戶端，取而代之的是 podcast 新聞和有聲圖書訂閱。
&lt;/li&gt;
&lt;li&gt;回到家裡就把手機放好，不再拿出來使用。一般有緊急的事情，別人會打電話給我的。其他都是非緊急的事情。
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
</content>
 </entry>
 
 <entry>
   <title>有道詞典劃詞功能開啓導致 emacs mouse-set-region 按鍵衝突</title>
   <link href="http://kimi.im/2015-09-15-emacs-key-conflict-yodao-dict-drag-select-word-enabled"/>
   <updated>2015-09-15T00:00:00+00:00</updated>
   <id>http://kimi.im/emacs-key-conflict-yodao-dict-drag-select-word-enabled</id>
   <content type="html">&lt;p&gt;
這是一次挺討厭的經歷，突然有一天，我在 emacs 中用鼠標劃選一些文字變得很凌亂。每次選中文字之後，再觸發 emacs 快捷鍵，就會失效。mini buffer
提示我的快捷鍵前面已經觸發了 &lt;code&gt;C-c&lt;/code&gt; 。 比如我用鼠標選中一段文字，再用
&lt;code&gt;M-w&lt;/code&gt; 去複製這段文字，就會提示說，我輸入的命令是 &lt;code&gt;C-c M-w&lt;/code&gt; ， 然後告訴我這個快捷鍵沒有綁定，於是這次操作失敗。
&lt;/p&gt;

&lt;p&gt;
經歷了一段時間的苦惱，我一行行查看 .emacs 的改動，依然找不到原因，一次偶然的機會打開有道辭典，才發現，原來是因為我前一天不知吃了什麼藥，把有道辭典的劃詞自動翻譯功能打開了。這背後的動機是，每次鼠標劃中一個單詞，有道辭典就讓系統調用 Win 的複製快捷鍵 &lt;code&gt;C-c&lt;/code&gt; 把這個單詞拷貝到系統剪貼板提供給有道辭典去翻譯處理。一般的 Win 應用程序可以很好的處理這個動作，可是到了 emacs 這兒就不能很好的玩了。 emacs 中的拷貝快捷鍵是 &lt;code&gt;M-w&lt;/code&gt; ，而 &lt;code&gt;C-c&lt;/code&gt; 一般會作為某些 global key 的前綴。
&lt;/p&gt;

&lt;p&gt;
把有道辭典的劃詞翻譯功能關閉掉，一切又恢復到原來的樣子了。
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>elisp function to toggle symbol highlight at the point</title>
   <link href="http://kimi.im/2015-08-22-emacs-toggle-highlight-at-point"/>
   <updated>2015-08-22T00:00:00+00:00</updated>
   <id>http://kimi.im/emacs-toggle-highlight-at-point</id>
   <content type="html">&lt;p&gt;
There is the built-in function in emacs to highlight/unhighlight
phrases:
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;

&lt;pre class=&quot;src src-elisp&quot;&gt;(highlight-phrase REGEXP &lt;span style=&quot;color: #551a8b;&quot;&gt;&amp;amp;optional&lt;/span&gt; FACE)
(unhighlight-regexp REGEXP)
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
They are bounded to key &lt;code&gt;M-s h p&lt;/code&gt; and &lt;code&gt;M-s h u&lt;/code&gt; respectively. But they
are not so convenient that they need the user to input the phrase
interactively.
&lt;/p&gt;

&lt;p&gt;
So I write a small function to toggle highlight of the symbol at the point:
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;

&lt;pre class=&quot;src src-elisp&quot;&gt;(setq kimim-color-list &apos;(hi-yellow hi-green hi-blue hi-pink))
(setq kimim-color-index 0)
(setq kimim-color-list-length (length kimim-color-list))

(&lt;span style=&quot;color: #8b008b; font-weight: bold;&quot;&gt;defun&lt;/span&gt; &lt;span style=&quot;color: #0000cd;&quot;&gt;kimim/toggle-highlight-tap&lt;/span&gt; ()
  &lt;span style=&quot;color: #3a5fcd;&quot;&gt;&quot;Toggle highlight pattern at the point&quot;&lt;/span&gt;
  (interactive)
  (&lt;span style=&quot;color: #8b008b; font-weight: bold;&quot;&gt;if&lt;/span&gt; (and (listp (get-text-property (point) &apos;face))
           (memq (car (get-text-property (point) &apos;face)) kimim-color-list))
      (unhighlight-regexp (thing-at-point &apos;symbol))
    (&lt;span style=&quot;color: #8b008b; font-weight: bold;&quot;&gt;progn&lt;/span&gt;
      (highlight-regexp (thing-at-point &apos;symbol) (nth kimim-color-index kimim-color-list))
      (setq kimim-color-index (+ kimim-color-index 1))
      (&lt;span style=&quot;color: #8b008b; font-weight: bold;&quot;&gt;if&lt;/span&gt; (&amp;gt;= kimim-color-index kimim-color-list-length)
          (setq kimim-color-index 0))
      )))

(global-set-key [f7] &apos;kimim/toggle-highlight-tap)
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
Firstly, a list of highlight color is defined for cycling different
color for different symbols. Then the function
&lt;code&gt;kimim/toggle-highlight-tap&lt;/code&gt; is used to toggle the symbol to highlight
or to unhighlight if it is highlighted. And finally, I bind this
function to key &lt;code&gt;F7&lt;/code&gt; for quick access.
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Some ideas about my career plan</title>
   <link href="http://kimi.im/2015-08-21-thinking-about-career-plan"/>
   <updated>2015-08-21T00:00:00+00:00</updated>
   <id>http://kimi.im/thinking-about-career-plan</id>
   <content type="html">&lt;p&gt;
Since July 1, I reached 8th year as a software engineer. I have worked
in Nokia Siemens Networks(now Nokia Solutions and Network) for 2 and
three quarters as platform system engineer and Scrum Master for the
team. And later on April 11, 2011, I joined ABB as automation system
software engineer and later promoted as team supervisor.
&lt;/p&gt;

&lt;p&gt;
After taking management tasks for three years, I found that I am not
good in communication:
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;I cannot deliver positive messages to my boss. So I am always been
challenged even the bottle neck is not on me, and also I cannot win
more honor for my team.
&lt;/li&gt;
&lt;li&gt;I cannot persuade myself to take lots of private time to business
dinner and other activities. I want my work and life are balanced.
&lt;/li&gt;
&lt;li&gt;I prefer simple relationships not complex personal connections.
&lt;/li&gt;
&lt;li&gt;I like information transparency. I am not able to hide information
and take advantage of the information asymmetry. I feel upset if
others take advantage of the asymmetry.
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
I will develop my management skills and at the same time, I will focus
on improving my technical expertise by concentration.
&lt;/p&gt;

&lt;p&gt;
According to Robert Toru Kiyosaki&apos;s book &quot;Rich Dad Poor Dad&quot;, the
management skills are categorized in to three areas:
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;financial management
&lt;/li&gt;
&lt;li&gt;time management
&lt;/li&gt;
&lt;li&gt;people management
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
For financial management, I will talk this in another article, because
it has less relationship with my current problems.
&lt;/p&gt;

&lt;p&gt;
My problems are mainly in time management and people management,
especially in people management.
&lt;/p&gt;

&lt;p&gt;
For people management skill improvement, I will:
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;create a book list for different kind of management skills,
&lt;/li&gt;
&lt;li&gt;subscript to podcast or video lessons for communication skill,
&lt;/li&gt;
&lt;li&gt;and practise the management and communication theory and improve it.
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
For time management skill, I have established the GTD system with
emacs and org-mode. I should try to make full use of GTD system and
continuously improve the system. With the help of GTD system, I can
make full use of my work time, and focus on accumulating technical
expertise experience. Then I can say I am working in high efficiency.
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Change mouse scroll direction under Windows</title>
   <link href="http://kimi.im/2015-07-18-change-mouse-scroll-direction-win"/>
   <updated>2015-07-18T00:00:00+00:00</updated>
   <id>http://kimi.im/change-mouse-scroll-direction-win</id>
   <content type="html">&lt;p&gt;
最近以 16360 元的價格買了一台 iMac。 擁有 5K 分辨率的華麗顯示技術。但是遇到一個小小的麻煩，蘋果鼠標的滾動方式是和手指滑動方向一直的，也就是說手指觸著鼠標朝上滾動，頁面內容也朝上滾動。而 Windows 的鼠標滾輪方式則是滾輪朝上滾，手指朝上推，內容則朝下滾動。這樣在不同系統間切換使用起來就有些困惑。
&lt;/p&gt;

&lt;p&gt;
好在找到了修改 Windows 鼠標滾輪方向的辦法。
&lt;/p&gt;

&lt;p&gt;
首先到鼠標屬性裡面找到鼠標的 Hardware ID：
&lt;/p&gt;

&lt;a data-flickr-embed=&quot;true&quot; data-header=&quot;true&quot; data-footer=&quot;true&quot;  href=&quot;https://www.flickr.com/photos/kimim-photo/19040616053/in/dateposted-public/&quot; title=&quot;mouse_hwid&quot;&gt;&lt;img src=&quot;https://farm1.staticflickr.com/307/19040616053_184280cf83_z.jpg&quot; width=&quot;565&quot; height=&quot;619&quot; alt=&quot;mouse_hwid&quot;&gt;&lt;/a&gt;&lt;script async src=&quot;//embedr.flickr.com/assets/client-code.js&quot; charset=&quot;utf-8&quot;&gt;&lt;/script&gt;

&lt;p&gt;
然後在 Registry Editor 中找到相應的 HID 鼠標的參數設置，如果有
FlipFlopWheel 這個鍵值則將他改為 1， 如果沒有則創建一個，並設置成 1。
&lt;/p&gt;
&lt;a data-flickr-embed=&quot;true&quot; data-header=&quot;true&quot; data-footer=&quot;true&quot;  href=&quot;https://www.flickr.com/photos/kimim-photo/19038971824/in/dateposted-public/&quot; title=&quot;mouse_regedit&quot;&gt;&lt;img src=&quot;https://farm1.staticflickr.com/295/19038971824_a6af0babdc_z.jpg&quot; width=&quot;640&quot; height=&quot;398&quot; alt=&quot;mouse_regedit&quot;&gt;&lt;/a&gt;&lt;script async src=&quot;//embedr.flickr.com/assets/client-code.js&quot; charset=&quot;utf-8&quot;&gt;&lt;/script&gt;
</content>
 </entry>
 
 <entry>
   <title>低效的工作方式是在浪費生命</title>
   <link href="http://kimi.im/2015-07-16-inefficiency-is-waste-of-life"/>
   <updated>2015-07-16T00:00:00+00:00</updated>
   <id>http://kimi.im/inefficiency-is-waste-of-life</id>
   <content type="html">&lt;p&gt;
觀察一個同事的工作方式幾天，發現有這些低效的行爲方式：
&lt;/p&gt;

&lt;ol class=&quot;org-ol&quot;&gt;
&lt;li&gt;每個人配置的聯想 ThinkVision L2250p 21 吋顯示器他不用，而用筆記本自帶的小屏幕
&lt;/li&gt;
&lt;li&gt;配置的聯想鍵盤也不用，而用筆記本上的小鍵盤
&lt;/li&gt;
&lt;li&gt;編譯調試軟件太大故不裝在自己 PC 上，而是通過 U 盤複製代碼到公用臺式機上編譯。編譯好了，再複製會自己筆記本調試。每次修改都這麼操作
&lt;/li&gt;
&lt;li&gt;調試軟件如串口工具，抓包工具每次打開重新設置選項，而不保存設置
&lt;/li&gt;
&lt;li&gt;FTP 工具用 Windows 自帶的命令行，但是不是用腳本，而是每次手動交互輸入賬戶密碼上傳
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;
作爲一名不太合格的程序員，我是完全不能忍受上述五項低效能的行爲的。這樣的工作方式每天起碼要浪費掉 1/5 的有效工作時間。
&lt;/p&gt;

&lt;p&gt;
個人的工作方式思維習慣應該是根深蒂固沒法改變了。記錄這些的目的是爲了警戒自己，每天要努力提高效率，減少無用功和重複勞動。不僅僅在工作上，在生活上，在人生的方方面面都要時刻發覺可以提高效率效能的地方，不斷優化。
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Authentication realm failed during SVN operation in Jenkins</title>
   <link href="http://kimi.im/2015-07-14-jenkins-svn-authentication-realm-failed"/>
   <updated>2015-07-14T00:00:00+00:00</updated>
   <id>http://kimi.im/jenkins-svn-authentication-realm-failed</id>
   <content type="html">&lt;p&gt;
I installed Jenkins on a Windows 7 machine, and use Jenkins bundled
SVNkit to check out source code from SVN repository. Source code
checking out is successful, after I put authentication user name and
password at the first checking out failure.
&lt;/p&gt;

&lt;p&gt;
Later I want to get SVN statistic information by executing svn log
command as below:
&lt;/p&gt;

&lt;pre class=&quot;example&quot;&gt;
C:\Jenkins\workspace\Application&amp;gt;svn log &quot;C:\Jenkins\workspace\Application&quot; -v --xml 1&amp;gt;&quot;C:\Jenkins\workspace\Application\svn.log&quot;
Authentication realm: &amp;lt;http://kimi.im:80&amp;gt; ?\147kimi.im?\148
Password for &apos;SYSTEM&apos;: Build was aborted
Aborted by kimi
Finished: ABORTED
&lt;/pre&gt;

&lt;p&gt;
This command is pending that password is required. But I am calling
the batch by Execute Windows batch command, there is no way for me to
interactively type in user name and password.
&lt;/p&gt;

&lt;p&gt;
From the log above, we can see that SYSTEM is the user running Jenkins
server by Windows. The solution that we try to execute SVN command
when we log in as SYSTEM.
&lt;/p&gt;

&lt;p&gt;
There is one small tool named
PsTools(&lt;a href=&quot;https://technet.microsoft.com/en-us/sysinternals/bb896649.aspx&quot;&gt;https://technet.microsoft.com/en-us/sysinternals/bb896649.aspx&lt;/a&gt;),
which can be used to execute process with SYSTEM user.
&lt;/p&gt;

&lt;p&gt;
Download PsTools and execute following command to run CMD with SYSTEM:
&lt;/p&gt;

&lt;pre class=&quot;example&quot;&gt;
psexec -i -s cmd.exe
&lt;/pre&gt;

&lt;p&gt;
&lt;code&gt;-i&lt;/code&gt; means interactive, &lt;code&gt;-s&lt;/code&gt; means SYSTEM.
&lt;/p&gt;

&lt;p&gt;
Then execute SVN in cmd, and type correct user name and password. SVN
will save all the authentication information for your next execution.
&lt;/p&gt;
&lt;/div&gt;
</content>
 </entry>
 
 <entry>
   <title>Remove GREP_OPTIONS is deprecated warning</title>
   <link href="http://kimi.im/2015-02-22-GREP-OPTIONS-deprecated-warning"/>
   <updated>2015-02-22T00:00:00+00:00</updated>
   <id>http://kimi.im/GREP-OPTIONS-deprecated-warning</id>
   <content type="html">&lt;pre class=&quot;example&quot;&gt;
$ grep --version
grep (GNU grep) 2.21
Copyright (C) 2014 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later &amp;lt;http://gnu.org/licenses/gpl.html&amp;gt;.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

Written by Mike Haertel and others, see &amp;lt;http://git.sv.gnu.org/cgit/grep.git/tree/AUTHORS&amp;gt;.
&lt;/pre&gt;

&lt;p&gt;
The new version of grep(version 2.21) seems deprecated the usage of
&lt;code&gt;GREP_OPTIONS&lt;/code&gt;. When I execute grep command in &lt;code&gt;emacs&lt;/code&gt;, the warning:
&apos;&lt;code&gt;grep: warning: GREP_OPTIONS is deprecated; please use an alias or
script&lt;/code&gt;&apos; will always show as below:-
&lt;/p&gt;

&lt;pre class=&quot;example&quot;&gt;
-*- mode: grep; default-directory: &quot;c:/emacs/&quot; -*-
Grep started at Mon Feb 16 09:53:48

find . -type f -print0 | xargs -0 -e grep -n -e GREP_OPTIONS
grep: warning: GREP_OPTIONS is deprecated; please use an alias or script
grep: warning: GREP_OPTIONS is deprecated; please use an alias or script
grep: warning: GREP_OPTIONS is deprecated; please use an alias or script
grep: warning: GREP_OPTIONS is deprecated; please use an alias or script
grep: warning: GREP_OPTIONS is deprecated; please use an alias or script
grep: warning: GREP_OPTIONS is deprecated; please use an alias or script
./share/emacs/24.4/lisp/progmodes/grep.el:80:markers for highlighting and GREP_OPTIONS to add the --color
./share/emacs/24.4/lisp/progmodes/grep.el:470:    (setenv &quot;GREP_OPTIONS&quot;
./share/emacs/24.4/lisp/progmodes/grep.el:471:	    (concat (getenv &quot;GREP_OPTIONS&quot;)
Binary file ./share/emacs/24.4/lisp/progmodes/grep.elc matches
grep: warning: GREP_OPTIONS is deprecated; please use an alias or script

Grep exited abnormally with code 123 at Mon Feb 16 09:53:50
&lt;/pre&gt;

&lt;p&gt;
When I dug into the &lt;code&gt;elisp&lt;/code&gt; code
&lt;code&gt;c:/emacs/share/emacs/24.4/lisp/progmodes/grep.el::470&lt;/code&gt;, I find
&lt;code&gt;GREP_OPTIONS&lt;/code&gt; are used:
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;

&lt;pre class=&quot;src src-lisp&quot;&gt;(setenv &lt;span style=&quot;color: #3a5fcd;&quot;&gt;&quot;GREP_OPTIONS&quot;&lt;/span&gt;
    (concat (getenv &lt;span style=&quot;color: #3a5fcd;&quot;&gt;&quot;GREP_OPTIONS&quot;&lt;/span&gt;)
        &lt;span style=&quot;color: #3a5fcd;&quot;&gt;&quot; --color=&quot;&lt;/span&gt; (&lt;span style=&quot;color: #8b008b; font-weight: bold;&quot;&gt;if&lt;/span&gt; (eq grep-highlight-matches &apos;always)
                &lt;span style=&quot;color: #3a5fcd;&quot;&gt;&quot;always&quot;&lt;/span&gt; &lt;span style=&quot;color: #3a5fcd;&quot;&gt;&quot;auto&quot;&lt;/span&gt;)))
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
You can just comment above lines of code, the world will be quiet
again. Remember to byte compile &lt;code&gt;grep.el&lt;/code&gt; again.
&lt;/p&gt;

&lt;pre class=&quot;example&quot;&gt;
-*- mode: grep; default-directory: &quot;c:/emacs/&quot; -*-
Grep started at Mon Feb 16 09:53:48

find . -type f -print0 | xargs -0 -e grep -n -e GREP_OPTIONS
./share/emacs/24.4/lisp/progmodes/grep.el:80:markers for highlighting and GREP_OPTIONS to add the --color
./share/emacs/24.4/lisp/progmodes/grep.el:470:;;    (setenv &quot;GREP_OPTIONS&quot;
./share/emacs/24.4/lisp/progmodes/grep.el:471:;;	    (concat (getenv &quot;GREP_OPTIONS&quot;)
Binary file ./share/emacs/24.4/lisp/progmodes/grep.elc matches
&lt;/pre&gt;
</content>
 </entry>
 
 <entry>
   <title>Extend orgmode link type to support new kind of links</title>
   <link href="http://kimi.im/2014-10-20-extend-orgmode-link-type"/>
   <updated>2014-10-20T00:00:00+00:00</updated>
   <id>http://kimi.im/extend-orgmode-link-type</id>
   <content type="html">&lt;div id=&quot;outline-container-sec-1&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;sec-1&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;1&lt;/span&gt; Introduction&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-1&quot;&gt;
&lt;p&gt;
I need to follow up all the open bugs assigned to my team, so I create
OPEN items in orgmode todo files. The detailed information of the bug
can be looked up in bug system. Now the question is that I need a
convenient way to open these bug in web browser. The most suitable way
is to extend orgmode link type to support the bug system URL.
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-sec-2&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;sec-2&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;2&lt;/span&gt; Extend orgmode link type&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-2&quot;&gt;
&lt;p&gt;
I defined new type of orgmode link &quot;BUG:123&quot;, it will lead me to
&quot;&lt;a href=&quot;http://my.local-bugsystem.com?ID=123&quot;&gt;http://my.local-bugsystem.com?ID=123&lt;/a&gt;&quot;.
&lt;/p&gt;

&lt;p&gt;
My &lt;code&gt;org-bug.el&lt;/code&gt; looks like this:
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;

&lt;pre class=&quot;src src-elisp&quot;&gt;(&lt;span style=&quot;color: #8b008b; font-weight: bold;&quot;&gt;require&lt;/span&gt; &apos;&lt;span style=&quot;color: #5f9ea0;&quot;&gt;org&lt;/span&gt;)

(org-add-link-type &lt;span style=&quot;color: #3a5fcd;&quot;&gt;&quot;BUG&quot;&lt;/span&gt; &apos;org-bug-open)

(&lt;span style=&quot;color: #8b008b; font-weight: bold;&quot;&gt;defun&lt;/span&gt; &lt;span style=&quot;color: #0000cd;&quot;&gt;org-bug-open&lt;/span&gt; (path)
  &lt;span style=&quot;color: #3a5fcd;&quot;&gt;&quot;Visit the tracker bug on path, PATH should be a bug ID.&quot;&lt;/span&gt;
  (browse-url
   (concat &lt;span style=&quot;color: #3a5fcd;&quot;&gt;&quot;http://my.local-bugsystem.com?Id=&quot;&lt;/span&gt; path)))

(&lt;span style=&quot;color: #8b008b; font-weight: bold;&quot;&gt;provide&lt;/span&gt; &apos;&lt;span style=&quot;color: #5f9ea0;&quot;&gt;org-bug&lt;/span&gt;)
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
And then add one line to my &lt;code&gt;.emacs&lt;/code&gt; file:
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;

&lt;pre class=&quot;src src-elisp&quot;&gt;(load-file &lt;span style=&quot;color: #3a5fcd;&quot;&gt;&quot;~/.emacs.d/site-lisp/org-bug.el&quot;&lt;/span&gt;)
&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
</content>
 </entry>
 
 <entry>
   <title>校園是城市中的一片淨土</title>
   <link href="http://kimi.im/2014-10-05-pure-land-in-the-city"/>
   <updated>2014-10-05T00:00:00+00:00</updated>
   <id>http://kimi.im/pure-land-in-the-city</id>
   <content type="html">&lt;a href=&quot;https://www.flickr.com/photos/kimim-photo/15256517038&quot; title=&quot;DSCF2267 by Kimi MA, on Flickr&quot;&gt;&lt;img src=&quot;https://farm3.staticflickr.com/2949/15256517038_209b18ba69_z.jpg&quot; width=&quot;640&quot; height=&quot;427&quot; alt=&quot;DSCF2267&quot;&gt;&lt;/a&gt;

&lt;p&gt;
今天帶著 Ivy 娘倆去浙大玉泉校區。
&lt;/p&gt;

&lt;p&gt;
我們在教育超市買了幾個水果，永謙門口曬了曬太陽，田徑場里晃了一陣，毛像草坪拍了些照片，最後開著車整個校園兜了一圈。校園里的空氣是那麼的清新，大口大口呼吸感覺好酣暢。
&lt;/p&gt;

&lt;a href=&quot;https://www.flickr.com/photos/kimim-photo/15443123745&quot; title=&quot;DSCF2234 by Kimi MA, on Flickr&quot;&gt;&lt;img src=&quot;https://farm6.staticflickr.com/5598/15443123745_aa087678b3_z.jpg&quot; width=&quot;640&quot; height=&quot;427&quot; alt=&quot;DSCF2234&quot;&gt;&lt;/a&gt;

&lt;p&gt;
走出校門，就感覺出空氣質量的差別。我們一致認為外面的空氣烏糟糟的看了就不舒服。開車到了武林廣場附近，更是感覺校園外面的天空被高樓大廈擋著，地面不是造地鐵就是造房子，空氣灰蒙蒙的，讓人抑鬱。
&lt;/p&gt;

&lt;a href=&quot;https://www.flickr.com/photos/kimim-photo/15256381730&quot; title=&quot;DSCF2222 by Kimi MA, on Flickr&quot;&gt;&lt;img src=&quot;https://farm3.staticflickr.com/2945/15256381730_edcb27ba49_z.jpg&quot; width=&quot;640&quot; height=&quot;427&quot; alt=&quot;DSCF2222&quot;&gt;&lt;/a&gt;

&lt;p&gt;
我們不禁感歎，校園是城市中的一片淨土。在哪裡時間可以過得很慢，陽光變得很透徹，空氣很甘甜。
&lt;/p&gt;

&lt;p&gt;
我們決定以後要經常去玉泉透透氣。
&lt;/p&gt;

&lt;p&gt;
doubanclaimb82e9ccaf02d4571
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>單詞本：德語單詞 laufen</title>
   <link href="http://kimi.im/2014-08-15-deutsch-laufen"/>
   <updated>2014-08-15T00:00:00+00:00</updated>
   <id>http://kimi.im/deutsch-laufen</id>
   <content type="html">&lt;div id=&quot;outline-container-orgheadline1&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgheadline1&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;1&lt;/span&gt; 單詞釋義&lt;/h2&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgheadline2&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgheadline2&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;2&lt;/span&gt; 尋根溯源&lt;/h2&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-orgheadline3&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgheadline3&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;3&lt;/span&gt; 衕根演變&lt;/h2&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-orgheadline4&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgheadline4&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;4&lt;/span&gt; 詞組習語&lt;/h2&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-orgheadline5&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgheadline5&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;5&lt;/span&gt; 例句賞析&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-5&quot;&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;Der Hund läuft hinter dem Auto her.&lt;/li&gt;
&lt;li&gt;Das Wasser läuft den Boden entlang.&lt;/li&gt;
&lt;li&gt;Der Computer läuft wieder!&lt;/li&gt;
&lt;li&gt;Die Waschmaschine läuft gerade.&lt;/li&gt;
&lt;li&gt;Ja, äh&amp;#x2026; Läuft!&lt;/li&gt;
&lt;li&gt;Ich lasse dich laufen.&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-orgheadline6&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgheadline6&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;6&lt;/span&gt; 文化解讀&lt;/h2&gt;
&lt;/div&gt;
</content>
 </entry>
 
 <entry>
   <title>健康真的是基礎的基礎</title>
   <link href="http://kimi.im/2014-06-30-health-is-most-important"/>
   <updated>2014-06-30T00:00:00+00:00</updated>
   <id>http://kimi.im/health-is-most-important</id>
   <content type="html">&lt;a href=&quot;https://www.flickr.com/photos/kimim-photo/14190853119/&quot; title=&quot;Flickr 上 kimim-photo 的 DSCF0222&quot;&gt;&lt;img src=&quot;https://farm6.staticflickr.com/5562/14190853119_cb99153990_z.jpg&quot; width=&quot;640&quot; height=&quot;427&quot; alt=&quot;DSCF0222&quot;&gt;&lt;/a&gt;

&lt;p&gt;
最近因爲工作開會的緣故，午飯被推遲，導致胃不舒服。一旦餓了，上腹部就隱痛。根據網上搜到的信息，大致推斷是十六指腸潰瘍。35 元達喜買了一盒，吃了
2 板就差不多好了。只是肚子餓的時候還是有一些些不舒服。
&lt;/p&gt;

&lt;p&gt;
恰巧，在胃不舒服的這段時間 Vivi 又發燒咳嗽，連夜物理降溫，24 小時燒退了，但是緊接著開始咳嗽了。喝了點止渴糖漿，過了三四天有所緩解。
&lt;/p&gt;

&lt;p&gt;
而這時，Ivy 又因爲過於疲勞，噴嚏不止低燒不舒服。好在昨天吃了碗熱面鼻子是通了。
&lt;/p&gt;

&lt;p&gt;
Vivi 和 Ivy 生病的這幾天，公司又有德國團隊來評審，每天困在會議室，晚上加班另外一個電話會議，又要設宴招待他們，周六都在加班。好在，周日我們偉大的產品經理主動要求陪同德國團隊一行逛西湖，我才得以保留一個周日休息。
&lt;/p&gt;

&lt;p&gt;
一家人，不論誰生病，都是很難過的事情，而且要互相照顧，又很容易把家人累垮。生病導致的後果是：身體不適，家人不開心，心情不好，睡眠不好，精神恍惚，工作走神，效率低下，影響工作成果。
&lt;/p&gt;

&lt;p&gt;
所以，保持健康真的是每天必須注意的事情了。一點點小毛病都會讓人難受好幾天。牙疼都會疼得你無法入睡。
&lt;/p&gt;

&lt;p&gt;
爲了過好優質的生活，我要盡量避免對健康造成傷害的事情發生。
&lt;/p&gt;

&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;中午過了飯點，一定要吃些東西。我每天自備一些乾糧，以備不時之需。
&lt;/li&gt;
&lt;li&gt;下午 3-4 點，吃些水果牛奶餅乾。
&lt;/li&gt;
&lt;li&gt;晚上準點 21:30 睡覺，早上 5：30 起床。8 小時充足睡眠時間。
&lt;/li&gt;
&lt;li&gt;注意天氣冷熱變化，避免淋雨着涼。
&lt;/li&gt;
&lt;li&gt;保持家裏環境整潔乾淨通風。
&lt;/li&gt;
&lt;/ul&gt;
</content>
 </entry>
 
 <entry>
   <title>正名的重要性</title>
   <link href="http://kimi.im/2014-06-06-right-name-is-important.org"/>
   <updated>2014-06-06T00:00:00+00:00</updated>
   <id>http://kimi.im/right-name-is-important.org</id>
   <content type="html">&lt;p class=&quot;verse&quot;&gt;
子路曰：「衛君待子而為政，子將奚先？」&lt;br  /&gt;
子曰：「必也正名乎！」&lt;br  /&gt;
子路曰：「有是哉，子之迂也！奚其正？」&lt;br  /&gt;
子曰：「野哉，由也！君子於其所不知，蓋闕如也。名不正，則言不順；言不順，則事不成；事不成，則禮樂不興；禮樂不興，則刑罰不中；刑罰不中，則民無所錯手足。故君子名之必可言也，言之必可行也。君子於其言，無所苟而已矣。」&lt;br  /&gt;
&lt;/p&gt;

&lt;p&gt;
“必也正名”是當年子路向孔子請教從政的方法的時候，孔子對子路的回答。
&lt;/p&gt;

&lt;p&gt;
這句話的基本含義是：我們在做事情的時候，一定要有一個合理正當的名分，這樣我們說的話才會有分量，才能辦成事情。從另一個角度來看，我們在接受一份職務的時候，必須要非常明確這個職務要求我們做一些什麽，我們要承擔哪些職責。只有清晰地定義了自己的責任範圍，才可以制定相應的計劃去履行自己的職責。這樣，哪怕後期發現了疏漏和問題，我們也可以明確的知道是哪一個環節出錯，責任人是誰，誰有責任對此進行改進，避免再次出現類似的問題。
&lt;/p&gt;

&lt;p&gt;
軟件開發人員的職責是保證所開發的產品滿足產品的需求，沒有嚴重的故障，清晰地代碼結構和組織，清晰地設計文檔和測試用例。軟件的質量完全由開發人員保障。測試只是從實際用戶的角度使用軟件產品，發現產品設計上違背用戶期望的功能。測試或者叫做驗證小組他們只是針對產品的功能進行驗證。驗證功能是否能符合實際用戶的預期，而不是關注於軟件中出現的故障，錯誤，異常。總之開發組進行的測試和驗證組進行的測試其目的是完全不一樣的。他們的測試用例可能會有一些重合，但不會完全等同。
&lt;/p&gt;

&lt;p&gt;
基於以上清晰地職責區分，我們就可以制定相應的質量保障計劃：
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;開發人員要經常評審自己的代碼，設計和測試用例
&lt;/li&gt;
&lt;li&gt;開發人員要保證足夠高的單元測試覆蓋率，完整的模塊測試，模塊集成測試，系統集成測試。其測試用例要及時更新，測試報告要評審存檔。
&lt;/li&gt;
&lt;li&gt;開發人員要及時分析質量問題的根本原因，制定相應的行動計劃。
&lt;/li&gt;
&lt;li&gt;開發人員要持續不斷地追求自動化測試的覆蓋率，不斷提高撰寫測試用例的技能。
&lt;/li&gt;
&lt;li&gt;開發人員要建立毫不妥協的質量意識。
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
這是孔子“必也正名”給我帶來的一些啓發。
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>不可視而不見</title>
   <link href="http://kimi.im/2014-05-31-never-look-the-other-way"/>
   <updated>2014-05-31T00:00:00+00:00</updated>
   <id>http://kimi.im/never-look-the-other-way</id>
   <content type="html">&lt;p&gt;
質量要從細節中尋求。有很多問題初看可能只看到了其表象，但是儅你深入去研究這個問題，會發現，其背後還有一個不太顯而易見的根本原因。只有找到根本原因，從根本上解決問題，才能杜絕同類問題的發生。往往，追究到最后，會是流程上某個環節的問題。
&lt;/p&gt;

&lt;p&gt;
最近有個案例，某項目經理收到工廠生產測試的報告，在工廠測試某有一個模擬輸入模塊的時候，發現其測量到的值有時候超出了要求的精度範圍。不過測試限定的精度範圍比實際要求要略高一些。於是工廠建議將測試指標略微放寬，以讓模塊順利通過測試。
&lt;/p&gt;

&lt;p&gt;
收到此報告后，該項目經歷組織了一次討論，原來的測試指標限定更嚴格，放寬后依然符合要求。於是建議同意工廠的要求，以快速解決目前的問題。
&lt;/p&gt;

&lt;p&gt;
但是我發現，該模塊測試結果中，每次測量都偏高，也就是說每次測量的平均值都比實際測試值上浮，儘管上浮沒有超出精度範圍。這就令人困惑了，這裏面一定出現了系統性的誤差。於是我堅持要追究這後面的根本原因。
&lt;/p&gt;

&lt;p&gt;
最後，經過項目經理確認，工廠校準和測量使用的不是同一個輸入設備。並且校準時用的設備精確度更高，測量用的設備相對精確度偏低，而且超過規定時間沒有進行校準。儅工廠使用同一個設備測試后，發現每次測量值完全符合指標，且不再偏高。
&lt;/p&gt;

&lt;p&gt;
問題迎刃而解。
&lt;/p&gt;

&lt;p&gt;
但是我們不能就此而止，還要追究，爲何測試工具沒有進行年度校準？以後再遇到此類問題該如何應對？
&lt;/p&gt;

&lt;p&gt;
值得深思。
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Introduction to some useful *nix tools</title>
   <link href="http://kimi.im/2014-05-29-gnu-linux-tools"/>
   <updated>2014-05-29T00:00:00+00:00</updated>
   <id>http://kimi.im/gnu-linux-tools</id>
   <content type="html">&lt;div id=&quot;outline-container-sec-1&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;sec-1&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;1&lt;/span&gt; Introduction&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-1&quot;&gt;
&lt;p&gt;
In this article, I will explain some useful UNIX or GNU/Linux tools,
such as file &amp;amp; folder operations, finding files, archiving files,
and short introduction to editors.
&lt;/p&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-sec-1-1&quot; class=&quot;outline-3&quot;&gt;
&lt;h3 id=&quot;sec-1-1&quot;&gt;&lt;span class=&quot;section-number-3&quot;&gt;1.1&lt;/span&gt; Unix&lt;/h3&gt;
&lt;div class=&quot;outline-text-3&quot; id=&quot;text-1-1&quot;&gt;
&lt;p&gt;
What is Unix?
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;Unix is a multitasking, multi-user computer operating system that
exists in many variants.
&lt;/li&gt;
&lt;li&gt;The original Unix was developed at AT&amp;amp;T&apos;s Bell Labs research
center by Ken Thompson, Dennis Ritchie, and others.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div align=&quot;center&quot;&gt;
&lt;img src=&quot;http://upload.wikimedia.org/wikipedia/commons/8/8f/Ken_Thompson_%28sitting%29_and_Dennis_Ritchie_at_PDP-11_%282876612463%29.jpg&quot; width=&quot;700&quot;&gt;
&lt;/div&gt;


&lt;div align=&quot;center&quot;&gt;
&lt;img src=&quot;http://upload.wikimedia.org/wikipedia/commons/7/77/Unix_history-simple.svg&quot; width=&quot;700&quot;&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-sec-1-2&quot; class=&quot;outline-3&quot;&gt;
&lt;h3 id=&quot;sec-1-2&quot;&gt;&lt;span class=&quot;section-number-3&quot;&gt;1.2&lt;/span&gt; GNU&lt;/h3&gt;
&lt;div class=&quot;outline-text-3&quot; id=&quot;text-1-2&quot;&gt;
&lt;p&gt;
What is GNU?
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;GNU is a Unix-like computer operating system developed by the GNU
Project. It is composed wholly of free software. It is based on
the GNU Hurd kernel and is intended to be a &quot;complete
Unix-compatible software system&quot;.
&lt;/li&gt;
&lt;li&gt;GNU is a recursive acronym for &quot;GNU&apos;s Not Unix!&quot;,chosen because
GNU&apos;s design is Unix-like, but differs from Unix by being free
software and containing no Unix code.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div align=&quot;center&quot;&gt;
&lt;img src=&quot;http://upload.wikimedia.org/wikipedia/en/thumb/2/22/Heckert_GNU_white.svg/535px-Heckert_GNU_white.svg.png&quot; width=&quot;300&quot;&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-sec-1-3&quot; class=&quot;outline-3&quot;&gt;
&lt;h3 id=&quot;sec-1-3&quot;&gt;&lt;span class=&quot;section-number-3&quot;&gt;1.3&lt;/span&gt; Linux&lt;/h3&gt;
&lt;div class=&quot;outline-text-3&quot; id=&quot;text-1-3&quot;&gt;
&lt;p&gt;
What is Linux?
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;Linux is a Unix-like computer operating system assembled under
the model of free and open source software development and
distribution.
&lt;/li&gt;
&lt;li&gt;The defining component of Linux is the Linux kernel, an operating
system kernel first released on 5 October 1991 by Linus Torvalds.
&lt;/li&gt;
&lt;li&gt;The Free Software Foundation uses the name GNU/Linux, which has
led to some controversy.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div align=&quot;center&quot;&gt;
&lt;img src=&quot;http://upload.wikimedia.org/wikipedia/commons/thumb/3/35/Tux.svg/512px-Tux.svg.png&quot;
width=&quot;300&quot;&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-sec-2&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;sec-2&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;2&lt;/span&gt; Installation&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-2&quot;&gt;
&lt;/div&gt;&lt;div id=&quot;outline-container-sec-2-1&quot; class=&quot;outline-3&quot;&gt;
&lt;h3 id=&quot;sec-2-1&quot;&gt;&lt;span class=&quot;section-number-3&quot;&gt;2.1&lt;/span&gt; Cygwin&lt;/h3&gt;
&lt;div class=&quot;outline-text-3&quot; id=&quot;text-2-1&quot;&gt;
&lt;p&gt;
On Windows, you can use Cygwin to install most of the GNU/Linux
tools. The purpose of Cygwin is &quot;Get that Linux feeling - on
Windows&quot;.&lt;sup&gt;&lt;a id=&quot;fnr.1&quot; name=&quot;fnr.1&quot; class=&quot;footref&quot; href=&quot;#fn.1&quot;&gt;1&lt;/a&gt;&lt;/sup&gt;
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;a large collection of GNU and Open Source tools which provide
functionality similar to a Linux distribution on Windows.
&lt;/li&gt;
&lt;li&gt;a DLL (&lt;code&gt;cygwin1.dll&lt;/code&gt;) which provides substantial POSIX API
functionality.
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
You can download Cygwin setup here:
&lt;a href=&quot;https://cygwin.com/install.html&quot;&gt;https://cygwin.com/install.html&lt;/a&gt;. With &lt;code&gt;setup.exe&lt;/code&gt;, you can choose
most of the Linux tools you may be interesting in.
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-sec-2-2&quot; class=&quot;outline-3&quot;&gt;
&lt;h3 id=&quot;sec-2-2&quot;&gt;&lt;span class=&quot;section-number-3&quot;&gt;2.2&lt;/span&gt; Mintty&lt;/h3&gt;
&lt;div class=&quot;outline-text-3&quot; id=&quot;text-2-2&quot;&gt;
&lt;p&gt;
Mintty is a terminal emulator for Cygwin.
&lt;/p&gt;

&lt;div align=&quot;center&quot;&gt;
&lt;img src=&quot;https://farm3.staticflickr.com/2903/14235647424_f914e72e40_o.png&quot;
width=&quot;835&quot; height=&quot;496&quot; alt=&quot;mintty&quot;&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-sec-2-3&quot; class=&quot;outline-3&quot;&gt;
&lt;h3 id=&quot;sec-2-3&quot;&gt;&lt;span class=&quot;section-number-3&quot;&gt;2.3&lt;/span&gt; UnxUtils&lt;/h3&gt;
&lt;div class=&quot;outline-text-3&quot; id=&quot;text-2-3&quot;&gt;
&lt;p&gt;
UnxUtils ports common GNU utilities to native Win32.
&lt;/p&gt;

&lt;p&gt;
Native means
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;the executables do only depend on the Microsoft C-runtime (msvcrt.dll)
&lt;/li&gt;
&lt;li&gt;and not an emulation layer like that provided by Cygwin tools.
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
&lt;a href=&quot;http://unxutils.sourceforge.net/&quot;&gt;http://unxutils.sourceforge.net/&lt;/a&gt;
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-sec-3&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;sec-3&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;3&lt;/span&gt; Online help&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-3&quot;&gt;
&lt;p&gt;
There are two kind of online help you may frequently use when
playing with *nix.
&lt;/p&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-sec-3-1&quot; class=&quot;outline-3&quot;&gt;
&lt;h3 id=&quot;sec-3-1&quot;&gt;&lt;span class=&quot;section-number-3&quot;&gt;3.1&lt;/span&gt; man - online manual pages&lt;/h3&gt;
&lt;div class=&quot;outline-text-3&quot; id=&quot;text-3-1&quot;&gt;
&lt;p&gt;
man formats and displays the on-line manual pages. man is normally
the name of the manual page, which is typically the name of a
command, function, or file.
&lt;/p&gt;

&lt;div align=&quot;center&quot;&gt;
&lt;img src=&quot;https://farm3.staticflickr.com/2934/14253922623_0e68e6574f_o.png&quot;
width=&quot;835&quot; height=&quot;496&quot; alt=&quot;man&quot;&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-sec-3-2&quot; class=&quot;outline-3&quot;&gt;
&lt;h3 id=&quot;sec-3-2&quot;&gt;&lt;span class=&quot;section-number-3&quot;&gt;3.2&lt;/span&gt; info - info pages&lt;/h3&gt;
&lt;div class=&quot;outline-text-3&quot; id=&quot;text-3-2&quot;&gt;
&lt;p&gt;
The GNU Project distributes most of its on-line manuals in the
&quot;Info format&quot;, which you read using an &quot;Info reader&quot;.
&lt;/p&gt;

&lt;ol class=&quot;org-ol&quot;&gt;
&lt;li&gt;Info contains a lot more information than Man
&lt;/li&gt;
&lt;li&gt;Man is older and is slowly being replaced by Info
&lt;/li&gt;
&lt;li&gt;Man is displayed when there is no Info documentation found
&lt;/li&gt;
&lt;li&gt;Man is typically a single page while Info is spread across
multiple pages
&lt;/li&gt;
&lt;li&gt;Info allows navigation while Man does not&lt;sup&gt;&lt;a id=&quot;fnr.2&quot; name=&quot;fnr.2&quot; class=&quot;footref&quot; href=&quot;#fn.2&quot;&gt;2&lt;/a&gt;&lt;/sup&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;div align=&quot;center&quot;&gt;
&lt;img src=&quot;https://farm3.staticflickr.com/2927/14210601276_e5db7dd8d4_o.png&quot;
width=&quot;835&quot; height=&quot;496&quot; alt=&quot;info&quot;&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-sec-4&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;sec-4&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;4&lt;/span&gt; Directory/File basic operation&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-4&quot;&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;`ls&apos;: List directory contents
&lt;/li&gt;
&lt;li&gt;`cp&apos;: Copy files and directories
&lt;/li&gt;
&lt;li&gt;`mv&apos;: Move (rename) files
&lt;/li&gt;
&lt;li&gt;`rm&apos;: Remove files or directories
&lt;/li&gt;
&lt;li&gt;`shred&apos;: Remove files more securely
&lt;/li&gt;
&lt;li&gt;`mkdir&apos;: Make directories
&lt;/li&gt;
&lt;li&gt;`rmdir&apos;: Remove empty directories
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-sec-5&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;sec-5&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;5&lt;/span&gt; Output files&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-5&quot;&gt;
&lt;/div&gt;&lt;div id=&quot;outline-container-sec-5-1&quot; class=&quot;outline-3&quot;&gt;
&lt;h3 id=&quot;sec-5-1&quot;&gt;&lt;span class=&quot;section-number-3&quot;&gt;5.1&lt;/span&gt; `cat&apos;: Concatenate and write files&lt;/h3&gt;
&lt;div class=&quot;outline-text-3&quot; id=&quot;text-5-1&quot;&gt;
&lt;p&gt;
`cat&apos; copies each FILE to standard output.
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;

&lt;pre class=&quot;src src-sh&quot;&gt;$ cat -n crc32.c
     1  &lt;span style=&quot;color: #228b22; font-style: italic;&quot;&gt;#&lt;/span&gt;&lt;span style=&quot;color: #228b22; font-style: italic;&quot;&gt;define CHKSUM_BLOCK_SIZE       1&lt;/span&gt;
     2  &lt;span style=&quot;color: #228b22; font-style: italic;&quot;&gt;#&lt;/span&gt;&lt;span style=&quot;color: #228b22; font-style: italic;&quot;&gt;define CHKSUM_DIGEST_SIZE      4&lt;/span&gt;
     3
     4  static u32 __crc32_le(u32 crc, unsigned char const *p, size_t len)
     5  {
     6          return crc32_le(crc, p, len);
     7  }
&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-sec-5-2&quot; class=&quot;outline-3&quot;&gt;
&lt;h3 id=&quot;sec-5-2&quot;&gt;&lt;span class=&quot;section-number-3&quot;&gt;5.2&lt;/span&gt; `nl&apos;: Number lines and write files&lt;/h3&gt;
&lt;div class=&quot;outline-text-3&quot; id=&quot;text-5-2&quot;&gt;
&lt;p&gt;
`nl&apos; writes each FILE to standard output, with line numbers added
to some or all of the lines.
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;

&lt;pre class=&quot;src src-sh&quot;&gt;$ nl crc32.c
     1  &lt;span style=&quot;color: #228b22; font-style: italic;&quot;&gt;#&lt;/span&gt;&lt;span style=&quot;color: #228b22; font-style: italic;&quot;&gt;define CHKSUM_BLOCK_SIZE       1&lt;/span&gt;
     2  &lt;span style=&quot;color: #228b22; font-style: italic;&quot;&gt;#&lt;/span&gt;&lt;span style=&quot;color: #228b22; font-style: italic;&quot;&gt;define CHKSUM_DIGEST_SIZE      4&lt;/span&gt;
     3
     4  static u32 __crc32_le(u32 crc, unsigned char const *p, size_t len)
     5  {
     6          return crc32_le(crc, p, len);
     7  }
&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-sec-5-3&quot; class=&quot;outline-3&quot;&gt;
&lt;h3 id=&quot;sec-5-3&quot;&gt;&lt;span class=&quot;section-number-3&quot;&gt;5.3&lt;/span&gt; `head&apos;: Output the first part of files&lt;/h3&gt;
&lt;div class=&quot;outline-text-3&quot; id=&quot;text-5-3&quot;&gt;
&lt;p&gt;
`head&apos; prints the first part (10 lines by default) of each FILE
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;

&lt;pre class=&quot;src src-sh&quot;&gt;$ head crc32.c
&lt;span style=&quot;color: #228b22; font-style: italic;&quot;&gt;#&lt;/span&gt;&lt;span style=&quot;color: #228b22; font-style: italic;&quot;&gt;define CHKSUM_BLOCK_SIZE       1&lt;/span&gt;
&lt;span style=&quot;color: #228b22; font-style: italic;&quot;&gt;#&lt;/span&gt;&lt;span style=&quot;color: #228b22; font-style: italic;&quot;&gt;define CHKSUM_DIGEST_SIZE      4&lt;/span&gt;

static u32 __crc32_le(u32 crc, unsigned char const *p, size_t len)
{
        &lt;span style=&quot;color: #8b008b; font-weight: bold;&quot;&gt;return&lt;/span&gt; crc32_le(crc, p, len);
}

/** No default init with ~0 */
static int crc32_cra_init(struct crypto_tfm *tfm)
&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-sec-5-4&quot; class=&quot;outline-3&quot;&gt;
&lt;h3 id=&quot;sec-5-4&quot;&gt;&lt;span class=&quot;section-number-3&quot;&gt;5.4&lt;/span&gt; `tail&apos;: Output the last part of files&lt;/h3&gt;
&lt;div class=&quot;outline-text-3&quot; id=&quot;text-5-4&quot;&gt;
&lt;p&gt;
`tail&apos; prints the last part (10 lines by default) of each FILE
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;

&lt;pre class=&quot;src src-sh&quot;&gt;$ tail -f crc32.c
{
        crypto_unregister_shash(&amp;amp;alg);
}

&lt;span style=&quot;color: #0000cd;&quot;&gt;module_init&lt;/span&gt;(crc32_mod_init);
&lt;span style=&quot;color: #0000cd;&quot;&gt;module_exit&lt;/span&gt;(crc32_mod_fini);

&lt;span style=&quot;color: #0000cd;&quot;&gt;MODULE_AUTHOR&lt;/span&gt;(&lt;span style=&quot;color: #3a5fcd;&quot;&gt;&quot;Alexander Boyko &lt;a href=&quot;mailto:alexander_boyko%40xyratex.com&quot;&gt;&amp;lt;alexander_boyko@xyratex.com&amp;gt;&lt;/a&gt;&quot;&lt;/span&gt;);
&lt;span style=&quot;color: #0000cd;&quot;&gt;MODULE_DESCRIPTION&lt;/span&gt;(&lt;span style=&quot;color: #3a5fcd;&quot;&gt;&quot;CRC32 calculations wrapper for lib/crc32&quot;&lt;/span&gt;);
&lt;span style=&quot;color: #0000cd;&quot;&gt;MODULE_LICENSE&lt;/span&gt;(&lt;span style=&quot;color: #3a5fcd;&quot;&gt;&quot;GPL&quot;&lt;/span&gt;);

  &amp;lt;--- waiting for update
&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-sec-6&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;sec-6&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;6&lt;/span&gt; Summarizing files&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-6&quot;&gt;
&lt;/div&gt;&lt;div id=&quot;outline-container-sec-6-1&quot; class=&quot;outline-3&quot;&gt;
&lt;h3 id=&quot;sec-6-1&quot;&gt;&lt;span class=&quot;section-number-3&quot;&gt;6.1&lt;/span&gt; `wc&apos;: Print newline, word, and byte counts&lt;/h3&gt;
&lt;div class=&quot;outline-text-3&quot; id=&quot;text-6-1&quot;&gt;
&lt;p&gt;
`wc&apos; counts the number of bytes, characters, whitespace-separated
words, and newlines in each given FILE,
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;

&lt;pre class=&quot;src src-sh&quot;&gt;$ wc -l -w -c Makefile
 1486  6132 50289 Makefile
&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-sec-6-2&quot; class=&quot;outline-3&quot;&gt;
&lt;h3 id=&quot;sec-6-2&quot;&gt;&lt;span class=&quot;section-number-3&quot;&gt;6.2&lt;/span&gt; `cksum&apos;: Print CRC checksum and byte counts&lt;/h3&gt;
&lt;div class=&quot;outline-text-3&quot; id=&quot;text-6-2&quot;&gt;
&lt;p&gt;
`cksum&apos; computes a cyclic redundancy check (CRC) checksum for each
given FILE.
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;

&lt;pre class=&quot;src src-sh&quot;&gt;$ cksum Makefile
182967537 50289 Makefile
&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-sec-6-3&quot; class=&quot;outline-3&quot;&gt;
&lt;h3 id=&quot;sec-6-3&quot;&gt;&lt;span class=&quot;section-number-3&quot;&gt;6.3&lt;/span&gt; `md5sum&apos;: Print or check MD5 digests&lt;/h3&gt;
&lt;div class=&quot;outline-text-3&quot; id=&quot;text-6-3&quot;&gt;
&lt;p&gt;
`md5sum&apos; computes a 128-bit checksum (or &quot;fingerprint&quot; or
&quot;message-digest&quot;) for each specified FILE.
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;

&lt;pre class=&quot;src src-sh&quot;&gt;$ md5sum Makefile
aedd785aa73b799394c58511162f96db *Makefile
&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-sec-7&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;sec-7&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;7&lt;/span&gt; Archiving tools&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-7&quot;&gt;
&lt;/div&gt;&lt;div id=&quot;outline-container-sec-7-1&quot; class=&quot;outline-3&quot;&gt;
&lt;h3 id=&quot;sec-7-1&quot;&gt;&lt;span class=&quot;section-number-3&quot;&gt;7.1&lt;/span&gt; `tar&apos; and `gzip&apos;&lt;/h3&gt;
&lt;div class=&quot;outline-text-3&quot; id=&quot;text-7-1&quot;&gt;
&lt;p&gt;
The tar program is used to create, modify, and access files
archived in the tar format.
&lt;/p&gt;

&lt;p&gt;
&quot;tar&quot; stands for Tape ARchive. It is an archiving file format.
&lt;/p&gt;

&lt;p&gt;
tar was originally developed in the early days of Unix for the
purpose of backing up files to tape-based storage devices.
&lt;/p&gt;

&lt;p&gt;
Gzip reduces the size of the named files using Lempel-Ziv coding
(LZ77).
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-sec-7-2&quot; class=&quot;outline-3&quot;&gt;
&lt;h3 id=&quot;sec-7-2&quot;&gt;&lt;span class=&quot;section-number-3&quot;&gt;7.2&lt;/span&gt; compress files&lt;/h3&gt;
&lt;div class=&quot;outline-text-3&quot; id=&quot;text-7-2&quot;&gt;
&lt;div class=&quot;org-src-container&quot;&gt;

&lt;pre class=&quot;src src-sh&quot;&gt;$ ls
ffs-test.c  hcd-tests.sh  Makefile  testusb.c

$ tar -czvf usb.tgz *
ffs-test.c
hcd-tests.sh
Makefile
testusb.c

$ file usb.tgz
usb.tgz: gzip compressed data, last modified: Wed May 21 16:19:37 2014, from Unix
&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-sec-7-3&quot; class=&quot;outline-3&quot;&gt;
&lt;h3 id=&quot;sec-7-3&quot;&gt;&lt;span class=&quot;section-number-3&quot;&gt;7.3&lt;/span&gt; uncompress files&lt;/h3&gt;
&lt;div class=&quot;outline-text-3&quot; id=&quot;text-7-3&quot;&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;.tgz and .tar.gz are very common in *nix world.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class=&quot;org-src-container&quot;&gt;

&lt;pre class=&quot;src src-sh&quot;&gt;$ mv usb.tgz usb.tar.gz

$ tar -xzvf usb.tar.gz
ffs-test.c
hcd-tests.sh
Makefile
testusb.c
&lt;/pre&gt;
&lt;/div&gt;

&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;another compress format is bz2
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class=&quot;org-src-container&quot;&gt;

&lt;pre class=&quot;src src-sh&quot;&gt;$ tar -jxvf u-boot-2014.04-rc3.tar.bz2
u-boot-2014.04-rc3/
u-boot-2014.04-rc3/.checkpatch.conf
u-boot-2014.04-rc3/.gitignore
u-boot-2014.04-rc3/CREDITS
&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-sec-8&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;sec-8&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;8&lt;/span&gt; Finding utils&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-8&quot;&gt;
&lt;/div&gt;&lt;div id=&quot;outline-container-sec-8-1&quot; class=&quot;outline-3&quot;&gt;
&lt;h3 id=&quot;sec-8-1&quot;&gt;&lt;span class=&quot;section-number-3&quot;&gt;8.1&lt;/span&gt; `find&apos;&lt;/h3&gt;
&lt;div class=&quot;outline-text-3&quot; id=&quot;text-8-1&quot;&gt;
&lt;p&gt;
`find&apos; searches the directory tree rooted at each file name FILE by
evaluating the EXPRESSION on each file it finds in the tree.
&lt;/p&gt;

&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;you can find file with wildcard:
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&quot;org-src-container&quot;&gt;

&lt;pre class=&quot;src src-sh&quot;&gt;$ find . -iname mm.*
./arch/arm/mach-gemini/mm.c
./arch/arm/mm/mm.h
./arch/arm/xen/mm.c
./arch/arm64/mm/mm.h
./arch/powerpc/platforms/ps3/mm.c
./arch/unicore32/mm/mm.h
./drivers/gpu/drm/nouveau/core/core/mm.c
./drivers/gpu/drm/nouveau/core/include/core/mm.h
./include/linux/decompress/mm.h
./include/linux/mm.h
&lt;/pre&gt;
&lt;/div&gt;

&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;and add more filter:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class=&quot;org-src-container&quot;&gt;

&lt;pre class=&quot;src src-sh&quot;&gt;$ find . -iname mm.* -and -not -iname *.h
./arch/arm/mach-gemini/mm.c
./arch/arm/xen/mm.c
./arch/powerpc/platforms/ps3/mm.c
./Documentation/x86/x86_64/mm.txt
./drivers/gpu/drm/nouveau/core/core/mm.c
&lt;/pre&gt;
&lt;/div&gt;

&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;or use regular expression:
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&quot;org-src-container&quot;&gt;

&lt;pre class=&quot;src src-sh&quot;&gt;$ find . -iname mm.[ch]
./arch/arm/mach-gemini/mm.c
./arch/arm/mm/mm.h
./arch/arm/xen/mm.c
./arch/arm64/mm/mm.h
./arch/powerpc/platforms/ps3/mm.c
./arch/unicore32/mm/mm.h
./drivers/gpu/drm/nouveau/core/core/mm.c
./drivers/gpu/drm/nouveau/core/include/core/mm.h
./include/linux/decompress/mm.h
./include/linux/mm.h
&lt;/pre&gt;
&lt;/div&gt;

&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;or find file with specific modification time:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class=&quot;org-src-container&quot;&gt;

&lt;pre class=&quot;src src-sh&quot;&gt;$ touch ./arm/mm/mm.h

$ find . -name mm.*  -mtime -7
./arm/mm/mm.h
&lt;/pre&gt;
&lt;/div&gt;

&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;find file with specific size
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&quot;org-src-container&quot;&gt;

&lt;pre class=&quot;src src-sh&quot;&gt;$ find . -name &lt;span style=&quot;color: #3a5fcd;&quot;&gt;&apos;*.c&apos;&lt;/span&gt; -size +100k | xargs ls -alh
-rw-r--r-- 1 CNKIMA Domain Users 195K Mar 10 10:41 ./memcontrol.c
-rw-r--r-- 1 CNKIMA Domain Users 116K Mar 10 10:41 ./memory.c
-rw-r--r-- 1 CNKIMA Domain Users 182K Mar 10 10:41 ./page_alloc.c
-rw-r--r-- 1 CNKIMA Domain Users 110K Mar 10 10:41 ./slab.c
-rw-r--r-- 1 CNKIMA Domain Users 128K Mar 10 10:41 ./slub.c
-rw-r--r-- 1 CNKIMA Domain Users 108K Mar 10 10:41 ./vmscan.c
&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-sec-8-2&quot; class=&quot;outline-3&quot;&gt;
&lt;h3 id=&quot;sec-8-2&quot;&gt;&lt;span class=&quot;section-number-3&quot;&gt;8.2&lt;/span&gt; `grep&apos;&lt;/h3&gt;
&lt;div class=&quot;outline-text-3&quot; id=&quot;text-8-2&quot;&gt;
&lt;p&gt;
`grep&apos; searches input files for lines containing a match to a given
pattern list.
&lt;/p&gt;

&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;grep any line contains &quot;quicc&quot;
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class=&quot;org-src-container&quot;&gt;

&lt;pre class=&quot;src src-sh&quot;&gt;$ grep quicc * -r
arch/m68k/include/asm/commproc.h:/* mleslie: The uCquicc board is using no extra microcode&lt;span style=&quot;color: #8b008b; font-weight: bold;&quot;&gt; in&lt;/span&gt; DPRAM */
arch/m68k/include/asm/commproc.h:extern QUICC *pquicc;
arch/m68k/include/asm/commproc.h:#if 0 /* use QUICC_BD declared&lt;span style=&quot;color: #8b008b; font-weight: bold;&quot;&gt; in&lt;/span&gt; include/asm/m68360_quicc.h  */
arch/m68k/include/asm/commproc.h:/* uCquicc has the following signals connected to Ethernet:
arch/m68k/include/asm/commproc.h:#endif /* config_ucquicc */
arch/m68k/include/asm/m68360.h:#include &amp;lt;asm/m68360_quicc.h&amp;gt;
arch/m68k/include/asm/m68360_enet.h:#include &amp;lt;asm/quicc_simple.h&amp;gt;
arch/m68k/include/asm/m68360_pram.h:struct quicc32_pram {
&lt;/pre&gt;
&lt;/div&gt;

&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;more complacated example with regular expression:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class=&quot;org-src-container&quot;&gt;

&lt;pre class=&quot;src src-sh&quot;&gt;$ grep mm idmap.c
                pmd = pmd_alloc_one(&amp;amp;init_mm, addr);
                pud_populate(&amp;amp;init_mm, pud, pmd);
        idmap_pgd = pgd_alloc(&amp;amp;init_mm);
 * results when turning off the mmu.
void setup_mm_for_reboot(void)
        cpu_switch_mm(idmap_pgd, &amp;amp;init_mm);

$ grep mm[^,_u] idmap.c
        idmap_pgd = pgd_alloc(&amp;amp;init_mm);
        cpu_switch_mm(idmap_pgd, &amp;amp;init_mm);
&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-sec-9&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;sec-9&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;9&lt;/span&gt; Combine them together&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-9&quot;&gt;
&lt;p&gt;
GNU utils provide &lt;code&gt;xargs&lt;/code&gt; and &lt;code&gt;-exec&lt;/code&gt; for passing result from last
command to next command.
&lt;/p&gt;

&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;three ways to delete found files:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class=&quot;org-src-container&quot;&gt;

&lt;pre class=&quot;src src-sh&quot;&gt;find . -name mm.* | xargs rm -f
find . -name mm.* -exec rm -f &lt;span style=&quot;color: #3a5fcd;&quot;&gt;&apos;{}&apos;&lt;/span&gt; &lt;span style=&quot;color: #3a5fcd;&quot;&gt;\;&lt;/span&gt;
find . -name mm.* -delete
&lt;/pre&gt;
&lt;/div&gt;

&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;compress found files
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class=&quot;org-src-container&quot;&gt;

&lt;pre class=&quot;src src-sh&quot;&gt;$ find . -name mm.* -exec tar -czvf mm.tar.gz &lt;span style=&quot;color: #3a5fcd;&quot;&gt;&apos;{}&apos;&lt;/span&gt; &lt;span style=&quot;color: #3a5fcd;&quot;&gt;\;&lt;/span&gt;
./arm/mach-gemini/mm.c
./arm/mm/mm.h
./arm/xen/mm.c
./arm64/mm/mm.h
./powerpc/platforms/ps3/mm.c
./unicore32/mm/mm.h
&lt;/pre&gt;
&lt;/div&gt;

&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;grep in found files
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class=&quot;org-src-container&quot;&gt;

&lt;pre class=&quot;src src-sh&quot;&gt;$ find . -name mm.* -exec grep mm_info &lt;span style=&quot;color: #3a5fcd;&quot;&gt;&apos;{}&apos;&lt;/span&gt; &lt;span style=&quot;color: #3a5fcd;&quot;&gt;\;&lt;/span&gt;
        result = ps3_repository_read_mm_info(&amp;amp;map.rm.base, &amp;amp;map.rm.size,
                panic(&lt;span style=&quot;color: #3a5fcd;&quot;&gt;&quot;ps3_repository_read_mm_info() failed&quot;&lt;/span&gt;);

$ find . -name mm.* -exec grep ps[_3a-z]*_info &lt;span style=&quot;color: #3a5fcd;&quot;&gt;&apos;{}&apos;&lt;/span&gt; &lt;span style=&quot;color: #3a5fcd;&quot;&gt;\;&lt;/span&gt;
        result = ps3_repository_read_highmem_info(0, &amp;amp;r-&amp;gt;base, &amp;amp;r-&amp;gt;size);
        result = ps3_repository_read_mm_info(&amp;amp;map.rm.base, &amp;amp;map.rm.size,
                panic(&lt;span style=&quot;color: #3a5fcd;&quot;&gt;&quot;ps3_repository_read_mm_info() failed&quot;&lt;/span&gt;);
&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-sec-10&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;sec-10&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;10&lt;/span&gt; Editors&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-10&quot;&gt;
&lt;/div&gt;&lt;div id=&quot;outline-container-sec-10-1&quot; class=&quot;outline-3&quot;&gt;
&lt;h3 id=&quot;sec-10-1&quot;&gt;&lt;span class=&quot;section-number-3&quot;&gt;10.1&lt;/span&gt; vi/vim&lt;/h3&gt;
&lt;div class=&quot;outline-text-3&quot; id=&quot;text-10-1&quot;&gt;
&lt;p&gt;
Vim stands for Vi IMproved. Vim is a text editor which includes
almost all the commands from the Unix program &quot;Vi&quot; and a lot of new
ones.
&lt;/p&gt;

&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;Modal editing with sophisticated keyboard shortcuts
&lt;/li&gt;
&lt;li&gt;Macros
&lt;/li&gt;
&lt;li&gt;Extremely rich extensibility
&lt;/li&gt;
&lt;li&gt;Simple for use
&lt;/li&gt;
&lt;li&gt;Availability. Preinstalled in almost all the *nix operating system.
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-sec-10-2&quot; class=&quot;outline-3&quot;&gt;
&lt;h3 id=&quot;sec-10-2&quot;&gt;&lt;span class=&quot;section-number-3&quot;&gt;10.2&lt;/span&gt; emacs&lt;/h3&gt;
&lt;div class=&quot;outline-text-3&quot; id=&quot;text-10-2&quot;&gt;
&lt;p&gt;
GNU Emacs is an extensible, customizable text editor. At its core
is an interpreter for Emacs Lisp to support text editing. With
&lt;code&gt;elisp&lt;/code&gt;, emacs can go beyond an editor, emacs can be:
&lt;/p&gt;

&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;a mail, newsgroup client with &lt;code&gt;gnus&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;file manager with &lt;code&gt;dired&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;calendar
&lt;/li&gt;
&lt;li&gt;manage todo list and agenda
&lt;/li&gt;
&lt;li&gt;calculator
&lt;/li&gt;
&lt;li&gt;play game
&lt;/li&gt;
&lt;li&gt;psychotherapist
&lt;/li&gt;
&lt;/ul&gt;

&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;emacs learning curve:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div align=&quot;center&quot;&gt;
&lt;img src=&quot;http://ergoemacs.org/emacs/i/emacs_learning_curves.png&quot;
width=&quot;700&quot; alt=&quot;mintty&quot;&gt;
&lt;/div&gt;

&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;emacs user at work:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div align=&quot;center&quot;&gt;
&lt;img src=&quot;http://ergoemacs.org/emacs/i/emacs_user_at_work_by_earlcolour.jpg&quot;
width=&quot;700&quot;
alt=&quot;mintty&quot;&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;footnotes&quot;&gt;
&lt;h2 class=&quot;footnotes&quot;&gt;Footnotes: &lt;/h2&gt;
&lt;div id=&quot;text-footnotes&quot;&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.1&quot; name=&quot;fn.1&quot; class=&quot;footnum&quot; href=&quot;#fnr.1&quot;&gt;1&lt;/a&gt;&lt;/sup&gt; &lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;http://cygwin.com&quot;&gt;cygwin.com&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.2&quot; name=&quot;fn.2&quot; class=&quot;footnum&quot; href=&quot;#fnr.2&quot;&gt;2&lt;/a&gt;&lt;/sup&gt; &lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;http://www.differencebetween.net/technology/software-technology/difference-between-man-and-info/&quot;&gt;Difference Between Man and Info&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;


&lt;/div&gt;
&lt;/div&gt;
</content>
 </entry>
 
 <entry>
   <title>Don't find execuses for yourself</title>
   <link href="http://kimi.im/2014-05-28-taking-responsibility"/>
   <updated>2014-05-28T00:00:00+00:00</updated>
   <id>http://kimi.im/taking-responsibility</id>
   <content type="html">&lt;p&gt;
On the way to management role, you will soon find that it is quite
different from technical role. When there is disaster, people are not
going to take responsible and analyze their problem. The first resort
is to find execuse from others. They may look into history logs to
find your mistakes and put blame on you.
&lt;/p&gt;

&lt;p&gt;
It really happens even though they used to be very nice
apparently. The root cause for someone to pass the buck is the fear of
failure. They are afraid of being blamed and dealing with the
overwhelmed situation.
&lt;/p&gt;

&lt;p&gt;
In this case study, we can look from two point of view, and conclude
some learning points.
&lt;/p&gt;

&lt;div id=&quot;outline-container-sec-1&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;sec-1&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;1&lt;/span&gt; Stop passing the buck&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-1&quot;&gt;
&lt;p&gt;
For whatever reasons, when people are not taking responsibility, he
will fail in his work, lose respects from others, and fail to grow.
&lt;/p&gt;

&lt;p&gt;
Firstly, you should start from the reality and analyze the cause of
the problem, while not find cues to blame other.
&lt;/p&gt;

&lt;p&gt;
Then, based on the result of the analyzing, you should find any
actions you can do to create workaround, if the case is quite urgent.
&lt;/p&gt;

&lt;p&gt;
After that, you shall list all the actions strategically, list item
by item, group to small project, prioritize them, and schedule them.
&lt;/p&gt;

&lt;p&gt;
Finally, when you complete all the actions needed to solve the
problem, you should retrospect the problem, and find process
improvement to avoid the same problem in the future. At this point,
you could frankly and nicely provide suggestions to others if their
mistake leads to the problem. I think they will trust you and
appreciate your help.
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-sec-2&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;sec-2&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;2&lt;/span&gt; Avoid being the scapegoat&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-2&quot;&gt;
&lt;p&gt;
Well, as I mentioned in the beginning, there are always the guys who
will pass the buck to you. You should prepare for this in your work.
&lt;/p&gt;

&lt;p&gt;
Here are some tips:
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;The first thing you should always do is to be professional. Do not
leave the chance for others to blame you. That means you should
make high quality product. You should always improve your quality.
&lt;/li&gt;
&lt;li&gt;Whatever risks you take, you should prepare for taking the
responsible. If others want you to rush for the deadline, you
should protect yourself. Otherwise, you can let others to write
down their responsible for the potential risk.
&lt;/li&gt;
&lt;li&gt;Avoid being meek and submissive. If the criticism is unfair, you
should stand up. It is not the time to be nice. But you should
have the sufficient evidence that you are correct.
&lt;/li&gt;
&lt;li&gt;Don&apos;t rush for fight, be cool, wait for enough supportive evidence
to fight.
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
Management role is always a dagerous role. It a long way for me to
be a professional manager.
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
</content>
 </entry>
 
 <entry>
   <title>Get up at half past four</title>
   <link href="http://kimi.im/2014-05-22-get-up-half-past-four"/>
   <updated>2014-05-22T00:00:00+00:00</updated>
   <id>http://kimi.im/get-up-half-past-four</id>
   <content type="html">&lt;a href=&quot;https://www.flickr.com/photos/kimim-photo/14050730808/&quot; title=&quot;Flickr 上 kimim-photo 的 DSCF9202&quot;&gt;&lt;img src=&quot;https://farm6.staticflickr.com/5517/14050730808_c350ffc5bf_z.jpg&quot; width=&quot;640&quot; height=&quot;427&quot; alt=&quot;DSCF9202&quot;&gt;&lt;/a&gt;

&lt;p&gt;
I&apos;ve always planned to get up at half past four. Today, I wake up at
4:24 and after a short refresh, I get up at 4:30.
&lt;/p&gt;

&lt;p&gt;
This idea is inspired by 中島孝志《朝4時起きの仕事術―誰も知らない「朝いちばん」活用法》&lt;sup&gt;&lt;a id=&quot;fnr.1&quot; name=&quot;fnr.1&quot; class=&quot;footref&quot; href=&quot;#fn.1&quot;&gt;1&lt;/a&gt;&lt;/sup&gt;（4 點起床：最養生和高效的時間管理）&lt;sup&gt;&lt;a id=&quot;fnr.2&quot; name=&quot;fnr.2&quot; class=&quot;footref&quot; href=&quot;#fn.2&quot;&gt;2&lt;/a&gt;&lt;/sup&gt;. Thus in fact I
get up half hour later than 4:00.
&lt;/p&gt;

&lt;p&gt;
Anyway, after I wash up myself, there are more than two hours left for
me to make use of. During this time, I can read books, schedule my day
plan, write blogs, study languages, water my plants or cook breakfast
for my wife and daughter.
&lt;/p&gt;

&lt;p&gt;
Yesterday, when I was in the shuttle bus back home, I was wondering
that I cannot find enough time to learn German and French. Because I
get office at 8:30, have lunch at 12:00 for half hour, and continue
work at 12:30, then leave office at 17:05. When I&apos;m back to home, I
should drive to our parents&apos; to have supper. And after that we play
with Vivi until 20:30 when Vivi fall sleep. Then we have one or two
hours free, but very tired. It is not a good idea to use brain
exhaustedly just before sleep.
&lt;/p&gt;

&lt;p&gt;
So what? 2 hours in the morning(5:00~7:00) is the gold time learning
and creative activities.
&lt;/p&gt;

&lt;p&gt;
BTW: It takes 40 minutes(5:00~5:40) for me to write this
article. Inefficient!
&lt;/p&gt;
&lt;div id=&quot;footnotes&quot;&gt;
&lt;h2 class=&quot;footnotes&quot;&gt;Footnotes: &lt;/h2&gt;
&lt;div id=&quot;text-footnotes&quot;&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.1&quot; name=&quot;fn.1&quot; class=&quot;footnum&quot; href=&quot;#fnr.1&quot;&gt;1&lt;/a&gt;&lt;/sup&gt; &lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;http://www.amazon.co.jp/%25E6%259C%259D4%25E6%2599%2582%25E8%25B5%25B7%25E3%2581%258D%25E3%2581%25AE%25E4%25BB%2595%25E4%25BA%258B%25E8%25A1%2593%25E2%2580%2595%25E8%25AA%25B0%25E3%2582%2582%25E7%259F%25A5%25E3%2582%2589%25E3%2581%25AA%25E3%2581%2584%25E3%2580%258C%25E6%259C%259D%25E3%2581%2584%25E3%2581%25A1%25E3%2581%25B0%25E3%2582%2593%25E3%2580%258D%25E6%25B4%25BB%25E7%2594%25A8%25E6%25B3%2595-%25E4%25B8%25AD%25E5%25B3%25B6-%25E5%25AD%259D%25E5%25BF%2597/dp/4833417987&quot;&gt;《朝4時起きの仕事術―誰も知らない「朝いちばん」活用法》&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.2&quot; name=&quot;fn.2&quot; class=&quot;footnum&quot; href=&quot;#fnr.2&quot;&gt;2&lt;/a&gt;&lt;/sup&gt; &lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;http://www.amazon.cn/4%25E7%2582%25B9%25E8%25B5%25B7%25E5%25BA%258A-%25E6%259C%2580%25E5%2585%25BB%25E7%2594%259F%25E5%2592%258C%25E9%25AB%2598%25E6%2595%2588%25E7%259A%2584%25E6%2597%25B6%25E9%2597%25B4%25E7%25AE%25A1%25E7%2590%2586-%25E4%25B8%25AD%25E5%25B2%259B%25E5%25AD%259D%25E5%25BF%2597/dp/B005LFN1QE/ref=sr_1_1/475-6531526-0375029?s=books&amp;ie=UTF8&amp;qid=1400706451&amp;sr=1-1&quot;&gt;《4点起床:最养生和高效的时间管理》&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;


&lt;/div&gt;
&lt;/div&gt;
</content>
 </entry>
 
 <entry>
   <title>向左走，一個人思考</title>
   <link href="http://kimi.im/2014-05-21-road-for-thinking"/>
   <updated>2014-05-21T00:00:00+00:00</updated>
   <id>http://kimi.im/road-for-thinking</id>
   <content type="html">&lt;a href=&quot;https://www.flickr.com/photos/kimim-photo/13230986374/&quot; title=&quot;Flickr 上 kimim-photo 的 大華飯店的綠色草地&quot;&gt;&lt;img src=&quot;https://farm4.staticflickr.com/3820/13230986374_c4a236430d_z.jpg&quot; width=&quot;640&quot; height=&quot;427&quot; alt=&quot;大華飯店的綠色草地&quot;&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;
向獨自散步這樣的小習慣，比如每週擦擦桌子，整理下桌面，保持清潔，開會記錄筆記等，都是非常有用的。但是卻經常忘記。所以我添加了一個 habit tag 用來記錄一些 OPEN 的任務。經常的回顧這些 habit 條目直到變成自己的習慣。
&lt;/p&gt;

&lt;p&gt;
所以，明天記得向左走，一個人散步思考。
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Drawing UML with plantuml</title>
   <link href="http://kimi.im/2014-05-17-drawing-uml-with-plantuml"/>
   <updated>2014-05-17T00:00:00+00:00</updated>
   <id>http://kimi.im/drawing-uml-with-plantuml</id>
   <content type="html">&lt;p&gt;
In this article, I will demo how to use plantuml and org-mode to draw
UML diagram and embedded the graphic inside the exported html file.
&lt;/p&gt;

&lt;p&gt;
PlantUML is used to draw UML diagram, using a simple and human
readable text description.&lt;sup&gt;&lt;a id=&quot;fnr.1&quot; name=&quot;fnr.1&quot; class=&quot;footref&quot; href=&quot;#fn.1&quot;&gt;1&lt;/a&gt;&lt;/sup&gt;
&lt;/p&gt;

&lt;div id=&quot;outline-container-sec-1&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;sec-1&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;1&lt;/span&gt; Installation and emacs setup&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-1&quot;&gt;
&lt;p&gt;
In order to make use of plantuml you should install &lt;code&gt;graphviz&lt;/code&gt; and
download &lt;code&gt;plantuml.jar&lt;/code&gt;. &lt;code&gt;plantuml.jar&lt;/code&gt; uses &lt;code&gt;graphviz&lt;/code&gt; as the
backend to convert images.
&lt;/p&gt;

&lt;p&gt;
You can download &lt;code&gt;graphviz&lt;/code&gt; here:
&lt;a href=&quot;http://www.graphviz.org/Download.php&quot;&gt;http://www.graphviz.org/Download.php&lt;/a&gt;. Or you can install graphviz
from cygwin setup, actually, I&apos;m using cygwin port of graphviz. My
philosophy is that if some software is available as cygwin port, I
will not install it as Windows software.
&lt;/p&gt;

&lt;p&gt;
In this link you can find all the guide on how to add cygwin mirror
for &lt;code&gt;graphviz&lt;/code&gt;: &lt;a href=&quot;http://sourceware.org/cygwinports/&quot;&gt;http://sourceware.org/cygwinports/&lt;/a&gt;.
&lt;/p&gt;

&lt;p&gt;
Then you can find &lt;code&gt;plantuml.jar&lt;/code&gt; from here:
&lt;a href=&quot;http://www.plantuml.com/download.html&quot;&gt;http://www.plantuml.com/download.html&lt;/a&gt;. The F.A.Q. says that:
PlantUML is developped with continuous integration in mind. That
means that there are new releases quite often. So you&apos;d better to
check update with following command:
&lt;/p&gt;

&lt;pre class=&quot;example&quot;&gt;
java -jar plantuml.jar -checkversion
&lt;/pre&gt;

&lt;p&gt;
Now lets assume that your &lt;code&gt;graphviz&lt;/code&gt; dot.exe is located at
&lt;code&gt;C:\cygwin\bin\dot.exe&lt;/code&gt; and &lt;code&gt;plantuml.jar&lt;/code&gt; can be found at
&lt;code&gt;C:\plantuml\plantuml.jar&lt;/code&gt;.
&lt;/p&gt;

&lt;p&gt;
You should add following elisp to your &lt;code&gt;.emacs&lt;/code&gt; to make use of
plantuml from emacs org-mode:
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;

&lt;pre class=&quot;src src-elisp&quot;&gt;(&lt;span style=&quot;color: #8b008b; font-weight: bold;&quot;&gt;require&lt;/span&gt; &apos;&lt;span style=&quot;color: #5f9ea0;&quot;&gt;ob-plantuml&lt;/span&gt;)
(setenv &lt;span style=&quot;color: #3a5fcd;&quot;&gt;&quot;GRAPHVIZ_DOT&quot;&lt;/span&gt; &lt;span style=&quot;color: #3a5fcd;&quot;&gt;&quot;C:\\cygwin\\bin\\dot.exe&quot;&lt;/span&gt;)
(setq org-plantuml-jar-path &lt;span style=&quot;color: #3a5fcd;&quot;&gt;&quot;C:\\plantuml\\plantuml.jar&quot;&lt;/span&gt;)
(org-babel-do-load-languages
 &apos;org-babel-load-languages
 &apos;((plantuml . t)
   ))
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
As normal, org-babel will evaluate plantuml source and generate an
image file, and then attach the image file inside html file. But as
I know svg type of image is just standard xml text, so it is
possible to merge the svg xml with html file. You can add following
redefined function to your .emacs to make this happen:
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;

&lt;pre class=&quot;src src-elisp&quot;&gt;(&lt;span style=&quot;color: #8b008b; font-weight: bold;&quot;&gt;defun&lt;/span&gt; &lt;span style=&quot;color: #0000cd;&quot;&gt;org-babel-result-to-file&lt;/span&gt; (result &lt;span style=&quot;color: #551a8b;&quot;&gt;&amp;amp;optional&lt;/span&gt; description)
  &lt;span style=&quot;color: #3a5fcd;&quot;&gt;&quot;If result file is svg type, convert RESULT into html file and&lt;/span&gt;
&lt;span style=&quot;color: #3a5fcd;&quot;&gt;plugin the html text in the exported file.&quot;&lt;/span&gt;
  (&lt;span style=&quot;color: #8b008b; font-weight: bold;&quot;&gt;when&lt;/span&gt; (stringp result)
    (&lt;span style=&quot;color: #8b008b; font-weight: bold;&quot;&gt;if&lt;/span&gt; (string= &lt;span style=&quot;color: #3a5fcd;&quot;&gt;&quot;svg&quot;&lt;/span&gt; (file-name-extension result))
        (&lt;span style=&quot;color: #8b008b; font-weight: bold;&quot;&gt;progn&lt;/span&gt;
          (&lt;span style=&quot;color: #8b008b; font-weight: bold;&quot;&gt;with-temp-buffer&lt;/span&gt;
            (&lt;span style=&quot;color: #8b008b; font-weight: bold;&quot;&gt;if&lt;/span&gt; (file-exists-p (concat result &lt;span style=&quot;color: #3a5fcd;&quot;&gt;&quot;.html&quot;&lt;/span&gt;))
                (delete-file (concat result &lt;span style=&quot;color: #3a5fcd;&quot;&gt;&quot;.html&quot;&lt;/span&gt;)))
            (rename-file result (concat result &lt;span style=&quot;color: #3a5fcd;&quot;&gt;&quot;.html&quot;&lt;/span&gt;))
            (insert-file-contents (concat result &lt;span style=&quot;color: #3a5fcd;&quot;&gt;&quot;.html&quot;&lt;/span&gt;))
            (message (concat result &lt;span style=&quot;color: #3a5fcd;&quot;&gt;&quot;.html&quot;&lt;/span&gt;))
            (format &lt;span style=&quot;color: #3a5fcd;&quot;&gt;&quot;#+BEGIN_HTML&lt;/span&gt;
&lt;span style=&quot;color: #3a5fcd;&quot;&gt;&amp;lt;div style=\&quot;text-align: center;\&quot;&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: #3a5fcd;&quot;&gt;%s&lt;/span&gt;
&lt;span style=&quot;color: #3a5fcd;&quot;&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: #3a5fcd;&quot;&gt;#+END_HTML&quot;&lt;/span&gt;
                    (buffer-string)
                    )))
      (&lt;span style=&quot;color: #8b008b; font-weight: bold;&quot;&gt;progn&lt;/span&gt;
        (format &lt;span style=&quot;color: #3a5fcd;&quot;&gt;&quot;[[file:%s]%s]&quot;&lt;/span&gt;
                (&lt;span style=&quot;color: #8b008b; font-weight: bold;&quot;&gt;if&lt;/span&gt; (and default-directory
                         buffer-file-name
                         (not (string= (expand-file-name default-directory)
                                       (expand-file-name
                                        (file-name-directory buffer-file-name)))))
                    (expand-file-name result default-directory)
                  result)
                (&lt;span style=&quot;color: #8b008b; font-weight: bold;&quot;&gt;if&lt;/span&gt; description (concat &lt;span style=&quot;color: #3a5fcd;&quot;&gt;&quot;[&quot;&lt;/span&gt; description &lt;span style=&quot;color: #3a5fcd;&quot;&gt;&quot;]&quot;&lt;/span&gt;) &lt;span style=&quot;color: #3a5fcd;&quot;&gt;&quot;&quot;&lt;/span&gt;))))))
&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-sec-2&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;sec-2&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;2&lt;/span&gt; First try with plantuml&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-2&quot;&gt;
&lt;p&gt;
Now let try to draw some uml diagrams. In order to generate svg
images, you should add following property to the plantuml source:
&lt;/p&gt;

&lt;pre class=&quot;example&quot;&gt;
#+BEGIN_SRC plantuml :file filename.svg
&lt;/pre&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-sec-2-1&quot; class=&quot;outline-3&quot;&gt;
&lt;h3 id=&quot;sec-2-1&quot;&gt;&lt;span class=&quot;section-number-3&quot;&gt;2.1&lt;/span&gt; Sequence Diagram&lt;/h3&gt;
&lt;div class=&quot;outline-text-3&quot; id=&quot;text-2-1&quot;&gt;
&lt;p&gt;
&quot;UML sequence diagrams model the flow of logic within your system in
a visual manner, enabling you both to document and validate your
logic, and are commonly used for both analysis and design
purposes. Sequence diagrams are the most popular UML artifact for
dynamic modeling, which focuses on identifying the behavior within
your system.&lt;sup&gt;&lt;a id=&quot;fnr.2&quot; name=&quot;fnr.2&quot; class=&quot;footref&quot; href=&quot;#fn.2&quot;&gt;2&lt;/a&gt;&lt;/sup&gt;&quot;
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;

&lt;pre class=&quot;src src-plantuml&quot;&gt;@startuml
hide footbox
actor Kimi
actor Ivy
Kimi -&amp;gt; Ivy: Can I buy a pot of rosemary?
loop 10 times
    Ivy -&amp;gt; Notebook: Check how many pots of rosemary we have
    activate Notebook
    Notebook --&amp;gt; Ivy: Count of rosemary
    deactivate Notebook
end
Ivy --&amp;gt; Kimi: No, we have many pots.
Kimi -&amp;gt; Ivy: Can I buy a novel book?
Ivy --&amp;gt; Bookshelf: Check how many new books
activate Bookshelf
Bookshelf --&amp;gt; Ivy: Count of new books
deactivate Bookshelf
Ivy --&amp;gt; Kimi: No, you have lots of new books not finished.
@enduml
&lt;/pre&gt;
&lt;/div&gt;

&lt;div style=&quot;text-align: center;&quot;&gt;
&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;yes&quot;?&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; xmlns:xlink=&quot;http://www.w3.org/1999/xlink&quot; height=&quot;394pt&quot; style=&quot;width:713px;height:394px;&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 713 394&quot; width=&quot;713pt&quot;&gt;&lt;defs&gt;&lt;filter height=&quot;300%&quot; id=&quot;f1&quot; width=&quot;300%&quot; x=&quot;-1&quot; y=&quot;-1&quot;&gt;&lt;feGaussianBlur result=&quot;blurOut&quot; stdDeviation=&quot;2.0&quot;/&gt;&lt;feColorMatrix in=&quot;blurOut&quot; result=&quot;blurOut2&quot; type=&quot;matrix&quot; values=&quot;0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 .4 0&quot;/&gt;&lt;feOffset dx=&quot;4.0&quot; dy=&quot;4.0&quot; in=&quot;blurOut2&quot; result=&quot;blurOut3&quot;/&gt;&lt;feBlend in=&quot;SourceGraphic&quot; in2=&quot;blurOut3&quot; mode=&quot;normal&quot;/&gt;&lt;/filter&gt;&lt;/defs&gt;&lt;g&gt;&lt;rect fill=&quot;#FFFFFF&quot; filter=&quot;url(#f1)&quot; height=&quot;31.7544&quot; style=&quot;stroke: #A80036; stroke-width: 1.0;&quot; width=&quot;10&quot; x=&quot;574&quot; y=&quot;177.6519&quot;/&gt;&lt;rect fill=&quot;#FFFFFF&quot; filter=&quot;url(#f1)&quot; height=&quot;31.7544&quot; style=&quot;stroke: #A80036; stroke-width: 1.0;&quot; width=&quot;10&quot; x=&quot;663&quot; y=&quot;311.6694&quot;/&gt;&lt;rect fill=&quot;#FFFFFF&quot; filter=&quot;url(#f1)&quot; height=&quot;83.2861&quot; style=&quot;stroke: #000000; stroke-width: 2.0;&quot; width=&quot;354&quot; x=&quot;274&quot; y=&quot;134.8745&quot;/&gt;&lt;line style=&quot;stroke: #A80036; stroke-width: 1.0; stroke-dasharray: 5.0,5.0;&quot; x1=&quot;21&quot; x2=&quot;21&quot; y1=&quot;86.1201&quot; y2=&quot;393.9326&quot;/&gt;&lt;line style=&quot;stroke: #A80036; stroke-width: 1.0; stroke-dasharray: 5.0,5.0;&quot; x1=&quot;299&quot; x2=&quot;299&quot; y1=&quot;86.1201&quot; y2=&quot;393.9326&quot;/&gt;&lt;line style=&quot;stroke: #A80036; stroke-width: 1.0; stroke-dasharray: 5.0,5.0;&quot; x1=&quot;579&quot; x2=&quot;579&quot; y1=&quot;86.1201&quot; y2=&quot;393.9326&quot;/&gt;&lt;line style=&quot;stroke: #A80036; stroke-width: 1.0; stroke-dasharray: 5.0,5.0;&quot; x1=&quot;668&quot; x2=&quot;668&quot; y1=&quot;86.1201&quot; y2=&quot;393.9326&quot;/&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;14&quot; lengthAdjust=&quot;spacingAndGlyphs&quot; textLength=&quot;26&quot; x=&quot;5&quot; y=&quot;83.0439&quot;&gt;Kimi&lt;/text&gt;&lt;ellipse cx=&quot;21&quot; cy=&quot;10&quot; fill=&quot;#FEFECE&quot; filter=&quot;url(#f1)&quot; rx=&quot;8&quot; ry=&quot;8&quot; style=&quot;stroke: #A80036; stroke-width: 2.0;&quot;/&gt;&lt;path d=&quot;M21,18 L21,45 M8,26 L34,26 M21,45 L8,60 M21,45 L34,60 &quot; fill=&quot;#FEFECE&quot; filter=&quot;url(#f1)&quot; style=&quot;stroke: #A80036; stroke-width: 2.0;&quot;/&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;14&quot; lengthAdjust=&quot;spacingAndGlyphs&quot; textLength=&quot;17&quot; x=&quot;287.5&quot; y=&quot;83.0439&quot;&gt;Ivy&lt;/text&gt;&lt;ellipse cx=&quot;299&quot; cy=&quot;10&quot; fill=&quot;#FEFECE&quot; filter=&quot;url(#f1)&quot; rx=&quot;8&quot; ry=&quot;8&quot; style=&quot;stroke: #A80036; stroke-width: 2.0;&quot;/&gt;&lt;path d=&quot;M299,18 L299,45 M286,26 L312,26 M299,45 L286,60 M299,45 L312,60 &quot; fill=&quot;#FEFECE&quot; filter=&quot;url(#f1)&quot; style=&quot;stroke: #A80036; stroke-width: 2.0;&quot;/&gt;&lt;rect fill=&quot;#FEFECE&quot; filter=&quot;url(#f1)&quot; height=&quot;33.1201&quot; style=&quot;stroke: #A80036; stroke-width: 1.5;&quot; width=&quot;74&quot; x=&quot;540&quot; y=&quot;48&quot;/&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;14&quot; lengthAdjust=&quot;spacingAndGlyphs&quot; textLength=&quot;60&quot; x=&quot;547&quot; y=&quot;71.0439&quot;&gt;Notebook&lt;/text&gt;&lt;rect fill=&quot;#FEFECE&quot; filter=&quot;url(#f1)&quot; height=&quot;33.1201&quot; style=&quot;stroke: #A80036; stroke-width: 1.5;&quot; width=&quot;76&quot; x=&quot;628&quot; y=&quot;48&quot;/&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;14&quot; lengthAdjust=&quot;spacingAndGlyphs&quot; textLength=&quot;62&quot; x=&quot;635&quot; y=&quot;71.0439&quot;&gt;Bookshelf&lt;/text&gt;&lt;rect fill=&quot;#FFFFFF&quot; filter=&quot;url(#f1)&quot; height=&quot;31.7544&quot; style=&quot;stroke: #A80036; stroke-width: 1.0;&quot; width=&quot;10&quot; x=&quot;574&quot; y=&quot;177.6519&quot;/&gt;&lt;rect fill=&quot;#FFFFFF&quot; filter=&quot;url(#f1)&quot; height=&quot;31.7544&quot; style=&quot;stroke: #A80036; stroke-width: 1.0;&quot; width=&quot;10&quot; x=&quot;663&quot; y=&quot;311.6694&quot;/&gt;&lt;polygon fill=&quot;#A80036&quot; points=&quot;287,115.1201,297,119.1201,287,123.1201,291,119.1201&quot; style=&quot;stroke: #A80036; stroke-width: 1.0;&quot;/&gt;&lt;line style=&quot;stroke: #A80036; stroke-width: 1.0;&quot; x1=&quot;21&quot; x2=&quot;293&quot; y1=&quot;119.1201&quot; y2=&quot;119.1201&quot;/&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;13&quot; lengthAdjust=&quot;spacingAndGlyphs&quot; textLength=&quot;167&quot; x=&quot;28&quot; y=&quot;115.0181&quot;&gt;Can I buy a pot of rosemary?&lt;/text&gt;&lt;rect fill=&quot;none&quot; height=&quot;83.2861&quot; style=&quot;stroke: #000000; stroke-width: 2.0;&quot; width=&quot;354&quot; x=&quot;274&quot; y=&quot;134.8745&quot;/&gt;&lt;polygon fill=&quot;#EEEEEE&quot; points=&quot;274,134.8745,347,134.8745,347,143.8745,337,153.8745,274,153.8745,274,134.8745&quot; style=&quot;stroke: #000000; stroke-width: 2.0;&quot;/&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;13&quot; font-weight=&quot;bold&quot; lengthAdjust=&quot;spacingAndGlyphs&quot; textLength=&quot;28&quot; x=&quot;289&quot; y=&quot;150.7725&quot;&gt;loop&lt;/text&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;11&quot; font-weight=&quot;bold&quot; lengthAdjust=&quot;spacingAndGlyphs&quot; textLength=&quot;55&quot; x=&quot;362&quot; y=&quot;149.4805&quot;&gt;[10 times]&lt;/text&gt;&lt;polygon fill=&quot;#A80036&quot; points=&quot;562,173.6519,572,177.6519,562,181.6519,566,177.6519&quot; style=&quot;stroke: #A80036; stroke-width: 1.0;&quot;/&gt;&lt;line style=&quot;stroke: #A80036; stroke-width: 1.0;&quot; x1=&quot;299&quot; x2=&quot;568&quot; y1=&quot;177.6519&quot; y2=&quot;177.6519&quot;/&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;13&quot; lengthAdjust=&quot;spacingAndGlyphs&quot; textLength=&quot;251&quot; x=&quot;306&quot; y=&quot;173.5498&quot;&gt;Check how many pots of rosemary we have&lt;/text&gt;&lt;polygon fill=&quot;#A80036&quot; points=&quot;310,205.4063,300,209.4063,310,213.4063,306,209.4063&quot; style=&quot;stroke: #A80036; stroke-width: 1.0;&quot;/&gt;&lt;line style=&quot;stroke: #A80036; stroke-width: 1.0; stroke-dasharray: 2.0,2.0;&quot; x1=&quot;304&quot; x2=&quot;578&quot; y1=&quot;209.4063&quot; y2=&quot;209.4063&quot;/&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;13&quot; lengthAdjust=&quot;spacingAndGlyphs&quot; textLength=&quot;106&quot; x=&quot;316&quot; y=&quot;205.3042&quot;&gt;Count of rosemary&lt;/text&gt;&lt;polygon fill=&quot;#A80036&quot; points=&quot;32,244.1606,22,248.1606,32,252.1606,28,248.1606&quot; style=&quot;stroke: #A80036; stroke-width: 1.0;&quot;/&gt;&lt;line style=&quot;stroke: #A80036; stroke-width: 1.0; stroke-dasharray: 2.0,2.0;&quot; x1=&quot;26&quot; x2=&quot;298&quot; y1=&quot;248.1606&quot; y2=&quot;248.1606&quot;/&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;13&quot; lengthAdjust=&quot;spacingAndGlyphs&quot; textLength=&quot;139&quot; x=&quot;38&quot; y=&quot;244.0586&quot;&gt;No, we have many pots.&lt;/text&gt;&lt;polygon fill=&quot;#A80036&quot; points=&quot;287,275.915,297,279.915,287,283.915,291,279.915&quot; style=&quot;stroke: #A80036; stroke-width: 1.0;&quot;/&gt;&lt;line style=&quot;stroke: #A80036; stroke-width: 1.0;&quot; x1=&quot;21&quot; x2=&quot;293&quot; y1=&quot;279.915&quot; y2=&quot;279.915&quot;/&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;13&quot; lengthAdjust=&quot;spacingAndGlyphs&quot; textLength=&quot;138&quot; x=&quot;28&quot; y=&quot;275.813&quot;&gt;Can I buy a novel book?&lt;/text&gt;&lt;polygon fill=&quot;#A80036&quot; points=&quot;651,307.6694,661,311.6694,651,315.6694,655,311.6694&quot; style=&quot;stroke: #A80036; stroke-width: 1.0;&quot;/&gt;&lt;line style=&quot;stroke: #A80036; stroke-width: 1.0; stroke-dasharray: 2.0,2.0;&quot; x1=&quot;299&quot; x2=&quot;657&quot; y1=&quot;311.6694&quot; y2=&quot;311.6694&quot;/&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;13&quot; lengthAdjust=&quot;spacingAndGlyphs&quot; textLength=&quot;166&quot; x=&quot;306&quot; y=&quot;307.5674&quot;&gt;Check how many new books&lt;/text&gt;&lt;polygon fill=&quot;#A80036&quot; points=&quot;310,339.4238,300,343.4238,310,347.4238,306,343.4238&quot; style=&quot;stroke: #A80036; stroke-width: 1.0;&quot;/&gt;&lt;line style=&quot;stroke: #A80036; stroke-width: 1.0; stroke-dasharray: 2.0,2.0;&quot; x1=&quot;304&quot; x2=&quot;667&quot; y1=&quot;343.4238&quot; y2=&quot;343.4238&quot;/&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;13&quot; lengthAdjust=&quot;spacingAndGlyphs&quot; textLength=&quot;114&quot; x=&quot;316&quot; y=&quot;339.3218&quot;&gt;Count of new books&lt;/text&gt;&lt;polygon fill=&quot;#A80036&quot; points=&quot;32,371.1782,22,375.1782,32,379.1782,28,375.1782&quot; style=&quot;stroke: #A80036; stroke-width: 1.0;&quot;/&gt;&lt;line style=&quot;stroke: #A80036; stroke-width: 1.0; stroke-dasharray: 2.0,2.0;&quot; x1=&quot;26&quot; x2=&quot;298&quot; y1=&quot;375.1782&quot; y2=&quot;375.1782&quot;/&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;13&quot; lengthAdjust=&quot;spacingAndGlyphs&quot; textLength=&quot;254&quot; x=&quot;38&quot; y=&quot;371.0762&quot;&gt;No, you have lots of new books not finished.&lt;/text&gt;&lt;/g&gt;&lt;/svg&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-sec-2-2&quot; class=&quot;outline-3&quot;&gt;
&lt;h3 id=&quot;sec-2-2&quot;&gt;&lt;span class=&quot;section-number-3&quot;&gt;2.2&lt;/span&gt; Use Case Diagram&lt;/h3&gt;
&lt;div class=&quot;outline-text-3&quot; id=&quot;text-2-2&quot;&gt;
&lt;p&gt;
&quot;UML 2 use case diagrams overview the usage requirements for a
system.&lt;sup&gt;&lt;a id=&quot;fnr.3&quot; name=&quot;fnr.3&quot; class=&quot;footref&quot; href=&quot;#fn.3&quot;&gt;3&lt;/a&gt;&lt;/sup&gt;&quot;
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;

&lt;pre class=&quot;src src-plantuml&quot;&gt;@startuml
left to right direction
actor Kimi &amp;lt;&amp;lt; Robot &amp;gt;&amp;gt;
actor Ivy &amp;lt;&amp;lt; Human &amp;gt;&amp;gt;
(Use the computer) as (Computer) &amp;lt;&amp;lt; Main &amp;gt;&amp;gt;
(Use the iPad) as (iPad) &amp;lt;&amp;lt; Secondary &amp;gt;&amp;gt;
Kimi --&amp;gt; (Computer):emacs
Ivy --&amp;gt; (Computer):taobao, movie
Kimi --&amp;gt; (iPad):news, learning languages
Ivy --&amp;gt; (iPad):taobao, movie
@enduml
&lt;/pre&gt;
&lt;/div&gt;

&lt;div style=&quot;text-align: center;&quot;&gt;
&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;yes&quot;?&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; xmlns:xlink=&quot;http://www.w3.org/1999/xlink&quot; height=&quot;260pt&quot; style=&quot;width:460px;height:260px;&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 460 260&quot; width=&quot;460pt&quot;&gt;&lt;defs&gt;&lt;filter height=&quot;300%&quot; id=&quot;f1&quot; width=&quot;300%&quot; x=&quot;-1&quot; y=&quot;-1&quot;&gt;&lt;feGaussianBlur result=&quot;blurOut&quot; stdDeviation=&quot;2.0&quot;/&gt;&lt;feColorMatrix in=&quot;blurOut&quot; result=&quot;blurOut2&quot; type=&quot;matrix&quot; values=&quot;0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 .4 0&quot;/&gt;&lt;feOffset dx=&quot;4.0&quot; dy=&quot;4.0&quot; in=&quot;blurOut2&quot; result=&quot;blurOut3&quot;/&gt;&lt;feBlend in=&quot;SourceGraphic&quot; in2=&quot;blurOut3&quot; mode=&quot;normal&quot;/&gt;&lt;/filter&gt;&lt;/defs&gt;&lt;g&gt;&lt;ellipse cx=&quot;49&quot; cy=&quot;36.6201&quot; fill=&quot;#FEFECE&quot; filter=&quot;url(#f1)&quot; rx=&quot;8&quot; ry=&quot;8&quot; style=&quot;stroke: #A80036; stroke-width: 2.0;&quot;/&gt;&lt;path d=&quot;M49,44.6201 L49,71.6201 M36,52.6201 L62,52.6201 M49,71.6201 L36,86.6201 M49,71.6201 L62,86.6201 &quot; fill=&quot;#FEFECE&quot; filter=&quot;url(#f1)&quot; style=&quot;stroke: #A80036; stroke-width: 2.0;&quot;/&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;14&quot; lengthAdjust=&quot;spacingAndGlyphs&quot; textLength=&quot;26&quot; x=&quot;36&quot; y=&quot;109.6641&quot;&gt;Kimi&lt;/text&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;14&quot; font-style=&quot;italic&quot; lengthAdjust=&quot;spacingAndGlyphs&quot; textLength=&quot;78&quot; x=&quot;10&quot; y=&quot;23.5439&quot;&gt;&amp;lt;&amp;lt; Robot &amp;gt;&amp;gt;&lt;/text&gt;&lt;ellipse cx=&quot;49&quot; cy=&quot;186.6201&quot; fill=&quot;#FEFECE&quot; filter=&quot;url(#f1)&quot; rx=&quot;8&quot; ry=&quot;8&quot; style=&quot;stroke: #A80036; stroke-width: 2.0;&quot;/&gt;&lt;path d=&quot;M49,194.6201 L49,221.6201 M36,202.6201 L62,202.6201 M49,221.6201 L36,236.6201 M49,221.6201 L62,236.6201 &quot; fill=&quot;#FEFECE&quot; filter=&quot;url(#f1)&quot; style=&quot;stroke: #A80036; stroke-width: 2.0;&quot;/&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;14&quot; lengthAdjust=&quot;spacingAndGlyphs&quot; textLength=&quot;17&quot; x=&quot;40.5&quot; y=&quot;259.6641&quot;&gt;Ivy&lt;/text&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;14&quot; font-style=&quot;italic&quot; lengthAdjust=&quot;spacingAndGlyphs&quot; textLength=&quot;85&quot; x=&quot;6.5&quot; y=&quot;173.5439&quot;&gt;&amp;lt;&amp;lt; Human &amp;gt;&amp;gt;&lt;/text&gt;&lt;ellipse cx=&quot;377.9226&quot; cy=&quot;72.1223&quot; fill=&quot;#FEFECE&quot; filter=&quot;url(#f1)&quot; rx=&quot;75.9226&quot; ry=&quot;28.1223&quot; style=&quot;stroke: #A80036; stroke-width: 1.5;&quot;/&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;14&quot; font-style=&quot;italic&quot; lengthAdjust=&quot;spacingAndGlyphs&quot; textLength=&quot;71&quot; x=&quot;342.4226&quot; y=&quot;65.798&quot;&gt;&amp;lt;&amp;lt; Main &amp;gt;&amp;gt;&lt;/text&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;14&quot; lengthAdjust=&quot;spacingAndGlyphs&quot; textLength=&quot;111&quot; x=&quot;322.4226&quot; y=&quot;84.9181&quot;&gt;Use the computer&lt;/text&gt;&lt;ellipse cx=&quot;378.1881&quot; cy=&quot;208.0601&quot; fill=&quot;#FEFECE&quot; filter=&quot;url(#f1)&quot; rx=&quot;75.1881&quot; ry=&quot;28.5601&quot; style=&quot;stroke: #A80036; stroke-width: 1.5;&quot;/&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;14&quot; font-style=&quot;italic&quot; lengthAdjust=&quot;spacingAndGlyphs&quot; textLength=&quot;108&quot; x=&quot;324.1881&quot; y=&quot;206.7173&quot;&gt;&amp;lt;&amp;lt; Secondary &amp;gt;&amp;gt;&lt;/text&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;14&quot; lengthAdjust=&quot;spacingAndGlyphs&quot; textLength=&quot;80&quot; x=&quot;338.1881&quot; y=&quot;225.8374&quot;&gt;Use the iPad&lt;/text&gt;&lt;path d=&quot;M88.151,61.4 C139.134,63.271 230.756,66.633 297.167,69.07 &quot; fill=&quot;none&quot; style=&quot;stroke: #A80036; stroke-width: 1.0;&quot;/&gt;&lt;polygon fill=&quot;#A80036&quot; points=&quot;302.305,69.259,293.4573,64.9325,297.3083,69.0761,293.1647,72.9271,302.305,69.259&quot; style=&quot;stroke: #A80036; stroke-width: 1.0;&quot;/&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;13&quot; lengthAdjust=&quot;spacingAndGlyphs&quot; textLength=&quot;39&quot; x=&quot;177&quot; y=&quot;58.8979&quot;&gt;emacs&lt;/text&gt;&lt;path d=&quot;M91.5322,210.293 C137.903,209.0312 214.042,202.1183 272,173 C305.117,156.362 334.721,125.683 353.986,102.486 &quot; fill=&quot;none&quot; style=&quot;stroke: #A80036; stroke-width: 1.0;&quot;/&gt;&lt;polygon fill=&quot;#A80036&quot; points=&quot;357.224,98.54,348.4232,102.961,354.0527,102.4056,354.6081,108.0351,357.224,98.54&quot; style=&quot;stroke: #A80036; stroke-width: 1.0;&quot;/&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;13&quot; lengthAdjust=&quot;spacingAndGlyphs&quot; textLength=&quot;80&quot; x=&quot;156.5&quot; y=&quot;168.8979&quot;&gt;taobao, movie&lt;/text&gt;&lt;path d=&quot;M88.0078,80.798 C98.842,86.378 110.758,92.191 122,97 C186.873,124.75 207.655,120.047 272,149 C292.743,158.333 314.816,170.388 333.344,181.1659 &quot; fill=&quot;none&quot; style=&quot;stroke: #A80036; stroke-width: 1.0;&quot;/&gt;&lt;polygon fill=&quot;#A80036&quot; points=&quot;337.976,183.8761,332.229,175.8778,333.6608,181.3505,328.1881,182.7822,337.976,183.8761&quot; style=&quot;stroke: #A80036; stroke-width: 1.0;&quot;/&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;13&quot; lengthAdjust=&quot;spacingAndGlyphs&quot; textLength=&quot;146&quot; x=&quot;123.5&quot; y=&quot;92.8979&quot;&gt;news, learning languages&lt;/text&gt;&lt;path d=&quot;M91.7338,225.7273 C101.5247,228.7434 112.016,231.4441 122,233 C187.872,243.2656 205.788,240.7737 272,233 C285.144,231.4568 299.027,228.8624 312.241,225.9141 &quot; fill=&quot;none&quot; style=&quot;stroke: #A80036; stroke-width: 1.0;&quot;/&gt;&lt;polygon fill=&quot;#A80036&quot; points=&quot;317.465,224.723,307.801,222.8237,312.5901,225.8344,309.5793,230.6235,317.465,224.723&quot; style=&quot;stroke: #A80036; stroke-width: 1.0;&quot;/&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;13&quot; lengthAdjust=&quot;spacingAndGlyphs&quot; textLength=&quot;80&quot; x=&quot;156.5&quot; y=&quot;228.8979&quot;&gt;taobao, movie&lt;/text&gt;&lt;/g&gt;&lt;/svg&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-sec-2-3&quot; class=&quot;outline-3&quot;&gt;
&lt;h3 id=&quot;sec-2-3&quot;&gt;&lt;span class=&quot;section-number-3&quot;&gt;2.3&lt;/span&gt; Class Diagram&lt;/h3&gt;
&lt;div class=&quot;outline-text-3&quot; id=&quot;text-2-3&quot;&gt;
&lt;p&gt;
&quot;UML 2 class diagrams show the classes of the system, their
interrelationships (including inheritance, aggregation, and
association), and the operations and attributes of the
classes. Class diagrams are used for a wide variety of purposes,
including both conceptual/domain modeling and detailed design
modeling.&lt;sup&gt;&lt;a id=&quot;fnr.4&quot; name=&quot;fnr.4&quot; class=&quot;footref&quot; href=&quot;#fn.4&quot;&gt;4&lt;/a&gt;&lt;/sup&gt;&quot;
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;

&lt;pre class=&quot;src src-plantuml&quot;&gt;@startuml

abstract class AbstractMother
abstract AbstractFather
abstract AbstractDaughter
interface Mother
interface Father
interface Daughter

interface Toy
interface Cash

abstract AbstractToy
abstract AbstractCash

Mother &amp;lt;|-- AbstractMother
Father &amp;lt;|-- AbstractFather
Daughter &amp;lt;|-- AbstractDaughter

Toy &amp;lt;|-- AbstractToy
Cash &amp;lt;|-- AbstractCash

Mother &amp;lt;|-- Daughter
Father &amp;lt;|-- Daughter

AbstractMother *- AbstractCash
AbstractDaughter *- AbstractToy

AbstractCash &amp;lt;|-- RMB

AbstractToy &amp;lt;|-- ManhattanBall
AbstractToy &amp;lt;|-- FisherPrice

AbstractMother &amp;lt;|-- Ivy
Ivy  *- RMB

AbstractDaughter &amp;lt;|-- Vivi
Vivi *- ManhattanBall

Vivi *- FisherPrice

AbstractFather &amp;lt;|-- Kimi
interface Father {
  work()
}

interface Mother {
  cook()
  pay_by_cash()
}

interface Daughter {
  play_toy()
  sing()
  laugh()
  cry()
}

class Ivy {
  taobao()
  watch_movie()
}

class Kimi {
  cook()
  read()
  write()
}

class Vivi {
  sleep()
  drink_milk()
}
@enduml
&lt;/pre&gt;
&lt;/div&gt;

&lt;div style=&quot;text-align: center;&quot;&gt;
&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;yes&quot;?&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; xmlns:xlink=&quot;http://www.w3.org/1999/xlink&quot; height=&quot;555pt&quot; style=&quot;width:623px;height:555px;&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 623 555&quot; width=&quot;623pt&quot;&gt;&lt;defs&gt;&lt;filter height=&quot;300%&quot; id=&quot;f1&quot; width=&quot;300%&quot; x=&quot;-1&quot; y=&quot;-1&quot;&gt;&lt;feGaussianBlur result=&quot;blurOut&quot; stdDeviation=&quot;2.0&quot;/&gt;&lt;feColorMatrix in=&quot;blurOut&quot; result=&quot;blurOut2&quot; type=&quot;matrix&quot; values=&quot;0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 .4 0&quot;/&gt;&lt;feOffset dx=&quot;4.0&quot; dy=&quot;4.0&quot; in=&quot;blurOut2&quot; result=&quot;blurOut3&quot;/&gt;&lt;feBlend in=&quot;SourceGraphic&quot; in2=&quot;blurOut3&quot; mode=&quot;normal&quot;/&gt;&lt;/filter&gt;&lt;/defs&gt;&lt;g&gt;&lt;rect fill=&quot;#FEFECE&quot; filter=&quot;url(#f1)&quot; height=&quot;48&quot; style=&quot;stroke: #A80036; stroke-width: 1.5;&quot; width=&quot;114&quot; x=&quot;6&quot; y=&quot;176&quot;/&gt;&lt;ellipse cx=&quot;21&quot; cy=&quot;192&quot; fill=&quot;#A9DCDF&quot; rx=&quot;11&quot; ry=&quot;11&quot; style=&quot;stroke: #A80036; stroke-width: 1.0;&quot;/&gt;&lt;path d=&quot;M21.375,191.9844 L19.3906,191.9844 L18.7969,194.5 Q18.6563,195.1094 18.7891,195.4688 Q18.9219,195.8281 18.9219,195.8281 L19.5938,195.8281 L19.5938,196.2344 L16.1406,196.2344 L16.1406,195.8281 L16.3281,195.8281 Q16.5938,195.8281 16.7969,195.6641 Q17,195.5 17.0625,195.1094 L19.6563,184.9375 L21.5313,184.3281 L24.1719,195.1094 Q24.3125,195.5 24.5078,195.6641 Q24.7031,195.8281 24.7031,195.8281 L25.1719,195.8281 L25.1719,196.2344 L21.3125,196.2344 L21.3125,195.8281 L21.5781,195.8281 Q21.9844,195.8281 22.0781,195.6016 Q22.1719,195.375 22.0469,194.9063 L21.375,191.9844 Z M19.9844,186.0781 L19.9844,186.0781 L19.5313,191.5781 L21.3125,191.5781 L19.9844,186.0781 Z &quot;/&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;12&quot; font-style=&quot;italic&quot; lengthAdjust=&quot;spacingAndGlyphs&quot; textLength=&quot;82&quot; x=&quot;35&quot; y=&quot;197.5576&quot;&gt;AbstractMother&lt;/text&gt;&lt;line style=&quot;stroke: #A80036; stroke-width: 1.5;&quot; x1=&quot;7&quot; x2=&quot;119&quot; y1=&quot;208&quot; y2=&quot;208&quot;/&gt;&lt;line style=&quot;stroke: #A80036; stroke-width: 1.5;&quot; x1=&quot;7&quot; x2=&quot;119&quot; y1=&quot;216&quot; y2=&quot;216&quot;/&gt;&lt;rect fill=&quot;#FEFECE&quot; filter=&quot;url(#f1)&quot; height=&quot;48&quot; style=&quot;stroke: #A80036; stroke-width: 1.5;&quot; width=&quot;112&quot; x=&quot;274.5&quot; y=&quot;176&quot;/&gt;&lt;ellipse cx=&quot;289.5&quot; cy=&quot;192&quot; fill=&quot;#A9DCDF&quot; rx=&quot;11&quot; ry=&quot;11&quot; style=&quot;stroke: #A80036; stroke-width: 1.0;&quot;/&gt;&lt;path d=&quot;M289.875,191.9844 L287.8906,191.9844 L287.2969,194.5 Q287.1563,195.1094 287.2891,195.4688 Q287.4219,195.8281 287.4219,195.8281 L288.0938,195.8281 L288.0938,196.2344 L284.6406,196.2344 L284.6406,195.8281 L284.8281,195.8281 Q285.0938,195.8281 285.2969,195.6641 Q285.5,195.5 285.5625,195.1094 L288.1563,184.9375 L290.0313,184.3281 L292.6719,195.1094 Q292.8125,195.5 293.0078,195.6641 Q293.2031,195.8281 293.2031,195.8281 L293.6719,195.8281 L293.6719,196.2344 L289.8125,196.2344 L289.8125,195.8281 L290.0781,195.8281 Q290.4844,195.8281 290.5781,195.6016 Q290.6719,195.375 290.5469,194.9063 L289.875,191.9844 Z M288.4844,186.0781 L288.4844,186.0781 L288.0313,191.5781 L289.8125,191.5781 L288.4844,186.0781 Z &quot;/&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;12&quot; font-style=&quot;italic&quot; lengthAdjust=&quot;spacingAndGlyphs&quot; textLength=&quot;80&quot; x=&quot;303.5&quot; y=&quot;197.5576&quot;&gt;AbstractFather&lt;/text&gt;&lt;line style=&quot;stroke: #A80036; stroke-width: 1.5;&quot; x1=&quot;275.5&quot; x2=&quot;385.5&quot; y1=&quot;208&quot; y2=&quot;208&quot;/&gt;&lt;line style=&quot;stroke: #A80036; stroke-width: 1.5;&quot; x1=&quot;275.5&quot; x2=&quot;385.5&quot; y1=&quot;216&quot; y2=&quot;216&quot;/&gt;&lt;rect fill=&quot;#FEFECE&quot; filter=&quot;url(#f1)&quot; height=&quot;48&quot; style=&quot;stroke: #A80036; stroke-width: 1.5;&quot; width=&quot;128&quot; x=&quot;141&quot; y=&quot;337&quot;/&gt;&lt;ellipse cx=&quot;156&quot; cy=&quot;353&quot; fill=&quot;#A9DCDF&quot; rx=&quot;11&quot; ry=&quot;11&quot; style=&quot;stroke: #A80036; stroke-width: 1.0;&quot;/&gt;&lt;path d=&quot;M156.375,352.9844 L154.3906,352.9844 L153.7969,355.5 Q153.6563,356.1094 153.7891,356.4688 Q153.9219,356.8281 153.9219,356.8281 L154.5938,356.8281 L154.5938,357.2344 L151.1406,357.2344 L151.1406,356.8281 L151.3281,356.8281 Q151.5938,356.8281 151.7969,356.6641 Q152,356.5 152.0625,356.1094 L154.6563,345.9375 L156.5313,345.3281 L159.1719,356.1094 Q159.3125,356.5 159.5078,356.6641 Q159.7031,356.8281 159.7031,356.8281 L160.1719,356.8281 L160.1719,357.2344 L156.3125,357.2344 L156.3125,356.8281 L156.5781,356.8281 Q156.9844,356.8281 157.0781,356.6016 Q157.1719,356.375 157.0469,355.9063 L156.375,352.9844 Z M154.9844,347.0781 L154.9844,347.0781 L154.5313,352.5781 L156.3125,352.5781 L154.9844,347.0781 Z &quot;/&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;12&quot; font-style=&quot;italic&quot; lengthAdjust=&quot;spacingAndGlyphs&quot; textLength=&quot;96&quot; x=&quot;170&quot; y=&quot;358.5576&quot;&gt;AbstractDaughter&lt;/text&gt;&lt;line style=&quot;stroke: #A80036; stroke-width: 1.5;&quot; x1=&quot;142&quot; x2=&quot;268&quot; y1=&quot;369&quot; y2=&quot;369&quot;/&gt;&lt;line style=&quot;stroke: #A80036; stroke-width: 1.5;&quot; x1=&quot;142&quot; x2=&quot;268&quot; y1=&quot;377&quot; y2=&quot;377&quot;/&gt;&lt;rect fill=&quot;#FEFECE&quot; filter=&quot;url(#f1)&quot; height=&quot;78.0459&quot; style=&quot;stroke: #A80036; stroke-width: 1.5;&quot; width=&quot;86&quot; x=&quot;92&quot; y=&quot;8&quot;/&gt;&lt;ellipse cx=&quot;114.65&quot; cy=&quot;24&quot; fill=&quot;#B4A7E5&quot; rx=&quot;11&quot; ry=&quot;11&quot; style=&quot;stroke: #A80036; stroke-width: 1.0;&quot;/&gt;&lt;path d=&quot;M111.2438,18.2813 L111.2438,17.875 L117.5563,17.875 L117.5563,18.2813 L115.025,18.2813 Q115.025,18.2813 115.1734,18.4141 Q115.3219,18.5469 115.3219,18.8125 L115.3219,28.2969 Q115.3219,28.5625 115.5406,28.6953 Q115.7594,28.8281 115.7594,28.8281 L117.5563,28.8281 L117.5563,29.2344 L111.2438,29.2344 L111.2438,28.8281 L112.775,28.8281 Q113.1031,28.8281 113.2359,28.6953 Q113.3688,28.5625 113.3688,28.2969 L113.3688,18.8125 Q113.3688,18.5469 113.2359,18.4141 Q113.1031,18.2813 112.775,18.2813 L111.2438,18.2813 Z &quot;/&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;12&quot; font-style=&quot;italic&quot; lengthAdjust=&quot;spacingAndGlyphs&quot; textLength=&quot;37&quot; x=&quot;130.35&quot; y=&quot;29.5576&quot;&gt;Mother&lt;/text&gt;&lt;line style=&quot;stroke: #A80036; stroke-width: 1.5;&quot; x1=&quot;93&quot; x2=&quot;177&quot; y1=&quot;40&quot; y2=&quot;40&quot;/&gt;&lt;line style=&quot;stroke: #A80036; stroke-width: 1.5;&quot; x1=&quot;93&quot; x2=&quot;177&quot; y1=&quot;48&quot; y2=&quot;48&quot;/&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;11&quot; lengthAdjust=&quot;spacingAndGlyphs&quot; textLength=&quot;31&quot; x=&quot;98&quot; y=&quot;64.606&quot;&gt;cook()&lt;/text&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;11&quot; lengthAdjust=&quot;spacingAndGlyphs&quot; textLength=&quot;74&quot; x=&quot;98&quot; y=&quot;79.6289&quot;&gt;pay_by_cash()&lt;/text&gt;&lt;rect fill=&quot;#FEFECE&quot; filter=&quot;url(#f1)&quot; height=&quot;63.0229&quot; style=&quot;stroke: #A80036; stroke-width: 1.5;&quot; width=&quot;67&quot; x=&quot;224.75&quot; y=&quot;15.5&quot;/&gt;&lt;ellipse cx=&quot;239.75&quot; cy=&quot;31.5&quot; fill=&quot;#B4A7E5&quot; rx=&quot;11&quot; ry=&quot;11&quot; style=&quot;stroke: #A80036; stroke-width: 1.0;&quot;/&gt;&lt;path d=&quot;M236.3438,25.7813 L236.3438,25.375 L242.6563,25.375 L242.6563,25.7813 L240.125,25.7813 Q240.125,25.7813 240.2734,25.9141 Q240.4219,26.0469 240.4219,26.3125 L240.4219,35.7969 Q240.4219,36.0625 240.6406,36.1953 Q240.8594,36.3281 240.8594,36.3281 L242.6563,36.3281 L242.6563,36.7344 L236.3438,36.7344 L236.3438,36.3281 L237.875,36.3281 Q238.2031,36.3281 238.3359,36.1953 Q238.4688,36.0625 238.4688,35.7969 L238.4688,26.3125 Q238.4688,26.0469 238.3359,25.9141 Q238.2031,25.7813 237.875,25.7813 L236.3438,25.7813 Z &quot;/&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;12&quot; font-style=&quot;italic&quot; lengthAdjust=&quot;spacingAndGlyphs&quot; textLength=&quot;35&quot; x=&quot;253.75&quot; y=&quot;37.0576&quot;&gt;Father&lt;/text&gt;&lt;line style=&quot;stroke: #A80036; stroke-width: 1.5;&quot; x1=&quot;225.75&quot; x2=&quot;290.75&quot; y1=&quot;47.5&quot; y2=&quot;47.5&quot;/&gt;&lt;line style=&quot;stroke: #A80036; stroke-width: 1.5;&quot; x1=&quot;225.75&quot; x2=&quot;290.75&quot; y1=&quot;55.5&quot; y2=&quot;55.5&quot;/&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;11&quot; lengthAdjust=&quot;spacingAndGlyphs&quot; textLength=&quot;33&quot; x=&quot;230.75&quot; y=&quot;72.106&quot;&gt;work()&lt;/text&gt;&lt;rect fill=&quot;#FEFECE&quot; filter=&quot;url(#f1)&quot; height=&quot;108.0918&quot; style=&quot;stroke: #A80036; stroke-width: 1.5;&quot; width=&quot;83&quot; x=&quot;155.75&quot; y=&quot;146&quot;/&gt;&lt;ellipse cx=&quot;170.75&quot; cy=&quot;162&quot; fill=&quot;#B4A7E5&quot; rx=&quot;11&quot; ry=&quot;11&quot; style=&quot;stroke: #A80036; stroke-width: 1.0;&quot;/&gt;&lt;path d=&quot;M167.3438,156.2813 L167.3438,155.875 L173.6563,155.875 L173.6563,156.2813 L171.125,156.2813 Q171.125,156.2813 171.2734,156.4141 Q171.4219,156.5469 171.4219,156.8125 L171.4219,166.2969 Q171.4219,166.5625 171.6406,166.6953 Q171.8594,166.8281 171.8594,166.8281 L173.6563,166.8281 L173.6563,167.2344 L167.3438,167.2344 L167.3438,166.8281 L168.875,166.8281 Q169.2031,166.8281 169.3359,166.6953 Q169.4688,166.5625 169.4688,166.2969 L169.4688,156.8125 Q169.4688,156.5469 169.3359,156.4141 Q169.2031,156.2813 168.875,156.2813 L167.3438,156.2813 Z &quot;/&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;12&quot; font-style=&quot;italic&quot; lengthAdjust=&quot;spacingAndGlyphs&quot; textLength=&quot;51&quot; x=&quot;184.75&quot; y=&quot;167.5576&quot;&gt;Daughter&lt;/text&gt;&lt;line style=&quot;stroke: #A80036; stroke-width: 1.5;&quot; x1=&quot;156.75&quot; x2=&quot;237.75&quot; y1=&quot;178&quot; y2=&quot;178&quot;/&gt;&lt;line style=&quot;stroke: #A80036; stroke-width: 1.5;&quot; x1=&quot;156.75&quot; x2=&quot;237.75&quot; y1=&quot;186&quot; y2=&quot;186&quot;/&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;11&quot; lengthAdjust=&quot;spacingAndGlyphs&quot; textLength=&quot;49&quot; x=&quot;161.75&quot; y=&quot;202.606&quot;&gt;play_toy()&lt;/text&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;11&quot; lengthAdjust=&quot;spacingAndGlyphs&quot; textLength=&quot;28&quot; x=&quot;161.75&quot; y=&quot;217.6289&quot;&gt;sing()&lt;/text&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;11&quot; lengthAdjust=&quot;spacingAndGlyphs&quot; textLength=&quot;34&quot; x=&quot;161.75&quot; y=&quot;232.6519&quot;&gt;laugh()&lt;/text&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;11&quot; lengthAdjust=&quot;spacingAndGlyphs&quot; textLength=&quot;24&quot; x=&quot;161.75&quot; y=&quot;247.6748&quot;&gt;cry()&lt;/text&gt;&lt;rect fill=&quot;#FEFECE&quot; filter=&quot;url(#f1)&quot; height=&quot;48&quot; style=&quot;stroke: #A80036; stroke-width: 1.5;&quot; width=&quot;52&quot; x=&quot;421&quot; y=&quot;176&quot;/&gt;&lt;ellipse cx=&quot;436&quot; cy=&quot;192&quot; fill=&quot;#B4A7E5&quot; rx=&quot;11&quot; ry=&quot;11&quot; style=&quot;stroke: #A80036; stroke-width: 1.0;&quot;/&gt;&lt;path d=&quot;M432.5938,186.2813 L432.5938,185.875 L438.9063,185.875 L438.9063,186.2813 L436.375,186.2813 Q436.375,186.2813 436.5234,186.4141 Q436.6719,186.5469 436.6719,186.8125 L436.6719,196.2969 Q436.6719,196.5625 436.8906,196.6953 Q437.1094,196.8281 437.1094,196.8281 L438.9063,196.8281 L438.9063,197.2344 L432.5938,197.2344 L432.5938,196.8281 L434.125,196.8281 Q434.4531,196.8281 434.5859,196.6953 Q434.7188,196.5625 434.7188,196.2969 L434.7188,186.8125 Q434.7188,186.5469 434.5859,186.4141 Q434.4531,186.2813 434.125,186.2813 L432.5938,186.2813 Z &quot;/&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;12&quot; font-style=&quot;italic&quot; lengthAdjust=&quot;spacingAndGlyphs&quot; textLength=&quot;20&quot; x=&quot;450&quot; y=&quot;197.5576&quot;&gt;Toy&lt;/text&gt;&lt;line style=&quot;stroke: #A80036; stroke-width: 1.5;&quot; x1=&quot;422&quot; x2=&quot;472&quot; y1=&quot;208&quot; y2=&quot;208&quot;/&gt;&lt;line style=&quot;stroke: #A80036; stroke-width: 1.5;&quot; x1=&quot;422&quot; x2=&quot;472&quot; y1=&quot;216&quot; y2=&quot;216&quot;/&gt;&lt;rect fill=&quot;#FEFECE&quot; filter=&quot;url(#f1)&quot; height=&quot;48&quot; style=&quot;stroke: #A80036; stroke-width: 1.5;&quot; width=&quot;61&quot; x=&quot;530.75&quot; y=&quot;23&quot;/&gt;&lt;ellipse cx=&quot;545.75&quot; cy=&quot;39&quot; fill=&quot;#B4A7E5&quot; rx=&quot;11&quot; ry=&quot;11&quot; style=&quot;stroke: #A80036; stroke-width: 1.0;&quot;/&gt;&lt;path d=&quot;M542.3438,33.2813 L542.3438,32.875 L548.6563,32.875 L548.6563,33.2813 L546.125,33.2813 Q546.125,33.2813 546.2734,33.4141 Q546.4219,33.5469 546.4219,33.8125 L546.4219,43.2969 Q546.4219,43.5625 546.6406,43.6953 Q546.8594,43.8281 546.8594,43.8281 L548.6563,43.8281 L548.6563,44.2344 L542.3438,44.2344 L542.3438,43.8281 L543.875,43.8281 Q544.2031,43.8281 544.3359,43.6953 Q544.4688,43.5625 544.4688,43.2969 L544.4688,33.8125 Q544.4688,33.5469 544.3359,33.4141 Q544.2031,33.2813 543.875,33.2813 L542.3438,33.2813 Z &quot;/&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;12&quot; font-style=&quot;italic&quot; lengthAdjust=&quot;spacingAndGlyphs&quot; textLength=&quot;29&quot; x=&quot;559.75&quot; y=&quot;44.5576&quot;&gt;Cash&lt;/text&gt;&lt;line style=&quot;stroke: #A80036; stroke-width: 1.5;&quot; x1=&quot;531.75&quot; x2=&quot;590.75&quot; y1=&quot;55&quot; y2=&quot;55&quot;/&gt;&lt;line style=&quot;stroke: #A80036; stroke-width: 1.5;&quot; x1=&quot;531.75&quot; x2=&quot;590.75&quot; y1=&quot;63&quot; y2=&quot;63&quot;/&gt;&lt;rect fill=&quot;#FEFECE&quot; filter=&quot;url(#f1)&quot; height=&quot;48&quot; style=&quot;stroke: #A80036; stroke-width: 1.5;&quot; width=&quot;97&quot; x=&quot;397.75&quot; y=&quot;337&quot;/&gt;&lt;ellipse cx=&quot;412.75&quot; cy=&quot;353&quot; fill=&quot;#A9DCDF&quot; rx=&quot;11&quot; ry=&quot;11&quot; style=&quot;stroke: #A80036; stroke-width: 1.0;&quot;/&gt;&lt;path d=&quot;M413.125,352.9844 L411.1406,352.9844 L410.5469,355.5 Q410.4063,356.1094 410.5391,356.4688 Q410.6719,356.8281 410.6719,356.8281 L411.3438,356.8281 L411.3438,357.2344 L407.8906,357.2344 L407.8906,356.8281 L408.0781,356.8281 Q408.3438,356.8281 408.5469,356.6641 Q408.75,356.5 408.8125,356.1094 L411.4063,345.9375 L413.2813,345.3281 L415.9219,356.1094 Q416.0625,356.5 416.2578,356.6641 Q416.4531,356.8281 416.4531,356.8281 L416.9219,356.8281 L416.9219,357.2344 L413.0625,357.2344 L413.0625,356.8281 L413.3281,356.8281 Q413.7344,356.8281 413.8281,356.6016 Q413.9219,356.375 413.7969,355.9063 L413.125,352.9844 Z M411.7344,347.0781 L411.7344,347.0781 L411.2813,352.5781 L413.0625,352.5781 L411.7344,347.0781 Z &quot;/&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;12&quot; font-style=&quot;italic&quot; lengthAdjust=&quot;spacingAndGlyphs&quot; textLength=&quot;65&quot; x=&quot;426.75&quot; y=&quot;358.5576&quot;&gt;AbstractToy&lt;/text&gt;&lt;line style=&quot;stroke: #A80036; stroke-width: 1.5;&quot; x1=&quot;398.75&quot; x2=&quot;493.75&quot; y1=&quot;369&quot; y2=&quot;369&quot;/&gt;&lt;line style=&quot;stroke: #A80036; stroke-width: 1.5;&quot; x1=&quot;398.75&quot; x2=&quot;493.75&quot; y1=&quot;377&quot; y2=&quot;377&quot;/&gt;&lt;rect fill=&quot;#FEFECE&quot; filter=&quot;url(#f1)&quot; height=&quot;48&quot; style=&quot;stroke: #A80036; stroke-width: 1.5;&quot; width=&quot;106&quot; x=&quot;508.5&quot; y=&quot;176&quot;/&gt;&lt;ellipse cx=&quot;523.5&quot; cy=&quot;192&quot; fill=&quot;#A9DCDF&quot; rx=&quot;11&quot; ry=&quot;11&quot; style=&quot;stroke: #A80036; stroke-width: 1.0;&quot;/&gt;&lt;path d=&quot;M523.875,191.9844 L521.8906,191.9844 L521.2969,194.5 Q521.1563,195.1094 521.2891,195.4688 Q521.4219,195.8281 521.4219,195.8281 L522.0938,195.8281 L522.0938,196.2344 L518.6406,196.2344 L518.6406,195.8281 L518.8281,195.8281 Q519.0938,195.8281 519.2969,195.6641 Q519.5,195.5 519.5625,195.1094 L522.1563,184.9375 L524.0313,184.3281 L526.6719,195.1094 Q526.8125,195.5 527.0078,195.6641 Q527.2031,195.8281 527.2031,195.8281 L527.6719,195.8281 L527.6719,196.2344 L523.8125,196.2344 L523.8125,195.8281 L524.0781,195.8281 Q524.4844,195.8281 524.5781,195.6016 Q524.6719,195.375 524.5469,194.9063 L523.875,191.9844 Z M522.4844,186.0781 L522.4844,186.0781 L522.0313,191.5781 L523.8125,191.5781 L522.4844,186.0781 Z &quot;/&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;12&quot; font-style=&quot;italic&quot; lengthAdjust=&quot;spacingAndGlyphs&quot; textLength=&quot;74&quot; x=&quot;537.5&quot; y=&quot;197.5576&quot;&gt;AbstractCash&lt;/text&gt;&lt;line style=&quot;stroke: #A80036; stroke-width: 1.5;&quot; x1=&quot;509.5&quot; x2=&quot;613.5&quot; y1=&quot;208&quot; y2=&quot;208&quot;/&gt;&lt;line style=&quot;stroke: #A80036; stroke-width: 1.5;&quot; x1=&quot;509.5&quot; x2=&quot;613.5&quot; y1=&quot;216&quot; y2=&quot;216&quot;/&gt;&lt;rect fill=&quot;#FEFECE&quot; filter=&quot;url(#f1)&quot; height=&quot;48&quot; style=&quot;stroke: #A80036; stroke-width: 1.5;&quot; width=&quot;58&quot; x=&quot;530.5&quot; y=&quot;337&quot;/&gt;&lt;ellipse cx=&quot;545.5&quot; cy=&quot;353&quot; fill=&quot;#ADD1B2&quot; rx=&quot;11&quot; ry=&quot;11&quot; style=&quot;stroke: #A80036; stroke-width: 1.0;&quot;/&gt;&lt;path d=&quot;M544.0781,358.3594 Q542.2188,358.3594 541.125,356.9688 Q540.0313,355.5781 540.0313,352.5938 Q540.0313,350.0625 541.1953,348.4063 Q542.3594,346.75 544.3438,346.75 Q545.8125,346.75 546.2813,346.9141 Q546.75,347.0781 546.75,347.0781 Q546.75,347.0781 546.75,347.0078 Q546.75,346.9375 547.3594,346.0156 L548.4063,349.6719 L547.0781,350.0781 Q546.6094,348.5313 545.9453,347.8672 Q545.2813,347.2031 544.2188,347.2031 Q543.8281,347.2031 543.0625,348.7344 Q542.2969,350.2656 542.2969,352.5156 Q542.2969,354.9844 542.9609,356.375 Q543.625,357.7656 544.1563,357.7656 Q545.2188,357.7656 545.9766,357 Q546.7344,356.2344 547.0781,354.5781 L548.4063,355.1719 Q548.0781,356.5781 547.1797,357.4688 Q546.2813,358.3594 544.0781,358.3594 Z &quot;/&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;12&quot; lengthAdjust=&quot;spacingAndGlyphs&quot; textLength=&quot;26&quot; x=&quot;559.5&quot; y=&quot;358.5576&quot;&gt;RMB&lt;/text&gt;&lt;line style=&quot;stroke: #A80036; stroke-width: 1.5;&quot; x1=&quot;531.5&quot; x2=&quot;587.5&quot; y1=&quot;369&quot; y2=&quot;369&quot;/&gt;&lt;line style=&quot;stroke: #A80036; stroke-width: 1.5;&quot; x1=&quot;531.5&quot; x2=&quot;587.5&quot; y1=&quot;377&quot; y2=&quot;377&quot;/&gt;&lt;rect fill=&quot;#FEFECE&quot; filter=&quot;url(#f1)&quot; height=&quot;48&quot; style=&quot;stroke: #A80036; stroke-width: 1.5;&quot; width=&quot;110&quot; x=&quot;404&quot; y=&quot;483&quot;/&gt;&lt;ellipse cx=&quot;419&quot; cy=&quot;499&quot; fill=&quot;#ADD1B2&quot; rx=&quot;11&quot; ry=&quot;11&quot; style=&quot;stroke: #A80036; stroke-width: 1.0;&quot;/&gt;&lt;path d=&quot;M417.5781,504.3594 Q415.7188,504.3594 414.625,502.9688 Q413.5313,501.5781 413.5313,498.5938 Q413.5313,496.0625 414.6953,494.4063 Q415.8594,492.75 417.8438,492.75 Q419.3125,492.75 419.7813,492.9141 Q420.25,493.0781 420.25,493.0781 Q420.25,493.0781 420.25,493.0078 Q420.25,492.9375 420.8594,492.0156 L421.9063,495.6719 L420.5781,496.0781 Q420.1094,494.5313 419.4453,493.8672 Q418.7813,493.2031 417.7188,493.2031 Q417.3281,493.2031 416.5625,494.7344 Q415.7969,496.2656 415.7969,498.5156 Q415.7969,500.9844 416.4609,502.375 Q417.125,503.7656 417.6563,503.7656 Q418.7188,503.7656 419.4766,503 Q420.2344,502.2344 420.5781,500.5781 L421.9063,501.1719 Q421.5781,502.5781 420.6797,503.4688 Q419.7813,504.3594 417.5781,504.3594 Z &quot;/&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;12&quot; lengthAdjust=&quot;spacingAndGlyphs&quot; textLength=&quot;78&quot; x=&quot;433&quot; y=&quot;504.5576&quot;&gt;ManhattanBall&lt;/text&gt;&lt;line style=&quot;stroke: #A80036; stroke-width: 1.5;&quot; x1=&quot;405&quot; x2=&quot;513&quot; y1=&quot;515&quot; y2=&quot;515&quot;/&gt;&lt;line style=&quot;stroke: #A80036; stroke-width: 1.5;&quot; x1=&quot;405&quot; x2=&quot;513&quot; y1=&quot;523&quot; y2=&quot;523&quot;/&gt;&lt;rect fill=&quot;#FEFECE&quot; filter=&quot;url(#f1)&quot; height=&quot;48&quot; style=&quot;stroke: #A80036; stroke-width: 1.5;&quot; width=&quot;95&quot; x=&quot;273.75&quot; y=&quot;483&quot;/&gt;&lt;ellipse cx=&quot;288.75&quot; cy=&quot;499&quot; fill=&quot;#ADD1B2&quot; rx=&quot;11&quot; ry=&quot;11&quot; style=&quot;stroke: #A80036; stroke-width: 1.0;&quot;/&gt;&lt;path d=&quot;M287.3281,504.3594 Q285.4688,504.3594 284.375,502.9688 Q283.2813,501.5781 283.2813,498.5938 Q283.2813,496.0625 284.4453,494.4063 Q285.6094,492.75 287.5938,492.75 Q289.0625,492.75 289.5313,492.9141 Q290,493.0781 290,493.0781 Q290,493.0781 290,493.0078 Q290,492.9375 290.6094,492.0156 L291.6563,495.6719 L290.3281,496.0781 Q289.8594,494.5313 289.1953,493.8672 Q288.5313,493.2031 287.4688,493.2031 Q287.0781,493.2031 286.3125,494.7344 Q285.5469,496.2656 285.5469,498.5156 Q285.5469,500.9844 286.2109,502.375 Q286.875,503.7656 287.4063,503.7656 Q288.4688,503.7656 289.2266,503 Q289.9844,502.2344 290.3281,500.5781 L291.6563,501.1719 Q291.3281,502.5781 290.4297,503.4688 Q289.5313,504.3594 287.3281,504.3594 Z &quot;/&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;12&quot; lengthAdjust=&quot;spacingAndGlyphs&quot; textLength=&quot;63&quot; x=&quot;302.75&quot; y=&quot;504.5576&quot;&gt;FisherPrice&lt;/text&gt;&lt;line style=&quot;stroke: #A80036; stroke-width: 1.5;&quot; x1=&quot;274.75&quot; x2=&quot;367.75&quot; y1=&quot;515&quot; y2=&quot;515&quot;/&gt;&lt;line style=&quot;stroke: #A80036; stroke-width: 1.5;&quot; x1=&quot;274.75&quot; x2=&quot;367.75&quot; y1=&quot;523&quot; y2=&quot;523&quot;/&gt;&lt;rect fill=&quot;#FEFECE&quot; filter=&quot;url(#f1)&quot; height=&quot;78.0459&quot; style=&quot;stroke: #A80036; stroke-width: 1.5;&quot; width=&quot;85&quot; x=&quot;20.75&quot; y=&quot;322&quot;/&gt;&lt;ellipse cx=&quot;53.75&quot; cy=&quot;338&quot; fill=&quot;#ADD1B2&quot; rx=&quot;11&quot; ry=&quot;11&quot; style=&quot;stroke: #A80036; stroke-width: 1.0;&quot;/&gt;&lt;path d=&quot;M52.3281,343.3594 Q50.4688,343.3594 49.375,341.9688 Q48.2813,340.5781 48.2813,337.5938 Q48.2813,335.0625 49.4453,333.4063 Q50.6094,331.75 52.5938,331.75 Q54.0625,331.75 54.5313,331.9141 Q55,332.0781 55,332.0781 Q55,332.0781 55,332.0078 Q55,331.9375 55.6094,331.0156 L56.6563,334.6719 L55.3281,335.0781 Q54.8594,333.5313 54.1953,332.8672 Q53.5313,332.2031 52.4688,332.2031 Q52.0781,332.2031 51.3125,333.7344 Q50.5469,335.2656 50.5469,337.5156 Q50.5469,339.9844 51.2109,341.375 Q51.875,342.7656 52.4063,342.7656 Q53.4688,342.7656 54.2266,342 Q54.9844,341.2344 55.3281,339.5781 L56.6563,340.1719 Q56.3281,341.5781 55.4297,342.4688 Q54.5313,343.3594 52.3281,343.3594 Z &quot;/&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;12&quot; lengthAdjust=&quot;spacingAndGlyphs&quot; textLength=&quot;13&quot; x=&quot;71.75&quot; y=&quot;343.5576&quot;&gt;Ivy&lt;/text&gt;&lt;line style=&quot;stroke: #A80036; stroke-width: 1.5;&quot; x1=&quot;21.75&quot; x2=&quot;104.75&quot; y1=&quot;354&quot; y2=&quot;354&quot;/&gt;&lt;line style=&quot;stroke: #A80036; stroke-width: 1.5;&quot; x1=&quot;21.75&quot; x2=&quot;104.75&quot; y1=&quot;362&quot; y2=&quot;362&quot;/&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;11&quot; lengthAdjust=&quot;spacingAndGlyphs&quot; textLength=&quot;41&quot; x=&quot;26.75&quot; y=&quot;378.606&quot;&gt;taobao()&lt;/text&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;11&quot; lengthAdjust=&quot;spacingAndGlyphs&quot; textLength=&quot;73&quot; x=&quot;26.75&quot; y=&quot;393.6289&quot;&gt;watch_movie()&lt;/text&gt;&lt;rect fill=&quot;#FEFECE&quot; filter=&quot;url(#f1)&quot; height=&quot;78.0459&quot; style=&quot;stroke: #A80036; stroke-width: 1.5;&quot; width=&quot;66&quot; x=&quot;172&quot; y=&quot;468&quot;/&gt;&lt;ellipse cx=&quot;194.2&quot; cy=&quot;484&quot; fill=&quot;#ADD1B2&quot; rx=&quot;11&quot; ry=&quot;11&quot; style=&quot;stroke: #A80036; stroke-width: 1.0;&quot;/&gt;&lt;path d=&quot;M192.7781,489.3594 Q190.9188,489.3594 189.825,487.9688 Q188.7313,486.5781 188.7313,483.5938 Q188.7313,481.0625 189.8953,479.4063 Q191.0594,477.75 193.0438,477.75 Q194.5125,477.75 194.9813,477.9141 Q195.45,478.0781 195.45,478.0781 Q195.45,478.0781 195.45,478.0078 Q195.45,477.9375 196.0594,477.0156 L197.1063,480.6719 L195.7781,481.0781 Q195.3094,479.5313 194.6453,478.8672 Q193.9813,478.2031 192.9188,478.2031 Q192.5281,478.2031 191.7625,479.7344 Q190.9969,481.2656 190.9969,483.5156 Q190.9969,485.9844 191.6609,487.375 Q192.325,488.7656 192.8563,488.7656 Q193.9188,488.7656 194.6766,488 Q195.4344,487.2344 195.7781,485.5781 L197.1063,486.1719 Q196.7781,487.5781 195.8797,488.4688 Q194.9813,489.3594 192.7781,489.3594 Z &quot;/&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;12&quot; lengthAdjust=&quot;spacingAndGlyphs&quot; textLength=&quot;18&quot; x=&quot;209.8&quot; y=&quot;489.5576&quot;&gt;Vivi&lt;/text&gt;&lt;line style=&quot;stroke: #A80036; stroke-width: 1.5;&quot; x1=&quot;173&quot; x2=&quot;237&quot; y1=&quot;500&quot; y2=&quot;500&quot;/&gt;&lt;line style=&quot;stroke: #A80036; stroke-width: 1.5;&quot; x1=&quot;173&quot; x2=&quot;237&quot; y1=&quot;508&quot; y2=&quot;508&quot;/&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;11&quot; lengthAdjust=&quot;spacingAndGlyphs&quot; textLength=&quot;34&quot; x=&quot;178&quot; y=&quot;524.606&quot;&gt;sleep()&lt;/text&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;11&quot; lengthAdjust=&quot;spacingAndGlyphs&quot; textLength=&quot;54&quot; x=&quot;178&quot; y=&quot;539.6289&quot;&gt;drink_milk()&lt;/text&gt;&lt;rect fill=&quot;#FEFECE&quot; filter=&quot;url(#f1)&quot; height=&quot;93.0688&quot; style=&quot;stroke: #A80036; stroke-width: 1.5;&quot; width=&quot;57&quot; x=&quot;304.75&quot; y=&quot;314.5&quot;/&gt;&lt;ellipse cx=&quot;319.75&quot; cy=&quot;330.5&quot; fill=&quot;#ADD1B2&quot; rx=&quot;11&quot; ry=&quot;11&quot; style=&quot;stroke: #A80036; stroke-width: 1.0;&quot;/&gt;&lt;path d=&quot;M318.3281,335.8594 Q316.4688,335.8594 315.375,334.4688 Q314.2813,333.0781 314.2813,330.0938 Q314.2813,327.5625 315.4453,325.9063 Q316.6094,324.25 318.5938,324.25 Q320.0625,324.25 320.5313,324.4141 Q321,324.5781 321,324.5781 Q321,324.5781 321,324.5078 Q321,324.4375 321.6094,323.5156 L322.6563,327.1719 L321.3281,327.5781 Q320.8594,326.0313 320.1953,325.3672 Q319.5313,324.7031 318.4688,324.7031 Q318.0781,324.7031 317.3125,326.2344 Q316.5469,327.7656 316.5469,330.0156 Q316.5469,332.4844 317.2109,333.875 Q317.875,335.2656 318.4063,335.2656 Q319.4688,335.2656 320.2266,334.5 Q320.9844,333.7344 321.3281,332.0781 L322.6563,332.6719 Q322.3281,334.0781 321.4297,334.9688 Q320.5313,335.8594 318.3281,335.8594 Z &quot;/&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;12&quot; lengthAdjust=&quot;spacingAndGlyphs&quot; textLength=&quot;25&quot; x=&quot;333.75&quot; y=&quot;336.0576&quot;&gt;Kimi&lt;/text&gt;&lt;line style=&quot;stroke: #A80036; stroke-width: 1.5;&quot; x1=&quot;305.75&quot; x2=&quot;360.75&quot; y1=&quot;346.5&quot; y2=&quot;346.5&quot;/&gt;&lt;line style=&quot;stroke: #A80036; stroke-width: 1.5;&quot; x1=&quot;305.75&quot; x2=&quot;360.75&quot; y1=&quot;354.5&quot; y2=&quot;354.5&quot;/&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;11&quot; lengthAdjust=&quot;spacingAndGlyphs&quot; textLength=&quot;31&quot; x=&quot;310.75&quot; y=&quot;371.106&quot;&gt;cook()&lt;/text&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;11&quot; lengthAdjust=&quot;spacingAndGlyphs&quot; textLength=&quot;30&quot; x=&quot;310.75&quot; y=&quot;386.1289&quot;&gt;read()&lt;/text&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;11&quot; lengthAdjust=&quot;spacingAndGlyphs&quot; textLength=&quot;33&quot; x=&quot;310.75&quot; y=&quot;401.1519&quot;&gt;write()&lt;/text&gt;&lt;path d=&quot;M108.145,104.32 C96.3049,129.152 83.0511,156.948 73.9842,175.964 &quot; fill=&quot;none&quot; style=&quot;stroke: #A80036; stroke-width: 1.0;&quot;/&gt;&lt;polygon fill=&quot;none&quot; points=&quot;101.9049,101.144,116.831,86.104,114.542,107.169,101.9049,101.144&quot; style=&quot;stroke: #A80036; stroke-width: 1.0;&quot;/&gt;&lt;path d=&quot;M281.253,96.766 C293.909,123.309 308.979,154.915 318.979,175.887 &quot; fill=&quot;none&quot; style=&quot;stroke: #A80036; stroke-width: 1.0;&quot;/&gt;&lt;polygon fill=&quot;none&quot; points=&quot;274.86,99.623,272.57,78.557,287.497,93.597,274.86,99.623&quot; style=&quot;stroke: #A80036; stroke-width: 1.0;&quot;/&gt;&lt;path d=&quot;M200.705,274.643 C201.836,297.118 202.999,320.221 203.828,336.714 &quot; fill=&quot;none&quot; style=&quot;stroke: #A80036; stroke-width: 1.0;&quot;/&gt;&lt;polygon fill=&quot;none&quot; points=&quot;193.7,274.714,199.686,254.387,207.682,274.01,193.7,274.714&quot; style=&quot;stroke: #A80036; stroke-width: 1.0;&quot;/&gt;&lt;path d=&quot;M446.727,244.437 C446.539,274.271 446.297,312.701 446.146,336.852 &quot; fill=&quot;none&quot; style=&quot;stroke: #A80036; stroke-width: 1.0;&quot;/&gt;&lt;polygon fill=&quot;none&quot; points=&quot;439.729,244.076,446.855,224.12,453.729,244.164,439.729,244.076&quot; style=&quot;stroke: #A80036; stroke-width: 1.0;&quot;/&gt;&lt;path d=&quot;M561,91.499 C561,119.052 561,153.583 561,175.959 &quot; fill=&quot;none&quot; style=&quot;stroke: #A80036; stroke-width: 1.0;&quot;/&gt;&lt;polygon fill=&quot;none&quot; points=&quot;554,91.263,561,71.263,568,91.263,554,91.263&quot; style=&quot;stroke: #A80036; stroke-width: 1.0;&quot;/&gt;&lt;path d=&quot;M158.375,104.93 C163.878,118.331 169.722,132.566 175.155,145.796 &quot; fill=&quot;none&quot; style=&quot;stroke: #A80036; stroke-width: 1.0;&quot;/&gt;&lt;polygon fill=&quot;none&quot; points=&quot;151.766,107.264,150.645,86.104,164.717,101.946,151.766,107.264&quot; style=&quot;stroke: #A80036; stroke-width: 1.0;&quot;/&gt;&lt;path d=&quot;M238.148,97.141 C231.853,112.724 224.866,130.019 218.463,145.869 &quot; fill=&quot;none&quot; style=&quot;stroke: #A80036; stroke-width: 1.0;&quot;/&gt;&lt;polygon fill=&quot;none&quot; points=&quot;231.674,94.479,245.656,78.557,244.655,99.723,231.674,94.479&quot; style=&quot;stroke: #A80036; stroke-width: 1.0;&quot;/&gt;&lt;path d=&quot;M89.3988,165.978 C106.079,147.365 129.378,126.091 155.5,116 C221.212,90.616 407.072,89.893 472.5,116 C502.603,128.012 528.335,155.67 544.168,175.982 &quot; fill=&quot;none&quot; style=&quot;stroke: #A80036; stroke-width: 1.0;&quot;/&gt;&lt;polygon fill=&quot;#A80036&quot; points=&quot;80.8371,175.956,87.7799,174.0073,88.6514,166.849,81.7086,168.7978,80.8371,175.956&quot; style=&quot;stroke: #A80036; stroke-width: 1.0;&quot;/&gt;&lt;path d=&quot;M236.877,327.464 C254.936,310.938 278.983,292.72 304.5,284 C328.052,275.951 337.265,275.079 360.5,284 C387.914,294.525 412.036,318.351 427.608,336.733 &quot; fill=&quot;none&quot; style=&quot;stroke: #A80036; stroke-width: 1.0;&quot;/&gt;&lt;polygon fill=&quot;#A80036&quot; points=&quot;227.23,336.657,234.3331,335.4135,235.9172,328.3786,228.8141,329.622,227.23,336.657&quot; style=&quot;stroke: #A80036; stroke-width: 1.0;&quot;/&gt;&lt;path d=&quot;M560.454,244.437 C560.078,274.271 559.595,312.701 559.291,336.852 &quot; fill=&quot;none&quot; style=&quot;stroke: #A80036; stroke-width: 1.0;&quot;/&gt;&lt;polygon fill=&quot;none&quot; points=&quot;553.458,244.03,560.709,224.12,567.457,244.206,553.458,244.03&quot; style=&quot;stroke: #A80036; stroke-width: 1.0;&quot;/&gt;&lt;path d=&quot;M449.906,405.263 C452.209,430.778 455.032,462.0516 456.917,482.9213 &quot; fill=&quot;none&quot; style=&quot;stroke: #A80036; stroke-width: 1.0;&quot;/&gt;&lt;polygon fill=&quot;none&quot; points=&quot;442.915,405.685,448.089,385.136,456.859,404.426,442.915,405.685&quot; style=&quot;stroke: #A80036; stroke-width: 1.0;&quot;/&gt;&lt;path d=&quot;M412.718,400.341 C389.883,426.647 360.333,460.6883 341.034,482.9213 &quot; fill=&quot;none&quot; style=&quot;stroke: #A80036; stroke-width: 1.0;&quot;/&gt;&lt;polygon fill=&quot;none&quot; points=&quot;407.52,395.651,425.917,385.136,418.092,404.828,407.52,395.651&quot; style=&quot;stroke: #A80036; stroke-width: 1.0;&quot;/&gt;&lt;path d=&quot;M63,244.4 C63,268.598 63,298.462 63,321.774 &quot; fill=&quot;none&quot; style=&quot;stroke: #A80036; stroke-width: 1.0;&quot;/&gt;&lt;polygon fill=&quot;none&quot; points=&quot;56.0001,244.12,63,224.12,70.0001,244.12,56.0001,244.12&quot; style=&quot;stroke: #A80036; stroke-width: 1.0;&quot;/&gt;&lt;path d=&quot;M100.5283,312.118 C111.995,300.738 125.568,290.157 140.5,284 C213.022,254.098 422.294,251.088 493.5,284 C516.919,294.824 535.039,318.607 546.225,336.896 &quot; fill=&quot;none&quot; style=&quot;stroke: #A80036; stroke-width: 1.0;&quot;/&gt;&lt;polygon fill=&quot;#A80036&quot; points=&quot;91.4085,321.786,98.4354,320.1665,99.6431,313.0573,92.6162,314.6768,91.4085,321.786&quot; style=&quot;stroke: #A80036; stroke-width: 1.0;&quot;/&gt;&lt;path d=&quot;M205,405.325 C205,425.193 205,448.5447 205,467.7533 &quot; fill=&quot;none&quot; style=&quot;stroke: #A80036; stroke-width: 1.0;&quot;/&gt;&lt;polygon fill=&quot;none&quot; points=&quot;198,405.136,205,385.136,212,405.136,198,405.136&quot; style=&quot;stroke: #A80036; stroke-width: 1.0;&quot;/&gt;&lt;path d=&quot;M242.916,458.5327 C251.962,450.1666 262.285,442.669 273.5,438 C312.069,421.942 327.883,424.737 367.5,438 C393.913,446.8429 418.802,466.6498 435.934,482.7843 &quot; fill=&quot;none&quot; style=&quot;stroke: #A80036; stroke-width: 1.0;&quot;/&gt;&lt;polygon fill=&quot;#A80036&quot; points=&quot;233.619,467.8591,240.6878,466.4336,242.0907,459.3602,235.0219,460.7858,233.619,467.8591&quot; style=&quot;stroke: #A80036; stroke-width: 1.0;&quot;/&gt;&lt;path d=&quot;M251.161,507 C258.677,507 266.193,507 273.709,507 &quot; fill=&quot;none&quot; style=&quot;stroke: #A80036; stroke-width: 1.0;&quot;/&gt;&lt;polygon fill=&quot;#A80036&quot; points=&quot;238.078,507,244.078,511,250.078,507,244.078,503,238.078,507&quot; style=&quot;stroke: #A80036; stroke-width: 1.0;&quot;/&gt;&lt;path d=&quot;M330.817,244.306 C331.226,265.969 331.721,292.19 332.136,314.188 &quot; fill=&quot;none&quot; style=&quot;stroke: #A80036; stroke-width: 1.0;&quot;/&gt;&lt;polygon fill=&quot;none&quot; points=&quot;323.815,244.248,330.436,224.12,337.812,243.984,323.815,244.248&quot; style=&quot;stroke: #A80036; stroke-width: 1.0;&quot;/&gt;&lt;/g&gt;&lt;/svg&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-sec-2-4&quot; class=&quot;outline-3&quot;&gt;
&lt;h3 id=&quot;sec-2-4&quot;&gt;&lt;span class=&quot;section-number-3&quot;&gt;2.4&lt;/span&gt; Activity Diagram&lt;/h3&gt;
&lt;div class=&quot;outline-text-3&quot; id=&quot;text-2-4&quot;&gt;
&lt;p&gt;
UML 2 activity diagrams are typically used for business process
modeling, for modeling the logic captured by a single use case or
usage scenario, or for modeling the detailed logic of a business
rule.&lt;sup&gt;&lt;a id=&quot;fnr.5&quot; name=&quot;fnr.5&quot; class=&quot;footref&quot; href=&quot;#fn.5&quot;&gt;5&lt;/a&gt;&lt;/sup&gt;
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;

&lt;pre class=&quot;src src-plantuml&quot;&gt;@startuml
title Kimi&apos;s daily life
(*)--&amp;gt; get up/have breakfast
--&amp;gt; read Deutsch/Francais news
if &quot;work day&quot; then
  -left-&amp;gt;[yes] &quot;wait shuttle bus&quot;
  --&amp;gt; &quot;hard working&quot;
  --&amp;gt; &quot;back to home&quot;
else
  -right-&amp;gt;[no] &quot;write article&quot;
  if &quot;Vivi and Ivy wake up&quot; then
    --&amp;gt; [yes] &quot;play with Vivi&quot;
    --&amp;gt; &quot;go out with Vivi and Ivy&quot;
    -left-&amp;gt; &quot;back to home&quot;
  endif
endif
&quot;back to home&quot; --&amp;gt; &quot;give a bath to Vivi&quot;
--&amp;gt; &quot;sleep&quot;
--&amp;gt;(*)
@enduml
&lt;/pre&gt;
&lt;/div&gt;

&lt;div style=&quot;text-align: center;&quot;&gt;
&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;yes&quot;?&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; xmlns:xlink=&quot;http://www.w3.org/1999/xlink&quot; height=&quot;767pt&quot; style=&quot;width:343px;height:767px;&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 343 767&quot; width=&quot;343pt&quot;&gt;&lt;defs&gt;&lt;filter height=&quot;300%&quot; id=&quot;f1&quot; width=&quot;300%&quot; x=&quot;-1&quot; y=&quot;-1&quot;&gt;&lt;feGaussianBlur result=&quot;blurOut&quot; stdDeviation=&quot;2.0&quot;/&gt;&lt;feColorMatrix in=&quot;blurOut&quot; result=&quot;blurOut2&quot; type=&quot;matrix&quot; values=&quot;0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 .4 0&quot;/&gt;&lt;feOffset dx=&quot;4.0&quot; dy=&quot;4.0&quot; in=&quot;blurOut2&quot; result=&quot;blurOut3&quot;/&gt;&lt;feBlend in=&quot;SourceGraphic&quot; in2=&quot;blurOut3&quot; mode=&quot;normal&quot;/&gt;&lt;/filter&gt;&lt;/defs&gt;&lt;g&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;18&quot; lengthAdjust=&quot;spacingAndGlyphs&quot; textLength=&quot;116&quot; x=&quot;118.25&quot; y=&quot;20.6279&quot;&gt;Kimi&apos;s daily life&lt;/text&gt;&lt;ellipse cx=&quot;171.25&quot; cy=&quot;42.583&quot; fill=&quot;#000000&quot; filter=&quot;url(#f1)&quot; rx=&quot;10&quot; ry=&quot;10&quot; style=&quot;stroke: none; stroke-width: 1.0;&quot;/&gt;&lt;rect fill=&quot;#FEFECE&quot; filter=&quot;url(#f1)&quot; height=&quot;36.3887&quot; rx=&quot;12.5&quot; ry=&quot;12.5&quot; style=&quot;stroke: #A80036; stroke-width: 1.5;&quot; width=&quot;137&quot; x=&quot;103&quot; y=&quot;94.583&quot;/&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;12&quot; lengthAdjust=&quot;spacingAndGlyphs&quot; textLength=&quot;117&quot; x=&quot;113&quot; y=&quot;118.335&quot;&gt;get up/have breakfast&lt;/text&gt;&lt;rect fill=&quot;#FEFECE&quot; filter=&quot;url(#f1)&quot; height=&quot;36.3887&quot; rx=&quot;12.5&quot; ry=&quot;12.5&quot; style=&quot;stroke: #A80036; stroke-width: 1.5;&quot; width=&quot;178&quot; x=&quot;82.75&quot; y=&quot;172.583&quot;/&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;12&quot; lengthAdjust=&quot;spacingAndGlyphs&quot; textLength=&quot;158&quot; x=&quot;92.75&quot; y=&quot;196.335&quot;&gt;read Deutsch/Francais news&lt;/text&gt;&lt;polygon fill=&quot;#FEFECE&quot; filter=&quot;url(#f1)&quot; points=&quot;171.25,256.583,183.25,268.583,171.25,280.583,159.25,268.583,171.25,256.583&quot; style=&quot;stroke: #A80036; stroke-width: 1.5;&quot;/&gt;&lt;rect fill=&quot;#FEFECE&quot; filter=&quot;url(#f1)&quot; height=&quot;36.3887&quot; rx=&quot;12.5&quot; ry=&quot;12.5&quot; style=&quot;stroke: #A80036; stroke-width: 1.5;&quot; width=&quot;106&quot; x=&quot;9.75&quot; y=&quot;250.583&quot;/&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;12&quot; lengthAdjust=&quot;spacingAndGlyphs&quot; textLength=&quot;86&quot; x=&quot;19.75&quot; y=&quot;274.335&quot;&gt;wait shuttle bus&lt;/text&gt;&lt;rect fill=&quot;#FEFECE&quot; filter=&quot;url(#f1)&quot; height=&quot;36.3887&quot; rx=&quot;12.5&quot; ry=&quot;12.5&quot; style=&quot;stroke: #A80036; stroke-width: 1.5;&quot; width=&quot;91&quot; x=&quot;17&quot; y=&quot;372.583&quot;/&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;12&quot; lengthAdjust=&quot;spacingAndGlyphs&quot; textLength=&quot;71&quot; x=&quot;27&quot; y=&quot;396.335&quot;&gt;hard working&lt;/text&gt;&lt;rect fill=&quot;#FEFECE&quot; filter=&quot;url(#f1)&quot; height=&quot;36.3887&quot; rx=&quot;12.5&quot; ry=&quot;12.5&quot; style=&quot;stroke: #A80036; stroke-width: 1.5;&quot; width=&quot;94&quot; x=&quot;15.25&quot; y=&quot;506.583&quot;/&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;12&quot; lengthAdjust=&quot;spacingAndGlyphs&quot; textLength=&quot;74&quot; x=&quot;25.25&quot; y=&quot;530.335&quot;&gt;back to home&lt;/text&gt;&lt;rect fill=&quot;#FEFECE&quot; filter=&quot;url(#f1)&quot; height=&quot;36.3887&quot; rx=&quot;12.5&quot; ry=&quot;12.5&quot; style=&quot;stroke: #A80036; stroke-width: 1.5;&quot; width=&quot;82&quot; x=&quot;223.25&quot; y=&quot;250.583&quot;/&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;12&quot; lengthAdjust=&quot;spacingAndGlyphs&quot; textLength=&quot;62&quot; x=&quot;233.25&quot; y=&quot;274.335&quot;&gt;write article&lt;/text&gt;&lt;polygon fill=&quot;#FEFECE&quot; filter=&quot;url(#f1)&quot; points=&quot;264.25,328.583,276.25,340.583,264.25,352.583,252.25,340.583,264.25,328.583&quot; style=&quot;stroke: #A80036; stroke-width: 1.5;&quot;/&gt;&lt;rect fill=&quot;#FEFECE&quot; filter=&quot;url(#f1)&quot; height=&quot;36.3887&quot; rx=&quot;12.5&quot; ry=&quot;12.5&quot; style=&quot;stroke: #A80036; stroke-width: 1.5;&quot; width=&quot;88&quot; x=&quot;220.75&quot; y=&quot;428.583&quot;/&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;12&quot; lengthAdjust=&quot;spacingAndGlyphs&quot; textLength=&quot;68&quot; x=&quot;230.75&quot; y=&quot;452.335&quot;&gt;play with Vivi&lt;/text&gt;&lt;rect fill=&quot;#FEFECE&quot; filter=&quot;url(#f1)&quot; height=&quot;36.3887&quot; rx=&quot;12.5&quot; ry=&quot;12.5&quot; style=&quot;stroke: #A80036; stroke-width: 1.5;&quot; width=&quot;140&quot; x=&quot;194.25&quot; y=&quot;506.583&quot;/&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;12&quot; lengthAdjust=&quot;spacingAndGlyphs&quot; textLength=&quot;120&quot; x=&quot;204.25&quot; y=&quot;530.335&quot;&gt;go out with Vivi and Ivy&lt;/text&gt;&lt;rect fill=&quot;#FEFECE&quot; filter=&quot;url(#f1)&quot; height=&quot;36.3887&quot; rx=&quot;12.5&quot; ry=&quot;12.5&quot; style=&quot;stroke: #A80036; stroke-width: 1.5;&quot; width=&quot;113&quot; x=&quot;6&quot; y=&quot;584.583&quot;/&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;12&quot; lengthAdjust=&quot;spacingAndGlyphs&quot; textLength=&quot;93&quot; x=&quot;16&quot; y=&quot;608.335&quot;&gt;give a bath to Vivi&lt;/text&gt;&lt;rect fill=&quot;#FEFECE&quot; filter=&quot;url(#f1)&quot; height=&quot;36.3887&quot; rx=&quot;12.5&quot; ry=&quot;12.5&quot; style=&quot;stroke: #A80036; stroke-width: 1.5;&quot; width=&quot;51&quot; x=&quot;37&quot; y=&quot;662.583&quot;/&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;12&quot; lengthAdjust=&quot;spacingAndGlyphs&quot; textLength=&quot;31&quot; x=&quot;47&quot; y=&quot;686.335&quot;&gt;sleep&lt;/text&gt;&lt;ellipse cx=&quot;62.25&quot; cy=&quot;750.583&quot; fill=&quot;none&quot; filter=&quot;url(#f1)&quot; rx=&quot;10&quot; ry=&quot;10&quot; style=&quot;stroke: #000000; stroke-width: 1.0;&quot;/&gt;&lt;ellipse cx=&quot;62.75&quot; cy=&quot;751.083&quot; fill=&quot;#000000&quot; rx=&quot;6&quot; ry=&quot;6&quot; style=&quot;stroke: none; stroke-width: 1.0;&quot;/&gt;&lt;path d=&quot;M171.25,52.754 C171.25,62.08 171.25,76.885 171.25,89.31 &quot; fill=&quot;none&quot; style=&quot;stroke: #A80036; stroke-width: 1.0;&quot;/&gt;&lt;polygon fill=&quot;#A80036&quot; points=&quot;171.25,94.466,175.25,85.466,171.25,89.466,167.25,85.466,171.25,94.466&quot; style=&quot;stroke: #A80036; stroke-width: 1.0;&quot;/&gt;&lt;path d=&quot;M171.25,130.829 C171.25,141.615 171.25,155.619 171.25,167.249 &quot; fill=&quot;none&quot; style=&quot;stroke: #A80036; stroke-width: 1.0;&quot;/&gt;&lt;polygon fill=&quot;#A80036&quot; points=&quot;171.25,172.406,175.25,163.406,171.25,167.406,167.25,163.406,171.25,172.406&quot; style=&quot;stroke: #A80036; stroke-width: 1.0;&quot;/&gt;&lt;path d=&quot;M171.25,208.829 C171.25,221.551 171.25,238.751 171.25,251.252 &quot; fill=&quot;none&quot; style=&quot;stroke: #A80036; stroke-width: 1.0;&quot;/&gt;&lt;polygon fill=&quot;#A80036&quot; points=&quot;171.25,256.295,175.25,247.295,171.25,251.295,167.25,247.295,171.25,256.295&quot; style=&quot;stroke: #A80036; stroke-width: 1.0;&quot;/&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;13&quot; lengthAdjust=&quot;spacingAndGlyphs&quot; textLength=&quot;52&quot; x=&quot;123.8639&quot; y=&quot;239.8589&quot;&gt;work day&lt;/text&gt;&lt;path d=&quot;M119.878,268.583 C134.733,268.583 149.278,268.583 159.077,268.583 &quot; fill=&quot;none&quot; style=&quot;stroke: #A80036; stroke-width: 1.0;&quot;/&gt;&lt;polygon fill=&quot;#A80036&quot; points=&quot;114.834,268.583,123.834,272.583,119.834,268.583,123.834,264.583,114.834,268.583&quot; style=&quot;stroke: #A80036; stroke-width: 1.0;&quot;/&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;13&quot; lengthAdjust=&quot;spacingAndGlyphs&quot; textLength=&quot;21&quot; x=&quot;125.75&quot; y=&quot;261.481&quot;&gt;yes&lt;/text&gt;&lt;path d=&quot;M62.25,286.776 C62.25,307.984 62.25,344.081 62.25,367.37 &quot; fill=&quot;none&quot; style=&quot;stroke: #A80036; stroke-width: 1.0;&quot;/&gt;&lt;polygon fill=&quot;#A80036&quot; points=&quot;62.25,372.422,66.25,363.422,62.25,367.422,58.25,363.422,62.25,372.422&quot; style=&quot;stroke: #A80036; stroke-width: 1.0;&quot;/&gt;&lt;path d=&quot;M62.25,408.84 C62.25,432.457 62.25,474.89 62.25,501.009 &quot; fill=&quot;none&quot; style=&quot;stroke: #A80036; stroke-width: 1.0;&quot;/&gt;&lt;polygon fill=&quot;#A80036&quot; points=&quot;62.25,506.322,66.25,497.322,62.25,501.322,58.25,497.322,62.25,506.322&quot; style=&quot;stroke: #A80036; stroke-width: 1.0;&quot;/&gt;&lt;path d=&quot;M183.408,268.583 C192.362,268.583 205.155,268.583 217.929,268.583 &quot; fill=&quot;none&quot; style=&quot;stroke: #A80036; stroke-width: 1.0;&quot;/&gt;&lt;polygon fill=&quot;#A80036&quot; points=&quot;223.006,268.583,214.006,264.583,218.006,268.583,214.006,272.583,223.006,268.583&quot; style=&quot;stroke: #A80036; stroke-width: 1.0;&quot;/&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;13&quot; lengthAdjust=&quot;spacingAndGlyphs&quot; textLength=&quot;14&quot; x=&quot;195.75&quot; y=&quot;261.481&quot;&gt;no&lt;/text&gt;&lt;path d=&quot;M264.25,286.886 C264.25,298.02 264.25,312.396 264.25,323.319 &quot; fill=&quot;none&quot; style=&quot;stroke: #A80036; stroke-width: 1.0;&quot;/&gt;&lt;polygon fill=&quot;#A80036&quot; points=&quot;264.25,328.375,268.25,319.375,264.25,323.375,260.25,319.375,264.25,328.375&quot; style=&quot;stroke: #A80036; stroke-width: 1.0;&quot;/&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;13&quot; lengthAdjust=&quot;spacingAndGlyphs&quot; textLength=&quot;116&quot; x=&quot;128.4438&quot; y=&quot;318.4738&quot;&gt;Vivi and Ivy wake up&lt;/text&gt;&lt;path d=&quot;M264.25,352.713 C264.25,369.498 264.25,401.631 264.25,423.338 &quot; fill=&quot;none&quot; style=&quot;stroke: #A80036; stroke-width: 1.0;&quot;/&gt;&lt;polygon fill=&quot;#A80036&quot; points=&quot;264.25,428.344,268.25,419.344,264.25,423.344,260.25,419.344,264.25,428.344&quot; style=&quot;stroke: #A80036; stroke-width: 1.0;&quot;/&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;13&quot; lengthAdjust=&quot;spacingAndGlyphs&quot; textLength=&quot;21&quot; x=&quot;265.25&quot; y=&quot;396.481&quot;&gt;yes&lt;/text&gt;&lt;path d=&quot;M264.25,464.829 C264.25,475.615 264.25,489.619 264.25,501.249 &quot; fill=&quot;none&quot; style=&quot;stroke: #A80036; stroke-width: 1.0;&quot;/&gt;&lt;polygon fill=&quot;#A80036&quot; points=&quot;264.25,506.406,268.25,497.406,264.25,501.406,260.25,497.406,264.25,506.406&quot; style=&quot;stroke: #A80036; stroke-width: 1.0;&quot;/&gt;&lt;path d=&quot;M114.88,524.583 C141.31,524.583 167.741,524.583 194.171,524.583 &quot; fill=&quot;none&quot; style=&quot;stroke: #A80036; stroke-width: 1.0;&quot;/&gt;&lt;polygon fill=&quot;#A80036&quot; points=&quot;109.594,524.583,118.594,528.583,114.594,524.583,118.594,520.583,109.594,524.583&quot; style=&quot;stroke: #A80036; stroke-width: 1.0;&quot;/&gt;&lt;path d=&quot;M62.25,542.829 C62.25,553.615 62.25,567.619 62.25,579.249 &quot; fill=&quot;none&quot; style=&quot;stroke: #A80036; stroke-width: 1.0;&quot;/&gt;&lt;polygon fill=&quot;#A80036&quot; points=&quot;62.25,584.406,66.25,575.406,62.25,579.406,58.25,575.406,62.25,584.406&quot; style=&quot;stroke: #A80036; stroke-width: 1.0;&quot;/&gt;&lt;path d=&quot;M62.25,620.829 C62.25,631.615 62.25,645.619 62.25,657.249 &quot; fill=&quot;none&quot; style=&quot;stroke: #A80036; stroke-width: 1.0;&quot;/&gt;&lt;polygon fill=&quot;#A80036&quot; points=&quot;62.25,662.4057,66.25,653.4057,62.25,657.4057,58.25,653.4057,62.25,662.4057&quot; style=&quot;stroke: #A80036; stroke-width: 1.0;&quot;/&gt;&lt;path d=&quot;M62.25,698.7423 C62.25,709.9997 62.25,724.5526 62.25,735.2019 &quot; fill=&quot;none&quot; style=&quot;stroke: #A80036; stroke-width: 1.0;&quot;/&gt;&lt;polygon fill=&quot;#A80036&quot; points=&quot;62.25,740.3769,66.25,731.3769,62.25,735.3769,58.25,731.3769,62.25,740.3769&quot; style=&quot;stroke: #A80036; stroke-width: 1.0;&quot;/&gt;&lt;/g&gt;&lt;/svg&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-sec-2-5&quot; class=&quot;outline-3&quot;&gt;
&lt;h3 id=&quot;sec-2-5&quot;&gt;&lt;span class=&quot;section-number-3&quot;&gt;2.5&lt;/span&gt; State Diagram&lt;/h3&gt;
&lt;div class=&quot;outline-text-3&quot; id=&quot;text-2-5&quot;&gt;
&lt;p&gt;
&quot;UML state machine diagrams depict the various states that an
object may be in and the transitions between those states. In fact,
in other modeling languages, it is common for this type of a
diagram to be called a state-transition diagram or even simply a
state diagram.&lt;sup&gt;&lt;a id=&quot;fnr.6&quot; name=&quot;fnr.6&quot; class=&quot;footref&quot; href=&quot;#fn.6&quot;&gt;6&lt;/a&gt;&lt;/sup&gt;&quot;
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;

&lt;pre class=&quot;src src-plantuml&quot;&gt;@startuml
[*] -&amp;gt; Wakeup
Wakeup --&amp;gt; Thinking : earlier than 9:00
Wakeup --&amp;gt; Playing : later than 9:00
Thinking -&amp;gt; Playing : timeout
Thinking -left-&amp;gt; Writing: have idea
Writing -&amp;gt; Playing : timeout

state Writing {
  [*] --&amp;gt; Research : stopped
  Research --&amp;gt; Typing : materials found
  Typing --&amp;gt; Preview : succeeded
  Preview --&amp;gt; Publish : succeeded
  Preview --&amp;gt; Typing : failed
  Typing --&amp;gt; Research : blocked
}

Writing --&amp;gt; [*] : Succeeded / Save Result
Writing --&amp;gt; [*] : Aborted
Playing --&amp;gt; [*] : Tired
@enduml
&lt;/pre&gt;
&lt;/div&gt;

&lt;div style=&quot;text-align: center;&quot;&gt;
&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;yes&quot;?&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; xmlns:xlink=&quot;http://www.w3.org/1999/xlink&quot; height=&quot;747pt&quot; style=&quot;width:521px;height:747px;&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 521 747&quot; width=&quot;521pt&quot;&gt;&lt;defs&gt;&lt;filter height=&quot;300%&quot; id=&quot;f1&quot; width=&quot;300%&quot; x=&quot;-1&quot; y=&quot;-1&quot;&gt;&lt;feGaussianBlur result=&quot;blurOut&quot; stdDeviation=&quot;2.0&quot;/&gt;&lt;feColorMatrix in=&quot;blurOut&quot; result=&quot;blurOut2&quot; type=&quot;matrix&quot; values=&quot;0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 .4 0&quot;/&gt;&lt;feOffset dx=&quot;4.0&quot; dy=&quot;4.0&quot; in=&quot;blurOut2&quot; result=&quot;blurOut3&quot;/&gt;&lt;feBlend in=&quot;SourceGraphic&quot; in2=&quot;blurOut3&quot; mode=&quot;normal&quot;/&gt;&lt;/filter&gt;&lt;/defs&gt;&lt;g&gt;&lt;ellipse cx=&quot;284&quot; cy=&quot;33&quot; fill=&quot;#000000&quot; filter=&quot;url(#f1)&quot; rx=&quot;10&quot; ry=&quot;10&quot; style=&quot;stroke: none; stroke-width: 1.0;&quot;/&gt;&lt;rect fill=&quot;#FEFECE&quot; filter=&quot;url(#f1)&quot; height=&quot;50&quot; rx=&quot;12.5&quot; ry=&quot;12.5&quot; style=&quot;stroke: #A80036; stroke-width: 1.5;&quot; width=&quot;72&quot; x=&quot;364&quot; y=&quot;8&quot;/&gt;&lt;line style=&quot;stroke: #A80036; stroke-width: 1.5;&quot; x1=&quot;364&quot; x2=&quot;436&quot; y1=&quot;37.1201&quot; y2=&quot;37.1201&quot;/&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;14&quot; lengthAdjust=&quot;spacingAndGlyphs&quot; textLength=&quot;52&quot; x=&quot;374&quot; y=&quot;29.0439&quot;&gt;Wakeup&lt;/text&gt;&lt;rect fill=&quot;#FEFECE&quot; filter=&quot;url(#f1)&quot; height=&quot;50&quot; rx=&quot;12.5&quot; ry=&quot;12.5&quot; style=&quot;stroke: #A80036; stroke-width: 1.5;&quot; width=&quot;74&quot; x=&quot;286&quot; y=&quot;364&quot;/&gt;&lt;line style=&quot;stroke: #A80036; stroke-width: 1.5;&quot; x1=&quot;286&quot; x2=&quot;360&quot; y1=&quot;393.1201&quot; y2=&quot;393.1201&quot;/&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;14&quot; lengthAdjust=&quot;spacingAndGlyphs&quot; textLength=&quot;54&quot; x=&quot;296&quot; y=&quot;385.0439&quot;&gt;Thinking&lt;/text&gt;&lt;rect fill=&quot;#FEFECE&quot; filter=&quot;url(#f1)&quot; height=&quot;50&quot; rx=&quot;12.5&quot; ry=&quot;12.5&quot; style=&quot;stroke: #A80036; stroke-width: 1.5;&quot; width=&quot;66&quot; x=&quot;441&quot; y=&quot;364&quot;/&gt;&lt;line style=&quot;stroke: #A80036; stroke-width: 1.5;&quot; x1=&quot;441&quot; x2=&quot;507&quot; y1=&quot;393.1201&quot; y2=&quot;393.1201&quot;/&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;14&quot; lengthAdjust=&quot;spacingAndGlyphs&quot; textLength=&quot;46&quot; x=&quot;451&quot; y=&quot;385.0439&quot;&gt;Playing&lt;/text&gt;&lt;ellipse cx=&quot;289&quot; cy=&quot;730&quot; fill=&quot;none&quot; filter=&quot;url(#f1)&quot; rx=&quot;10&quot; ry=&quot;10&quot; style=&quot;stroke: #000000; stroke-width: 1.0;&quot;/&gt;&lt;ellipse cx=&quot;289.5&quot; cy=&quot;730.5&quot; fill=&quot;#000000&quot; rx=&quot;6&quot; ry=&quot;6&quot; style=&quot;stroke: none; stroke-width: 1.0;&quot;/&gt;&lt;rect fill=&quot;#FEFECE&quot; filter=&quot;url(#f1)&quot; height=&quot;501.1201&quot; rx=&quot;12.5&quot; ry=&quot;12.5&quot; style=&quot;stroke: #A80036; stroke-width: 1.5;&quot; width=&quot;188&quot; x=&quot;6&quot; y=&quot;138.5&quot;/&gt;&lt;rect fill=&quot;#FFFFFF&quot; height=&quot;466&quot; rx=&quot;12.5&quot; ry=&quot;12.5&quot; style=&quot;stroke: #FFFFFF; stroke-width: 1.0;&quot; width=&quot;182&quot; x=&quot;9&quot; y=&quot;170.6201&quot;/&gt;&lt;line style=&quot;stroke: #A80036; stroke-width: 1.5;&quot; x1=&quot;6&quot; x2=&quot;194&quot; y1=&quot;167.6201&quot; y2=&quot;167.6201&quot;/&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;14&quot; lengthAdjust=&quot;spacingAndGlyphs&quot; textLength=&quot;44&quot; x=&quot;78&quot; y=&quot;159.5439&quot;&gt;Writing&lt;/text&gt;&lt;ellipse cx=&quot;75.7067&quot; cy=&quot;190.6201&quot; fill=&quot;#000000&quot; filter=&quot;url(#f1)&quot; rx=&quot;10&quot; ry=&quot;10&quot; style=&quot;stroke: none; stroke-width: 1.0;&quot;/&gt;&lt;rect fill=&quot;#FEFECE&quot; filter=&quot;url(#f1)&quot; height=&quot;50&quot; rx=&quot;12.5&quot; ry=&quot;12.5&quot; style=&quot;stroke: #A80036; stroke-width: 1.5;&quot; width=&quot;81&quot; x=&quot;35.4567&quot; y=&quot;256.6201&quot;/&gt;&lt;line style=&quot;stroke: #A80036; stroke-width: 1.5;&quot; x1=&quot;35.4567&quot; x2=&quot;116.4567&quot; y1=&quot;285.7402&quot; y2=&quot;285.7402&quot;/&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;14&quot; lengthAdjust=&quot;spacingAndGlyphs&quot; textLength=&quot;61&quot; x=&quot;45.4567&quot; y=&quot;277.6641&quot;&gt;Research&lt;/text&gt;&lt;rect fill=&quot;#FEFECE&quot; filter=&quot;url(#f1)&quot; height=&quot;50&quot; rx=&quot;12.5&quot; ry=&quot;12.5&quot; style=&quot;stroke: #A80036; stroke-width: 1.5;&quot; width=&quot;63&quot; x=&quot;44.4567&quot; y=&quot;362.6201&quot;/&gt;&lt;line style=&quot;stroke: #A80036; stroke-width: 1.5;&quot; x1=&quot;44.4567&quot; x2=&quot;107.4567&quot; y1=&quot;391.7402&quot; y2=&quot;391.7402&quot;/&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;14&quot; lengthAdjust=&quot;spacingAndGlyphs&quot; textLength=&quot;43&quot; x=&quot;54.4567&quot; y=&quot;383.6641&quot;&gt;Typing&lt;/text&gt;&lt;rect fill=&quot;#FEFECE&quot; filter=&quot;url(#f1)&quot; height=&quot;50&quot; rx=&quot;12.5&quot; ry=&quot;12.5&quot; style=&quot;stroke: #A80036; stroke-width: 1.5;&quot; width=&quot;69&quot; x=&quot;41.4567&quot; y=&quot;468.6201&quot;/&gt;&lt;line style=&quot;stroke: #A80036; stroke-width: 1.5;&quot; x1=&quot;41.4567&quot; x2=&quot;110.4567&quot; y1=&quot;497.7402&quot; y2=&quot;497.7402&quot;/&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;14&quot; lengthAdjust=&quot;spacingAndGlyphs&quot; textLength=&quot;49&quot; x=&quot;51.4567&quot; y=&quot;489.6641&quot;&gt;Preview&lt;/text&gt;&lt;rect fill=&quot;#FEFECE&quot; filter=&quot;url(#f1)&quot; height=&quot;50&quot; rx=&quot;12.5&quot; ry=&quot;12.5&quot; style=&quot;stroke: #A80036; stroke-width: 1.5;&quot; width=&quot;66&quot; x=&quot;42.7067&quot; y=&quot;574.6201&quot;/&gt;&lt;line style=&quot;stroke: #A80036; stroke-width: 1.5;&quot; x1=&quot;42.7067&quot; x2=&quot;108.7067&quot; y1=&quot;603.7402&quot; y2=&quot;603.7402&quot;/&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;14&quot; lengthAdjust=&quot;spacingAndGlyphs&quot; textLength=&quot;46&quot; x=&quot;52.7067&quot; y=&quot;595.6641&quot;&gt;Publish&lt;/text&gt;&lt;path d=&quot;M75.7067,200.8091 C75.7067,212.5621 75.7067,233.4861 75.7067,250.9611 &quot; fill=&quot;none&quot; style=&quot;stroke: #A80036; stroke-width: 1.0;&quot;/&gt;&lt;polygon fill=&quot;#A80036&quot; points=&quot;75.7067,256.2601,79.7067,247.2601,75.7067,251.2601,71.7067,247.2601,75.7067,256.2601&quot; style=&quot;stroke: #A80036; stroke-width: 1.0;&quot;/&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;13&quot; lengthAdjust=&quot;spacingAndGlyphs&quot; textLength=&quot;46&quot; x=&quot;76.7067&quot; y=&quot;234.5181&quot;&gt;stopped&lt;/text&gt;&lt;path d=&quot;M35.4405,305.3451 C29.086,310.8001 23.4024,317.2291 19.7067,324.6201 C11.7023,340.6291 24.426,355.6101 39.7548,366.8341 &quot; fill=&quot;none&quot; style=&quot;stroke: #A80036; stroke-width: 1.0;&quot;/&gt;&lt;polygon fill=&quot;#A80036&quot; points=&quot;44.1323,369.8981,39.0533,361.4599,40.0362,367.0307,34.4654,368.0137,44.1323,369.8981&quot; style=&quot;stroke: #A80036; stroke-width: 1.0;&quot;/&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;13&quot; lengthAdjust=&quot;spacingAndGlyphs&quot; textLength=&quot;88&quot; x=&quot;20.7067&quot; y=&quot;340.5181&quot;&gt;materials found&lt;/text&gt;&lt;path d=&quot;M44.6526,412.7231 C39.7857,418.0511 35.4608,424.0801 32.7067,430.6201 C29.2568,438.8121 29.2568,442.4281 32.7067,450.6201 C34.8153,455.6271 37.8447,460.3351 41.3331,464.6571 &quot; fill=&quot;none&quot; style=&quot;stroke: #A80036; stroke-width: 1.0;&quot;/&gt;&lt;polygon fill=&quot;#A80036&quot; points=&quot;44.6526,468.5171,41.817,459.0853,41.3924,464.7262,35.7515,464.3016,44.6526,468.5171&quot; style=&quot;stroke: #A80036; stroke-width: 1.0;&quot;/&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;13&quot; lengthAdjust=&quot;spacingAndGlyphs&quot; textLength=&quot;63&quot; x=&quot;33.7067&quot; y=&quot;446.5181&quot;&gt;succeeded&lt;/text&gt;&lt;path d=&quot;M75.7067,518.7411 C75.7067,533.7284 75.7067,553.1023 75.7067,569.0165 &quot; fill=&quot;none&quot; style=&quot;stroke: #A80036; stroke-width: 1.0;&quot;/&gt;&lt;polygon fill=&quot;#A80036&quot; points=&quot;75.7067,574.2696,79.7067,565.2696,75.7067,569.2696,71.7067,565.2696,75.7067,574.2696&quot; style=&quot;stroke: #A80036; stroke-width: 1.0;&quot;/&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;13&quot; lengthAdjust=&quot;spacingAndGlyphs&quot; textLength=&quot;63&quot; x=&quot;76.7067&quot; y=&quot;552.5181&quot;&gt;succeeded&lt;/text&gt;&lt;path d=&quot;M91.506,468.6051 C94.4771,462.9291 97.1405,456.7411 98.7067,450.6201 C100.9102,442.0091 100.9102,439.2311 98.7067,430.6201 C97.5565,426.1251 95.8146,421.5931 93.7936,417.2551 &quot; fill=&quot;none&quot; style=&quot;stroke: #A80036; stroke-width: 1.0;&quot;/&gt;&lt;polygon fill=&quot;#A80036&quot; points=&quot;91.506,412.6351,91.9146,422.4755,93.7245,417.116,99.084,418.9259,91.506,412.6351&quot; style=&quot;stroke: #A80036; stroke-width: 1.0;&quot;/&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;13&quot; lengthAdjust=&quot;spacingAndGlyphs&quot; textLength=&quot;30&quot; x=&quot;100.7067&quot; y=&quot;446.5181&quot;&gt;failed&lt;/text&gt;&lt;path d=&quot;M100.7051,362.2171 C104.8031,356.8381 108.4449,350.8671 110.7067,344.6201 C113.7327,336.2621 113.7327,332.9781 110.7067,324.6201 C109.0103,319.9351 106.5377,315.4041 103.6786,311.1631 &quot; fill=&quot;none&quot; style=&quot;stroke: #A80036; stroke-width: 1.0;&quot;/&gt;&lt;polygon fill=&quot;#A80036&quot; points=&quot;100.7051,307.0231,102.7069,316.6664,103.6221,311.084,109.2044,311.9992,100.7051,307.0231&quot; style=&quot;stroke: #A80036; stroke-width: 1.0;&quot;/&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;13&quot; lengthAdjust=&quot;spacingAndGlyphs&quot; textLength=&quot;45&quot; x=&quot;113.7067&quot; y=&quot;340.5181&quot;&gt;blocked&lt;/text&gt;&lt;path d=&quot;M294.422,33 C315.803,33 337.184,33 358.565,33 &quot; fill=&quot;none&quot; style=&quot;stroke: #A80036; stroke-width: 1.0;&quot;/&gt;&lt;polygon fill=&quot;#A80036&quot; points=&quot;363.708,33,354.708,29,358.708,33,354.708,37,363.708,33&quot; style=&quot;stroke: #A80036; stroke-width: 1.0;&quot;/&gt;&lt;path d=&quot;M363.953,51.36 C349.765,60.207 334.981,72.428 327,88 C281.107,177.543 302.196,302.766 315.311,358.839 &quot; fill=&quot;none&quot; style=&quot;stroke: #A80036; stroke-width: 1.0;&quot;/&gt;&lt;polygon fill=&quot;#A80036&quot; points=&quot;316.475,363.724,318.2809,354.0421,315.3165,358.8601,310.4986,355.8957,316.475,363.724&quot; style=&quot;stroke: #A80036; stroke-width: 1.0;&quot;/&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;13&quot; lengthAdjust=&quot;spacingAndGlyphs&quot; textLength=&quot;93&quot; x=&quot;328&quot; y=&quot;103.8979&quot;&gt;earlier than 9:00&lt;/text&gt;&lt;path d=&quot;M416.421,58.064 C421.869,67.094 427.444,77.677 431,88 C463.871,183.42 471.624,304.271 473.445,358.874 &quot; fill=&quot;none&quot; style=&quot;stroke: #A80036; stroke-width: 1.0;&quot;/&gt;&lt;polygon fill=&quot;#A80036&quot; points=&quot;473.604,363.948,477.3218,354.8278,473.4483,358.9504,469.3257,355.0769,473.604,363.948&quot; style=&quot;stroke: #A80036; stroke-width: 1.0;&quot;/&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;13&quot; lengthAdjust=&quot;spacingAndGlyphs&quot; textLength=&quot;83&quot; x=&quot;437&quot; y=&quot;103.8979&quot;&gt;later than 9:00&lt;/text&gt;&lt;path d=&quot;M360.326,389 C383.304,389 412.683,389 435.818,389 &quot; fill=&quot;none&quot; style=&quot;stroke: #A80036; stroke-width: 1.0;&quot;/&gt;&lt;polygon fill=&quot;#A80036&quot; points=&quot;440.954,389,431.954,385,435.954,389,431.954,393,440.954,389&quot; style=&quot;stroke: #A80036; stroke-width: 1.0;&quot;/&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;13&quot; lengthAdjust=&quot;spacingAndGlyphs&quot; textLength=&quot;43&quot; x=&quot;378.5&quot; y=&quot;381.8979&quot;&gt;timeout&lt;/text&gt;&lt;path d=&quot;M199.569,389 C230.307,389 262.269,389 285.965,389 &quot; fill=&quot;none&quot; style=&quot;stroke: #A80036; stroke-width: 1.0;&quot;/&gt;&lt;polygon fill=&quot;#A80036&quot; points=&quot;194.249,389,203.249,393,199.249,389,203.249,385,194.249,389&quot; style=&quot;stroke: #A80036; stroke-width: 1.0;&quot;/&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;13&quot; lengthAdjust=&quot;spacingAndGlyphs&quot; textLength=&quot;54&quot; x=&quot;212.5&quot; y=&quot;381.8979&quot;&gt;have idea&lt;/text&gt;&lt;path d=&quot;M194.037,170.56 C206.444,157.158 220.377,145.339 236,136 C253.548,125.51 261.557,135.787 282,136 C324.674,136.444 343.098,113.442 378,138 C451.003,189.367 468.507,304.154 472.693,358.872 &quot; fill=&quot;none&quot; style=&quot;stroke: #A80036; stroke-width: 1.0;&quot;/&gt;&lt;polygon fill=&quot;#A80036&quot; points=&quot;473.057,363.976,476.4066,354.7142,472.7013,358.9887,468.4268,355.2834,473.057,363.976&quot; style=&quot;stroke: #A80036; stroke-width: 1.0;&quot;/&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;13&quot; lengthAdjust=&quot;spacingAndGlyphs&quot; textLength=&quot;43&quot; x=&quot;237&quot; y=&quot;103.8979&quot;&gt;timeout&lt;/text&gt;&lt;path d=&quot;M70.1608,639.522 C75.9646,657.7461 84.6395,674.8763 97,690 C119.351,717.3476 231.793,725.9905 273.448,728.279 &quot; fill=&quot;none&quot; style=&quot;stroke: #A80036; stroke-width: 1.0;&quot;/&gt;&lt;polygon fill=&quot;#A80036&quot; points=&quot;278.616,728.55,269.8375,724.0849,273.6228,728.2886,269.4192,732.074,278.616,728.55&quot; style=&quot;stroke: #A80036; stroke-width: 1.0;&quot;/&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;13&quot; lengthAdjust=&quot;spacingAndGlyphs&quot; textLength=&quot;146&quot; x=&quot;98&quot; y=&quot;685.8979&quot;&gt;Succeeded / Save Result&lt;/text&gt;&lt;path d=&quot;M194.223,559.003 C230.609,624.267 267.049,689.6281 281.967,716.3858 &quot; fill=&quot;none&quot; style=&quot;stroke: #A80036; stroke-width: 1.0;&quot;/&gt;&lt;polygon fill=&quot;#A80036&quot; points=&quot;284.498,720.9241,283.609,711.1154,282.0632,716.557,276.6216,715.0112,284.498,720.9241&quot; style=&quot;stroke: #A80036; stroke-width: 1.0;&quot;/&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;13&quot; lengthAdjust=&quot;spacingAndGlyphs&quot; textLength=&quot;45&quot; x=&quot;267&quot; y=&quot;685.8979&quot;&gt;Aborted&lt;/text&gt;&lt;path d=&quot;M466.655,414.178 C452.413,459.683 418.825,560.616 378,640 C365.823,663.6781 363.591,670.9392 345,690 C332.147,703.178 314.267,714.726 302.197,721.7683 &quot; fill=&quot;none&quot; style=&quot;stroke: #A80036; stroke-width: 1.0;&quot;/&gt;&lt;polygon fill=&quot;#A80036&quot; points=&quot;297.723,724.3278,307.5213,723.3307,302.063,721.845,303.5487,716.3867,297.723,724.3278&quot; style=&quot;stroke: #A80036; stroke-width: 1.0;&quot;/&gt;&lt;text fill=&quot;#000000&quot; font-family=&quot;sans-serif&quot; font-size=&quot;13&quot; lengthAdjust=&quot;spacingAndGlyphs&quot; textLength=&quot;28&quot; x=&quot;362&quot; y=&quot;685.8979&quot;&gt;Tired&lt;/text&gt;&lt;/g&gt;&lt;/svg&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-sec-2-6&quot; class=&quot;outline-3&quot;&gt;
&lt;h3 id=&quot;sec-2-6&quot;&gt;&lt;span class=&quot;section-number-3&quot;&gt;2.6&lt;/span&gt; Other UML Diagrams&lt;/h3&gt;
&lt;div class=&quot;outline-text-3&quot; id=&quot;text-2-6&quot;&gt;
&lt;p&gt;
In UML 2 there are other diagrams such as Component Diagram and
Objects Diagram which are supported also by PlantUML.
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;footnotes&quot;&gt;
&lt;h2 class=&quot;footnotes&quot;&gt;Footnotes: &lt;/h2&gt;
&lt;div id=&quot;text-footnotes&quot;&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.1&quot; name=&quot;fn.1&quot; class=&quot;footnum&quot; href=&quot;#fnr.1&quot;&gt;1&lt;/a&gt;&lt;/sup&gt; &lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;http://www.plantuml.com/faq.html&quot;&gt;What&apos;s the goal of PlantUML ?&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.2&quot; name=&quot;fn.2&quot; class=&quot;footnum&quot; href=&quot;#fnr.2&quot;&gt;2&lt;/a&gt;&lt;/sup&gt; &lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;http://www.agilemodeling.com/artifacts/sequenceDiagram.htm#sthash.uLZLZUmE.dpuf&quot;&gt;UML 2 Sequence Diagrams: An Agile Introduction&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.3&quot; name=&quot;fn.3&quot; class=&quot;footnum&quot; href=&quot;#fnr.3&quot;&gt;3&lt;/a&gt;&lt;/sup&gt; &lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;http://www.agilemodeling.com/artifacts/useCaseDiagram.htm#sthash.x1XX0qza.dpuf&quot;&gt;UML 2 Use Case Diagrams: An Agile Introduction&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.4&quot; name=&quot;fn.4&quot; class=&quot;footnum&quot; href=&quot;#fnr.4&quot;&gt;4&lt;/a&gt;&lt;/sup&gt; &lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;http://www.agilemodeling.com/artifacts/classDiagram.htm&quot;&gt;UML 2 Class Diagrams: An Agile Introduction&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.5&quot; name=&quot;fn.5&quot; class=&quot;footnum&quot; href=&quot;#fnr.5&quot;&gt;5&lt;/a&gt;&lt;/sup&gt; &lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;http://agilemodeling.com/artifacts/activityDiagram.htm&quot;&gt;UML 2 Activity Diagrams: An Agile Introduction&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.6&quot; name=&quot;fn.6&quot; class=&quot;footnum&quot; href=&quot;#fnr.6&quot;&gt;6&lt;/a&gt;&lt;/sup&gt; &lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;http://www.agilemodeling.com/artifacts/stateMachineDiagram.htm&quot;&gt;UML 2 State Machine Diagrams: An Agile Introduction&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;


&lt;/div&gt;
&lt;/div&gt;
</content>
 </entry>
 
 <entry>
   <title>SVN switch and merge</title>
   <link href="http://kimi.im/2014-05-09-svn-switch-and-merge"/>
   <updated>2014-05-09T00:00:00+00:00</updated>
   <id>http://kimi.im/svn-switch-and-merge</id>
   <content type="html">&lt;div id=&quot;outline-container-sec-1&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;sec-1&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;1&lt;/span&gt; Introduction&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-1&quot;&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;In this article, I&apos;ll introduce following svn command:
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;svn switch
&lt;/li&gt;
&lt;li&gt;svn log
&lt;/li&gt;
&lt;li&gt;svn merge
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;and finally combines these command into one svn workflow.
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-sec-2&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;sec-2&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;2&lt;/span&gt; Usage of svn command&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-2&quot;&gt;
&lt;/div&gt;&lt;div id=&quot;outline-container-sec-2-1&quot; class=&quot;outline-3&quot;&gt;
&lt;h3 id=&quot;sec-2-1&quot;&gt;&lt;span class=&quot;section-number-3&quot;&gt;2.1&lt;/span&gt; svn log&lt;/h3&gt;
&lt;div class=&quot;outline-text-3&quot; id=&quot;text-2-1&quot;&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;list svn logs
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&quot;org-src-container&quot;&gt;

&lt;pre class=&quot;src src-sh&quot;&gt;kimim@kimi.im codedojo$&lt;span style=&quot;color: #0000ff; font-style: italic;&quot;&gt;svn&lt;/span&gt; log -l 5 -g
------------------------------------------------------------------------
r595 | kimim | 2014-04-29 11:11:22 +0800 (Tue, 29 Apr 2014) | 6 lines

merge from my branch

------------------------------------------------------------------------
r594 | kimim | 2014-04-29 10:50:27 +0800 (Tue, 29 Apr 2014) | 2 lines
Merged via: r595

add handles
&lt;/pre&gt;
&lt;/div&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;more info: svn help log
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-sec-2-2&quot; class=&quot;outline-3&quot;&gt;
&lt;h3 id=&quot;sec-2-2&quot;&gt;&lt;span class=&quot;section-number-3&quot;&gt;2.2&lt;/span&gt; svn switch&lt;/h3&gt;
&lt;div class=&quot;outline-text-3&quot; id=&quot;text-2-2&quot;&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;switch current folder to a branch
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&quot;org-src-container&quot;&gt;

&lt;pre class=&quot;src src-sh&quot;&gt;kimim@kimi.im codedojo$&lt;span style=&quot;color: #0000ff; font-style: italic;&quot;&gt;svn&lt;/span&gt; sw ^/branches/codedojo
U    Makefile
U    jekyll.el
 U   .
Updated to revision 595.
&lt;/pre&gt;
&lt;/div&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;more info: &quot;svn help switch&quot;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-sec-2-3&quot; class=&quot;outline-3&quot;&gt;
&lt;h3 id=&quot;sec-2-3&quot;&gt;&lt;span class=&quot;section-number-3&quot;&gt;2.3&lt;/span&gt; svn merge&lt;/h3&gt;
&lt;div class=&quot;outline-text-3&quot; id=&quot;text-2-3&quot;&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;merge from one branch to another
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&quot;org-src-container&quot;&gt;

&lt;pre class=&quot;src src-sh&quot;&gt;kimim@kimi.im codedojo$&lt;span style=&quot;color: #0000ff; font-style: italic;&quot;&gt;svn&lt;/span&gt; merge ^/trunk/codedojo
--- Merging differences between repository URLs into &lt;span style=&quot;color: #3a5fcd;&quot;&gt;&apos;.&apos;&lt;/span&gt;:
U    jekyll.el
U    ox-reveal.el
--- Recording mergeinfo for merge between repository URLs into &lt;span style=&quot;color: #3a5fcd;&quot;&gt;&apos;.&apos;&lt;/span&gt;:
 U   .
&lt;/pre&gt;
&lt;/div&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;more info: &quot;svn help merge&quot;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-sec-3&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;sec-3&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;3&lt;/span&gt; SVN graph of merge operation&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-3&quot;&gt;
&lt;div class=&quot;org-src-container&quot;&gt;

&lt;pre class=&quot;src src-text&quot;&gt;    branches/codedojo  +-----------------------------+-------+-----------&amp;gt;
                      /                             /         \
                     /                             (merge)    (merge)
                    /       r598                  /             \
trunk ------+------+----------o------------------+---------------+-------&amp;gt;
             \                 \                /
              \                 \_(merge)___   (merge)
               \                            \ /
branches/code2  +----------------------------+---------------------------&amp;gt;
&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-sec-4&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;sec-4&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;4&lt;/span&gt; SVN workflow&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-4&quot;&gt;
&lt;/div&gt;&lt;div id=&quot;outline-container-sec-4-1&quot; class=&quot;outline-3&quot;&gt;
&lt;h3 id=&quot;sec-4-1&quot;&gt;&lt;span class=&quot;section-number-3&quot;&gt;4.1&lt;/span&gt; Create a branch of sub-folder&lt;/h3&gt;
&lt;div class=&quot;outline-text-3&quot; id=&quot;text-4-1&quot;&gt;
&lt;div class=&quot;org-src-container&quot;&gt;

&lt;pre class=&quot;src src-sh&quot;&gt;kimim@kimi.im codedojo$&lt;span style=&quot;color: #0000ff; font-style: italic;&quot;&gt;svn&lt;/span&gt; copy ^/trunk/codedojo ^/branches/codedojo

Committed revision 598.
&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-sec-4-2&quot; class=&quot;outline-3&quot;&gt;
&lt;h3 id=&quot;sec-4-2&quot;&gt;&lt;span class=&quot;section-number-3&quot;&gt;4.2&lt;/span&gt; Switch the sub-folder to the branch&lt;/h3&gt;
&lt;div class=&quot;outline-text-3&quot; id=&quot;text-4-2&quot;&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;switch to branch
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&quot;org-src-container&quot;&gt;

&lt;pre class=&quot;src src-sh&quot;&gt;kimim@kimi.im codedojo$&lt;span style=&quot;color: #0000ff; font-style: italic;&quot;&gt;svn&lt;/span&gt; switch ^/branches/codedojo
U    Makefile
U    jekyll.el
 U   .
&lt;/pre&gt;
&lt;/div&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;branch info: &lt;code&gt;^/branches/codedojo&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&quot;org-src-container&quot;&gt;

&lt;pre class=&quot;src src-sh&quot;&gt;kimim@kimi.im codedojo$&lt;span style=&quot;color: #0000ff; font-style: italic;&quot;&gt;svn&lt;/span&gt; info
Path: .
Working Copy Root Path: /home/kimim/codedojo
URL: http://kimi.im/svn/lily/branches/codedojo
Relative URL: ^/branches/codedojo
Repository Root: http://kimi.im/svn/lily
Repository UUID: 740ae2fa-c468-104b-b514-ad5a56475b1e
Revision: 598
Node Kind: directory
Schedule: normal
Last Changed Author: kimim
Last Changed Rev: 598
Last Changed Date: 2014-04-29 16:00:35 +0800 (Tue, 29 Apr 2014)
&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-sec-4-3&quot; class=&quot;outline-3&quot;&gt;
&lt;h3 id=&quot;sec-4-3&quot;&gt;&lt;span class=&quot;section-number-3&quot;&gt;4.3&lt;/span&gt; Commit the daily modification to the branch&lt;/h3&gt;
&lt;div class=&quot;outline-text-3&quot; id=&quot;text-4-3&quot;&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;commit code as soon as you need
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&quot;org-src-container&quot;&gt;

&lt;pre class=&quot;src src-sh&quot;&gt;kimim@kimi.im codedojo$&lt;span style=&quot;color: #0000ff; font-style: italic;&quot;&gt;svn&lt;/span&gt; ci
&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-sec-4-4&quot; class=&quot;outline-3&quot;&gt;
&lt;h3 id=&quot;sec-4-4&quot;&gt;&lt;span class=&quot;section-number-3&quot;&gt;4.4&lt;/span&gt; Merge trunk changes to branch, compile and test&lt;/h3&gt;
&lt;div class=&quot;outline-text-3&quot; id=&quot;text-4-4&quot;&gt;
&lt;div class=&quot;org-src-container&quot;&gt;

&lt;pre class=&quot;src src-sh&quot;&gt;kimim@kimi.im codedojo$&lt;span style=&quot;color: #0000ff; font-style: italic;&quot;&gt;svn&lt;/span&gt; merge ^/trunk/codedojo
--- Recording mergeinfo for merge of r598 into &lt;span style=&quot;color: #3a5fcd;&quot;&gt;&apos;.&apos;&lt;/span&gt;:
 U   .
&lt;/pre&gt;
&lt;/div&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;after you merged &lt;b&gt;trunk&lt;/b&gt; to your branch, you&apos;d better to compile and test with the branch
&lt;/li&gt;
&lt;li&gt;if any error, fix and commit, remember to commit the fix to the branch
&lt;/li&gt;
&lt;li&gt;when all the test passed, you will need to merge the code back to trunk
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-sec-4-5&quot; class=&quot;outline-3&quot;&gt;
&lt;h3 id=&quot;sec-4-5&quot;&gt;&lt;span class=&quot;section-number-3&quot;&gt;4.5&lt;/span&gt; Merge back the branch to trunk, compile and test&lt;/h3&gt;
&lt;div class=&quot;outline-text-3&quot; id=&quot;text-4-5&quot;&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;switch to trunk
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&quot;org-src-container&quot;&gt;

&lt;pre class=&quot;src src-sh&quot;&gt;kimim@kimi.im codedojo$&lt;span style=&quot;color: #0000ff; font-style: italic;&quot;&gt;svn&lt;/span&gt; switch ^/trunk/codedojo
At revision 598.
&lt;/pre&gt;
&lt;/div&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;merge branch to trunk
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&quot;org-src-container&quot;&gt;

&lt;pre class=&quot;src src-sh&quot;&gt;kimim@kimi.im codedojo$&lt;span style=&quot;color: #0000ff; font-style: italic;&quot;&gt;svn&lt;/span&gt; merge ^/branches/codedojo
--- Recording mergeinfo for merge of r598 into &lt;span style=&quot;color: #3a5fcd;&quot;&gt;&apos;.&apos;&lt;/span&gt;:
 G   .
&lt;/pre&gt;
&lt;/div&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;finally, you need to test the merged trunk and commit the changes merged from branch to trunk
&lt;/li&gt;
&lt;li&gt;be reminded that the branch already contains the code merged from trunk
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
</content>
 </entry>
 
 <entry>
   <title>How to Improve Technical Skill as a First Line Manager</title>
   <link href="http://kimi.im/2014-05-06-technical-manager"/>
   <updated>2014-05-06T00:00:00+00:00</updated>
   <id>http://kimi.im/technical-manager</id>
   <content type="html">&lt;p&gt;
As you know, a manager at line level is frequently involved in a lot
of meetings, such as line topic discussion meeting with other team
leaders, project management synchronization meeting, sprint planning
and sprint review meeting, interview talk with new candidates, etc. It
seems that my 8 hours are cut into pieces. I cannot find time longer
than 1 hour for code reading, or debugging. Here are some proposals on
how to better use my work time as a technical line manager.
&lt;/p&gt;

&lt;div id=&quot;outline-container-sec-1&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;sec-1&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;1&lt;/span&gt; Pair work with subordinates who comes across impediments.&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-1&quot;&gt;
&lt;p&gt;
We have daily standing meeting every morning. In the meeting, each
team member tell others what they have achieved last day, what they
plan to do in the following day and what impediment they
encountered. The last question is very important for me. I will listen
carefully and ask for the detail after the meeting.
&lt;/p&gt;

&lt;p&gt;
Then I will follow the problem. If this problem blocks them again in
the coming day, I will try to find some time to pair work with this
team member. What I do is sitting together with him, and asking what
he have tried and what he plans to do. And then I analyze the problem
and the actions have done. It is quite often that at some degree there
is some systematically missing point. That usually is the key element
for solving the problem.
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-sec-2&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;sec-2&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;2&lt;/span&gt; Review design and code&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-2&quot;&gt;
&lt;p&gt;
The programmers usually focuses on implementation while underestimate
the importance of design and documentation. I frequently inspect the
design description from the developers. It is important to find the
missing point from the design. Besides document review, code review is
also very good point for estimating the code quality and checking who
is implementing with good qualily sense. In the review record, you may
find some one treat other&apos;s code carefully and provide many
constructive comments. This is also good materials for yearly personal
performance appraisal.
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-sec-3&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;sec-3&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;3&lt;/span&gt; Work for small tasks&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-3&quot;&gt;
&lt;p&gt;
As line manager&apos;s time is scattered over different kind of meetings
and discussions, it is hard to allocatge large time amount to focus on
difficult problems. So it is possible to claim some small tasks such
as investigation on new technology, developing small tool to improve
test and configuration management.
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-sec-4&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;sec-4&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;4&lt;/span&gt; Read related books&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-4&quot;&gt;
&lt;p&gt;
In order to provide guidance to team member on design principle, it is
necessary that a line manager should continuously learn good design
patterns, code quality practice, domain knowleges. Therefore, it is
better to allocate time to read books.
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
</content>
 </entry>
 
 <entry>
   <title>單詞本：rire</title>
   <link href="http://kimi.im/2014-05-06-francais-rire"/>
   <updated>2014-05-06T00:00:00+00:00</updated>
   <id>http://kimi.im/francais-rire</id>
   <content type="html">&lt;div id=&quot;table-of-contents&quot; role=&quot;doc-toc&quot;&gt;
&lt;h2&gt;Table of Contents&lt;/h2&gt;
&lt;div id=&quot;text-table-of-contents&quot; role=&quot;doc-toc&quot;&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;#org76cc84d&quot;&gt;1. 單詞釋義&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#org7308d23&quot;&gt;2. 詞源&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#org96b5726&quot;&gt;3. 詞彙擴展&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#org9d2e8cf&quot;&gt;4. 題外話&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;
星期天的早晨，寶貝們還在睡覺。懷著愉快的心情翻開法語詞典看看。隨便一翻就看到 risible 這個單詞。它的意思是可笑的。因爲 rire 是笑的意思，於是很自然的想到，risible，rire 應該是起源于某個相同的祖先。字典裏還有一個單詞 risée 嘲笑的名詞，附近的另一個單詞 risette 孩子的微笑。然後我再查看漢法詞典裏的笑，於是又發現微笑 sourire 無非就是在 rire 前面添加了個詞綴
sou-。至此，關於笑得幾個單詞似乎都被聯係在了一起。接下來就去網上索搜研究一下，看看他們之間是什麽樣的一種關係。
&lt;/p&gt;

&lt;div id=&quot;outline-container-org76cc84d&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;org76cc84d&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;1.&lt;/span&gt; 單詞釋義&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-1&quot;&gt;
&lt;p&gt;
&lt;b&gt;rire&lt;/b&gt;:
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;笑。Marquer un sentiment de gaieté par un mouvement de la bouche
accompagné souvent de bruit et par une expression correspondante
des regards et des traits du visage. marguer: 表示。sentiment: 感覺，感情。gaieté: 歡樂，快活。la bouche: 嘴巴。bruit: 喧閙聲。trait: 特徵，臉部特徵。Il a des traits fins et réguliers. 他臉部輪廓細膩端正。
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;Elle rentrait de l&amp;rsquo;école, son &lt;b&gt;rire&lt;/b&gt; s&amp;rsquo;envolait.&lt;/li&gt;
&lt;li&gt;Rira bien qui &lt;b&gt;rira&lt;/b&gt; le dernier. [諺]最後笑的人笑得最好。&lt;/li&gt;
&lt;li&gt;&lt;b&gt;rire&lt;/b&gt; comme une baleine 笑得像頭鯨魚 =&amp;gt; 笑得合不攏嘴。&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;開玩笑。Railler; badiner; ne pas parler ou ne pas agir
sérieusement. railler: 開玩笑，取笑。badiner: 開玩笑，說笑話。
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;Nous serons en joyeuse compagnie, nous &lt;b&gt;rirons&lt;/b&gt; bien. Venez avec
nous, nous &lt;b&gt;rirons&lt;/b&gt;. C’est un bon garçon qui aime à &lt;b&gt;rire&lt;/b&gt;.&lt;/li&gt;
&lt;li&gt;C&amp;rsquo;est pour &lt;b&gt;rire&lt;/b&gt;. C&amp;rsquo;est pour de &lt;b&gt;rire&lt;/b&gt;. 这是開開玩笑的。&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;顯得順利，呈現喜悅。Être agréable, plaire, en parlant des choses.
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;La campagne &lt;b&gt;rit&lt;/b&gt; sous le soleil. la campagne: 平原，田野。&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;嘲笑，取笑。(Rire à quelqu’un) Être favorable.
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;Ne riez pas de lui.&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;無視，對……付之一笑。
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;&lt;b&gt;rire&lt;/b&gt; des menaces de qn&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;高興，快樂，玩耍。
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;faire &lt;b&gt;rire&lt;/b&gt; qn 使某人高興&lt;/li&gt;
&lt;li&gt;aimer à &lt;b&gt;rire&lt;/b&gt; 喜歡玩耍&lt;/li&gt;
&lt;li&gt;Plus on est de fous, plus on &lt;b&gt;rit&lt;/b&gt;. 人越多越熱鬧。&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;嘲弄。Se moquer de quelqu’un. se moquer: to mock, make fun of&lt;sup&gt;&lt;a id=&quot;fnr.1&quot; class=&quot;footref&quot; href=&quot;#fn.1&quot; role=&quot;doc-backlink&quot;&gt;1&lt;/a&gt;&lt;/sup&gt;. 嘲笑，愚弄。
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;Elle &lt;b&gt;se rit&lt;/b&gt; de vous. Il &lt;b&gt;se rit&lt;/b&gt; de vos vains projets.&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-org7308d23&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;org7308d23&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;2.&lt;/span&gt; 詞源&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-2&quot;&gt;
&lt;p&gt;
Du latin populaire *rīdĕre, en latin classique rīdēre.&lt;sup&gt;&lt;a id=&quot;fnr.2&quot; class=&quot;footref&quot; href=&quot;#fn.2&quot; role=&quot;doc-backlink&quot;&gt;2&lt;/a&gt;&lt;/sup&gt; rire 源自拉丁語 rīdēre. 意大利語 ridere 看起來和拉丁語非常像，應該有直接的繼承關係。而英語的 laugh 和德語的 lachen 看起來則源於另外一個單詞。
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-org96b5726&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;org96b5726&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;3.&lt;/span&gt; 詞彙擴展&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-3&quot;&gt;
&lt;dl class=&quot;org-dl&quot;&gt;
&lt;dt&gt;risible&lt;/dt&gt;&lt;dd&gt;可笑的。funny, droll, ridiculous, ludicrous, risible&lt;sup&gt;en&lt;/sup&gt;.&lt;/dd&gt;
&lt;dt&gt;reur, rieuse&lt;/dt&gt;&lt;dd&gt;Celui, celle qui rit facilement. Je voudrais bien
savoir comment vous feriez à ma place, messieurs
les rieurs? Celui, celle qui aime à rire. C’est un
grand rieur, une grande rieuse. Cette jeune fille
est très rieuse. Des yeux rieurs. 不過 la rieuse 有另外一個意思：紅嘴鷗，又叫笑鷗&lt;sup&gt;&lt;a id=&quot;fnr.3&quot; class=&quot;footref&quot; href=&quot;#fn.3&quot; role=&quot;doc-backlink&quot;&gt;3&lt;/a&gt;&lt;/sup&gt;。原因是它們的叫聲是難聽的 &amp;ldquo;kee-agh&amp;rdquo;, &amp;ldquo;ha-ha-ha&amp;rdquo;所以洋人叫它們“笑鷗”&lt;sup&gt;&lt;a id=&quot;fnr.4&quot; class=&quot;footref&quot; href=&quot;#fn.4&quot; role=&quot;doc-backlink&quot;&gt;4&lt;/a&gt;&lt;/sup&gt;。&lt;/dd&gt;
&lt;dt&gt;rieusement&lt;/dt&gt;&lt;dd&gt;adv. de manière rieuse, en riant, gaiement&lt;sup&gt;fr&lt;/sup&gt;;
lachend&lt;sup&gt;de&lt;/sup&gt;; laughingly&lt;sup&gt;en&lt;/sup&gt;, cheerfully&lt;sup&gt;en&lt;/sup&gt;.&lt;/dd&gt;
&lt;dt&gt;la risée&lt;/dt&gt;&lt;dd&gt;哄笑，笑柄。laughingstock. Il a été la &lt;b&gt;risée&lt;/b&gt; de tous
ses amis.&lt;/dd&gt;
&lt;dt&gt;la risette&lt;/dt&gt;&lt;dd&gt;微笑，強笑。&lt;/dd&gt;
&lt;dt&gt;sourire&lt;/dt&gt;&lt;dd&gt;v.i. 微笑。sourire à qn. Tout sourit à la
jeunesse. v.t. 致以微笑，惠及。sourire à qn, to smile
on sb.(=être favoble à). n.m. 微笑。avec le sourire,
with smile. faire sourire à qn, to give sb a
smile. Cacher un couteau derrière son sourire. 【諺語】笑裡藏刀。&lt;/dd&gt;
&lt;dt&gt;s&amp;rsquo;esclaffer&lt;/dt&gt;&lt;dd&gt;éclater de rire, to burst out laughing, explode
with laughter. 放聲大笑，開懷大笑。&lt;/dd&gt;
&lt;dt&gt;regoler&lt;/dt&gt;&lt;dd&gt;rire. 笑。to laugh. J&amp;rsquo;ai bien rigolé en regardant ce
film. 看這電影我笑抽了。I laughed a lot while watching
this movie. s&amp;rsquo;amuser, 嬉戲。to have fun. On a bien
rigolé. 我們玩得很開心。plaisanter, 開玩笑。to joke. tu
rigoles!  you are kidding! il ne faut pas rigoler avec
ce genre de maladie. 這病可不是開玩笑的。an illness
like this has to be taken seriously.  J&amp;rsquo;ai dit ça pour
rigoler. 我是說著玩兒呢。It was just a joke.&lt;/dd&gt;
&lt;dt&gt;la rigolade&lt;/dt&gt;&lt;dd&gt;a bit of fun&lt;/dd&gt;
&lt;dt&gt;rigolard&lt;/dt&gt;&lt;dd&gt;(adj)grinning, ready for a laugh&lt;/dd&gt;
&lt;dt&gt;rigolo&lt;/dt&gt;&lt;dd&gt;(adj)funny&lt;/dd&gt;
&lt;dt&gt;un rigolo&lt;/dt&gt;&lt;dd&gt;comic, funny person&lt;/dd&gt;
&lt;dt&gt;plaisanter&lt;/dt&gt;&lt;dd&gt;to joke. plaisanter sur, to joke about. on ne
plaisante pas avec cela. 這是個嚴肅的話題。 this is
not laughing matter.&lt;/dd&gt;
&lt;dt&gt;blaguer&lt;/dt&gt;&lt;dd&gt;to joke. 說笑，胡謅，吹牛。Il blagua, nous blaguons.&lt;/dd&gt;
&lt;dt&gt;marrer&lt;/dt&gt;&lt;dd&gt;to laugh,. On s&amp;rsquo;est bien marrés. We had a good
laugh.= We had a great time. se marrer. 捧腹大笑。&lt;/dd&gt;
&lt;dt&gt;bidonner&lt;/dt&gt;&lt;dd&gt;to laugh. Les Américains se bidonnent maintenant parce
que le gouvernement du Canada vient de leur servir cet
avantage sur un plateau d&amp;rsquo;argent. Elle n&amp;rsquo;arrête jamais
de se bidonner - She never stops laughing&lt;sup&gt;&lt;a id=&quot;fnr.5&quot; class=&quot;footref&quot; href=&quot;#fn.5&quot; role=&quot;doc-backlink&quot;&gt;5&lt;/a&gt;&lt;/sup&gt;. On
s’est tous bien bidonnés en regardant ce film.&lt;/dd&gt;
&lt;dt&gt;se poiler&lt;/dt&gt;&lt;dd&gt;rire beaucoup. il n&amp;rsquo;y a pas de quoi se poiler!&lt;/dd&gt;
&lt;dt&gt;mourir de rire&lt;/dt&gt;&lt;dd&gt;“Mourir de rire” does not mean that you are
dying while laughing (though I udnerstand it can
happened).It means that you are finding
something very hilarious and are laughing very
much indeed. Est-ce que tu vois souvent des
choses qui te font mourir de rire? Do you often
see things that make you laugh very hard?&lt;sup&gt;&lt;a id=&quot;fnr.6&quot; class=&quot;footref&quot; href=&quot;#fn.6&quot; role=&quot;doc-backlink&quot;&gt;6&lt;/a&gt;&lt;/sup&gt;&lt;/dd&gt;
&lt;dt&gt;rêter à rire&lt;/dt&gt;&lt;dd&gt;Donner sujet de rire par quelque chose de
ridicule. Ne croyez-vous pas que, par cette
conduite, vous prêtez à rire à tout le
monde?&lt;sup&gt;&lt;a id=&quot;fnr.7&quot; class=&quot;footref&quot; href=&quot;#fn.7&quot; role=&quot;doc-backlink&quot;&gt;7&lt;/a&gt;&lt;/sup&gt;&lt;/dd&gt;
&lt;dt&gt;rire jaune&lt;/dt&gt;&lt;dd&gt;笑黃了。苦笑，強笑。force a laugh, to give a hollow
laugh, to give a sickly smile. se forcer à rire. Le
jaune, lorsqu’il est éclatant, est le symbole des
dieux. A l’inverse, lorsqu’il est mat, il représente
le soufre, donc l’enfer, mais aussi la
perfidie. Cependant l’expression &amp;ldquo;rire jaune&amp;rdquo;
provient surtout du fait que les hépatiques sont
souvent de mauvaise humeur, et lorsqu’ils se forcent
à rire, la bile teinte leur visage de cette couleur
jaune pâle. Par extension, cette expression
s’applique à toute personne qui semble se forcer à
rire, tenter de calmer sa colère ou qui ne veut pas
montrer qu’elle est vexée.&lt;sup&gt;&lt;a id=&quot;fnr.8&quot; class=&quot;footref&quot; href=&quot;#fn.8&quot; role=&quot;doc-backlink&quot;&gt;8&lt;/a&gt;&lt;/sup&gt; Un « rire jaune »
ou un « sourire jaune » est en fait un rire forcé ou
un faux rire.&lt;sup&gt;&lt;a id=&quot;fnr.9&quot; class=&quot;footref&quot; href=&quot;#fn.9&quot; role=&quot;doc-backlink&quot;&gt;9&lt;/a&gt;&lt;/sup&gt; gezwungenes Lachen&lt;sup&gt;de&lt;/sup&gt;. J&amp;rsquo;espère
que le Japon te sourit et que vous ne riez pas
jaune. I hope Japan is working out well and you&amp;rsquo;re
not just putting a brave face on things.&lt;sup&gt;&lt;a id=&quot;fnr.10&quot; class=&quot;footref&quot; href=&quot;#fn.10&quot; role=&quot;doc-backlink&quot;&gt;10&lt;/a&gt;&lt;/sup&gt;&lt;/dd&gt;

&lt;dt&gt;avoir le mot pour rire&lt;/dt&gt;&lt;dd&gt;Être amusant, de bonne humeur, qui ne se
prend pas au sérieux, dire qqchose d&amp;rsquo;amusant (parfois employé
ironiquement pour se moquer de ce qui vient d&amp;rsquo;être dit), à qqun
qui vient de faire de l&amp;rsquo;esprit . Il a toujours &lt;b&gt;le mot pour
rire&lt;/b&gt;.&lt;sup&gt;&lt;a id=&quot;fnr.11&quot; class=&quot;footref&quot; href=&quot;#fn.11&quot; role=&quot;doc-backlink&quot;&gt;11&lt;/a&gt;&lt;/sup&gt; Cet homme a toujours &lt;b&gt;le mot pour rire&lt;/b&gt;.&lt;/dd&gt;
&lt;dt&gt;pince-sans-rire&lt;/dt&gt;&lt;dd&gt;Personne qui affecte un air sérieux ; personne
rigide, stricte, compassée, jamais souriante ; ironie à froid,
ironie avec sérieux. 一個嚴肅冷酷認真的人，一個不會笑的鉗子。la
pince: pincer&lt;sup&gt;en&lt;/sup&gt;; Die Kneifzange&lt;sup&gt;de&lt;/sup&gt;; 鉗子；鑷子。Rarement il
ouvre la bouche, mais c&amp;rsquo;est toujours pour punir. On le craint
comme le feu, il a été surnommé pince-sans-rire ou
tape-sec.&lt;sup&gt;&lt;a id=&quot;fnr.12&quot; class=&quot;footref&quot; href=&quot;#fn.12&quot; role=&quot;doc-backlink&quot;&gt;12&lt;/a&gt;&lt;/sup&gt; 英語有個單詞叫 poker-faced（撲克臉）也是形容這類人，像撲克上面的人物一樣嚴肅認真不會笑。法語維基百科
pince-sans-rire 有個詞條： L&amp;rsquo;humour pince-sans-rire est une
forme particulière d&amp;rsquo;humour, caractérisée notamment par l&amp;rsquo;air
sérieux de la personne qui en fait preuve, que l&amp;rsquo;on peut
rapprocher de l&amp;rsquo;humour noir&lt;sup&gt;&lt;a id=&quot;fnr.13&quot; class=&quot;footref&quot; href=&quot;#fn.13&quot; role=&quot;doc-backlink&quot;&gt;13&lt;/a&gt;&lt;/sup&gt;. 冷面笑匠（Poker-Faced
Comedian、dry wit），形容一位演说笑话时自身不笑的喜剧演员，常与笑话本身形成对比效果&lt;sup&gt;&lt;a id=&quot;fnr.14&quot; class=&quot;footref&quot; href=&quot;#fn.14&quot; role=&quot;doc-backlink&quot;&gt;14&lt;/a&gt;&lt;/sup&gt;。卓別林就是其中的傑出代表。不過德語好像沒有專門的單詞：Trockener Humor ist eine Technik des
Humors, die ihre Wirkung wesentlich aus der Tatsache bezieht,
dass die jeweilige Äußerung nicht erkennbar von Emotionen
begleitet ist und deshalb nur indirekt als Witz entlarvt werden
kann. Besonders häufig ist der Inhalt einer solcherart
vorgebrachten Äußerung sarkastisch.&lt;sup&gt;&lt;a id=&quot;fnr.15&quot; class=&quot;footref&quot; href=&quot;#fn.15&quot; role=&quot;doc-backlink&quot;&gt;15&lt;/a&gt;&lt;/sup&gt; Trockener: dry, 乾的。&lt;/dd&gt;
&lt;dt&gt;pisser de rire&lt;/dt&gt;&lt;dd&gt;faire pisser de rire, 笑尿了。Elles avançaient
avec des mouvements de cou à faire pisser de
rire une poule. 她們扭著脖子前進的樣子笑尿了一隻母雞。&lt;/dd&gt;
&lt;dt&gt;rire comme une baleine, rire comme un bossu&lt;/dt&gt;&lt;dd&gt;rire à gorge
déployée, rire à perdre haleine, rire à ventre déboutonné, rire
à se décrocher la mâchoire, rire aux éclatsx, rire aux larmes,
rire comme un dératé, rire comme une baleine, rire comme un
fou, rire très fort, éclater de rire.&lt;/dd&gt;
&lt;dt&gt;rire dans sa barbe&lt;/dt&gt;&lt;dd&gt;rire sous cape, laugh in one&amp;rsquo;s sleeve, 窃笑，偷偷笑。躲在鬍子裡面笑。la barbe: 鬍子。la cape: 斗篷。&lt;/dd&gt;
&lt;/dl&gt;

&lt;p&gt;
TODO: 還有一些關於笑的詞組還沒整理。
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-org9d2e8cf&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;org9d2e8cf&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;4.&lt;/span&gt; 題外話&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-4&quot;&gt;
&lt;p&gt;
笑是一種健康的運動&lt;sup&gt;&lt;a id=&quot;fnr.16&quot; class=&quot;footref&quot; href=&quot;#fn.16&quot; role=&quot;doc-backlink&quot;&gt;16&lt;/a&gt;&lt;/sup&gt;。1995 年 Madan Kataria 醫生還發明了“笑瑜伽” En
1995, le Dr Madan Kataria, médecin généraliste en Inde, a mis au
point le Yoga du rire - ou Rire sans raison&lt;sup&gt;&lt;a id=&quot;fnr.17&quot; class=&quot;footref&quot; href=&quot;#fn.17&quot; role=&quot;doc-backlink&quot;&gt;17&lt;/a&gt;&lt;/sup&gt;.
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;footnotes&quot;&gt;
&lt;h2 class=&quot;footnotes&quot;&gt;Footnotes: &lt;/h2&gt;
&lt;div id=&quot;text-footnotes&quot;&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.1&quot; class=&quot;footnum&quot; href=&quot;#fnr.1&quot; role=&quot;doc-backlink&quot;&gt;1&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot; role=&quot;doc-footnote&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;http://french.about.com/od/verb_conjugations/a/moquer.htm&quot;&gt;Se moquer - to mock, make fun of&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.2&quot; class=&quot;footnum&quot; href=&quot;#fnr.2&quot; role=&quot;doc-backlink&quot;&gt;2&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot; role=&quot;doc-footnote&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;http://fr.wiktionary.org/wiki/rire#.C3.89tymologie&quot;&gt;Du latin populaire *rīdĕre, en latin classique rīdēre.&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.3&quot; class=&quot;footnum&quot; href=&quot;#fnr.3&quot; role=&quot;doc-backlink&quot;&gt;3&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot; role=&quot;doc-footnote&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;http://www.frdic.com/dicts/fr/rieuse&quot;&gt;法語助手：rieuse&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.4&quot; class=&quot;footnum&quot; href=&quot;#fnr.4&quot; role=&quot;doc-backlink&quot;&gt;4&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot; role=&quot;doc-footnote&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;http://baike.baidu.com/view/1607122.htm&quot;&gt;笑鸥&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.5&quot; class=&quot;footnum&quot; href=&quot;#fnr.5&quot; role=&quot;doc-backlink&quot;&gt;5&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot; role=&quot;doc-footnote&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;http://french.about.com/od/vocabulary/g/bidonner.htm&quot;&gt;se bidonner&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.6&quot; class=&quot;footnum&quot; href=&quot;#fnr.6&quot; role=&quot;doc-backlink&quot;&gt;6&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot; role=&quot;doc-footnote&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;http://frenchtutor.net.au/?p%3D3&quot;&gt;Mourir de rire&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.7&quot; class=&quot;footnum&quot; href=&quot;#fnr.7&quot; role=&quot;doc-backlink&quot;&gt;7&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot; role=&quot;doc-footnote&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;http://fr.wiktionary.org/wiki/pr%25C3%25AAter_%25C3%25A0_rire&quot;&gt;prêter à rire&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.8&quot; class=&quot;footnum&quot; href=&quot;#fnr.8&quot; role=&quot;doc-backlink&quot;&gt;8&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot; role=&quot;doc-footnote&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;http://www.linternaute.com/expression/langue-francaise/107/rire-jaune/&quot;&gt;Rire jaune&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.9&quot; class=&quot;footnum&quot; href=&quot;#fnr.9&quot; role=&quot;doc-backlink&quot;&gt;9&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot; role=&quot;doc-footnote&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;http://lyricstranslate.com/en/rire-jaune&quot;&gt;Un « rire jaune » ou un « sourire jaune » est en fait un rire forcé ou un faux rire.&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.10&quot; class=&quot;footnum&quot; href=&quot;#fnr.10&quot; role=&quot;doc-backlink&quot;&gt;10&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot; role=&quot;doc-footnote&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;http://forum.wordreference.com/showthread.php?t%3D580401&quot;&gt;J&amp;rsquo;espère que le Japon te sourit et que vous ne riez pas jaune&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.11&quot; class=&quot;footnum&quot; href=&quot;#fnr.11&quot; role=&quot;doc-backlink&quot;&gt;11&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot; role=&quot;doc-footnote&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;http://www.languefrancaise.net/bob/detail.php?id%3D46303&quot;&gt;avoir le mot pour rire&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.12&quot; class=&quot;footnum&quot; href=&quot;#fnr.12&quot; role=&quot;doc-backlink&quot;&gt;12&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot; role=&quot;doc-footnote&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;http://www.languefrancaise.net/bob/detail.php?id%3D12440#79199&quot;&gt;pince-sans-rire&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.13&quot; class=&quot;footnum&quot; href=&quot;#fnr.13&quot; role=&quot;doc-backlink&quot;&gt;13&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot; role=&quot;doc-footnote&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;http://fr.wikipedia.org/wiki/Pince-sans-rire&quot;&gt;Wikipedia: Pince-sans-rire&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.14&quot; class=&quot;footnum&quot; href=&quot;#fnr.14&quot; role=&quot;doc-backlink&quot;&gt;14&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot; role=&quot;doc-footnote&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;http://zh.wikipedia.org/zh-tw/%25E5%2586%25B7%25E9%259D%25A2%25E7%25AC%2591%25E5%258C%25A0&quot;&gt;冷面笑匠&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.15&quot; class=&quot;footnum&quot; href=&quot;#fnr.15&quot; role=&quot;doc-backlink&quot;&gt;15&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot; role=&quot;doc-footnote&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;http://de.wikipedia.org/wiki/Trockener_Humor&quot;&gt;Trockener Humor&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.16&quot; class=&quot;footnum&quot; href=&quot;#fnr.16&quot; role=&quot;doc-backlink&quot;&gt;16&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot; role=&quot;doc-footnote&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;http://www.lapresse.ca/vivre/sante/201010/05/01-4329580-le-rire-cest-la-sante.php?utm_categorieinterne%3Dtrafficdrivers&amp;amp;utm_contenuinterne%3Dcyberpresse_vous_suggere_4329577_article_POS1&quot;&gt;Le rire, c&amp;rsquo;est la santé&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.17&quot; class=&quot;footnum&quot; href=&quot;#fnr.17&quot; role=&quot;doc-backlink&quot;&gt;17&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot; role=&quot;doc-footnote&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;http://www.lapresse.ca/vivre/sante/201010/05/01-4329577-sentrainer-a-sesclaffer.php?utm_categorieinterne%3Dtrafficdrivers&amp;amp;utm_contenuinterne%3Dcyberpresse_vous_suggere_4329580_article_POS1&quot;&gt;S&amp;rsquo;entraîner à s&amp;rsquo;esclaffer&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;


&lt;/div&gt;
&lt;/div&gt;</content>
 </entry>
 
 <entry>
   <title>dired move line wrap up</title>
   <link href="http://kimi.im/2014-05-05-dired-wrap-move"/>
   <updated>2014-05-05T00:00:00+00:00</updated>
   <id>http://kimi.im/dired-wrap-move</id>
   <content type="html">&lt;p&gt;
When the cursor is at the buffer end of &lt;code&gt;ibuffer&lt;/code&gt;, it will wrap back
to the beginning of the buffer list if I continue pressing &lt;code&gt;n&lt;/code&gt; to next
buffer. But in &lt;code&gt;dired&lt;/code&gt;, this does not happen. The cursor will stay at
the end of the file list, if I continue pressing &lt;code&gt;n&lt;/code&gt; to navigate to
next buffer.
&lt;/p&gt;

&lt;p&gt;
Here is the trick to wind the cursor up to the first item of the file
list. I redefine the function &lt;code&gt;dired-next-line&lt;/code&gt; and &lt;code&gt;dired-previous-line&lt;/code&gt;:
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;

&lt;pre class=&quot;src src-elisp&quot;&gt;(&lt;span style=&quot;color: #8b008b; font-weight: bold;&quot;&gt;defun&lt;/span&gt; &lt;span style=&quot;color: #0000cd;&quot;&gt;dired-next-line&lt;/span&gt; (arg)
  &lt;span style=&quot;color: #3a5fcd;&quot;&gt;&quot;Move down lines then position at filename.&lt;/span&gt;
&lt;span style=&quot;color: #3a5fcd;&quot;&gt;Optional prefix ARG says how many lines to move; default is one line.&quot;&lt;/span&gt;
  (interactive &lt;span style=&quot;color: #3a5fcd;&quot;&gt;&quot;p&quot;&lt;/span&gt;)
  (forward-line arg)
  (&lt;span style=&quot;color: #8b008b; font-weight: bold;&quot;&gt;if&lt;/span&gt; (eobp)
      (&lt;span style=&quot;color: #8b008b; font-weight: bold;&quot;&gt;progn&lt;/span&gt;
        (goto-char (point-min))
        (forward-line 2))) &lt;span style=&quot;color: #228b22; font-style: italic;&quot;&gt;;; &lt;/span&gt;&lt;span style=&quot;color: #228b22; font-style: italic;&quot;&gt;skip two lines: file path and summary&lt;/span&gt;
  (dired-move-to-filename))

(&lt;span style=&quot;color: #8b008b; font-weight: bold;&quot;&gt;defun&lt;/span&gt; &lt;span style=&quot;color: #0000cd;&quot;&gt;dired-previous-line&lt;/span&gt; (arg)
  &lt;span style=&quot;color: #3a5fcd;&quot;&gt;&quot;Move up lines then position at filename.&lt;/span&gt;
&lt;span style=&quot;color: #3a5fcd;&quot;&gt;Optional prefix ARG says how many lines to move; default is one line.&quot;&lt;/span&gt;
  (interactive &lt;span style=&quot;color: #3a5fcd;&quot;&gt;&quot;p&quot;&lt;/span&gt;)
  (&lt;span style=&quot;color: #8b008b; font-weight: bold;&quot;&gt;if&lt;/span&gt; (= 3 (line-number-at-pos)) &lt;span style=&quot;color: #228b22; font-style: italic;&quot;&gt;;; &lt;/span&gt;&lt;span style=&quot;color: #228b22; font-style: italic;&quot;&gt;line num of first item&lt;/span&gt;
      (&lt;span style=&quot;color: #8b008b; font-weight: bold;&quot;&gt;progn&lt;/span&gt;
        (goto-char (point-max))
        (forward-line -1)) &lt;span style=&quot;color: #228b22; font-style: italic;&quot;&gt;;; &lt;/span&gt;&lt;span style=&quot;color: #228b22; font-style: italic;&quot;&gt;skip the last empty line&lt;/span&gt;
    (forward-line (- arg)))
  (dired-move-to-filename))
&lt;/pre&gt;
&lt;/div&gt;
</content>
 </entry>
 
 <entry>
   <title>基於事實的溝通</title>
   <link href="http://kimi.im/2014-05-05-communication-base-on-fact"/>
   <updated>2014-05-05T00:00:00+00:00</updated>
   <id>http://kimi.im/communication-base-on-fact</id>
   <content type="html">&lt;a href=&quot;https://www.flickr.com/photos/layyourheaddown/7595574080/&quot; title=&quot;Flickr 上 Rak Tia 的 Street Reality. #3&quot;&gt;&lt;img src=&quot;https://farm9.staticflickr.com/8431/7595574080_7b345e0ec3_z.jpg&quot; width=&quot;640&quot; height=&quot;425&quot; alt=&quot;Street Reality. #3&quot;&gt;&lt;/a&gt;

&lt;p&gt;
今天討論一個外籍同事 T 來訪問的話題。某經理 V 宣稱其道聽途説該外籍同事
T 性格古怪難以溝通。並警告我們注意溝通避免產生激烈衝突。我表達了強烈的反對和不解。一方面，他在未曾接觸該外籍同事的前提下，提出如此未曾驗證的假說。另一方面，我們和 T 有過一些電話視頻會議接觸，從我的角度看他在溝通合作上面完全沒有問題。只是可能有一些技術專家特有的優越感吧。但這完全不影響溝通。
&lt;/p&gt;

&lt;p&gt;
我相信，基於事實的溝通不僅有效而且還有利於關係的發展。在事實面前，凡是有專業素養的人都不會強詞奪理歪曲事實，更何況幾十年工作經驗的技術工作者，更不會憑空信口開河背離事實。因此，在溝通當中發現討論陷入了假設和臆斷的時候，就要清醒的認識到這一點，趕緊就此打住，請求在獲得足夠事實證據之後再繼續討論。相信科技工作者不但不反對這種打斷，反而非常歡迎這樣的討論中斷。反而是在我經歷的一些不基於事實的討論讓我感覺不舒服。很多時候往往會用臆斷，猜測，咬文嚼字，否定之否定，辯論狡辯的方式來進行一些非技術的討論，導致的結果是，雖然當時被動一方被怔住了，但是意見沒有完全表達，積壓在內心感覺苦悶，從而排斥，厭煩，情緒消極，最終迴避繼續溝通，接受錯誤的決定，不在表達改進意見。
&lt;/p&gt;

&lt;p&gt;
基於事實的溝通需要做到以下這些：
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;在進行溝通前盡可能收集證據，數據是最好的證據，是事實最重要的展示。
&lt;/li&gt;
&lt;li&gt;可以實現將事實證據整理發送給對方，以給與會者充分的時間理解數據和事實證據。
&lt;/li&gt;
&lt;li&gt;同樣的，也預留時間去理解他人給出的數據。
&lt;/li&gt;
&lt;li&gt;討論是基於事實說話，對不曾驗證的假說要事先說明。
&lt;/li&gt;
&lt;li&gt;討論陷入猜測和假說時，要及時打斷無謂的討論，給大家充分的時間準備再繼續討論。
&lt;/li&gt;
&lt;li&gt;尊重對方的觀點，在理解的基礎之上再進行補充反駁。
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
相信，不論是世界哪一個角落的人，只要是受過高等教育，尤其是理工技術專業培訓的人，都是認可和歡迎這種基於事實的討論形式的。
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>坐電梯的禮節</title>
   <link href="http://kimi.im/2014-05-02-elevator-etiquette"/>
   <updated>2014-05-02T00:00:00+00:00</updated>
   <id>http://kimi.im/elevator-etiquette</id>
   <content type="html">&lt;p&gt;
昨天和樓下鄰居一起帶寶寶去游泳，回來的時候鄰居先出電梯，出去的時候順手按了一下電梯關門按鈕。這是第二次遇到會出門幫我們關電梯門的人，第一次是同一樓的一個日本男人。他也會非常禮貌的順手按一下關門按鈕。
&lt;/p&gt;

&lt;p&gt;
於是我找了些電梯禮節的文章來學習學習，整理一下乘坐電梯的注意事項。
&lt;/p&gt;

&lt;div id=&quot;outline-container-sec-1&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;sec-1&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;1&lt;/span&gt; 坐電梯 Boarding&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-1&quot;&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;至少三層 - 乘坐電梯至少乘坐三層以上，如果一層兩層就坐電梯會遭人反感。
&lt;/li&gt;
&lt;li&gt;不要吸煙 - 電梯里不能抽煙這是常識了，但是 30 分鐘內吸過煙的人盡量也避免乘坐電梯。因為身上可能有煙灰缸的氣味。
&lt;/li&gt;
&lt;li&gt;香水有毒 - 如果早上上班前，洗了澡噴了香水或者古龍水，那就爬一下樓梯，以免熏到他人。
&lt;/li&gt;
&lt;li&gt;先出後進 - 和乘地鐵一樣，等所有要下電梯的人都出了電梯再進去。It&apos;s
called &quot;waiting 3 seconds&quot;.
&lt;/li&gt;
&lt;li&gt;先後順序 - 誰先進電梯？一般按等電梯的先後順序進電梯，男士應該讓女士先進。
&lt;/li&gt;
&lt;li&gt;確認方向 - 避免搞錯方向，不然耽誤自己也耽誤他人時間。如果你已經進了電梯卻發現方向不對，那就只好等一下再下來了。避免在關門的最後一秒逃離。
&lt;/li&gt;
&lt;li&gt;電梯擁擠 - 電梯擁擠的情況下，先確定裡面的人是否還歡迎新乘客，是否給你騰出空間。一般來說，至少有兩個人的空間的時候才可以坦然進去。不然會顯得很擁擠。If the elevator is full, do not try and squeeze your
fat a** into the elevator.
&lt;/li&gt;
&lt;li&gt;保持距離 - 當電梯里的人少了的時候，請擴大和隔壁人的距離，越遠越好。
&lt;/li&gt;
&lt;li&gt;視線向前 - 不要打量他人，別人會知道你在看他。保持對著電梯門方向看就
OK 了。
&lt;/li&gt;
&lt;li&gt;給人留門 - 當有人在趕電梯，並且電梯還有空間的時候應該等一下。當然如果電梯已經門關了 90% ，那就讓它關了，不要在試圖給人留門，不然會讓電梯裡的人反感。
&lt;/li&gt;
&lt;li&gt;不打電話 - 不要在電梯里打電話！
&lt;/li&gt;
&lt;li&gt;關電梯門 - 確保沒有人上電梯的時候才可以關門。
&lt;/li&gt;
&lt;li&gt;站在哪兒 - 盡量靠墻站，電梯上升的時候，樓層越高站的越靠近裡面。站在按鈕邊上的人要負責電梯開關。
&lt;/li&gt;
&lt;li&gt;按對按鈕 - 確認清楚了再按樓層按鈕。如果你不小心按錯了樓層，那隻有等到了那一層看看是否有人出去，不然你只好自己下電梯了。
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-sec-2&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;sec-2&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;2&lt;/span&gt; 出電梯 Exiting&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-2&quot;&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;女士優先 - 男士應該讓女士先出電梯，除非是擋住了門。
&lt;/li&gt;
&lt;li&gt;電梯到達 - 如果電梯很擁擠，要提醒他人你要出電梯，并表達歉意。不建議直接擠出來。
&lt;/li&gt;
&lt;li&gt;給人讓道 - 電梯到達的時候，如果裡面有人出來，要盡量給他留出道，如果非常擁擠，可以考慮先下電梯再上去。
&lt;/li&gt;
&lt;li&gt;關門按鈕 - 看了網上一些文章，沒有找到出了電梯門，要幫人按關門按鈕這麼一說。還是看情況而定吧。
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-sec-3&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;sec-3&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;3&lt;/span&gt; 參考鏈接&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-3&quot;&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;&lt;a href=&quot;http://www.elevatordesigninfo.com/elevator-etiquette-rules-for-boarding-and-exiting&quot;&gt;Elevator Etiquette: Rules for Boarding and Exiting&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.examiner.com/article/unwritten-rules-of-the-office-elevator-etiquette&quot;&gt;Unwritten rules of the office: Elevator etiquette&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
</content>
 </entry>
 
 <entry>
   <title>Emacs coding system for correctly copy and paste Chinese characters</title>
   <link href="http://kimi.im/2014-04-20-emacs-coding-system-for-chinese"/>
   <updated>2014-04-20T00:00:00+00:00</updated>
   <id>http://kimi.im/emacs-coding-system-for-chinese</id>
   <content type="html">&lt;p&gt;
As I&apos;m using emacs under Windows 7, I want to correctly copy and paste
Chinese characters from or to emacs. The important settings are
language environment variables. Following code snippet is used to set
the default language environment in English and make use of utf-8
coding system as much as possible, while leaving the clipboard coding
system as utf-16le, which is the coding system used in Windows system
core:
&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;
Windows作業系統核心中的字元表示為UTF-16小尾序，可以正確處理、顯示以4位元組儲存的字元。&lt;sup&gt;&lt;a id=&quot;fnr.1&quot; name=&quot;fnr.1&quot; class=&quot;footref&quot; href=&quot;#fn.1&quot;&gt;1&lt;/a&gt;&lt;/sup&gt;
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;div class=&quot;org-src-container&quot;&gt;

&lt;pre class=&quot;src src-elisp&quot;&gt;(set-locale-environment &lt;span style=&quot;color: #3a5fcd;&quot;&gt;&quot;English&quot;&lt;/span&gt;)
(set-language-environment &apos;English)
(prefer-coding-system &apos;utf-8)
(set-file-name-coding-system &apos;gbk)
(set-buffer-file-coding-system &apos;utf-8)
(set-keyboard-coding-system &apos;utf-8)
(set-terminal-coding-system &apos;utf-8)
(set-selection-coding-system &apos;utf-8)
(set-clipboard-coding-system &apos;utf-16le)
(set-w32-system-coding-system &apos;utf-8)
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
One benefit of using utf-16e while not chinese-gbk or chinese-gb18030
for clipboard coding system is that the special characters from French
and German are correctly copy/paste from/to emacs. While with
chinese-gbk/chinese-gb18030, only Chinese characters are encoded
correct, characters such as ß, ê are not displayed as expected when
copy from web browser.
&lt;/p&gt;

&lt;p&gt;
Also please pay attention that the file name coding system is using
gbk which is used to display file names which Chinese
characters. Windows weirdly use gbk for file name coding other than
utf-16le. It is a painful experience to realize this issue.
&lt;/p&gt;
&lt;div id=&quot;footnotes&quot;&gt;
&lt;h2 class=&quot;footnotes&quot;&gt;Footnotes: &lt;/h2&gt;
&lt;div id=&quot;text-footnotes&quot;&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.1&quot; name=&quot;fn.1&quot; class=&quot;footnum&quot; href=&quot;#fnr.1&quot;&gt;1&lt;/a&gt;&lt;/sup&gt; &lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;http://zh.wikipedia.org/zh-tw/UTF-16&quot;&gt;http://zh.wikipedia.org/zh-tw/UTF-16&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;


&lt;/div&gt;
&lt;/div&gt;
</content>
 </entry>
 
 <entry>
   <title>單詞本：德語單詞 die Krise</title>
   <link href="http://kimi.im/2014-04-19-deutsch-die-Krise"/>
   <updated>2014-04-19T00:00:00+00:00</updated>
   <id>http://kimi.im/deutsch-die-Krise</id>
   <content type="html">&lt;p&gt;
最近烏克蘭危機持續不斷報道，看 Tagesschau&lt;sup&gt;&lt;a id=&quot;fnr.1&quot; name=&quot;fnr.1&quot; class=&quot;footref&quot; href=&quot;#fn.1&quot;&gt;1&lt;/a&gt;&lt;/sup&gt; 新聞幾乎每天出現 Ukraine-Krise。今天就來學習學習 Krise 這個單詞以及相關的衍生詞。
&lt;/p&gt;

&lt;a href=&quot;https://www.flickr.com/photos/kimim-photo/13013608203/&quot; title=&quot;Flickr 上 kimim-photo 的 DSCF4393&quot;&gt;&lt;img src=&quot;https://farm8.staticflickr.com/7445/13013608203_ca7a885700_z.jpg&quot; width=&quot;640&quot; height=&quot;427&quot; alt=&quot;DSCF4393&quot;&gt;&lt;/a&gt;

&lt;div id=&quot;outline-container-sec-1&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;sec-1&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;1&lt;/span&gt; 單詞定義&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-1&quot;&gt;
&lt;p&gt;
Krise
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;instabiler Zustand&lt;sup&gt;&lt;a id=&quot;fnr.2&quot; name=&quot;fnr.2&quot; class=&quot;footref&quot; href=&quot;#fn.2&quot;&gt;2&lt;/a&gt;&lt;/sup&gt;，不穩定的狀態。
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
在古希腊語中有這個詞 κρίσις (krísis) &lt;sup&gt;&lt;a id=&quot;fnr.3&quot; name=&quot;fnr.3&quot; class=&quot;footref&quot; href=&quot;#fn.3&quot;&gt;3&lt;/a&gt;&lt;/sup&gt;，意思是
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;decision, determination, judgment
&lt;/li&gt;
&lt;li&gt;trial, sentence, accusation
&lt;/li&gt;
&lt;li&gt;quarrel, dispute
&lt;/li&gt;
&lt;li&gt;turning point or decisive point of disease progression
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
可見該詞本身有轉機的意思。所以危機這個中文翻譯還是非常恰到好處的，有危也有機，危中有機，機在危中。
&lt;/p&gt;

&lt;p&gt;
法語單詞 la crise 和英語單詞 crisis 也是直接從希腊語 κρίσις 來的。德語可能更直接的從法語引入。詞彙發展綫索可能如下：
&lt;/p&gt;

&lt;p class=&quot;verse&quot;&gt;
κρίσις -&amp;gt; crisis&lt;sup&gt;(en)&lt;/sup&gt;;&lt;br  /&gt;
κρίσις -&amp;gt; la crise&lt;sup&gt;(fr)&lt;/sup&gt; -&amp;gt; die Krise&lt;sup&gt;(de)&lt;/sup&gt;;&lt;br  /&gt;
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-sec-2&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;sec-2&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;2&lt;/span&gt; 詞彙擴展&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-2&quot;&gt;
&lt;p&gt;
die Beziehungskrise
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;(1) Störung einer Lebenspartnerschaft, meist hervorgerufen durch anderweitige Sexualkontakte oder Alltagsgewöhnung in der Partnerschaft. 由於日常行爲習慣或兩性關係引起的關係失調。die Störung: disorder. meist: usually. hervorgerufen: caused. durch: by. anderweitige Sexualkontakte: 第三者關係。 (2) übertragen: Probleme im Verhältnis mit Organisationen oder Staaten. 國家和組織之間的關係危機。Verhältnis: relation, ratio, relationship, affair (adulterous relationship).
&lt;/li&gt;
&lt;li&gt;&amp;lt;例句&amp;gt; Die beiden haben ihre Beziehungskrise überstanden und leben jetzt wieder glücklich zusammen. überstanden: survived. glücklich: lucky, happy.
&lt;/li&gt;
&lt;li&gt;&amp;lt;例句&amp;gt; Der Vater meiner Kinder wollte selbst Karriere machen, das war ein wesentlicher Grund für unsere Beziehungskrise.
&lt;/li&gt;
&lt;li&gt;Wenn eine Beziehung unausgeglichen ist entsteht eine Beziehungskrise. Die Beziehungskrise ist oft das Ende der Beziehung, welches ab und zu sogar tödlich für einen oder beide Beziehungsteilnehmer enden kann. &lt;sup&gt;&lt;a id=&quot;fnr.4&quot; name=&quot;fnr.4&quot; class=&quot;footref&quot; href=&quot;#fn.4&quot;&gt;4&lt;/a&gt;&lt;/sup&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
die Ehekrise
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;mariage crisis. le crise conjugale&lt;sup&gt;(fr)&lt;/sup&gt;&lt;sup&gt;&lt;a id=&quot;fnr.5&quot; name=&quot;fnr.5&quot; class=&quot;footref&quot; href=&quot;#fn.5&quot;&gt;5&lt;/a&gt;&lt;/sup&gt;. 婚姻危機。
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
die Finanzkrise
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;Störung oder Zusammenbruch des Finanzsystems. Zusammenbruch: collapse. 金融危機。la crise financière&lt;sup&gt;(fr)&lt;/sup&gt;
&lt;/li&gt;
&lt;li&gt;2008 begann die größte Finanzkrise seit dem Zweiten Weltkrieg.
&lt;/li&gt;
&lt;li&gt;Die Finanzkrise ab 2007 ist eine globale Banken- und Finanzkrise als Teil der Weltwirtschaftskrise ab 2007, die im Sommer 2007 als US-Immobilienkrise (auch Subprimekrise) begann. &lt;sup&gt;&lt;a id=&quot;fnr.6&quot; name=&quot;fnr.6&quot; class=&quot;footref&quot; href=&quot;#fn.6&quot;&gt;6&lt;/a&gt;&lt;/sup&gt; Weltwirtschaftskrise: Great Depression. 大蕭條。
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
die Identitätskrise
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;Krise, verursacht durch ein unsicheres Selbstbild. 定位危機，角色危機，身份危機。
&lt;/li&gt;
&lt;li&gt;Er hat die typisch deutsche Identitätskrise. Ich weiß nicht, ob das stimmt, vielleicht ist es nur eine literarische Idee, ein Bild, um seine Identitätskrise besser auszudrücken.&lt;sup&gt;&lt;a id=&quot;fnr.7&quot; name=&quot;fnr.7&quot; class=&quot;footref&quot; href=&quot;#fn.7&quot;&gt;7&lt;/a&gt;&lt;/sup&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
die Lebenskrise
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;nach dem Ende eines Krieges auftretende Krise
&lt;/li&gt;
&lt;li&gt;Viele Frauen legen sich bei einer Lebenskrise eine neue Frisur zu.
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
die Schuldenkrise
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;durch zu hohe Schulden verursachte Krise. 債務危機。debt crisis&lt;sup&gt;(en)&lt;/sup&gt;.
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
die Weltkrise
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;eine Krisensituation, die die gesamte Erde oder große Teile davon betrifft. Erde: 地球。
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
die Wirtschaftskrise
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;economic crisis&lt;sup&gt;(en)&lt;/sup&gt;, la crise éconmique&lt;sup&gt;(fr)&lt;/sup&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
die Krisenbewältigung
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;die Bewältigung einer Krise. 危機之克服。die Bewältigung: 完成，结束，执行，克服，摆脱。
&lt;/li&gt;
&lt;li&gt;&amp;lt;例句&amp;gt; Aufruf an Kanzlerin Angela Merkel zur Initiierung einer Krisengruppe auf höchster politischer Ebene zur Krisenbewältigung in der Ukraine.&lt;sup&gt;&lt;a id=&quot;fnr.8&quot; name=&quot;fnr.8&quot; class=&quot;footref&quot; href=&quot;#fn.8&quot;&gt;8&lt;/a&gt;&lt;/sup&gt; die Initiierung: 开始。开端。initiation, beginning, commencement. die Ebene: plane, level.
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
das Krisentreffen
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;Treffen, das aufgrund einer Krise stattfindet und dazu dient, sich über Maßnahmen zur Lösung der Krise auszutauschen. aufgrund: on the basis of, as a result of. Maßnahmen: measurement. auszutauschen: exchange. crisis meeting&lt;sup&gt;(en)&lt;/sup&gt;.
&lt;/li&gt;
&lt;li&gt;Ein nächtliches Krisentreffen in der Ukraine ist ergebnislos geblieben. &lt;sup&gt;&lt;a id=&quot;fnr.9&quot; name=&quot;fnr.9&quot; class=&quot;footref&quot; href=&quot;#fn.9&quot;&gt;9&lt;/a&gt;&lt;/sup&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
der Krisenstab
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;Personengruppe, die zur Lösung von Notsituationen zusammenkommt. 危機小組，緊急行動隊，應急工作隊，危機管理團隊。cabinet de crise&lt;sup&gt;(fr)&lt;/sup&gt;, emergency task force&lt;sup&gt;(en)&lt;/sup&gt;, crisis management group&lt;sup&gt;(en)&lt;/sup&gt;.
&lt;/li&gt;
&lt;li&gt;Als Krisenstab bezeichnet man eine Stabsstelle innerhalb einer Organisation zum Notfall- oder Katastrophenschutz.&lt;sup&gt;&lt;a id=&quot;fnr.10&quot; name=&quot;fnr.10&quot; class=&quot;footref&quot; href=&quot;#fn.10&quot;&gt;10&lt;/a&gt;&lt;/sup&gt; innerhalb: within. Notfall: emergency.
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
krisefest, krisensicher
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;im Fall einer Krise nicht bedroht. gegen Krisen gesichert, nicht anfällig für Krisen. 抗危機的。bedrotht: threatened. crisis-proof&lt;sup&gt;(en)&lt;/sup&gt;, panic-proof&lt;sup&gt;(en)&lt;/sup&gt;.
&lt;/li&gt;
&lt;li&gt;Die Tests sollen überprüfen, wie krisenfest die Kreditinstitute sind.&lt;sup&gt;&lt;a id=&quot;fnr.11&quot; name=&quot;fnr.11&quot; class=&quot;footref&quot; href=&quot;#fn.11&quot;&gt;11&lt;/a&gt;&lt;/sup&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;footnotes&quot;&gt;
&lt;h2 class=&quot;footnotes&quot;&gt;Footnotes: &lt;/h2&gt;
&lt;div id=&quot;text-footnotes&quot;&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.1&quot; name=&quot;fn.1&quot; class=&quot;footnum&quot; href=&quot;#fnr.1&quot;&gt;1&lt;/a&gt;&lt;/sup&gt; &lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;http://www.tagesschau.de/&quot;&gt;http://www.tagesschau.de/&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.2&quot; name=&quot;fn.2&quot; class=&quot;footnum&quot; href=&quot;#fnr.2&quot;&gt;2&lt;/a&gt;&lt;/sup&gt; &lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;http://de.wiktionary.org/wiki/Krise&quot;&gt;http://de.wiktionary.org/wiki/Krise&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.3&quot; name=&quot;fn.3&quot; class=&quot;footnum&quot; href=&quot;#fnr.3&quot;&gt;3&lt;/a&gt;&lt;/sup&gt; &lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;http://en.wiktionary.org/wiki/%25CE%25BA%25CF%2581%25CE%25AF%25CF%2583%25CE%25B9%25CF%2582&quot;&gt;κρίσις&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.4&quot; name=&quot;fn.4&quot; class=&quot;footnum&quot; href=&quot;#fnr.4&quot;&gt;4&lt;/a&gt;&lt;/sup&gt; &lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;http://www.stupidedia.org/stupi/Beziehungskrise&quot;&gt;http://www.stupidedia.org/stupi/Beziehungskrise&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.5&quot; name=&quot;fn.5&quot; class=&quot;footnum&quot; href=&quot;#fnr.5&quot;&gt;5&lt;/a&gt;&lt;/sup&gt; &lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;http://www.psychonet.fr/2001/08/16/1321-crise-conjugale-quelle-attitude-adopter&quot;&gt;Crise conjugale: quelle attitude adopter?&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.6&quot; name=&quot;fn.6&quot; class=&quot;footnum&quot; href=&quot;#fnr.6&quot;&gt;6&lt;/a&gt;&lt;/sup&gt; &lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;http://de.wikipedia.org/wiki/Finanzkrise_ab_2007&quot;&gt;http://de.wikipedia.org/wiki/Finanzkrise_ab_2007&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.7&quot; name=&quot;fn.7&quot; class=&quot;footnum&quot; href=&quot;#fnr.7&quot;&gt;7&lt;/a&gt;&lt;/sup&gt; &lt;p class=&quot;footpara&quot;&gt;
Die Zeit, 05.06.2009, Nr. 24. &lt;a href=&quot;http://www.dwds.de/&quot;&gt;http://www.dwds.de/&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.8&quot; name=&quot;fn.8&quot; class=&quot;footnum&quot; href=&quot;#fnr.8&quot;&gt;8&lt;/a&gt;&lt;/sup&gt; &lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;http://ukraine-nachrichten.de/aufruf-an-kanzlerin-angela-merkel-zur-initiierung-einer-krisengruppe-auf-hoechster-politischer-ebene-zur-krisenbewaeltigung-in-der-ukraine_3922_pressemitteilungen&quot;&gt;ukraine-nachrichten.de&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.9&quot; name=&quot;fn.9&quot; class=&quot;footnum&quot; href=&quot;#fnr.9&quot;&gt;9&lt;/a&gt;&lt;/sup&gt; &lt;p class=&quot;footpara&quot;&gt;
&lt;i&gt;www.huffingtonpost.de&lt;/i&gt;
&lt;/p&gt;&lt;/div&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.10&quot; name=&quot;fn.10&quot; class=&quot;footnum&quot; href=&quot;#fnr.10&quot;&gt;10&lt;/a&gt;&lt;/sup&gt; &lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;http://de.wikipedia.org/wiki/Krisenstab&quot;&gt;http://de.wikipedia.org/wiki/Krisenstab&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.11&quot; name=&quot;fn.11&quot; class=&quot;footnum&quot; href=&quot;#fnr.11&quot;&gt;11&lt;/a&gt;&lt;/sup&gt; &lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;http://www.n-tv.de/wirtschaft/13-deutsche-Institute-im-Stresstest-article3058906.html&quot;&gt;Wie krisenfest sind die Banken?&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;


&lt;/div&gt;
&lt;/div&gt;
</content>
 </entry>
 
 <entry>
   <title>How to input special German and French characters in emacs</title>
   <link href="http://kimi.im/2014-04-11-german-and-french-in-emacs"/>
   <updated>2014-04-11T00:00:00+00:00</updated>
   <id>http://kimi.im/german-and-french-in-emacs</id>
   <content type="html">&lt;p&gt;
I&apos;m using &lt;code&gt;C-x 8&lt;/code&gt; to input special characters from German and French. I will update this page when I find new easy way to input these characters.
&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;
C-x 8 RET (translated from C-x 8 &amp;lt;return&amp;gt;) runs the command
insert-char, which is an interactive built-in function in `C source
code&apos;.
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;div id=&quot;outline-container-sec-1&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;sec-1&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;1&lt;/span&gt; German:&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-1&quot;&gt;
&lt;dl class=&quot;org-dl&quot;&gt;
&lt;dt&gt; ä &lt;/dt&gt;&lt;dd&gt;C-x 8 &quot;a
&lt;/dd&gt;
&lt;dt&gt; ö &lt;/dt&gt;&lt;dd&gt;C-x 8 &quot;o
&lt;/dd&gt;
&lt;dt&gt; ü &lt;/dt&gt;&lt;dd&gt;C-x 8 &quot;u
&lt;/dd&gt;
&lt;dt&gt; ß &lt;/dt&gt;&lt;dd&gt;C-x 8 &quot;s
&lt;/dd&gt;
&lt;/dl&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-sec-2&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;sec-2&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;2&lt;/span&gt; French：&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-2&quot;&gt;
&lt;dl class=&quot;org-dl&quot;&gt;
&lt;dt&gt; à &lt;/dt&gt;&lt;dd&gt;C-x 8 `a
&lt;/dd&gt;
&lt;dt&gt; â &lt;/dt&gt;&lt;dd&gt;C-x 8 ^a
&lt;/dd&gt;
&lt;dt&gt; ä &lt;/dt&gt;&lt;dd&gt;C-x 8 &quot;a
&lt;/dd&gt;
&lt;dt&gt; æ &lt;/dt&gt;&lt;dd&gt;C-x 8 RET LATIN SMALL LETTER A E
&lt;/dd&gt;
&lt;dt&gt; é &lt;/dt&gt;&lt;dd&gt;C-x 8 &apos;e
&lt;/dd&gt;
&lt;dt&gt; è &lt;/dt&gt;&lt;dd&gt;C-x 8 `e
&lt;/dd&gt;
&lt;dt&gt; ê &lt;/dt&gt;&lt;dd&gt;C-x 8 ^e
&lt;/dd&gt;
&lt;dt&gt; ë &lt;/dt&gt;&lt;dd&gt;C-x 8 &quot;e
&lt;/dd&gt;
&lt;dt&gt; î &lt;/dt&gt;&lt;dd&gt;C-x 8 ^i
&lt;/dd&gt;
&lt;dt&gt; ï &lt;/dt&gt;&lt;dd&gt;C-x 8 &quot;i
&lt;/dd&gt;
&lt;dt&gt; ô &lt;/dt&gt;&lt;dd&gt;C-x 8 ^o
&lt;/dd&gt;
&lt;dt&gt; œ &lt;/dt&gt;&lt;dd&gt;C-x 8 RET 153 RET
&lt;/dd&gt;
&lt;dt&gt; ù &lt;/dt&gt;&lt;dd&gt;C-x 8 `u
&lt;/dd&gt;
&lt;dt&gt; û &lt;/dt&gt;&lt;dd&gt;C-x 8 ^u
&lt;/dd&gt;
&lt;dt&gt; ü &lt;/dt&gt;&lt;dd&gt;C-x 8 &quot;u
&lt;/dd&gt;
&lt;dt&gt; ç &lt;/dt&gt;&lt;dd&gt;C-x 8 ,c
&lt;/dd&gt;
&lt;/dl&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-sec-3&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;sec-3&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;3&lt;/span&gt; Others&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-3&quot;&gt;
&lt;dl class=&quot;org-dl&quot;&gt;
&lt;dt&gt; € &lt;/dt&gt;&lt;dd&gt;C-x 8 RET EURO SIGH
&lt;/dd&gt;
&lt;/dl&gt;
&lt;/div&gt;
&lt;/div&gt;
</content>
 </entry>
 
 <entry>
   <title>單詞本：德語單詞 verteidigen</title>
   <link href="http://kimi.im/2014-04-06-deutsch-verteidigen"/>
   <updated>2014-04-06T00:00:00+00:00</updated>
   <id>http://kimi.im/deutsch-verteidigen</id>
   <content type="html">&lt;p&gt;
那天看德語新聞，看到 Verteidigungsminister 國防部長什麽的。就找來 verteidigen 單詞來調查學習一番。
&lt;/p&gt;

&lt;a href=&quot;https://www.flickr.com/photos/kimim-photo/12405410903/&quot; title=&quot;Flickr 上 kimim-photo 的 西湖文化廣場銀泰&quot;&gt;&lt;img src=&quot;https://farm3.staticflickr.com/2839/12405410903_3f183c7a6d_z.jpg&quot; width=&quot;640&quot; height=&quot;427&quot; alt=&quot;西湖文化廣場銀泰&quot;&gt;&lt;/a&gt;

&lt;div id=&quot;outline-container-orgheadline1&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgheadline1&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;1&lt;/span&gt; 單詞釋義&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-1&quot;&gt;
&lt;p&gt;
verteidigen
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;保衛，防衛，捍衛&lt;sup&gt;zh&lt;/sup&gt; ，to defend&lt;sup&gt;en&lt;/sup&gt;, to defend oneself&lt;sup&gt;en&lt;/sup&gt;, sich selbst verteidigen&lt;sup&gt;de&lt;/sup&gt;, to conduct one&apos;s own defence&lt;sup&gt;en&lt;/sup&gt;. sich verteidigen&lt;sup&gt;de&lt;/sup&gt;, se défender&lt;sup&gt;fr&lt;/sup&gt;.&lt;/li&gt;
&lt;li&gt;为&amp;#x2026;辩护&lt;/li&gt;
&lt;li&gt;[律](出庭)为&amp;#x2026;辩护&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
這個詞由 ver + teidigen 組成。
&lt;/p&gt;

&lt;p&gt;
德語前綴 ver- 有幾個不同的作用&lt;sup&gt;&lt;a id=&quot;fnr.1&quot; class=&quot;footref&quot; href=&quot;#fn.1&quot;&gt;1&lt;/a&gt;&lt;/sup&gt;：
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;表示動作的完善完成，突出表現在那些具有地點概念的動詞中
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;heilen 醫治 → verheilen 治愈&lt;/li&gt;
&lt;li&gt;reisen 旅行 → verreisen 旅遊，旅行在外&lt;/li&gt;
&lt;li&gt;wehen 吹 → verwehen 吹走&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;有加工、完善的意思
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;arbeiten 工作 → verarbeiten 加工&lt;/li&gt;
&lt;li&gt;mauern 砌砖 → vermauern 堵牆，用磚砌沒&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;添加到名詞，形容詞前面，成爲某樣東西，或成爲某种狀態
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;der Film 電影 → verfilmen 拍攝成電影&lt;/li&gt;
&lt;li&gt;der Stein 石頭 → versteinern 變成石頭&lt;/li&gt;
&lt;li&gt;deutlich 清晰地 → verdeutlichen 使明瞭&lt;/li&gt;
&lt;li&gt;arm 貧窮的 → verarmen 變窮&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;表示一個動作的漸漸終止
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;verklingen 聲音漸漸微弱直至消失&lt;/li&gt;
&lt;li&gt;verhallen 回響漸漸變輕逐漸消失&lt;/li&gt;
&lt;li&gt;verschwinden 消失&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;表示動作的錯誤
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;drehen 旋轉 → verdrehen 扭曲&lt;/li&gt;
&lt;li&gt;kennen 認識 → verkennen 誤解&lt;/li&gt;
&lt;li&gt;laufen 走，跑 → sich verlaufen 迷路&lt;/li&gt;
&lt;li&gt;rechnen 計算 → sich verrechnen 算錯&lt;/li&gt;
&lt;li&gt;sehen 看 → sich versehen 看錯&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;表達壞事或者不良的感覺
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;verpesten 污染&lt;/li&gt;
&lt;li&gt;verseuchen 傳染流行病&lt;/li&gt;
&lt;li&gt;versalzen 放鹽過多&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
根據 wiktionary 的解釋&lt;sup&gt;&lt;a id=&quot;fnr.2&quot; class=&quot;footref&quot; href=&quot;#fn.2&quot;&gt;2&lt;/a&gt;&lt;/sup&gt;：
&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;
&quot;defend&quot;, MHG verteidingen from vertagedingen, from teidinc, tagedinc (originally judgment, then talk, chatter, so Narrenteiding foolish chatter) of tac &quot;day&quot; and ding &quot;negotiation&quot;
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;
teidigen 來自 teidinc/tagedinc, 意思大概是判斷，閒聊，瞎扯的意思。
&lt;/p&gt;

&lt;p&gt;
所以 ver-teidigen 可能是過多的瞎扯，和 versalzen （放過多的鹽）差不多吧。過多的瞎扯就衍生為辯論，辯護。
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgheadline2&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgheadline2&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;2&lt;/span&gt; 詞彙擴展&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-2&quot;&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;der Verteidigungsminister&lt;sup&gt;de&lt;/sup&gt;, die Verteidigungsministerin&lt;sup&gt;de&lt;/sup&gt; (A female minister of defence), minister of defence&lt;sup&gt;en&lt;/sup&gt;, le ministre de la défense, 國防部長&lt;/li&gt;
&lt;li&gt;das Verteidigungsministerium&lt;sup&gt;de&lt;/sup&gt;, ministry of defense, government department responsible for the security and safety of the country, ministry headed by the Minister of Security, le ministère de la Défense&lt;sup&gt;fr&lt;/sup&gt;, 國防部。&lt;/li&gt;
&lt;li&gt;Verteidigungskrieg, defensive warfare, 防禦戰。&lt;/li&gt;
&lt;li&gt;Verteidigungsbündnis&lt;sup&gt;de&lt;/sup&gt;, defence alliance&lt;sup&gt;en&lt;/sup&gt;, alliance de défense&lt;sup&gt;fr&lt;/sup&gt;, 防禦聯盟。&lt;/li&gt;
&lt;li&gt;etw mit Zähnen und Klauen verteidigen, to defend sth tooth and nail. &quot;My job is to defend you tooth and nail. You are my one and only responsibility. I have to fight as hard as I can to get your case dismissed&lt;sup&gt;&lt;a id=&quot;fnr.3&quot; class=&quot;footref&quot; href=&quot;#fn.3&quot;&gt;3&lt;/a&gt;&lt;/sup&gt;.&quot; 這句話摘自一個律師的 blog，意思是律師的工作是用盡任何手段去為你辯護。to use a lot of effort to oppose someone or achieve something&lt;sup&gt;&lt;a id=&quot;fnr.4&quot; class=&quot;footref&quot; href=&quot;#fn.4&quot;&gt;4&lt;/a&gt;&lt;/sup&gt;.&lt;/li&gt;
&lt;li&gt;Verteidigungsschrift&lt;sup&gt;de&lt;/sup&gt;, apology, vindication&lt;sup&gt;en&lt;/sup&gt;, 辯詞，辯護信，辯護函。&lt;/li&gt;
&lt;li&gt;Verteidigungsmittel&lt;sup&gt;de&lt;/sup&gt;, means of defence&lt;sup&gt;en&lt;/sup&gt;. Mittel: agency, agent, average, means. instrument de défense&lt;sup&gt;fr&lt;/sup&gt;, les moyens de défense&lt;sup&gt;fr&lt;/sup&gt;. 辯護手段。&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgheadline3&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgheadline3&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;3&lt;/span&gt; 例句&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-3&quot;&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;&quot;Wenn Russland Truppen schickt, verteidigen wir uns&quot;&lt;sup&gt;&lt;a id=&quot;fnr.5&quot; class=&quot;footref&quot; href=&quot;#fn.5&quot;&gt;5&lt;/a&gt;&lt;/sup&gt;&lt;/li&gt;
&lt;li&gt;Will der Verteidigungsminister sein Land verteidigen, geht er auf der Stelle&lt;sup&gt;&lt;a id=&quot;fnr.6&quot; class=&quot;footref&quot; href=&quot;#fn.6&quot;&gt;6&lt;/a&gt;&lt;/sup&gt;&lt;/li&gt;
&lt;li&gt;Kann ich mich vor Gericht selbst verteidigen?&lt;sup&gt;&lt;a id=&quot;fnr.7&quot; class=&quot;footref&quot; href=&quot;#fn.7&quot;&gt;7&lt;/a&gt;&lt;/sup&gt;&lt;/li&gt;
&lt;li&gt;Menschen neigen dazu, sowohl schlechtlaufende Ehen als auch ungerechte Systeme zu verteidigen. Aber sie tun das nicht automatisch.&lt;sup&gt;&lt;a id=&quot;fnr.8&quot; class=&quot;footref&quot; href=&quot;#fn.8&quot;&gt;8&lt;/a&gt;&lt;/sup&gt;&lt;/li&gt;
&lt;li&gt;Wir verteidigen unsere eigene Persönlichkeit, unsere Auffassungen, unsere Zivilisation&lt;sup&gt;de&lt;/sup&gt;. Nous protégeons notre propre personne, nos conceptions, notre civilisation&lt;sup&gt;fr&lt;/sup&gt;.&lt;/li&gt;
&lt;li&gt;Die Meinungs-, Versammlungs- und Religionsfreiheit muss in der ganzen Welt verteidigt werden&lt;sup&gt;de&lt;/sup&gt;. La liberté d’ expression, de rassemblement et de culte doit être défendue dans le monde entier&lt;sup&gt;fr&lt;/sup&gt;.&lt;/li&gt;
&lt;li&gt;Wir alle haben in einem gemeinsamen Europa viel zu gewinnen und zu verteidigen. Nous avons tous beaucoup de choses à obtenir et à défendre dans l&apos;Europe commune.&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;footnotes&quot;&gt;
&lt;h2 class=&quot;footnotes&quot;&gt;Footnotes: &lt;/h2&gt;
&lt;div id=&quot;text-footnotes&quot;&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.1&quot; class=&quot;footnum&quot; href=&quot;#fnr.1&quot;&gt;1&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;http://de.hujiang.com/new/p408972/&quot;&gt;德語前綴解析：ver-&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.2&quot; class=&quot;footnum&quot; href=&quot;#fnr.2&quot;&gt;2&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;http://en.wiktionary.org/wiki/verteidigen&quot;&gt;http://en.wiktionary.org/wiki/verteidigen&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.3&quot; class=&quot;footnum&quot; href=&quot;#fnr.3&quot;&gt;3&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;http://www.andrewflusche.com/blog/defending-you-tooth-and-nail/&quot;&gt;Defending You Tooth and Nail&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.4&quot; class=&quot;footnum&quot; href=&quot;#fnr.4&quot;&gt;4&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;http://idioms.thefreedictionary.com/fight+tooth+and+nail&quot;&gt;&lt;a href=&quot;http://idioms.thefreedictionary.com/fight+tooth+and+nail&quot;&gt;http://idioms.thefreedictionary.com/fight+tooth+and+nail&lt;/a&gt;&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.5&quot; class=&quot;footnum&quot; href=&quot;#fnr.5&quot;&gt;5&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;http://www.welt.de/politik/ausland/article125234601/Wenn-Russland-Truppen-schickt-verteidigen-wir-uns.html&quot;&gt;Welt.de&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.6&quot; class=&quot;footnum&quot; href=&quot;#fnr.6&quot;&gt;6&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;http://diepresse.com/home/meinung/quergeschrieben/christianortner/760751/Will-der-Verteidigungsminister-sein-Land-verteidigen-geht-er-auf&quot;&gt;DiePresse.com&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.7&quot; class=&quot;footnum&quot; href=&quot;#fnr.7&quot;&gt;7&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;http://jetzt.sueddeutsche.de/texte/anzeigen/525629/Kann-ich-mich-vor-Gericht-selbst-verteidigen&quot;&gt;jetzt.sueddeutsche.de&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.8&quot; class=&quot;footnum&quot; href=&quot;#fnr.8&quot;&gt;8&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;http://www.spiegel.de/gesundheit/psychologie/psychologie-warum-menschen-eine-diktatur-verteidigen-a-840478.html&quot;&gt;Psychologie: Warum Menschen eine Diktatur verteidigen&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;


&lt;/div&gt;
&lt;/div&gt;
</content>
 </entry>
 
 <entry>
   <title>單詞本：德語單詞 das Fisch</title>
   <link href="http://kimi.im/2014-04-02-deutsch-fisch"/>
   <updated>2014-04-02T00:00:00+00:00</updated>
   <id>http://kimi.im/deutsch-fisch</id>
   <content type="html">&lt;p&gt;
I came across the BBC German learning website.
&lt;/p&gt;

&lt;p&gt;
Fischers Fritze fischte frische Fische. &lt;sup&gt;&lt;a id=&quot;fnr.1&quot; class=&quot;footref&quot; href=&quot;#fn.1&quot;&gt;1&lt;/a&gt;&lt;/sup&gt;
&lt;/p&gt;
&lt;div id=&quot;footnotes&quot;&gt;
&lt;h2 class=&quot;footnotes&quot;&gt;Footnotes: &lt;/h2&gt;
&lt;div id=&quot;text-footnotes&quot;&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.1&quot; class=&quot;footnum&quot; href=&quot;#fnr.1&quot;&gt;1&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;http://www.bbc.co.uk/languages/german/guide/facts.shtml&quot;&gt;German tongue twister&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;


&lt;/div&gt;
&lt;/div&gt;
</content>
 </entry>
 
 <entry>
   <title>Open current working directory in cmd/mintty from emacs</title>
   <link href="http://kimi.im/2014-04-01-open-cmd-and-mintty-from-emacs"/>
   <updated>2014-04-01T00:00:00+00:00</updated>
   <id>http://kimi.im/open-cmd-and-mintty-from-emacs</id>
   <content type="html">&lt;p&gt;
When I&apos;m using doublecmd to manage files and folders, I frequently open the folder in cmd.exe or cygwin terminal mintty for managing the file with svn, git or other command line tools. Thus I create two shortcuts for the two applications: F9 and Shift-F9.
&lt;/p&gt;

&lt;p&gt;
When I press F9, an windows cmd will open for me, and Shift-F9, a mintty terminal is available for me. Cygwin mintty is a comfortable terminal in windows. Chad Austin has written a blog about Why mintty is the best terminal on Windows&lt;sup&gt;&lt;a id=&quot;fnr.1&quot; name=&quot;fnr.1&quot; class=&quot;footref&quot; href=&quot;#fn.1&quot;&gt;1&lt;/a&gt;&lt;/sup&gt;.
&lt;/p&gt;

&lt;p&gt;
The same requirement is needed when I&apos;m using emacs, thus I created two elisp function to handle this tasks. Please be reminded that these functions are only applied to windows environment.
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;

&lt;pre class=&quot;src src-elisp&quot;&gt;(global-set-key [f9] &apos;kimim/cmd)
(global-set-key  (kbd &lt;span style=&quot;color: #3a5fcd;&quot;&gt;&quot;S-&amp;lt;f9&amp;gt;&quot;&lt;/span&gt;) &apos;kimim/cyg)

(&lt;span style=&quot;color: #8b008b; font-weight: bold;&quot;&gt;defun&lt;/span&gt; &lt;span style=&quot;color: #0000cd;&quot;&gt;kimim/cmd&lt;/span&gt; ()
  &lt;span style=&quot;color: #dd1144;&quot;&gt;&quot;Open cmd.exe from emacs just as you type: Win-R, cmd, return.&quot;&lt;/span&gt;
  (interactive)
  (w32-shell-execute 
   &lt;span style=&quot;color: #3a5fcd;&quot;&gt;&quot;open&quot;&lt;/span&gt; &lt;span style=&quot;color: #3a5fcd;&quot;&gt;&quot;cmd&quot;&lt;/span&gt;))

(&lt;span style=&quot;color: #8b008b; font-weight: bold;&quot;&gt;defun&lt;/span&gt; &lt;span style=&quot;color: #0000cd;&quot;&gt;kimim/cyg&lt;/span&gt; ()  
  &lt;span style=&quot;color: #dd1144;&quot;&gt;&quot;Open cygwin mintty from emacs.&quot;&lt;/span&gt;  
  (interactive)  
  (w32-shell-execute 
   &lt;span style=&quot;color: #3a5fcd;&quot;&gt;&quot;open&quot;&lt;/span&gt; &lt;span style=&quot;color: #3a5fcd;&quot;&gt;&quot;mintty&quot;&lt;/span&gt; &lt;span style=&quot;color: #3a5fcd;&quot;&gt;&quot; -e bash&quot;&lt;/span&gt;))
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
By the way, below is the doublecmd configuration screenshot:
&lt;/p&gt;

&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;Shortcut configuration for cmd.exe:
&lt;/li&gt;
&lt;/ul&gt;
&lt;a href=&quot;https://www.flickr.com/photos/kimim-photo/13556055835/&quot; title=&quot;Flickr 上 kimim-photo 的 cmd_doublecmd&quot;&gt;&lt;img src=&quot;https://farm3.staticflickr.com/2928/13556055835_a664b0028b_z.jpg&quot; width=&quot;640&quot; height=&quot;527&quot; alt=&quot;cmd_doublecmd&quot;&gt;&lt;/a&gt;

&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;Shortcut configuration for mintty:
&lt;/li&gt;
&lt;/ul&gt;
&lt;a href=&quot;https://www.flickr.com/photos/kimim-photo/13556171823/&quot; title=&quot;Flickr 上 kimim-photo 的 mintty_doublecmd&quot;&gt;&lt;img src=&quot;https://farm4.staticflickr.com/3689/13556171823_77ffb7f4b9_z.jpg&quot; width=&quot;640&quot; height=&quot;527&quot; alt=&quot;mintty_doublecmd&quot;&gt;&lt;/a&gt;
&lt;div id=&quot;footnotes&quot;&gt;
&lt;h2 class=&quot;footnotes&quot;&gt;Footnotes: &lt;/h2&gt;
&lt;div id=&quot;text-footnotes&quot;&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.1&quot; name=&quot;fn.1&quot; class=&quot;footnum&quot; href=&quot;#fnr.1&quot;&gt;1&lt;/a&gt;&lt;/sup&gt; &lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;http://chadaustin.me/2009/10/reasons-why-mintty-is-the-best-terminal-on-windows&quot;&gt;9 Reasons Why MinTTY is the Best Terminal on Windows&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;


&lt;/div&gt;
&lt;/div&gt;
</content>
 </entry>
 
 <entry>
   <title>一個簡單主義者的裝機必備軟件</title>
   <link href="http://kimi.im/2014-03-30-setting-up-new-pc"/>
   <updated>2014-03-30T00:00:00+00:00</updated>
   <id>http://kimi.im/setting-up-new-pc</id>
   <content type="html">&lt;p&gt;
用了三年的電腦重裝係統了，從頭安裝配置一些必備軟件，做一個記錄，下次可以參考，也分享給別人。
&lt;/p&gt;

&lt;dl class=&quot;org-dl&quot;&gt;
&lt;dt&gt; Dropbox&lt;sup&gt;&lt;a id=&quot;fnr.1&quot; name=&quot;fnr.1&quot; class=&quot;footref&quot; href=&quot;#fn.1&quot;&gt;1&lt;/a&gt;&lt;/sup&gt; &lt;/dt&gt;&lt;dd&gt;用來同步我的文件和工具。
&lt;/dd&gt;
&lt;dt&gt; Box Sync&lt;sup&gt;&lt;a id=&quot;fnr.2&quot; name=&quot;fnr.2&quot; class=&quot;footref&quot; href=&quot;#fn.2&quot;&gt;2&lt;/a&gt;&lt;/sup&gt; &lt;/dt&gt;&lt;dd&gt;用來同步一些 PDF 電子書。因爲 Box 提供 50G 的免費空閒。Dropbox 只有 7G。但是 Dropbox 可以同步速度，還支持 .emacs.el 這樣以 . 開頭的文件。Box 不支持。
&lt;/dd&gt;
&lt;dt&gt; Emacs&lt;sup&gt;&lt;a id=&quot;fnr.3&quot; name=&quot;fnr.3&quot; class=&quot;footref&quot; href=&quot;#fn.3&quot;&gt;3&lt;/a&gt;&lt;/sup&gt; &lt;/dt&gt;&lt;dd&gt;編輯器，閲讀代碼，個人 GTD 任務管理，記筆記，gnus 查看郵件。在環境變量裏設置 HOME 路徑到 Dropbox 中的 Home 文件夾。這樣 emacs 的配置文件就可以在多台電腦上同步。
&lt;/dd&gt;
&lt;dt&gt; Doublecmd&lt;sup&gt;&lt;a id=&quot;fnr.4&quot; name=&quot;fnr.4&quot; class=&quot;footref&quot; href=&quot;#fn.4&quot;&gt;4&lt;/a&gt;&lt;/sup&gt; &lt;/dt&gt;&lt;dd&gt;類 Total Commander 的開源文件管理器。Doublecmd 的配置文件也都在 Dropbox 裏同步。
&lt;/dd&gt;
&lt;dt&gt; cygwin&lt;sup&gt;&lt;a id=&quot;fnr.5&quot; name=&quot;fnr.5&quot; class=&quot;footref&quot; href=&quot;#fn.5&quot;&gt;5&lt;/a&gt;&lt;/sup&gt; &lt;/dt&gt;&lt;dd&gt;在 Windows 7 下使用 GNU 軟件： gcc, make, global, mintty terminal, grep, git, svn&amp;#x2026;
&lt;/dd&gt;
&lt;dt&gt; Inkscape&lt;sup&gt;&lt;a id=&quot;fnr.6&quot; name=&quot;fnr.6&quot; class=&quot;footref&quot; href=&quot;#fn.6&quot;&gt;6&lt;/a&gt;&lt;/sup&gt; &lt;/dt&gt;&lt;dd&gt;開源的矢量繪圖軟件。
&lt;/dd&gt;
&lt;dt&gt; Paint.net&lt;sup&gt;&lt;a id=&quot;fnr.7&quot; name=&quot;fnr.7&quot; class=&quot;footref&quot; href=&quot;#fn.7&quot;&gt;7&lt;/a&gt;&lt;/sup&gt; &lt;/dt&gt;&lt;dd&gt;比 Windows 自帶的畫圖軟件好用。
&lt;/dd&gt;
&lt;dt&gt; Mozilla firefox&lt;sup&gt;&lt;a id=&quot;fnr.8&quot; name=&quot;fnr.8&quot; class=&quot;footref&quot; href=&quot;#fn.8&quot;&gt;8&lt;/a&gt;&lt;/sup&gt; &lt;/dt&gt;&lt;dd&gt;網絡瀏覽器，可以通過 firefox sync 同步插件和收藏夾。
&lt;/dd&gt;
&lt;dt&gt; WinMerge&lt;sup&gt;&lt;a id=&quot;fnr.9&quot; name=&quot;fnr.9&quot; class=&quot;footref&quot; href=&quot;#fn.9&quot;&gt;9&lt;/a&gt;&lt;/sup&gt; &lt;/dt&gt;&lt;dd&gt;文件，文件夾比對軟件。
&lt;/dd&gt;
&lt;/dl&gt;

&lt;p&gt;
以上軟件有綠色版的就用綠色版，放在 Dropbox 的 Tools 文件夾裏同步到雲端，比如 Doublecmd，Inkscape，WinMerge。不能同步的和體積龐大的，就把配置文件同步到 Dropbox 裏，比如：Emacs, Paint.net, Firefox。
&lt;/p&gt;
&lt;div id=&quot;footnotes&quot;&gt;
&lt;h2 class=&quot;footnotes&quot;&gt;Footnotes: &lt;/h2&gt;
&lt;div id=&quot;text-footnotes&quot;&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.1&quot; name=&quot;fn.1&quot; class=&quot;footnum&quot; href=&quot;#fnr.1&quot;&gt;1&lt;/a&gt;&lt;/sup&gt; &lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;https://www.dropbox.com/downloading&quot;&gt;https://www.dropbox.com/downloading&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.2&quot; name=&quot;fn.2&quot; class=&quot;footnum&quot; href=&quot;#fnr.2&quot;&gt;2&lt;/a&gt;&lt;/sup&gt; &lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;https://sites.box.com/sync4&quot;&gt;https://sites.box.com/sync4&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.3&quot; name=&quot;fn.3&quot; class=&quot;footnum&quot; href=&quot;#fnr.3&quot;&gt;3&lt;/a&gt;&lt;/sup&gt; &lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;http://www.gnu.org/software/emacs/&quot;&gt;http://www.gnu.org/software/emacs/&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.4&quot; name=&quot;fn.4&quot; class=&quot;footnum&quot; href=&quot;#fnr.4&quot;&gt;4&lt;/a&gt;&lt;/sup&gt; &lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;http://doublecmd.sourceforge.net/&quot;&gt;http://doublecmd.sourceforge.net/&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.5&quot; name=&quot;fn.5&quot; class=&quot;footnum&quot; href=&quot;#fnr.5&quot;&gt;5&lt;/a&gt;&lt;/sup&gt; &lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;http://www.cygwin.com/&quot;&gt;http://www.cygwin.com/&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.6&quot; name=&quot;fn.6&quot; class=&quot;footnum&quot; href=&quot;#fnr.6&quot;&gt;6&lt;/a&gt;&lt;/sup&gt; &lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;http://inkscape.org/en/download/&quot;&gt;http://inkscape.org/en/download/&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.7&quot; name=&quot;fn.7&quot; class=&quot;footnum&quot; href=&quot;#fnr.7&quot;&gt;7&lt;/a&gt;&lt;/sup&gt; &lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;http://www.getpaint.net/download.html&quot;&gt;http://www.getpaint.net/download.html&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.8&quot; name=&quot;fn.8&quot; class=&quot;footnum&quot; href=&quot;#fnr.8&quot;&gt;8&lt;/a&gt;&lt;/sup&gt; &lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;http://www.mozilla.org/en-US/firefox/new/&quot;&gt;http://www.mozilla.org/en-US/firefox/new/&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.9&quot; name=&quot;fn.9&quot; class=&quot;footnum&quot; href=&quot;#fnr.9&quot;&gt;9&lt;/a&gt;&lt;/sup&gt; &lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;http://winmerge.org/&quot;&gt;http://winmerge.org/&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;


&lt;/div&gt;
&lt;/div&gt;
</content>
 </entry>
 
 <entry>
   <title>單詞本：德語單詞 der Sauerstoff</title>
   <link href="http://kimi.im/2014-03-29-deutsch-sauerstoff"/>
   <updated>2014-03-29T00:00:00+00:00</updated>
   <id>http://kimi.im/deutsch-sauerstoff</id>
   <content type="html">&lt;a href=&quot;https://www.flickr.com/photos/kimim-photo/13230986374/&quot; title=&quot;Flickr 上 kimim-photo 的 大華飯店的綠色草地&quot;&gt;&lt;img src=&quot;https://farm4.staticflickr.com/3820/13230986374_c4a236430d_z.jpg&quot; width=&quot;640&quot; height=&quot;427&quot; alt=&quot;大華飯店的綠色草地&quot;&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
一個星期下來堆積了很多單詞等著學習。周末的樂趣在於，它是完全屬于自己的時間。自由，隨意，無拘無束。可以享受純粹的學習的快樂。
&lt;/p&gt;

&lt;p&gt;
無意閒看到這個德語單詞 Der Sauerstoff，氧氣&lt;sup&gt;zh&lt;/sup&gt; 。直譯成英語就是 sour stuff，再直譯成中文就是酸（餿）素。日語就直譯了這個單詞：酸素（さんそ）は原子番号8の非金属元素&lt;sup&gt;&lt;a id=&quot;fnr.1&quot; class=&quot;footref&quot; href=&quot;#fn.1&quot;&gt;1&lt;/a&gt;&lt;/sup&gt;。一開始我以爲這是由於很早的時候，人們把食物放置在空氣中，食物就餿掉&lt;sup&gt;&lt;a id=&quot;fnr.2&quot; class=&quot;footref&quot; href=&quot;#fn.2&quot;&gt;2&lt;/a&gt;&lt;/sup&gt;，所以就稱呼氧氣為餿素。
&lt;/p&gt;

&lt;p&gt;
但是事實上 wikipedia 是這樣的介紹的：“氧氣（Oxygen）希臘文的意思是「酸素」，該名稱是由法國化學家拉瓦錫所起，原因是拉瓦錫錯誤地認為，所有的酸都含有這種新氣體。現在日文裡氧氣的名稱仍然是「酸素」。而台語受到台灣日治時期的影響，也以「酸素」之日語發音稱呼氧氣。&lt;sup&gt;&lt;a id=&quot;fnr.3&quot; class=&quot;footref&quot; href=&quot;#fn.3&quot;&gt;3&lt;/a&gt;&lt;/sup&gt;”
&lt;/p&gt;

&lt;div id=&quot;outline-container-orgheadline1&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgheadline1&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;1&lt;/span&gt; 詞源&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-1&quot;&gt;
&lt;p&gt;
德語的 Sauerstoff überträgt von französisch oxygène. 而法語裏得氧氣是 L&apos;oxygène 則是法國人拉瓦錫最早提出來的。
&lt;/p&gt;

&lt;p&gt;
這個詞來自古希臘文 oksus （酸； aigre, acide&lt;sup&gt;fr&lt;/sup&gt; ）和 gennan （產、生、源; qui engendre&lt;sup&gt;fr&lt;/sup&gt; ），即“酸之源”的意思。空氣中的另一部分氮氣稱爲 azote，來自希臘文 a（沒有）和 zoe（生命），是“不能維持生命”的意思&lt;sup&gt;&lt;a id=&quot;fnr.4&quot; class=&quot;footref&quot; href=&quot;#fn.4&quot;&gt;4&lt;/a&gt;&lt;/sup&gt;。
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgheadline2&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgheadline2&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;2&lt;/span&gt; 詞組，例句與格言&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-2&quot;&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;Sauerstoff ist ein chemisches Element mit dem Elementsymbol O und der Ordnungszahl 8&lt;sup&gt;&lt;a id=&quot;fnr.5&quot; class=&quot;footref&quot; href=&quot;#fn.5&quot;&gt;5&lt;/a&gt;&lt;/sup&gt;.&lt;/li&gt;
&lt;li&gt;Der Mensch braucht Sauerstoff zum atmen. 人們需要氧氣呼吸。&lt;/li&gt;
&lt;li&gt;La molécule d&apos;eau est composée d&apos;un atome d&apos;oxygène.&lt;sup&gt;fr&lt;/sup&gt; Das Wasser-Molekül besteht aus einem Sauerstoff-Atom und zwei Wasserstoff-Atomen in einer gewinkelten Anordnung.&lt;sup&gt;de&lt;/sup&gt; &lt;sup&gt;&lt;a id=&quot;fnr.6&quot; class=&quot;footref&quot; href=&quot;#fn.6&quot;&gt;6&lt;/a&gt;&lt;/sup&gt; 這裡又出現個有趣的單詞 der Wasserstoff 水素。&lt;/li&gt;
&lt;li&gt;Die Luft besteht zu fast einem Fünftel (Volumen) aus Sauerstoff. Im Normzustand ist Sauerstoff ein farbloses, geruchloses und geschmackloses Gas&lt;sup&gt;&lt;a id=&quot;fnr.7&quot; class=&quot;footref&quot; href=&quot;#fn.7&quot;&gt;7&lt;/a&gt;&lt;/sup&gt;.&lt;/li&gt;
&lt;li&gt;Gaz constitué d&apos;oxygène moléculaire (dioxygène O&lt;sub&gt;2&lt;/sub&gt; ), à conditions normales de pression et de température. Il est invisible et inodore et représente 21% de l&apos;air ambiant en volume&lt;sup&gt;&lt;a id=&quot;fnr.8&quot; class=&quot;footref&quot; href=&quot;#fn.8&quot;&gt;8&lt;/a&gt;&lt;/sup&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgheadline6&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgheadline6&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;3&lt;/span&gt; 詞彙拓展&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-3&quot;&gt;
&lt;/div&gt;&lt;div id=&quot;outline-container-orgheadline3&quot; class=&quot;outline-3&quot;&gt;
&lt;h3 id=&quot;orgheadline3&quot;&gt;&lt;span class=&quot;section-number-3&quot;&gt;3.1&lt;/span&gt; 氧氣相關衍生詞彙&lt;/h3&gt;
&lt;div class=&quot;outline-text-3&quot; id=&quot;text-3-1&quot;&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;氧化 Oxidation&lt;sup&gt;de&lt;/sup&gt; 例如： Wenn Natrium und Chlor miteinander reagieren, dann findet eine Oxidation des Natriums statt. 不過這裡 Oxidation 應該是鈉和氯化合。Die Oxidation (oder Oxydation) ist eine chemische Reaktion, bei der ein zu oxidierender Stoff (Elektronendonator) Elektronen abgibt. 反義詞： reduction, die Reduktion&lt;sup&gt;de&lt;/sup&gt;, la réduction&lt;sup&gt;fr&lt;/sup&gt;&lt;/li&gt;
&lt;li&gt;缺氧 hypoxia&lt;sup&gt;en&lt;/sup&gt;, la hypoxie&lt;sup&gt;fr&lt;/sup&gt;, die Hypoxie&lt;sup&gt;de&lt;/sup&gt; : Sauerstoffmangel im Körpergewebe. asphyxia 窒息； anoxia an- + ox(ygen) + -ia 缺氧症；
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;Hypoxie (Sauerstoffmangel) und Unreife sind für mehr als 50 Prozent der Frühsterblichkeit und für eine Vielzahl von Hirnschädigungen verantwortlich.&lt;sup&gt;&lt;a id=&quot;fnr.9&quot; class=&quot;footref&quot; href=&quot;#fn.9&quot;&gt;9&lt;/a&gt;&lt;/sup&gt;&lt;/li&gt;
&lt;li&gt;Fische leiden unter Sauerstoffmangel. Fish suffer from lack of oxygen&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;氧原子 der Sauerstoff-Atom&lt;sup&gt;de&lt;/sup&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;


&lt;div id=&quot;outline-container-orgheadline4&quot; class=&quot;outline-3&quot;&gt;
&lt;h3 id=&quot;orgheadline4&quot;&gt;&lt;span class=&quot;section-number-3&quot;&gt;3.2&lt;/span&gt; 常見幾種氣體之英法德單詞&lt;/h3&gt;
&lt;div class=&quot;outline-text-3&quot; id=&quot;text-3-2&quot;&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;氫氣，hydrogen, le hydrogène, der Wasserstoff&lt;/li&gt;
&lt;li&gt;氦氣，helium, le hélium, das Helium&lt;/li&gt;
&lt;li&gt;氟氣，fluorine, le fluor, das Fluor&lt;/li&gt;
&lt;li&gt;氖氣，neon, le néon, das Neon&lt;/li&gt;
&lt;li&gt;氮氣，azote, l&apos;azote, der Stickstoff&lt;/li&gt;
&lt;li&gt;氯氣，chlorine, le chlore, das Chlor&lt;/li&gt;
&lt;li&gt;氨氣， ammoniac,  l&apos;ammoniac, das Ammoniak&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgheadline5&quot; class=&quot;outline-3&quot;&gt;
&lt;h3 id=&quot;orgheadline5&quot;&gt;&lt;span class=&quot;section-number-3&quot;&gt;3.3&lt;/span&gt; 常見幾種氧化物(die Sauerstoffverbindungen)之英法德單詞&lt;/h3&gt;
&lt;div class=&quot;outline-text-3&quot; id=&quot;text-3-3&quot;&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;氧化物 Oxygen compound&lt;sup&gt;en&lt;/sup&gt;, le composé de l&apos;oxygène&lt;sup&gt;fr&lt;/sup&gt;, die Sauerstoffverbindungen&lt;sup&gt;de&lt;/sup&gt;&lt;/li&gt;
&lt;li&gt;二氧化碳 Carbon dioxide&lt;sup&gt;en&lt;/sup&gt;, le dioxyde de carbone&lt;sup&gt;fr&lt;/sup&gt;, das Kohlendioxid&lt;sup&gt;de&lt;/sup&gt;&lt;/li&gt;
&lt;li&gt;一氧化碳 Carbon monoxide&lt;sup&gt;en&lt;/sup&gt;, le monoxyde de carbone&lt;sup&gt;fr&lt;/sup&gt;, das Kohlenmonoxid&lt;sup&gt;de&lt;/sup&gt;&lt;/li&gt;
&lt;li&gt;雙氧水 Hydrogen peroxide&lt;sup&gt;en&lt;/sup&gt;, Wasserstoffperoxid&lt;sup&gt;de&lt;/sup&gt;, l&apos;eau oxygénée&lt;sup&gt;fr&lt;/sup&gt;. Je me suis décoloré les cheveux avec de l&apos;eau oxygénée.&lt;/li&gt;
&lt;li&gt;二氧化硫 Sulfur dioxide&lt;sup&gt;en&lt;/sup&gt;, le dioxyde de soufre&lt;sup&gt;fr&lt;/sup&gt;, das Schwefeldioxid&lt;sup&gt;de&lt;/sup&gt;. Schwefeldioxid (SO2) ist ein farbloses, stechend riechendes, wasserlösliches Gas.&lt;/li&gt;
&lt;li&gt;二氧化硅 Silica&lt;sup&gt;en&lt;/sup&gt;, la silice&lt;sup&gt;fr&lt;/sup&gt;, Kieselerde&lt;sup&gt;de&lt;/sup&gt;. Kieselsäure (oder Kieselerde) kommt in der Natur hauptsächlich als Salz (Silikat) vor. Es hat seinen natürlichen Ursprung als Mineral im Sandstein.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
今天已經搜索了夠多的氧氣相關單詞了。外面剛下了雨，空氣很清新。該出門呼吸呼吸新鮮空氣了。Gehen Sie für frischen Sauerstoff et sortez de l&apos;oxygène frais.
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;footnotes&quot;&gt;
&lt;h2 class=&quot;footnotes&quot;&gt;Footnotes: &lt;/h2&gt;
&lt;div id=&quot;text-footnotes&quot;&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.1&quot; class=&quot;footnum&quot; href=&quot;#fnr.1&quot;&gt;1&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;http://ja.wikipedia.org/wiki/%E9%85%B8%E7%B4%A0&quot;&gt;&lt;a href=&quot;http://ja.wikipedia.org/wiki/%E9%85%B8%E7%B4%A0&quot;&gt;http://ja.wikipedia.org/wiki/%E9%85%B8%E7%B4%A0&lt;/a&gt;&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.2&quot; class=&quot;footnum&quot; href=&quot;#fnr.2&quot;&gt;2&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
sour: adj. 有酸味的； 敵對的； 壞脾氣的； 彆扭的. vi. 變酸，變餿； 發酵； 厭煩； 敗壞. vt. 變壞，惡化； 使變酸；
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.3&quot; class=&quot;footnum&quot; href=&quot;#fnr.3&quot;&gt;3&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;http://zh.wikipedia.org/wiki/%E6%B0%A7#.E5.90.8D.E7.A8.B1.E7.94.B1.E4.BE.86&quot;&gt;&lt;a href=&quot;http://zh.wikipedia.org/wiki/%E6%B0%A7&quot;&gt;http://zh.wikipedia.org/wiki/%E6%B0%A7&lt;/a&gt;&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.4&quot; class=&quot;footnum&quot; href=&quot;#fnr.4&quot;&gt;4&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;http://fr.wiktionary.org/wiki/oxyg%C3%A8ne#.C3.89tymologie&quot;&gt;http://fr.wiktionary.org/wiki/oxyg%C3%A8ne#.C3.89tymologie&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.5&quot; class=&quot;footnum&quot; href=&quot;#fnr.5&quot;&gt;5&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;http://de.wikipedia.org/wiki/Sauerstoff&quot;&gt;http://de.wikipedia.org/wiki/Sauerstoff&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.6&quot; class=&quot;footnum&quot; href=&quot;#fnr.6&quot;&gt;6&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;http://www.chemgapedia.de/vsengine/vlu/vsc/de/ch/8/bc/vlu/chem_grundlagen/wasser.vlu/Page/vsc/de/ch/8/bc/chemische_grundlagen/wasser1.vscml.html&quot;&gt;Bau des Wasser-Moleküls&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.7&quot; class=&quot;footnum&quot; href=&quot;#fnr.7&quot;&gt;7&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;http://www.lenntech.de/pse/elemente/o.htm&quot;&gt;http://www.lenntech.de/pse/elemente/o.htm&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.8&quot; class=&quot;footnum&quot; href=&quot;#fnr.8&quot;&gt;8&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;http://fr.wiktionary.org/wiki/oxyg%C3%A8ne&quot;&gt;http://fr.wiktionary.org/wiki/oxyg%C3%A8ne&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.9&quot; class=&quot;footnum&quot; href=&quot;#fnr.9&quot;&gt;9&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;http://de.wikipedia.org/wiki/Hypoxie&quot;&gt;http://de.wikipedia.org/wiki/Hypoxie&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;


&lt;/div&gt;
&lt;/div&gt;
</content>
 </entry>
 
 <entry>
   <title>打開 M$ Word 文檔的時候自動更新域</title>
   <link href="http://kimi.im/2014-03-17-update-field-when-open"/>
   <updated>2014-03-17T00:00:00+00:00</updated>
   <id>http://kimi.im/update-field-when-open</id>
   <content type="html">&lt;p&gt;
今天編輯設計文檔的時候，每次更新了文檔標題信息后要選中標題域（Field）點擊更新才可以更新到最新的字符。Google 了一下發現一個 VBS 腳本&lt;sup&gt;&lt;a id=&quot;fnr.1&quot; name=&quot;fnr.1&quot; class=&quot;footref&quot; href=&quot;#fn.1&quot;&gt;1&lt;/a&gt;&lt;/sup&gt;可以做到每次打開文檔的時候自動把文檔内的域更新。
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;

&lt;pre class=&quot;src src-vb&quot;&gt;Sub AutoOpen()
    &apos;
    &apos; AutoOpen Macro
    &apos;
    &apos;
    Dim aStory As Range
    Dim aField As Field

    &apos; Check that document is not in Protected View before doing anything
    If Application.ActiveProtectedViewWindow Is Nothing Then

           For Each aStory In ActiveDocument.StoryRanges

              For Each aField In aStory.Fields
                 aField.Update
              Next aField

           Next aStory

         &apos; set document as unchanged (prevents save dialog popping up when
         &apos;closing) - further changes will set this back
         ActiveDocument.Saved = True
    End If
End Sub
&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;footnotes&quot;&gt;
&lt;h2 class=&quot;footnotes&quot;&gt;Footnotes: &lt;/h2&gt;
&lt;div id=&quot;text-footnotes&quot;&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.1&quot; name=&quot;fn.1&quot; class=&quot;footnum&quot; href=&quot;#fnr.1&quot;&gt;1&lt;/a&gt;&lt;/sup&gt; &lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;http://superuser.com/questions/458595/word-2010-template-with-automatically-updated-fields&quot;&gt;http://superuser.com/questions/458595/word-2010-template-with-automatically-updated-fields&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;


&lt;/div&gt;
&lt;/div&gt;
</content>
 </entry>
 
 <entry>
   <title>我們都在模仿</title>
   <link href="http://kimi.im/2014-03-17-learn-from-baby"/>
   <updated>2014-03-17T00:00:00+00:00</updated>
   <id>http://kimi.im/learn-from-baby</id>
   <content type="html">&lt;p&gt;
今天給寶寶洗完澡，她就躺在媽媽旁邊喝奶。我走過去看看她，她就轉過頭對著我傻笑。一會兒吸兩下，一會兒就又轉過來看著我傻笑。那是多麼天真的笑容呀。牙齒也沒長，笑起來露出一截牙齦，笑起來跟哭一樣難看。但是就是很有感染力，讓人發自內心的喜歡。或許從生物本能來看，這只是嬰兒自我保護的一種方式吧。因為對著大人們笑，才會得到更說的保護。
&lt;/p&gt;

&lt;p&gt;
逗著她完了半個多小時，突然她就開始哇哇的哭，也不知是為什麼，就是不停的哇哇哭，怎麼哄也沒用。哭了 10 多分鐘她就哭累了，然後不一會兒就睡了。YH 覺得很累，讓我不用理她，一會兒就哭累了會睡覺。果然作為媽媽，她還是很了解我們的寶寶的。
&lt;/p&gt;

&lt;p&gt;
孩子的世界是很簡單的。她們不舒服就哇哇的哭，她們開心就歡樂的笑。從她們身上可以學會真實的對待自己的內心。想想看，我們這些大人，有時候受委屈了，也只好忍著讓著，有苦說不出。有時候很開心，又裝作鎮靜，唯恐太激動讓人覺得膚淺。多麼辛苦的大人們啊。看看我們的孩子們吧，很多時候，要向她們學習，學會自然的面對這個世界，面對自己的內心。
&lt;/p&gt;

&lt;p&gt;
育兒的過程是雙向的。不僅僅是教育孩子如何做一個好小孩，也是從她們身上學習，如何做一個不那麼辛苦的好大人。剛巧看到 Sissi 的朋友圈消息：我們都在模仿，他們模仿我們的動作，我們模仿他們的無憂無慮。
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>自我管理團隊(self-managing team, SMT)</title>
   <link href="http://kimi.im/2014-03-06-self-managing-team-first-study"/>
   <updated>2014-03-06T00:00:00+00:00</updated>
   <id>http://kimi.im/self-managing-team-first-study</id>
   <content type="html">&lt;blockquote&gt;
&lt;p&gt;
In business, education, and psychology, self-management refers to methods, skills, and strategies by which individuals can effectively direct their own activities toward the achievement of objectives, and includes goal setting, decision making, focusing, planning, scheduling, time management, task tracking, self-evaluation, self-intervention, self-development, etc.
&lt;/p&gt;

&lt;p&gt;
&amp;#x2013; &lt;a href=&quot;http://en.wikipedia.org/wiki/Self-management&quot;&gt;http://en.wikipedia.org/wiki/Self-management&lt;/a&gt;
&lt;/p&gt;
&lt;/blockquote&gt;
&lt;a href=&quot;http://www.flickr.com/photos/kimim-photo/12947610723/&quot; title=&quot;Flickr 上 kimim-photo 的 Team&quot;&gt;&lt;img src=&quot;http://farm8.staticflickr.com/7442/12947610723_4821306db5_z.jpg&quot; width=&quot;640&quot; height=&quot;427&quot; alt=&quot;Team&quot;&gt;&lt;/a&gt;
&lt;p /&gt;
&lt;div id=&quot;outline-container-sec-1&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;sec-1&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;1&lt;/span&gt; 自我管理團隊&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-1&quot;&gt;
&lt;p&gt;
自我管理團隊，指的是一組人在沒有特定領導和經理控制和指導下，一起工作交付項目。
&lt;/p&gt;

&lt;p&gt;
這樣的自我管理團隊概念非常吸引人，但是卻構建困難，持續運作更是難上加難。
&lt;/p&gt;

&lt;p&gt;
研究表明，自我管理團隊能夠自己管理自己、自己做決定、分配資源、控制輸入，可以很大程度上提升生產率。
然而自我管理團隊長期效益卻很難衡量，由於缺少對成果輸出的監控和測量，很難衡量團隊績效是否持續提升。
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-sec-2&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;sec-2&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;2&lt;/span&gt; 如何管理自我管理團隊&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-2&quot;&gt;
&lt;p&gt;
構建優秀自我管理團隊的四個要素：
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;組織文化因素
&lt;/li&gt;
&lt;li&gt;組長管理技能
&lt;/li&gt;
&lt;li&gt;選擇正確的隊員
&lt;/li&gt;
&lt;li&gt;項目因素
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-sec-2-1&quot; class=&quot;outline-3&quot;&gt;
&lt;h3 id=&quot;sec-2-1&quot;&gt;&lt;span class=&quot;section-number-3&quot;&gt;2.1&lt;/span&gt; 組織文化&lt;/h3&gt;
&lt;div class=&quot;outline-text-3&quot; id=&quot;text-2-1&quot;&gt;
&lt;p&gt;
精英管理制度（meritocracy&lt;sup&gt;&lt;a id=&quot;fnr.1&quot; name=&quot;fnr.1&quot; class=&quot;footref&quot; href=&quot;#fn.1&quot;&gt;1&lt;/a&gt;&lt;/sup&gt;）是保障自我管理團隊良性發展的要素。所謂的精英管理制度就是“任人唯賢，唯才是舉”的人才選拔制度，晋升策略和薪酬體系。在這種健康的組織文化氛圍下，員工之間杜絕惡性競爭，尋求互相協作。
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-sec-2-2&quot; class=&quot;outline-3&quot;&gt;
&lt;h3 id=&quot;sec-2-2&quot;&gt;&lt;span class=&quot;section-number-3&quot;&gt;2.2&lt;/span&gt; 組長的管理技能&lt;/h3&gt;
&lt;div class=&quot;outline-text-3&quot; id=&quot;text-2-2&quot;&gt;
&lt;p&gt;
對於組長的要求就是給組員 &lt;b&gt;儘可能多的授權&lt;/b&gt; ，讓他們自己決定如何達到目標。不過這一切的前提是基於項目計劃和公司的標準化流程。只有在這兩個前提下的授權才能促進團隊健康發展。
&lt;/p&gt;

&lt;p&gt;
此外，還需要 &lt;b&gt;避免微管理（micro-management）&lt;/b&gt; 。應當相信員工在項目和組織標準下能夠最大化的發揮能動性。對於那些從技術專家提升上來的組長，往往很容易陷入微管理的泥潭。他們具有一定的技術積累，所以看到那些初級工程師總是會看不慣，對他們指指點點，甚至親自上馬寫代碼。需要牢記的是，雖然有些人在技術崗位很出色，但不意味著他管理崗位也很出色。
&lt;/p&gt;

&lt;p&gt;
當員工被微管理了之後，往往感覺不被信任，從而消極怠工，為避免受到批評指責，不敢獨自做事。這對員工和團隊的發展是非常不利的。
&lt;/p&gt;

&lt;p&gt;
另外 &lt;b&gt;設定清晰的績效考評目標&lt;/b&gt; 。這樣他們就能夠實時監控自己的績效，努力去做他們認為正確的事情。
&lt;/p&gt;

&lt;p&gt;
以 3 到 6 個月的週期給員工績效提出相應的反饋。在給員工提出反饋的時候，要 &lt;b&gt;正向建設性反饋&lt;/b&gt; 。一個比較好的時間是每個月和員工進行一次單獨的非正式的面對面溝通。
&lt;/p&gt;

&lt;p&gt;
&lt;b&gt;理解某些特殊時期暫時的業績下滑&lt;/b&gt; 。針對不同員工，要考慮一些工作銜接階段時期輸出可能不太理想。比如有些員工可能剛接手某個領域的工作，我們不能期望他一開始就能有正確高效的輸出。
&lt;/p&gt;

&lt;p&gt;
&lt;b&gt;永遠不要期望他人和我們一樣優秀&lt;/b&gt; 。
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-sec-2-3&quot; class=&quot;outline-3&quot;&gt;
&lt;h3 id=&quot;sec-2-3&quot;&gt;&lt;span class=&quot;section-number-3&quot;&gt;2.3&lt;/span&gt; 選擇正確的員工&lt;/h3&gt;
&lt;div class=&quot;outline-text-3&quot; id=&quot;text-2-3&quot;&gt;
&lt;p&gt;
為團隊選擇合適的人員是一件非常困難的事情。很不幸，一些缺少充分考察的面試只比投硬幣正反好那麼一點點。
&lt;/p&gt;

&lt;p&gt;
選擇優秀員工的兩個重要指標是智商和性格特徵。在選擇候選人的時候，要充分考慮該應聘者是否足夠聰明，是否能很好的自我管理。聰明的人能夠面對複雜的問題充分思考分析，做出決策。能自我管理的人懂得遵循一定的方法流程高效的做事。
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-sec-2-4&quot; class=&quot;outline-3&quot;&gt;
&lt;h3 id=&quot;sec-2-4&quot;&gt;&lt;span class=&quot;section-number-3&quot;&gt;2.4&lt;/span&gt; 項目因素&lt;/h3&gt;
&lt;div class=&quot;outline-text-3&quot; id=&quot;text-2-4&quot;&gt;
&lt;p&gt;
項目本身確定了開發團隊以什麼樣的方式組織在一起。在項目籌備階段，要充分徵集各個候選人的自身偏好，尊重他們的選擇，讓那些對這個新的項目感興趣的人加入到項目開發中。
&lt;/p&gt;

&lt;p&gt;
項目是項目組成員自我管理運轉的一個很重要的粘合劑。為項目組成員確定明確的項目範圍，資源和時間，從而讓團隊能正確的做出決定，達成項目目標。
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;footnotes&quot;&gt;
&lt;h2 class=&quot;footnotes&quot;&gt;Footnotes: &lt;/h2&gt;
&lt;div id=&quot;text-footnotes&quot;&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.1&quot; name=&quot;fn.1&quot; class=&quot;footnum&quot; href=&quot;#fnr.1&quot;&gt;1&lt;/a&gt;&lt;/sup&gt; &lt;p class=&quot;footpara&quot;&gt;
A meritocracy is a society or social system in which people get status or rewards because of what they achieve, rather than because of their wealth or social status. 
&lt;/p&gt;&lt;/div&gt;


&lt;/div&gt;
&lt;/div&gt;
</content>
 </entry>
 
 <entry>
   <title>尷尬的中層管理</title>
   <link href="http://kimi.im/2014-03-05-management-role-in-tech-company"/>
   <updated>2014-03-05T00:00:00+00:00</updated>
   <id>http://kimi.im/management-role-in-tech-company</id>
   <content type="html">&lt;a href=&quot;http://www.flickr.com/photos/kimim-photo/12357255674/&quot; title=&quot;Flickr 上 kimim-photo 的 DSCF2435&quot;&gt;&lt;img src=&quot;http://farm4.staticflickr.com/3746/12357255674_b47c49355f_z.jpg&quot; width=&quot;640&quot; height=&quot;427&quot; alt=&quot;DSCF2435&quot;&gt;&lt;/a&gt;
&lt;p /&gt;


&lt;p&gt;
科技企業中的中層管理者所處的地位是非常尷尬的。
&lt;/p&gt;

&lt;p&gt;
一方面，他直接和一線員工接觸，分配安排任務，考核員工績效。員工績效倘若良好則相對容易處理，倘若是差分，那麼要面對來自員工的各種抱怨。這種下屬不滿情緒有三種出路：
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;接受現實，努力踏實工作，爭取次年去的更好的績效考評
&lt;/li&gt;
&lt;li&gt;消極接受，消極怠工
&lt;/li&gt;
&lt;li&gt;無法容忍，憤怒離職
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
除了第一種積極的反饋，其他都是非常難處理的情況。
&lt;/p&gt;

&lt;p&gt;
另一方面，中層管理者還要面對來自上層管理者的壓力，包括項目開發進度壓力，產品質量要求，團隊運作效率，各種潛在的風險突發事件等。稍有處理不慎則必須引咎解釋做出彌補措施。
&lt;/p&gt;

&lt;p&gt;
所以奉勸科技企業中的新人們，只要有可能鑽研技術學習技術，則全身心投入研發中去吧。由技術專家轉為中層管理的後果是技術積累無用武之地，管理轉型舉步維艱。三思三思！
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Windows 下通過 MinGW 編譯安裝 emacs</title>
   <link href="http://kimi.im/2014-01-29-compiling-emacs-under-windows"/>
   <updated>2014-01-29T00:00:00+00:00</updated>
   <id>http://kimi.im/compiling-emacs-under-windows</id>
   <content type="html">&lt;div id=&quot;outline-container-sec-1&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;sec-1&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;1&lt;/span&gt; 準備編譯環境 MinGW 和 MSYS&lt;sup&gt;&lt;a id=&quot;fnr.1&quot; name=&quot;fnr.1&quot; class=&quot;footref&quot; href=&quot;#fn.1&quot;&gt;1&lt;/a&gt;&lt;/sup&gt;&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-1&quot;&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;從 &lt;a href=&quot;http://sourceforge.net/projects/mingw/files/&quot;&gt;http://sourceforge.net/projects/mingw/files/&lt;/a&gt; 下載安裝 mingw-get-setup.exe
&lt;/li&gt;
&lt;li&gt;在 mingw-get 包管理工具中安裝 gcc, make 和 bash.
&lt;/li&gt;
&lt;li&gt;在 PATH 中添加 MinGW 路徑：
&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;example&quot;&gt;
D:\&amp;gt;set PATH=%PATH%;C:\MinGW\bin\;C:\MinGW\msys\1.0\bin\
&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-sec-2&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;sec-2&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;2&lt;/span&gt; 下載最新版 emacs 并解壓&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-2&quot;&gt;
&lt;p&gt;
&lt;a href=&quot;http://ftp.gnu.org/gnu/emacs/&quot;&gt;http://ftp.gnu.org/gnu/emacs/&lt;/a&gt;
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-sec-3&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;sec-3&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;3&lt;/span&gt; 編譯&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-3&quot;&gt;
&lt;/div&gt;&lt;div id=&quot;outline-container-sec-3-1&quot; class=&quot;outline-3&quot;&gt;
&lt;h3 id=&quot;sec-3-1&quot;&gt;&lt;span class=&quot;section-number-3&quot;&gt;3.1&lt;/span&gt; configure&lt;/h3&gt;
&lt;div class=&quot;outline-text-3&quot; id=&quot;text-3-1&quot;&gt;
&lt;pre class=&quot;example&quot;&gt;
D:\emacs-24.3\nt&amp;gt;configure.bat
&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-sec-3-2&quot; class=&quot;outline-3&quot;&gt;
&lt;h3 id=&quot;sec-3-2&quot;&gt;&lt;span class=&quot;section-number-3&quot;&gt;3.2&lt;/span&gt; make&lt;/h3&gt;
&lt;div class=&quot;outline-text-3&quot; id=&quot;text-3-2&quot;&gt;
&lt;pre class=&quot;example&quot;&gt;
D:\emacs-24.3\nt&amp;gt;mingw32-make SHELL=cmd.exe
&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-sec-3-3&quot; class=&quot;outline-3&quot;&gt;
&lt;h3 id=&quot;sec-3-3&quot;&gt;&lt;span class=&quot;section-number-3&quot;&gt;3.3&lt;/span&gt; install&lt;/h3&gt;
&lt;div class=&quot;outline-text-3&quot; id=&quot;text-3-3&quot;&gt;
&lt;pre class=&quot;example&quot;&gt;
D:\emacs-24.3\nt&amp;gt;mingw32-make SHELL=cmd.exe install INSTALL_DIR=C:/emacs
&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-sec-4&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;sec-4&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;4&lt;/span&gt; Enjoy, and Happy Emacsing!&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-4&quot;&gt;
&lt;a href=&quot;http://www.flickr.com/photos/kimim-photo/12200140965/&quot; title=&quot;Flickr 上 kimim-photo 的 emacs&quot;&gt;&lt;img src=&quot;http://farm3.staticflickr.com/2857/12200140965_e372ceacd0_z.jpg&quot; width=&quot;636&quot; height=&quot;478&quot; alt=&quot;emacs&quot;&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;footnotes&quot;&gt;
&lt;h2 class=&quot;footnotes&quot;&gt;Footnotes: &lt;/h2&gt;
&lt;div id=&quot;text-footnotes&quot;&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.1&quot; name=&quot;fn.1&quot; class=&quot;footnum&quot; href=&quot;#fnr.1&quot;&gt;1&lt;/a&gt;&lt;/sup&gt; &lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;http://mingw.org/&quot;&gt;http://mingw.org/&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;


&lt;/div&gt;
&lt;/div&gt;
</content>
 </entry>
 
 <entry>
   <title>setjmp 和 longjmp</title>
   <link href="http://kimi.im/2014-01-28-setjmp-and-longjmp"/>
   <updated>2014-01-28T00:00:00+00:00</updated>
   <id>http://kimi.im/setjmp-and-longjmp</id>
   <content type="html">&lt;p&gt;
在 Unix/Linux 環境下 C 語言標準函數庫 &lt;code&gt;setjmp.h&lt;/code&gt; 提供了兩個函數 &lt;code&gt;setjmp()&lt;/code&gt; 和 &lt;code&gt;longjmp()&lt;/code&gt; 用以實現非本地跳轉（non-local jump）。這兩個函數可以用來構建複雜的流程控制，比如異常處理，多任務調度等。
&lt;/p&gt;

&lt;p&gt;
想要理解 &lt;code&gt;setjmp()&lt;/code&gt; 和 &lt;code&gt;longjmp()&lt;/code&gt; 的工作原理，必須透過現象看本質，理解計算機的底層工作機制。在計算機系統中，一個程序的狀態是完全由它的內存和寄存器值決定的。
&lt;/p&gt;

&lt;p&gt;
內存信息包括：
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;代碼（ code ）
&lt;/li&gt;
&lt;li&gt;全局變量（ global variable, Variable globale&lt;sup&gt;(fr)&lt;/sup&gt;,globale Variable&lt;sup&gt;(de)&lt;/sup&gt; ）
&lt;/li&gt;
&lt;li&gt;堆（ heap, le tas&lt;sup&gt;(fr)&lt;/sup&gt;, der Haufen&lt;sup&gt;(de)&lt;/sup&gt; ）
&lt;/li&gt;
&lt;li&gt;棧（ stack, la pile d&apos;exécution&lt;sup&gt;(fr)&lt;/sup&gt;, Aufrufstapel&lt;sup&gt;(de)&lt;/sup&gt; ）
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
寄存器信息有：
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;棧指針（ stack pointer, sp ）
&lt;/li&gt;
&lt;li&gt;幀指針（ frame pointer, fp ）
&lt;/li&gt;
&lt;li&gt;程序計數器（ program counter - pc ）/指令指针（ instruction pointer - ip ）
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
&lt;code&gt;setjmp()&lt;/code&gt; 的任務只不過就是將寄存器的信息保存起來，然後 &lt;code&gt;longjmp()&lt;/code&gt; 可以之後將這些值恢復回來。這樣 &lt;code&gt;longjmp()&lt;/code&gt; 就能幫助程序返回到調用了 &lt;code&gt;setjmp()&lt;/code&gt; 的那個時刻的寄存器和內存狀態。
&lt;/p&gt;

&lt;div id=&quot;outline-container-sec-1&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;sec-1&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;1&lt;/span&gt; setjmp() 和 longjmp() 的定義和實現&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-1&quot;&gt;
&lt;/div&gt;&lt;div id=&quot;outline-container-sec-1-1&quot; class=&quot;outline-3&quot;&gt;
&lt;h3 id=&quot;sec-1-1&quot;&gt;&lt;span class=&quot;section-number-3&quot;&gt;1.1&lt;/span&gt; setjmp() 的定義：&lt;/h3&gt;
&lt;div class=&quot;outline-text-3&quot; id=&quot;text-1-1&quot;&gt;
&lt;div class=&quot;org-src-container&quot;&gt;

&lt;pre class=&quot;src src-C&quot;&gt;#include &lt;span style=&quot;color: #3a5fcd;&quot;&gt;&amp;lt; setjmp.h &amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: #551a8b;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #0000cd;&quot;&gt;setjmp&lt;/span&gt;(&lt;span style=&quot;color: #551a8b;&quot;&gt;jmp_buf&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-style: italic;&quot;&gt;env&lt;/span&gt;);
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
這個函數將當前程序寄存器的狀態保存到 &lt;code&gt;env&lt;/code&gt; 中。在 &lt;code&gt;setjmp.h&lt;/code&gt; 中定義了 &lt;code&gt;jmp_buf&lt;/code&gt; 如下：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;

&lt;pre class=&quot;src src-C&quot;&gt;&lt;span style=&quot;color: #8b008b; font-weight: bold;&quot;&gt;typedef&lt;/span&gt; &lt;span style=&quot;color: #8b008b; font-weight: bold;&quot;&gt;struct&lt;/span&gt; {
  &lt;span style=&quot;color: #551a8b;&quot;&gt;unsigned&lt;/span&gt; &lt;span style=&quot;color: #551a8b;&quot;&gt;long&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-style: italic;&quot;&gt;eax&lt;/span&gt;;
  &lt;span style=&quot;color: #551a8b;&quot;&gt;unsigned&lt;/span&gt; &lt;span style=&quot;color: #551a8b;&quot;&gt;long&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-style: italic;&quot;&gt;ebx&lt;/span&gt;;
  &lt;span style=&quot;color: #551a8b;&quot;&gt;unsigned&lt;/span&gt; &lt;span style=&quot;color: #551a8b;&quot;&gt;long&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-style: italic;&quot;&gt;ecx&lt;/span&gt;;
  &lt;span style=&quot;color: #551a8b;&quot;&gt;unsigned&lt;/span&gt; &lt;span style=&quot;color: #551a8b;&quot;&gt;long&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-style: italic;&quot;&gt;edx&lt;/span&gt;;
  &lt;span style=&quot;color: #551a8b;&quot;&gt;unsigned&lt;/span&gt; &lt;span style=&quot;color: #551a8b;&quot;&gt;long&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-style: italic;&quot;&gt;esi&lt;/span&gt;;
  &lt;span style=&quot;color: #551a8b;&quot;&gt;unsigned&lt;/span&gt; &lt;span style=&quot;color: #551a8b;&quot;&gt;long&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-style: italic;&quot;&gt;edi&lt;/span&gt;;
  &lt;span style=&quot;color: #551a8b;&quot;&gt;unsigned&lt;/span&gt; &lt;span style=&quot;color: #551a8b;&quot;&gt;long&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-style: italic;&quot;&gt;ebp&lt;/span&gt;;
  &lt;span style=&quot;color: #551a8b;&quot;&gt;unsigned&lt;/span&gt; &lt;span style=&quot;color: #551a8b;&quot;&gt;long&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-style: italic;&quot;&gt;esp&lt;/span&gt;;
  &lt;span style=&quot;color: #551a8b;&quot;&gt;unsigned&lt;/span&gt; &lt;span style=&quot;color: #551a8b;&quot;&gt;long&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-style: italic;&quot;&gt;eip&lt;/span&gt;;
} &lt;span style=&quot;color: #551a8b;&quot;&gt;jmp_buf&lt;/span&gt;[1];
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
這個詭異的類型聲明是定義了一個叫 &lt;code&gt;jmp_buf&lt;/code&gt; 的類型，它是一個長度為 9 的 &lt;code&gt;unsigned long&lt;/code&gt; 32 位整型數組類型&lt;sup&gt;&lt;a id=&quot;fnr.1&quot; name=&quot;fnr.1&quot; class=&quot;footref&quot; href=&quot;#fn.1&quot;&gt;1&lt;/a&gt;&lt;/sup&gt;。這 9 個整型數值對應了 9 個處理器寄存器：
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;通用寄存器 &lt;code&gt;eax, ebx, ecx, edx&lt;/code&gt; 
&lt;/li&gt;
&lt;li&gt;索引指針寄存器 &lt;code&gt;esi, edi, ebp, esp&lt;/code&gt; 
&lt;/li&gt;
&lt;li&gt;以及程序計數器（program counter）又叫指令指針（instruction pointer） &lt;code&gt;eip&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
這些寄存器完全決定了一個程序的運行行為。
&lt;/p&gt;

&lt;p&gt;
當你調用 &lt;code&gt;setjmp()&lt;/code&gt; ，時，傳遞一個指向 &lt;code&gt;env&lt;/code&gt; 的指針，讓程序把當前寄存器的值保存到 &lt;code&gt;env&lt;/code&gt; 中，并返回 0。
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-sec-1-2&quot; class=&quot;outline-3&quot;&gt;
&lt;h3 id=&quot;sec-1-2&quot;&gt;&lt;span class=&quot;section-number-3&quot;&gt;1.2&lt;/span&gt; longjmp() 的定義&lt;/h3&gt;
&lt;div class=&quot;outline-text-3&quot; id=&quot;text-1-2&quot;&gt;
&lt;div class=&quot;org-src-container&quot;&gt;

&lt;pre class=&quot;src src-C&quot;&gt;longjmp(&lt;span style=&quot;color: #551a8b;&quot;&gt;jmp_buf&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-style: italic;&quot;&gt;env&lt;/span&gt;, &lt;span style=&quot;color: #551a8b;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-style: italic;&quot;&gt;val&lt;/span&gt;);
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
&lt;code&gt;longjmp()&lt;/code&gt; 函數把 &lt;code&gt;env&lt;/code&gt; 中的值恢復到 CPU 的寄存器中。
&lt;/p&gt;

&lt;p&gt;
注意， &lt;code&gt;longjmp()&lt;/code&gt; 函數調用是不會再返回了的。因為它讓程序恢復到上一次調用 &lt;code&gt;setjmp()&lt;/code&gt; 時候的狀態，就好像那之後啥也沒發生過一樣。很有一種浮生若夢的感覺吧？
&lt;/p&gt;

&lt;p&gt;
一旦調用了 &lt;code&gt;longjmp()&lt;/code&gt; ， &lt;code&gt;eip&lt;/code&gt; 的值也恢復原樣了。唯一不同的是， &lt;code&gt;setjmp()&lt;/code&gt; 的返回值被 &lt;code&gt;longjmp()&lt;/code&gt; 修改成傳遞給 &lt;code&gt;longjmp()&lt;/code&gt; 的參數 &lt;code&gt;val&lt;/code&gt; 了。
&lt;/p&gt;

&lt;p&gt;
不同的返回值可以用來判斷 &lt;code&gt;setjmp()&lt;/code&gt; 是第一次被調用還是調用了 &lt;code&gt;longjmp()&lt;/code&gt; 之後返回。
即非零的返回值意味著程序是從 &lt;code&gt;longjmp()&lt;/code&gt; 返回。因此，需要注意，传递给 &lt;code&gt;long_jmp()&lt;/code&gt; 的参数不可以是 0。當然好的庫實現在調用最後會判斷 &lt;code&gt;val&lt;/code&gt; 是否為 0，如果是 0 會強制被設成 1&lt;sup&gt;&lt;a id=&quot;fnr.2&quot; name=&quot;fnr.2&quot; class=&quot;footref&quot; href=&quot;#fn.2&quot;&gt;2&lt;/a&gt;&lt;/sup&gt;。
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-sec-2&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;sec-2&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;2&lt;/span&gt; setjmp() 和 longjmp() 應用舉例&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-2&quot;&gt;
&lt;p&gt;
我们来看看最简单的使用场景：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;

&lt;pre class=&quot;src src-C&quot;&gt;&lt;span style=&quot;color: #999988; font-style: italic;&quot;&gt;/* &lt;/span&gt;&lt;span style=&quot;color: #228b22; font-style: italic;&quot;&gt;setjmp_01.c &lt;/span&gt;&lt;span style=&quot;color: #999988; font-style: italic;&quot;&gt;*/&lt;/span&gt;
#include &lt;span style=&quot;color: #3a5fcd;&quot;&gt;&amp;lt;stdio.h&amp;gt;&lt;/span&gt;
#include &lt;span style=&quot;color: #3a5fcd;&quot;&gt;&amp;lt;stdlib.h&amp;gt;&lt;/span&gt;
#include &lt;span style=&quot;color: #3a5fcd;&quot;&gt;&amp;lt;setjmp.h&amp;gt;&lt;/span&gt;

&lt;span style=&quot;color: #551a8b;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000cd;&quot;&gt;main&lt;/span&gt;()
{
  &lt;span style=&quot;color: #551a8b;&quot;&gt;jmp_buf&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-style: italic;&quot;&gt;env&lt;/span&gt;;
  &lt;span style=&quot;color: #551a8b;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-style: italic;&quot;&gt;i&lt;/span&gt;;

  i = setjmp(env);
  printf(&lt;span style=&quot;color: #3a5fcd;&quot;&gt;&quot;i = %d\n&quot;&lt;/span&gt;, i);

  &lt;span style=&quot;color: #8b008b; font-weight: bold;&quot;&gt;if&lt;/span&gt; (i != 0) exit(0);

  longjmp(env, 2);
  printf(&lt;span style=&quot;color: #3a5fcd;&quot;&gt;&quot;Printed or not?\n&quot;&lt;/span&gt;);
}
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
上面這段函數的運行結果如下：
&lt;/p&gt;

&lt;pre class=&quot;example&quot;&gt;
kimim@Mars ~/code$ ./setjmp_01
i = 0
i = 2
&lt;/pre&gt;

&lt;p&gt;
第一次調用 &lt;code&gt;sejmp()&lt;/code&gt; 的時候，這個函數返回 0 ，當我們調用了 &lt;code&gt;longjmp()&lt;/code&gt; 之後， &lt;code&gt;setjmp()&lt;/code&gt; 的返回值被改成了 2。緊接著判斷發現 &lt;code&gt;if (i != 0)&lt;/code&gt; 成立，於是程序退出。最後一句話也不會被打印出來了。
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-sec-3&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;sec-3&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;3&lt;/span&gt; 寄存器內存分析&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-3&quot;&gt;
&lt;p&gt;
現在，我們知道 &lt;code&gt;setjmp()&lt;/code&gt; 會把所有寄存器的值保存到 &lt;code&gt;env&lt;/code&gt; 中，包括 &lt;code&gt;sp&lt;/code&gt; 和 &lt;code&gt;fp&lt;/code&gt; 。那麼當某個函數調用了 &lt;code&gt;setjmp()&lt;/code&gt; 之後返回了，就意味著，保存在 &lt;code&gt;env&lt;/code&gt; 中的寄存器的值都不再有效了。
&lt;/p&gt;

&lt;p&gt;
因為 &lt;code&gt;env&lt;/code&gt; 中保存了調用 &lt;code&gt;setjmp()&lt;/code&gt; 的函數的 &lt;code&gt;sp&lt;/code&gt; 和 &lt;code&gt;fp&lt;/code&gt; ，如果這個函數返回退出了，程序棧的狀態和之前調用 &lt;code&gt;setjmp()&lt;/code&gt; 時候是不一致的，這時候又從 &lt;code&gt;env&lt;/code&gt; 中把 &lt;code&gt;sp&lt;/code&gt; 和 &lt;code&gt;fp&lt;/code&gt; 恢復回來，程序就會運行出錯，比如 &lt;code&gt;setjmp_02.c&lt;/code&gt; 程序：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;

&lt;pre class=&quot;src src-C&quot;&gt;&lt;span style=&quot;color: #999988; font-style: italic;&quot;&gt;/* &lt;/span&gt;&lt;span style=&quot;color: #228b22; font-style: italic;&quot;&gt;setjmp_02.c &lt;/span&gt;&lt;span style=&quot;color: #999988; font-style: italic;&quot;&gt;*/&lt;/span&gt;
#include &lt;span style=&quot;color: #3a5fcd;&quot;&gt;&amp;lt;stdio.h&amp;gt;&lt;/span&gt;
#include &lt;span style=&quot;color: #3a5fcd;&quot;&gt;&amp;lt;stdlib.h&amp;gt;&lt;/span&gt;
#include &lt;span style=&quot;color: #3a5fcd;&quot;&gt;&amp;lt;setjmp.h&amp;gt;&lt;/span&gt;

&lt;span style=&quot;color: #551a8b;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000cd;&quot;&gt;func_a&lt;/span&gt;(&lt;span style=&quot;color: #551a8b;&quot;&gt;jmp_buf&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-style: italic;&quot;&gt;env&lt;/span&gt;)
{
    &lt;span style=&quot;color: #551a8b;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-style: italic;&quot;&gt;i&lt;/span&gt; = 0;
    &lt;span style=&quot;color: #551a8b;&quot;&gt;char&lt;/span&gt; *&lt;span style=&quot;color: #0000ff; font-style: italic;&quot;&gt;s&lt;/span&gt; = &lt;span style=&quot;color: #3a5fcd;&quot;&gt;&quot;Kimim&quot;&lt;/span&gt;;
    printf(&lt;span style=&quot;color: #3a5fcd;&quot;&gt;&quot;Entering func_a\n&quot;&lt;/span&gt;);
    i = setjmp(env);
    printf(&lt;span style=&quot;color: #3a5fcd;&quot;&gt;&quot;Return from setjmp = %d\n&quot;&lt;/span&gt;, i);
    printf(&lt;span style=&quot;color: #3a5fcd;&quot;&gt;&quot;s = %s\n&quot;&lt;/span&gt;, s);
    printf(&lt;span style=&quot;color: #3a5fcd;&quot;&gt;&quot;Leaving func_a\n&quot;&lt;/span&gt;);
    &lt;span style=&quot;color: #8b008b; font-weight: bold;&quot;&gt;return&lt;/span&gt;;
}

&lt;span style=&quot;color: #551a8b;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #0000cd;&quot;&gt;func_b&lt;/span&gt;(&lt;span style=&quot;color: #551a8b;&quot;&gt;jmp_buf&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-style: italic;&quot;&gt;env&lt;/span&gt;)
{
    &lt;span style=&quot;color: #551a8b;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-style: italic;&quot;&gt;i&lt;/span&gt; = 1;
    &lt;span style=&quot;color: #551a8b;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-style: italic;&quot;&gt;k&lt;/span&gt; = 2;
    printf(&lt;span style=&quot;color: #3a5fcd;&quot;&gt;&quot;Entering func_b\n&quot;&lt;/span&gt;);
    longjmp(env, i);
    printf(&lt;span style=&quot;color: #3a5fcd;&quot;&gt;&quot;Leaving func_b\n&quot;&lt;/span&gt;);
}

&lt;span style=&quot;color: #551a8b;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000cd;&quot;&gt;main&lt;/span&gt;()
{
    &lt;span style=&quot;color: #551a8b;&quot;&gt;jmp_buf&lt;/span&gt; &lt;span style=&quot;color: #0000ff; font-style: italic;&quot;&gt;env&lt;/span&gt;;
    func_a(env);
    func_b(env);
}
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
运行上面程序，输出结果如下：
&lt;/p&gt;

&lt;pre class=&quot;example&quot;&gt;
kimim@Mars ~/code$ ./setjmp_02
Entering func_a
Return from setjmp = 0
s = Kimim
Leaving func_a
Entering func_b
Return from setjmp = 1
Segmentation fault (core dumped)
&lt;/pre&gt;

&lt;p&gt;
當我們調用了 &lt;code&gt;longjmp()&lt;/code&gt; 之後，又一次進入了 &lt;code&gt;func_a&lt;/code&gt; ，打印了 &quot;Return from setjmp = 1&quot; 之後，程序就出錯了（段錯誤 - segmentation fault）。
&lt;/p&gt;

&lt;p&gt;
分析一下程序運行時候棧的狀態看看發生了什麽情況。當我們第一次調用 &lt;code&gt;main&lt;/code&gt; 函數的時候，棧內存分佈如下：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;

&lt;pre class=&quot;src src-ditaa&quot;&gt;|----------------|
|                |
|                | 
|                |
|                |
|                |
|                | &amp;lt;--------- sp
| env[0]         |
| env[1]         |
| env[2]         |               pc = main
| env[3]         |
| ....           |
| env[8]         |
| ....           |
| &amp;#26855;&amp;#22522;&amp;#22336;         | &amp;lt;--------- fp
|--------------- |
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
然後， &lt;code&gt;main&lt;/code&gt; 調用了 &lt;code&gt;func_a&lt;/code&gt; 。CPU 首先把傳給 &lt;code&gt;func_a&lt;/code&gt; 的參數壓入程序棧，然後調用 &lt;code&gt;jsr&lt;/code&gt; ，把返回的 &lt;code&gt;pc&lt;/code&gt; 值， &lt;code&gt;main&lt;/code&gt; 的 &lt;code&gt;fp&lt;/code&gt; 壓入棧。然後 &lt;code&gt;fp&lt;/code&gt; ，=sp= 一起更改為 &lt;code&gt;func_a()&lt;/code&gt; 留出一個空的棧：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;

&lt;pre class=&quot;src src-ditaa&quot;&gt;               |----------------|
               |                |
               |                | &amp;lt;--------- sp, fp
/------------- | main &amp;#37324;&amp;#33290;&amp;#30340; fp |
|              | main &amp;#37324;&amp;#33290;&amp;#30340; pc |
|         /--- | env &amp;#30340;&amp;#25351;&amp;#37341;     | 
|         \--&amp;gt; | env[0]         |
|              | env[1]         |
|              | env[2]         |               pc = func_a
|              | env[3]         |
|              | ....           |
|              | env[8]         |
|              | ....           |
\------------&amp;gt; | &amp;#26855;&amp;#22522;&amp;#22336;         | 
               |--------------- |
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
&lt;code&gt;func_a&lt;/code&gt; 首先給局部變量 &lt;code&gt;i&lt;/code&gt; 和 &lt;code&gt;s&lt;/code&gt; 分配空間：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;

&lt;pre class=&quot;src src-ditaa&quot;&gt;               |----------------|
               |                | &amp;lt;--------- sp
  &lt;span style=&quot;color: #3a5fcd;&quot;&gt;&quot;Kimim&quot;&lt;/span&gt;&amp;lt;---- |  s = &lt;span style=&quot;color: #3a5fcd;&quot;&gt;&quot;Kimim&quot;&lt;/span&gt;   | 
               |  i             | &amp;lt;--------- fp
/------------- | main &amp;#37324;&amp;#33290;&amp;#30340; fp |
|              | main &amp;#37324;&amp;#33290;&amp;#30340; pc |
|         /--- | env &amp;#30340;&amp;#25351;&amp;#37341;     | 
|         \--&amp;gt; | env[0]         |
|              | env[1]         |
|              | env[2]         |               pc = a
|              | env[3]         |
|              | ....           |
|              | env[8]         |
|              | ....           |
\------------&amp;gt; | &amp;#26855;&amp;#22522;&amp;#22336;         | 
               |--------------- |
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
然後 &lt;code&gt;func_a&lt;/code&gt; 打印出： 
&lt;/p&gt;
&lt;pre class=&quot;example&quot;&gt;
Entering func_a
&lt;/pre&gt;

&lt;p&gt;
緊接著調用 &lt;code&gt;setjmp()&lt;/code&gt; 把當前寄存器的狀態保存到 &lt;code&gt;env&lt;/code&gt; 數組中。這些寄存器包括 &lt;code&gt;sp&lt;/code&gt; ， &lt;code&gt;fp&lt;/code&gt; ， &lt;code&gt;pc&lt;/code&gt; 。接著打印出：
&lt;/p&gt;
&lt;pre class=&quot;example&quot;&gt;
Return from setjmp = 0
s = Kimim
Leaving func_a
&lt;/pre&gt;

&lt;p&gt;
然後函數返回到 &lt;code&gt;main()&lt;/code&gt; 。這時候的程序棧恢復成之前的樣子，除了 &lt;code&gt;env&lt;/code&gt; 中保存了調用 &lt;code&gt;func_a&lt;/code&gt; 時候的機器狀態：
&lt;/p&gt;
&lt;div class=&quot;org-src-container&quot;&gt;

&lt;pre class=&quot;src src-ditaa&quot;&gt;|----------------|
|                |
|                | 
|                |
|                |
|                |
|                | &amp;lt;----------- sp
| env[0]         |
| env[1]         |
| env[2]         |               pc = main
| env[3]         |
| ....           |
| env[8]         |
| ....           |
| &amp;#26855;&amp;#22522;&amp;#22336;         | &amp;lt;--------- fp
|--------------- |
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
然後調用 &lt;code&gt;func_b()&lt;/code&gt; ，這時候棧狀態如下：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;

&lt;pre class=&quot;src src-ditaa&quot;&gt;               |----------------|
               |                |
               |                | &amp;lt;--------- sp, fp
/------------- | main &amp;#37324;&amp;#33290;&amp;#30340; fp |
|              | main &amp;#37324;&amp;#33290;&amp;#30340; pc |
|         /--- | env &amp;#25351;&amp;#37341;       | 
|         \--&amp;gt; | env[0]         |
|              | env[1]         |
|              | env[2]         |               pc = func_b
|              | env[3]         |
|              | ....           |
|              | env[8]         |
|              | ....           |
\------------&amp;gt; | &amp;#26855;&amp;#22522;&amp;#22336;         | 
               |--------------- |
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
&lt;code&gt;func_b()&lt;/code&gt; 首先給兩個局部變量分配空間，然後打印
&lt;/p&gt;
&lt;pre class=&quot;example&quot;&gt;
Entering func_b
&lt;/pre&gt;

&lt;p&gt;
這時候程序棧狀態如下：
&lt;/p&gt;
&lt;div class=&quot;org-src-container&quot;&gt;

&lt;pre class=&quot;src src-ditaa&quot;&gt;               |----------------|
               |                | &amp;lt;--------- sp
               | k = 2          |
               | i = 1          | &amp;lt;--------- fp
/------------- | main &amp;#37324;&amp;#33290;&amp;#30340; fp |
|              | main &amp;#37324;&amp;#33290;&amp;#30340; pc |
|         /--- | env &amp;#25351;&amp;#37341;       | 
|         \--&amp;gt; | env[0]         |
|              | env[1]         |
|              | env[2]         |               pc = func_b
|              | env[3]         |
|              | ....           |
|              | env[8]         |
|              | ....           |
\------------&amp;gt; | &amp;#26855;&amp;#22522;&amp;#22336;         | 
               |--------------- |
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
接著調用 &lt;code&gt;longjmp()&lt;/code&gt; 。寄存器的值恢復到在 &lt;code&gt;func_a&lt;/code&gt; 中調用 &lt;code&gt;setjmp()&lt;/code&gt; 時候的值， &lt;code&gt;pc&lt;/code&gt; 的值也恢復到 &lt;code&gt;func_a&lt;/code&gt; 。可是這個時候程序棧還是調用 &lt;code&gt;func_a&lt;/code&gt; 時候的狀態：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;

&lt;pre class=&quot;src src-ditaa&quot;&gt;               |----------------|
               |                | &amp;lt;--------- sp
               |  k = 2         | 
               |  i = 1         | &amp;lt;--------- fp
/------------- | main &amp;#37324;&amp;#33290;&amp;#30340; fp |
|              | main &amp;#37324;&amp;#33290;&amp;#30340; pc |
|         /--- | env &amp;#30340;&amp;#25351;&amp;#37341;     | 
|         \--&amp;gt; | env[0]         |
|              | env[1]         |
|              | env[2]         |               pc = a
|              | env[3]         |
|              | ....           |
|              | env[8]         |
|              | ....           |
\------------&amp;gt; | &amp;#26855;&amp;#22522;&amp;#22336;         | 
               |--------------- |
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
此時， &lt;code&gt;setjmp()&lt;/code&gt; 的返回值是 1，所以第一句打印出來為：
&lt;/p&gt;
&lt;pre class=&quot;example&quot;&gt;
Return from setjmp = 1
&lt;/pre&gt;

&lt;p&gt;
接著 &lt;code&gt;func_a&lt;/code&gt; 中的打印語句試圖在 k 的值 2 所指向的內存地址尋找一個字符串來打印：
&lt;/p&gt;
&lt;div class=&quot;org-src-container&quot;&gt;

&lt;pre class=&quot;src src-C&quot;&gt;printf(&lt;span style=&quot;color: #3a5fcd;&quot;&gt;&quot;s = %s\n&quot;&lt;/span&gt;, s);
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
這就導致了段錯誤（segmentation fault），因為這個進程是不允許訪問該內存地址的。&lt;sup&gt;&lt;a id=&quot;fnr.3&quot; name=&quot;fnr.3&quot; class=&quot;footref&quot; href=&quot;#fn.3&quot;&gt;3&lt;/a&gt;&lt;/sup&gt;
&lt;/p&gt;

&lt;p&gt;
以上是使用 &lt;code&gt;setjmp()&lt;/code&gt; 和 &lt;code&gt;longjmp()&lt;/code&gt; 的時候最常遇到的 bug。所以切記： &lt;b&gt;千萬不要從調用 &lt;code&gt;setjmp()&lt;/code&gt; 的函數中返回&lt;/b&gt; 。
&lt;/p&gt;


&lt;p&gt;
本文主要翻譯自田納西大學 James S. Plank 的講稿 “CS360 Lecture notes &amp;#x2013; Setjmp”&lt;sup&gt;&lt;a id=&quot;fnr.4&quot; name=&quot;fnr.4&quot; class=&quot;footref&quot; href=&quot;#fn.4&quot;&gt;4&lt;/a&gt;&lt;/sup&gt;，并做了不少擴展和修改。
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;footnotes&quot;&gt;
&lt;h2 class=&quot;footnotes&quot;&gt;Footnotes: &lt;/h2&gt;
&lt;div id=&quot;text-footnotes&quot;&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.1&quot; name=&quot;fn.1&quot; class=&quot;footnum&quot; href=&quot;#fnr.1&quot;&gt;1&lt;/a&gt;&lt;/sup&gt; &lt;p class=&quot;footpara&quot;&gt;
舉一個更簡單的例子比如：
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;

&lt;pre class=&quot;src src-C&quot;&gt;&lt;span style=&quot;color: #8b008b; font-weight: bold;&quot;&gt;typedef&lt;/span&gt; &lt;span style=&quot;color: #551a8b;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #551a8b;&quot;&gt;int_buf&lt;/span&gt;[10];
&lt;/pre&gt;
&lt;/div&gt;

&lt;p class=&quot;footpara&quot;&gt;
這個類型聲明定義了一個叫 &lt;code&gt;int_buf&lt;/code&gt; 的類型，它是一個長度為 10 的數組類型。
&lt;/p&gt;&lt;/div&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.2&quot; name=&quot;fn.2&quot; class=&quot;footnum&quot; href=&quot;#fnr.2&quot;&gt;2&lt;/a&gt;&lt;/sup&gt; &lt;p class=&quot;footpara&quot;&gt;
如果给 &lt;code&gt;longjmp()&lt;/code&gt; 第二个参数传了 0，那么 &lt;code&gt;setjmp()&lt;/code&gt; 的返回值默认为 1。
&lt;/p&gt;&lt;/div&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.3&quot; name=&quot;fn.3&quot; class=&quot;footnum&quot; href=&quot;#fnr.3&quot;&gt;3&lt;/a&gt;&lt;/sup&gt; &lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;http://en.wikipedia.org/wiki/Segmentation_fault&quot;&gt;http://en.wikipedia.org/wiki/Segmentation_fault&lt;/a&gt; Different operating systems have different signal names to indicate that a segmentation fault has occurred. On Unix-like operating systems, a signal called SIGSEGV (abbreviated from segmentation violation) is sent to the offending process. On Microsoft Windows, the offending process receives a STATUS&lt;sub&gt;ACCESS&lt;/sub&gt;&lt;sub&gt;VIOLATION&lt;/sub&gt; exception.
&lt;/p&gt;&lt;/div&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.4&quot; name=&quot;fn.4&quot; class=&quot;footnum&quot; href=&quot;#fnr.4&quot;&gt;4&lt;/a&gt;&lt;/sup&gt; &lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;http://web.eecs.utk.edu/~huangj/cs360/360/notes/Setjmp/lecture.html&quot;&gt;http://web.eecs.utk.edu/~huangj/cs360/360/notes/Setjmp/lecture.html&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;


&lt;/div&gt;
&lt;/div&gt;
</content>
 </entry>
 
 <entry>
   <title>單詞本：法語單詞 cuisine</title>
   <link href="http://kimi.im/2014-01-26-francais-cuisine"/>
   <updated>2014-01-26T00:00:00+00:00</updated>
   <id>http://kimi.im/francais-cuisine</id>
   <content type="html">&lt;a href=&quot;http://www.flickr.com/photos/kimim-photo/12147699886/&quot; title=&quot;Flickr 上 kimim-photo 的 cuisiner&quot;&gt;&lt;img src=&quot;http://farm3.staticflickr.com/2806/12147699886_c11350f9f8_z.jpg&quot; width=&quot;640&quot; height=&quot;426&quot; alt=&quot;cuisiner&quot;&gt;&lt;/a&gt;

&lt;div id=&quot;outline-container-orgheadline1&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgheadline1&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;1&lt;/span&gt; Cuisine&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-1&quot;&gt;
&lt;p&gt;
今天學習一個法語單詞 cuisine.
&lt;/p&gt;

&lt;dl class=&quot;org-dl&quot;&gt;
&lt;dt&gt;la cuisine&lt;/dt&gt;&lt;dd&gt;n.f. 廚房，烹飪，廚藝，菜餚，伙食，&amp;lt;俗&amp;gt;詭計。&lt;/dd&gt;
&lt;/dl&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgheadline2&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgheadline2&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;2&lt;/span&gt; Cuisine 詞源&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-2&quot;&gt;
&lt;p&gt;
這個單詞來自拉丁語 cŏcīna&lt;sup&gt;&lt;a id=&quot;fnr.1&quot; class=&quot;footref&quot; href=&quot;#fn.1&quot;&gt;1&lt;/a&gt;&lt;/sup&gt;, 是經典拉丁語 cŏquīna(cuisine, art culinaire&lt;sup&gt;(fr)&lt;/sup&gt;) 和 cŏquĕre(cuire, rôtir&lt;sup&gt;(fr)&lt;/sup&gt;) 的變形。西班牙語 cocina&lt;sup&gt;(es)&lt;/sup&gt;, 意大利語 cucina&lt;sup&gt;(it)&lt;/sup&gt;, 英語 kitchen&lt;sup&gt;(en)&lt;/sup&gt; 都是其同源詞。&lt;sup&gt;&lt;a id=&quot;fnr.2&quot; class=&quot;footref&quot; href=&quot;#fn.2&quot;&gt;2&lt;/a&gt;&lt;/sup&gt;
&lt;/p&gt;

&lt;p&gt;
英語 cuisine&lt;sup&gt;&lt;a id=&quot;fnr.3&quot; class=&quot;footref&quot; href=&quot;#fn.3&quot;&gt;3&lt;/a&gt;&lt;/sup&gt;(烹飪，烹調法) 則來自法語 cuisine.
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgheadline3&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgheadline3&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;3&lt;/span&gt; Cuisine 釋義&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-3&quot;&gt;
&lt;ol class=&quot;org-ol&quot;&gt;
&lt;li&gt;Pièce où l&apos;on prépare et fait cuire les aliments. 廚房，人們烹飪食物的地方。die Küche&lt;sup&gt;(de)&lt;/sup&gt;, kitchen&lt;sup&gt;(en)&lt;/sup&gt;.
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;Zaheira disparut vers la cuisine, revint avec des plats alléchants, disposa gentiment l&apos;eau et le pain sur la table. 薩艾拉消失在廚房中，隨後帶來了誘人的美食，優雅的把水和麵包放在桌上。&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;Action de préparer à manger. 烹飪。das Kochen&lt;sup&gt;(de)&lt;/sup&gt;, die Küche&lt;sup&gt;(de)&lt;/sup&gt;, cookery&lt;sup&gt;(en)&lt;/sup&gt;, cooking&lt;sup&gt;(en)&lt;/sup&gt;, cuisine&lt;sup&gt;(en)&lt;/sup&gt;.
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;Il me quitte; il doit acheter du jambon et du vinaigre, car les officiers l&apos;ont naturellement chargé de leur cuisine, comme ils en chargent immanquablement&lt;sup&gt;&lt;a id=&quot;fnr.4&quot; class=&quot;footref&quot; href=&quot;#fn.4&quot;&gt;4&lt;/a&gt;&lt;/sup&gt; tout professeur, tout prêtre&lt;sup&gt;&lt;a id=&quot;fnr.5&quot; class=&quot;footref&quot; href=&quot;#fn.5&quot;&gt;5&lt;/a&gt;&lt;/sup&gt;, tout poète. — (Jean Giraudoux&lt;sup&gt;&lt;a id=&quot;fnr.6&quot; class=&quot;footref&quot; href=&quot;#fn.6&quot;&gt;6&lt;/a&gt;&lt;/sup&gt;, Retour d&apos;Alsace&lt;sup&gt;&lt;a id=&quot;fnr.7&quot; class=&quot;footref&quot; href=&quot;#fn.7&quot;&gt;7&lt;/a&gt;&lt;/sup&gt; - Août 1914, 1916)&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;Art d&apos;apprêter les mets, les aliments. 廚藝。
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;Il apprend la cuisine.&lt;/li&gt;
&lt;li&gt;Il sait bien la cuisine.&lt;/li&gt;
&lt;li&gt;Livre de cuisine.&lt;/li&gt;
&lt;li&gt;cuisine bourgeoise.&lt;sup&gt;&lt;a id=&quot;fnr.8&quot; class=&quot;footref&quot; href=&quot;#fn.8&quot;&gt;8&lt;/a&gt;&lt;/sup&gt; 家常菜；Bourgeoise Cuisine 家常法国菜派系&lt;/li&gt;
&lt;li&gt;La cuisine française.&lt;/li&gt;
&lt;li&gt;La cuisine italienne.&lt;/li&gt;
&lt;li&gt;La cuisine anglaise.&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;Manœuvre, intrigue. 手段，手腕; 詭計，陰謀，勾當。
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;a cuisine électorale, parlementaire.&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgheadline4&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgheadline4&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;4&lt;/span&gt; 廚房用品&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-4&quot;&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;le frigo, le réfrigérateur&lt;sup&gt;(fr)&lt;/sup&gt;, der Kühlschrank&lt;sup&gt;(de)&lt;/sup&gt;, fridge, regrigerator&lt;sup&gt;(en)&lt;/sup&gt;, 冰箱&lt;/li&gt;
&lt;li&gt;le bac à glaçons&lt;sup&gt;(fr)&lt;/sup&gt;, Eiswürfelschale&lt;sup&gt;(de)&lt;/sup&gt;, ice cube tray&lt;sup&gt;(en)&lt;/sup&gt;&lt;sup&gt;&lt;a id=&quot;fnr.9&quot; class=&quot;footref&quot; href=&quot;#fn.9&quot;&gt;9&lt;/a&gt;&lt;/sup&gt;, 冰格&lt;/li&gt;
&lt;li&gt;le congélateur&lt;/li&gt;
&lt;li&gt;la cuisinière&lt;sup&gt;(fr)&lt;/sup&gt;, cuisinière électrique, au charbon, à gaz. cooker&lt;sup&gt;(en)&lt;/sup&gt;, der Herd, der Kocher&lt;sup&gt;(de)&lt;/sup&gt;, 爐灶。&lt;/li&gt;
&lt;li&gt;le brûleur&lt;sup&gt;(fr)&lt;/sup&gt;, der Brenner, das Kochfeld&lt;sup&gt;(de)&lt;/sup&gt;, burner, cooktop&lt;sup&gt;(en)&lt;/sup&gt;, 燃烧器&lt;/li&gt;
&lt;li&gt;le minuteur&lt;sup&gt;(fr)&lt;/sup&gt;, die Schaltuhr, die Zeitschaltuhr&lt;sup&gt;(de)&lt;/sup&gt;, timer&lt;sup&gt;(en)&lt;/sup&gt;, 定時器／計時器&lt;/li&gt;
&lt;li&gt;le gant (de cuisine, de cuir)&lt;sup&gt;(fr)&lt;/sup&gt;, der Küchehandschuh&lt;sup&gt;(de)&lt;/sup&gt;, 廚房手套&lt;/li&gt;
&lt;li&gt;la mijoteuse&lt;sup&gt;(fr)&lt;/sup&gt;, Schongarer, Langsamgarer&lt;sup&gt;(de)&lt;/sup&gt;, slow cooker, crockpot, crock pot&lt;sup&gt;(en)&lt;/sup&gt;, 煲湯鍋&lt;/li&gt;
&lt;li&gt;le four à micro-ondes, le micro-onde&lt;sup&gt;(fr)&lt;/sup&gt;, der Mikrowellenherd&lt;sup&gt;(de)&lt;/sup&gt;, the microwave oven&lt;sup&gt;(en)&lt;/sup&gt;, 微波爐&lt;/li&gt;
&lt;li&gt;le grille-pain&lt;sup&gt;(fr)&lt;/sup&gt;, der Toaster&lt;sup&gt;(de)&lt;/sup&gt;, toaster&lt;sup&gt;(en)&lt;/sup&gt;, 烤麵包機&lt;/li&gt;
&lt;li&gt;le pain grillé, 烤麵包&lt;/li&gt;
&lt;li&gt;le batteur (électrique)&lt;sup&gt;(fr)&lt;/sup&gt;, der Schneebesen&lt;sup&gt;(de)&lt;/sup&gt;, 打蛋器&lt;/li&gt;
&lt;li&gt;le mixeur de cuisine&lt;sup&gt;(fr)&lt;/sup&gt;, 攪拌機&lt;/li&gt;
&lt;li&gt;la boîte (de conserve), 儲藏瓶&lt;/li&gt;
&lt;li&gt;le couvercle&lt;sup&gt;(fr)&lt;/sup&gt;, der Deckel&lt;sup&gt;(de)&lt;/sup&gt;, lid, cap, top, cover&lt;sup&gt;(en)&lt;/sup&gt;, 蓋子&lt;/li&gt;
&lt;li&gt;l&apos;ouvre-boîtes&lt;sup&gt;(fr)&lt;/sup&gt;, can-opener, tin-opener&lt;sup&gt;(en)&lt;/sup&gt;, 開瓶器&lt;/li&gt;
&lt;li&gt;le bocal, der Krug, das Glas, jar, 罐子&lt;/li&gt;
&lt;li&gt;l&apos;évier&lt;sup&gt;(fr)&lt;/sup&gt;, das Waschbecken&lt;sup&gt;(de)&lt;/sup&gt;, sink, wash-basin&lt;sup&gt;(en)&lt;/sup&gt;, 水槽&lt;/li&gt;
&lt;li&gt;la vaisselle, das Geschirr, dish&lt;/li&gt;
&lt;li&gt;l&apos;essuie-tout, les serviettes en papier, Papierhandtücher, paper towels, 紙巾&lt;/li&gt;
&lt;li&gt;l&apos;éponge, der Schwamm, sponge, 海綿&lt;/li&gt;
&lt;li&gt;le liquide vaisselle, le détergent à vaisselle&lt;sup&gt;(fr)&lt;/sup&gt;, das Spülmittel&lt;sup&gt;(de)&lt;/sup&gt;, dishwashing liquid, washing-up liquid&lt;sup&gt;(en)&lt;/sup&gt;, 洗滌液&lt;/li&gt;
&lt;li&gt;le lave-vaisselle, die Spülmaschine, dishwasher, 洗碗機&lt;/li&gt;
&lt;li&gt;la casserole, der Topf, pot, 鍋&lt;/li&gt;
&lt;li&gt;die Bratpfanne, frying pan, 平底鍋&lt;/li&gt;
&lt;li&gt;la spatule&lt;sup&gt;&lt;a id=&quot;fnr.10&quot; class=&quot;footref&quot; href=&quot;#fn.10&quot;&gt;10&lt;/a&gt;&lt;/sup&gt;, der Spachtel, Spatula, 鏟子&lt;/li&gt;
&lt;li&gt;la plaque de cuisson, die Backbleche, baking tray (oven-proof tray), 烤盘&lt;/li&gt;
&lt;li&gt;la théière, der Teekessel, teakettle, teapot, 水壺&lt;/li&gt;
&lt;li&gt;le thé, der Tee, tea, 茶&lt;/li&gt;
&lt;li&gt;le couteau, das Messer, knife, 刀&lt;/li&gt;
&lt;li&gt;der Teig 麵團&lt;/li&gt;
&lt;li&gt;die Reibe, 擦丝器&lt;/li&gt;
&lt;li&gt;la planche à découper, le conseil de la cuisine, das Schneidebrett, das Küchenbrett, the cutting board, the kitchen board, 砧板，廚房板&lt;/li&gt;
&lt;li&gt;le rouleau à patisserie, das Nudelholz, rolling pin, 擀麵杖&lt;/li&gt;
&lt;li&gt;la tablier, die Schürze, apron, 圍兜&lt;/li&gt;
&lt;li&gt;die Durchschlag, 漏斗(?)&lt;/li&gt;
&lt;li&gt;le tamis, das Sieb, the sieve, 篩子&lt;/li&gt;
&lt;li&gt;la tasse à mesurer&lt;sup&gt;(fr)&lt;/sup&gt;, die Messbecher&lt;sup&gt;(de)&lt;/sup&gt;, measuring cup&lt;sup&gt;(en)&lt;/sup&gt;, 量杯。&lt;/li&gt;
&lt;li&gt;la cuillère-mesure, der Messlöffel, measuring spoon, 量勺&lt;/li&gt;
&lt;li&gt;la cafetière&lt;sup&gt;(fr)&lt;/sup&gt;, die Kaffeekanne&lt;sup&gt;(de)&lt;/sup&gt;, coffee pot&lt;sup&gt;(en)&lt;/sup&gt;, 咖啡壺&lt;/li&gt;
&lt;li&gt;le café&lt;sup&gt;(fr)&lt;/sup&gt;, der Kaffee&lt;sup&gt;(de)&lt;/sup&gt;, coffee&lt;sup&gt;(en)&lt;/sup&gt;, 咖啡&lt;/li&gt;
&lt;li&gt;le moulin à café&lt;sup&gt;(fr)&lt;/sup&gt;, die Kaffeemühle&lt;sup&gt;(de)&lt;/sup&gt;, coffee grinder&lt;sup&gt;(en)&lt;/sup&gt;, 咖啡磨豆機&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;footnotes&quot;&gt;
&lt;h2 class=&quot;footnotes&quot;&gt;Footnotes: &lt;/h2&gt;
&lt;div id=&quot;text-footnotes&quot;&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.1&quot; class=&quot;footnum&quot; href=&quot;#fnr.1&quot;&gt;1&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
ŏ 這個字符的名字是 LATIN SMALL LETTER O BREVE. &lt;a href=&quot;http://en.wikipedia.org/wiki/Breve&quot;&gt;http://en.wikipedia.org/wiki/Breve&lt;/a&gt;. 和這個字符很相似的字符ǒ叫做 LATIN SMALL LEtter O WITH CARON. 前者是圓形的下半部，後者則是 V 字形。差不多是我們的第三聲符號。ī 這個字符則叫做 LATIN SMALL LETTER I MACRON. &lt;a href=&quot;http://en.wikipedia.org/wiki/Macron&quot;&gt;http://en.wikipedia.org/wiki/Macron&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.2&quot; class=&quot;footnum&quot; href=&quot;#fnr.2&quot;&gt;2&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;http://fr.wiktionary.org/wiki/cuisine&quot;&gt;http://fr.wiktionary.org/wiki/cuisine&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.3&quot; class=&quot;footnum&quot; href=&quot;#fnr.3&quot;&gt;3&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;http://dict.youdao.com/search?q=cuisine&amp;amp;keyfrom=dict.index&quot;&gt;http://dict.youdao.com/search?q=cuisine&amp;amp;keyfrom=dict.index&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.4&quot; class=&quot;footnum&quot; href=&quot;#fnr.4&quot;&gt;4&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
adv. 必然地，确定地。近义词 à coup sûr, à tous les coups, évidemment, inévitablement, infailliblement, sûrement.
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.5&quot; class=&quot;footnum&quot; href=&quot;#fnr.5&quot;&gt;5&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
n.m. 1（天主教的）教士，神甫；司铎 2（古代希腊、埃及等的）祭司 3&amp;lt;罕&amp;gt;和尚，道士，术士。
adj. 教士的，神甫的；祭司的。le grand prêtre（希伯来教）大祭司
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.6&quot; class=&quot;footnum&quot; href=&quot;#fnr.6&quot;&gt;6&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
法国剧作家季洛杜
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.7&quot; class=&quot;footnum&quot; href=&quot;#fnr.7&quot;&gt;7&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
亞爾薩斯：&lt;a href=&quot;http://cn.rendezvousenfrance.com/zh-hant/discover/28569&quot;&gt;http://cn.rendezvousenfrance.com/zh-hant/discover/28569&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.8&quot; class=&quot;footnum&quot; href=&quot;#fnr.8&quot;&gt;8&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
n. 中产阶级的女人；资产阶级的女人
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.9&quot; class=&quot;footnum&quot; href=&quot;#fnr.9&quot;&gt;9&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
A refrigerator accessory that can make and remake small uniform ice cubes.
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.10&quot; class=&quot;footnum&quot; href=&quot;#fnr.10&quot;&gt;10&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;div class=&quot;figure&quot;&gt;
&lt;p&gt;&lt;img src=&quot;http://upload.wikimedia.org/wikipedia/commons/thumb/1/13/Yellow_Billed_Spoonbill_PerthZoo_SMC_2005.jpg/439px-Yellow_Billed_Spoonbill_PerthZoo_SMC_2005.jpg&quot; alt=&quot;439px-Yellow_Billed_Spoonbill_PerthZoo_SMC_2005.jpg&quot; /&gt;
&lt;/p&gt;
&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;


&lt;/div&gt;
&lt;/div&gt;
</content>
 </entry>
 
 <entry>
   <title>單詞本：法語單詞 fermer</title>
   <link href="http://kimi.im/2014-01-25-francais-fermer"/>
   <updated>2014-01-25T00:00:00+00:00</updated>
   <id>http://kimi.im/francais-fermer</id>
   <content type="html">&lt;p class=&quot;verse&quot;&gt;
On contemplait la mer, on écoutait le vent,&lt;br  /&gt;
on se sentait gagner par l&apos;assoupissement de l&apos;extase.&lt;br  /&gt;
Quand les yeux sont remplis d&apos;un excès de beauté et de lumière,&lt;br  /&gt;
c&apos;est une volupté de les fermer.&lt;br  /&gt;
Tout à coup on se réveillait. Il était trop tard.&lt;br  /&gt;
La marée avait grossi peu à peu. L&apos;eau enveloppait le rocher.&lt;br  /&gt;
&lt;br  /&gt;
&amp;#x2013; Les Travailleurs de la mer,&lt;br  /&gt;
dans Œuvres complètes de Victor Hugo, vol. roman III,&lt;br  /&gt;
Victor Hugo&lt;br  /&gt;
&lt;/p&gt;

&lt;a href=&quot;http://www.flickr.com/photos/kimim-photo/12133309465/&quot; title=&quot;Flickr 上 kimim-photo 的 fermer&quot;&gt;&lt;img src=&quot;http://farm8.staticflickr.com/7424/12133309465_ab5972f551_z.jpg&quot; width=&quot;640&quot; height=&quot;426&quot; alt=&quot;fermer&quot;&gt;&lt;/a&gt;

&lt;div id=&quot;outline-container-orgheadline1&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgheadline1&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;1&lt;/span&gt; fermer&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-1&quot;&gt;
&lt;p&gt;
fermer&lt;sup&gt;&lt;a id=&quot;fnr.1&quot; class=&quot;footref&quot; href=&quot;#fn.1&quot;&gt;1&lt;/a&gt;&lt;/sup&gt; 在法語中是關閉的意思。比如
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;Fermer une chambre 關上房間&lt;/li&gt;
&lt;li&gt;Fermer un théatre 關閉劇院（暫時的，或者永久的關閉）&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgheadline2&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgheadline2&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;2&lt;/span&gt; 詞源&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-2&quot;&gt;
&lt;p&gt;
fermer 來自拉丁語 firmare&lt;sup&gt;(latin)&lt;/sup&gt; ，這個單詞有加固 affermir&lt;sup&gt;(fr)&lt;/sup&gt; 固化 solidifier&lt;sup&gt;(fr)&lt;/sup&gt; 和強化 fortifier&lt;sup&gt;(fr)&lt;/sup&gt; 的意思。在中世紀拉丁語（Medieval Latin）中，有 archa firmata（封閉的盒子 coffre fermé）。
&lt;/p&gt;

&lt;p&gt;
法語中另外一個單詞 ferme （農場，農莊）看似和關閉無關。但考慮到農莊往往都是有圍墻環繞（ceindre une villa de murailles），就不難理解 ferme 也源自 fermare&lt;sup&gt;(latin)&lt;/sup&gt; 了。
&lt;/p&gt;

&lt;p&gt;
法語中另一個單詞 clore 也有關閉的意思，來源於拉丁語 claudere&lt;sup&gt;(latin)&lt;/sup&gt; (&quot;to bar, block, close, enclose, bring an end to, confine&quot;)。也是英語 close 的詞源。
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgheadline3&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgheadline3&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;3&lt;/span&gt; fermer 釋義&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-3&quot;&gt;
&lt;ol class=&quot;org-ol&quot;&gt;
&lt;li&gt;Clore ce qui était ouvert, par une porte, un couvercle, une trappe, etc. 關閉原來開著的物品，比如門，蓋子，孔等。
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;Elle vit plusieurs fois s&apos;ouvrir et se fermer la porte, et à chaque fois, par l&apos;entrebaillement, elle aperçut Catherine rajeunie par l’action.&lt;/li&gt;
&lt;li&gt;Fermer une chambre&lt;/li&gt;
&lt;li&gt;Fermer une cour&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;Clore un édifice, un établissement, un lieu de réunion, etc., en vue d&apos;interrompre ce qui s&apos;y faisait, momentanément ou définitivement. 關閉建築，機構，聚所等。暫時或永久的關閉。
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;Fermer un théatre.&lt;/li&gt;
&lt;li&gt;Fermer un bureau.&lt;/li&gt;
&lt;li&gt;Les maisons de commerce ferment les dimanches et les jours de fête.&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;Interdire, mettre en interdiction. 禁止，取締
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;Faire fermer une école pour cause d&apos;épidémie. 因傳染病流行而關閉一所學校。&lt;/li&gt;
&lt;li&gt;Cette maison de jeu, cette salle de bal a été fermée par ordre supérieur. 此娛樂會所和舞廳被上級命令取締。&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;Cesser un commerce, une occupation. 中止經營、職務
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;Fermer boutique, cesser son commerce&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;Boucher une ouverture, une entrée, un passage et se dit en parlant des objets qui servent à la clôture. 封閉洞口，入口，通道。
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;Fermer la porte.&lt;/li&gt;
&lt;li&gt;Fermer un judas&lt;sup&gt;&lt;a id=&quot;fnr.2&quot; class=&quot;footref&quot; href=&quot;#fn.2&quot;&gt;2&lt;/a&gt;&lt;/sup&gt;.&lt;/li&gt;
&lt;li&gt;Fermer une écluse.&lt;/li&gt;
&lt;li&gt;Fermer la porte à clef, au verrou.&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;Interrompre un passage, le rendre impossible ou très difficile. 中斷通道使難以通行。
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;Fermer un chemin, une allée, une issue.&lt;/li&gt;
&lt;li&gt;Faire fermer des fenêtres avec des grilles 通過百葉窗遮擋窗口&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;Empêcher, par une résistance, par une défense quelconque, l&apos;accès, l&apos;entrée ou la sortie. 用障礙物，防禦物封鎖出入口。
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;Ce corps d&apos;armée ferme le passage à l&apos;ennemi.&lt;/li&gt;
&lt;li&gt;Fermer les ports, les mers, les chemins.&lt;/li&gt;
&lt;li&gt;Fermer à quelqu&apos;un le chemin des honneurs. 阻攔某人通向榮譽之路。&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;Enclore. 環繞
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;Fermer une ville, un parc, un jardin, enclore de murailles, de haies, de fossés. 用圍墻，籬笆，溝渠環繞城市，公園，花園。&lt;/li&gt;
&lt;li&gt;La grande muraille qui ferme la Chine au nord. 長城封鎖了中國北部。&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;Rapprocher l&apos;une contre l&apos;autre des parties dont l&apos;écartement formait une ouverture. 閉合
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;Fermer un sac, une bourse. 合上袋子，皮夾&lt;/li&gt;
&lt;li&gt;Fermer la main.&lt;/li&gt;
&lt;li&gt;Fermer un livre.&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;Clore, arrêter, terminer. 終止，停止，結束。
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;Fermer un compte.&lt;/li&gt;
&lt;li&gt;Fermer une discussion.&lt;/li&gt;
&lt;li&gt;Fermer les débats.&lt;/li&gt;
&lt;li&gt;Fermer une liste, une souscription.&lt;/li&gt;
&lt;li&gt;Son nom ferme la liste.&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgheadline8&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgheadline8&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;4&lt;/span&gt; fermer 的擴展學習&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-4&quot;&gt;
&lt;/div&gt;&lt;div id=&quot;outline-container-orgheadline4&quot; class=&quot;outline-3&quot;&gt;
&lt;h3 id=&quot;orgheadline4&quot;&gt;&lt;span class=&quot;section-number-3&quot;&gt;4.1&lt;/span&gt; 同義詞&lt;/h3&gt;
&lt;div class=&quot;outline-text-3&quot; id=&quot;text-4-1&quot;&gt;
&lt;p&gt;
clore 是 fermer 的書面語。Une enceinte hermétiquement close. 一個封閉的外殼。Clore un jardin. 關閉花園。Clore les passages. 關閉通道。Clore les yeux. 合上眼睛。Cela clôt le débat. 結束爭論。Clore une discussion.結束討論。Cette porte, cette fenêtre ne clôt pas bien. 門窗關閉的不好。
&lt;/p&gt;

&lt;p&gt;
Ce verbe n&apos;est guère usité, outre l&apos;infinitif, qu&apos;aux trois personnes du singulier du présent de l&apos;indicatif, je clos, tu clos, il clôt, à la seconde personne du singulier de l&apos;impératif, clos et au participe passé, clos, close.
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgheadline5&quot; class=&quot;outline-3&quot;&gt;
&lt;h3 id=&quot;orgheadline5&quot;&gt;&lt;span class=&quot;section-number-3&quot;&gt;4.2&lt;/span&gt; 反義詞&lt;/h3&gt;
&lt;div class=&quot;outline-text-3&quot; id=&quot;text-4-2&quot;&gt;
&lt;dl class=&quot;org-dl&quot;&gt;
&lt;dt&gt;ouvrir&lt;/dt&gt;&lt;dd&gt;öffnen&lt;sup&gt;(de)&lt;/sup&gt;, open&lt;sup&gt;(en)&lt;/sup&gt;&lt;/dd&gt;
&lt;/dl&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgheadline6&quot; class=&quot;outline-3&quot;&gt;
&lt;h3 id=&quot;orgheadline6&quot;&gt;&lt;span class=&quot;section-number-3&quot;&gt;4.3&lt;/span&gt; 生成詞&lt;/h3&gt;
&lt;div class=&quot;outline-text-3&quot; id=&quot;text-4-3&quot;&gt;
&lt;dl class=&quot;org-dl&quot;&gt;
&lt;dt&gt;enfermer&lt;/dt&gt;&lt;dd&gt;1) Mettre quelqu&apos;un ou quelque chose dans un lieu fermé de tous côtés. Enfermer un homme dans une prison. Enfermer des chevaux dans une écurie&lt;sup&gt;&lt;a id=&quot;fnr.3&quot; class=&quot;footref&quot; href=&quot;#fn.3&quot;&gt;3&lt;/a&gt;&lt;/sup&gt;. 2) Mettre quelqu&apos;un dans un asile&lt;sup&gt;&lt;a id=&quot;fnr.4&quot; class=&quot;footref&quot; href=&quot;#fn.4&quot;&gt;4&lt;/a&gt;&lt;/sup&gt; psychiatrique, dans une prison. C&apos;est un homme à enfermer. 3) Serrer, mettre une chose dans un lieu, dans un meuble&lt;sup&gt;&lt;a id=&quot;fnr.5&quot; class=&quot;footref&quot; href=&quot;#fn.5&quot;&gt;5&lt;/a&gt;&lt;/sup&gt;, que l&apos;on ferme, pour la mieux conserver, pour la soustraire aux regards, pour la garder plus sûrement. Enfermer des habits dans une armoire. Enfermer des papiers dans un secrétaire. 4) Environner de toutes parts. Enfermer un parc de murailles. 5) Contenir, comprendre. Ce passage enferme beaucoup de vérités.&lt;/dd&gt;
&lt;dt&gt;enfermé&lt;/dt&gt;&lt;dd&gt;adj. 閉合的。&lt;/dd&gt;
&lt;dt&gt;enfermement&lt;/dt&gt;&lt;dd&gt;n.m. 關閉，監禁，妥藏，閉門不出。&lt;/dd&gt;
&lt;dt&gt;réenfermer, ré-enfermer&lt;/dt&gt;&lt;dd&gt;&lt;/dd&gt;

&lt;dt&gt;renfermer&lt;/dt&gt;&lt;dd&gt;vt 1) 把…關住；把…重新關住，重新監禁：renfermer un prisonnier évadé 把逃犯重新關起來； 2) 把…鎖起來妥藏：renfermer des objets dans un tiroir 把一些物品鎖在抽屜裡； 3) [轉]隱藏（思想，感情）：renfermer ses chagrins dans son cœur 把悲痛藏在心裡； 4) 限制，局限於：renfermer sa matière en deux points 把問題限制在兩個方向； 5) 藏有；[轉]包含，含有：une maxime qui renferme un sens profond 一句含有深刻意義的格言。&lt;/dd&gt;
&lt;dt&gt;se renfermer&lt;/dt&gt;&lt;dd&gt;v. pr. 1) 閉門不出：se renfermer dans sa chambre 把自己關在房間裡 se renfermer sur soi-même 自我封閉； 2) [轉]使自己局限於：se renfermer dans le silence 保持緘默， se renfermer en soi-même 不暴露感情；集中註意力。&lt;/dd&gt;
&lt;dt&gt;fermeture&lt;/dt&gt;&lt;dd&gt;f. 關閉，封閉，鎖閉；鎖閉裝置，關閉裝置；關門，歇業，停業；結束 n.f. 關閉,鎖閉;關門,歇業,停業,結束;關閉裝置,閉鎖機構 la fermeture du bureau de poste, l&apos;heure de fermeture de la banque. fermeture éclair v. 拉鏈/拉鍊 fermeture à glissière&lt;sup&gt;(fr)&lt;/sup&gt;, fermeture à crémaillère&lt;sup&gt;(fr)&lt;/sup&gt;, zip&lt;sup&gt;(fr)&lt;/sup&gt;. der Reißverschluss&lt;sup&gt;(de)&lt;/sup&gt;. zipper&lt;sup&gt;(en)&lt;/sup&gt;, zip fastener&lt;sup&gt;(en)&lt;/sup&gt;.&lt;/dd&gt;
&lt;dt&gt;fermeté&lt;/dt&gt;&lt;dd&gt;n.f. 1) état de ce qui est ferme, difficile à ébranler, de ce qui ne chancelle point. Ne marchez pas sur la glace, elle n&apos;a pas encore assez de fermeté. 2) Qualité d’un corps solide, compact. La fermeté des chairs. 3) Vigueur, force. Fermeté de la main, Sûreté, assurance de la main pour exécuter quelque chose. Ce chirurgien n&apos;a pas assez de fermeté dans la main. 4) Fermeté d&apos;esprit, de jugement, se dit de la rectitude et de la solidité de l&apos;esprit. 5) (Dessin et musique) Exécution vigoureuse et hardie. Fermeté de pinceau, de crayon. Le jeu de ce musicien a beaucoup de fermeté. 6) Assurance, en parlant de la Manière d’agir ou de parler. Parler, répondre avec fermeté. La fermeté de son regard. 7) Constance, énergie, force morale qui fait braver les obstacles, les périls, qui rend capable de supporter, sans se plaindre, les souffrances, les revers, etc. Une politique sans fermeté.&lt;/dd&gt;
&lt;dt&gt;fermé&lt;/dt&gt;&lt;dd&gt;adj. 1) Qui n&apos;est pas ouvert. Théorème de Jordan &amp;#x2013; Toute courbe fermée simple du plan sépare ce dernier en deux composantes. 在拓撲學中，若爾當曲線定理說明每一個平面上的非自交環路（又稱為若爾當曲線），都把平面分成一個「內部」區域和一個「外部」區域，且任何從一個區域到另一個區域的道路都必然在某處與環路相交。它由奧斯瓦爾德·維布倫在1905年證明。&lt;sup&gt;&lt;a id=&quot;fnr.6&quot; class=&quot;footref&quot; href=&quot;#fn.6&quot;&gt;6&lt;/a&gt;&lt;/sup&gt;&lt;/dd&gt;
&lt;dt&gt;autofermer, auto-fermer&lt;/dt&gt;&lt;dd&gt;Se fermer de soi-même.&lt;/dd&gt;
&lt;dt&gt;fermail&lt;/dt&gt;&lt;dd&gt;n.m. (Vieilli) Agrafe. 【旧】搭扣，拉链（pl. ～aux）&lt;/dd&gt;
&lt;dt&gt;fermant&lt;/dt&gt;&lt;dd&gt;1) Qui se ferme. adj. 可关闭的； 2) (En particulier) Qui se ferme à clef. Meuble fermant.&lt;/dd&gt;
&lt;dt&gt;fermoir&lt;/dt&gt;&lt;dd&gt;n.m. Sorte de fermeture, serrure ou ressort s&apos;appliquant à certains objets, tels que livres, colliers, bracelets, médaillons, coffrets, etc. (扣住書、項鍊等的)搭扣，鎖扣，扣鉤，扣環，鑿子。Des fermoirs d‘or. Des fermoirs d’argent. clasp&lt;sup&gt;(en)&lt;/sup&gt;, hook&lt;sup&gt;(en)&lt;/sup&gt;, agraf&lt;sup&gt;(en)&lt;/sup&gt;, hooks and eyes&lt;sup&gt;(en)&lt;/sup&gt;; Agraffe&lt;sup&gt;(de)&lt;/sup&gt;, Spange&lt;sup&gt;(de)&lt;/sup&gt;, Häkchen&lt;sup&gt;(de)&lt;/sup&gt;, Klammer&lt;sup&gt;(de)&lt;/sup&gt;, Heftel&lt;sup&gt;(de)&lt;/sup&gt;, Drahthaken&lt;sup&gt;(de)&lt;/sup&gt;, Falz&lt;sup&gt;(de)&lt;/sup&gt;.&lt;/dd&gt;
&lt;dt&gt;affermer&lt;/dt&gt;&lt;dd&gt;租貸，出租，佃，租佃。Donner à ferme ou prendre à ferme 租出或租入農田。&lt;/dd&gt;
&lt;dt&gt;fermage&lt;/dt&gt;&lt;dd&gt;n.m. 1) (Agriculture) Statut réglant les rapports entre les propriétaires ruraux et les fermiers (qui exploitent les terres).（土地的）租種，租佃；佃出； 2) (Agriculture) Prix convenu pour le bail d&apos;une ferme. &amp;lt;引&amp;gt;（土地的）租金，地租。Payer les fermages. Il me doit beaucoup de fermages.&lt;/dd&gt;
&lt;dt&gt;fermier&lt;/dt&gt;&lt;dd&gt;&lt;/dd&gt;

&lt;dt&gt;fermière&lt;/dt&gt;&lt;dd&gt;1) n.m. 有承租權者；佃農，佃戶；農莊主，農場主；農夫，農民； 2) adj. Relatif à la ferme, au fermage, au fermier. Une compagnie, une société fermière.&lt;/dd&gt;
&lt;/dl&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-orgheadline7&quot; class=&quot;outline-3&quot;&gt;
&lt;h3 id=&quot;orgheadline7&quot;&gt;&lt;span class=&quot;section-number-3&quot;&gt;4.4&lt;/span&gt; 英法德翻譯&lt;/h3&gt;
&lt;div class=&quot;outline-text-3&quot; id=&quot;text-4-4&quot;&gt;
&lt;dl class=&quot;org-dl&quot;&gt;
&lt;dt&gt;close&lt;sup&gt;(en)&lt;/sup&gt;&lt;/dt&gt;&lt;dd&gt;fermer.&lt;/dd&gt;
&lt;dt&gt;schließen&lt;/dt&gt;&lt;dd&gt;1) 關、關閉、關上； 2) 結束、完成； 3) 下結論； 4) 包含、包括； 5) 推論
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;Tür bitte schließen!&lt;/li&gt;
&lt;li&gt;Der Reißverschluss schließt nicht mehr.&lt;/li&gt;
&lt;li&gt;Wir müssen jetzt schlie?en, bitte kommen Sie morgen wieder.&lt;/li&gt;
&lt;li&gt;Ich schließe daraus, dass ich einen anderen Weg gehen muss.&lt;/li&gt;
&lt;li&gt;[(aus + datif) Déduire&lt;sup&gt;(fr)&lt;/sup&gt;] Ich schließe aus diesem Brief, dass er nicht froh ist.&lt;/li&gt;
&lt;li&gt;[(aus + datif) Conclure&lt;sup&gt;(fr)&lt;/sup&gt;] Daraus kann man schließen, dass das Unternehmen Geld verdient.&lt;/li&gt;
&lt;/ul&gt;&lt;/dd&gt;
&lt;dt&gt;verschließen&lt;/dt&gt;&lt;dd&gt;1) vt. 關閉，給……上鎖，2) vr. 不理會，拒絕
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;Verschließen Sie die Tür.&lt;/li&gt;
&lt;li&gt;Sie verschloss den Schmuck in ihrem Tresor.&lt;/li&gt;
&lt;/ul&gt;&lt;/dd&gt;
&lt;dt&gt;zuschließen&lt;/dt&gt;&lt;dd&gt;to lock
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;Die alte Tür ließ sich mit Mühe und Not und knarrend zuschließen.&lt;/li&gt;
&lt;/ul&gt;&lt;/dd&gt;
&lt;dt&gt;zumachen&lt;/dt&gt;&lt;dd&gt;to close
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;Er machte das Fenster zu.&lt;/li&gt;
&lt;li&gt;Mach zu, wir müssen weiter!&lt;/li&gt;
&lt;li&gt;Er schloss die Schublade mit den wichtigen Daten zu.&lt;/li&gt;
&lt;/ul&gt;&lt;/dd&gt;
&lt;/dl&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;footnotes&quot;&gt;
&lt;h2 class=&quot;footnotes&quot;&gt;Footnotes: &lt;/h2&gt;
&lt;div id=&quot;text-footnotes&quot;&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.1&quot; class=&quot;footnum&quot; href=&quot;#fnr.1&quot;&gt;1&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;http://fr.wiktionary.org/wiki/fermer&quot;&gt;http://fr.wiktionary.org/wiki/fermer&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.2&quot; class=&quot;footnum&quot; href=&quot;#fnr.2&quot;&gt;2&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
le judas：叛徒，窺視孔。Judas：猶太。
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.3&quot; class=&quot;footnum&quot; href=&quot;#fnr.3&quot;&gt;3&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
n.f. 厩，马厩，马房，牲口棚；同一主人的赛马用的马匹；为同一品牌的汽车或是自行车参赛的运动员；受同一出版商支持的作家
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.4&quot; class=&quot;footnum&quot; href=&quot;#fnr.4&quot;&gt;4&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
n.m. 避难所，庇护所，隐蔽处；收容所，救济处；幽静处；庇护，保护
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.5&quot; class=&quot;footnum&quot; href=&quot;#fnr.5&quot;&gt;5&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
n.m. 家具；[法]动产
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.6&quot; class=&quot;footnum&quot; href=&quot;#fnr.6&quot;&gt;6&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;http://en.wikipedia.org/wiki/Jordan_curve_theorem&quot;&gt;http://en.wikipedia.org/wiki/Jordan_curve_theorem&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;


&lt;/div&gt;
&lt;/div&gt;
</content>
 </entry>
 
 <entry>
   <title>單詞本：法語單詞 an 和 année</title>
   <link href="http://kimi.im/2014-01-02-francais-an-et-annee"/>
   <updated>2014-01-02T00:00:00+00:00</updated>
   <id>http://kimi.im/francais-an-et-annee</id>
   <content type="html">&lt;p class=&quot;verse&quot;&gt;
Bonne année et bonne santé.&lt;br  /&gt;
&lt;/p&gt;

&lt;a href=&quot;http://www.flickr.com/photos/kimim-photo/11882330863/&quot; title=&quot;Flickr 上 kimim-photo 的 DSCF1652&quot;&gt;&lt;img src=&quot;http://farm4.staticflickr.com/3694/11882330863_af68413a2b_z.jpg&quot; width=&quot;640&quot; height=&quot;427&quot; alt=&quot;DSCF1652&quot;&gt;&lt;/a&gt;

&lt;dl class=&quot;org-dl&quot;&gt;
&lt;dt&gt;année&lt;/dt&gt;&lt;dd&gt;Jahr&lt;sup&gt;(de)&lt;/sup&gt; ，Vuosi&lt;sup&gt;(fi)&lt;/sup&gt;&lt;/dd&gt;
&lt;/dl&gt;

&lt;div id=&quot;outline-container-orgheadline1&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgheadline1&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;1&lt;/span&gt; 法語中的新年祝福&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-1&quot;&gt;
&lt;p&gt;
Bonne année et bonne santé 是法語中新年祝福語：新年快樂身體健康。更簡單一點的說法是“Bonne année”。但是“Bonne année et bonne santé”是更經典一些的用法。這樣說一方面表達了美好的祝願，另一方面加了“bonne santé”顯得更加押韻朗朗上口。
&lt;/p&gt;

&lt;p&gt;
法語中其他新年祝福還有：
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;Bonne et heureuse année.&lt;/li&gt;
&lt;li&gt;Meilleurs vœux&lt;sup&gt;&lt;a id=&quot;fnr.1&quot; class=&quot;footref&quot; href=&quot;#fn.1&quot;&gt;1&lt;/a&gt;&lt;/sup&gt;.&lt;/li&gt;
&lt;li&gt;Meilleurs vœux pour le Nouvel An&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgheadline2&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgheadline2&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;2&lt;/span&gt; 法國新年習俗&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-2&quot;&gt;
&lt;p&gt;
在法國，12 月 31 日叫做 la Saint-Sylvestre&lt;sup&gt;&lt;a id=&quot;fnr.2&quot; class=&quot;footref&quot; href=&quot;#fn.2&quot;&gt;2&lt;/a&gt;&lt;/sup&gt;。這一天通常會有慶祝宴會，叫做 le Réveillon de Saint-Sylvestre。晚宴的特色食物是香檳 champagne 和鵝肝 foie gras，同時還會有舞會 une soirée dansante。
&lt;/p&gt;

&lt;p&gt;
在午夜時分，大家在 Mistletoe&lt;sup&gt;&lt;a id=&quot;fnr.3&quot; class=&quot;footref&quot; href=&quot;#fn.3&quot;&gt;3&lt;/a&gt;&lt;/sup&gt; 下互相親吻或者貼面吻，相互致意最真摯的新年祝福。
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;


&lt;div id=&quot;outline-container-orgheadline3&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgheadline3&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;3&lt;/span&gt; An 和 Année 的區別&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-3&quot;&gt;
&lt;p&gt;
和漢語一樣，法語中也區分時刻和時間，比如 2000 年和 3 年，三點和三小時。法語中比如有：
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;an 和 année&lt;/li&gt;
&lt;li&gt;jour 和 journée&lt;/li&gt;
&lt;li&gt;matin 和 matinée&lt;/li&gt;
&lt;li&gt;soir 和 soirée&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
但是在英語中貌似不區分這兩種概念，所以英語母語的人可能會理解困難。但是我們應該問題不大。
&lt;/p&gt;

&lt;p&gt;
前述單詞對中，短版的那一組通常是陽性的，表示一段時間，我們稱之為 &lt;b&gt;時刻單詞&lt;/b&gt; 。
&lt;/p&gt;

&lt;p&gt;
比如：
&lt;/p&gt;
&lt;dl class=&quot;org-dl&quot;&gt;
&lt;dt&gt;Je suis en Chine depuis trois jours.&lt;/dt&gt;&lt;dd&gt;我三天前來中國。&lt;/dd&gt;
&lt;dt&gt;Il est heureux ce soir.&lt;/dt&gt;&lt;dd&gt;今晚他很嗨。&lt;/dd&gt;
&lt;/dl&gt;

&lt;p&gt;
而長版的那組單詞則全是陰性的，表示一段時間，用來強調實際時間長度，我們稱之為 &lt;b&gt;時間單詞&lt;/b&gt; 。
&lt;/p&gt;

&lt;p&gt;
比如：
&lt;/p&gt;
&lt;dl class=&quot;org-dl&quot;&gt;
&lt;dt&gt;Nous avons travaillé pendant toute la matinée.&lt;/dt&gt;&lt;dd&gt;我們干了一個早晨的活兒。&lt;/dd&gt;
&lt;dt&gt;J&apos;ai travaillé cinq années dans cette entreprise.&lt;/dt&gt;&lt;dd&gt;我在這家企業工作了五年。&lt;/dd&gt;
&lt;/dl&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgheadline4&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgheadline4&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;4&lt;/span&gt; 由 An/Année 組成的詞組和例句&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-4&quot;&gt;
&lt;dl class=&quot;org-dl&quot;&gt;
&lt;dt&gt;année bissextile&lt;/dt&gt;&lt;dd&gt;閏年，Schaltjahr&lt;sup&gt;(de)&lt;/sup&gt; ，leap year&lt;sup&gt;(en)&lt;/sup&gt; ，karkausvuosi&lt;sup&gt;(fi)&lt;/sup&gt; 。Se dit d’une année qui comporte 366 jours au lieu de 365 habituellement. Le jour ajouté est le 29 février. 2012 est une année bissextile.&lt;/dd&gt;
&lt;dt&gt;année commune&lt;/dt&gt;&lt;dd&gt;durée de 365 jours, par opposition à l’année bissextile.&lt;/dd&gt;
&lt;dt&gt;année grégorienne&lt;/dt&gt;&lt;dd&gt;année julienne, réformée par le pape Grégoire XIII, en 1582, et généralement adoptée aujourd’hui partout.&lt;/dd&gt;
&lt;dt&gt;année homme&lt;/dt&gt;&lt;dd&gt;人年，Personenjahre&lt;sup&gt;(de)&lt;/sup&gt; ，man-year&lt;sup&gt;(en)&lt;/sup&gt; 。Unité de mesure correspondant au travail d’une personne pendant une année. Ce projet demande 1 année-homme pour être réalisé. 其他還有 heure-homme，jour-homme，mois-homme，semaine-homme。&lt;/dd&gt;
&lt;dt&gt;année-lumière&lt;/dt&gt;&lt;dd&gt;光年，Lichtjahr&lt;sup&gt;(de)&lt;/sup&gt; ，lightyear&lt;sup&gt;(en)&lt;/sup&gt; 。Unité de longueur utilisée en astronomie, de symbole al, correspondant à la distance parcourue par la lumière dans le vide en une année julienne. Par la définition du mètre, une année-lumière vaut exactement 9 460 730 472 580 800 mètres, soit environ 9,46 pétamètres.&lt;/dd&gt;
&lt;dt&gt;décennal&lt;/dt&gt;&lt;dd&gt;Qui dure dix ans ou qui revient tous les dix ans. Fêtes décennales.&lt;/dd&gt;
&lt;dt&gt;bon an mal an &lt;sup&gt;&lt;a id=&quot;fnr.4&quot; class=&quot;footref&quot; href=&quot;#fn.4&quot;&gt;4&lt;/a&gt;&lt;/sup&gt;&lt;/dt&gt;&lt;dd&gt;年復一年，year in, year out&lt;sup&gt;(en)&lt;/sup&gt; ，jahraus, jahrein&lt;sup&gt;(de)&lt;/sup&gt;。Ceux-ci constituent la main-d&apos;œuvre la plus importante en Europe; ils effectuent souvent des taches qui se trouvent au-dessus de leurs forces et travaillent 24 h sur 24, bon an, mal an.&lt;sup&gt;(fr)&lt;/sup&gt; Sie bilden die größte Gruppe von Arbeitnehmern in Europa; sie heben oft mehr als sie selbst wiegen und arbeiten rund um die Uhr, und zwar jahraus, jahrein.&lt;sup&gt;(de)&lt;/sup&gt; These constitute the largest workforce in Europe, they often perform tasks that are beyond their strengths and work 24 hours on 24, year in, year out.&lt;sup&gt;(en)&lt;/sup&gt; 例句：Jahraus, jahrein haben wir auf unser Recht hingewiesen, die Bank zu kontrollieren.&lt;/dd&gt;
&lt;/dl&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgheadline7&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgheadline7&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;5&lt;/span&gt; 擴展學習&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-5&quot;&gt;
&lt;/div&gt;&lt;div id=&quot;outline-container-orgheadline5&quot; class=&quot;outline-3&quot;&gt;
&lt;h3 id=&quot;orgheadline5&quot;&gt;&lt;span class=&quot;section-number-3&quot;&gt;5.1&lt;/span&gt; 德語新年祝福&lt;/h3&gt;
&lt;div class=&quot;outline-text-3&quot; id=&quot;text-5-1&quot;&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;Ein gutes neues Jahr!&lt;/li&gt;
&lt;li&gt;Viel Glück im neuen Jahr!&lt;/li&gt;
&lt;li&gt;Ich wünschen dir Glück zu Neujahr!&lt;/li&gt;
&lt;li&gt;Ich wünschen Ihnen Glück zu Neujahr!&lt;/li&gt;
&lt;li&gt;Herzlichen Glückwunsch zum Jahreswechsel!&lt;/li&gt;
&lt;li&gt;Ich wünsche Ihnen ein gesundes neues Jahr!&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-orgheadline6&quot; class=&quot;outline-3&quot;&gt;
&lt;h3 id=&quot;orgheadline6&quot;&gt;&lt;span class=&quot;section-number-3&quot;&gt;5.2&lt;/span&gt; 芬蘭語新年祝福&lt;/h3&gt;
&lt;div class=&quot;outline-text-3&quot; id=&quot;text-5-2&quot;&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;Onnellista Uutta Vuotta&lt;sup&gt;&lt;a id=&quot;fnr.5&quot; class=&quot;footref&quot; href=&quot;#fn.5&quot;&gt;5&lt;/a&gt;&lt;/sup&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;footnotes&quot;&gt;
&lt;h2 class=&quot;footnotes&quot;&gt;Footnotes: &lt;/h2&gt;
&lt;div id=&quot;text-footnotes&quot;&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.1&quot; class=&quot;footnum&quot; href=&quot;#fnr.1&quot;&gt;1&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;http://en.wikipedia.org/wiki/%C5%92#Encodings&quot;&gt;http://en.wikipedia.org/wiki/%C5%92#Encodings&lt;/a&gt; to input œ, you should type &lt;code&gt;C-x 8 RET 153 RET&lt;/code&gt; in emacs.
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.2&quot; class=&quot;footnum&quot; href=&quot;#fnr.2&quot;&gt;2&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
Sylvestre I&lt;sup&gt;er&lt;/sup&gt; (ou Silvestre) ou saint Sylvestre fut le 33&lt;sup&gt;e&lt;/sup&gt; pape de 314 à 335, pendant le règne de l&apos;empereur Constantin I&lt;sup&gt;er&lt;/sup&gt; , qui instaura la tolérance du christianisme au sein de l&apos;Empire romain. 教宗西爾維斯特一世，（生年、地不詳—卒年、地不詳），於314年1月至335年12月31日在位為羅馬教宗。
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.3&quot; class=&quot;footnum&quot; href=&quot;#fnr.3&quot;&gt;3&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;http://www.essortment.com/myths-mistletoe-64799.html&quot;&gt;http://www.essortment.com/myths-mistletoe-64799.html&lt;/a&gt;
&lt;/p&gt;

&lt;p class=&quot;footpara&quot;&gt;
Mistletoe was said to be the sacred plant of Frigga, the goddess of love. When her son, Balder, dreamed of his death, Frigga rushed about seeking promises that her son would not die. Unfortunately, Balder&apos;s enemy, Loki, tipped an arrow with Mistletoe and gave it to Hoder, the blind god of winter who killed Balder with it. He was brought back to life by his mother when she shed tears that turned into Mistletoe berries, so Frigga kissed everyone who passed under the tree on which it grew. From that time on, anyone who stood under the mistletoe would receive only a kiss; no harm could come to him.
&lt;/p&gt;

&lt;p class=&quot;footpara&quot;&gt;
An Anglo-Saxon legend of Freya, goddess of love, said men must kiss any young girl who stood under a sprig of Mistletoe hung from the ceiling. Another custom required all the Mistletoe in the house to be burned on Twelfth Night, or the couples who kissed under it will never marry.
&lt;/p&gt;

&lt;p class=&quot;footpara&quot;&gt;
北歐神話中，有一天，天父奧丁及他的妻子弗麗嘉（Frigg）的兒子光明神巴德爾（Balder）做了自己將會死去的惡夢，於是擔心的 Frigg 拜託世上所有的事物發誓皆不可傷害 Balder，獨漏了一隻細小的槲寄生樹苗沒發誓。而洛基利用眼盲的霍德爾（Hoder），騙其向 Balder 擲出此樹，而槲寄生正是世上唯一可以傷害 Balder 的東西，枝條貫穿並殺死了 Balder，世界因此陷入了黑暗。Balder的母親 - 愛神 Frigg 得知後痛不欲生，於是她和眾神想盡辦法挽救 Balder 的生命，最後終於救活了他。Frigg 非常感激，因此承諾無論誰站在槲寄生下，便賜給那個人一個親吻。於是，造成聖誕節槲寄生下親吻的習俗。而且也將槲寄生象徵的涵義：愛、和平、寬恕，永遠保存下來，這三者也正是聖誕節的精神本質。傳說中，在槲寄生下親吻的情侶，會廝守到永遠。
&lt;/p&gt;

&lt;p class=&quot;footpara&quot;&gt;
另一種版本的神話中，在 Balder 被槲寄生枝條穿刺而死，但 Frigg 不願放棄希望，她請託赫爾莫德（Hermod）騎著奧丁的八足神馬斯萊布尼爾（Sleipnir）前往死亡之國。死界女王海拉（Hel）開出條件是：如果所有的生命及無生命都為 Balder 哭泣的話，才可讓 Balder 復活。於是，萬物都哭泣了，相傳這眼淚就是早晨時的露水。唯獨一個女巨人索克（Thokk。煤）住在地底，她並不需要光明，所以她不肯為 Balder 哭泣，所以 Balder 只能繼續留在死亡之國。然而另一說法中，這女巨人其實是洛基為了妨礙巴德爾的復活而變的。
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.4&quot; class=&quot;footnum&quot; href=&quot;#fnr.4&quot;&gt;4&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;http://www.expressio.fr/expressions/bon-an-mal-an.php&quot;&gt;http://www.expressio.fr/expressions/bon-an-mal-an.php&lt;/a&gt;
&lt;/p&gt;

&lt;p class=&quot;footpara&quot;&gt;
Employée au moins depuis le XVIIe siècle, cette expression se comprend aisément.
&lt;/p&gt;

&lt;p class=&quot;footpara&quot;&gt;
Elle a d&apos;abord été associée à des activités répétitives sur une longue durée ; la &apos;moyenne&apos; tient compte des bonnes et des mauvaises années qui se succèdent.
Ainsi en est-il dans un vignoble, par exemple, de la production de vin dont la qualité et le volume varient au fil des ans mais qui, bon an, mal an, restent sans grandes surprises, si les techniques n&apos;évoluent pas, ni les surfaces cultivées.
&lt;/p&gt;

&lt;p class=&quot;footpara&quot;&gt;
Elle s&apos;utilise maintenant beaucoup plus largement, même si la durée n&apos;est plus un multiple d&apos;années.
&lt;/p&gt;

&lt;p class=&quot;footpara&quot;&gt;
Il ne faut pas oublier que &apos;an&apos; vient du latin &apos;annus&apos; qui désignait l&apos;année mais aussi la récolte. La variabilité de la qualité et du volume des récoltes dans le temps, a un très probable lien avec la naissance de l&apos;expression.
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.5&quot; class=&quot;footnum&quot; href=&quot;#fnr.5&quot;&gt;5&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;http://www.babla.cn/%E6%89%8B%E5%86%8C/%E4%B8%AA%E4%BA%BA/%E7%A5%9D%E7%A6%8F/%E4%B8%AD%E6%96%87-%E8%8A%AC%E5%85%B0%E8%AF%AD/&quot;&gt;http://www.babla.cn/%E6%89%8B%E5%86%8C/%E4%B8%AA%E4%BA%BA/%E7%A5%9D%E7%A6%8F/%E4%B8%AD%E6%96%87-%E8%8A%AC%E5%85%B0%E8%AF%AD/&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;


&lt;/div&gt;
&lt;/div&gt;
</content>
 </entry>
 
 <entry>
   <title>單詞本：德語單詞 Ding</title>
   <link href="http://kimi.im/2014-01-01-deutsch-das-ding"/>
   <updated>2014-01-01T00:00:00+00:00</updated>
   <id>http://kimi.im/deutsch-das-ding</id>
   <content type="html">&lt;p class=&quot;verse&quot;&gt;
Gott gebe mir die Gelassenheit,&lt;br  /&gt;
Dinge hinzunehmen, die ich nicht ändern kann, den Mut,&lt;br  /&gt;
Dinge zu ändern, die ich ändern kann, und die Weisheit,&lt;br  /&gt;
das eine vom anderen zu unterscheiden.&lt;br  /&gt;
&amp;#xa0;&amp;#xa0;&amp;#xa0;&amp;#xa0;&amp;#xa0;&amp;#xa0;&amp;#xa0;&amp;#xa0;&amp;#xa0;&amp;#xa0;&amp;#xa0;&amp;#xa0;&amp;#xa0;&amp;#xa0;&amp;#xa0;&amp;#xa0;&amp;#xa0;&amp;#xa0;&amp;#xa0;&amp;#xa0;&amp;#xa0;&amp;#xa0;&amp;#xa0;&amp;#xa0;&amp;#xa0;&amp;#xa0;&amp;#xa0;&amp;#xa0;&amp;#xa0;&amp;#xa0;&amp;#xa0;&amp;#xa0;&amp;#x2013; Niebuhr&lt;br  /&gt;
&lt;/p&gt;

&lt;p&gt;
2014 年新年快樂。早上起床看到口袋德語君的新年祝福：
&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;
Die besten Dinge des Lebens kosten kein Geld: Familie, Freunde, Liebe, Lachen, Küssen, Umarmungen.
&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;
其中有一個單詞：Dinge。我們來展開學習一下這個單詞。
&lt;/p&gt;
&lt;a href=&quot;http://www.flickr.com/photos/kimim-photo/10378890104/&quot; title=&quot;Flickr 上 kimim-photo 的 IMG_4328&quot;&gt;&lt;img src=&quot;http://farm3.staticflickr.com/2808/10378890104_582b2171e1_z.jpg&quot; width=&quot;640&quot; height=&quot;427&quot; alt=&quot;IMG_4328&quot;&gt;&lt;/a&gt;
&lt;div id=&quot;outline-container-orgheadline7&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgheadline7&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;1&lt;/span&gt; 注釋&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-1&quot;&gt;
&lt;dl class=&quot;org-dl&quot;&gt;
&lt;dt&gt;Das Ding&lt;/dt&gt;&lt;dd&gt;這個單詞源自古高地德語(Althochdeutsch&lt;sup&gt;de&lt;/sup&gt; ，簡稱 OHG 或 Ahd)&lt;sup&gt;&lt;a id=&quot;fnr.1&quot; class=&quot;footref&quot; href=&quot;#fn.1&quot;&gt;1&lt;/a&gt;&lt;/sup&gt; ding，荷蘭語 ding，英語 thing，丹麥語 ting。在德語中，“物品”“物質”“事物”的非書面表達，相當於普通話的“東西”。書面語一般用 Gegenstand（對象）。&lt;/dd&gt;
&lt;/dl&gt;

&lt;p&gt;
Ding 有兩種複數形式，Dinge 和 Dinger。其中 Dinge 是東西、事物的統稱，而 Dinger 則用來指代某一類東西。另外，Dinger 用來表示小姑娘，以及不太文雅的意思。
&lt;/p&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgheadline4&quot; class=&quot;outline-3&quot;&gt;
&lt;h3 id=&quot;orgheadline4&quot;&gt;&lt;span class=&quot;section-number-3&quot;&gt;1.1&lt;/span&gt; die Dinge&lt;/h3&gt;
&lt;div class=&quot;outline-text-3&quot; id=&quot;text-1-1&quot;&gt;
&lt;p&gt;
Ding 的最常用的形式是複數形式的 Dinge。
&lt;/p&gt;
&lt;dl class=&quot;org-dl&quot;&gt;
&lt;dt&gt;viele Dinge&lt;/dt&gt;&lt;dd&gt;很多東西。&lt;/dd&gt;
&lt;dt&gt;guter Dinge&lt;/dt&gt;&lt;dd&gt;in cheerful sprits，這裡的 Dinge 是抽象的精神面貌的意思。&lt;/dd&gt;
&lt;dt&gt;estaunliche Dinge&lt;/dt&gt;&lt;dd&gt;astonishing things，令人震驚的事情。&lt;/dd&gt;
&lt;dt&gt;geschäftliche Dinge&lt;/dt&gt;&lt;dd&gt;business matters，商業事項。&lt;/dd&gt;
&lt;dt&gt;private Dinge&lt;/dt&gt;&lt;dd&gt;private matters，私事。&lt;/dd&gt;
&lt;dt&gt;sehenswerte Dinge&lt;/dt&gt;&lt;dd&gt;things worth seeing，值得看的東西。&lt;/dd&gt;
&lt;dt&gt;weltliche Dinge&lt;/dt&gt;&lt;dd&gt;temporals，時事。&lt;/dd&gt;
&lt;dt&gt;alle guten Dinge&lt;/dt&gt;&lt;dd&gt;all good things，所有好事。&lt;/dd&gt;
&lt;dt&gt;alle möglichen Dinge&lt;/dt&gt;&lt;dd&gt;all sorts of things，所有可能的事情。&lt;/dd&gt;
&lt;dt&gt;all wichtigen Dinge&lt;/dt&gt;&lt;dd&gt;all the important things，所有重要的事情。&lt;/dd&gt;
&lt;dt&gt;die allermeisten Dinge&lt;/dt&gt;&lt;dd&gt;the vast majority of the things，大多數事情。&lt;/dd&gt;
&lt;dt&gt;Gang der Dinge&lt;/dt&gt;&lt;dd&gt;cource of things，事情的起因。&lt;/dd&gt;
&lt;dt&gt;ganz unterschiedliche Dinge&lt;/dt&gt;&lt;dd&gt;different things，不同的事情。&lt;/dd&gt;
&lt;dt&gt;Internet der Dinge&lt;/dt&gt;&lt;dd&gt;Internet of Things，物聯網。&lt;/dd&gt;
&lt;dt&gt;die Lage der Dinge, der Stand der Dinge&lt;/dt&gt;&lt;dd&gt;state of affairs，事態。&lt;/dd&gt;
&lt;dt&gt;der Lauf der Dinge, der Verlauf der Dinge&lt;/dt&gt;&lt;dd&gt;run of events，事件進展。&lt;/dd&gt;
&lt;/dl&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgheadline1&quot; class=&quot;outline-4&quot;&gt;
&lt;h4 id=&quot;orgheadline1&quot;&gt;&lt;span class=&quot;section-number-4&quot;&gt;1.1.1&lt;/span&gt; Dinge 相關的詞組&lt;/h4&gt;
&lt;div class=&quot;outline-text-4&quot; id=&quot;text-1-1-1&quot;&gt;
&lt;dl class=&quot;org-dl&quot;&gt;
&lt;dt&gt;All Dinge ändern sich&lt;/dt&gt;&lt;dd&gt;All things change.&lt;/dd&gt;
&lt;dt&gt;nach Lage der Dinge&lt;/dt&gt;&lt;dd&gt;under the circumstances, as things are， according to the state of things。在……情況下。&lt;/dd&gt;
&lt;dt&gt;wie die Dinge lagen&lt;/dt&gt;&lt;dd&gt;as it were&lt;/dd&gt;
&lt;dt&gt;wie die Dinge liegen&lt;/dt&gt;&lt;dd&gt;as is, as matters stand, as it stands.&lt;/dd&gt;
&lt;/dl&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgheadline2&quot; class=&quot;outline-4&quot;&gt;
&lt;h4 id=&quot;orgheadline2&quot;&gt;&lt;span class=&quot;section-number-4&quot;&gt;1.1.2&lt;/span&gt; Dinge 相關的動詞短語&lt;/h4&gt;
&lt;div class=&quot;outline-text-4&quot; id=&quot;text-1-1-2&quot;&gt;
&lt;dl class=&quot;org-dl&quot;&gt;
&lt;dt&gt;die Dinge aufklären&lt;/dt&gt;&lt;dd&gt;to clear things up，整理。&lt;/dd&gt;
&lt;dt&gt;die Dinge aufschieben&lt;/dt&gt;&lt;dd&gt;to procrastinate，拖延。&lt;/dd&gt;
&lt;dt&gt;die Dinge auseinanderhalten&lt;/dt&gt;&lt;dd&gt;to keep things separate，分離。&lt;/dd&gt;
&lt;dt&gt;die Dinge durcheinanderbringen&lt;/dt&gt;&lt;dd&gt;to mess things up，弄亂。&lt;/dd&gt;
&lt;dt&gt;die Dinge laufen lassen&lt;/dt&gt;&lt;dd&gt;to let things slide, to ignore the things that one is supposed to do。推卸責任。
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;I am afraid that I let the matter slide while I was recovering from my operation. If I let things slide for even one day, I get hopelessly behind in my work.&lt;/li&gt;
&lt;li&gt;Wir können die Dinge nicht einfach laufen lassen.&lt;sup&gt;de&lt;/sup&gt; Les choses ne peuvent plus durer telles qu&apos;elles sont.&lt;sup&gt;fr&lt;/sup&gt;&lt;/li&gt;
&lt;li&gt;Das ist, wie wenn man sagte, man solle die Dinge laufen lassen und grßere Risiken eingehen.&lt;sup&gt;de&lt;/sup&gt; Cela revient à dire que ce qu&apos;il convient de faire, c&apos;est laisser les choses en l&apos;état et courir de sérieux risques.&lt;sup&gt;fr&lt;/sup&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/dd&gt;
&lt;dt&gt;die große Dinge schaffen&lt;/dt&gt;&lt;dd&gt;to achieve great things，成就大事。&lt;/dd&gt;
&lt;dt&gt;spaßige Dinge sagen&lt;/dt&gt;&lt;dd&gt;to say witty things，說笑話。&lt;/dd&gt;
&lt;dt&gt;mehrere Dinge gleichzeitig tun&lt;/dt&gt;&lt;dd&gt;to multi-task，同時做很多事情。&lt;/dd&gt;
&lt;dt&gt;keine halben Dinge tun&lt;/dt&gt;&lt;dd&gt;to do nothing halfway，不半途而廢。&lt;/dd&gt;
&lt;dt&gt;die Dinge in Ordnung bringen&lt;/dt&gt;&lt;dd&gt;to put things straight。&lt;/dd&gt;
&lt;/dl&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgheadline3&quot; class=&quot;outline-4&quot;&gt;
&lt;h4 id=&quot;orgheadline3&quot;&gt;&lt;span class=&quot;section-number-4&quot;&gt;1.1.3&lt;/span&gt; Dinge 的例句&lt;/h4&gt;
&lt;div class=&quot;outline-text-4&quot; id=&quot;text-1-1-3&quot;&gt;
&lt;dl class=&quot;org-dl&quot;&gt;
&lt;dt&gt;Werte sind wichtiger als Dinge.&lt;/dt&gt;&lt;dd&gt;Values are more important than things.&lt;/dd&gt;
&lt;dt&gt;Nahrung, Kleidung und Wohnung sind Dinge, die jeder braucht.&lt;/dt&gt;&lt;dd&gt;Food, clothes and a home are things that everyone needs.&lt;/dd&gt;
&lt;dt&gt;Aller guten Dinge sind drei.&lt;/dt&gt;&lt;dd&gt;Third time lucky. All good things come/go by/in threes. The best things come in threes. The third time is the charm. [proverb]&lt;/dd&gt;
&lt;dt&gt;Der Mensch ist das Maß aller Dinge. [Protagoras]&lt;/dt&gt;&lt;dd&gt;Man is the measure of all things.&lt;/dd&gt;
&lt;dt&gt;Das Richtige und das Durchführbare sind zwei verschiedene Dinge. [James Buchanan]&lt;/dt&gt;&lt;dd&gt;What is right and what is practicable are two different things.&lt;/dd&gt;
&lt;dt&gt;Die Dinge werden gut ausgehen.&lt;/dt&gt;&lt;dd&gt;Things will turn out well.&lt;/dd&gt;
&lt;dt&gt;Es gibt Dinge, die es wert sind dafür zu sterben.&lt;/dt&gt;&lt;dd&gt;There are things worth dying for.&lt;/dd&gt;
&lt;dt&gt;Es liegt in der Natur der Dinge, dass &amp;#x2026;&lt;/dt&gt;&lt;dd&gt;It&apos;s in the nature of things that &amp;#x2026; [idiom]&lt;/dd&gt;
&lt;dt&gt;Gott gebe mir die Gelassenheit, Dinge hinzunehmen, die ich nicht ändern kann, den Mut, Dinge zu ändern, die ich ändern kann, und die Weisheit, das eine vom anderen zu unterscheiden. [Niebuhr/Oetinger]&lt;/dt&gt;&lt;dd&gt;God grant us the serenity to accept the things we cannot change, courage to change the things we can, and wisdom to know the difference.&lt;sup&gt;en&lt;/sup&gt; Seigneur, donne-moi d&apos;accepter avec sérénité ce que je ne peux changer, donne-moi le courage de changer ce qui peut l&apos;être, et donne-moi d&apos;être assez sage pour voir la différence.&lt;sup&gt;fr&lt;/sup&gt; 這段是美國著名的神學家，也是政治哲學家尼布爾(1892-1971)在1934年的一段禱告。在二戰期間，每一位美國海軍士兵，在出發前都會拿到一份這樣的禱告詞。我的上帝，請賜我平靜，去接受我不能改變的；賜我勇氣，去改變我所能改變的；賜我智慧，去分辨兩者的區別。&lt;/dd&gt;
&lt;dt&gt;Lass die Dinge einfach laufen.&lt;/dt&gt;&lt;dd&gt;Let the chips fall where they may. [idiom]&lt;/dd&gt;
&lt;dt&gt;Meistens belehrt uns erst der Verlust über den Wert der Dinge. [Arthur Schopenhauer]&lt;/dt&gt;&lt;dd&gt;Mostly it is loss which teaches us about the worth of things.&lt;/dd&gt;
&lt;dt&gt;Mit Gott sind alle Dinge möglich.&lt;/dt&gt;&lt;dd&gt;With God, all things are possible. [Ohio state motto]&lt;/dd&gt;
&lt;dt&gt;Sag Menschen nie, wie sie Dinge tun sollen. Sag ihnen, was zu tun ist, und sie werden dich mit ihrem Einfallsreichtum überraschen.&lt;/dt&gt;&lt;dd&gt;Don&apos;t tell people how to do things. Tell them what to do and let them surprise you with their results. [George S. Patton Jr. - General of the US Army]&lt;/dd&gt;
&lt;dt&gt;Zwei Dinge sind unendlich, das Universum und die menschliche Dummheit, aber bei dem Universum bin ich mir noch nicht ganz sicher. [Albert Einstein zugeschrieben]&lt;/dt&gt;&lt;dd&gt;Only two things are infinite, the universe and human stupidity, and I&apos;m not sure about the former. Two things are infinite: the universe and human stupidity; and I&apos;m not sure about the universe. [Albert Einstein]&lt;/dd&gt;
&lt;dt&gt;Herr Gott, Beherrscher aller Dinge [J. S. Bach, BWV 120a]&lt;/dt&gt;&lt;dd&gt;Lord God, Ruler of All Things&lt;/dd&gt;
&lt;/dl&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgheadline6&quot; class=&quot;outline-3&quot;&gt;
&lt;h3 id=&quot;orgheadline6&quot;&gt;&lt;span class=&quot;section-number-3&quot;&gt;1.2&lt;/span&gt; die Dinger&lt;/h3&gt;
&lt;div class=&quot;outline-text-3&quot; id=&quot;text-1-2&quot;&gt;
&lt;/div&gt;&lt;div id=&quot;outline-container-orgheadline5&quot; class=&quot;outline-4&quot;&gt;
&lt;h4 id=&quot;orgheadline5&quot;&gt;&lt;span class=&quot;section-number-4&quot;&gt;1.2.1&lt;/span&gt; Dinger 的例句&lt;/h4&gt;
&lt;div class=&quot;outline-text-4&quot; id=&quot;text-1-2-1&quot;&gt;
&lt;dl class=&quot;org-dl&quot;&gt;
&lt;dt&gt;Seine Töchter sind zwei nette junge Dinger.&lt;/dt&gt;&lt;dd&gt;His daughters are two nice young things.&lt;sup&gt;&lt;a id=&quot;fnr.2&quot; class=&quot;footref&quot; href=&quot;#fn.2&quot;&gt;2&lt;/a&gt;&lt;/sup&gt; 按照 wiktionary.org 上的說法，在德語里這樣的表述不會太不禮貌。不過考慮到 große Dinger 是大咪咪的意思，所以建議盡量避免這樣的表述吧。&lt;/dd&gt;
&lt;dt&gt;Ich habe große Dinger&lt;/dt&gt;&lt;dd&gt;這是摘自 bild.de 的一段新聞，美國網球女運動員塞雷娜·威廉絲&lt;sup&gt;&lt;a id=&quot;fnr.3&quot; class=&quot;footref&quot; href=&quot;#fn.3&quot;&gt;3&lt;/a&gt;&lt;/sup&gt;在 Harper&apos;s Bazar 時尚雜誌上描述自己的身材和姐姐維納斯·威廉絲之間的差異：&quot;Ich war 23 Jahre alt, als ich feststellte, dass ich nun mal nicht wie Venus bin. Ich bin extrem kurvig, ich habe große Dinger und und einen mächtigen Hintern. Sie ist groß, schmal wie ein Model und passt überall rein&quot;, sagte sie jetzt dem Magazin &quot;Harper&apos;s Bazar&quot;.&lt;sup&gt;&lt;a id=&quot;fnr.4&quot; class=&quot;footref&quot; href=&quot;#fn.4&quot;&gt;4&lt;/a&gt;&lt;/sup&gt; 前面句子中“große Dinger”即豐滿的胸部之意。&lt;/dd&gt;
&lt;/dl&gt;
&lt;a href=&quot;http://en.wikipedia.org/wiki/Serena_Williams&quot; title=&quot;Serena Williams&quot;&gt;&lt;img src=&quot;http://upload.wikimedia.org/wikipedia/commons/thumb/0/06/Serena_Williams_US_Open_2013.jpg/406px-Serena_Williams_US_Open_2013.jpg&quot; width=&quot;406&quot; height=&quot;599&quot; alt=&quot;Serena Williams&quot;&gt;&lt;/a&gt;
&lt;p&gt;
&lt;i&gt;塞雷娜·威廉絲&lt;/i&gt;
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgheadline8&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgheadline8&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;2&lt;/span&gt; 詞彙拓展&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-2&quot;&gt;
&lt;dl class=&quot;org-dl&quot;&gt;
&lt;dt&gt;das Dingsbums, die Dingsbumse&lt;/dt&gt;&lt;dd&gt;thingamajig，不知道什麼東西的東西。&lt;/dd&gt;
&lt;dt&gt;Dingenskirchen&lt;/dt&gt;&lt;dd&gt;So-and-So. Frau Dingenskirchen, Mrs So-and-So. Wir fuhren nach Dingenskirchen. We went to so-and-so.&lt;/dd&gt;
&lt;dt&gt;der Gegenstand&lt;/dt&gt;&lt;dd&gt;object, item, thing, article.&lt;sup&gt;en&lt;/sup&gt; Chose, objet.&lt;sup&gt;fr&lt;/sup&gt;&lt;/dd&gt;
&lt;dt&gt;das Zeug&lt;/dt&gt;&lt;dd&gt;stuff, gear.&lt;sup&gt;en&lt;/sup&gt;&lt;/dd&gt;
&lt;dt&gt;die Sache&lt;/dt&gt;&lt;dd&gt;affair.&lt;sup&gt;en&lt;/sup&gt; Chose, produit; Affaire, chose, cause..&lt;sup&gt;fr&lt;/sup&gt;&lt;/dd&gt;
&lt;dt&gt;Dingé&lt;/dt&gt;&lt;dd&gt;丹熱，丹熱是法國伊勒-維萊訥省的一個市鎮，屬於雷恩區埃代縣。該市鎮總面積52.89平方公里，2009年時的人口為1543人。&lt;/dd&gt;
&lt;/dl&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;footnotes&quot;&gt;
&lt;h2 class=&quot;footnotes&quot;&gt;Footnotes: &lt;/h2&gt;
&lt;div id=&quot;text-footnotes&quot;&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.1&quot; class=&quot;footnum&quot; href=&quot;#fnr.1&quot;&gt;1&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
Als Althochdeutsch (abgekürzt Ahd.) bezeichnet man die älteste schriftlich bezeugte Form der hochdeutschen Sprache in der Zeit etwa von 750 bis 1050.  &lt;a href=&quot;http://de.wikipedia.org/wiki/Althochdeutsch&quot;&gt;http://de.wikipedia.org/wiki/Althochdeutsch&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.2&quot; class=&quot;footnum&quot; href=&quot;#fnr.2&quot;&gt;2&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
The plural Dinger is also used where the word means &quot;girl&quot; (or less often &quot;boy&quot;): Seine Töchter sind zwei nette junge Dinger. – &quot;His daughters are two nice young things.&quot; (This usage is probably somewhat less disrespectful in German than it might be in English, but still not recommendable.)  &lt;a href=&quot;http://en.wiktionary.org/wiki/Ding#German&quot;&gt;http://en.wiktionary.org/wiki/Ding#German&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.3&quot; class=&quot;footnum&quot; href=&quot;#fnr.3&quot;&gt;3&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
小威廉絲，美國職業網球女運動員，網球史上最佳女子選手之一，美國最優秀的女子體育人物之一。她的姊姊維納斯·威廉絲亦是著名女子網球選手，故常稱呼塞雷娜小威廉絲，簡稱&quot;小威&quot;，而維納斯則為大威廉絲、大威。小威廉絲是第12位登上WTA單打排名第1的選手，共先後六度登頂。
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.4&quot; class=&quot;footnum&quot; href=&quot;#fnr.4&quot;&gt;4&lt;/a&gt;&lt;/sup&gt; &lt;div class=&quot;footpara&quot;&gt;&lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;http://www.bild.de/sport/mehr-sport/williams/ich-habe-grosse-dinger-13257240.bild.html&quot;&gt;http://www.bild.de/sport/mehr-sport/williams/ich-habe-grosse-dinger-13257240.bild.html&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;


&lt;/div&gt;
&lt;/div&gt;
</content>
 </entry>
 
 <entry>
   <title>爸爸怎樣和寶寶建立良好的親子關係</title>
   <link href="http://kimi.im/2013-12-29-bonding-with-baby"/>
   <updated>2013-12-29T00:00:00+00:00</updated>
   <id>http://kimi.im/bonding-with-baby</id>
   <content type="html">&lt;iframe src=&quot;https://www.flickr.com/photos/kimim-photo/11616055053/player/c64480d113&quot; height=&quot;480&quot; width=&quot;640&quot;  frameborder=&quot;0&quot; allowfullscreen webkitallowfullscreen mozallowfullscreen oallowfullscreen msallowfullscreen&gt;&lt;/iframe&gt;

&lt;p&gt;
首先，恭喜你喜得貴子。當一個小生命降臨的時候，新爸爸和新媽媽面臨了一個新的挑戰：怎樣和寶寶建立良好的親子關係？通常新媽媽會具有先天優勢，因為新媽媽和寶寶相處時間更久。而新爸爸則需要更大的努力去和寶寶建立親密的親子關係。
&lt;/p&gt;

&lt;p&gt;
記住，在親子關係的建立過程中，不要去和新媽媽競爭。寶寶的媽媽在和寶寶建立親子關係的過程中具有先天內在的優勢。第一，在母乳餵養&lt;sup&gt;&lt;a id=&quot;fnr.1&quot; name=&quot;fnr.1&quot; class=&quot;footref&quot; href=&quot;#fn.1&quot;&gt;1&lt;/a&gt;&lt;/sup&gt;的過程中，她和寶寶之間有更多高質量的皮膚接觸和眼神接觸。第二，媽媽在哺乳期身體荷爾蒙可以幫助媽媽和寶寶建立更自然的母嬰感情。因此，不要挑戰自然。作為爸爸，你無法像媽媽那樣自然快速的和寶寶建立親密的親子關係。本文介紹一些簡單的步驟來幫助你一步一步的和寶寶建立親密關係。
&lt;/p&gt;

&lt;div id=&quot;outline-container-sec-1&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;sec-1&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;1&lt;/span&gt; 保持皮膚接觸&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-1&quot;&gt;
&lt;p&gt;
嬰兒的溝通能力非常有限。不過其中最有效的溝通途徑是皮膚接觸。寶寶非常喜歡皮膚接觸，所以你可以脫光上衣，把寶寶放在胸口哦，輕輕的給他做按摩。撫觸他的手臂，大腿，手掌，手指，小腳丫。經常性的愛撫能幫助你更快更好的和寶寶建立親密關係。當然一定要保持溫暖舒適的室溫，不論凍著寶寶還是凍著你都是不好的。
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-sec-2&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;sec-2&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;2&lt;/span&gt; 保持眼神接觸&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-2&quot;&gt;
&lt;p&gt;
通常新生寶寶的視力距離為 20-30 釐米，而這個距離正好是媽媽給寶寶餵奶時候，寶寶眼睛到媽媽眼睛之間的距離。所以媽媽可以在給寶寶餵奶的時候，迅速和寶寶建立良好的親子關係。作為爸爸，可以將寶寶抱在胸口，保持和他的眼神交流。這樣可以幫助你和寶寶之間建立良好的默契。
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-sec-3&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;sec-3&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;3&lt;/span&gt; 通過音樂建立聯繫&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-3&quot;&gt;
&lt;p&gt;
寶寶喜歡聽音樂。輕輕唱歌或者放些輕快的音樂，然後抱著寶寶一起跳舞，寶寶會感覺非常舒適。輕輕的給寶寶唱歌安撫他睡覺，這樣可以和寶寶建立非常愉悅的親子關係。昨天我家寶寶吃完奶遲遲不肯睡覺，按照往常的做法就是繼續給他餵奶。不過我輕輕抱著他在臥室散步，給他哼小曲，很快他就安靜下來了，並且昨晚他一晚上睡眠質量也很好。所以這是一個行之有效的辦法。
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-sec-4&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;sec-4&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;4&lt;/span&gt; 不要一開始就放棄&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-4&quot;&gt;
&lt;p&gt;
很多新爸爸一開始感到一些緊張，不確定該做什麼，於是放棄了在第一時間和寶寶建立親密關係。我的建議是不論什麼時候，有機會就抱起你的寶寶，抱著他散散步，唱唱歌就很好。
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-sec-5&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;sec-5&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;5&lt;/span&gt; 參與日常照顧工作&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-5&quot;&gt;
&lt;p&gt;
媽媽通常會成為照顧寶寶的核心人物。但是其實爸爸也可以參與到很多照顧寶寶的日常工作中去。新爸爸可以考慮領一些日常任務，比如給寶寶洗澡，帶著寶寶散步，或者時不時的給寶寶餵奶。這樣可以讓疲倦的媽媽得到一些休息，一來，可以維護你和寶寶媽媽的感情，二來，可以有更多時間和寶寶接觸建立親密關係。
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-sec-6&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;sec-6&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;6&lt;/span&gt; 要非常耐心&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-6&quot;&gt;
&lt;p&gt;
爸爸和小寶寶之間建立親密默契的親子關係通常會比媽媽要慢，這是很自然的事情，前面已經講過。所以在這個過程中，爸爸一定要有耐心，不要因為一時的不順利而放棄。為了建立親密的親子關係，值得努力花時間去等待。以後你會明白，所有的付出都是值得的！
&lt;/p&gt;

&lt;p&gt;
從寶寶出生到童年期，需要爸爸付出更多的時間去和寶寶建立良好的親子關係。當他還是嬰兒的時候，需要很多時間去抱著他給他溫暖和安全，給他哼歌，哄他睡覺。如果你能在寶寶嬰兒時期就投入時間和他建立親密默契的親子關係，那麼，在寶寶之後的成長過程中，你們就能很好的維護加強這樣的親密關係。所以現在的任何時間上的付出都是值得的。祝你的寶寶健康快樂！
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;footnotes&quot;&gt;
&lt;h2 class=&quot;footnotes&quot;&gt;Footnotes: &lt;/h2&gt;
&lt;div id=&quot;text-footnotes&quot;&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.1&quot; name=&quot;fn.1&quot; class=&quot;footnum&quot; href=&quot;#fnr.1&quot;&gt;1&lt;/a&gt;&lt;/sup&gt; &lt;p class=&quot;footpara&quot;&gt;
breastfeeding&lt;sup&gt;en&lt;/sup&gt; ，le allaitement&lt;sup&gt;fr&lt;/sup&gt; ，das Stillen&lt;sup&gt;de&lt;/sup&gt;
&lt;/p&gt;&lt;/div&gt;


&lt;/div&gt;
&lt;/div&gt;
</content>
 </entry>
 
 <entry>
   <title>PROFIBUS 總線簡介</title>
   <link href="http://kimi.im/2013-12-26-PROFIBUS-technology"/>
   <updated>2013-12-26T00:00:00+00:00</updated>
   <id>http://kimi.im/PROFIBUS-technology</id>
   <content type="html">&lt;div id=&quot;outline-container-sec-1&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;sec-1&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;1&lt;/span&gt; 什麽是 PROFIBUS&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-1&quot;&gt;
&lt;p&gt;
PROFIBUS 是一種國際化的，開放的，廠商中立的現場總線標準。其廣泛適用於工業生產和過程自動化領域。到 2012 年為止，全世界總共有 4380 萬 PROFIBUS 設備節點，其中 750 萬應用於過程自動化領域。
&lt;/p&gt;

&lt;div class=&quot;figure&quot;&gt;
&lt;p&gt;&lt;img src=&quot;http://www.profibus.com/typo3temp/pics/9cf78c0750.jpg&quot; alt=&quot;9cf78c0750.jpg&quot; /&gt;
&lt;/p&gt;
&lt;p&gt;&lt;span class=&quot;figure-number&quot;&gt;Figure 1:&lt;/span&gt; PROFIBUS 安裝節點增長趨勢&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-sec-2&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;sec-2&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;2&lt;/span&gt; PROFIBUS 標準&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-2&quot;&gt;
&lt;p&gt;
PROFIBUS 最早在 1991/1993 年的 德國標準 DIN 19245&lt;sup&gt;&lt;a id=&quot;fnr.1&quot; name=&quot;fnr.1&quot; class=&quot;footref&quot; href=&quot;#fn.1&quot;&gt;1&lt;/a&gt;&lt;/sup&gt; 標準中被定義。之後在 1996 年加入了 EN 50170&lt;sup&gt;&lt;a id=&quot;fnr.2&quot; name=&quot;fnr.2&quot; class=&quot;footref&quot; href=&quot;#fn.2&quot;&gt;2&lt;/a&gt;&lt;/sup&gt; 和 EN 50254&lt;sup&gt;&lt;a id=&quot;fnr.3&quot; name=&quot;fnr.3&quot; class=&quot;footref&quot; href=&quot;#fn.3&quot;&gt;3&lt;/a&gt;&lt;/sup&gt; 兩項歐洲國際標準，再後來在 1999 年加入國際標準 IEC 61158&lt;sup&gt;&lt;a id=&quot;fnr.4&quot; name=&quot;fnr.4&quot; class=&quot;footref&quot; href=&quot;#fn.4&quot;&gt;4&lt;/a&gt;&lt;/sup&gt; 和 IEC 61784&lt;sup&gt;&lt;a id=&quot;fnr.5&quot; name=&quot;fnr.5&quot; class=&quot;footref&quot; href=&quot;#fn.5&quot;&gt;5&lt;/a&gt;&lt;/sup&gt;。開放和中立的國際標準保障了 PROFIBUS 的廠商中立性和開放性。
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-sec-3&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;sec-3&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;3&lt;/span&gt; PROFIBUS 功能特點&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-3&quot;&gt;
&lt;p&gt;
PROFIBUS 總線通過一根線纜連接控制器控制系統和若干分佈式現場設備，包括傳感器（senser&lt;sup&gt;en&lt;/sup&gt; ,le capteur&lt;sup&gt;fr&lt;/sup&gt; ,der Sensor&lt;sup&gt;de&lt;/sup&gt; ）和執行器（actuator&lt;sup&gt;en&lt;/sup&gt; ,l&apos;actioneur&lt;sup&gt;fr&lt;/sup&gt; , der Aktor&lt;sup&gt;de&lt;/sup&gt; ）等。
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-sec-4&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;sec-4&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;4&lt;/span&gt; 統一的通訊協議&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-4&quot;&gt;
&lt;p&gt;
PROFIBUS 為工廠和過程自動化應用提供統一的通訊協議 - PROFIBUS DP（Decentralized Periphery）。PROFIBUS DP 確保了整個生產線控制中的入廠物流，生產工藝，出廠物流的各個環節統一控制管理。
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-sec-5&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;sec-5&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;5&lt;/span&gt; 模塊化的系統&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-5&quot;&gt;
&lt;p&gt;
PROFIBUS 根據不同應用功能劃分成不同模塊：
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;傳輸層模塊
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
RS485，RS485-IS，MBP，MBP-IS，Glass，PCF，Plastic Optical，Wireless
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;通訊層模塊
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
PROFIBUS DP（DP-V0，DP-V1，DP-V2）
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;通用應用層模塊
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
PROFIsafe，I&amp;amp;M，iPar-Server，Time Stamp，Redundancy
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;特定應用層模塊
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
PROFIdrive，PA Devices，Ident Systems，Encoder，Weighing &amp;amp; Dosage，LabAutomation，HART on PROFIBUS
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;工程組態模塊
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
GSD，EDD，FDT/DTM，TCI
&lt;/p&gt;

&lt;p&gt;
一個典型的 PROFIBUS 應用可以由不同模塊組合而成。PROFIBUS 的核心應用包括：
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;工廠自動化
&lt;/li&gt;
&lt;li&gt;過程自動化
&lt;/li&gt;
&lt;li&gt;傳動技術
&lt;/li&gt;
&lt;li&gt;安全應用
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-sec-6&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;sec-6&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;6&lt;/span&gt; PROFIBUS 的優勢&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-6&quot;&gt;
&lt;p&gt;
PROFIBUS 可以為工廠的整個生命週期大幅減少實施成本，提升業務輸出。
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;PROFIBUS 簡化工廠設計，避免了過多的佈線，減少了硬件資源，提供了快速的試運行（commissioning&lt;sup&gt;en&lt;/sup&gt; , la mise en service&lt;sup&gt;fr&lt;/sup&gt; , die Inbetriebnahme&lt;sup&gt;de&lt;/sup&gt; ）和可控的成本。
&lt;/li&gt;
&lt;li&gt;PROFIBUS 提供了強大的診斷功能，保障了試運行的快速實施。
&lt;/li&gt;
&lt;li&gt;PROFIBUS 提供了快速及時的數據和管理操作，保障了高效的生產效率。
&lt;/li&gt;
&lt;li&gt;PROFIBUS 提供了先進的固定資產管理策略，保障了工廠和設備的高效管理和維護。
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;footnotes&quot;&gt;
&lt;h2 class=&quot;footnotes&quot;&gt;Footnotes: &lt;/h2&gt;
&lt;div id=&quot;text-footnotes&quot;&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.1&quot; name=&quot;fn.1&quot; class=&quot;footnum&quot; href=&quot;#fnr.1&quot;&gt;1&lt;/a&gt;&lt;/sup&gt; &lt;p class=&quot;footpara&quot;&gt;
Deutsches Institut für Normung(&lt;a href=&quot;http://www.din.de&quot;&gt;http://www.din.de&lt;/a&gt;), &lt;i&gt;DIN 19245-3 (1994-10) Process Measurement And Control; Profibus; Process Field Bus; Decentralized Periphery (dp)&lt;/i&gt;, &lt;a href=&quot;http://infostore.saiglobal.com/store/details.aspx?ProductID=690846&quot;&gt;http://infostore.saiglobal.com/store/details.aspx?ProductID=690846&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.2&quot; name=&quot;fn.2&quot; class=&quot;footnum&quot; href=&quot;#fnr.2&quot;&gt;2&lt;/a&gt;&lt;/sup&gt; &lt;p class=&quot;footpara&quot;&gt;
GEN. &lt;i&gt;EN 50170. Volume 2/3 (Profibus) : General Purpose Field Communicacition System&lt;/i&gt;, &lt;a href=&quot;http://books.google.com.hk/books?id=uGbmcQAACAAJ&quot;&gt;http://books.google.com.hk/books?id=uGbmcQAACAAJ&lt;/a&gt;, CEN, 1996
&lt;/p&gt;&lt;/div&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.3&quot; name=&quot;fn.3&quot; class=&quot;footnum&quot; href=&quot;#fnr.3&quot;&gt;3&lt;/a&gt;&lt;/sup&gt; &lt;p class=&quot;footpara&quot;&gt;
European Committee for Standards - Electrical. &lt;i&gt;EN 50254:1998 High Efficiency Communication Subsystem For Small Data Packages&lt;/i&gt;, &lt;a href=&quot;http://infostore.saiglobal.com/store/Details.aspx?productID=364368&quot;&gt;http://infostore.saiglobal.com/store/Details.aspx?productID=364368&lt;/a&gt;, European Committee for Standards - Electrical, 01 Jul 2004
&lt;/p&gt;&lt;/div&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.4&quot; name=&quot;fn.4&quot; class=&quot;footnum&quot; href=&quot;#fnr.4&quot;&gt;4&lt;/a&gt;&lt;/sup&gt; &lt;p class=&quot;footpara&quot;&gt;
&lt;i&gt;IEC 61158. Digital data communication for measurement and control – Fieldbus for use in industrial control systems&lt;/i&gt;. IEC 61158 deals with the technologies. The individual fieldbuses are differentiated by the definition of &quot;fieldbus protocol types&quot;. 
&lt;/p&gt;&lt;/div&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.5&quot; name=&quot;fn.5&quot; class=&quot;footnum&quot; href=&quot;#fnr.5&quot;&gt;5&lt;/a&gt;&lt;/sup&gt; &lt;p class=&quot;footpara&quot;&gt;
&lt;i&gt;IEC 61158. Profile sets for continuous and discrete manufacturing relative to fieldbus use in industrial control systems&lt;/i&gt;. IEC 61784 specifies in &quot;Communication Profile Families&quot; which subsets of services and protocols of IEC 61158 (and other standards) are used by a given fieldbus system.
&lt;/p&gt;&lt;/div&gt;


&lt;/div&gt;
&lt;/div&gt;
</content>
 </entry>
 
 <entry>
   <title>來自《詩經》的優美名字</title>
   <link href="http://kimi.im/2013-12-22-name-from-the-classic-of-poetry"/>
   <updated>2013-12-22T00:00:00+00:00</updated>
   <id>http://kimi.im/name-from-the-classic-of-poetry</id>
   <content type="html">&lt;p&gt;
因為給女寶寶取名，差不多通讀了《詩經》三百首。稍稍整理一些可以作為名字的詩句，按先後順序列舉如下。
&lt;/p&gt;

&lt;dl class=&quot;org-dl&quot;&gt;
&lt;dt&gt; 關關，河洲，淑窈，鐘樂 &lt;/dt&gt;&lt;dd&gt;《關雎》：關關雎鳩、在河之洲。窈窕淑女、君子好逑。參差荇菜、左右流之。窈窕淑女、寤寐求之。求之不得、寤寐思服。悠哉悠哉、輾轉反側。參差荇菜、左右采之。窈窕淑女、琴瑟友之。參差荇菜、左右芼之。窈窕淑女、鍾鼓樂之。
&lt;/dd&gt;
&lt;dt&gt; 維葉 &lt;/dt&gt;&lt;dd&gt;《葛覃》葛之覃兮、施于中谷。維葉萋萋、黃鳥于飛。集于灌木、其鳴喈喈。
&lt;/dd&gt;
&lt;dt&gt; 周行 &lt;/dt&gt;&lt;dd&gt;《卷耳》：采采卷耳、不盈頃筐。嗟我懷人、寘彼周行。
&lt;/dd&gt;
&lt;dt&gt; 灼華 &lt;/dt&gt;&lt;dd&gt;《桃夭》：桃之夭夭、灼灼其華。
&lt;/dd&gt;
&lt;dt&gt; 采之，袺之，襭之 &lt;/dt&gt;&lt;dd&gt;《詩經 芣苢》：采采芣苢、薄言采之。采采芣苢、薄言有之。采采芣苢、薄言掇之。采采芣苢、薄言捋之。采采芣苢、薄言袺之。采采芣苢、薄言襭之。
&lt;/dd&gt;
&lt;dt&gt; 方思 &lt;/dt&gt;&lt;dd&gt;《漢廣》：江之永矣、不可方思。
&lt;/dd&gt;
&lt;dt&gt; 采蘩 &lt;/dt&gt;&lt;dd&gt;《采蘩》：于以采蘩、于沼于沚。
&lt;/dd&gt;
&lt;dt&gt; 棣華 &lt;/dt&gt;&lt;dd&gt;《何彼襛矣》：何彼襛矣、唐棣之華。曷不肅雝、王姬之車。
&lt;/dd&gt;
&lt;dt&gt; 以茹 &lt;/dt&gt;&lt;dd&gt;《柏舟》：我心匪鑒、不可以茹。
&lt;/dd&gt;
&lt;dt&gt; 靜思 &lt;/dt&gt;&lt;dd&gt;《柏舟》：靜言思之、寤辟有摽。
&lt;/dd&gt;
&lt;dt&gt; 惠淑 &lt;/dt&gt;&lt;dd&gt;《燕燕》：終溫且惠、淑慎其身。
&lt;/dd&gt;
&lt;dt&gt; 云遠 &lt;/dt&gt;&lt;dd&gt;《雄雉》：瞻彼日月、悠悠我思。道之云遠、曷云能來。
&lt;/dd&gt;
&lt;dt&gt; 簡兮 &lt;/dt&gt;&lt;dd&gt;《簡兮》：簡兮簡兮、方將萬舞。日之方中、在前上處。
&lt;/dd&gt;
&lt;dt&gt; 惠好 &lt;/dt&gt;&lt;dd&gt;《北風》：惠而好我、攜手同行。
&lt;/dd&gt;
&lt;dt&gt; 靜姝，貽彤，歸荑 &lt;/dt&gt;&lt;dd&gt;《靜女》：靜女其姝、俟我於城隅。愛而不見、搔首踟躕。靜女其孌、貽我彤管。彤管有煒、說懌女美。自牧歸荑、洵美且異。匪女之為美、美人之貽。
&lt;/dd&gt;
&lt;dt&gt; 燕婉 &lt;/dt&gt;&lt;dd&gt;《新臺》：新臺有泚、河水瀰瀰。燕婉之求、籧篨不鮮。
&lt;/dd&gt;
&lt;dt&gt; 維儀 &lt;/dt&gt;&lt;dd&gt;《柏舟》：汎彼柏舟、在彼中河。髧彼兩髦、實維我儀。
&lt;/dd&gt;
&lt;dt&gt; 玉瑱，清揚，邦媛 &lt;/dt&gt;&lt;dd&gt;《君子偕老》：玉之瑱也、象之揥也、揚且之皙也。胡然而天也、胡然而帝也。瑳兮瑳兮、其之展也。蒙彼縐絺、是紲袢也。子之清揚、揚且之顏也。展如之人兮、邦之媛也。
&lt;/dd&gt;
&lt;dt&gt; 芃芃 &lt;/dt&gt;&lt;dd&gt;《載馳》：我行其野、芃芃其麥。
&lt;/dd&gt;
&lt;dt&gt; 僩兮 &lt;/dt&gt;&lt;dd&gt;《淇奧》：瞻彼淇奧、綠竹猗猗。有匪君子、如切如磋、如琢如磨。瑟兮僩兮、赫兮咺兮。有匪君子、終不可諼兮。
&lt;/dd&gt;
&lt;dt&gt; 其頎，柔荑，如凝，蛾眉，美盼 &lt;/dt&gt;&lt;dd&gt;《碩人》：碩人其頎、衣錦褧衣。齊侯之子、衛侯之妻、東宮之妹、邢侯之姨、譚公維私。手如柔荑。膚如凝脂。領如蝤蠐。齒如瓠犀。螓首蛾眉。巧笑倩兮。美目盼兮。
&lt;/dd&gt;
&lt;dt&gt; 葦杭，杭之 &lt;/dt&gt;&lt;dd&gt;《河廣》：誰謂河廣、一葦杭之。誰謂宋遠、跂予望之。
&lt;/dd&gt;
&lt;dt&gt; 瓊琚，瓊瑤，瓊玖，琚瑤 &lt;/dt&gt;&lt;dd&gt;《木瓜》：投我以木瓜、報之以瓊琚。匪報也、永以為好也。投我以木桃、報之以瓊瑤。匪報也、永以為好也。投我以木李、報之以瓊玖。匪報也、永以為好也。
&lt;/dd&gt;
&lt;dt&gt; 爰爰 &lt;/dt&gt;&lt;dd&gt;《兔爰》：有兔爰爰、雉離于羅。
&lt;/dd&gt;
&lt;dt&gt; 洵美 &lt;/dt&gt;&lt;dd&gt;《叔于田》：叔于田、巷無居人。豈無居人、不如叔也、洵美且仁。
&lt;/dd&gt;
&lt;dt&gt; 英粲，邦彥 &lt;/dt&gt;&lt;dd&gt;《羔裘》：羔裘晏兮、三英粲兮。彼其之子、邦之彥兮。
&lt;/dd&gt;
&lt;dt&gt; 靜好 &lt;/dt&gt;&lt;dd&gt;《女曰雞鳴》：琴瑟在御、莫不靜好。
&lt;/dd&gt;
&lt;dt&gt; 舜華，舜英，德音 &lt;/dt&gt;&lt;dd&gt;《有女同車》：有女同車、顏如舜華。將翱將翔、佩玉瓊琚。彼美孟姜、洵美且都。有女同行、顏如舜英。將翱將翔、佩玉將將。彼美孟姜、德音不忘。
&lt;/dd&gt;
&lt;dt&gt; 子思，惠思 &lt;/dt&gt;&lt;dd&gt;《褰裳》：子惠思我、褰裳涉溱。子不我思、豈無他人。狂童之狂也且。
&lt;/dd&gt;
&lt;dt&gt; 子衿 &lt;/dt&gt;&lt;dd&gt;《子衿》：青青子衿、悠悠我心。縱我不往、子寧不嗣音。
&lt;/dd&gt;
&lt;dt&gt; 如雲，思存 &lt;/dt&gt;&lt;dd&gt;《出其東門》：出其東門、有女如雲。雖則如雲、匪我思存。縞衣綦巾、聊樂我員。
&lt;/dd&gt;
&lt;dt&gt; 蔓露，零露，婉清，瀼瀼，婉如 &lt;/dt&gt;&lt;dd&gt;《野有蔓草》：野有蔓草、零露漙兮。有美一人、清揚婉兮。邂逅相遇、適我願兮。野有蔓草、零露瀼瀼。有美一人、婉如清揚。邂逅相遇、與子偕臧。
&lt;/dd&gt;
&lt;dt&gt; 瓊華，瓊瑩，瓊英 &lt;/dt&gt;&lt;dd&gt;《著》：俟我於著乎而、充耳以素乎而、尚之以瓊華乎而。俟我於庭乎而、充耳以青乎而、尚之以瓊瑩乎而。俟我於堂乎而、充耳以黃乎而、尚之以瓊英乎而。
&lt;/dd&gt;
&lt;dt&gt; 婉孌 &lt;/dt&gt;&lt;dd&gt;《甫田》：婉兮孌兮、總角丱兮。
&lt;/dd&gt;
&lt;dt&gt; 美英，如英 &lt;/dt&gt;&lt;dd&gt;《汾沮洳》：彼汾一方、言采其桑。彼其之子、美如英。美如英、殊異乎公行。
&lt;/dd&gt;
&lt;dt&gt; 蒹葭，白露 &lt;/dt&gt;&lt;dd&gt;《蒹葭》：蒹葭蒼蒼、白露為霜。所謂伊人、在水一方。遡洄從之、道阻且長。遡遊從之、宛在水中央。
&lt;/dd&gt;
&lt;dt&gt; 美淑 &lt;/dt&gt;&lt;dd&gt;《東門之池》：東門之池、可以漚麻。彼美淑姬、可與晤歌。
&lt;/dd&gt;
&lt;dt&gt; 月皎，舒窈 &lt;/dt&gt;&lt;dd&gt;《月出》：月出皎兮、佼人僚兮。舒窈糾兮、勞心悄兮。
&lt;/dd&gt;
&lt;dt&gt; 菡萏 &lt;/dt&gt;&lt;dd&gt;《澤陂》：彼澤之陂、有蒲菡萏。有美一人、碩大且儼。寤寐無為、輾轉伏枕。
&lt;/dd&gt;
&lt;dt&gt; 雨濛 &lt;/dt&gt;&lt;dd&gt;《東山》：我徂東山、慆慆不歸。我來自東、零雨其濛。
&lt;/dd&gt;
&lt;dt&gt; 采薇，薇止，依依，柳依，雪霏，霏霏 &lt;/dt&gt;&lt;dd&gt;《采薇》：采薇采薇、薇亦作止。曰歸曰歸、歲亦莫止。靡室靡家、玁狁之故。不遑啟居、玁狁之故。采薇采薇、薇亦柔止。曰歸曰歸、心亦憂止。憂心烈烈、載飢載渴。我戍未定、靡使歸聘。采薇采薇、薇亦剛止。曰歸曰歸、歲亦陽止。王事靡盬、不遑啟處。憂心孔疚、我行不來。彼爾維何、維常之華。彼路斯何、君子之車。戎車既駕、四牡業業。豈敢定居、一月三捷。駕彼四牡、四牡騤騤。君子所依、小人所腓。四牡翼翼、象弭魚服。豈不日戒、玁狁孔棘。昔我往矣、楊柳依依。今我來思、雨雪霏霏。行道遲遲、載渴載飢。我心傷悲、莫知我哀。
&lt;/dd&gt;
&lt;dt&gt; 維嘉 &lt;/dt&gt;&lt;dd&gt;《魚麗》：物其多矣、維其嘉矣。
&lt;/dd&gt;
&lt;dt&gt; 令儀 &lt;/dt&gt;&lt;dd&gt;《湛露》：豈弟君子、莫不令儀。
&lt;/dd&gt;
&lt;dt&gt; 菁菁，菁莪 &lt;/dt&gt;&lt;dd&gt;《菁菁者莪》：菁菁者莪、在彼中阿。既見君子、樂且有儀。
&lt;/dd&gt;
&lt;dt&gt; 皎皎 &lt;/dt&gt;&lt;dd&gt;《白駒》：皎皎白駒、食我場苗。縶之維之、以永今朝。所謂伊人、於焉逍遙。
&lt;/dd&gt;
&lt;dt&gt; 攸寧 &lt;/dt&gt;&lt;dd&gt;《斯干》：殖殖其庭、有覺其楹、噲噲其正、噦噦其冥、君子攸寧。
&lt;/dd&gt;
&lt;dt&gt; 溱溱 &lt;/dt&gt;&lt;dd&gt;《無羊》：旐維旟矣、室家溱溱。
&lt;/dd&gt;
&lt;dt&gt; 奕奕 &lt;/dt&gt;&lt;dd&gt;《巧言》：奕奕寢廟、君子作之。
&lt;/dd&gt;
&lt;dt&gt; 思齊，思媚，徽音 &lt;/dt&gt;&lt;dd&gt;《思齊》：思齊大任、文王之母、思媚周姜、京室之婦。大姒嗣徽音、則百斯男。
&lt;/dd&gt;
&lt;/dl&gt;
</content>
 </entry>
 
 <entry>
   <title>來自《尚書》的上古名字</title>
   <link href="http://kimi.im/2013-12-22-name-from-shangshu"/>
   <updated>2013-12-22T00:00:00+00:00</updated>
   <id>http://kimi.im/name-from-shangshu</id>
   <content type="html">&lt;p&gt;
以下一些名字來自《尚書》之《虞書》和《夏書》，供參考。
&lt;/p&gt;

&lt;dl class=&quot;org-dl&quot;&gt;
&lt;dt&gt; 明思，明俊，昭明，明昭，時雍 &lt;/dt&gt;&lt;dd&gt;《堯典》曰若稽古帝堯，曰放勳，欽、明、文、思、安安，允恭克讓，光被四表，格于上下。克明俊德，以親九族。九族既睦，平章百姓。百姓昭明，協和萬邦。黎民於變時雍。
&lt;/dd&gt;
&lt;dt&gt; 羲和 &lt;/dt&gt;&lt;dd&gt;《堯典》乃命羲和，欽若昊天，歷象日月星辰，敬授人時。
&lt;/dd&gt;
&lt;dt&gt; 濬哲，濬文 &lt;/dt&gt;&lt;dd&gt;《舜典》曰若稽古帝舜，曰重華協于帝。濬哲文明，溫恭允塞，玄德升聞，乃命以位。
&lt;/dd&gt;
&lt;dt&gt; 時敘，穆穆 &lt;/dt&gt;&lt;dd&gt;&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;釋義：時敘：承順。穆穆：儀容整齊。
&lt;/li&gt;
&lt;li&gt;來源：《舜典》慎徽五典，五典克從；納于百揆，百揆時敘；賓于四門，四門穆穆。
&lt;/li&gt;
&lt;/ul&gt;
&lt;/dd&gt;
&lt;dt&gt; 班瑞 &lt;/dt&gt;&lt;dd&gt;《舜典》在璿璣玉衡，以齊七政。肆類于上帝，禋于六宗，望于山川，徧于群神。輯五瑞。既月乃日，覲四岳群牧，班瑞于群后。
&lt;/dd&gt;
&lt;dt&gt; 柔遠 &lt;/dt&gt;&lt;dd&gt;《舜典》月正元日，舜格于文祖，詢于四岳，闢四門，明四目，達四聰。「咨，十有二牧！」曰，「食哉惟時！柔遠能邇，惇德允元，而難任人，蠻夷率服。」
&lt;/dd&gt;
&lt;dt&gt; 明允 &lt;/dt&gt;&lt;dd&gt;《舜典》帝曰：「皋陶，蠻夷猾夏，寇賊姦宄。汝作士，五刑有服，五服三就。五流有宅，五宅三居。惟明克允！」
&lt;/dd&gt;
&lt;dt&gt; 惟允 &lt;/dt&gt;&lt;dd&gt;《舜典》帝曰：「龍，朕堲讒說殄行，震驚朕師。命汝作納言，夙夜出納朕命，惟允！」
&lt;/dd&gt;
&lt;dt&gt; 惟熙 &lt;/dt&gt;&lt;dd&gt;&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;釋義：惟熙：惟益廣。 
&lt;/li&gt;
&lt;li&gt;來源：《大禹謨》益曰：「吁！戒哉！儆戒無虞，罔失法度。罔遊于逸，罔淫于樂。任賢勿貳，去邪勿疑。疑謀勿成，百志惟熙。罔違道以干百姓之譽，罔咈百姓以從己之欲。無怠無荒，四夷來王。」
&lt;/li&gt;
&lt;/ul&gt;
&lt;/dd&gt;
&lt;dt&gt; 惟修，惟敘，惟歌 &lt;/dt&gt;&lt;dd&gt;《大禹謨》禹曰：「於！帝念哉！德惟善政，政在養民。水、火、金、木、土、穀，惟修；正德、利用、厚生、惟和。九功惟敘，九敘惟歌。戒之用休，董之用威，勸之以九歌俾勿壞。」
&lt;/dd&gt;
&lt;dt&gt; 嘉績，惟一，惟中，允中 &lt;/dt&gt;&lt;dd&gt;《大禹謨》帝曰：「來，禹！降水儆予，成允成功，惟汝賢。克勤于邦，克儉于家，不自滿假，惟汝賢。汝惟不矜，天下莫與汝爭能。汝惟不伐，天下莫與汝爭功。予懋乃德，嘉乃丕績，天之歷數在汝躬，汝終陟元后。人心惟危，道心惟微，惟精惟一，允執厥中。無稽之言勿聽，弗詢之謀勿庸。可愛非君？可畏非民？眾非元后，何戴？后非眾，罔與守邦？欽哉！慎乃有位，敬修其可願，四海困窮，天祿永終。惟口出好興戎，朕言不再。」
&lt;/dd&gt;
&lt;dt&gt; 謙益 &lt;/dt&gt;&lt;dd&gt;《大禹謨》益贊于禹曰：「惟德動天，無遠弗屆。滿招損，謙受益，時乃天道。帝初于歷山，往于田，日號泣于旻天，于父母，負罪引慝。祗載見瞽瞍，夔夔齋慄，瞽亦允若。至諴感神，矧茲有苗。」
&lt;/dd&gt;
&lt;dt&gt; 惇敘 &lt;/dt&gt;&lt;dd&gt;《皋陶謨》皋陶曰：「都！慎厥身，修思永。惇敘九族，庶明勵翼，邇可遠，在茲。」
&lt;/dd&gt;
&lt;dt&gt; 浚明 &lt;/dt&gt;&lt;dd&gt;《皋陶謨》日宣三德，夙夜浚明有家。
&lt;/dd&gt;
&lt;dt&gt; 徽柔，柔懿，徽懿，懿柔 &lt;/dt&gt;&lt;dd&gt;《無逸》周公曰：「嗚呼！厥亦惟我周太王、王季，克自抑畏。文王卑服，即康功田功。徽柔懿恭，懷保小民，惠鮮鰥寡。自朝至于日中昃，不遑暇食，用咸和萬民。文王不敢盤于游田，以庶邦惟正之供。文王受命惟中身，厥享國五十年。」
&lt;/dd&gt;
&lt;/dl&gt;
</content>
 </entry>
 
 <entry>
   <title>Name Of Miss Ma</title>
   <link href="http://kimi.im/2013-12-21-name-of-miss-ma"/>
   <updated>2013-12-21T00:00:00+00:00</updated>
   <id>http://kimi.im/name-of-miss-ma</id>
   <content type="html">&lt;div class=&quot;HTML&quot;&gt;
&lt;p&gt;
&amp;#x2014;
layout: post
title: 馬寶寶取名
categories: [education]
tags: [寶寶取名]
&amp;#x2014;
&lt;/p&gt;

&lt;/div&gt;

&lt;p&gt;
最近幾天爲了找個好聽的名字費盡心思。記錄一下想到過的名字供參考。
&lt;/p&gt;

&lt;dl class=&quot;org-dl&quot;&gt;
&lt;dt&gt;馬思賢&lt;/dt&gt;&lt;dd&gt;《論語》：見賢思齊焉，見不賢而內自省也。&lt;/dd&gt;
&lt;dt&gt;馬悠南&lt;/dt&gt;&lt;dd&gt;采菊東籬下，悠然見南山。&lt;/dd&gt;
&lt;dt&gt;馬修遠&lt;/dt&gt;&lt;dd&gt;《離騷》：路漫漫其修遠兮，吾將上下而求索。&lt;/dd&gt;
&lt;dt&gt;馬靜遠，馬明遠&lt;/dt&gt;&lt;dd&gt;非淡泊無以明志，非寧靜無以致遠。&lt;/dd&gt;
&lt;dt&gt;馬知遙&lt;/dt&gt;&lt;dd&gt;路遙知馬力，日久見人心。&lt;/dd&gt;
&lt;dt&gt;馬維嘉，馬維佳，馬唯嘉&lt;/dt&gt;&lt;dd&gt;《詩經小雅魚麗》：物其多矣，維其嘉矣。&lt;/dd&gt;
&lt;dt&gt;馬令儀&lt;/dt&gt;&lt;dd&gt;《詩經小雅湛露》：豈弟君子，莫不令儀。令儀：美好的儀容、風範。&lt;/dd&gt;
&lt;dt&gt;馬疏桐，馬靜初&lt;/dt&gt;&lt;dd&gt;蘇軾《卜算子》：缺月掛疏桐，漏斷人初靜。誰見幽人獨往來？飄渺孤鴻影。&lt;/dd&gt;
&lt;dt&gt;馬可詩&lt;/dt&gt;&lt;dd&gt;《幽夢影》：人須求可入詩，物須求可入畫。&lt;/dd&gt;
&lt;dt&gt;馬邀月&lt;/dt&gt;&lt;dd&gt;李白《月下獨酌》：舉杯邀明月，對影成三人。&lt;/dd&gt;
&lt;dt&gt;馬林逸&lt;/dt&gt;&lt;dd&gt;《幽夢影》：有山林隱逸之樂而不知享者，漁樵也，農圃也，緇黃也。&lt;/dd&gt;
&lt;dt&gt;馬夏茗&lt;/dt&gt;&lt;dd&gt;《幽夢影》：春風如酒，夏風如茗，秋風如煙，如姜芥。&lt;/dd&gt;
&lt;dt&gt;馬一隱&lt;/dt&gt;&lt;dd&gt;《幽夢影》：牛與馬，一仕而一隱也；鹿與豕，一仙而一凡也。&lt;/dd&gt;
&lt;dt&gt;馬悠悠&lt;/dt&gt;&lt;dd&gt;《詩經 車攻》：蕭蕭馬鳴，悠悠旆旌。&lt;/dd&gt;
&lt;dt&gt;馬天澈&lt;/dt&gt;&lt;dd&gt;陶淵明《和郭主簿二首》：露凝無遊氣，天高風景澈。&lt;/dd&gt;
&lt;dt&gt;馬馨遠&lt;/dt&gt;&lt;dd&gt;《說文解字》》馨：香之遠聞者。从香殸聲。殸，籒文磬。晋 陶潜 《饮酒》诗之五：“问君何能尔，心远地自偏。”&lt;/dd&gt;
&lt;dt&gt;馬遠山&lt;/dt&gt;&lt;dd&gt;《周易 遯》天下有山，遯；君子以遠小人，不惡而嚴。&lt;/dd&gt;
&lt;dt&gt;馬懿文&lt;/dt&gt;&lt;dd&gt;《周易 小畜》風行天上，小畜；君子以懿文德。&lt;/dd&gt;
&lt;dt&gt;馬宜中&lt;/dt&gt;&lt;dd&gt;《周易 臨》大君之宜，行中之謂也。&lt;/dd&gt;
&lt;dt&gt;馬明中&lt;/dt&gt;&lt;dd&gt;《周易 明夷》明入地中，明夷；君子以蒞眾，用晦而明。&lt;/dd&gt;
&lt;dt&gt;馬澤中&lt;/dt&gt;&lt;dd&gt;《周易 革》澤中有火，革；君子以治歷明時。&lt;/dd&gt;
&lt;dt&gt;馬明柔&lt;/dt&gt;&lt;dd&gt;《周易晉》晉，進也。明出地上，順而麗乎大明，柔進而上行。是以康侯用錫馬蕃庶，晝日三接也。&lt;/dd&gt;
&lt;/dl&gt;
</content>
 </entry>
 
 <entry>
   <title>x86 寄存器</title>
   <link href="http://kimi.im/2013-12-19-x86-registers"/>
   <updated>2013-12-19T00:00:00+00:00</updated>
   <id>http://kimi.im/x86-registers</id>
   <content type="html">&lt;p&gt;
X86 處理器寄存器（Register&lt;sup&gt;en&lt;/sup&gt; ，le registre&lt;sup&gt;fr&lt;/sup&gt; ，das Register&lt;sup&gt;de&lt;/sup&gt; ，暫存器&lt;sup&gt;tw&lt;/sup&gt; ）是編寫 X86 彙編語言（Assembly Language&lt;sup&gt;en&lt;/sup&gt; ，langage d&apos;assemblage ou langage assembleur&lt;sup&gt;fr&lt;/sup&gt; ，Assemblersprache&lt;sup&gt;de&lt;/sup&gt; ，組合語言&lt;sup&gt;tw&lt;/sup&gt;  ）程序的核心工具。寄存器相當於處理器的一些內部變量。寄存器讀寫速度比內存更快，指令週期更少。本文簡單介紹一些 X86 系列處理器寄存器的使用方法。本文描述的一些使用規則只是一些建議性規則，而不是強制性規則。有些操作可能需要某些特定寄存器，但對於大部份寄存器，可以完全由你自己決定怎麼使用。
&lt;/p&gt;

&lt;div id=&quot;outline-container-sec-1&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;sec-1&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;1&lt;/span&gt; 寄存器彙總&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-1&quot;&gt;
&lt;p&gt;
X86 系列處理器總共有下列 16 個 32 位寄存器。這些寄存器大部份可以拆分成 16 位或者 8 位寄存器使用。
&lt;/p&gt;

&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;通用寄存器（General purpose registers-GPRs）
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
&lt;code&gt;EAX EBX ECX EDX&lt;/code&gt;
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;區段寄存器（Segment registers&lt;sup&gt;en&lt;/sup&gt; ，des registres de segments&lt;sup&gt;fr&lt;/sup&gt; ）
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
&lt;code&gt;CS DS ES FS GS SS&lt;/code&gt;
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;索引和指針（Index and pointer，le registre d&apos;index et le pointeur&lt;sup&gt;fr&lt;/sup&gt; ，Die Indexregister und Der Zeiger&lt;sup&gt;de&lt;/sup&gt; ）
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
&lt;code&gt;ESI EDI EBP EIP ESP&lt;/code&gt;
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;狀態寄存器（status register, flag register, or condition code register&lt;sup&gt;en&lt;/sup&gt; ，das Zustandsregister order das Statusregister&lt;sup&gt;de&lt;/sup&gt; ）
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
&lt;code&gt;EFLAGS&lt;/code&gt;
&lt;/p&gt;

&lt;p&gt;
&lt;code&gt;EAX&lt;/code&gt; 等寄存器的前綴 &lt;code&gt;E&lt;/code&gt; 來自英語 Extended（擴展的）。因為最初的 Intel 8086/8088 處理器只有 14 個 16 位寄存器。其中 4 個通用寄存器（AX，BX，CX，DX）；2 個指針寄存器（SP，BP），2 個索引寄存器（SI，DI），4 個區段寄存器（CS，DS，SS，ES），1 個狀態寄存器（FLAGS），1 個指令指針寄存器（IP）。而 32 位的 80386 處理器把其中的 16 位的通用寄存器，指針寄存器，索引寄存器，指令指針寄存器，以及狀態寄存器擴展成 32 位寄存器。比如 AX 寄存器對應到了新的 32 位寄存器 EAX 的低 16 位，SI 寄存器對應到 32 位寄存器 ESI 的低 16 位。注意，區段寄存器沒有 &lt;code&gt;E&lt;/code&gt; 前綴，仍然保留 16 位的大小。
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-sec-2&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;sec-2&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;2&lt;/span&gt; 通用寄存器（General Purpose Registers - GPRs&lt;sup&gt;en&lt;/sup&gt; ）&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-2&quot;&gt;
&lt;p&gt;
我們大部份時間大部份指令都在用的寄存器叫做通用寄存器。這些寄存器可以再分解成 16 位或者 8 位的寄存器。
&lt;/p&gt;

&lt;table border=&quot;2&quot; cellspacing=&quot;0&quot; cellpadding=&quot;6&quot; rules=&quot;groups&quot; frame=&quot;hsides&quot;&gt;


&lt;colgroup&gt;
&lt;col  class=&quot;left&quot; /&gt;

&lt;col  class=&quot;left&quot; /&gt;
&lt;/colgroup&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class=&quot;left&quot;&gt;32 位寄存器&lt;/td&gt;
&lt;td class=&quot;left&quot;&gt;EAX EBX ECX EDX&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td class=&quot;left&quot;&gt;16 位寄存器&lt;/td&gt;
&lt;td class=&quot;left&quot;&gt;AX BX CX DX&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td class=&quot;left&quot;&gt;8 位寄存器&lt;/td&gt;
&lt;td class=&quot;left&quot;&gt;AH AL BH BL CH CL DH DL&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;
H 和 L 分别表示 16 位中的高 8 位和低 8 位。
&lt;/p&gt;

&lt;p&gt;
我们再看看这四组通用寄存器其有哪些细微的差别。
&lt;/p&gt;

&lt;dl class=&quot;org-dl&quot;&gt;
&lt;dt&gt; EAX,AX,AH,AL &lt;/dt&gt;&lt;dd&gt;累加寄存器（Accumulator register&lt;sup&gt;en&lt;/sup&gt; ，le accumulateur&lt;sup&gt;fr&lt;/sup&gt; ，der Akkumulator&lt;sup&gt;de&lt;/sup&gt; ）一般用来处理 I/O 端口访问，数学计算，中断调用等。
&lt;/dd&gt;
&lt;dt&gt; EBX,BX,BH,BL &lt;/dt&gt;&lt;dd&gt;基址寄存器（Base register&lt;sup&gt;en&lt;/sup&gt; ）一般用以內存訪問時候的基址指針，以及獲取某些中斷函數的返回值。
&lt;/dd&gt;
&lt;dt&gt; ECX,CX,CH,CL &lt;/dt&gt;&lt;dd&gt;計數寄存器（Counter register&lt;sup&gt;en&lt;/sup&gt; ）一般用在循環計數和位移操作中，還用來獲取某些中斷函數的返回值。
&lt;/dd&gt;
&lt;dt&gt; EDX,DX,DH,DL &lt;/dt&gt;&lt;dd&gt;數據寄存器（Data register&lt;sup&gt;en&lt;/sup&gt; ）和累加寄存器一樣用来处理 I/O 端口访问，数学计算，中断调用等。
&lt;/dd&gt;
&lt;/dl&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-sec-3&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;sec-3&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;3&lt;/span&gt; 區段寄存器（Segment registers&lt;sup&gt;en&lt;/sup&gt; ）&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-3&quot;&gt;
&lt;p&gt;
區段寄存器保存若干區段的地址。區段寄存器只能通過通用寄存器或者特殊指令修改。
&lt;/p&gt;
&lt;dl class=&quot;org-dl&quot;&gt;
&lt;dt&gt; CS &lt;/dt&gt;&lt;dd&gt;代碼段寄存器（Code segment register）記錄程序運行的代碼段地址。人為修改會導致程序無法正確運行。
&lt;/dd&gt;
&lt;dt&gt; DS &lt;/dt&gt;&lt;dd&gt;數據段寄存器（Data segment register）記錄程序訪問的數據段地址。人為修改可能導致錯誤的數據。
&lt;/dd&gt;
&lt;dt&gt; ES,FS,GS &lt;/dt&gt;&lt;dd&gt;這幾個額外的區段寄存器用以 &lt;code&gt;far&lt;/code&gt; 指針訪問，比如視頻內存等。
&lt;/dd&gt;
&lt;dt&gt; SS &lt;/dt&gt;&lt;dd&gt;棧區段寄存器（Stack segment register）記錄程序使用的棧區段地址。有時候 SS 和 DS 是一樣的。人為修改會導致無法預期的數據結果。
&lt;/dd&gt;
&lt;/dl&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-sec-4&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;sec-4&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;4&lt;/span&gt; 索引和指針寄存器（Indexes and pointers&lt;sup&gt;en&lt;/sup&gt; ）&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-4&quot;&gt;
&lt;p&gt;
索引和指針寄存器用作區段地址的偏移量。 &lt;code&gt;E&lt;/code&gt; 開頭的寄存器只在保護模式（Protected Mode&lt;sup&gt;en&lt;/sup&gt; ）下使用。
&lt;/p&gt;

&lt;dl class=&quot;org-dl&quot;&gt;
&lt;dt&gt; ES:EDI EDI DI &lt;/dt&gt;&lt;dd&gt;目的索引寄存器（Destination index register&lt;sup&gt;en&lt;/sup&gt; ）用作字符串、數組拷貝目的地址，以及和 &lt;code&gt;ES&lt;/code&gt; 配合 &lt;code&gt;far&lt;/code&gt; 指針尋址。
&lt;/dd&gt;
&lt;dt&gt; DS:ESI ESI SI &lt;/dt&gt;&lt;dd&gt;源索引寄存器（Source index register&lt;sup&gt;en&lt;/sup&gt; ）用作字符串、數組拷貝的源地址。
&lt;/dd&gt;
&lt;dt&gt; SS:EBP EBP BP &lt;/dt&gt;&lt;dd&gt;棧基址指針寄存器（Stack Base pointer register&lt;sup&gt;en&lt;/sup&gt; ）保存程序棧的基地址。
&lt;/dd&gt;
&lt;dt&gt; SS:ESP ESP SP &lt;/dt&gt;&lt;dd&gt;棧指針寄存器（Stack pointer register&lt;sup&gt;en&lt;/sup&gt; ）保存程序棧的棧頂地址。
&lt;/dd&gt;
&lt;dt&gt; CS:EIP EIP IP &lt;/dt&gt;&lt;dd&gt;程序指針（Instruction Pointer&lt;sup&gt;en&lt;/sup&gt; ）保存下一條指令的偏移地址。
&lt;/dd&gt;
&lt;/dl&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-sec-5&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;sec-5&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;5&lt;/span&gt; 狀態寄存器（EFLAGS register）&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-5&quot;&gt;
&lt;p&gt;
&lt;code&gt;EFLAGS&lt;/code&gt; 狀態寄存器保存當前處理器的狀態。 &lt;code&gt;EFLAGS&lt;/code&gt; 用作條件跳轉，條件循環，數值比較。每一位都可以用來表示上一條特定指令的執行結果。每一位的功能如下：
&lt;/p&gt;

&lt;table border=&quot;2&quot; cellspacing=&quot;0&quot; cellpadding=&quot;6&quot; rules=&quot;groups&quot; frame=&quot;hsides&quot;&gt;


&lt;colgroup&gt;
&lt;col  class=&quot;right&quot; /&gt;

&lt;col  class=&quot;left&quot; /&gt;

&lt;col  class=&quot;left&quot; /&gt;
&lt;/colgroup&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th scope=&quot;col&quot; class=&quot;right&quot;&gt;位&lt;/th&gt;
&lt;th scope=&quot;col&quot; class=&quot;left&quot;&gt;標記&lt;/th&gt;
&lt;th scope=&quot;col&quot; class=&quot;left&quot;&gt;描述&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class=&quot;right&quot;&gt;0&lt;/td&gt;
&lt;td class=&quot;left&quot;&gt;CF&lt;/td&gt;
&lt;td class=&quot;left&quot;&gt;Carry flag&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td class=&quot;right&quot;&gt;1&lt;/td&gt;
&lt;td class=&quot;left&quot;&gt;&amp;#xa0;&lt;/td&gt;
&lt;td class=&quot;left&quot;&gt;Reserved&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td class=&quot;right&quot;&gt;2&lt;/td&gt;
&lt;td class=&quot;left&quot;&gt;PF&lt;/td&gt;
&lt;td class=&quot;left&quot;&gt;Parity flag&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td class=&quot;right&quot;&gt;3&lt;/td&gt;
&lt;td class=&quot;left&quot;&gt;&amp;#xa0;&lt;/td&gt;
&lt;td class=&quot;left&quot;&gt;Reserved&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td class=&quot;right&quot;&gt;4&lt;/td&gt;
&lt;td class=&quot;left&quot;&gt;AF&lt;/td&gt;
&lt;td class=&quot;left&quot;&gt;Auxiliary carry flag&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td class=&quot;right&quot;&gt;6&lt;/td&gt;
&lt;td class=&quot;left&quot;&gt;ZF&lt;/td&gt;
&lt;td class=&quot;left&quot;&gt;Zero flag&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td class=&quot;right&quot;&gt;7&lt;/td&gt;
&lt;td class=&quot;left&quot;&gt;SF&lt;/td&gt;
&lt;td class=&quot;left&quot;&gt;Sign flag&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td class=&quot;right&quot;&gt;8&lt;/td&gt;
&lt;td class=&quot;left&quot;&gt;TF&lt;/td&gt;
&lt;td class=&quot;left&quot;&gt;Trap flag&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td class=&quot;right&quot;&gt;9&lt;/td&gt;
&lt;td class=&quot;left&quot;&gt;IF&lt;/td&gt;
&lt;td class=&quot;left&quot;&gt;Interrupt enable flag&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td class=&quot;right&quot;&gt;10&lt;/td&gt;
&lt;td class=&quot;left&quot;&gt;DF&lt;/td&gt;
&lt;td class=&quot;left&quot;&gt;Direction flag&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td class=&quot;right&quot;&gt;11&lt;/td&gt;
&lt;td class=&quot;left&quot;&gt;OF&lt;/td&gt;
&lt;td class=&quot;left&quot;&gt;Overflow flag&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td class=&quot;right&quot;&gt;12-13&lt;/td&gt;
&lt;td class=&quot;left&quot;&gt;IOPL&lt;/td&gt;
&lt;td class=&quot;left&quot;&gt;I/O Privilege level&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td class=&quot;right&quot;&gt;14&lt;/td&gt;
&lt;td class=&quot;left&quot;&gt;NT&lt;/td&gt;
&lt;td class=&quot;left&quot;&gt;Nexted task flag&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td class=&quot;right&quot;&gt;15&lt;/td&gt;
&lt;td class=&quot;left&quot;&gt;&amp;#xa0;&lt;/td&gt;
&lt;td class=&quot;left&quot;&gt;Reserved&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td class=&quot;right&quot;&gt;16&lt;/td&gt;
&lt;td class=&quot;left&quot;&gt;RF&lt;/td&gt;
&lt;td class=&quot;left&quot;&gt;Resume flag&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td class=&quot;right&quot;&gt;17&lt;/td&gt;
&lt;td class=&quot;left&quot;&gt;VM&lt;/td&gt;
&lt;td class=&quot;left&quot;&gt;Virtual 8086 mode flag&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td class=&quot;right&quot;&gt;18&lt;/td&gt;
&lt;td class=&quot;left&quot;&gt;AC&lt;/td&gt;
&lt;td class=&quot;left&quot;&gt;Alignment check flag&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td class=&quot;right&quot;&gt;19&lt;/td&gt;
&lt;td class=&quot;left&quot;&gt;VIF&lt;/td&gt;
&lt;td class=&quot;left&quot;&gt;Virtual interrupt flag&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td class=&quot;right&quot;&gt;20&lt;/td&gt;
&lt;td class=&quot;left&quot;&gt;VIP&lt;/td&gt;
&lt;td class=&quot;left&quot;&gt;Virtual interrupt pending flag&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td class=&quot;right&quot;&gt;21&lt;/td&gt;
&lt;td class=&quot;left&quot;&gt;ID&lt;/td&gt;
&lt;td class=&quot;left&quot;&gt;ID flag&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td class=&quot;right&quot;&gt;22-31&lt;/td&gt;
&lt;td class=&quot;left&quot;&gt;&amp;#xa0;&lt;/td&gt;
&lt;td class=&quot;left&quot;&gt;Reserved&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;
</content>
 </entry>
 
 <entry>
   <title>Window 7 黑屏无法登陆</title>
   <link href="http://kimi.im/2013-10-21-win7-black-screen-before-login"/>
   <updated>2013-10-21T00:00:00+00:00</updated>
   <id>http://kimi.im/win7-black-screen-before-login</id>
   <content type="html">&lt;p&gt;
同事 Fox 的笔记本开机蓝屏一次之后，再开机就挂在黑屏无法登陆系统。在黑黑的屏幕上只能移动鼠标。
&lt;/p&gt;

&lt;p&gt;
该错误是因为执行权限的问题。具体原因不知。网上查到的解决办法&lt;sup&gt;&lt;a id=&quot;fnr.1&quot; name=&quot;fnr.1&quot; class=&quot;footref&quot; href=&quot;#fn.1&quot;&gt;1&lt;/a&gt;&lt;/sup&gt;是用 Windows 命令 &lt;code&gt;cacls&lt;/code&gt; 修改 &lt;code&gt;C:\Windows\System32&lt;/code&gt; 下系统文件的权限。
&lt;/p&gt;

&lt;ol class=&quot;org-ol&quot;&gt;
&lt;li&gt;重启狂按 &lt;code&gt;F8&lt;/code&gt; 进入 Repair Mode
&lt;/li&gt;
&lt;li&gt;打开 &lt;code&gt;cmd&lt;/code&gt; 敲以下命令（可能要执行几分钟，可以泡杯咖啡等着）
&lt;div class=&quot;org-src-container&quot;&gt;

&lt;pre class=&quot;src src-bat&quot;&gt;cacls  C:\Windows\System32  /E  /T  /C  /G everyone:F
&lt;/pre&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;正常重启
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Ctrl-R&lt;/code&gt; + &lt;code&gt;cmd&lt;/code&gt; 打开 &lt;code&gt;cmd&lt;/code&gt; ，用 &lt;code&gt;cacls&lt;/code&gt; 恢复系统文件权限：
&lt;div class=&quot;org-src-container&quot;&gt;

&lt;pre class=&quot;src src-bat&quot;&gt;cacls  C:\Windows\System32  /E  /T  /C  /G  System:F  Administrators:R
cacls  C:\Windows\System32  /E  /T  /C  /G  everyone:R
&lt;/pre&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;
不过 Fox 说虽然可以看到登陆系统，但不久还是黑屏了。于是他把第二步改成以下命令，重启 OK 了。
&lt;/p&gt;
&lt;div class=&quot;org-src-container&quot;&gt;

&lt;pre class=&quot;src src-bat&quot;&gt;cacls  C:\Windows  /E  /T  /C  /G everyone:F
&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;footnotes&quot;&gt;
&lt;h2 class=&quot;footnotes&quot;&gt;Footnotes: &lt;/h2&gt;
&lt;div id=&quot;text-footnotes&quot;&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.1&quot; name=&quot;fn.1&quot; class=&quot;footnum&quot; href=&quot;#fnr.1&quot;&gt;1&lt;/a&gt;&lt;/sup&gt; &lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;http://answers.microsoft.com/en-us/windows/forum/windows_7-system/windows-7-boots-to-black-screen-with-cursor-before/c3538f76-86a1-462e-8ad7-f319f207a922%0A&quot;&gt;Windows 7 boots to black screen with cursor before login screen after changing permissions on the system32 directory&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;


&lt;/div&gt;
&lt;/div&gt;
</content>
 </entry>
 
 <entry>
   <title>Leica M-E, FUJIFILM X100S, Canon 40D 三款相机参数对比</title>
   <link href="http://kimi.im/2013-10-02-comparison-leica-me-fujix100s-canon-40d"/>
   <updated>2013-10-02T00:00:00+00:00</updated>
   <id>http://kimi.im/comparison-leica-me-fujix100s-canon-40d</id>
   <content type="html">&lt;div id=&quot;outline-container-sec-1&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;sec-1&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;1&lt;/span&gt; Comparison of the three cameras: Leica M-E, FUJIFILM X100s, Canon 40D&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-1&quot;&gt;
&lt;table border=&quot;2&quot; cellspacing=&quot;0&quot; cellpadding=&quot;6&quot; rules=&quot;all&quot; frame=&quot;border&quot;&gt;


&lt;colgroup&gt;
&lt;col  class=&quot;left&quot; /&gt;

&lt;col  class=&quot;left&quot; /&gt;

&lt;col  class=&quot;left&quot; /&gt;

&lt;col  class=&quot;left&quot; /&gt;
&lt;/colgroup&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th scope=&quot;col&quot; class=&quot;left&quot;&gt;&amp;#xa0;&lt;/th&gt;
&lt;th scope=&quot;col&quot; class=&quot;left&quot;&gt;Leica M-E&lt;/th&gt;
&lt;th scope=&quot;col&quot; class=&quot;left&quot;&gt;FUJIFILM X100S&lt;/th&gt;
&lt;th scope=&quot;col&quot; class=&quot;left&quot;&gt;Canon 40D&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class=&quot;left&quot;&gt;Release date&lt;/td&gt;
&lt;td class=&quot;left&quot;&gt;September 30, 2012&lt;/td&gt;
&lt;td class=&quot;left&quot;&gt;January, 2013&lt;/td&gt;
&lt;td class=&quot;left&quot;&gt;September 10, 2007&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td class=&quot;left&quot;&gt;Capture&lt;/td&gt;
&lt;td class=&quot;left&quot;&gt;KAF -18500 18 MP CCD Sensor&lt;/td&gt;
&lt;td class=&quot;left&quot;&gt;23.6mm x 15.8mm (APS-C) X-Trans CMOS II 連三原色濾鏡&lt;/td&gt;
&lt;td class=&quot;left&quot;&gt;10.1MP CMOS&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td class=&quot;left&quot;&gt;Size WHD&lt;/td&gt;
&lt;td class=&quot;left&quot;&gt;138 x 80 x 37mm&lt;/td&gt;
&lt;td class=&quot;left&quot;&gt;126.5 (W) x 74.4 (H) x 53.9 (D) mm&lt;/td&gt;
&lt;td class=&quot;left&quot;&gt;145.5 x 107.8 x 73.5mm&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td class=&quot;left&quot;&gt;Lens&lt;/td&gt;
&lt;td class=&quot;left&quot;&gt;50mm f/2.0 SUMMICRON-M Lens&lt;/td&gt;
&lt;td class=&quot;left&quot;&gt;f=23mm, 35mm, F2, 6 組 8 片鏡片&lt;/td&gt;
&lt;td class=&quot;left&quot;&gt;Sigma 17-70mm f/2.8-4 DC MACRO OS HSM （C）&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td class=&quot;left&quot;&gt;Weight&lt;/td&gt;
&lt;td class=&quot;left&quot;&gt;593g&lt;/td&gt;
&lt;td class=&quot;left&quot;&gt;約445 g / 15.7 oz. (包括電池及記憶卡)&lt;/td&gt;
&lt;td class=&quot;left&quot;&gt;740g&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td class=&quot;left&quot;&gt;Lens Weight&lt;/td&gt;
&lt;td class=&quot;left&quot;&gt;240g&lt;/td&gt;
&lt;td class=&quot;left&quot;&gt;N/A&lt;/td&gt;
&lt;td class=&quot;left&quot;&gt;465g&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td class=&quot;left&quot;&gt;Total weight&lt;/td&gt;
&lt;td class=&quot;left&quot;&gt;833g&lt;/td&gt;
&lt;td class=&quot;left&quot;&gt;445g&lt;/td&gt;
&lt;td class=&quot;left&quot;&gt;1205g&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td class=&quot;left&quot;&gt;Finder&lt;/td&gt;
&lt;td class=&quot;left&quot;&gt;0.68x&lt;/td&gt;
&lt;td class=&quot;left&quot;&gt;混合觀景器 0.5x&lt;/td&gt;
&lt;td class=&quot;left&quot;&gt;0.95x&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td class=&quot;left&quot;&gt;Shutter&lt;/td&gt;
&lt;td class=&quot;left&quot;&gt;Metal electronic&lt;/td&gt;
&lt;td class=&quot;left&quot;&gt;mechanical shutter&lt;/td&gt;
&lt;td class=&quot;left&quot;&gt;??&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td class=&quot;left&quot;&gt;Shutter 快門速度&lt;/td&gt;
&lt;td class=&quot;left&quot;&gt;1/4,000 - 32s&lt;/td&gt;
&lt;td class=&quot;left&quot;&gt;(P 模式) 1/4 秒 至 1/4000* 秒, (所有其它模式) 30 至 1/4000* 秒&lt;/td&gt;
&lt;td class=&quot;left&quot;&gt;1/8,000 - 30s&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td class=&quot;left&quot;&gt;Flash Sync&lt;/td&gt;
&lt;td class=&quot;left&quot;&gt;1/180&lt;/td&gt;
&lt;td class=&quot;left&quot;&gt;&amp;#xa0;&lt;/td&gt;
&lt;td class=&quot;left&quot;&gt;1/250&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td class=&quot;left&quot;&gt;Price&lt;/td&gt;
&lt;td class=&quot;left&quot;&gt;$5500 + $2200 lens = $7700&lt;/td&gt;
&lt;td class=&quot;left&quot;&gt;$1300&lt;/td&gt;
&lt;td class=&quot;left&quot;&gt;$1300 +  $500 lens = $1800&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td class=&quot;left&quot;&gt;Resolution&lt;/td&gt;
&lt;td class=&quot;left&quot;&gt;18 MP 1800 萬像素&lt;/td&gt;
&lt;td class=&quot;left&quot;&gt;16 MP 1630 萬像素&lt;/td&gt;
&lt;td class=&quot;left&quot;&gt;10 MP 1000 萬像素&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td class=&quot;left&quot;&gt;Frame Rate&lt;/td&gt;
&lt;td class=&quot;left&quot;&gt;2 FPS&lt;/td&gt;
&lt;td class=&quot;left&quot;&gt;&amp;#xa0;&lt;/td&gt;
&lt;td class=&quot;left&quot;&gt;6.5FPS&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td class=&quot;left&quot;&gt;LCD&lt;/td&gt;
&lt;td class=&quot;left&quot;&gt;2.5&quot; 230k&lt;/td&gt;
&lt;td class=&quot;left&quot;&gt;2.8 吋, 約 460,000 點&lt;/td&gt;
&lt;td class=&quot;left&quot;&gt;3&quot; LCD 230k&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td class=&quot;left&quot;&gt;ISO 感光度&lt;/td&gt;
&lt;td class=&quot;left&quot;&gt;160 - 2500&lt;/td&gt;
&lt;td class=&quot;left&quot;&gt;ISO 200 - 6400&lt;/td&gt;
&lt;td class=&quot;left&quot;&gt;100 - 1600&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td class=&quot;left&quot;&gt;File Formats&lt;/td&gt;
&lt;td class=&quot;left&quot;&gt;DNG, JPEG&lt;/td&gt;
&lt;td class=&quot;left&quot;&gt;JPEG (Exif Ver 2.3)*2,RAW (RAF 格式), RAW+JPEG&lt;/td&gt;
&lt;td class=&quot;left&quot;&gt;JPG, raw, s-raw (only 2.5MP) and JPG + raw&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td class=&quot;left&quot;&gt;Image Sizes&lt;/td&gt;
&lt;td class=&quot;left&quot;&gt;5212 x 3472 (18 MP)&lt;/td&gt;
&lt;td class=&quot;left&quot;&gt;L : (3:2) 4896 x 3264 / (16:9) 4896 x 2760 / (1:1) 3264 x 3264&lt;/td&gt;
&lt;td class=&quot;left&quot;&gt;3,888 x 2,592 native&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td class=&quot;left&quot;&gt;Buffer Depth&lt;/td&gt;
&lt;td class=&quot;left&quot;&gt;7&lt;/td&gt;
&lt;td class=&quot;left&quot;&gt;8/9&lt;/td&gt;
&lt;td class=&quot;left&quot;&gt;75 JPG or 17 raw??&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td class=&quot;left&quot;&gt;Shutter Life&lt;sup&gt;&lt;a id=&quot;fnr.1&quot; name=&quot;fnr.1&quot; class=&quot;footref&quot; href=&quot;#fn.1&quot;&gt;1&lt;/a&gt;&lt;/sup&gt;&lt;/td&gt;
&lt;td class=&quot;left&quot;&gt;150,000 cycles&lt;/td&gt;
&lt;td class=&quot;left&quot;&gt;N/A&lt;/td&gt;
&lt;td class=&quot;left&quot;&gt;100,000 cycles&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td class=&quot;left&quot;&gt;Built-in Flash&lt;/td&gt;
&lt;td class=&quot;left&quot;&gt;No&lt;/td&gt;
&lt;td class=&quot;left&quot;&gt;自動閃光 (超級智能閃光燈)&lt;/td&gt;
&lt;td class=&quot;left&quot;&gt;Yes, covers 17mm lens, GN 13m/43&apos; at ISO 100&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td class=&quot;left&quot;&gt;Metering&lt;/td&gt;
&lt;td class=&quot;left&quot;&gt;?&lt;/td&gt;
&lt;td class=&quot;left&quot;&gt;TTL 256 區測光/點/多重/平均&lt;/td&gt;
&lt;td class=&quot;left&quot;&gt;35 zone evaluative, center weighted, and spot.&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td class=&quot;left&quot;&gt;Power&lt;/td&gt;
&lt;td class=&quot;left&quot;&gt;400 - 600 shots&lt;/td&gt;
&lt;td class=&quot;left&quot;&gt;300 shots&lt;/td&gt;
&lt;td class=&quot;left&quot;&gt;1,100 shots no flash and 800 with flash&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td class=&quot;left&quot;&gt;Focusing mechanism&lt;/td&gt;
&lt;td class=&quot;left&quot;&gt;Rangefinder&lt;/td&gt;
&lt;td class=&quot;left&quot;&gt;Reverse Galilean viewfinder with electronic bright frame display&lt;/td&gt;
&lt;td class=&quot;left&quot;&gt;DSLR&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td class=&quot;left&quot;&gt;儲存媒體&lt;/td&gt;
&lt;td class=&quot;left&quot;&gt;SD / SDHC Memory Cards&lt;/td&gt;
&lt;td class=&quot;left&quot;&gt;SD 記憶卡 / SDHC 記憶卡/ SDXC (UHS-I) 記憶卡&lt;/td&gt;
&lt;td class=&quot;left&quot;&gt;CF卡I or II&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td class=&quot;left&quot;&gt;光圏值&lt;/td&gt;
&lt;td class=&quot;left&quot;&gt;F2 - F16&lt;/td&gt;
&lt;td class=&quot;left&quot;&gt;F2 - F16 1/3EV 級&lt;/td&gt;
&lt;td class=&quot;left&quot;&gt;F2.8-F4 ~ F22&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td class=&quot;left&quot;&gt;對焦範圍&lt;/td&gt;
&lt;td class=&quot;left&quot;&gt;0.7m - 無限遠&lt;/td&gt;
&lt;td class=&quot;left&quot;&gt;一般 約 50cm / 1.6 ft. - 無限遠, 微距 約 10cm - 2.0m / 3.9 in.- 6.6 ft.&lt;/td&gt;
&lt;td class=&quot;left&quot;&gt;0.22m - 無限遠&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td class=&quot;left&quot;&gt;曝光控制&lt;/td&gt;
&lt;td class=&quot;left&quot;&gt;&amp;#xa0;&lt;/td&gt;
&lt;td class=&quot;left&quot;&gt;TTL 256 區測光/點/多重/平均&lt;/td&gt;
&lt;td class=&quot;left&quot;&gt;35区TTL全开光圈测光&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td class=&quot;left&quot;&gt;曝光補償&lt;/td&gt;
&lt;td class=&quot;left&quot;&gt;-3 EV to +3 EV, 1/3 f-stops&lt;/td&gt;
&lt;td class=&quot;left&quot;&gt;-2.0EV - +2.0EV 1/3EV 級&lt;/td&gt;
&lt;td class=&quot;left&quot;&gt;-2.0EV - +2.0EV 1/3EV or 1/2EV 級&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td class=&quot;left&quot;&gt;視頻拍攝&lt;/td&gt;
&lt;td class=&quot;left&quot;&gt;No&lt;/td&gt;
&lt;td class=&quot;left&quot;&gt;1920 x 1080 像素 (60 fps / 30 fps) 立體聲&lt;/td&gt;
&lt;td class=&quot;left&quot;&gt;No&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-sec-2&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;sec-2&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;2&lt;/span&gt; Review&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-2&quot;&gt;
&lt;/div&gt;&lt;div id=&quot;outline-container-sec-2-1&quot; class=&quot;outline-3&quot;&gt;
&lt;h3 id=&quot;sec-2-1&quot;&gt;&lt;span class=&quot;section-number-3&quot;&gt;2.1&lt;/span&gt; Leica M-E&lt;/h3&gt;
&lt;div class=&quot;outline-text-3&quot; id=&quot;text-2-1&quot;&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;pros
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;World best lens from Leica
&lt;/li&gt;
&lt;li&gt;Good quality
&lt;/li&gt;
&lt;li&gt;Rangefinder
&lt;/li&gt;
&lt;li&gt;Excellent manual focus operation
&lt;/li&gt;
&lt;li&gt;After all, it&apos;s Leica
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;cons
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;Very expensive
&lt;/li&gt;
&lt;li&gt;Outdated LCD, only 230k
&lt;/li&gt;
&lt;li&gt;No AF
&lt;/li&gt;
&lt;li&gt;No video
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-sec-2-2&quot; class=&quot;outline-3&quot;&gt;
&lt;h3 id=&quot;sec-2-2&quot;&gt;&lt;span class=&quot;section-number-3&quot;&gt;2.2&lt;/span&gt; FIJIFILM X100S&lt;/h3&gt;
&lt;div class=&quot;outline-text-3&quot; id=&quot;text-2-2&quot;&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;pros
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;Light for travel and daily photography, only half of weight of a leica with lens, and third of weight of a Canon 40D with lens.
&lt;/li&gt;
&lt;li&gt;Fast AF system
&lt;/li&gt;
&lt;li&gt;Good LCD resolution
&lt;/li&gt;
&lt;li&gt;Wonderful Optical Electronic mix viewfinder
&lt;/li&gt;
&lt;li&gt;With Video recording
&lt;/li&gt;
&lt;li&gt;Good quality
&lt;/li&gt;
&lt;li&gt;Good price, only 17% of a leica + 50mm F/2 lens
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;cons
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;Unchangeable lens
&lt;/li&gt;
&lt;li&gt;Made in Japan
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;footnotes&quot;&gt;
&lt;h2 class=&quot;footnotes&quot;&gt;Footnotes: &lt;/h2&gt;
&lt;div id=&quot;text-footnotes&quot;&gt;

&lt;div class=&quot;footdef&quot;&gt;&lt;sup&gt;&lt;a id=&quot;fn.1&quot; name=&quot;fn.1&quot; class=&quot;footnum&quot; href=&quot;#fnr.1&quot;&gt;1&lt;/a&gt;&lt;/sup&gt; &lt;p class=&quot;footpara&quot;&gt;
&lt;a href=&quot;http://www.olegkikin.com/shutterlife/&quot;&gt;http://www.olegkikin.com/shutterlife/&lt;/a&gt;
&lt;/p&gt;&lt;/div&gt;


&lt;/div&gt;
&lt;/div&gt;
</content>
 </entry>
 
 <entry>
   <title>export .org to .html file in other folder</title>
   <link href="http://kimi.im/2013-09-27-export-org-file-to-other-folder"/>
   <updated>2013-09-27T00:00:00+00:00</updated>
   <id>http://kimi.im/export-org-file-to-other-folder</id>
   <content type="html">&lt;div id=&quot;outline-container-sec-1&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;sec-1&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;1&lt;/span&gt; Problem&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-1&quot;&gt;
&lt;p&gt;
The &lt;code&gt;org-expoort-dispatch&lt;/code&gt; command is very useful when I&apos;m writing &lt;code&gt;.org&lt;/code&gt; file and want to preview the exported &lt;code&gt;.html&lt;/code&gt; file in web browser. The manual is copied from emacs on-line help:
&lt;/p&gt;
&lt;pre class=&quot;example&quot;&gt;
It is bound to C-c C-e, &amp;lt;menu-bar&amp;gt; &amp;lt;Org&amp;gt; &amp;lt;Export/Publish...&amp;gt;.

(org-export-dispatch &amp;amp;optional ARG)

Export dispatcher for Org mode.

It provides an access to common export related tasks in a buffer.
Its interface comes in two flavours: standard and expert.
&lt;/pre&gt;

&lt;p&gt;
Whenever I want to preview the article, I just press &lt;code&gt;C-c C-e h o&lt;/code&gt;, emacs will convert the &lt;code&gt;.org&lt;/code&gt; file to &lt;code&gt;.html&lt;/code&gt; file and open it in my default web browser.
&lt;/p&gt;

&lt;p&gt;
But the problem is that the result &lt;code&gt;.html&lt;/code&gt; file is stored at the same folder as &lt;code&gt;.org&lt;/code&gt; file. I&apos;ve been looking for the solution around the web, the emacs geeks just told us to look at &lt;code&gt;org-publish-project-alist&lt;/code&gt;. But what I know is that &lt;code&gt;org-publish-project-alist&lt;/code&gt; is used to set up a publish project and it is used to publish whole project to a destination folder. 
&lt;/p&gt;

&lt;p&gt;
This is not what I&apos;m looking for.
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-sec-2&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;sec-2&quot;&gt;&lt;span class=&quot;section-number-2&quot;&gt;2&lt;/span&gt; Solution&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-2&quot;&gt;
&lt;p&gt;
After several try, I found that in the &lt;code&gt;.html&lt;/code&gt; export backend, &lt;code&gt;org-export-output-file-name&lt;/code&gt; is used to generated the output file as following code:
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;

&lt;pre class=&quot;src src-lisp&quot;&gt;&lt;span class=&quot;linenr&quot;&gt; 1: &lt;/span&gt;(&lt;span style=&quot;color: #8b008b; font-weight: bold;&quot;&gt;defun&lt;/span&gt; &lt;span style=&quot;color: #0000cd;&quot;&gt;org-html-export-to-html&lt;/span&gt;
&lt;span class=&quot;linenr&quot;&gt; 2: &lt;/span&gt;  (&lt;span style=&quot;color: #551a8b;&quot;&gt;&amp;amp;optional&lt;/span&gt; async subtreep visible-only body-only ext-plist)
&lt;span class=&quot;linenr&quot;&gt; 3: &lt;/span&gt;  (interactive)
&lt;span class=&quot;linenr&quot;&gt; 4: &lt;/span&gt;  (&lt;span style=&quot;color: #8b008b; font-weight: bold;&quot;&gt;let*&lt;/span&gt; ((extension (concat &lt;span style=&quot;color: #3a5fcd;&quot;&gt;&quot;.&quot;&lt;/span&gt; org-html-extension))
&lt;span class=&quot;linenr&quot;&gt; 5: &lt;/span&gt;     (file (org-export-output-file-name extension subtreep))
&lt;span class=&quot;linenr&quot;&gt; 6: &lt;/span&gt;     (org-export-coding-system org-html-coding-system))
&lt;span class=&quot;linenr&quot;&gt; 7: &lt;/span&gt;    (&lt;span style=&quot;color: #8b008b; font-weight: bold;&quot;&gt;if&lt;/span&gt; async
&lt;span class=&quot;linenr&quot;&gt; 8: &lt;/span&gt;    (org-export-async-start
&lt;span class=&quot;linenr&quot;&gt; 9: &lt;/span&gt;        (&lt;span style=&quot;color: #8b008b; font-weight: bold;&quot;&gt;lambda&lt;/span&gt; (f) (org-export-add-to-stack f &apos;html))
&lt;span class=&quot;linenr&quot;&gt;10: &lt;/span&gt;      (&lt;span style=&quot;color: #8b008b; font-weight: bold;&quot;&gt;let&lt;/span&gt; ((org-export-coding-system org-html-coding-system))
&lt;span class=&quot;linenr&quot;&gt;11: &lt;/span&gt;        `(expand-file-name
&lt;span class=&quot;linenr&quot;&gt;12: &lt;/span&gt;          (org-export-to-file
&lt;span class=&quot;linenr&quot;&gt;13: &lt;/span&gt;           &apos;html ,file ,subtreep ,visible-only ,body-only &apos;,ext-plist))))
&lt;span class=&quot;linenr&quot;&gt;14: &lt;/span&gt;      (&lt;span style=&quot;color: #8b008b; font-weight: bold;&quot;&gt;let&lt;/span&gt; ((org-export-coding-system org-html-coding-system))
&lt;span class=&quot;linenr&quot;&gt;15: &lt;/span&gt;    (org-export-to-file
&lt;span class=&quot;linenr&quot;&gt;16: &lt;/span&gt;     &apos;html file subtreep visible-only body-only ext-plist)))))
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
While &lt;code&gt;org-export-output-file-name&lt;/code&gt; can accept three parameter:
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;

&lt;pre class=&quot;src src-lisp&quot;&gt;(&lt;span style=&quot;color: #8b008b; font-weight: bold;&quot;&gt;defun&lt;/span&gt; &lt;span style=&quot;color: #0000cd;&quot;&gt;org-export-output-file-name&lt;/span&gt; (extension &lt;span style=&quot;color: #551a8b;&quot;&gt;&amp;amp;optional&lt;/span&gt; subtreep pub-dir)
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
When optional argument PUB-DIR is set, use it as the publishing directory. 
&lt;/p&gt;

&lt;p&gt;
Thus change line 5 of &lt;code&gt;org-html-export-to-html&lt;/code&gt; function, add the third paramter &lt;code&gt;~/exports/&lt;/code&gt;:
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;

&lt;pre class=&quot;src src-lisp&quot;&gt;&lt;span class=&quot;linenr&quot;&gt; 1: &lt;/span&gt;(&lt;span style=&quot;color: #8b008b; font-weight: bold;&quot;&gt;defun&lt;/span&gt; &lt;span style=&quot;color: #0000cd;&quot;&gt;org-html-export-to-html&lt;/span&gt;
&lt;span class=&quot;linenr&quot;&gt; 2: &lt;/span&gt;  (&lt;span style=&quot;color: #551a8b;&quot;&gt;&amp;amp;optional&lt;/span&gt; async subtreep visible-only body-only ext-plist)
&lt;span class=&quot;linenr&quot;&gt; 3: &lt;/span&gt;  (interactive)
&lt;span class=&quot;linenr&quot;&gt; 4: &lt;/span&gt;  (&lt;span style=&quot;color: #8b008b; font-weight: bold;&quot;&gt;let*&lt;/span&gt; ((extension (concat &lt;span style=&quot;color: #3a5fcd;&quot;&gt;&quot;.&quot;&lt;/span&gt; org-html-extension))
&lt;span class=&quot;linenr&quot;&gt; 5: &lt;/span&gt;     (file (org-export-output-file-name extension subtreep &lt;span style=&quot;color: #3a5fcd;&quot;&gt;&quot;~/exports/&quot;&lt;/span&gt;))
&lt;span class=&quot;linenr&quot;&gt; 6: &lt;/span&gt;     (org-export-coding-system org-html-coding-system))
&lt;span class=&quot;linenr&quot;&gt; 7: &lt;/span&gt;    (&lt;span style=&quot;color: #8b008b; font-weight: bold;&quot;&gt;if&lt;/span&gt; async
&lt;span class=&quot;linenr&quot;&gt; 8: &lt;/span&gt;    (org-export-async-start
&lt;span class=&quot;linenr&quot;&gt; 9: &lt;/span&gt;        (&lt;span style=&quot;color: #8b008b; font-weight: bold;&quot;&gt;lambda&lt;/span&gt; (f) (org-export-add-to-stack f &apos;html))
&lt;span class=&quot;linenr&quot;&gt;10: &lt;/span&gt;      (&lt;span style=&quot;color: #8b008b; font-weight: bold;&quot;&gt;let&lt;/span&gt; ((org-export-coding-system org-html-coding-system))
&lt;span class=&quot;linenr&quot;&gt;11: &lt;/span&gt;        `(expand-file-name
&lt;span class=&quot;linenr&quot;&gt;12: &lt;/span&gt;          (org-export-to-file
&lt;span class=&quot;linenr&quot;&gt;13: &lt;/span&gt;           &apos;html ,file ,subtreep ,visible-only ,body-only &apos;,ext-plist))))
&lt;span class=&quot;linenr&quot;&gt;14: &lt;/span&gt;      (&lt;span style=&quot;color: #8b008b; font-weight: bold;&quot;&gt;let&lt;/span&gt; ((org-export-coding-system org-html-coding-system))
&lt;span class=&quot;linenr&quot;&gt;15: &lt;/span&gt;    (org-export-to-file
&lt;span class=&quot;linenr&quot;&gt;16: &lt;/span&gt;     &apos;html file subtreep visible-only body-only ext-plist)))))
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
Fantastique, now when you press &lt;code&gt;C-c C-e h o&lt;/code&gt;, emacs will save the &lt;code&gt;.html&lt;/code&gt; file in &lt;code&gt;~/exports/&lt;/code&gt; and open it in web browser for your preview.
&lt;/p&gt;

&lt;p&gt;
For other kind of export, I think this method could also be applied. Good luck.
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
</content>
 </entry>
 
 
</feed>