<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:media="http://search.yahoo.com/mrss/"><channel><title><![CDATA[SXKDZ]]></title><description><![CDATA[Programming, Traveling, and Music]]></description><link>https://sxkdz.me/</link><image><url>https://sxkdz.me/favicon.png</url><title>SXKDZ</title><link>https://sxkdz.me/</link></image><generator>Ghost 4.9</generator><lastBuildDate>Mon, 06 Apr 2026 09:45:31 GMT</lastBuildDate><atom:link href="https://sxkdz.me/rss/" rel="self" type="application/rss+xml"/><ttl>60</ttl><item><title><![CDATA[Python 旋风之旅]]></title><description><![CDATA[<!--kg-card-begin: markdown--><p>Python &#x65CB;&#x98CE;&#x4E4B;&#x65C5; &#x4E2D;&#x6587;&#x7FFB;&#x8BD1;&#x7248;</p>
<p>Python &#x5B98;&#x65B9;&#x6559;&#x7A0B;&#x7684;&#x5F00;&#x5934;&#x662F;&#x8FD9;&#x6837;&#x5199;&#x7684;&#xFF1A;&#x201C;Python &#x662F;&#x4E00;&#x95E8;&#x65E2;&#x5BB9;&#x6613;&#x4E0A;&#x624B;&#x53C8;&#x5F3A;&#x5927;&#x7684;&#x7F16;&#x7A0B;&#x8BED;&#x8A00;&#x3002;&#x201D;&#x968F;&#x7740;&#x5927;&#x6570;&#x636E;&#x3001;</p>]]></description><link>https://sxkdz.me/a-whirlwind-tour-of-python/</link><guid isPermaLink="false">60f547237767ec0d683e9eae</guid><category><![CDATA[Python]]></category><category><![CDATA[Programming]]></category><category><![CDATA[Tutorial]]></category><dc:creator><![CDATA[SXKDZ]]></dc:creator><pubDate>Fri, 13 Apr 2018 03:50:47 GMT</pubDate><content:encoded><![CDATA[<!--kg-card-begin: markdown--><p>Python &#x65CB;&#x98CE;&#x4E4B;&#x65C5; &#x4E2D;&#x6587;&#x7FFB;&#x8BD1;&#x7248;</p>
<p>Python &#x5B98;&#x65B9;&#x6559;&#x7A0B;&#x7684;&#x5F00;&#x5934;&#x662F;&#x8FD9;&#x6837;&#x5199;&#x7684;&#xFF1A;&#x201C;Python &#x662F;&#x4E00;&#x95E8;&#x65E2;&#x5BB9;&#x6613;&#x4E0A;&#x624B;&#x53C8;&#x5F3A;&#x5927;&#x7684;&#x7F16;&#x7A0B;&#x8BED;&#x8A00;&#x3002;&#x201D;&#x968F;&#x7740;&#x5927;&#x6570;&#x636E;&#x3001;&#x673A;&#x5668;&#x5B66;&#x4E60;&#x4E0E;&#x4EBA;&#x5DE5;&#x667A;&#x80FD;&#x7684;&#x5174;&#x8D77;&#xFF0C;Python &#x8BED;&#x8A00;&#x6B63;&#x5728;&#x53D7;&#x5230;&#x8D8A;&#x6765;&#x8D8A;&#x5E7F;&#x6CDB;&#x7684;&#x5173;&#x6CE8;&#x548C;&#x5E94;&#x7528;&#x3002;&#x5BF9;&#x7231;&#x597D;Python &#x7684;&#x4EBA;&#x6765;&#x8BF4;&#xFF0C;&#x4EBA;&#x751F;&#x82E6;&#x77ED;&#xFF0C;Python &#x5F53;&#x6B4C;&#xFF01;&#x7B80;&#x6D01;&#x8F7B;&#x677E;&#x7684;&#x8BED;&#x6CD5;&#xFF0C;&#x5F00;&#x7BB1;&#x5373;&#x7528;&#x7684;&#x6A21;&#x5757;&#xFF0C;&#x5F3A;&#x5927;&#x5FEB;&#x4E50;&#x7684;&#x793E;&#x533A;&#xFF0C;&#x603B;&#x53EF;&#x4EE5;&#x5FEB;&#x901F;&#x6784;&#x5EFA;&#x51FA;&#x7B80;&#x5355;&#x9AD8;&#x6548;&#x7684;&#x89E3;&#x51B3;&#x65B9;&#x6848;&#x3002;&#x5BF9;&#x4E8E;&#x5E0C;&#x671B;&#x5FEB;&#x901F;&#x5165;&#x95E8; Python &#x8BED;&#x8A00;&#x7684;&#x8BFB;&#x8005;&#x4EEC;&#x6765;&#x8BF4;&#xFF0C;&#x5E02;&#x9762;&#x4E0A;&#x4F17;&#x591A;&#x50CF;&#x5B57;&#x5178;&#x4E00;&#x822C;&#x539A;&#x539A;&#x7684; Python &#x4E66;&#x7C4D;&#x5E38;&#x5E38;&#x8BA9;&#x4EBA;&#x611F;&#x5230;&#x5934;&#x76AE;&#x53D1;&#x9EBB;&#x3002;&#x4E3A;&#x4E86;&#x8BA9;&#x5BF9; Python &#x8BED;&#x8A00;&#x611F;&#x5174;&#x8DA3;&#x7684;&#x8BFB;&#x8005;&#x80FD;&#x5FEB;&#x901F;&#x5165;&#x95E8;&#x8FD9;&#x95E8;&#x8BED;&#x8A00;&#xFF0C;&#x800C;&#x975E;&#x8FC7;&#x5206;&#x7EA0;&#x7ED3;&#x4E8E;Python &#x7EC6;&#x679D;&#x672B;&#x8282;&#x4E4B;&#x5904;&#xFF0C;&#x6211;&#x4EEC;&#x9009;&#x62E9;&#x5E76;&#x7FFB;&#x8BD1;&#x4E86;&#x8FD9;&#x672C;Python &#x6559;&#x7A0B;&#xFF1A;<em>A Whirlwind Tour of Python</em>&#x3002;</p>
<p>&#x8FD9;&#x672C;&#x4EC5; 100 &#x4F59;&#x9875;&#x7684;&#x5C0F;&#x518C;&#x5B50;&#x662F;&#x4E00;&#x672C;&#x7CBE;&#x7B80;&#x7684; Python &#x7F16;&#x7A0B;&#x5165;&#x95E8;&#x6559;&#x7A0B;&#xFF0C;&#x4ECB;&#x7ECD;&#x4E86; Python &#x8BED;&#x8A00;&#x7684;&#x6838;&#x5FC3;&#x7279;&#x6027;&#x4EE5;&#x53CA;&#x6570;&#x636E;&#x79D1;&#x5B66;&#x9886;&#x57DF;&#x5185;&#x4E00;&#x4E9B; Python &#x7B2C;&#x4E09;&#x65B9;&#x6269;&#x5C55;&#x5305;&#x7684;&#x5B9E;&#x9645;&#x5E94;&#x7528;&#xFF0C;&#x76EE;&#x7684;&#x662F;&#x8BA9;&#x719F;&#x6089;&#x5176;&#x4ED6;&#x7F16;&#x7A0B;&#x8BED;&#x8A00;&#x7684;&#x6570;&#x636E;&#x79D1;&#x5B66;&#x5BB6;&#x5FEB;&#x901F;&#x5B66;&#x4E60; Python&#x3002;&#x672C;&#x4E66;&#x9002;&#x5408;&#x4ECE;&#x672A;&#x63A5;&#x89E6;&#x8FC7; Python &#x8BED;&#x8A00;&#x4F46;&#x5BF9;&#x5176;&#x4ED6;&#x7F16;&#x7A0B;&#x8BED;&#x8A00;&#x6709;&#x4E00;&#x5B9A;&#x4E86;&#x89E3;&#x7684;&#x8BFB;&#x8005;&#xFF0C;&#x5EFA;&#x8BAE;&#x8BFB;&#x8005;&#x8DDF;&#x968F;&#x672C;&#x4E66;&#x4EB2;&#x81EA;&#x52A8;&#x624B;&#x5B8C;&#x6210;&#x6BCF;&#x4E00;&#x4E2A;&#x4F8B;&#x5B50;&#x3002;</p>
<p>&#x672C;&#x4E66;&#x7FFB;&#x8BD1;&#x529B;&#x6C42;&#x5728;&#x539F;&#x7248;&#x57FA;&#x7840;&#x4E0A;&#x505A;&#x5230;&#x7CBE;&#x70BC;&#x3001;&#x5168;&#x9762;&#x3001;&#x51C6;&#x786E;&#x5730;&#x4ECB;&#x7ECD; Python &#x8BED;&#x8A00;&#x3002;&#x5728;&#x4E66;&#x4E2D;&#x96BE;&#x4E8E;&#x7406;&#x89E3;&#x7684;&#x90E8;&#x5206;&#x6211;&#x4EEC;&#x6DFB;&#x52A0;&#x4E86;&#x8BD1;&#x8005;&#x6CE8;&#xFF0C;&#x5E0C;&#x671B;&#x80FD;&#x4FBF;&#x4E8E;&#x8BFB;&#x8005;&#x7406;&#x89E3;&#x3002;</p>
<p>&#x5728;&#x7EBF;&#x7248;&#x53EF;&#x4EE5;&#x4ECE;<a href="https://github.com/SXKDZ/A-Whirlwind-Tour-of-Python/archive/master.zip">&#x8FD9;&#x91CC;</a>&#x4E0B;&#x8F7D;&#x3002;</p>
<!--kg-card-end: markdown-->]]></content:encoded></item><item><title><![CDATA[Recommended Books for Python Novice]]></title><description><![CDATA[<!--kg-card-begin: markdown--><h1 id="beginninglevel">Beginning Level</h1>
<p><em>Python Crash Course: A Hands-On Project Based Introduction to Programming</em></p>
<p>By Eric Matthes, No Starch Press, Inc., 2016</p>
<p>&#x300A;Python &#x7F16;&#x7A0B;&#xFF1A;&#x4ECE;&#x5165;&#x95E8;&#x5230;&#x5B9E;&#x8DF5;&#x300B;</p>
<p>&#x8881;&#x56FD;&#x5FE0;&#x8BD1;&#xFF0C;&#x4EBA;&#x6C11;&#x90AE;&#x7535;&#x51FA;&#x7248;&#x793E;&#xFF0C;2016</p>
<p><em>Learn Python 3 The</em></p>]]></description><link>https://sxkdz.me/recommended-books-for-python-novice/</link><guid isPermaLink="false">60f547237767ec0d683e9ead</guid><category><![CDATA[Python]]></category><dc:creator><![CDATA[SXKDZ]]></dc:creator><pubDate>Sun, 08 Apr 2018 01:57:43 GMT</pubDate><content:encoded><![CDATA[<!--kg-card-begin: markdown--><h1 id="beginninglevel">Beginning Level</h1>
<p><em>Python Crash Course: A Hands-On Project Based Introduction to Programming</em></p>
<p>By Eric Matthes, No Starch Press, Inc., 2016</p>
<p>&#x300A;Python &#x7F16;&#x7A0B;&#xFF1A;&#x4ECE;&#x5165;&#x95E8;&#x5230;&#x5B9E;&#x8DF5;&#x300B;</p>
<p>&#x8881;&#x56FD;&#x5FE0;&#x8BD1;&#xFF0C;&#x4EBA;&#x6C11;&#x90AE;&#x7535;&#x51FA;&#x7248;&#x793E;&#xFF0C;2016</p>
<p><em>Learn Python 3 The Hard Way</em></p>
<p>By Zed A. Shaw, Addison-Wesley, 2017</p>
<p>&#x300A;&#x201C;&#x7B28;&#x529E;&#x6CD5;&#x201D;&#x5B66; Python&#xFF08;&#x7B2C; 3 &#x7248;&#xFF09;&#x300B;</p>
<p>&#x738B;&#x5DCD;&#x5DCD;&#x8BD1;&#xFF0C;&#x4EBA;&#x6C11;&#x90AE;&#x7535;&#x51FA;&#x7248;&#x793E;&#xFF0C;2014</p>
<p><em>Python Pocket Reference (5th Edition)</em></p>
<p>By Mark Lutz, O&apos;Reilly Media, 2014</p>
<p>&#x300A;Python &#x8896;&#x73CD;&#x6307;&#x5357;&#xFF08;&#x7B2C; 5 &#x7248;&#xFF09;&#x300B;</p>
<p>&#x4FAF;&#x8363;&#x6D9B;&#x8BD1;&#xFF0C;&#x4E2D;&#x56FD;&#x7535;&#x529B;&#x51FA;&#x7248;&#x793E;&#xFF0C;2015</p>
<p><em>Python Essential Reference (4th Edition)</em></p>
<p>By David M. Beazley, Addison-Wesley Professional, 2009</p>
<p>&#x300A;Python &#x53C2;&#x8003;&#x624B;&#x518C;&#xFF08;&#x7B2C; 4 &#x7248;&#xFF09;&#x300B;</p>
<p>&#x8C22;&#x4FCA;&#x3001;&#x6768;&#x8D8A;&#x3001;&#x9AD8;&#x4F1F;&#x8BD1;&#xFF0C;&#x4EBA;&#x6C11;&#x90AE;&#x7535;&#x51FA;&#x7248;&#x793E;&#xFF0C;2010</p>
<p><em>Functional Programming in Python</em></p>
<p>By David Mertz, O&apos;Reilly Media, 2015</p>
<h1 id="intermediatelevel">Intermediate Level</h1>
<p><em>Python Cookbook (3rd Edition)</em></p>
<p>By David M. Beazley and Brian K. Jones, O&apos;Reilly Media, 2013</p>
<p>&#x300A;Python Cookbook &#x4E2D;&#x6587;&#x7248;&#xFF08;&#x7B2C; 3 &#x7248;&#xFF09;&#x300B;</p>
<p>&#x9648;&#x8238;&#x8BD1;&#xFF0C;&#x4EBA;&#x6C11;&#x90AE;&#x7535;&#x51FA;&#x7248;&#x793E;&#xFF0C;2015</p>
<p><em>Introducing Python Modern Computing in Simple Packages</em></p>
<p>By Bill Lubanovic, O&apos;Reilly Media, 2014</p>
<p>&#x300A;Python &#x8BED;&#x8A00;&#x53CA;&#x5176;&#x5E94;&#x7528;&#x300B;</p>
<p>&#x4E01;&#x5609;&#x745E;&#x3001;&#x6881;&#x6770;&#x3001;&#x79B9;&#x5E38;&#x9686;&#x8BD1;&#xFF0C;&#x4EBA;&#x6C11;&#x90AE;&#x7535;&#x51FA;&#x7248;&#x793E;&#xFF0C;2016</p>
<p><em>Effective Python: 59 Specific Ways to Writer Better Python</em></p>
<p>By Brett Slatkin, Addison-Wesley, 2015</p>
<p>&#x300A;Effective Python&#xFF1A;&#x7F16;&#x5199;&#x9AD8;&#x8D28;&#x91CF; Python &#x4EE3;&#x7801;&#x7684; 59 &#x4E2A;&#x6709;&#x6548;&#x65B9;&#x6CD5;&#x300B;</p>
<p>&#x7231;&#x98DE;&#x7FD4;&#x8BD1;&#xFF0C;&#x673A;&#x68B0;&#x5DE5;&#x4E1A;&#x51FA;&#x7248;&#x793E;&#xFF0C;2016</p>
<h1 id="advancedlevel">Advanced Level</h1>
<p><em>Fluent Python</em></p>
<p>By Luciano Ramalho, O&apos;Reilly Media, 2015</p>
<p>&#x300A;&#x6D41;&#x7545;&#x7684;Python&#x300B;</p>
<p>&#x5B89;&#x9053;&#x3001;&#x5434;&#x73C2;&#x8BD1;&#xFF0C;&#x4EBA;&#x6C11;&#x90AE;&#x7535;&#x51FA;&#x7248;&#x793E;&#xFF0C;2017</p>
<p><em>High Performance Python</em></p>
<p>By Micha Gorelick and Ian Ozsvald, O&apos;Reilly Media, 2014</p>
<p>&#x300A;Python &#x9AD8;&#x6027;&#x80FD;&#x7F16;&#x7A0B;&#x300B;</p>
<p>&#x80E1;&#x4E16;&#x6770;&#x3001;&#x5F90;&#x65ED;&#x5F6C;&#x8BD1;&#xFF0C;&#x4EBA;&#x6C11;&#x90AE;&#x7535;&#x51FA;&#x7248;&#x793E;&#xFF0C;2017</p>
<h1 id="pythoninspecializedapplications">Python in Specialized Applications</h1>
<h2 id="computervision">Computer Vision</h2>
<p><em>Programming Computer Vision with Python</em></p>
<p>By Jan Erik Solem, O&apos;Reilly Media, 2012</p>
<p>&#x300A;Python &#x8BA1;&#x7B97;&#x673A;&#x89C6;&#x89C9;&#x7F16;&#x7A0B;&#x300B;</p>
<p>&#x6731;&#x6587;&#x6D9B;&#x3001;&#x8881;&#x52C7;&#x8BD1;&#xFF0C;&#x4EBA;&#x6C11;&#x90AE;&#x7535;&#x51FA;&#x7248;&#x793E;&#xFF0C;2014</p>
<p><em>Deep Learning with Python</em></p>
<p>By Francois Chollet, Manning Publications, 2017</p>
<h2 id="datascience">Data Science</h2>
<p><em>Web Scraping with Python (2nd Edition)</em></p>
<p>By Ryan Mitchell, O&apos;Reilly Media, 2018</p>
<p>&#x300A;Python &#x7F51;&#x7EDC;&#x6570;&#x636E;&#x91C7;&#x96C6;&#x300B;</p>
<p>&#x9676;&#x4FCA;&#x6770;&#x3001;&#x9648;&#x5C0F;&#x8389;&#x8BD1;&#xFF0C;&#x4EBA;&#x6C11;&#x90AE;&#x7535;&#x51FA;&#x7248;&#x793E;&#xFF0C;2016</p>
<p><em>Python Data Science Handbook: Tools and Techniques for Developers</em></p>
<p>By Jake VanderPlas, O&apos;Reilly Media, 2016</p>
<p>&#x300A;Python &#x6570;&#x636E;&#x79D1;&#x5B66;&#x624B;&#x518C;&#x300B;</p>
<p>&#x9676;&#x4FCA;&#x6770;&#x3001;&#x9648;&#x5C0F;&#x8389;&#x8BD1;&#xFF0C;&#x4EBA;&#x6C11;&#x90AE;&#x7535;&#x51FA;&#x7248;&#x793E;&#xFF0C;2018</p>
<p><em>Python for Data Analysis (2nd Edition)</em></p>
<p>By William McKinney, O&apos;Reilly Media, 2017</p>
<p>&#x300A;&#x5229;&#x7528; Python &#x8FDB;&#x884C;&#x6570;&#x636E;&#x5206;&#x6790;&#x300B;</p>
<p>&#x5510;&#x5B66;&#x97EC;&#x8BD1;&#xFF0C;&#x673A;&#x68B0;&#x5DE5;&#x4E1A;&#x51FA;&#x7248;&#x793E;&#xFF0C;2013</p>
<h2 id="finance">Finance</h2>
<p><em>Python for Finance: Analyze Big Financial Data</em></p>
<p>Yves Hilpisch, O&apos;Reilly Media, 2014</p>
<p>&#x300A;Python &#x91D1;&#x878D;&#x5927;&#x6570;&#x636E;&#x5206;&#x6790;&#x300B;</p>
<p>&#x59DA;&#x519B;&#x8BD1;&#xFF0C;&#x4EBA;&#x6C11;&#x90AE;&#x7535;&#x51FA;&#x7248;&#x793E;&#xFF0C;2015</p>
<h2 id="scientificcomputation">Scientific Computation</h2>
<p><em>Effective Computation in Physics (Python)</em></p>
<p>By Anthony Scopatz and Kathryn D. Huff, O&apos;Reilly Media, 2015</p>
<p>&#x300A;Python &#x7269;&#x7406;&#x5B66;&#x9AD8;&#x6548;&#x8BA1;&#x7B97;&#x300B;</p>
<p>&#x5B59;&#x6CE2;&#x7FD4;&#x8BD1;&#xFF0C;&#x4EBA;&#x6C11;&#x90AE;&#x7535;&#x51FA;&#x7248;&#x793E;&#xFF0C;2018</p>
<!--kg-card-end: markdown-->]]></content:encoded></item><item><title><![CDATA[MIT 6.828 JOS Lab 5 Report]]></title><description><![CDATA[<!--kg-card-begin: markdown--><h1 id="mit6828joslab">MIT 6.828: JOS Lab</h1>
<h2 id="lab5filesystemspawnandshell">Lab 5: File System, Spawn and Shell</h2>
<blockquote>
<p><strong>Questions</strong></p>
<p>Answer the following questions:</p>
<ol>
<li>Do you have to do anything else to ensure that this I/O privilege setting is saved and restored properly when you subsequently switch from one environment to another? Why?</li>
</ol>
</blockquote>
<ol>
<li>Nothing else needs</li></ol>]]></description><link>https://sxkdz.me/mit-6-828-jos-lab-5/</link><guid isPermaLink="false">60f547237767ec0d683e9eac</guid><category><![CDATA[Programming]]></category><category><![CDATA[JOS]]></category><category><![CDATA[Operating System]]></category><dc:creator><![CDATA[SXKDZ]]></dc:creator><pubDate>Thu, 07 Sep 2017 08:58:28 GMT</pubDate><content:encoded><![CDATA[<!--kg-card-begin: markdown--><h1 id="mit6828joslab">MIT 6.828: JOS Lab</h1>
<h2 id="lab5filesystemspawnandshell">Lab 5: File System, Spawn and Shell</h2>
<blockquote>
<p><strong>Questions</strong></p>
<p>Answer the following questions:</p>
<ol>
<li>Do you have to do anything else to ensure that this I/O privilege setting is saved and restored properly when you subsequently switch from one environment to another? Why?</li>
</ol>
</blockquote>
<ol>
<li>Nothing else needs to be done. When switching from the file system environment to another environment, the two trap frames are completely separate. If the file system environment forks, then the child would inherit the <code>ELFLAGS</code> register value and hence the I/O privilege.</li>
</ol>
<!--kg-card-end: markdown-->]]></content:encoded></item><item><title><![CDATA[MIT 6.828 JOS Lab 4 Report]]></title><description><![CDATA[<!--kg-card-begin: markdown--><h1 id="mit6828joslab">MIT 6.828: JOS Lab</h1>
<h2 id="lab4preemptivemultitasking">Lab 4: Preemptive Multitasking</h2>
<h3 id="partamultiprocessorsupportandcooperativemultitasking">Part A: Multiprocessor Support and Cooperative Multitasking</h3>
<blockquote>
<p><strong>Questions</strong></p>
<p>Answer the following questions:</p>
<ol>
<li>Compare <code>kern/mpentry.S</code> side by side with <code>boot/boot.S</code>. Bearing in mind that <code>kern/mpentry.S</code> is compiled and linked to run above <code>KERNBASE</code> just like everything</li></ol></blockquote>]]></description><link>https://sxkdz.me/mit-6-828-jos-lab-4/</link><guid isPermaLink="false">60f547237767ec0d683e9eab</guid><category><![CDATA[Programming]]></category><category><![CDATA[JOS]]></category><category><![CDATA[Operating System]]></category><dc:creator><![CDATA[SXKDZ]]></dc:creator><pubDate>Thu, 07 Sep 2017 08:57:55 GMT</pubDate><content:encoded><![CDATA[<!--kg-card-begin: markdown--><h1 id="mit6828joslab">MIT 6.828: JOS Lab</h1>
<h2 id="lab4preemptivemultitasking">Lab 4: Preemptive Multitasking</h2>
<h3 id="partamultiprocessorsupportandcooperativemultitasking">Part A: Multiprocessor Support and Cooperative Multitasking</h3>
<blockquote>
<p><strong>Questions</strong></p>
<p>Answer the following questions:</p>
<ol>
<li>Compare <code>kern/mpentry.S</code> side by side with <code>boot/boot.S</code>. Bearing in mind that <code>kern/mpentry.S</code> is compiled and linked to run above <code>KERNBASE</code> just like everything else in the kernel, what is the purpose of macro <code>MPBOOTPHYS</code>? Why is it necessary in <code>kern/mpentry.S</code> but not in <code>boot/boot.S</code>? In other words, what could go wrong if it were omitted in <code>kern/mpentry.S</code>?<br>
Hint: recall the differences between the link address and the load address that we have discussed in Lab 1.</li>
</ol>
</blockquote>
<ol>
<li>The <code>MPBOOTPHYS</code> macro is needed because <code>mpentry.S</code> is linked at high addresses but gets loaded by <code>boot_aps()</code> at the low address <code>MPENTRY_ADDR</code>. The bootloader doesn&apos;t need a macro like this because it is linked and loaded at the same low address (<code>0x00007c00</code>).</li>
</ol>
<blockquote>
<p><strong>Questions</strong></p>
<ol start="2">
<li>It seems that using the big kernel lock guarantees that only one CPU can run the kernel code at a time. Why do we still need separate kernel stacks for each CPU? Describe a scenario in which using a shared kernel stack will go wrong, even with the protection of the big kernel lock.</li>
</ol>
</blockquote>
<ol start="2">
<li>During a trap/interrupt, the trapframe is pushed onto the stack <strong>without holding the kernel lock</strong>. Say CPU 1 enters the kernel on a system call and while it is in the kernel, CPU 2 attempts to enter the kernel on a timer interrupt. CPU 2 can&apos;t enter the kernel, it will be spinning at the lock in <code>trap()</code>. However, it will have pushed its trap frame <strong>on top of the trap frame already pushed by CPU 1</strong>. This of course means that when CPU 1 returns to user mode, it will pop off CPU 2&apos;s frame and return in that environment instead of its own.</li>
</ol>
<blockquote>
<p><strong>Questions</strong></p>
<ol start="3">
<li>In your implementation of <code>env_run()</code> you should have called <code>lcr3()</code>. Before and after the call to <code>lcr3()</code>, your code makes references (at least it should) to the variable <code>e</code>, the argument to <code>env_run</code>. Upon loading the <code>%cr3</code> register, the addressing context used by the MMU is instantly changed. But a virtual address (namely <code>e</code>) has meaning relative to a given address context--the address context specifies the physical address to which the virtual address maps. Why can the pointer <code>e</code> be dereferenced both before and after the addressing switch?</li>
<li>Whenever the kernel switches from one environment to another, it must ensure the old environment&apos;s registers are saved so they can be restored properly later. Why? Where does this happen?</li>
</ol>
</blockquote>
<ol start="3">
<li>Because all environment page directories share certain mappings. The <code>envs</code> array is allocated and mapped to <code>UENVS</code> in <code>mem_init()</code> and those mappings are then <strong>copied to all new page directories</strong> in <code>env_setup_vm()</code>.</li>
<li>It&apos;s a like the caller/callee save calling convention except here it is for interrupting the whole process. Processes keep temporary data and variables in registers and the process assumes that when it returns, all those values will still be there. The registers are saved on the user environment&apos;s stack as part of the trapframe constructed by the <code>int</code> instruction and the code in <code>alltraps</code>. To restore the state of a new process, JOS uses the <code>env_pop_tf()</code> function, which switches first to the new process&apos; stack and the pops all the registers in place.</li>
</ol>
<!--kg-card-end: markdown-->]]></content:encoded></item><item><title><![CDATA[MIT 6.828 JOS Lab 3 Report]]></title><description><![CDATA[<!--kg-card-begin: markdown--><h1 id="mit6828joslab">MIT 6.828: JOS Lab</h1>
<h2 id="lab3">Lab 3</h2>
<h3 id="partauserenvironmentsandexceptionhandling">Part A: User Environments and Exception Handling</h3>
<blockquote>
<p><strong>Questions</strong></p>
<p>Answer the following questions:</p>
<ol>
<li>What is the purpose of having an individual handler function for each exception/interrupt? (i.e., if all exceptions/interrupts were delivered to the same handler, what feature that exists in</li></ol></blockquote>]]></description><link>https://sxkdz.me/mit-6-828-jos-lab-3/</link><guid isPermaLink="false">60f547237767ec0d683e9eaa</guid><category><![CDATA[Programming]]></category><category><![CDATA[JOS]]></category><category><![CDATA[Operating System]]></category><dc:creator><![CDATA[SXKDZ]]></dc:creator><pubDate>Thu, 07 Sep 2017 08:56:55 GMT</pubDate><content:encoded><![CDATA[<!--kg-card-begin: markdown--><h1 id="mit6828joslab">MIT 6.828: JOS Lab</h1>
<h2 id="lab3">Lab 3</h2>
<h3 id="partauserenvironmentsandexceptionhandling">Part A: User Environments and Exception Handling</h3>
<blockquote>
<p><strong>Questions</strong></p>
<p>Answer the following questions:</p>
<ol>
<li>What is the purpose of having an individual handler function for each exception/interrupt? (i.e., if all exceptions/interrupts were delivered to the same handler, what feature that exists in the current implementation could not be provided?)</li>
<li>Did you have to do anything to make the <code>user/softint</code> program behave correctly? The grade script expects it to produce a general protection fault (trap 13), but <code>softint</code>&apos;s code says <code>int $14</code>. <em>Why</em> should this produce interrupt vector 13? What happens if the kernel actually allows <code>softint</code>&apos;s<code>int $14</code> instruction to invoke the kernel&apos;s page fault handler (which is interrupt vector 14)?</li>
</ol>
</blockquote>
<ol>
<li>To maintain privilege isolation between kernel and user programs. If all interrupts were delivered to the same handler, there would be no way to assign different permissions to different handlers.</li>
<li>No. <code>softint</code> produces interrupt 13 because it doesn&apos;t have permissions to invoke a page fault. And thus the processor catches that mismatch and then raises a general protection fault.</li>
</ol>
<h3 id="partbpagefaultsbreakpointsexceptionsandsystemcalls">Part B: Page Faults, Breakpoints Exceptions, and System Calls</h3>
<blockquote>
<p><strong>Questions</strong></p>
<ol start="3">
<li>The break point test case will either generate a break point exception or a general protection fault depending on how you initialized the break point entry in the IDT (i.e., your call to <code>SETGATE</code> from <code>trap_init</code>). Why? How do you need to set it up in order to get the breakpoint exception to work as specified above and what incorrect setup would cause it to trigger a general protection fault?</li>
<li>What do you think is the point of these mechanisms, particularly in light of what the <code>user/softint</code> test program does?</li>
</ol>
</blockquote>
<ol start="3">
<li>Because the permission set for the break point exception is user. If set to kernel, the CPU will raise a general protection fault.</li>
<li>The point of these mechanisms is to restrict the influence user level code can have on the kernel. Users can set break points but can not directly manipulate virtual memories.</li>
</ol>
<!--kg-card-end: markdown-->]]></content:encoded></item><item><title><![CDATA[MIT 6.828 JOS Lab 2 Report]]></title><description><![CDATA[<!--kg-card-begin: markdown--><h1 id="mit6828joslab">MIT 6.828: JOS Lab</h1>
<h2 id="lab2">Lab 2</h2>
<blockquote>
<p><strong>Questions</strong></p>
<ol>
<li>
<p>Assuming that the following JOS kernel code is correct, what type should variable <code>x</code> have, <code>uintptr_t</code> or <code>physaddr_t</code>?</p>
<pre><code class="language-c">mystery_t x;
char* value = return_a_pointer();
*value = 10;
x = (mystery_t) value;
</code></pre>
</li>
</ol>
</blockquote>
<p>The type of <code>x</code> will have to be</p>]]></description><link>https://sxkdz.me/mit-6-828-jos-lab-2/</link><guid isPermaLink="false">60f547237767ec0d683e9ea9</guid><category><![CDATA[Programming]]></category><category><![CDATA[JOS]]></category><category><![CDATA[Operating System]]></category><dc:creator><![CDATA[SXKDZ]]></dc:creator><pubDate>Thu, 07 Sep 2017 08:53:26 GMT</pubDate><content:encoded><![CDATA[<!--kg-card-begin: markdown--><h1 id="mit6828joslab">MIT 6.828: JOS Lab</h1>
<h2 id="lab2">Lab 2</h2>
<blockquote>
<p><strong>Questions</strong></p>
<ol>
<li>
<p>Assuming that the following JOS kernel code is correct, what type should variable <code>x</code> have, <code>uintptr_t</code> or <code>physaddr_t</code>?</p>
<pre><code class="language-c">mystery_t x;
char* value = return_a_pointer();
*value = 10;
x = (mystery_t) value;
</code></pre>
</li>
</ol>
</blockquote>
<p>The type of <code>x</code> will have to be <code>uintptr_t</code>. Postulating that the code is correct, since the code snippet dereferences the pointer and writes to it, <code>return_a_pointer()</code> can not return a physical address bypassing the MMU translation.</p>
<blockquote>
<p><strong>Questions</strong></p>
<ol start="2">
<li>
<p>What entries (rows) in the page directory have been filled in at this point? What addresses do they map and where do they point? In other words, fill out this table as much as possible:</p>
<table>
<thead>
<tr>
<th>Entry</th>
<th>Base Virtual Address</th>
<th>Points to (logically):</th>
</tr>
</thead>
<tbody>
<tr>
<td>1023</td>
<td>?</td>
<td>Page table for top 4MB of phys memory</td>
</tr>
<tr>
<td>1022</td>
<td>?</td>
<td>?</td>
</tr>
<tr>
<td>.</td>
<td>?</td>
<td>?</td>
</tr>
<tr>
<td>.</td>
<td>?</td>
<td>?</td>
</tr>
<tr>
<td>.</td>
<td>?</td>
<td>?</td>
</tr>
<tr>
<td>2</td>
<td><code>0x00800000</code></td>
<td>?</td>
</tr>
<tr>
<td>1</td>
<td><code>0x00400000</code></td>
<td>?</td>
</tr>
<tr>
<td>0</td>
<td><code>0x00000000</code></td>
<td>[see next question]</td>
</tr>
</tbody>
</table>
</li>
<li>
<p>We have placed the kernel and user environment in the same address space. Why will user programs not be able to read or write the kernel&apos;s memory? What specific mechanisms protect the kernel memory?</p>
</li>
<li>
<p>What is the maximum amount of physical memory that this operating system can support? Why?</p>
</li>
<li>
<p>How much space overhead is there for managing memory, if we actually had the maximum amount of physical memory? How is this overhead broken down?</p>
</li>
<li>
<p>Revisit the page table setup in <code>kern/entry.S</code> and <code>kern/entrypgdir.c</code>. Immediately after we turn on paging, <code>EIP</code> is still a low number (a little over 1MB). At what point do we transition to running at an <code>EIP</code> above <code>KERNBASE</code>? What makes it possible for us to continue executing at a low <code>EIP</code> between when we enable paging and when we begin running at an <code>EIP</code> above <code>KERNBASE</code>? Why is this transition necessary?</p>
</li>
</ol>
</blockquote>
<ol start="2">
<li>Three major sections of the linear address space have so far been mapped: (1) the <code>pages</code> data structure, (2) the kernel stack, (3) the space above <code>KERNBASE</code>.</li>
</ol>
<table>
<thead>
<tr>
<th>Entry</th>
<th>Base Virtual Address</th>
<th>Points to (logically):</th>
</tr>
</thead>
<tbody>
<tr>
<td>1023</td>
<td><code>0xFFBFFFFF</code></td>
<td>Page table for top 4MB of phyical memory</td>
</tr>
<tr>
<td>...</td>
<td>...</td>
<td>...</td>
</tr>
<tr>
<td>959</td>
<td><code>KERNBASE</code> (<code>0xF0000000</code>)</td>
<td>First page table of kernel</td>
</tr>
<tr>
<td>958</td>
<td><code>KERNBASE - PTSIZE</code> (<code>0xEFC00000</code>)</td>
<td>The kernel stack</td>
</tr>
<tr>
<td>...</td>
<td>...</td>
<td>...</td>
</tr>
<tr>
<td>955</td>
<td><code>UPAGES</code> (<code>0xEF000000</code>)</td>
<td><code>pages</code></td>
</tr>
<tr>
<td>...</td>
<td>...</td>
<td>...</td>
</tr>
<tr>
<td>0</td>
<td><code>0x00000000</code></td>
<td>Start</td>
</tr>
</tbody>
</table>
<ol start="3">
<li>
<p>Isolation in the virtual address space is achieved by the permission bits of both page directory and page table entries. Those permission bits, located in the bottom 12 bits of every page table/directory entry, are checked by hardware.</p>
<p>To be more specific, pages are assigned either one of two privilege levels: supervisor or user. The current level is related to the CPL (current privilege level). A CPL of 0, 1 or 2 is equivalent to supervisor and a CPL of 3 is equivalent to user level. When executing in supervisor mode, all pages are accessible but when executing in user mode only other user mode pages are accessible.</p>
</li>
<li>
<p>4GB, which is the maximum number of bytes addressable using 32 bits.</p>
</li>
<li>
<p>(1) storing the page directory and page tables, (2) storing the pages array, and (3) having a chunk of memory under the kernel stack not mapped so as to trigger a page fault in case the stack goes over.</p>
</li>
<li>
<p>The transition to a high <code>EIP</code> happens with the jump to the <code>relocated</code> tag. In <code>entrygdir.c</code>, virtual address [0, 4MB) has been mapped to physical address [0, 4MB). Therefore, it is viable that we continue executing at a low <code>EIP</code> after enabling paging. The transition is necessary because the rest of the kernel is linked at high addresses.</p>
</li>
</ol>
<!--kg-card-end: markdown-->]]></content:encoded></item><item><title><![CDATA[MIT 6.828 JOS Lab 1 Report]]></title><description><![CDATA[<!--kg-card-begin: markdown--><h1 id="mit6828joslab">MIT 6.828: JOS Lab</h1>
<h2 id="lab1">Lab 1</h2>
<h3 id="part2thebootloader">Part 2: The Bootloader</h3>
<blockquote>
<p><strong>Exercise 3:</strong></p>
<p>Take a look at the <a href="https://pdos.csail.mit.edu/6.828/2016/labguide.html">lab tools guide</a>, especially the section on GDB commands. Even if you&apos;re familiar with GDB, this includes some esoteric GDB commands that are useful for OS work.</p>
<p>Set a breakpoint</p></blockquote>]]></description><link>https://sxkdz.me/mit-6-828-jos-lab-1/</link><guid isPermaLink="false">60f547237767ec0d683e9ea8</guid><category><![CDATA[Programming]]></category><category><![CDATA[JOS]]></category><category><![CDATA[Operating System]]></category><dc:creator><![CDATA[SXKDZ]]></dc:creator><pubDate>Mon, 28 Aug 2017 08:43:08 GMT</pubDate><content:encoded><![CDATA[<!--kg-card-begin: markdown--><h1 id="mit6828joslab">MIT 6.828: JOS Lab</h1>
<h2 id="lab1">Lab 1</h2>
<h3 id="part2thebootloader">Part 2: The Bootloader</h3>
<blockquote>
<p><strong>Exercise 3:</strong></p>
<p>Take a look at the <a href="https://pdos.csail.mit.edu/6.828/2016/labguide.html">lab tools guide</a>, especially the section on GDB commands. Even if you&apos;re familiar with GDB, this includes some esoteric GDB commands that are useful for OS work.</p>
<p>Set a breakpoint at address 0x7c00, which is where the boot sector will be loaded. Continue execution until that breakpoint. Trace through the code in <code>boot/boot.S</code>, using the source code and the disassembly file <code>obj/boot/boot.asm</code> to keep track of where you are. Also use the <code>x/i</code> command in GDB to disassemble sequences of instructions in the boot loader, and compare the original boot loader source code with both the disassembly in <code>obj/boot/boot.asm</code>and GDB.</p>
<p>Trace into <code>bootmain()</code> in <code>boot/main.c</code>, and then into <code>readsect()</code>. Identify the exact assembly instructions that correspond to each of the statements in <code>readsect()</code>. Trace through the rest of <code>readsect()</code> and back out into <code>bootmain()</code>, and identify the begin and end of the <code>for</code> loop that reads the remaining sectors of the kernel from the disk. Find out what code will run when the loop is finished, set a breakpoint there, and continue to that breakpoint. Then step through the remainder of the boot loader.</p>
<p>Be able to answer the following questions:</p>
<ul>
<li>At what point does the processor start executing 32-bit code? What exactly causes the switch from 16- to 32-bit mode?</li>
<li>What is the <em>last</em> instruction of the boot loader executed, and what is the <em>first</em> instruction of the kernel it just loaded?</li>
<li><em>Where</em> is the first instruction of the kernel?</li>
<li>How does the boot loader decide how many sectors it must read in order to fetch the entire kernel from disk? Where does it find this information?</li>
</ul>
</blockquote>
<ol>
<li>
<p>Switching to 32-bit protected mode requires two prerequisites: (1) global descriptor table needs to be loaded so that it is possible to switch to a code segment that supports 32 bits and (2) the first bit of the CR0 register needs to be enabled.</p>
<p>The exact instruction starting executing 32-bit code is  a long jump to a different code segment:<code>0x7c2d: ljmp $0x8,$0x7c32</code>.</p>
</li>
<li>
<p>The last instruction of the boot loader is a call to the kernel after loading it into memory:</p>
<pre><code class="language-C">((void (*)(void)) (ELFHDR-&gt;e_entry))();
</code></pre>
<p>The first instruction executed by the kernel is:</p>
<pre><code class="language-assembly">0x10000c: movw $0x1234,0x472
</code></pre>
</li>
<li>
<p>The first instruction of the kernel lies in <code>0x10000c</code> (load address).</p>
</li>
<li>
<p>Through <code> objdump -x obj/kern/kernel</code> it is possible to figure out how many sections and programs in the ELF header of the kernel.</p>
</li>
</ol>
<blockquote>
<p><strong>Exercise 4:</strong></p>
<p>Read about programming with pointers in C. The best reference for the C language is <em>The C Programming Language</em> by Brian Kernighan and Dennis Ritchie (known as &apos;K&amp;R&apos;). We recommend that students purchase this book (here is an <a href="http://www.amazon.com/C-Programming-Language-2nd/dp/0131103628/sr=8-1/qid=1157812738/ref=pd_bbs_1/104-1502762-1803102?ie=UTF8&amp;s=books">Amazon Link</a>) or find one of <a href="http://library.mit.edu/F/AI9Y4SJ2L5ELEE2TAQUAAR44XV5RTTQHE47P9MKP5GQDLR9A8X-10422?func=item-global&amp;doc_library=MIT01&amp;doc_number=000355242&amp;year=&amp;volume=&amp;sub_library=">MIT&apos;s 7 copies</a>.</p>
<p>Read 5.1 (Pointers and Addresses) through 5.5 (Character Pointers and Functions) in K&amp;R. Then download the code for <a href="https://pdos.csail.mit.edu/6.828/2016/labs/lab1/pointers.c">pointers.c</a>, run it, and make sure you understand where all of the printed values come from. In particular, make sure you understand where the pointer addresses in lines 1 and 6 come from, how all the values in lines 2 through 4 get there, and why the values printed in line 5 are seemingly corrupted.</p>
<p>There are other references on pointers in C (e.g., <a href="https://pdos.csail.mit.edu/6.828/2016/readings/pointers.pdf">A tutorial by Ted Jensen</a> that cites K&amp;R heavily), though not as strongly recommended.</p>
<p><em>Warning:</em> Unless you are already thoroughly versed in C, do not skip or even skim this reading exercise. If you do not really understand pointers in C, you will suffer untold pain and misery in subsequent labs, and then eventually come to understand them the hard way. Trust us; you don&apos;t want to find out what &quot;the hard way&quot; is.</p>
</blockquote>
<p>The only point worth mentioning is that<code>3[c]</code> is the syntactic sugar for <code>*(c + 3)</code>.</p>
<blockquote>
<p><strong>Exercise 5:</strong></p>
<p>Trace through the first few instructions of the boot loader again and identify the first instruction that would &quot;break&quot; or otherwise do the wrong thing if you were to get the boot loader&apos;s link address wrong. Then change the link address in <code>boot/Makefrag</code> to something wrong, run make clean, recompile the lab with make, and trace into the boot loader again to see what happens. Don&apos;t forget to change the link address back and make clean again afterward!</p>
</blockquote>
<p>The first erroneous instruction is the long jump switching from 16 bits to 32 bits caused by inconsistency of the load address and the link address.</p>
<blockquote>
<p><strong>Exercise 6:</strong></p>
<p>We can examine memory using GDB&apos;s x command. The <a href="https://sourceware.org/gdb/current/onlinedocs/gdb/Memory.html">GDB manual</a> has full details, but for now, it is enough to know that the command x/<em>N</em>x <em>ADDR</em> prints <em>N</em> words of memory at <em>ADDR</em>. (Note that both &apos;<code>x</code>&apos;s in the command are lowercase.) <em>Warning</em>: The size of a word is not a universal standard. In GNU assembly, a word is two bytes (the &apos;w&apos; in xorw, which stands for word, means 2 bytes).</p>
<p>Reset the machine (exit QEMU/GDB and start them again). Examine the 8 words of memory at 0x00100000 at the point the BIOS enters the boot loader, and then again at the point the boot loader enters the kernel. Why are they different? What is there at the second breakpoint? (You do not really need to use QEMU to answer this question. Just think.)</p>
</blockquote>
<p>When entering the bootloader, nothing has yet been loaded in <code>0x0010000</code>, so that memory is empty. Then after the bootloader loading the kernel, <code>0x0010000</code> and onwards contain the first several instructions of the kernel.</p>
<h3 id="part3thekernel">Part 3: The Kernel</h3>
<blockquote>
<p><strong>Exercise 7:</strong></p>
<p>Use QEMU and GDB to trace into the JOS kernel and stop at the <code>movl %eax, %cr0</code>. Examine memory at <code>0x00100000</code> and at <code>0xf0100000</code>. Now, single step over that instruction using the stepi GDB command. Again, examine memory at <code>0x00100000</code> and at <code>0xf0100000</code>. Make sure you understand what just happened.</p>
<p>What is the first instruction <em>after</em> the new mapping is established that would fail to work properly if the mapping weren&apos;t in place? Comment out the <code>movl %eax, %cr0</code> in <code>kern/entry.S</code>, trace into it, and see if you were right.</p>
</blockquote>
<p>Prior to enabling paging, <code>0x00100000</code> consists kernel instructions while <code>0xf0100000</code> remains empty. After paging is enabled, virtual addresses in the range <code>0xf0000000</code> through <code>0xf0400000</code> have been translated into physical addresses <code>0x00000000</code> through <code>0x00400000</code>. Thus, <code>0xf0100000</code> points to the same memory as  <code>0x00100000</code>.</p>
<p>If commenting out the instruction enabling paging, the following jump fails:</p>
<pre><code class="language-assembly">mov	$relocated, %eax
jmp	*%eax
</code></pre>
<blockquote>
<p><strong>Exercise 8:</strong></p>
<p>We have omitted a small fragment of code - the code necessary to print octal numbers using patterns of the form &quot;%o&quot;. Find and fill in this code fragment.</p>
<p>Be able to answer the following questions:</p>
<ol>
<li>
<p>Explain the interface between <code>printf.c</code> and <code>console.c</code>. Specifically, what function does <code>console.c</code> export? How is this function used by <code>printf.c</code>?</p>
</li>
<li>
<p>Explain the following from <code>console.c</code>:</p>
<pre><code class="language-c">if (crt_pos &gt;= CRT_SIZE) {
    int i;
    memmove(crt_buf, crt_buf + CRT_COLS, (CRT_SIZE - CRT_COLS) * sizeof(uint16_t));
    for (i = CRT_SIZE - CRT_COLS; i &lt; CRT_SIZE; i++)
        crt_buf[i] = 0x0700 | &apos; &apos;;
    crt_pos -= CRT_COLS;
}
</code></pre>
</li>
<li>
<p>For the following questions you might wish to consult the notes for Lecture 2. These notes cover GCC&apos;s calling convention on the x86.</p>
<p>Trace the execution of the following code step-by-step:</p>
<pre><code class="language-c">int x = 1, y = 3, z = 4;
cprintf(&quot;x %d, y %x, z %d\n&quot;, x, y, z);
</code></pre>
<ul>
<li>In the call to <code>cprintf()</code>, to what does <code>fmt</code> point? To what does <code>ap</code> point?</li>
<li>List (in order of execution) each call to <code>cons_putc</code>, <code>va_arg</code>, and <code>vcprintf</code>. For <code>cons_putc</code>, list its argument as well. For <code>va_arg</code>, list what <code>ap</code> points to before and after the call. For <code>vcprintf</code> list the values of its two arguments.</li>
</ul>
</li>
<li>
<p>Run the following code.</p>
<pre><code class="language-c">unsigned int i = 0x00646c72;
cprintf(&quot;H%x Wo%s&quot;, 57616, &amp;i);
</code></pre>
<p>What is the output? Explain how this output is arrived at in the step-by-step manner of the previous exercise. <a href="http://web.cs.mun.ca/~michael/c/ascii-table.html">Here&apos;s an ASCII table</a> that maps bytes to characters.</p>
<p>The output depends on that fact that the x86 is little-endian. If the x86 were instead big-endian what would you set <code>i</code> to in order to yield the same output? Would you need to change <code>57616</code> to a different value?</p>
<p><a href="http://www.webopedia.com/TERM/b/big_endian.html">Here&apos;s a description of little- and big-endian</a> and <a href="http://www.networksorcery.com/enp/ien/ien137.txt">a more whimsical description</a>.</p>
</li>
<li>
<p>In the following code, what is going to be printed after <code>&apos;y=&apos;</code>? (note: the answer is not a specific value.) Why does this happen?</p>
<pre><code class="language-c">cprintf(&quot;x=%d y=%d&quot;, 3);
</code></pre>
</li>
<li>
<p>Let&apos;s say that GCC changed its calling convention so that it pushed arguments on the stack in declaration order, so that the last argument is pushed last. How would you have to change <code>cprintf</code> or its interface so that it would still be possible to pass it a variable number of arguments?</p>
</li>
</ol>
</blockquote>
<ol>
<li>
<p><code>printf.c</code> and <code>console.c</code> interface via the <code>cputchar()</code> function. <code>printf.c</code> wraps <code>cputchar()</code> with the <code>putch()</code> function that increments the count argument passed in in addition to calling out to <code>cputchar()</code>.<code>cputchar()</code> is responsible for putting a single character to the console and that is also the purpose of <code>putch()</code>.</p>
</li>
<li>
<p>When <code>crt_pos</code> &gt; <code>CRT_SIZE</code>, then the last character written is outside the current display buffer. The loop shifts back the buffer 80 columns, essentially printing a new empty line on the screen.</p>
</li>
<li>
<p><code>fmt</code> points to the format string, namely <code>x %d, y %x, z %d\n</code>, and <code>ap</code> points to a <code>va_list</code>.</p>
</li>
<li>
<p>The output is <code>He110 World</code>. The pointer <code>i</code> points to the sequence of bytes: <code>0x72 0x6c 0x64 0x00</code> and the interpretation of these bytes as characters is <code>rld\0</code>.</p>
<p>If the machine is big endian then the <code>i</code> variable should be changed to <code>0x726c6400</code>. But <code>57616</code> would not need to change since its value fits in one byte.</p>
</li>
<li>
<p>The value should be the 4 bytes on the stack.</p>
</li>
<li>
<p><code>va_start</code>, <code>va_arg</code> and <code>va_end</code> macros need to be changed to decrease the point every time they fetching a new argument from the stack.</p>
</li>
</ol>
<blockquote>
<p><strong>Exercise 9:</strong></p>
<p>Determine where the kernel initializes its stack, and exactly where in memory its stack is located. How does the kernel reserve space for its stack? And at which &quot;end&quot; of this reserved area is the stack pointer initialized to point to?</p>
</blockquote>
<p>Setting up the stack is through the following instructions:</p>
<pre><code class="language-assembly">movl	$0x0,%ebp
movl	$(bootstacktop),%esp
</code></pre>
<p><code>bootstacktop</code> is a label in <code>entry.S</code> to a variable of size <code>KSTKSIZE</code>. (The space is allocated via the assembler <code>.space</code> directive.) <code>$ESP</code> is set to the top (highest address) end of the reserved space, namely <code>0xf0110000</code>. Therefore the stack starts at <code>0xf0110000</code> and ends at <code>0xf0110000</code> - 4 * 4096 = <code>0xf010c000</code>.</p>
<blockquote>
<p><strong>Exercise 10:</strong></p>
<p>To become familiar with the C calling conventions on the x86, find the address of the <code>test_backtrace</code> function in <code>obj/kern/kernel.asm</code>, set a breakpoint there, and examine what happens each time it gets called after the kernel starts. How many 32-bit words does each recursive nesting level of <code>test_backtrace</code> push on the stack, and what are those words?</p>
<p>Note that, for this exercise to work properly, you should be using the patched version of QEMU available on the <a href="https://pdos.csail.mit.edu/6.828/2016/tools.html">tools</a> page or on Athena. Otherwise, you&apos;ll have to manually translate all breakpoint and memory addresses to linear addresses.</p>
</blockquote>
<p>By examing <code>obj/kern/kernel.asm</code>, the following operations change the stack:</p>
<ol>
<li>
<p>According to x86-32 register saving conventions, <code>$ebp</code> is a callee-saved register, and thus it needs to be saved prior to changing its value.</p>
<pre><code class="language-assembly">push %ebp
mov %esp, %ebp
</code></pre>
</li>
<li>
<p>According to x86-32 register saving conventions, <code>$ebx</code> is also a callee-saved register.</p>
<pre><code class="language-assembly">push %ebx
</code></pre>
</li>
<li>
<p>The following instruction reserves the space of <code>0x14</code> bytes to save temporories including the arguments of the callee function.</p>
<pre><code class="language-Assembly">sub $0x14, %esp
</code></pre>
</li>
<li>
<p>When calls to another function, the <code>call</code> instruction implicitly push <code>$eip</code> register on the stack.</p>
<pre><code class="language-assembly">call f01000dd &lt;test_backtrace&gt;
</code></pre>
</li>
</ol>
<p>In summary, words of $4 + 4 + 20 + 4 = 32$ bytes have been pushed on the stack in each recursive nesting call of <code>test_backtrace</code>.</p>
<!--kg-card-end: markdown-->]]></content:encoded></item><item><title><![CDATA[Concurrency Models #0: Introduction]]></title><description><![CDATA[<!--kg-card-begin: markdown--><ol>
<li><a href="https://sxkdz.org/concurrency-models-0-introduction">Concurrency Models #0: Introduction</a></li>
<li><a href="https://sxkdz.org/concurrency-models-1-parallel-algorithms/">Concurrency Models #1: Parallel Algorithms</a></li>
</ol>
<h1 id="preface">Preface</h1>
<p>Concurrency is nothing new, but it becomes one of hottest topics among sub-disciplines of CS nowadays. It is also the key that unlocks responsiveness, fault tolerance, efficiency, and simplicity in a system. Next semester (Fall 2017) I will share some</p>]]></description><link>https://sxkdz.me/concurrency-models-0-introduction/</link><guid isPermaLink="false">60f547237767ec0d683e9ea6</guid><category><![CDATA[Concurrency Models]]></category><category><![CDATA[Programming]]></category><dc:creator><![CDATA[SXKDZ]]></dc:creator><pubDate>Mon, 05 Jun 2017 02:42:00 GMT</pubDate><content:encoded><![CDATA[<!--kg-card-begin: markdown--><ol>
<li><a href="https://sxkdz.org/concurrency-models-0-introduction">Concurrency Models #0: Introduction</a></li>
<li><a href="https://sxkdz.org/concurrency-models-1-parallel-algorithms/">Concurrency Models #1: Parallel Algorithms</a></li>
</ol>
<h1 id="preface">Preface</h1>
<p>Concurrency is nothing new, but it becomes one of hottest topics among sub-disciplines of CS nowadays. It is also the key that unlocks responsiveness, fault tolerance, efficiency, and simplicity in a system. Next semester (Fall 2017) I will share some thoughts on concurrency models in Google Camp, and I plan to write a series of tutorials in my blog simultaneously. Related lecture slides can be found <a href="https://course.sxkdz.org/concurrency/">here</a>.</p>
<p>This series of tutorials will focus mainly on concurrency programming <strong>theories</strong> and <strong>practices</strong>.</p>
<h2 id="prerequisites">Prerequisites</h2>
<p>Code examples will be drawn from a number of programming languages. To make use of a specific concurrency framework, it requires a specific language. Because the theme is about concurrency, there are going to be some aspects of these languages that I will use without explaining in detail. In order to fully understand them, you may required to have basic knowledge of syntax and features of the following programming languages:</p>
<ul>
<li>Java</li>
<li>C++</li>
<li>Clojure (or Haskell)</li>
<li>Elixir (preferred Erlang)</li>
<li>Python</li>
<li>Go</li>
</ul>
<p>Besides, basic knowledge about OS is preferred as well.</p>
<h1 id="topicstobecovered">Topics to be Covered</h1>
<p>I am going to cover some approaches that are already mainstream in the concurrent world, and also reveal knowledge and theory behind them. To be specific, topics below will be discussed sequentially:</p>
<ol>
<li>Parallel Algorithms</li>
<li>Multithreading</li>
<li>Asynchronous Programming</li>
<li>Communicating Sequential Processes</li>
<li>Functional Programming</li>
<li>Actors</li>
<li>The Lambda Architecture</li>
</ol>
<h1 id="concurrencybeyondmultiplecores">Concurrency: Beyond Multiple Cores</h1>
<p>Let&#x2019;s get down to business. The presence of concurrency models originates in what is so called &#x201C;multicore crisis&#x201D;. Multicore crisis is found of the fact that microprocessors have stopped getting faster every 18 months. Instead of gaining faster clock speed, Moore&#x2019;s law continues to deliver more transistors per chip, and thus we have computers with increasingly cores.</p>
<p>The days of waiting for faster hardware is (long) gone. Therefore, to make software systems that perform efficiently, you need to incorporate concurrency into your system designs.</p>
<h2 id="concurrentorparallel">Concurrent or Parallel?</h2>
<p>The most common question to ask is what is the difference between <em>concurrency</em> and <em>parallelism</em>. Actually, they refer to different things, though they are often used interchangeably.</p>
<p>When we execute a program, we create a <em>process</em>. A <em>sequential program</em> has a single thread of control, while a <em>concurrent program</em> has multiple threads of control. A single computer can have multiple processes running at once. If that machine has a single processor, then the illusion of multiple processes running at once is just that: an illusion. Thus, if a machine has more than a single processor, then true <em>parallelism</em> can occur: you can have \(N\) processes running <em>simultaneously</em> on a machine that has \(N\) processors.</p>
<p>In summary:</p>
<ul>
<li>A concurrent program has multiple <em>logical threads of control</em>. These threads may or may not run in parallel.</li>
<li>A parallel program potentially runs more quickly than a sequential program by executing different parts of the computation in parallel. It may or may not have more than one logical thread of control.</li>
</ul>
<p>An alternative way of thinking about it is that concurrency is part of the problem domain&#x2014;multiple events can happen at the same time. Parallelism, by contrast, is an aspect of the solution domain&#x2014;to make programs faster, it is necessary to design a program such that computations occur simultaneously.</p>
<h2 id="featuresofconcurrency">Features of Concurrency</h2>
<p>Concurrency is great more than just exploiting parallelism. As I have said before, concurrency is the key that unlocks responsiveness, fault tolerance, efficiency, and simplicity in a system.</p>
<h3 id="responsiveness">Responsiveness</h3>
<p>Concurrency is the key to responsive systems. Responsiveness becomes a more and more indispensable quantity of a software. Basically, it means that we do not block waiting for a  time-consuming task, such as the I/O operation. In the server side, concurrency enables a web server handling requests from enormous clients, and guarantees that a single slow request does not hold up others. In the client side, the main/GUI thread of the process will not be blocked and should be free to handle user events.</p>
<h3 id="efficiency">Efficiency</h3>
<p>The concept of efficiency for concurrency can be characterized both in terms of probability and in terms of time. A process is more efficient than others if it is able to perform certain computations with a greater probability or by taking a lesser time. Concurrency brings efficiency because it utilizes the computational resources of the system.</p>
<p>When we talk about efficiency, we are not just dealing with speed. Efficiency should also weigh the CPU and memory overhead and the cost to ensure data consistency. For example, if an application benefits from concurrency but require an elaborate and computationally expensive process to ensure data consistency, then the entire strategy should be evaluated again.</p>
<h3 id="faulttolerance">Fault Tolerance</h3>
<p>Concurrency enables resilient, or fault-tolerant, through <em>independence</em> and <em>fault detection</em>. Independence is important because a failure in one task should not be able to bring down another, and also a power outage at one site should not result in global downtime. And fault detection is critical so that when a task fails, a separate task is notified so that it can take remedial action. As comparison, sequential software can never be as resilient as concurrent software.</p>
<h3 id="simplicity">Simplicity</h3>
<p>It is quite controversial for programmers that concurrency brings simplicity to programs, especially for those who suffer from debugging multithreaded programs. Generally, the sequential expression is considered to be simple and reliable, whereas the expression of concurrency is perceived to be complex, <em>non-deterministic</em> and difficult. However, the perception of the simplicity of sequentiality and the complexity of concurrency is an illusion. When written in the right language with the right tools, a concurrent solution is usually simpler and clearer than its sequential equivalent version.</p>
<h1 id="whyworryaboutconcurrency">Why Worry about Concurrency?</h1>
<p>&#x201C;Concurrency is hard and I have only ever needed single-threaded programs. Why should I care<br>
about it?&#x201D; A newbie always argues that. However, we cannot indulge in such fantasy.</p>
<p>With the frequent changing environment, multicore computers and clusters are on the rise to fulfill the needs. And growth rates for chip clock speed are flat, thus you can not wait for another 18 months for a twice speed-up anymore. Instead, the chips are going to be wider: more cores, wider memory bus, more memory. Under such circumstances, a single-threaded application is not going to see any significant performance gains from new devices. In contrast, software will only see performance gains if it is designed to do more work in parallel, as the number of available processors increase. So, the application&#x2019;s computations must be amenable to parallelization. It must be possible to break its work into tasks that can run at the same time with no need to coordinate with each other.</p>
<p>Moreover, concurrent programming is becoming hard to ignore. Lots of application domains in which concurrency is the norm.</p>
<h2 id="drawbacksofconcurrency">Drawbacks of Concurrency</h2>
<p>While concurrency is widespread, it is error prone. Programmer strained for single-threaded programming face unfamiliar problems, such as synchronization, race conditions, deadlocks and &#x201C;memory barriers&#x201D;.</p>
<h1 id="parallelarchitecture">Parallel Architecture</h1>
<p>Within one single machine, there are many tiers of parallelism.</p>
<ul>
<li>Bit-Level Parallelism: The history of computing moves from 8- to 16-, 32-, and now 64-bit architectures. A 64-bit computer can process 32-bit numbers faster than a 16-bit computer.</li>
<li>Instruction-Level Parallelism: Modern CPUs are highly parallel, using techniques like <em>pipelining</em>, <em>out-of-order execution</em>, and <em>speculative execution</em>. Those techniques will have a profound impact on the behaviors of programs.</li>
<li>Data Parallelism: <em>Data-parallel</em> (SIMD, for &#x201C;single instruction, multiple data&#x201D;) architectures are capable of performing the same operations on a large quantity of data in parallel. For instance, GPUs can process lots of data in parallel with a single instruction.</li>
<li>Task-Level Parallelism: The architecture of multiple processors lets multiple threads of control execute simultaneously.</li>
</ul>
<h2 id="softwarearchitecturedesignchoices">Software Architecture Design Choices</h2>
<p>When designing a modern application, we now have to ask:</p>
<ul>
<li>How many machines are involved?</li>
<li>What software components will be deployed on each machine?</li>
<li>For each component, does it need concurrency? If so, how will we achieve that concurrency? Via multiple threads, multiple processes or both?</li>
</ul>
<h2 id="casestudygooglechrome">Case Study: Google Chrome</h2>
<p>Google Chrome is now a popular web browser, who has one process per tab (multi-process) and multiple threads handling loading of content within each tab (multi-threaded).</p>
<p>Some advantages of such a design involve stability, speed and security.</p>
<ul>
<li>Stability: Single-process, multi-threaded browsers are vulnerable to having a crash in one tab bring down the entire browser.</li>
<li>Speed: Multi-process browsers can be more responsive due to OS support.</li>
<li>Security: Exploits in single-process browsers are easier if malware loaded in one tab can grab information contained in another tab. It is much harder to grab information across processes.</li>
</ul>
<h1 id="references">References</h1>
<ul>
<li>Paul Butcher: <em>Seven Concurrency Models in Seven Weeks</em>. The Pragmatic Programmers, LLC. 2014.7.</li>
</ul>
<p><em>Slides accompanying with this section can be found <a href="https://course.sxkdz.org/concurrency/Lec0.pdf">here</a>.</em></p>
<!--kg-card-end: markdown-->]]></content:encoded></item><item><title><![CDATA[20岁：Live Up to Myself]]></title><description><![CDATA[<!--kg-card-begin: markdown--><p>&#x8DCC;&#x8DCC;&#x649E;&#x649E;&#x5730;&#x8D70;&#x8FDB;&#x4E86;&#x4EBA;&#x751F;&#x7684;&#x7B2C;20&#x4E2A;&#x5E74;&#x5934;&#xFF0C;&#x5728;&#x540C;&#x6D4E;&#x5927;&#x5B66;&#x7684;&#x65F6;&#x5149;&#x4E5F;&#x5DF2;&#x7ECF;&#x8FC7;&#x53BB;&#x4E86;&#x5FEB;&#x4E24;&#x5E74;&#xFF0C;&#x7EC8;&#x4E8E;&#x53EF;&#x4EE5;&#x4E0D;&#x90A3;&#x4E48;&#x539A;&#x7740;&#x8138;&#x76AE;&#x5730;&#x8BF4;&#xFF0C;&#x6211;</p>]]></description><link>https://sxkdz.me/live-up-to-myself/</link><guid isPermaLink="false">60f547237767ec0d683e9ea5</guid><category><![CDATA[Life]]></category><dc:creator><![CDATA[SXKDZ]]></dc:creator><pubDate>Sun, 21 May 2017 16:00:00 GMT</pubDate><content:encoded><![CDATA[<!--kg-card-begin: markdown--><p>&#x8DCC;&#x8DCC;&#x649E;&#x649E;&#x5730;&#x8D70;&#x8FDB;&#x4E86;&#x4EBA;&#x751F;&#x7684;&#x7B2C;20&#x4E2A;&#x5E74;&#x5934;&#xFF0C;&#x5728;&#x540C;&#x6D4E;&#x5927;&#x5B66;&#x7684;&#x65F6;&#x5149;&#x4E5F;&#x5DF2;&#x7ECF;&#x8FC7;&#x53BB;&#x4E86;&#x5FEB;&#x4E24;&#x5E74;&#xFF0C;&#x7EC8;&#x4E8E;&#x53EF;&#x4EE5;&#x4E0D;&#x90A3;&#x4E48;&#x539A;&#x7740;&#x8138;&#x76AE;&#x5730;&#x8BF4;&#xFF0C;&#x6211;&#x4E5F;&#x8981;&#x8FDB;&#x5165;&#x4E00;&#x6BB5;&#x5D2D;&#x65B0;&#x7684;&#x751F;&#x6D3B;&#x4E86;&#x3002;</p>
<p>&#x8FC7;&#x53BB;&#x7684;&#x4E00;&#x5E74;&#x91CC;&#xFF0C;&#x65F6;&#x5E38;&#x601D;&#x8003;&#x81EA;&#x5DF1;&#x7684;&#x672A;&#x6765;&#x548C;&#x65B9;&#x5411;&#xFF0C;&#x5374;&#x4E8B;&#x5B9E;&#x4E0A;&#x6D6A;&#x8D39;&#x4E86;&#x5927;&#x628A;&#x7684;&#x65F6;&#x5149;&#xFF0C;&#x4E5F;&#x8BB8;&#x56E0;&#x4E3A;&#x662F;&#x5026;&#x6020;&#xFF0C;&#x4E5F;&#x8BB8;&#x662F;&#x6B20;&#x7F3A;&#x6DF1;&#x523B;&#x7684;&#x81EA;&#x7701;&#xFF0C;&#x603B;&#x4E4B;&#x56E0;&#x4E3A;&#x79CD;&#x79CD;&#x539F;&#x56E0;&#x5E76;&#x6CA1;&#x6709;&#x505A;&#x5230;&#x5F53;&#x521D;&#x8BBE;&#x60F3;&#x7684;&#x6700;&#x597D;&#x3002;&#x8BB0;&#x5F97;&#x5728;&#x6211;20&#x5C81;&#x751F;&#x65E5;&#x5373;&#x5C06;&#x5230;&#x6765;&#x7684;&#x665A;&#x4E0A;&#xFF0C;&#x6211;&#x8981;&#x505A;&#x70B9;&#x4EC0;&#x4E48;&#x3001;&#x5199;&#x70B9;&#x4EC0;&#x4E48;&#xFF0C;&#x7ED3;&#x679C;&#x4E00;&#x76F4;&#x62D6;&#x5230;&#x4E86;&#x73B0;&#x5728;&#x3002;&#x6211;&#x8FD8;&#x8BB0;&#x5F97;&#x8BB8;&#x4E0B;&#x7684;&#x613F;&#x671B;&#xFF0C;&#x56E0;&#x4E3A;&#x603B;&#x662F;&#x64CD;&#x4E00;&#x4E9B;&#x95F2;&#x5FC3;&#xFF0C;&#x5E0C;&#x671B;20&#x5C81;&#x4EE5;&#x540E;&#x8981;&#x7559;&#x66F4;&#x591A;&#x7684;&#x65F6;&#x95F4;&#x7ED9;&#x81EA;&#x5DF1;&#x3002;&#x90A3;&#x4E48;&#xFF0C;&#x660E;&#x786E;&#x4E86;&#x81EA;&#x5DF1;&#x7684;&#x65B9;&#x5411;&#xFF0C;&#x5C31;&#x575A;&#x5B9A;&#x5730;&#x8D70;&#x4E0B;&#x53BB;&#x3002;</p>
<p>&#x968F;&#x7740;&#x5E74;&#x5C81;&#x589E;&#x957F;&#xFF0C;&#x611F;&#x89C9;&#x5230;&#x81EA;&#x5DF1;&#x7684;&#x5F3A;&#x8FEB;&#x75C7;&#x548C;&#x5B8C;&#x7F8E;&#x4E3B;&#x4E49;&#x4E00;&#x76F4;&#x5728;&#x52A0;&#x5267;&#x3002;&#x4E0D;&#x77E5;&#x9053;&#x662F;&#x4E0D;&#x662F;&#x56E0;&#x4E3A;&#x5FC3;&#x6709;&#x4E0D;&#x7518;&#xFF0C;&#x4F46;&#x662F;&#x4E8B;&#x5B9E;&#x7684;&#x786E;&#x662F;&#x8FD9;&#x6837;&#x4E86;&#xFF0C;&#x4E5F;&#x7ECF;&#x5E38;&#x7ED9;&#x56E2;&#x961F;&#x5DE5;&#x4F5C;&#x5E26;&#x6765;&#x4E00;&#x4E9B;&#x4E0D;&#x6109;&#x5FEB;&#x3002;Siri &#x5012;&#x662F;&#x8C03;&#x4F83;&#x201C;SXKDZ &#x51FA;&#x54C1;&#xFF0C;&#x5FC5;&#x5C5E;&#x6781;&#x54C1;&#x201D;&#xFF0C;&#x53C8;&#x60F3;&#x4E86;&#x4E00;&#x4E0B;&#xFF0C;&#x597D;&#x50CF;&#x4E5F;&#x6CA1;&#x4EC0;&#x4E48;&#x4E0D;&#x5BF9;&#x3002;&#x6240;&#x4EE5;&#xFF0C;&#x5C31;&#x7EE7;&#x7EED;&#x575A;&#x6301;&#x5427;&#xFF01;&#x53EA;&#x8981;&#x4ED8;&#x51FA;&#x65F6;&#x95F4;&#x548C;&#x5FC3;&#x8840;&#x7684;&#x4E8B;&#x60C5;&#xFF0C;&#x90FD;&#x8981;&#x5C3D;&#x5168;&#x529B;&#x505A;&#x5230;&#x6700;&#x597D;&#x3002;</p>
<p>&#x5728;&#x65B0;&#x7684;&#x4E00;&#x5E74;&#x91CC;&#xFF0C;&#x6211;&#x4E5F;&#x6253;&#x7B97;&#x5F00;&#x59CB;&#x6211;&#x7684;&#x5B66;&#x672F;&#x4E4B;&#x65C5;&#x3002;&#x4E0A;&#x6B21;&#x6BDB;&#x54E5;&#x5BFC;&#x5E08;&#x6765;&#x7684;&#x65F6;&#x5019;&#x4ECB;&#x7ECD;&#x4E86;&#x4EBA;&#x751F;&#x8D62;&#x5BB6;&#x4EEC;&#x7684;&#x6545;&#x4E8B;&#xFF0C;&#x4E5F;&#x8BB8;&#x5BF9;&#x6211;&#x800C;&#x8A00;&#x6682;&#x65F6;&#x662F;&#x9065;&#x4E0D;&#x53EF;&#x53CA;&#x7684;&#x68A6;&#x60F3;&#xFF08;&#x5185;&#x5FC3;&#x8FD8;&#x662F;&#x5E76;&#x4E0D;&#x5E0C;&#x671B;&#x592A;&#x65E9;&#x8FDB;&#x5165;&#x5DE5;&#x4E1A;&#x754C;&#x5427;&#x2026;&#x2026;&#xFF09;&#xFF0C;&#x4F46;&#x662F;&#x4E0D;&#x7BA1;&#x51FA;&#x4E8E;&#x51FA;&#x56FD;&#x7533;&#x8BF7;&#x7684;&#x538B;&#x529B;&#x8FD8;&#x662F;&#x62D3;&#x5BBD;&#x77E5;&#x8BC6;&#x9762;&#x7684;&#x9700;&#x6C42;&#xFF0C;&#x79D1;&#x7814;&#x5B66;&#x672F;&#x4E4B;&#x8DEF;&#x90FD;&#x8981;&#x5F00;&#x59CB;&#x8D70;&#x4E0B;&#x53BB;&#x3002;&#x795D;&#x6211;&#x597D;&#x8FD0;&#x3002;</p>
<p>&#x5728;&#x6211;&#x5373;&#x5C06;20&#x5C81;&#x9AD8;&#x9F84;&#x7684;&#x65F6;&#x5019;&#xFF0C;&#x6211;&#x60F3;&#x795D;&#x613F;&#x81EA;&#x5DF1;&#xFF1A;</p>
<ol>
<li>&#x8BA9;&#x81EA;&#x5DF1;&#x8FC7;&#x5F97;&#x5F00;&#x5FC3;&#xFF1B;</li>
<li>&#x4E0D;&#x8352;&#x5E9F;&#x65F6;&#x5149;&#xFF1B;</li>
<li>&#x8EAB;&#x4F53;&#x5065;&#x5EB7;&#x3002;</li>
</ol>
<p>&#x611F;&#x8C22;&#x4E00;&#x8DEF;&#x4EE5;&#x6765;&#x9ED8;&#x9ED8;&#x5173;&#x5FC3;&#x3001;&#x652F;&#x6301;&#x6211;&#x7684;&#x4EBA;&#x4EEC;&#x3002;&#x8C22;&#x8C22;&#x4F60;&#x4EEC;&#x3002;&#x201C;&#x4F46;&#x884C;&#x597D;&#x4E8B;&#xFF0C;&#x83AB;&#x95EE;&#x524D;&#x7A0B;&#x201D;&#x3002;&#x5E0C;&#x671B;&#x6211;&#x80FD;&#x5C3D;&#x5168;&#x529B;&#xFF0C;&#x505A;&#x5230;&#x6700;&#x597D;&#x3002;</p>
<p><a href="https://sxkdz.org/about-me/">SXKDZ</a></p>
<p>2017.5.22</p>
<!--kg-card-end: markdown-->]]></content:encoded></item><item><title><![CDATA[One Historical Story]]></title><description><![CDATA[<!--kg-card-begin: markdown--><p>As recently as the 1980s, it was normal for &quot;real-world&quot; programmers to laugh at the idea of structured programming languages with such arcane features as &quot;while&quot; loops, as opposed to the jump instructions of assembly languages. How could a program written in a structured language possibly</p>]]></description><link>https://sxkdz.me/one-historical-story/</link><guid isPermaLink="false">60f547237767ec0d683e9ea4</guid><category><![CDATA[Programming]]></category><category><![CDATA[Historical Story]]></category><dc:creator><![CDATA[SXKDZ]]></dc:creator><pubDate>Wed, 26 Apr 2017 08:39:27 GMT</pubDate><content:encoded><![CDATA[<!--kg-card-begin: markdown--><p>As recently as the 1980s, it was normal for &quot;real-world&quot; programmers to laugh at the idea of structured programming languages with such arcane features as &quot;while&quot; loops, as opposed to the jump instructions of assembly languages. How could a program written in a structured language possibly perform well enough, compared to hand-written assembly language? Those crazy academics are at it again, with their nutty theories. Of course, today the abstraction of structured control flow is ubiquitous. Data abstraction was another that seemed esoteric at first but has become completely standard now. Serious programmers today will laugh at anyone who uniformly writes off these techniques that seemed like theoretical distractions in 1980.</p>
<p>&#x5F53;&#x65F6;&#x95F4;&#x5012;&#x8F6C;&#x5230;&#x4E0A;&#x4E16;&#x7EAA;80&#x5E74;&#x4EE3;&#xFF0C;&#x5BF9;&#x4E8E;&#x201C;&#x771F;&#x5B9E;&#x4E16;&#x754C;&#x201D;&#x7684;&#x7A0B;&#x5E8F;&#x5458;&#x6765;&#x8BF4;&#xFF0C;&#x5632;&#x7B11;&#x6709;&#x7740;&#x50CF;&#x201C;while&#x201D;&#x5FAA;&#x73AF;&#x90A3;&#x6837;&#x6666;&#x6DA9;&#x96BE;&#x61C2;&#x6982;&#x5FF5;&#x7684;&#x7ED3;&#x6784;&#x5316;&#x7A0B;&#x5E8F;&#x8BBE;&#x8BA1;&#x8BED;&#x8A00;&#x662F;&#x518D;&#x6B63;&#x5E38;&#x4E0D;&#x8FC7;&#x7684;&#x4E8B;&#x4E86;&#x3002;&#x4E0E;&#x624B;&#x5199;&#x7684;&#x6C47;&#x7F16;&#x8BED;&#x8A00;&#x76F8;&#x6BD4;&#xFF0C;&#x7528;&#x4E00;&#x79CD;&#x7ED3;&#x6784;&#x5316;&#x8BED;&#x8A00;&#x5199;&#x51FA;&#x7684;&#x7A0B;&#x5E8F;&#x6709;&#x53EF;&#x80FD;&#x8868;&#x73B0;&#x66F4;&#x52A0;&#x4F18;&#x5F02;&#x5417;&#xFF1F;&#x90A3;&#x4E9B;&#x75AF;&#x72C2;&#x7684;&#x5B66;&#x8005;&#x518D;&#x4E00;&#x6B21;&#x575A;&#x6301;&#x4ED6;&#x4EEC;&#x602A;&#x5F02;&#x7684;&#x7406;&#x8BBA;&#x3002;&#x5F53;&#x7136;&#xFF0C;&#x4ECA;&#x5929;&#x5BF9;&#x7ED3;&#x6784;&#x5316;&#x63A7;&#x5236;&#x8BED;&#x53E5;&#x7684;&#x62BD;&#x8C61;&#x65E0;&#x5904;&#x4E0D;&#x5728;&#x3002;&#x6570;&#x636E;&#x62BD;&#x8C61;&#x662F;&#x53E6;&#x5916;&#x4E00;&#x4E2A;&#x5728;&#x6700;&#x521D;&#x770B;&#x4E0A;&#x53BB;&#x96BE;&#x4EE5;&#x7406;&#x89E3;&#xFF0C;&#x4F46;&#x73B0;&#x5728;&#x5DF2;&#x7ECF;&#x6210;&#x4E3A;&#x666E;&#x904D;&#x6807;&#x51C6;&#x7684;&#x4F8B;&#x5B50;&#x3002;&#x4E25;&#x8083;&#x7684;&#x7A0B;&#x5E8F;&#x5458;&#x5728;&#x5F53;&#x4E0B;&#x4F1A;&#x6BEB;&#x4E0D;&#x7559;&#x60C5;&#x7684;&#x5632;&#x7B11;&#x90A3;&#x4E9B;&#x59CB;&#x7EC8;&#x575A;&#x6301;&#x5BF9;1980&#x5E74;&#x4EE3;&#x88AB;&#x89C6;&#x4E3A;&#x7406;&#x8BBA;&#x4E0A;&#x4E0D;&#x52A1;&#x6B63;&#x4E1A;&#x7684;&#x6280;&#x5DE7;&#x89C6;&#x800C;&#x4E0D;&#x89C1;&#x7684;&#x4EBA;&#x4EEC;&#x4E86;&#x3002;</p>
<p>Thanks: Foreverbell</p>
<!--kg-card-end: markdown-->]]></content:encoded></item><item><title><![CDATA[Presentation: Going Computational Thinking]]></title><description><![CDATA[<!--kg-card-begin: markdown--><p>This week, I presented a speech on the going computational thinking. This will be the last general-purpose presentation I held in undergraduate school.</p>
<p>I still remember that when I was in the primary school, I was the student who always remained silent. Until the middle stage of junior high school,</p>]]></description><link>https://sxkdz.me/presentation-going-computational-thinking/</link><guid isPermaLink="false">60f547237767ec0d683e9ea3</guid><category><![CDATA[Presentation]]></category><category><![CDATA[Programming]]></category><dc:creator><![CDATA[SXKDZ]]></dc:creator><pubDate>Thu, 20 Apr 2017 06:01:01 GMT</pubDate><content:encoded><![CDATA[<!--kg-card-begin: markdown--><p>This week, I presented a speech on the going computational thinking. This will be the last general-purpose presentation I held in undergraduate school.</p>
<p>I still remember that when I was in the primary school, I was the student who always remained silent. Until the middle stage of junior high school, I was able to convince myself to give a public speech. When I prepare a speech, I always write down verbatim speech script, and carry them together with me when I stand on the platform, in case that I will forget what to say. Nevertheless, this time I dare to say, I performed a good job without such a speech draft.</p>
<p>Life is changing progressively. Big data, machine leaning, artificial intelligence, virtual reality and so many computational techniques are bringing comprehensive changes to our daily life.</p>
<p>As I said in the beginning of the presentation, everyone in this digital world needs to update himself / herself iteratively.</p>
<blockquote>
<p>No matter what industry you are in, <strong>computing is ubiquitous</strong>.</p>
<p>Computational thinking is like mathematical thinking, to help you <strong>better understand the digital world</strong>.</p>
<p>In the era of digital economy, do you want to be <strong>a consumer</strong> or <strong>a creator</strong>?</p>
</blockquote>
<p>One way to iterate ourselves is to learn computational thinking and understand programming. So that, everyone can become the creator of the digital age, and even the leader.</p>
<p>Here are the presentation slides:</p>
<p><img src="/content/images/2017/04/Computational_Thinking_1.png" alt loading="lazy"><br>
<img src="/content/images/2017/04/Computational_Thinking_2.png" alt loading="lazy"><br>
<img src="/content/images/2017/04/Computational_Thinking_3.png" alt loading="lazy"><br>
<img src="/content/images/2017/04/Computational_Thinking_4.png" alt loading="lazy"><br>
<img src="/content/images/2017/04/Computational_Thinking_5.png" alt loading="lazy"><br>
<img src="/content/images/2017/04/Computational_Thinking_6.png" alt loading="lazy"><br>
<img src="/content/images/2017/04/Computational_Thinking_7.png" alt loading="lazy"><br>
<img src="/content/images/2017/04/Computational_Thinking_8.png" alt loading="lazy"><br>
<img src="/content/images/2017/04/Computational_Thinking_9.png" alt loading="lazy"><br>
<img src="/content/images/2017/04/Computational_Thinking_10.png" alt loading="lazy"><br>
<img src="/content/images/2017/04/Computational_Thinking_11.png" alt loading="lazy"><br>
<img src="/content/images/2017/04/Computational_Thinking_12.png" alt loading="lazy"><br>
<img src="/content/images/2017/04/Computational_Thinking_13.png" alt loading="lazy"><br>
<img src="/content/images/2017/04/Computational_Thinking_14.png" alt loading="lazy"><br>
<img src="/content/images/2017/04/Computational_Thinking_15.png" alt loading="lazy"><br>
<img src="/content/images/2017/04/Computational_Thinking_16.png" alt loading="lazy"><br>
<img src="/content/images/2017/04/Computational_Thinking_17.png" alt loading="lazy"><br>
<img src="/content/images/2017/04/Computational_Thinking_18.png" alt loading="lazy"><br>
<img src="/content/images/2017/04/Computational_Thinking_19.png" alt loading="lazy"><br>
<img src="/content/images/2017/04/Computational_Thinking_20.png" alt loading="lazy"><br>
<img src="/content/images/2017/04/Computational_Thinking_21.png" alt loading="lazy"><br>
<img src="/content/images/2017/04/Computational_Thinking_22.png" alt loading="lazy"><br>
<img src="/content/images/2017/04/Computational_Thinking_23.png" alt loading="lazy"><br>
<img src="/content/images/2017/04/Computational_Thinking_24.png" alt loading="lazy"><br>
<img src="/content/images/2017/04/Computational_Thinking_25.png" alt loading="lazy"><br>
<img src="/content/images/2017/04/Computational_Thinking_26.png" alt loading="lazy"><br>
<img src="/content/images/2017/04/Computational_Thinking_27.png" alt loading="lazy"><br>
<img src="/content/images/2017/04/Computational_Thinking_28.png" alt loading="lazy"><br>
<img src="/content/images/2017/04/Computational_Thinking_29.png" alt loading="lazy"><br>
<img src="/content/images/2017/04/Computational_Thinking_30.png" alt loading="lazy"><br>
<img src="/content/images/2017/04/Computational_Thinking_31.png" alt loading="lazy"><br>
<img src="/content/images/2017/04/Computational_Thinking_32.png" alt loading="lazy"><br>
<img src="/content/images/2017/04/Computational_Thinking_33.png" alt loading="lazy"><br>
<img src="/content/images/2017/04/Computational_Thinking_34.png" alt loading="lazy"><br>
<img src="/content/images/2017/04/Computational_Thinking_35.png" alt loading="lazy"><br>
<img src="/content/images/2017/04/Computational_Thinking_36.png" alt loading="lazy"><br>
<img src="/content/images/2017/04/Computational_Thinking_37.png" alt loading="lazy"><br>
<img src="/content/images/2017/04/Computational_Thinking_38.png" alt loading="lazy"><br>
<img src="/content/images/2017/04/Computational_Thinking_39.png" alt loading="lazy"><br>
<img src="/content/images/2017/04/Computational_Thinking_40.png" alt loading="lazy"><br>
<img src="/content/images/2017/04/Computational_Thinking_41.png" alt loading="lazy"><br>
<img src="/content/images/2017/04/Computational_Thinking_42.png" alt loading="lazy"><br>
<img src="/content/images/2017/04/Computational_Thinking_43.png" alt loading="lazy"><br>
<img src="/content/images/2017/04/Computational_Thinking_44.png" alt loading="lazy"><br>
<img src="/content/images/2017/04/Computational_Thinking_45.png" alt loading="lazy"></p>
<!--kg-card-end: markdown-->]]></content:encoded></item><item><title><![CDATA[写在2016年的年末]]></title><description><![CDATA[<!--kg-card-begin: markdown--><p>&#x5982;&#x738B;&#x5C0F;&#x6CE2;&#x6240;&#x8A00;&#xFF0C;&#x751F;&#x6D3B;&#x53D8;&#x5F97;&#x8D8A;&#x6765;&#x8D8A;&#x5E73;&#x6DE1;&#xFF0C;&#x4EE5;&#x524D;&#x7684;&#x7ECF;&#x5386;&#x80FD;&#x5199;&#x6210;&#x539A;&#x539A;&#x4E00;&#x672C;&#x4E66;&#xFF0C;&#x73B0;&#x5728;&#x53EA;&#x662F;&#x8584;&#x8584;&#x51E0;&#x9875;&#x7EB8;&#x3002;&#x56DE;&#x987E;&#x8FC7;&#x53BB;&#x4E00;&#x5E74;&#x7684;&#x751F;&#x6D3B;</p>]]></description><link>https://sxkdz.me/written-at-the-end-of-2016/</link><guid isPermaLink="false">60f547237767ec0d683e9ea1</guid><category><![CDATA[Life]]></category><category><![CDATA[Year-end Summary]]></category><dc:creator><![CDATA[SXKDZ]]></dc:creator><pubDate>Tue, 20 Dec 2016 05:38:00 GMT</pubDate><media:content url="https://sxkdz.me/content/images/2016/12/Library.jpg" medium="image"/><content:encoded><![CDATA[<!--kg-card-begin: markdown--><img src="https://sxkdz.me/content/images/2016/12/Library.jpg" alt="&#x5199;&#x5728;2016&#x5E74;&#x7684;&#x5E74;&#x672B;"><p>&#x5982;&#x738B;&#x5C0F;&#x6CE2;&#x6240;&#x8A00;&#xFF0C;&#x751F;&#x6D3B;&#x53D8;&#x5F97;&#x8D8A;&#x6765;&#x8D8A;&#x5E73;&#x6DE1;&#xFF0C;&#x4EE5;&#x524D;&#x7684;&#x7ECF;&#x5386;&#x80FD;&#x5199;&#x6210;&#x539A;&#x539A;&#x4E00;&#x672C;&#x4E66;&#xFF0C;&#x73B0;&#x5728;&#x53EA;&#x662F;&#x8584;&#x8584;&#x51E0;&#x9875;&#x7EB8;&#x3002;&#x56DE;&#x987E;&#x8FC7;&#x53BB;&#x4E00;&#x5E74;&#x7684;&#x751F;&#x6D3B;&#xFF0C;&#x5BE5;&#x5BE5;&#x51E0;&#x7B14;&#x4FBF;&#x80FD;&#x6982;&#x62EC;&#xFF0C;&#x8BFB;&#x4E66;&#x3001;&#x5B66;&#x4E60;&#x3002;&#x9057;&#x61BE;&#x7684;&#x662F;&#xFF0C;&#x8FD9;&#x4E24;&#x4EF6;&#x4E8B;&#x60C5;&#x5728;&#x8FC7;&#x53BB;&#x4E00;&#x5E74;&#x4E2D;&#x5360;&#x7684;&#x65F6;&#x95F4;&#x5E76;&#x4E0D;&#x591A;&#xFF0C;&#x5269;&#x4E0B;&#x7684;&#x65F6;&#x95F4;&#x53EF;&#x4EE5;&#x8BF4;&#x90FD;&#x88AB;&#x6D6A;&#x8D39;&#x6389;&#x4E86;&#x3002;&#x8FD9;&#x6837;&#x4E00;&#x60F3;&#xFF0C;&#x4E0D;&#x514D;&#x89C9;&#x5F97;&#x53EF;&#x60DC;&#x3002;</p>
<p>&#x5728;&#x8FC7;&#x53BB;&#x7684;&#x4E00;&#x5E74;&#x91CC;&#xFF0C;&#x4E5F;&#x4E0D;&#x80FD;&#x8BF4;&#x5B8C;&#x5168;&#x6CA1;&#x6709;&#x6536;&#x83B7;&#x3002;&#x4ECE;&#x8FD9;&#x4E00;&#x5E74;&#x4E2D;&#x7ECF;&#x5386;&#x7684;&#x8BB8;&#x591A;&#x4E8B;&#x60C5;&#x6765;&#x770B;&#xFF0C;&#x6BCF;&#x4E2A;&#x4EBA;&#x90FD;&#x6709;&#x7740;&#x4E0D;&#x4E00;&#x6837;&#x7684;&#x8FFD;&#x6C42;&#x548C;&#x9009;&#x62E9;&#xFF0C;&#x5C11;&#x4E9B;&#x4E0D;&#x5FC5;&#x8981;&#x7684;&#x4E89;&#x8BBA;&#x80FD;&#x8BA9;&#x751F;&#x6D3B;&#x53D8;&#x5F97;&#x5FEB;&#x4E50;&#x8BB8;&#x591A;&#x3002;&#x5BF9;&#x4E8E;&#x6211;&#x81EA;&#x5DF1;&#x6765;&#x8BF4;&#xFF0C;&#x660E;&#x767D;&#x81EA;&#x5DF1;&#x80FD;&#x529B;&#x548C;&#x5174;&#x8DA3;&#x6240;&#x5728;&#xFF0C;&#x662F;&#x4E00;&#x4EF6;&#x75DB;&#x82E6;&#x4F46;&#x662F;&#x975E;&#x5E38;&#x6709;&#x610F;&#x4E49;&#x7684;&#x4E8B;&#x60C5;&#x3002;&#x5C0F;&#x7684;&#x65F6;&#x5019;&#x603B;&#x89C9;&#x5F97;&#x80FD;&#x591F;&#x6210;&#x4E3A;&#x79D2;&#x5929;&#x79D2;&#x5730;&#x79D2;&#x4E00;&#x5207;&#x7684;&#x65E0;&#x654C;&#x5C11;&#x5E74;&#xFF0C;&#x6240;&#x4EE5;&#x5BF9;&#x4EC0;&#x4E48;&#x4E8B;&#x60C5;&#x90FD;&#x6709;&#x7740;&#x504F;&#x6267;&#x7684;&#x8FFD;&#x6C42;&#xFF0C;&#x5F53;&#x7136;&#x7ED3;&#x5C40;&#x5F80;&#x5F80;&#x4E0D;&#x80FD;&#x5982;&#x613F;&#xFF0C;&#x6700;&#x540E;&#x8FD8;&#x8981;&#x4E3A;&#x6B64;&#x4F24;&#x611F;&#x4E0D;&#x5C11;&#x3002;&#x73B0;&#x5728;&#x6162;&#x6162;&#x957F;&#x5927;&#x4E86;&#xFF0C;&#x50CF;&#x97E9;&#x5BD2;&#x8BF4;&#x7684;&#x90A3;&#x6837;&#xFF0C;&#x6211;&#x5728;&#x67D0;&#x4E00;&#x65B9;&#x9762;&#x7684;&#x6781;&#x9650;&#x53EA;&#x662F;&#x522B;&#x4EBA;&#x7684;&#x8D77;&#x70B9;&#x3002;</p>
<p>&#x8FD9;&#x5F53;&#x7136;&#x4E0D;&#x610F;&#x5473;&#x7740;&#x653E;&#x5F03;&#x3002;&#x6211;&#x5728;&#x8FC7;&#x53BB;&#x4E00;&#x5E74;&#x4E2D;&#x5B66;&#x5230;&#x7684;&#x53E6;&#x5916;&#x4E00;&#x70B9;&#x662F;&#xFF0C;&#x52AA;&#x529B;&#x7684;&#x7EC8;&#x70B9;&#x5F80;&#x5F80;&#x5E94;&#x8BE5;&#x6BD4;&#x8BBE;&#x60F3;&#x4E2D;&#x7684;&#x66F4;&#x8FDC;&#x4E00;&#x4E9B;&#x3002;&#x8BF4;&#x6765;&#xFF0C;&#x8FD9;&#x662F;&#x6211;&#x4E4B;&#x524D;&#x55E4;&#x4E4B;&#x4EE5;&#x9F3B;&#x7684;&#x9E21;&#x6C64;&#xFF0C;&#x4F46;&#x662F;&#x53D1;&#x73B0;&#xFF0C;&#x4E8B;&#x60C5;&#x8FD8;&#x771F;&#x7684;&#x662F;&#x8FD9;&#x6837;&#x3002;&#x5982;&#x679C;&#x62B1;&#x7740;&#x8003;&#x4E2A;&#x201C;&#x826F;&#x201D;&#x7684;&#x60F3;&#x6CD5;&#x53BB;&#x8003;&#x9AD8;&#x6570;&#x6216;&#x8005;&#x5927;&#x7269;&#xFF0C;&#x6700;&#x540E;&#x4E00;&#x5B9A;&#x53EA;&#x6709;&#x201C;&#x4E2D;&#x201D;&#x3002;&#xFF08;&#x867D;&#x7136; C &#x548C; C++ &#x9664;&#x5916;&#xFF0C;&#x4F46;&#x662F;&#x5982;&#x679C;&#x6389;&#x4EE5;&#x8F7B;&#x5FC3;&#x968F;&#x624B;&#x778E;&#x641E;&#xFF0C;&#x62FF;&#x4E2A;&#x201C;&#x826F;&#x201D;&#x5C82;&#x4E0D;&#x6210;&#x4E3A;&#x522B;&#x4EBA;&#x53E3;&#x4E2D;&#x7684;&#x8C08;&#x8D44;&#x3002;&#xFF09;&#x53EA;&#x6709;&#x62B1;&#x7740;&#x62FF;&#x6EE1;&#x5206;&#x8FD8;&#x8981; bonus points &#x7684;&#x65F6;&#x5019;&#xFF0C;&#x62FF;&#x4E2A;&#x201C;&#x4F18;&#x201D;&#x624D;&#x6BD4;&#x8F83;&#x6709;&#x628A;&#x63E1;&#x3002;&#x4E0D;&#x5149;&#x5B66;&#x6821;&#x91CC;&#x7684;&#x8003;&#x8BD5;&#x662F;&#x8FD9;&#x6837;&#xFF0C;&#x505A;&#x5F88;&#x591A;&#x4E8B;&#x60C5;&#x90FD;&#x662F;&#x5982;&#x6B64;&#x3002;&#x8FD9;&#x4E00;&#x65B9;&#x9762;&#x8BF4;&#x660E;&#x6211;&#x53EF;&#x80FD;&#x662F;&#x6BD4;&#x8F83;&#x5BB9;&#x6613;&#x61C8;&#x6020;&#x7684;&#x90A3;&#x4E00;&#x79CD;&#x6027;&#x683C;&#xFF0C;&#x53E6;&#x4E00;&#x65B9;&#x9762;&#xFF0C;&#x5BF9;&#x4E8E;&#x81EA;&#x6211;&#x80FD;&#x529B;&#x8FB9;&#x754C;&#x7684;&#x63A2;&#x7D22;&#x5176;&#x5B9E;&#x53EF;&#x4EE5;&#x6210;&#x4E3A;&#x8FDB;&#x53D6;&#x7684;&#x52A8;&#x529B;&#x6E90;&#x6CC9;&#x3002;</p>
<p>&#x751F;&#x6D3B;&#x53C8;&#x5373;&#x5C06;&#x7FFB;&#x5F00;&#x65B0;&#x7684;&#x4E00;&#x9875;&#xFF0C;&#x770B;&#x4F3C;&#x6742;&#x4E71;&#x65E0;&#x7AE0;&#x5374;&#x53C8;&#x6709;&#x5E8F;&#x7684;&#x8FD0;&#x884C;&#x7740;&#x3002;&#x968F;&#x7740;&#x5E74;&#x5C81;&#x7684;&#x589E;&#x957F;&#xFF0C;&#x5728;&#x67D0;&#x4E9B;&#x65F6;&#x523B;&#x4E0D;&#x518D;&#x5BF9;&#x4E00;&#x4E9B;&#x4E8B;&#x60C5;&#x611F;&#x5230;&#x6B23;&#x559C;&#x82E5;&#x72C2;&#xFF0C;&#x4E0D;&#x518D;&#x5BF9;&#x8FDC;&#x65B9;&#x62A5;&#x4EE5;&#x5E0C;&#x671B;&#x3002;&#x4F46;&#x662F;&#xFF0C;&#x6709;&#x4E9B;&#x65F6;&#x5019;&#x6210;&#x957F;&#x53C8;&#x4E0D;&#x6B62;&#x4E8E;&#x6B64;&#xFF0C;&#x8D8A;&#x6765;&#x8D8A;&#x660E;&#x767D;&#x81EA;&#x5DF1;&#x7684;&#x6E3A;&#x5C0F;&#xFF0C;&#x8D8A;&#x8981;&#x7528;&#x5C3D;&#x5168;&#x529B;&#x8FFD;&#x9010;&#x5E0C;&#x671B;&#x3002;</p>
<p>&#x65B0;&#x7684;&#x4E00;&#x5E74;&#x5373;&#x5C06;&#x6765;&#x4E34;&#xFF0C;&#x6211;&#x4F1A;&#x795D;&#x798F;&#x81EA;&#x5DF1;&#x5728;&#x5D2D;&#x65B0;&#x7684;2017&#x5E74;&#x91CC;&#xFF0C;&#x4E0D;&#x518D;&#x865A;&#x5EA6;&#x5149;&#x9634;&#xFF0C;&#x5168;&#x529B;&#x4EE5;&#x8D74;&#x8BA9;&#x6BCF;&#x5929;&#x90FD;&#x66F4;&#x6709;&#x610F;&#x4E49;&#x3002;&#x8BA9;&#x81EA;&#x5DF1;&#x8FC7;&#x5F97;&#x66F4;&#x52A0;&#x5F00;&#x5FC3;&#x4E5F;&#x662F;&#x751F;&#x6D3B;&#x610F;&#x4E49;&#x7684;&#x4E00;&#x90E8;&#x5206;&#x3002;&#x5982;&#x679C;&#x5728;&#x7E41;&#x5FD9;&#x7684;&#x751F;&#x6D3B;&#x4E2D;&#x8FD8;&#x80FD;&#x62BD;&#x51FA;&#x65F6;&#x95F4;&#x6765;&#x8BFB;&#x4E66;&#xFF0C;&#x800C;&#x4E0D;&#x50CF;&#x73B0;&#x5728;&#x51A5;&#x601D;&#x82E6;&#x60F3;&#x3001;&#x7EDE;&#x5C3D;&#x8111;&#x6C41;&#x8FD8;&#x51D1;&#x4E0D;&#x51FA;&#x9AD8;&#x8003;&#x4F5C;&#x6587;800&#x5B57;&#xFF0C;&#x90A3;&#x4E48;&#x5C31;&#x66F4;&#x597D;&#x4E86;&#x3002;</p>
<p>&#x5C31;&#x4EE5;&#x8FD9;&#x7BC7;&#x6587;&#x7AE0;&#x4F5C;&#x4E3A;&#x8FD9;&#x4E2A;&#x516C;&#x4F17;&#x53F7;&#x668C;&#x8FDD;&#x5DF2;&#x4E45;&#x7684;&#x5F00;&#x7BC7;&#x3002;&#x65F6;&#x5149;&#x5982;&#x6D41;&#xFF0C;&#x613F;&#x5C81;&#x6708;&#x65E0;&#x5FE7;&#x3002;</p>
<!--kg-card-end: markdown-->]]></content:encoded></item><item><title><![CDATA[Penta-Hackathon 2016 参赛总结]]></title><description><![CDATA[<!--kg-card-begin: markdown--><p>11&#x6708;26 - 27&#x53F7;&#x53C2;&#x52A0;&#x4E86;&#x4EBA;&#x751F;&#x4E2D;&#x7B2C;&#x4E00;&#x6B21; Hackathon &#x7C7B;&#x6BD4;&#x8D5B;&#xFF0C;&#x4E3B;&#x9898;&#x662F; Hack for AI (both artificial intelligence and    &#x300C;&#x611B;&#x300D;)&#xFF0C;&#x5750;&#x6807;&#x4E0A;&#x6D77;&#x95F5;&#x884C;&#x533A;&#x7D2B;&#x661F;&#x8DEF;999&#x53F7;&#x5FAE;&#x8F6F;&#x4E9A;&#x592A;</p>]]></description><link>https://sxkdz.me/penta-hackathon-2016-summary/</link><guid isPermaLink="false">60f547237767ec0d683e9ea0</guid><category><![CDATA[Hackathon]]></category><category><![CDATA[Penta-Hackathon]]></category><category><![CDATA[Programming]]></category><dc:creator><![CDATA[SXKDZ]]></dc:creator><pubDate>Mon, 28 Nov 2016 05:37:00 GMT</pubDate><media:content url="https://sxkdz.me/content/images/2016/11/APGCCSS.jpg" medium="image"/><content:encoded><![CDATA[<!--kg-card-begin: markdown--><img src="https://sxkdz.me/content/images/2016/11/APGCCSS.jpg" alt="Penta-Hackathon 2016 &#x53C2;&#x8D5B;&#x603B;&#x7ED3;"><p>11&#x6708;26 - 27&#x53F7;&#x53C2;&#x52A0;&#x4E86;&#x4EBA;&#x751F;&#x4E2D;&#x7B2C;&#x4E00;&#x6B21; Hackathon &#x7C7B;&#x6BD4;&#x8D5B;&#xFF0C;&#x4E3B;&#x9898;&#x662F; Hack for AI (both artificial intelligence and    &#x300C;&#x611B;&#x300D;)&#xFF0C;&#x5750;&#x6807;&#x4E0A;&#x6D77;&#x95F5;&#x884C;&#x533A;&#x7D2B;&#x661F;&#x8DEF;999&#x53F7;&#x5FAE;&#x8F6F;&#x4E9A;&#x592A;&#x6280;&#x672F;&#x652F;&#x6301;&#x4E2D;&#x5FC3;&#xFF08;MS APGC CSS&#xFF09;&#x3002;</p>
<h1 id="day0preparation">Day 0: Preparation</h1>
<p>&#x8D5B;&#x524D;&#x7EC4;&#x961F;&#x53EF;&#x4EE5;&#x8BF4;&#x662F;&#x4E00;&#x4E2A;&#x8D76;&#x9E2D;&#x5B50;&#x4E0A;&#x67B6;&#x7684;&#x8FC7;&#x7A0B;&#xFF0C;&#x6211;&#x4EEC; Effervesce &#x961F;&#x7684;&#x56DB;&#x4E2A;&#x961F;&#x5458;&#x2014;&#x2014;&#x6211;&#x3001;&#x6BDB;&#x6BDB;&#x3001;&#x5C0F;&#x91D1;&#x3001;&#x4E00;&#x975E;&#x2014;&#x2014;&#x90FD;&#x662F; freshmen&#xFF0C;&#x800C;&#x4E14;&#x662F;&#x5728;&#x62A5;&#x540D;&#x622A;&#x6B62;&#x7684;&#x5F53;&#x5929;&#x624D;&#x51B3;&#x5B9A;&#x53C2;&#x8D5B;&#xFF0C;&#x6240;&#x4EE5;&#x76F4;&#x5230;&#x53C2;&#x8D5B;&#x4E4B;&#x524D;&#x90FD;&#x89C9;&#x5F97;&#x6709;&#x70B9;&#x865A;&#x3002;&#x8D5B;&#x524D;&#x6211;&#x4EEC;&#x5F00;&#x4E86;&#x4E00;&#x6B21;&#x7EC4;&#x4F1A;&#xFF0C;&#x6536;&#x96C6;&#x4E86;&#x5927;&#x5BB6;&#x7684;&#x60F3;&#x6CD5;&#xFF0C;&#x51B3;&#x5B9A;&#x5229;&#x7528;&#x5FAE;&#x8F6F;&#x63D0;&#x4F9B;&#x7684; HoloLens &#x5F00;&#x53D1;&#x4E00;&#x4E2A;&#x5165;&#x53E3;&#x7C7B;&#x5E94;&#x7528;&#xFF0C;&#x4F46;&#x662F;&#x7531;&#x4E8E;&#x7ECF;&#x9A8C;&#x4E0D;&#x8DB3;&#xFF0C;&#x6211;&#x4EEC;&#x7684;&#x60F3;&#x6CD5;&#x663E;&#x7136;&#x975E;&#x5E38; naive&#xFF0C;&#x5728;&#x624B;&#x5934;&#x6CA1;&#x6709; simulator&#xFF0C;&#x5B8C;&#x5168;&#x4E0D;&#x4F1A; Unity &#x5EFA;&#x6A21;&#xFF0C;&#x5B8C;&#x5168;&#x4E0D;&#x719F;&#x6089; API &#x7684;&#x60C5;&#x51B5;&#x4E0B;&#x4E00;&#x5929;&#x65F6;&#x95F4;&#x4E0A;&#x624B; HoloLens &#x51E0;&#x4E4E;&#x662F;&#x4E2A;&#x4E0D;&#x53EF;&#x80FD;&#x7684;&#x4EFB;&#x52A1;&#x3002;&#x56E0;&#x6B64;&#x5728;&#x4E0E;&#x4E00;&#x4E9B;&#x670B;&#x53CB;&#x4EA4;&#x6D41;&#x8FC7;&#x540E;&#x6211;&#x51B3;&#x5B9A;&#x5B8C;&#x5168;&#x63A8;&#x7FFB; HoloLens &#x7684;&#x5F00;&#x53D1;&#x8BA1;&#x5212;&#x3002;&#x4E8E;&#x662F;&#x8D5B;&#x524D;&#x53C8;&#x4E34;&#x65F6;&#x5F00;&#x4E86;&#x4E00;&#x4E2A;&#x7EC4;&#x4F1A;&#xFF0C;&#x5728;&#x8FD9;&#x4E2A;&#x7EC4;&#x4F1A;&#x4E2D;&#x6211;&#x4EEC;&#x4FDD;&#x7559;&#x4E86;&#x5165;&#x53E3;&#x7C7B;&#x5E94;&#x7528;&#x7684;&#x5F00;&#x53D1;&#x60F3;&#x6CD5;&#xFF0C;&#x4F46;&#x662F;&#x7EC4;&#x4F1A;&#x7684;&#x65B9;&#x5411;&#x8F6C;&#x5411;&#x4E86;&#x6280;&#x672F;&#x5B9E;&#x73B0;&#x65B9;&#x5411;&#x7684;&#x8BA8;&#x8BBA;&#x3002;&#x6700;&#x540E;&#x6211;&#x4EEC;&#x51B3;&#x5B9A;&#x5229;&#x7528; Arduino &#x6216;&#x8005; Ruff&#xFF08;&#x4E3B;&#x529E;&#x5355;&#x4F4D;&#x63D0;&#x4F9B;&#xFF09;&#x4EE5;&#x53CA; Raspberry Pi &#x5F00;&#x53D1;&#x4E00;&#x4E2A;&#x667A;&#x80FD;&#x5BB6;&#x5C45;&#x7EC4;&#x4EF6;&#x3002;</p>
<p>&#x5177;&#x4F53;&#x6765;&#x8BF4;&#xFF0C;&#x6211;&#x4EEC;&#x7684;&#x8BBE;&#x60F3;&#x501F;&#x9274;&#x4E86; RPi &#x5B98;&#x7F51;&#x4E0A;&#x63D0;&#x4F9B;&#x7684;<a href="https://www.raspberrypi.org/blog/magic-mirror/">&#x4E00;&#x4E2A;&#x60F3;&#x6CD5;</a>&#xFF0C;&#x7528;&#x4E00;&#x9762;&#x534A;&#x900F;&#x955C;&#x5B9E;&#x73B0;&#x4E00;&#x4E2A;&#x667A;&#x80FD;&#x52A9;&#x624B;&#xFF0C;&#x63D0;&#x4F9B;&#x7B80;&#x5355;&#x7684;&#x8BED;&#x97F3;&#x4EA4;&#x4E92;&#x3001;&#x9762;&#x90E8;&#x8BC6;&#x522B;&#xFF0C;&#x8FD8;&#x53EF;&#x4EE5;&#x9488;&#x5BF9;&#x8138;&#x90E8;&#x8868;&#x60C5;&#x8FDB;&#x884C;&#x8BC6;&#x522B;&#xFF0C;&#x63D0;&#x4F9B;&#x591A;&#x6837;&#x5316;&#x7684;&#x4EA4;&#x4E92;&#x65B9;&#x6848;&#xFF08;&#x5229;&#x7528; Microsoft Face &amp; Emotional Recognition&#xFF09;&#x3002;</p>
<p>&#x5F00;&#x5B8C;&#x7EC4;&#x4F1A;&#x4EE5;&#x540E;&#x5DF2;&#x7ECF;&#x5468;&#x4E09;&#x6DF1;&#x591C;&#xFF0C;&#x6211;&#x4EEC;&#x7684;&#x7CBE;&#x529B;&#x653E;&#x5728;&#x4E86;&#x7814;&#x7A76;&#x955C;&#x5B50;&#x6750;&#x6599;&#x7684;&#x95EE;&#x9898;&#x4E0A;&#x3002;&#x4E00;&#x975E;&#x6709;&#x4E00;&#x4E2A;&#x95F2;&#x7F6E;&#x4E0D;&#x7528;&#x7684; 22 &#x5BF8;&#x663E;&#x793A;&#x5C4F;&#xFF0C;&#x8FD9;&#x6837;&#x5728;&#x663E;&#x793A;&#x5C4F;&#x4E0A;&#x9762;&#x8986;&#x76D6;&#x4E00;&#x9762;&#x955C;&#x5B50;&#x5C31;&#x53EF;&#x4EE5;&#x89E3;&#x51B3;&#x95EE;&#x9898;&#x3002;&#x5B9E;&#x9645;&#x4E0A;&#xFF0C;&#x6211;&#x4EEC;&#x6700;&#x521D;&#x7684;&#x60F3;&#x6CD5;&#x5C31;&#x662F;&#x8D2D;&#x4E70;&#x4E00;&#x9762;&#x666E;&#x901A;&#x7684;&#x53CC;&#x9762;&#x955C;&#xFF0C;&#x4F46;&#x662F;&#x8003;&#x8651;&#x5230;&#x900F;&#x5149;&#x7387;&#x4EE5;&#x53CA;&#x4E0D;&#x65B9;&#x4FBF;&#x8D2D;&#x4E70;&#x7B49;&#x95EE;&#x9898;&#xFF0C;&#x6539;&#x4E3A;&#x4F7F;&#x7528;&#x4E00;&#x9762;&#x4E9A;&#x514B;&#x529B;&#x5168;&#x900F;&#x955C;&#x4E0A;&#x8986;&#x4E00;&#x5C42;&#x955C;&#x9762;&#x8D34;&#x819C;&#xFF0C;&#x8FD9;&#x79CD;&#x65B9;&#x6848;&#x6DD8;&#x5B9D;&#x4E0A;&#x7684;&#x62A5;&#x4EF7;&#x76F8;&#x5BF9;&#x4F4E;&#x5EC9;&#xFF0C;&#x5609;&#x5B9A;&#x4E5F;&#x6709;&#x5F88;&#x591A;&#x751F;&#x4EA7;&#x5382;&#x5BB6;&#xFF0C;&#x4F46;&#x662F;&#x8003;&#x8651;&#x5230;&#x900F;&#x5149;&#x7387;&#x548C;&#x5B9E;&#x9645;&#x6548;&#x679C;&#x4E0D;&#x597D;&#x628A;&#x63E1;&#xFF0C;&#x6700;&#x540E;&#x53EA;&#x80FD;&#x4F5C;&#x4E3A; Plan B&#x3002;&#x8FD9;&#x4E2A;&#x65F6;&#x5019;&#x8BE2;&#x95EE;&#x4E86;&#x5F88;&#x591A;&#x670B;&#x53CB;&#xFF0C;&#x53D1;&#x73B0;&#x8FD9;&#x79CD;&#x6750;&#x6599;&#x5B9E;&#x9645;&#x4E0A;&#x662F;&#x4E00;&#x79CD;&#x534A;&#x900F;&#x955C;&#xFF0C;&#x540C;&#x65F6;&#x4E24;&#x9762;&#x9540;&#x819C;&#xFF0C;&#x8FBE;&#x5230;&#x53CD;&#x5C04;&#x90E8;&#x5206;&#x5149;&#x7EBF;&#x548C;&#x900F;&#x8FC7;&#x90E8;&#x5206;&#x5149;&#x7EBF;&#x7684;&#x4F5C;&#x7528;&#x3002;&#xFF08;&#x5DE5;&#x4E1A;&#x4E0A;&#x6765;&#x8BF4;&#x5176;&#x5B9E;&#x751F;&#x6D3B;&#x4E2D;&#x76F8;&#x5F53;&#x591A;&#x573A;&#x666F;&#x5229;&#x7528;&#x5230;&#x4E86;&#x8FD9;&#x79CD;&#x6750;&#x6599;&#xFF0C;&#x6BD4;&#x5982;&#x6C7D;&#x8F66;&#x7684;&#x53CD;&#x5149;&#x955C;&#x4E0A;&#x540C;&#x65F6;&#x53EF;&#x4EE5;&#x6709;&#x65F6;&#x95F4;&#x663E;&#x793A;&#xFF0C;&#x4EE5;&#x53CA;&#x673A;&#x7687; Nokia &#x5728;&#x591A;&#x5E74;&#x4EE5;&#x524D;&#x5C31;&#x63A8;&#x51FA;&#x4E86;&#x955C;&#x9762;&#x624B;&#x673A;&#x7B49;&#x7B49;&#xFF09;&#x5728;&#x6DD8;&#x5B9D;&#x548C; 1688 &#x4E0A;&#x627E;&#x5230;&#x4E86;&#x6BD4;&#x8F83;&#x591A;&#x7684;&#x4F9B;&#x5E94;&#x5546;&#xFF0C;&#x4F46;&#x662F;&#x62A5;&#x4EF7;&#x975E;&#x5E38;&#x8D35;&#xFF0C;&#x800C;&#x4E14;&#x8FD8;&#x8981;&#x6C42;&#x6279;&#x53D1;&#x3002;&#x53E6;&#x5916;&#x4E00;&#x4E2A;&#x95EE;&#x9898;&#x662F; 22 &#x5BF8;&#x663E;&#x793A;&#x5C4F;&#x7684;&#x5C3A;&#x5BF8;&#x5BF9;&#x4E8E;&#x73BB;&#x7483;&#x5382;&#x5546;&#x6765;&#x8BF4;&#x5E76;&#x975E;&#x5E38;&#x89C4;&#xFF0C;&#x9700;&#x8981;&#x5355;&#x72EC;&#x5B9A;&#x5236;&#xFF0C;&#x8017;&#x65F6;&#x5468;&#x671F;&#x5C31;&#x66F4;&#x957F;&#x4E86;&#x3002;&#x6211;&#x5728;&#x6DD8;&#x5B9D;&#x4E0A;&#x8054;&#x7CFB;&#x4E86; 20 &#x591A;&#x5BB6;&#x4E9A;&#x514B;&#x529B;&#x5382;&#x5546;&#xFF0C;&#x6700;&#x540E;&#x53EA;&#x6709; 1 &#x5BB6;&#x80FD;&#x591F;&#x63D0;&#x4F9B;&#x5C3D;&#x5FEB;&#x7684;&#x5B9A;&#x5236;&#xFF0C;&#x540C;&#x65F6;&#x62A5;&#x4EF7;&#x8FD8;&#x6BD4;&#x8F83;&#x4FBF;&#x5B9C;&#xFF0C;&#x6211;&#x4EEC;&#x7B97;&#x4E86;&#x4E00;&#x4E0B;&#x4F7F;&#x7528;&#x987A;&#x4E30;&#x6B21;&#x65E5;&#x5230;&#x5E94;&#x8BE5;&#x80FD;&#x5728;&#x5468;&#x4E94;&#x7684;&#x65F6;&#x5019;&#x9001;&#x5230;&#x5B66;&#x6821;&#xFF0C;&#x8FD9;&#x6837;&#x5C31;&#x5E9F;&#x5F03;&#x4E86; Plan B&#x3002;</p>
<p>&#x5468;&#x4E94;&#x7684;&#x65F6;&#x5019;&#x987A;&#x4E30;&#x7ED9;&#x6211;&#x4EEC;&#x5E26;&#x6765;&#x4E86;&#x597D;&#x6D88;&#x606F;&#xFF0C;&#x4E9A;&#x514B;&#x529B;&#x7684;&#x6750;&#x6599;&#x5929;&#x751F;&#x5C31;&#x80FD;&#x5E26;&#x6765;&#x597D;&#x611F;&#xFF0C;&#x800C;&#x4E14;&#x51FA;&#x4E8E;&#x76F4;&#x89C9;&#xFF0C;&#x6211;&#x8981;&#x6C42;&#x5382;&#x5546;&#x5B9A;&#x5236;&#x7684;&#x662F; 16:9 &#x5BF9;&#x89D2;&#x7EBF;&#x957F; 21 &#x82F1;&#x5BF8;&#x7684;&#x955C;&#x5B50;&#xFF0C;&#x6BD4;&#x5BF9;&#x663E;&#x793A;&#x5668;&#x53D1;&#x73B0;&#x975E;&#x5E38;&#x5408;&#x9002;&#xFF0C;&#x6CA1;&#x6709;&#x8D85;&#x8FC7;&#x663E;&#x793A;&#x5668;&#x8FB9;&#x6846;&#x7684;&#x8303;&#x56F4;&#x3002;&#x5982;&#x679C;&#x5F53;&#x521D;&#x771F;&#x6309; 22 &#x5BF8;&#x8FDB;&#x884C;&#x5B9A;&#x5236;&#xFF0C;&#x5728;&#x6CA1;&#x6709;&#x4E13;&#x4E1A;&#x5207;&#x5272;&#x5DE5;&#x5177;&#x7684;&#x60C5;&#x51B5;&#x4E0B;&#x6211;&#x4EEC;&#x53EA;&#x80FD;&#x628A;&#x663E;&#x793A;&#x5668;&#x7684;&#x8FB9;&#x6846;&#x5168;&#x90E8;&#x62C6;&#x9664;&#x624D;&#x80FD;&#x5B89;&#x88C5;&#x955C;&#x5B50;&#xFF0C;&#x73B0;&#x5728;&#x60F3;&#x60F3;&#x8FD8;&#x662F;&#x975E;&#x5E38;&#x540E;&#x6015;&#x3002;</p>
<h1 id="day1">Day 1</h1>
<p>&#x5468;&#x516D;&#x6E05;&#x6668;&#x5305;&#x8F66;&#x5230;&#x4E86;&#x5FAE;&#x8F6F;&#x5382;&#x623F;&#xFF0C;&#x4E0D;&#x5F97;&#x4E0D;&#x8BF4;&#x7530;&#x724C;&#x6309;&#x7167; Seattle &#x539F;&#x6837;&#x8BBE;&#x8BA1;&#x7684;&#x5382;&#x623F;&#x975E;&#x5E38;&#x4F18;&#x7F8E;&#xFF0C;&#x4E0D;&#x50CF; Google &#x5728;&#x73AF;&#x7403;&#x91D1;&#x878D;&#x4E2D;&#x5FC3;&#x7684;&#x5382;&#x623F;&#x6709;&#x4E00;&#x79CD;&#x8EAB;&#x5904;&#x94A2;&#x94C1;&#x4E4B;&#x95F4;&#x7684;&#x51B7;&#x6F20;&#x548C;&#x538B;&#x6291;&#xFF0C;&#x5728;&#x95F5;&#x884C;&#x4E00;&#x7247;&#x7EFF;&#x8272;&#x4E4B;&#x4E2D;&#x5DE5;&#x4F5C;&#x5E94;&#x8BE5;&#x4F1A;&#x8212;&#x9002;&#x5F88;&#x591A;&#x3002;&#x4E4B;&#x540E;&#x8FDB;&#x884C;&#x5F00;&#x5E55;&#x5F0F;&#x3001;&#x7269;&#x8D44;&#x53D1;&#x653E;&#x7B49;&#x73AF;&#x8282;&#xFF0C;&#x5FAE;&#x8F6F;&#x4E9A;&#x6D32;&#x7814;&#x7A76;&#x9662;&#x5B66;&#x672F;&#x5408;&#x4F5C;&#x90E8;&#x5218;&#x5EB7;&#x5E73;&#x535A;&#x58EB;&#x3001;&#x4EA4;&#x5927;&#x8F6F;&#x9662;&#x9662;&#x957F;&#x5230;&#x573A;&#x81F4;&#x8F9E;&#xFF08;&#x4ECE;&#x4E2D;&#x53EF;&#x4EE5;&#x4E00;&#x7AA5;&#x4EA4;&#x5927;&#x5BF9;&#x672C;&#x6B21;&#x6BD4;&#x8D5B;&#x7684;&#x91CD;&#x89C6;&#x7A0B;&#x5EA6;&#xFF09;&#x3002;</p>
<p>&#x4E4B;&#x540E;&#x5C31;&#x5F00;&#x59CB;&#x4E86; Coding &#x7684;&#x8FC7;&#x7A0B;&#xFF0C;&#x6211;&#x4EEC;&#x8FDB;&#x884C;&#x4E86;&#x7B80;&#x5355;&#x5206;&#x5DE5;&#xFF0C;&#x5C0F;&#x91D1;&#x548C;&#x6BDB;&#x6BDB;&#x8D1F;&#x8D23;&#x4EBA;&#x8138;&#x8BC6;&#x522B;&#x7B49; API &#x7684;&#x7814;&#x7A76;&#xFF0C;&#x6211;&#x8D1F;&#x8D23; IoT components &#x7684;&#x8C03;&#x8BD5;&#xFF0C;&#x4E00;&#x975E;&#x8FDB;&#x884C;&#x524D;&#x7AEF; UI &#x8BBE;&#x8BA1;&#x3002;&#x4E0B;&#x5348; 2 &#x70B9;&#xFF0C;&#x6211;&#x4EEC;&#x53D1;&#x73B0;&#x5FFD;&#x7565;&#x4E86;&#x6700;&#x91CD;&#x8981;&#x7684;&#x4E00;&#x4E2A;&#x95EE;&#x9898;&#xFF1A;&#x67B6;&#x6784;&#x8BBE;&#x8BA1;&#x3002;&#x6211;&#x4EEC;&#x5F53;&#x65F6;&#x5B8C;&#x5168;&#x6CA1;&#x6709;&#x67B6;&#x6784;&#x7684;&#x6982;&#x5FF5;&#xFF0C;&#x7F3A;&#x5C11;&#x5BF9;&#x6574;&#x4E2A;&#x9879;&#x76EE;&#x7684;&#x89C4;&#x5212;&#x3002;&#x56E0;&#x6B64;&#x6211;&#x4EEC;&#x7ACB;&#x5373;&#x5F00;&#x59CB;&#x8BBE;&#x8BA1;&#xFF0C;&#x51FA;&#x4E8E;&#x7B80;&#x5316;&#x8003;&#x8651;&#xFF0C;&#x8BBE;&#x8BA1;&#x4E3A; C-S &#x67B6;&#x6784;&#xFF0C;Client &#x7AEF;&#x8D1F;&#x8D23;&#x8C03;&#x7528;&#x5404;&#x4E2A; API &#x5E76;&#x4E14;&#x4E0E; Server &#x8FDB;&#x884C;&#x901A;&#x8BAF;&#x3002;&#x7531;&#x4E8E;&#x73B0;&#x573A;&#x7269;&#x6599;&#x6709;&#x9650;&#xFF0C;&#x6211;&#x4EEC;&#x624B;&#x4E2D;&#x4EC5;&#x6709;&#x4E00;&#x4E2A; RPi &#x4E13;&#x7528;&#x7684; WebCam&#xFF0C;&#x8FD9;&#x6837;&#x7684;&#x8BDD;&#x5C31;&#x4E0D;&#x5F97;&#x4E0D;&#x5C06; RPi &#x72EC;&#x7ACB;&#x51FA;&#x6765;&#xFF0C;&#x5355;&#x72EC;&#x4F5C;&#x4E3A;&#x4E00;&#x4E2A;&#x670D;&#x52A1;&#x7AEF;&#x63D0;&#x4F9B;&#x62CD;&#x7167;&#xFF0C;&#x987A;&#x4FBF;&#x63D0;&#x4F9B;&#x4EBA;&#x8138;&#x8BC6;&#x522B;&#x7B49;&#x529F;&#x80FD;&#x3002;Arduino &#x63A5;&#x6E29;&#x5EA6;&#x548C;&#x4EBA;&#x4F53;&#x7EA2;&#x5916;&#x611F;&#x5E94;&#x90E8;&#x4EF6;&#xFF0C;&#x901A;&#x8FC7; USB &#x4E0E; Client &#x8FDB;&#x884C;&#x4E32;&#x53E3;&#x901A;&#x8BAF;&#x3002;&#x4E0B;&#x5348; 3 &#x70B9;&#x5DE6;&#x53F3;&#x6211;&#x4EEC;&#x57FA;&#x672C;&#x4E0A;&#x5B8C;&#x6210;&#x4E86; REST-like &#x63A5;&#x53E3;&#x7684;&#x89C4;&#x5B9A;&#x3002;</p>
<p>&#x987A;&#x5E26;&#x4E00;&#x8BF4;&#xFF0C;&#x4F19;&#x98DF;&#x5F80;&#x5F80;&#x662F;&#x8BC4;&#x4EF7;&#x4E00;&#x4E2A; Hackathon &#x597D;&#x574F;&#x7684;&#x7EF4;&#x5EA6;&#x4E4B;&#x4E00;&#xFF0C;&#x672C;&#x6B21;&#x6BD4;&#x8D5B;&#x7684;&#x4F19;&#x98DF;&#x867D;&#x7136;&#x662F;&#x76D2;&#x996D;&#xFF0C;&#x4F46;&#x662F;&#x57FA;&#x672C;&#x505A;&#x5230;&#x4E86;&#x8364;&#x7D20;&#x642D;&#x914D;&#xFF0C;&#x8FD8;&#x6709;&#x5976;&#x8336;&#xFF0C;&#x665A;&#x9910;&#x8FD8;&#x63D0;&#x4F9B;&#x610F;&#x5927;&#x5229;&#x9762;&#x548C; Pizza &#x53EF;&#x9009;&#x3002;&#x8FD9;&#x4E00;&#x70B9;&#x4E0A; Penta-Hackathon &#x505A;&#x5F97;&#x975E;&#x5E38;&#x4E0D;&#x9519;&#x3002;</p>
<p>&#x5728;&#x6BD4;&#x8D5B;&#x95F4;&#x9699;&#x6709; HoloLens &#x5F00;&#x53D1;&#x6307;&#x5BFC;&#x548C;&#x4F53;&#x9A8C;&#xFF0C;&#x8BD5;&#x73A9;&#x4E86;&#x4E00;&#x628A; HoloLens &#x611F;&#x89C9;&#x786E;&#x5B9E;&#x76F8;&#x5F53;&#x60CA;&#x8273;&#xFF0C;&#x6C89;&#x6D78;&#x4F53;&#x9A8C;&#x975E;&#x5E38;&#x4E0D;&#x9519;&#x3002;&#x552F;&#x4E00;&#x7684;&#x7F3A;&#x70B9;&#xFF1A;&#x4E70;&#x4E0D;&#x8D77;&#x3002;</p>
<p>&#x665A;&#x4E0A;&#x4E00;&#x975E;&#x8FDB;&#x5EA6;&#x6BD4;&#x8F83;&#x5FEB;&#xFF0C;UI &#x90E8;&#x5206;&#x5B9E;&#x73B0;&#x4E86;&#x591A;&#x4E2A; API&#xFF0C;&#x800C;&#x6211;&#x8FD9;&#x91CC;&#x9664;&#x4E86;&#x8981;&#x628A; IoT &#x90E8;&#x5206;&#x7684;&#x5404;&#x9879;&#x9EBB;&#x70E6;&#x4E8B;&#x89E3;&#x51B3;&#xFF0C;&#x8FD8;&#x8981;&#x5E2E;&#x6BDB;&#x6BDB;&#x548C;&#x5C0F;&#x91D1;&#x8C03;&#x8BD5;&#x4ED6;&#x4EEC;&#x7684;&#x4EE3;&#x7801;&#xFF0C;&#x8FDB;&#x5C55;&#x76F8;&#x5BF9;&#x6BD4;&#x8F83;&#x6162;&#x3002;&#x665A;&#x9910;&#x8FC7;&#x540E;&#x6211;&#x8D1F;&#x8D23;&#x7684;&#x786C;&#x4EF6;&#x90E8;&#x5206;&#x57FA;&#x672C;&#x4E0A;&#x5DF2;&#x7ECF;&#x8C03;&#x8BD5;&#x5B8C;&#x6BD5;&#xFF0C;&#x4EBA;&#x8138;&#x8BC6;&#x522B;&#x548C;&#x8BED;&#x97F3;&#x5F55;&#x5236;&#x3001;&#x8BC6;&#x522B;&#x4E5F;&#x57FA;&#x672C;&#x5B8C;&#x6210;&#x3002;&#x7531;&#x4E8E;&#x5FAE;&#x8F6F;&#x7684;&#x573A;&#x5730;&#x4E0D;&#x5141;&#x8BB8;&#x8FC7;&#x591C;&#xFF0C;&#x6211;&#x4EEC;&#x665A;&#x4E0A;&#x8F6C;&#x573A;&#x9152;&#x5E97;&#xFF0C;&#x5728;&#x6B64;&#x4E4B;&#x524D;&#x8FD8;&#x4E3E;&#x884C;&#x4E86;&#x4E00;&#x4E2A;&#x7EB8;&#x98DE;&#x673A;&#x6BD4;&#x8D5B;&#xFF0C;&#x7531;&#x4E8E;&#x8FDB;&#x5EA6;&#x7F13;&#x6162;&#x6CA1;&#x6709;&#x53C2;&#x52A0;&#x3002;&#x9694;&#x58C1;&#x7684;&#x5C71;&#x4E1C;&#x5C0F;&#x4F19;&#x513F;&#x53D6;&#x5F97;&#x4E86;&#x7B2C;&#x4E94;&#x540D;&#xFF0C;&#x4E00;&#x4E2A;&#x4E0D;&#x9519;&#x7684;&#x6210;&#x7EE9;&#x3002;</p>
<h1 id="day2">Day 2</h1>
<p>&#x9152;&#x5E97;&#x9009;&#x62E9;&#x4EA4;&#x5927;&#x65C1;&#x8FB9;&#x7684; IU &#x9152;&#x5E97;&#xFF0C;&#x6211;&#x4EEC;&#x4F4F;&#x7684;&#x5355;&#x95F4;&#x6BD4;&#x8F83;&#x5C0F;&#xFF08;&#x672C;&#x6765;&#x4E5F;&#x4E0D;&#x662F;&#x7ED9;&#x56DB;&#x4E2A;&#x4EBA;&#x7761;&#x89C9;&#x7684;&#xFF09;&#xFF0C;&#x4F46;&#x662F;&#x4E0A;&#x7F51;&#x901F;&#x5EA6;&#x6BD4;&#x8F83;&#x5FEB;&#x3002;RPi &#x8FDE;&#x63A5;&#x5FAE;&#x8F6F;&#x8BA4;&#x77E5;&#x670D;&#x52A1; API &#x9700;&#x8981;&#x7684;&#x65F6;&#x95F4;&#x975E;&#x5E38;&#x77ED;&#xFF0C;&#x51E0;&#x4E4E;&#x79D2;&#x51FA;&#x7ED3;&#x679C;&#x3002;&#x8FD9;&#x6BD4;&#x5728;&#x5FAE;&#x8F6F;&#x7684;&#x573A;&#x5730;&#x8981;&#x5FEB;&#x4E0D;&#x5C11;&#xFF0C;&#x5728;&#x5FAE;&#x8F6F;&#x5382;&#x533A;&#x91CC;&#x5B8C;&#x6210;&#x62CD;&#x6444;&#x3001;&#x4E0A;&#x4F20;&#x518D;&#x83B7;&#x5F97;&#x7ED3;&#x679C;&#x9700;&#x8981; 6 &#x79D2;&#x591A;&#xFF0C;&#x8FD9;&#x4E5F;&#x7ED9;&#x6211;&#x4EEC;&#x540E;&#x6765;&#x7684; Demo &#x5E26;&#x6765;&#x4E86;&#x9EBB;&#x70E6;&#x3002;&#x8F6C;&#x573A;&#x4EE5;&#x540E;&#x6211;&#x7684;&#x76EE;&#x6807;&#x5C31;&#x96C6;&#x4E2D;&#x5728;&#x6574;&#x4E2A; Client &#x4E0A;&#xFF0C;&#x4E00;&#x975E;&#x7EE7;&#x7EED;&#x5B8C;&#x6210; Server &#x7AEF;&#x3002;&#x665A;&#x4E0A; 3 &#x70B9;&#x5DE6;&#x53F3;&#x96C6;&#x4E2D;&#x7761;&#x4E86;&#x4E00;&#x89C9;&#xFF0C;4 &#x70B9;&#x534A;&#x8D77;&#x6765;&#x8D77;&#x6765;&#x5199;&#x3002;&#x5728;&#x9152;&#x5E97;&#x7684;&#x65F6;&#x95F4;&#x91CC;&#x57FA;&#x672C;&#x4E0A;&#x5C06; Client &#x90E8;&#x5206;&#x5B8C;&#x6210;&#x3002;</p>
<p>&#x56DE;&#x5230;&#x5FAE;&#x8F6F;&#x7684;&#x573A;&#x5730;&#xFF0C;&#x9996;&#x6B21;&#x63ED;&#x5F00;&#x4E86;&#x955C;&#x5B50;&#x7684;&#x4FDD;&#x62A4;&#x819C;&#xFF0C;&#x6548;&#x679C;&#x786E;&#x5B9E;&#x975E;&#x5E38;&#x60CA;&#x8273;&#x3002;&#x5B8C;&#x6210;&#x63A5;&#x7EBF;&#x4EE5;&#x540E;&#x8FDB;&#x4E00;&#x6B65;&#x5BF9;&#x7A0B;&#x5E8F;&#x8FDB;&#x884C;&#x8C03;&#x8BD5;&#x3002;&#x9057;&#x61BE;&#x7684;&#x662F;&#xFF0C;&#x7531;&#x4E8E;&#x7F51;&#x901F;&#x3001;&#x573A;&#x5730;&#x5435;&#x95F9;&#x7B49;&#x539F;&#x56E0;&#xFF0C;&#x6211;&#x4EEC;&#x81EA;&#x5DF1;&#x8C03;&#x8BD5;&#x7684;&#x6548;&#x679C;&#x4E5F;&#x975E;&#x5E38;&#x4E0D;&#x597D;&#xFF0C;&#x7279;&#x522B;&#x662F;&#x4EBA;&#x8138;&#x8BC6;&#x522B;&#x901F;&#x5EA6;&#x6162;&#xFF0C;&#x8BED;&#x97F3;&#x8BC6;&#x522B;&#x6548;&#x679C;&#x5DEE;&#x3002;&#x6B64;&#x5916;&#xFF0C;&#x672C;&#x6765;&#x6253;&#x7B97;&#x4F7F;&#x7528;&#x4E00;&#x975E;&#x7684; Windows &#x672C;&#x8DD1; Client&#xFF0C;&#x7531;&#x4E8E; <code>pySerial</code> &#x5728; Windows &#x4E0B;&#x7684;&#x95EE;&#x9898;&#xFF0C;&#x59CB;&#x7EC8;&#x65E0;&#x6CD5;&#x83B7;&#x5F97; Arduino &#x7684;&#x4E32;&#x53E3;&#x8F93;&#x51FA;&#x3002;&#x4E8B;&#x5B9E;&#x4E0A;&#xFF0C;&#x8FD9;&#x4E2A;&#x95EE;&#x9898;&#x5728; macOS &#x4E0A;&#x4E5F;&#x5B58;&#x5728;&#xFF0C;&#x53EA;&#x662F;&#x6211;&#x901A;&#x8FC7; <code>time.sleep()</code> &#x7B49;&#x5F85;&#x4E00;&#x5B9A;&#x65F6;&#x95F4;&#x4E4B;&#x540E;&#x53EF;&#x4EE5;&#x83B7;&#x5F97;&#x8F93;&#x51FA;&#x3002;</p>
<p>&#x6700;&#x540E;&#x63A5;&#x7EBF;&#x7684;&#x6210;&#x54C1;&#x56FE;&#xFF1A;<br>
<img src="/content/images/2016/11/Love_Mirror.jpg" alt="Penta-Hackathon 2016 &#x53C2;&#x8D5B;&#x603B;&#x7ED3;" loading="lazy"></p>
<p>&#x518D;&#x63A5;&#x4E0B;&#x6765;&#x7684;&#x65F6;&#x95F4;&#x91CC;&#x5728;&#x5916;&#x9762;&#x7684;&#x6C99;&#x53D1;&#x4E0A;&#x7761;&#x4E86;&#x4E00;&#x4F1A;&#x513F;&#xFF0C;&#x5348;&#x996D;&#x8FC7;&#x540E;&#x5C31;&#x7B49;&#x5F85;&#x7B54;&#x8FA9;&#x4E86;&#x3002;&#x7B2C;&#x4E00;&#x8F6E;&#x7B54;&#x8FA9;&#x5728;&#x5C0F;&#x623F;&#x95F4;&#x5185;&#x8FDB;&#x884C;&#xFF0C;&#x51C6;&#x5907;&#x4E0D;&#x5145;&#x5206;&#xFF0C;&#x975E;&#x5E38;&#x7D27;&#x5F20;&#xFF0C;&#x8BC4;&#x59D4;&#x4E3B;&#x8981;&#x9488;&#x5BF9;&#x9879;&#x76EE;&#x7684;&#x5546;&#x4E1A;&#x4EF7;&#x503C;&#x8FDB;&#x884C;&#x63D0;&#x95EE;&#xFF0C;&#x8FD9;&#x4F7F;&#x5F97;&#x6211;&#x7565;&#x6709;&#x4E00;&#x4E1D;&#x4E0D;&#x60A6;&#xFF0C;&#x6BD5;&#x7ADF;&#x8FD9;&#x53EA;&#x662F;&#x4E00;&#x4E2A; Geek &#x7684;&#x9879;&#x76EE;&#xFF0C;&#x5E76;&#x4E0D;&#x5728;&#x4E4E;&#x5546;&#x4E1A;&#x7684;&#x4EF7;&#x503C;&#x3002;</p>
<p>&#x518D;&#x4E4B;&#x540E;&#x610F;&#x5916;&#x7684;&#x8FDB;&#x5165;&#x4E86;&#x7B2C;&#x4E8C;&#x8F6E; Public demonstration and presentation&#xFF0C;&#x7531;&#x4E8E;&#x4F1A;&#x8BAE;&#x5BA4;&#x7F51;&#x901F;&#x6162;&#xFF0C;Server &#x548C; Client &#x4E4B;&#x95F4;&#x7684;&#x901A;&#x8BAF;&#x751A;&#x81F3;&#x90FD;&#x51FA;&#x73B0;&#x4E25;&#x91CD;&#x4E22;&#x5305;&#x7684;&#x60C5;&#x51B5;&#x3002;&#x6700;&#x540E;&#xFF0C;&#x62FF;&#x5230;&#x4E86;&#x4E00;&#x4E2A;&#x201C;&#x6700;&#x53D7;&#x6B22;&#x8FCE;&#x201D;&#x5956;&#xFF0C;&#x5956;&#x54C1;&#x56DB;&#x5757; TicWatch&#xFF0C;&#x5177;&#x4F53;&#x8FC7;&#x7A0B;&#x4E5F;&#x6CA1;&#x4EC0;&#x4E48;&#x597D;&#x5199;&#x7684;&#x4E86;&#xFF0C;&#x6BD5;&#x7ADF;&#x4EBA;&#x5728;&#x71AC;&#x591C;&#x4E4B;&#x540E;&#x601D;&#x8003;&#x548C;&#x8BB0;&#x5FC6;&#x80FD;&#x529B;&#x90FD;&#x4E0B;&#x964D;&#x4E86;&#xFF0C;&#x6211;&#x4E5F;&#x4E0D;&#x592A;&#x8BB0;&#x5F97;&#x90A3;&#x4E2A;&#x65F6;&#x5019;&#x5728;&#x5E72;&#x561B;&#x2026;&#x2026;</p>
<h1 id>&#x603B;&#x7ED3;</h1>
<p>&#x6574;&#x4F53;&#x4E0A;&#x6765;&#x8BF4;&#xFF0C;&#x6211;&#x4EEC;&#x4F5C;&#x4E3A;&#x7B2C;&#x4E00;&#x6B21;&#x53C2;&#x8D5B;&#x7684;&#x9009;&#x624B;&#xFF0C;&#x6700;&#x540E;&#x80FD;&#x8FDB;&#x5165;&#x7B2C;&#x4E8C;&#x8F6E;&#x7B54;&#x8FA9;&#x5E76;&#x62FF;&#x5230;&#x4E00;&#x4E2A;&#x5956;&#x975E;&#x5E38;&#x4E0D;&#x5BB9;&#x6613;&#x3002;&#x6574;&#x4E2A;&#x8FC7;&#x7A0B;&#x4E0A;&#x6CA1;&#x6709;&#x51FA;&#x73B0;&#x5927;&#x7684;&#x6C9F;&#x901A;&#x95EE;&#x9898;&#xFF0C;&#x5408;&#x4F5C;&#x6BD4;&#x8F83;&#x6109;&#x5FEB;&#xFF0C;&#x5728; 24 &#x5C0F;&#x65F6;&#x5185;&#x80FD;&#x5C06;&#x6574;&#x4E2A;&#x9879;&#x76EE;&#x505A;&#x5B8C;&#xFF0C;&#x5E76;&#x4E14;&#x9879;&#x76EE;&#x603B;&#x4F53;&#x5B8C;&#x6210;&#x5EA6;&#x4E0D;&#x9519;&#xFF0C;&#x57FA;&#x672C;&#x5B8C;&#x6210;&#x6700;&#x521D;&#x7684;&#x8BBE;&#x60F3;&#xFF0C;&#x8FD9;&#x662F;&#x4E0D;&#x5BB9;&#x6613;&#x7684;&#x3002;&#x4ECE;&#x6280;&#x672F;&#x89D2;&#x5EA6;&#x6765;&#x770B;&#xFF0C;&#x6574;&#x4E2A;&#x5F00;&#x53D1;&#x8FC7;&#x7A0B;&#x52C9;&#x5F3A;&#x7B26;&#x5408;&#x6D41;&#x7A0B;&#xFF0C;&#x4F46;&#x662F;&#x4F9D;&#x65E7;&#x5B58;&#x5728;&#x975E;&#x5E38;&#x591A;&#x7684;&#x4E0D;&#x8DB3;&#x3002;&#x6BD4;&#x5982;&#x6574;&#x4E2A;&#x67B6;&#x6784;&#x5728;&#x5F02;&#x6B65;&#x5904;&#x7406;&#x4E0A;&#x5F88;&#x662F;&#x95EE;&#x9898;&#xFF0C;Client &#x548C; Server &#x5728;&#x6D88;&#x606F;&#x5904;&#x7406;&#x4E0A;&#x51E0;&#x4E4E;&#x53EF;&#x4EE5;&#x8BF4;&#x662F; P2P &#x7684;&#x7ED3;&#x6784;&#xFF0C;&#x5E94;&#x8BE5;&#x53EF;&#x4EE5;&#x8BBE;&#x8BA1;&#x4E00;&#x4E2A;&#x8C03;&#x5EA6;&#x5668;&#x6765;&#x5B8C;&#x6210;&#x5F02;&#x6B65;&#x6D88;&#x606F;&#x4E8B;&#x4EF6;&#x7684;&#x5904;&#x7406;&#xFF0C;&#x7B49;&#x7B49;&#x3002;</p>
<p>&#x603B;&#x7ED3;&#x7ECF;&#x9A8C;&#x5982;&#x4E0B;&#xFF1A;</p>
<ol>
<li>&#x8D5B;&#x524D;&#x7EC4;&#x4F1A;&#x8BA8;&#x8BBA;&#x7684;&#x76EE;&#x6807;&#x5E94;&#x8BE5;&#x7740;&#x773C;&#x4E8E;<strong>&#x5177;&#x4F53;&#x5B9E;&#x73B0;</strong>&#xFF0C;&#x9879;&#x76EE;&#x7684;&#x89C4;&#x6A21;&#x4E0D;&#x5B9C;&#x592A;&#x5927;&#xFF0C;&#x4E0D;&#x7136; 24 &#x5C0F;&#x65F6;&#x65E0;&#x6CD5;&#x5B8C;&#x6210;&#xFF1B;</li>
<li>&#x67B6;&#x6784;&#x5E94;&#x8BE5;&#x5C3D;&#x65E9;&#x63D0;&#x51FA;&#xFF0C;&#x5728;&#x786E;&#x5B9A;&#x597D;&#x8981;&#x4F7F;&#x7528;&#x7684;&#x6280;&#x672F;&#x4EE5;&#x540E;&#x5E94;&#x8BE5;&#x8BA8;&#x8BBA;&#x5177;&#x4F53;&#x67B6;&#x6784;&#xFF0C;&#x800C;&#x4E0D;&#x662F;&#x95F7;&#x5934;&#x5F00;&#x59CB;&#x5199;&#xFF1B;</li>
<li>&#x5206;&#x5DE5;&#x5408;&#x4F5C;&#x5E94;&#x8BE5;&#x66F4;&#x52A0;&#x660E;&#x786E;&#xFF0C;&#x8FD9;&#x6837;&#x53EF;&#x4EE5;&#x5408;&#x7406;&#x5B89;&#x6392;&#x4F11;&#x606F;&#x548C;&#x7761;&#x7720;&#x65F6;&#x95F4;&#x3002;</li>
</ol>
<p>&#x603B;&#x7684;&#x6765;&#x8BF4;&#xFF0C;&#x4E24;&#x5929;&#x7684;&#x6BD4;&#x8D5B;&#x6536;&#x83B7;&#x4E0D;&#x5C11;&#xFF0C;&#x5E0C;&#x671B;&#x660E;&#x5E74;&#x6709;&#x673A;&#x4F1A;&#x518D;&#x53C2;&#x52A0;&#x3002;</p>
<p>&#x9644;&#xFF1A;Presentation Slides (Keynote template credit: <a href="https://breeswish.org/">breeswish</a>)</p>
<p><img src="/content/images/2016/11/Presentation_Page_1.png" alt="Penta-Hackathon 2016 &#x53C2;&#x8D5B;&#x603B;&#x7ED3;" loading="lazy"></p>
<p><img src="/content/images/2016/11/Presentation_Page_2.png" alt="Penta-Hackathon 2016 &#x53C2;&#x8D5B;&#x603B;&#x7ED3;" loading="lazy"></p>
<p><img src="/content/images/2016/11/Presentation_Page_3.png" alt="Penta-Hackathon 2016 &#x53C2;&#x8D5B;&#x603B;&#x7ED3;" loading="lazy"></p>
<p><img src="/content/images/2016/11/Presentation_Page_4.png" alt="Penta-Hackathon 2016 &#x53C2;&#x8D5B;&#x603B;&#x7ED3;" loading="lazy"></p>
<p><img src="/content/images/2016/11/Presentation_Page_5.png" alt="Penta-Hackathon 2016 &#x53C2;&#x8D5B;&#x603B;&#x7ED3;" loading="lazy"></p>
<p><img src="/content/images/2016/11/Presentation_Page_6.png" alt="Penta-Hackathon 2016 &#x53C2;&#x8D5B;&#x603B;&#x7ED3;" loading="lazy"></p>
<p>&#x6CE8;&#xFF1A;&#x56FE;&#x6444;&#x81EA; Microsoft APGC CSS&#xFF0C;&#x4E00;&#x4E2A;&#x9633;&#x5149;&#x707F;&#x70C2;&#x7684;&#x4E0B;&#x5348;&#x1F60A;&#x3002;</p>
<!--kg-card-end: markdown-->]]></content:encoded></item><item><title><![CDATA[贝叶斯定理和中文分词]]></title><description><![CDATA[<!--kg-card-begin: markdown--><h1 id="1">1 &#x524D;&#x8A00;</h1>
<h2 id="11">1.1 &#x4E2D;&#x6587;&#x5206;&#x8BCD;&#x95EE;&#x9898;</h2>
<p><strong>&#x4E2D;&#x6587;&#x5206;&#x8BCD;</strong>(Chinese Word Segmentation) &#x6307;&#x7684;&#x662F;&#x5C06;&#x4E00;&#x4E2A;&#x6C49;&#x5B57;&#x5E8F;&#x5217;&#x5207;&#x5206;&#x6210;&#x4E00;&#x4E2A;&#x4E2A;&#x5355;&#x72EC;&#x7684;&#x5355;&#x8BCD;&#xFF0C;&#x5C5E;&#x4E8E;&#x81EA;&#x7136;&#x8BED;&#x8A00;&#x5904;&#x7406;&#x7684;&#x8303;</p>]]></description><link>https://sxkdz.me/bayes-theorem-and-chinese-word-segmentation/</link><guid isPermaLink="false">60f547237767ec0d683e9e9f</guid><category><![CDATA[Chinese Word Segmentation]]></category><category><![CDATA[Bayes' Theorem]]></category><category><![CDATA[Search Engine]]></category><category><![CDATA[Probability Theory]]></category><category><![CDATA[Dynamic Programming]]></category><dc:creator><![CDATA[SXKDZ]]></dc:creator><pubDate>Wed, 05 Oct 2016 11:15:19 GMT</pubDate><content:encoded><![CDATA[<!--kg-card-begin: markdown--><h1 id="1">1 &#x524D;&#x8A00;</h1>
<h2 id="11">1.1 &#x4E2D;&#x6587;&#x5206;&#x8BCD;&#x95EE;&#x9898;</h2>
<p><strong>&#x4E2D;&#x6587;&#x5206;&#x8BCD;</strong>(Chinese Word Segmentation) &#x6307;&#x7684;&#x662F;&#x5C06;&#x4E00;&#x4E2A;&#x6C49;&#x5B57;&#x5E8F;&#x5217;&#x5207;&#x5206;&#x6210;&#x4E00;&#x4E2A;&#x4E2A;&#x5355;&#x72EC;&#x7684;&#x5355;&#x8BCD;&#xFF0C;&#x5C5E;&#x4E8E;&#x81EA;&#x7136;&#x8BED;&#x8A00;&#x5904;&#x7406;&#x7684;&#x8303;&#x7574;&#xFF0E;&#x5BF9;&#x4E8E;&#x4E2D;&#x6587;&#x641C;&#x7D22;&#x5F15;&#x64CE;&#x800C;&#x8A00;&#xFF0C;&#x5206;&#x8BCD;&#x662F;&#x5FC5;&#x4E0D;&#x53EF;&#x5C11;&#x7684;&#x4E00;&#x4E2A;&#x91CD;&#x8981;&#x73AF;&#x8282;&#xFF0E;&#x5728;&#x641C;&#x7D22;&#x5F15;&#x64CE;&#x54CD;&#x5E94;&#x7528;&#x6237;&#x7684;&#x641C;&#x7D22;&#x8BF7;&#x6C42;&#x65F6;&#xFF0C;&#x6700;&#x91CD;&#x8981;&#x7684;&#x5E76;&#x4E0D;&#x662F;&#x5448;&#x73B0;&#x51FA;&#x6240;&#x6709;&#x7F51;&#x9875;&#x7ED3;&#x679C;&#xFF08;&#x56E0;&#x4E3A;&#x6570;&#x91CF;&#x592A;&#x8FC7;&#x5E9E;&#x5927;&#xFF09;&#xFF0C;&#x800C;&#x662F;&#x5C06;&#x4E0E;&#x7528;&#x6237;&#x8F93;&#x5165;&#x7684;&#x5185;&#x5BB9;&#x6700;&#x76F8;&#x5173;&#x7684;&#x5185;&#x5BB9;&#x6392;&#x5217;&#x5728;&#x6700;&#x524D;&#xFF0C;&#x8FD9;&#x79F0;&#x4E3A;<strong>&#x76F8;&#x5173;&#x5EA6;&#x6392;&#x5E8F;</strong>&#xFF0E;&#x6CA1;&#x6709;&#x5206;&#x8BCD;&#x6280;&#x672F;&#x7684;&#x51FA;&#x73B0;&#xFF0C;&#x8BA1;&#x7B97;&#x673A;&#x5E76;&#x4E0D;&#x4F1A;&#x8BA4;&#x8BC6;&#x7528;&#x6237;&#x8F93;&#x5165;&#x7684;&#x53E5;&#x5B50;&#x4E2D;&#x54EA;&#x4E9B;&#x662F;&#x8BCD;&#x8BED;&#xFF0C;&#x8FD9;&#x6837;&#x641C;&#x7D22;&#x5F15;&#x64CE;&#x4E5F;&#x5C31;&#x65E0;&#x6CD5;&#x5DE5;&#x4F5C;&#xFF0E;</p>
<p>&#x6211;&#x4EEC;&#x77E5;&#x9053;&#xFF0C;&#x5BF9;&#x4E8E;&#x82F1;&#x6587;&#x6765;&#x8BF4;&#xFF0C;&#x5355;&#x8BCD;&#x662F;&#x81EA;&#x7136;&#x5730;&#x4EE5;&#x7A7A;&#x683C;&#x4F5C;&#x4E3A;&#x5206;&#x8282;&#x7B26;&#xFF0C;&#x800C;&#x4E2D;&#x6587;&#x5374;&#x5E76;&#x4E0D;&#x5982;&#x6B64;&#xFF0C;&#x5373;&#x4F7F;&#x6709;&#x53E5;&#x5B50;&#x3001;&#x6BB5;&#x843D;&#x4E4B;&#x95F4;&#x7684;&#x5212;&#x5206;&#xFF0C;&#x6211;&#x4EEC;&#x8FD8;&#x662F;&#x65E0;&#x6CD5;&#x76F4;&#x63A5;&#x627E;&#x5230;&#x8BCD;&#x8BED;&#x4E0E;&#x8BCD;&#x8BED;&#x4E4B;&#x95F4;&#x7684;&#x5206;&#x754C;&#x7B26;&#xFF0E;&#x4ECE;&#x5386;&#x53F2;&#x539F;&#x56E0;&#x4E0A;&#x5206;&#x6790;&#xFF0C;&#x8FD9;&#x662F;&#x56E0;&#x4E3A;&#x53E4;&#x4EE3;&#x6C49;&#x8BED;&#x9664;&#x4E86;&#x4E13;&#x6709;&#x540D;&#x8BCD;&#xFF0C;&#x8BCD;&#x8BED;&#x4EE5;&#x5355;&#x97F3;&#x8BCD;&#x5C45;&#x591A;&#xFF0C;&#x5E76;&#x4E0D;&#x9700;&#x8981;&#x7279;&#x522B;&#x7684;&#x5206;&#x8BCD;&#x4E66;&#x5199;&#xFF0C;&#x800C;&#x73B0;&#x4EE3;&#x6C49;&#x8BED;&#x4E2D;&#x590D;&#x97F3;&#x8BCD;&#x5C45;&#x591A;&#xFF0C;&#x4E00;&#x4E2A;&#x5B57;&#x4E0D;&#x518D;&#x7B49;&#x540C;&#x4E8E;&#x4E00;&#x4E2A;&#x8BCD;&#xFF0E;&#x5BF9;&#x6B64;&#x76F4;&#x89C2;&#x7684;&#x611F;&#x53D7;&#x662F;&#xFF0C;&#x7FFB;&#x8BD1;&#x4E00;&#x7BC7;&#x6587;&#x8A00;&#x6587;&#x7684;&#x5B57;&#x6570;&#x660E;&#x663E;&#x591A;&#x4E8E;&#x539F;&#x6587;&#xFF0E;</p>
<h2 id="12">1.2 &#x5F15;&#x5165;&#xFF1A;&#x62FC;&#x5199;&#x7EA0;&#x6B63;&#x4E0E;&#x8D1D;&#x53F6;&#x65AF;&#x5B9A;&#x7406;</h2>
<p>&#x5982;&#x4ECA;Word&#x7B49;&#x6587;&#x5B57;&#x5904;&#x7406;&#x8F6F;&#x4EF6;&#x90FD;&#x80FD;&#x591F;&#x5BF9;&#x7528;&#x6237;&#x8F93;&#x5165;&#x4E0D;&#x5B58;&#x5728;&#x7684;&#x5355;&#x8BCD;&#x8FDB;&#x884C;&#x7EA0;&#x6B63;&#xFF0C;&#x6BD4;&#x5982;&#x7528;&#x6237;&#x8F93;&#x5165;&#x4E86;<em>thew</em>&#xFF0C;&#x90A3;&#x4E48;&#x4ED6;&#x771F;&#x6B63;&#x8868;&#x8FBE;&#x7684;&#x53EF;&#x80FD;&#x662F;<em>the</em>&#x6216;&#x8005;<em>they</em>&#x7B49;&#xFF0C;&#x5BF9;&#x62FC;&#x5199;&#x8FDB;&#x884C;&#x7EA0;&#x6B63;&#x5C31;&#x8FD0;&#x7528;&#x4E86;&#x8D1D;&#x53F6;&#x65AF;&#x5B9A;&#x7406;&#xFF0E;&#x8FD9;&#x4E2A;&#x95EE;&#x9898;&#x7528;&#x5F62;&#x5F0F;&#x5316;&#x7684;&#x8BED;&#x8A00;&#x63CF;&#x8FF0;&#xFF1A;&#x8BB0;\(h_{i}\)&#x4E3A;&#x5BF9;&#x7528;&#x6237;&#x771F;&#x6B63;&#x60F3;&#x8F93;&#x5165;&#x7684;&#x5355;&#x8BCD;&#x8FDB;&#x884C;&#x7684;<strong>&#x5047;&#x8BBE;</strong>(hypothesis)&#xFF0C;&#x8FD9;&#x4E9B;&#x5047;&#x8BBE;\(h_1, h_2, \dots, h_n\)&#x90FD;&#x5C5E;&#x4E8E;&#x4E00;&#x4E2A;&#x6709;&#x9650;&#x800C;&#x4E14;&#x79BB;&#x6563;&#x7684;&#x7A7A;&#x95F4;\(H\)&#xFF08;&#x56E0;&#x4E3A;&#x5355;&#x8BCD;&#x7684;&#x603B;&#x6570;&#x662F;&#x6709;&#x9650;&#x7684;&#xFF09;&#xFF1B;\(D\)&#x4E3A;&#x7528;&#x6237;&#x5B9E;&#x9645;&#x8F93;&#x5165;&#x7684;&#x5355;&#x8BCD;&#xFF08;&#x89C2;&#x6D4B;&#x6570;&#x636E;&#xFF09;&#xFF0C;&#x90A3;&#x4E48;&#x8FD9;&#x4E2A;&#x95EE;&#x9898;&#x5C31;&#x53D8;&#x4E3A;&#x6C42;</p>
<p>$$<br>
P(h_i|D)<br>
$$</p>
<p>&#x6982;&#x7387;&#x4E2D;&#x6700;&#x5927;&#x7684;&#x4E00;&#x4E2A;&#xFF0E;<br>
&#x8FD0;&#x7528;&#x4E00;&#x6B21;&#x8D1D;&#x53F6;&#x65AF;&#x516C;&#x5F0F;&#xFF0C;&#x53EF;&#x4EE5;&#x5F97;&#x5230;&#xFF1A;</p>
<p>$$<br>
P(h_i | D) = \frac{P(h_i) \cdot P(D | h_i)}{P(D)}<br>
$$</p>
<p>&#x5BF9;&#x4E8E;&#x4E0D;&#x540C;&#x7684;&#x5177;&#x4F53;&#x5047;&#x8BBE;\(h_1, h_2, \dots, h_n\)&#xFF0C;\(P(D)\)&#x90FD;&#x662F;&#x4E00;&#x6837;&#x7684;&#xFF0C;&#x56E0;&#x6B64;&#x5728;&#x6BD4;&#x8F83;&#x4E0D;&#x540C;&#x7684;\(P(h_i | D)\)&#x65F6;&#x53EF;&#x4EE5;&#x5FFD;&#x7565;&#x5B83;&#xFF0C;&#x5373;&#x53EA;&#x9700;&#x8981;&#x77E5;&#x9053;&#xFF1A;</p>
<p>$$<br>
P(h_i | D) \propto P(h_i) \cdot P(D | h_i)<br>
$$</p>
<p>&#x8FD9;&#x4E2A;&#x516C;&#x5F0F;&#x7684;&#x62BD;&#x8C61;&#x610F;&#x4E49;&#x662F;&#xFF1A;&#x5BF9;&#x4E8E;&#x7ED9;&#x5B9A;&#x89C2;&#x6D4B;&#x6570;&#x636E;&#xFF0C;&#x4E00;&#x4E2A;&#x5047;&#x8BBE;&#x7684;&#x597D;&#x574F;&#x53D6;&#x51B3;&#x4E8E;&#x8FD9;&#x4E2A;&#x5047;&#x8BBE;&#x672C;&#x8EAB;&#x72EC;&#x7ACB;&#x7684;&#x53EF;&#x80FD;&#x6027;&#x5927;&#x5C0F;&#xFF08;<strong>&#x5148;&#x9A8C;&#x6982;&#x7387;</strong>, prior&#xFF09;&#x548C;&#x8FD9;&#x4E2A;&#x5047;&#x8BBE;&#x751F;&#x6210;&#x89C2;&#x6D4B;&#x5230;&#x6570;&#x636E;&#x7684;&#x53EF;&#x80FD;&#x6027;&#x5927;&#x5C0F;&#xFF08;<strong>&#x4F3C;&#x7136;</strong>, likelihood&#xFF09;&#x7684;&#x4E58;&#x79EF;&#xFF0E;&#x5177;&#x4F53;&#x5230;<em>thew</em>&#x8FD9;&#x4E2A;&#x4F8B;&#x5B50;&#x4E0A;&#x6765;&#x8BF4;&#xFF0C;&#x7528;&#x6237;&#x5B9E;&#x9645;&#x60F3;&#x8F93;&#x5165;<em>the</em>&#x7684;&#x53EF;&#x80FD;&#x6027;&#x5927;&#x5C0F;&#x53D6;&#x51B3;&#x4E8E;<em>the</em>&#x672C;&#x8EAB;&#x5728;&#x8BCD;&#x6C47;&#x8868;&#x4E2D;&#x88AB;&#x4F7F;&#x7528;&#x7684;&#x53EF;&#x80FD;&#x6027;&#xFF08;&#x9891;&#x7E41;&#x7A0B;&#x5EA6;&#xFF09;&#x5927;&#x5C0F;&#xFF08;&#x5148;&#x9A8C;&#x6982;&#x7387;&#xFF09;&#x548C;&#x60F3;&#x8F93;&#x5165;<em>the</em>&#x5374;&#x8F93;&#x5165;&#x6210;<em>thew</em>&#x7684;&#x53EF;&#x80FD;&#x6027;&#x5927;&#x5C0F;&#xFF08;&#x4F3C;&#x7136;&#xFF09;&#x7684;&#x4E58;&#x79EF;&#xFF0E;</p>
<h1 id="2">2 &#x8D1D;&#x53F6;&#x65AF;&#x5B9A;&#x7406;&#x5728;&#x5206;&#x8BCD;&#x95EE;&#x9898;&#x4E2D;&#x7684;&#x5E94;&#x7528;</h1>
<h2 id="21">2.1 &#x4E2D;&#x6587;&#x5206;&#x8BCD;&#x5F62;&#x5F0F;&#x5316;&#x63CF;&#x8FF0;</h2>
<p>&#x5206;&#x8BCD;&#x95EE;&#x9898;&#x5F62;&#x5F0F;&#x5316;&#x7684;&#x63CF;&#x8FF0;&#x662F;&#xFF1A;&#x4EE4;\(X\)&#x4E3A;&#x5B57;&#x4E32;&#xFF08;&#x53E5;&#x5B50;&#xFF09;&#xFF0C;\(Y\)&#x4E3A;&#x8BCD;&#x4E32;&#xFF08;&#x4E00;&#x79CD;&#x7279;&#x5B9A;&#x7684;&#x5206;&#x8BCD;&#x5047;&#x8BBE;&#xFF09;&#xFF0C;&#x95EE;&#x9898;&#x7684;&#x89E3;&#x5373;&#x4E3A;&#x4F7F;&#x5F97;\(P(Y|X)\)&#x6700;&#x5927;&#x7684;\(Y\)&#xFF0E;&#x4F7F;&#x7528;&#x4E00;&#x6B21;&#x8D1D;&#x53F6;&#x65AF;&#x516C;&#x5F0F;&#xFF1A;</p>
<p>$$<br>
P(Y | X) \propto P(Y) \cdot P(X | Y)<br>
$$</p>
<p>&#x7528;&#x81EA;&#x7136;&#x8BED;&#x8A00;&#x6765;&#x8BF4;&#x5C31;&#x662F;&#x8FD9;&#x79CD;&#x5206;&#x8BCD;&#x65B9;&#x5F0F;&#xFF08;&#x8BCD;&#x4E32;&#xFF09;&#x7684;&#x53EF;&#x80FD;&#x6027;&#x4E58;&#x4EE5;&#x8FD9;&#x4E2A;&#x8BCD;&#x4E32;&#x751F;&#x6210;&#x53E5;&#x5B50;&#x7684;&#x53EF;&#x80FD;&#x6027;&#xFF0E;&#x8FDB;&#x4E00;&#x6B65;&#x53EF;&#x4EE5;&#x770B;&#x5230;&#xFF1A;<strong>&#x53EF;&#x4EE5;&#x8FD1;&#x4F3C;&#x5730;&#x5C06;\(P(X | Y)\)&#x770B;&#x4F5C;&#x662F;&#x6052;&#x7B49;&#x4E8E;\(1\)&#x7684;</strong>&#xFF0C;&#x56E0;&#x4E3A;&#x4EFB;&#x4F55;&#x4E00;&#x79CD;&#x5206;&#x8BCD;&#x65B9;&#x5F0F;&#x90FD;&#x53EF;&#x4EE5;&#x7CBE;&#x786E;&#x5730;&#x751F;&#x6210;&#x4E00;&#x4E2A;&#x53E5;&#x5B50;&#x3002;&#x56E0;&#x6B64;&#x53EA;&#x8981;&#x5BFB;&#x627E;&#x4E00;&#x79CD;&#x5206;&#x8BCD;&#x65B9;&#x5F0F;&#x4F7F;&#x5F97;&#x8BCD;&#x4E32;&#x7684;&#x6982;&#x7387;&#x6700;&#x5927;&#xFF0E;</p>
<h2 id="22n">2.2 \(N\)&#x5143;&#x8BED;&#x8A00;&#x6A21;&#x578B;&#x4E0E;&#x5C40;&#x9650;</h2>
<p>&#x5BF9;&#x4E8E;&#x4E00;&#x4E2A;&#x8BCD;&#x4E32;\(W_1, W_2, \dots , W_n\)&#xFF0C;&#x5982;&#x4F55;&#x8BA1;&#x7B97;&#x5176;&#x53EF;&#x80FD;&#x6027;&#x5462;&#xFF1F;&#x6839;&#x636E;&#x8054;&#x5408;&#x6982;&#x7387;&#x516C;&#x5F0F;&#x5C55;&#x5F00;&#xFF1A;</p>
<p>$$<br>
P(W_1, W_2, \dots, W_n) = P(W_1) \cdot P(W_2 | W_1) \cdot \ldots \cdot P(W_n | W_{n - 1}, \dots, W_1)<br>
$$</p>
<p>&#x4E8E;&#x662F;&#xFF0C;&#x901A;&#x8FC7;&#x4E00;&#x7CFB;&#x5217;&#x7684;&#x6761;&#x4EF6;&#x6982;&#x7387;&#xFF08;&#x7B49;&#x53F7;&#x53F3;&#x8FB9;&#xFF09;&#x7684;&#x4E58;&#x79EF;&#x6765;&#x6C42;&#x6574;&#x4E2A;&#x8054;&#x5408;&#x6982;&#x7387;&#xFF0E;&#x6CE8;&#x610F;&#x5230;&#x7B49;&#x53F7;&#x53F3;&#x8FB9;&#x6700;&#x540E;&#x4E00;&#x9879;&#xFF0C;\(W_n\)&#x8FD9;&#x4E2A;&#x5355;&#x8BCD;&#x4F9D;&#x8D56;&#x4E8E;&#x5B83;&#x524D;\(n - 1\)&#x4E2A;&#x5355;&#x8BCD;&#xFF0C;&#x79F0;&#x4E3A;\(N\)&#x5143;&#x8BED;&#x8A00;&#x6A21;&#x578B;(\(N\)-gram)&#xFF0E;</p>
<p>&#x5BF9;&#x4E8E;&#x8FD9;&#x7C7B;&#x95EE;&#x9898;&#xFF0C;&#x6709;&#x4E00;&#x4E9B;&#x7F3A;&#x9677;&#xFF1A;</p>
<ol>
<li>&#x53C2;&#x6570;&#x7A7A;&#x95F4;&#x8FC7;&#x5927;&#xFF0C;&#x4E0D;&#x53EF;&#x80FD;&#x5B9E;&#x7528;&#x5316;&#xFF1A;<br>
&#x5728;&#x4F9D;&#x9760;&#x6982;&#x7387;&#x7EDF;&#x8BA1;&#x6A21;&#x578B;&#x4E2D;&#x7684;&#x5206;&#x8BCD;&#x6280;&#x672F;&#x662F;&#x4F9D;&#x8D56;&#x8BED;&#x6599;&#x5E93;&#x7684;&#x6570;&#x636E;&#x5F97;&#x51FA;&#x5206;&#x8BCD;&#x65B9;&#x5F0F;&#x7684;&#x53EF;&#x80FD;&#x6027;&#xFF0C;&#x7136;&#x800C;&#x8BED;&#x6599;&#x5E93;&#x518D;&#x5927;&#x4E5F;&#x65E0;&#x6CD5;&#x7EDF;&#x8BA1;&#x51FA;&#x6709;&#x8BF4;&#x670D;&#x529B;&#x7684;\(P(W_n | W_{n - 1}, W_{n - 2}, \dots, W_1)\)&#x503C;&#xFF0E;</li>
<li><strong>&#x6570;&#x636E;&#x7A00;&#x758F;</strong>&#xFF08;&#x4E5F;&#x79F0;<strong>&#x9AD8;&#x7EF4;&#x8BC5;&#x5492;</strong>&#xFF09;&#xFF1A;<br>
&#x5F53;&#x6570;&#x636E;&#x7A7A;&#x95F4;&#x7EF4;&#x5EA6;&#x589E;&#x52A0;&#x65F6;&#xFF0C;&#x7A7A;&#x95F4;&#x7684;&#x4F53;&#x79EF;&#x63D0;&#x9AD8;&#x592A;&#x5FEB;&#x800C;&#x53EF;&#x7528;&#x6570;&#x636E;&#x53D8;&#x5F97;&#x7A00;&#x758F;&#xFF0E;&#x901A;&#x5E38;&#x60C5;&#x51B5;&#x4E0B;&#xFF0C;&#x4E3A;&#x4E86;&#x83B7;&#x5F97;&#x5728;&#x7EDF;&#x8BA1;&#x5B66;&#x4E0A;&#x6B63;&#x786E;&#x5E76;&#x4E14;&#x6709;&#x53EF;&#x9760;&#x7684;&#x7ED3;&#x679C;&#xFF0C;&#x7528;&#x6765;&#x652F;&#x6491;&#x8FD9;&#x4E00;&#x7ED3;&#x679C;&#x6240;&#x9700;&#x8981;&#x7684;&#x6570;&#x636E;&#x91CF;&#x901A;&#x5E38;&#x968F;&#x7740;&#x7EF4;&#x6570;&#x7684;&#x63D0;&#x9AD8;&#x800C;&#x5448;&#x6307;&#x6570;&#x7EA7;&#x589E;&#x957F;&#xFF0E;&#x800C;&#x4E14;&#xFF0C;&#x5728;&#x7EC4;&#x7EC7;&#x548C;&#x641C;&#x7D22;&#x6570;&#x636E;&#x65F6;&#x4E5F;&#x6709;&#x8D56;&#x4E8E;&#x68C0;&#x6D4B;&#x5BF9;&#x8C61;&#x533A;&#x57DF;&#xFF0C;&#x8FD9;&#x4E9B;&#x533A;&#x57DF;&#x4E2D;&#x7684;&#x5BF9;&#x8C61;&#x901A;&#x8FC7;&#x76F8;&#x4F3C;&#x5EA6;&#x5C5E;&#x6027;&#x800C;&#x5F62;&#x6210;&#x5206;&#x7EC4;&#xFF0E;&#x7136;&#x800C;&#x5728;&#x9AD8;&#x7EF4;&#x7A7A;&#x95F4;&#x4E2D;&#xFF0C;&#x6240;&#x6709;&#x7684;&#x6570;&#x636E;&#x90FD;&#x5F88;&#x7A00;&#x758F;&#xFF0C;&#x4ECE;&#x5F88;&#x591A;&#x89D2;&#x5EA6;&#x770B;&#x90FD;&#x4E0D;&#x76F8;&#x4F3C;&#xFF0C;&#x56E0;&#x800C;&#x5E73;&#x5E38;&#x4F7F;&#x7528;&#x7684;&#x6570;&#x636E;&#x7EC4;&#x7EC7;&#x7B56;&#x7565;&#x53D8;&#x5F97;&#x6781;&#x5176;&#x4F4E;&#x6548;&#xFF0E;</li>
</ol>
<h2 id="23">2.3 &#x9A6C;&#x5C14;&#x79D1;&#x592B;&#x5047;&#x8BBE;</h2>
<p>&#x4E3A;&#x4E86;&#x7F13;&#x89E3;&#x8FD9;&#x4E9B;&#x7F3A;&#x9677;&#xFF0C;&#x53EF;&#x4EE5;&#x5047;&#x8BBE;&#x53E5;&#x5B50;&#x4E2D;&#x4E00;&#x4E2A;&#x8BCD;&#x7684;&#x51FA;&#x73B0;&#x4EC5;&#x4EC5;&#x4F9D;&#x8D56;&#x4E8E;&#x5B83;&#x524D;&#x9762;&#x6709;&#x9650;&#x7684;\(k\)&#x4E2A;&#x8BCD;&#xFF3B;\(k\)&#x4E00;&#x822C;&#x4E0D;&#x8D85;&#x8FC7;\(3\)&#xFF0C;&#x5982;&#x679C;&#x4EC5;&#x4F9D;&#x8D56;&#x4E8E;&#x524D;&#x9762;&#x4E00;&#x4E2A;&#x8BCD;&#xFF0C;&#x5C31;&#x79F0;&#x4E3A;\(2\)&#x5143;&#x8BED;&#x8A00;&#x6A21;&#x578B;(\(2\)-gram)&#xFF0C;\(2\)&#x5143;&#x8BED;&#x8A00;&#x6A21;&#x578B;&#x4E5F;&#x79F0;<strong>&#x9A6C;&#x5C14;&#x79D1;&#x592B;&#x5047;&#x8BBE;</strong>&#x6216;**&#x201C;&#x6709;&#x9650;&#x5730;&#x5E73;&#x7EBF;&#x201D;&#x5047;&#x8BBE;**&#xFF0C;&#x540C;&#x7406;&#x6709;\(3\)&#x5143;&#x8BED;&#x8A00;&#x6A21;&#x578B;(\(3\)-gram) &#x7B49;&#xFF3D;&#xFF0E;</p>
<p>&#x5F15;&#x5165;&#x9A6C;&#x5C14;&#x79D1;&#x592B;&#x5047;&#x8BBE;&#x540E;&#xFF0C;&#x53EF;&#x4EE5;&#x5F97;&#x5230;&#xFF1A;</p>
<p>$$<br>
P(W_1, W_2, \dots, W_n) = P(W_1) \cdot P(W_2 | W_1) \cdot P(W_3 | W_2) \cdot \ldots \cdot P(W_n | W_{n - 1})<br>
$$</p>
<p>&#x8FD9;&#x6837;&#x7EDF;&#x8BA1;\(P(W_i | W_{i - 1})\)&#x5C31;&#x4E0D;&#x518D;&#x53D7;&#x5230;&#x6570;&#x636E;&#x7A00;&#x758F;&#x95EE;&#x9898;&#x7684;&#x56F0;&#x6270;&#x4E86;&#xFF0E;</p>
<p>&#x5982;&#x4F55;&#x4FDD;&#x8BC1;&#x5176;&#x4E2D;&#x4EFB;&#x610F;&#x4E00;&#x4E2A;&#x5355;&#x8BCD;&#x51FA;&#x73B0;&#x7684;&#x6982;&#x7387;&#x53EA;&#x53D7;&#x5230;&#x5B83;&#x524D;&#x9762;&#x7684;\(2\)&#x4E2A;&#x6216;\(3\)&#x4E2A;&#x5355;&#x8BCD;&#x7684;&#x5F71;&#x54CD;&#x5462;&#xFF1F;&#x522B;&#x8BF4;\(3\)&#x4E2A;&#xFF0C;&#x6709;&#x65F6;&#x5019;&#x4E00;&#x4E2A;&#x5355;&#x8BCD;&#x7684;&#x6982;&#x7387;&#x53D7;&#x5230;&#x4E0A;&#x4E00;&#x53E5;&#x8BDD;&#x7684;&#x5F71;&#x54CD;&#x90FD;&#x662F;&#x7EDD;&#x5BF9;&#x53EF;&#x80FD;&#x7684;&#xFF0E;&#x90A3;&#x4E48;&#x4E3A;&#x4EC0;&#x4E48;&#x8FD9;&#x4E2A;&#x5047;&#x8BBE;&#x5728;&#x5B9E;&#x9645;&#x4E2D;&#x7684;&#x8868;&#x73B0;&#x5374;&#x4E0D;&#x6BD4;&#x51B3;&#x7B56;&#x6811;&#x5DEE;&#x5462;&#xFF1F;&#x6709;&#x4EBA;&#x5BF9;&#x6B64;&#x63D0;&#x51FA;&#x4E86;&#x4E00;&#x4E2A;&#x7406;&#x8BBA;&#x89E3;&#x91CA;&#xFF0C;&#x5E76;&#x4E14;&#x5EFA;&#x7ACB;&#x4E86;&#x4EC0;&#x4E48;&#x65F6;&#x5019;&#x6734;&#x7D20;&#x8D1D;&#x53F6;&#x65AF;&#x7684;&#x6548;&#x679C;&#x80FD;&#x591F;&#x7B49;&#x4EF7;&#x4E8E;&#x975E;&#x6734;&#x7D20;&#x8D1D;&#x53F6;&#x65AF;&#x7684;&#x5145;&#x8981;&#x6761;&#x4EF6;&#xFF0E;&#x8FD9;&#x4E2A;&#x89E3;&#x91CA;&#x7684;&#x6838;&#x5FC3;&#x5C31;&#x662F;&#xFF1A;<strong>&#x6709;&#x4E9B;&#x72EC;&#x7ACB;&#x5047;&#x8BBE;&#x5728;&#x5404;&#x4E2A;&#x5206;&#x7C7B;&#x4E4B;&#x95F4;&#x7684;&#x5206;&#x5E03;&#x90FD;&#x662F;&#x5747;&#x5300;&#x7684;&#xFF0C;&#x6240;&#x4EE5;&#x5BF9;&#x4E8E;&#x4F3C;&#x7136;&#x7684;&#x76F8;&#x5BF9;&#x5927;&#x5C0F;&#x4E0D;&#x4EA7;&#x751F;&#x5F71;&#x54CD;&#xFF1B;&#x5373;&#x4FBF;&#x4E0D;&#x662F;&#x5982;&#x6B64;&#xFF0C;&#x4E5F;&#x6709;&#x5F88;&#x5927;&#x7684;&#x53EF;&#x80FD;&#x6027;&#x5404;&#x4E2A;&#x72EC;&#x7ACB;&#x5047;&#x8BBE;&#x6240;&#x4EA7;&#x751F;&#x7684;&#x6D88;&#x6781;&#x5F71;&#x54CD;&#x6216;&#x79EF;&#x6781;&#x5F71;&#x54CD;&#x4E92;&#x76F8;&#x62B5;&#x6D88;&#xFF0C;&#x6700;&#x7EC8;&#x5BFC;&#x81F4;&#x7ED3;&#x679C;&#x53D7;&#x5230;&#x7684;&#x5F71;&#x54CD;&#x4E0D;&#x5927;&#xFF0E;</strong></p>
<p>&#x4E8B;&#x5B9E;&#x4E0A;&#xFF0C;&#x7EDF;&#x8BA1;&#x673A;&#x5668;&#x5B66;&#x4E60;&#x65B9;&#x6CD5;&#x6240;&#x7EDF;&#x8BA1;&#x7684;&#x4E1C;&#x897F;&#x5F80;&#x5F80;&#x5904;&#x4E8E;&#x76F8;&#x5F53;<strong>&#x8868;&#x5C42;</strong>(shallow)&#x7684;&#x5C42;&#x9762;&#xFF0C;&#x5728;&#x8FD9;&#x4E2A;&#x5C42;&#x9762;&#x673A;&#x5668;&#x5B66;&#x4E60;&#x53EA;&#x80FD;&#x770B;&#x5230;&#x4E00;&#x4E9B;&#x975E;&#x5E38;&#x8868;&#x9762;&#x7684;&#x73B0;&#x8C61;&#xFF0E;&#x8D8A;&#x662F;&#x5F80;&#x8868;&#x5C42;&#x53BB;&#xFF0C;&#x4E16;&#x754C;&#x5C31;&#x8D8A;&#x662F;&#x7E41;&#x590D;&#x591A;&#x53D8;&#xFF0E;&#x4ECE;&#x673A;&#x5668;&#x5B66;&#x4E60;&#x7684;&#x89D2;&#x5EA6;&#x6765;&#x8BF4;&#xFF0C;<strong>&#x7279;&#x5F81;</strong>(feature) &#x5C31;&#x8D8A;&#x591A;&#xFF0C;&#x6210;&#x767E;&#x4E0A;&#x5343;&#x7EF4;&#x5EA6;&#x90FD;&#x662F;&#x53EF;&#x80FD;&#x7684;&#xFF0E;&#x7279;&#x5F81;&#x4E00;&#x591A;&#xFF0C;&#x6570;&#x636E;&#x4F1A;&#x53D8;&#x5F97;&#x7A00;&#x758F;&#xFF0C;&#x4EE5;&#x81F3;&#x4E8E;&#x65E0;&#x6CD5;&#x4F7F;&#x7528;&#xFF0E;&#x800C;&#x4EBA;&#x7C7B;&#x7684;&#x89C2;&#x5BDF;&#x6C34;&#x5E73;&#x663E;&#x7136;&#x6BD4;&#x673A;&#x5668;&#x5B66;&#x4E60;&#x7684;&#x89C2;&#x5BDF;&#x6C34;&#x5E73;&#x8981;&#x66F4;&#x6DF1;&#x5165;&#x4E00;&#x4E9B;&#xFF0C;&#x4E3A;&#x4E86;&#x907F;&#x514D;&#x6570;&#x636E;&#x7A00;&#x758F;&#x6211;&#x4EEC;&#x4E0D;&#x65AD;&#x5730;&#x53D1;&#x660E;&#x5404;&#x79CD;&#x88C5;&#x7F6E;&#xFF08;&#x6700;&#x5178;&#x578B;&#x5C31;&#x662F;&#x663E;&#x5FAE;&#x955C;&#xFF09;&#x6765;&#x5E2E;&#x52A9;&#x6211;&#x4EEC;&#x76F4;&#x63A5;&#x6DF1;&#x5165;&#x5230;&#x66F4;&#x6DF1;&#x5C42;&#x7684;&#x4E8B;&#x7269;&#x5C42;&#x9762;&#x53BB;&#x89C2;&#x5BDF;&#x66F4;&#x672C;&#x8D28;&#x7684;&#x8054;&#x7CFB;&#xFF0C;&#x800C;&#x4E0D;&#x662F;&#x5728;&#x6D45;&#x5C42;&#x5BF9;&#x8868;&#x9762;&#x73B0;&#x8C61;&#x4F5C;&#x7EDF;&#x8BA1;&#x5F52;&#x7EB3;&#xFF0E;</p>
<h2 id="24">2.4 &#x5206;&#x8BCD;&#x6848;&#x4F8B;&#xFF1A;&#x6734;&#x7D20;&#x8D2A;&#x5A6A;&#x65B9;&#x6CD5;&#x4E0E;&#x8D1D;&#x53F6;&#x65AF;&#x5B9A;&#x7406;&#x7684;&#x6BD4;&#x8F83;</h2>
<p>&#x4E0B;&#x9762;&#x901A;&#x8FC7;&#x4E00;&#x4E2A;&#x4F8B;&#x5B50;&#x6765;&#x4ECB;&#x7ECD;&#x8D1D;&#x53F6;&#x65AF;&#x5B9A;&#x7406;&#x4E0E;&#x6734;&#x7D20;&#x8D2A;&#x5A6A;&#x6CD5;&#x5206;&#x8BCD;&#x76F8;&#x6BD4;&#x7684;&#x4F18;&#x70B9;&#xFF0E;&#x5047;&#x8BBE;&#x9700;&#x8981;&#x5206;&#x8BCD;&#x7684;&#x53E5;&#x5B50;&#x662F;&#x201C;&#x4E0A;&#x7F51;&#x7AD9;&#x8054;&#x76DF;&#x52A0;&#x5165;&#x6211;&#x4EEC;&#x201D;&#xFF0E;</p>
<p>&#x6309;&#x7167;&#x4ECE;&#x5DE6;&#x5230;&#x53F3;&#x7684;&#x8D2A;&#x5A6A;&#x65B9;&#x6CD5;&#x5206;&#x8BCD;&#xFF08;&#x5373;<strong>&#x6700;&#x957F;&#x5339;&#x914D;&#x673A;&#x68B0;&#x5206;&#x8BCD;</strong>&#xFF0C;&#x901A;&#x8FC7;&#x201C;&#x67E5;&#x5B57;&#x5178;&#x201D;&#x5F97;&#x5230;&#x6BCF;&#x6B21;&#x6700;&#x957F;&#x80FD;&#x591F;&#x5212;&#x5206;&#x7684;&#x5355;&#x8BCD;&#xFF09;&#xFF0C;&#x90A3;&#x4E48;&#x201C;&#x4E0A;&#x7F51;&#x201D;&#x9996;&#x5148;&#x4F1A;&#x88AB;&#x5212;&#x5206;&#x51FA;&#x6765;&#xFF0C;&#x63A5;&#x7740;&#x5BF9;&#x4E8E;&#x5269;&#x4E0B;&#x7684;&#x90E8;&#x5206;&#x201C;&#x7AD9;&#x8054;&#x76DF;&#x201D;&#xFF0C;&#x6700;&#x7406;&#x60F3;&#x7684;&#x60C5;&#x51B5;&#x662F;&#x5212;&#x5206;&#x4E3A;&#x201C;&#x7AD9;&#x201D;&#x548C;&#x201C;&#x8054;&#x76DF;&#x201D;&#xFF0C;&#x6700;&#x540E;&#x662F;&#x201C;&#x52A0;&#x5165;&#x201D;&#x548C;&#x201C;&#x6211;&#x4EEC;&#x201D;&#xFF0E;&#x8FD9;&#x6837;&#x7684;&#x60C5;&#x51B5;&#x4E0B;&#xFF0C;&#x8FD9;&#x4E2A;&#x53E5;&#x5B50;&#x5C31;&#x88AB;&#x5206;&#x8BCD;&#x4E3A;&#x201C;&#x4E0A;&#x7F51;| &#x7AD9;| &#x8054;&#x76DF;| &#x52A0;&#x5165;| &#x6211;&#x4EEC;&#x201D;&#xFF0C;&#x8FD9;&#x663E;&#x7136;&#x4E0D;&#x662F;&#x6B63;&#x786E;&#x7684;&#x7ED3;&#x679C;&#xFF0E;</p>
<p>&#x5229;&#x7528;&#x8D1D;&#x53F6;&#x65AF;&#x5B9A;&#x7406;&#xFF0C;&#x4E0D;&#x59A8;&#x8BBE;\(X\)&#x4E3A;&#x53E5;&#x5B50;&#x201C;&#x4E0A;&#x7F51;&#x7AD9;&#x8054;&#x76DF;&#x52A0;&#x5165;&#x4EEC;&#x201D;&#xFF0C;\(Y_i\)&#x4E3A;&#x4E00;&#x79CD;&#x5206;&#x8BCD;&#x65B9;&#x6848;&#xFF0C;&#x6BD4;&#x5982;&#x201C;&#x4E0A; | &#x7F51;&#x7AD9;&#x8054;&#x76DF; | &#x52A0;&#x5165; | &#x6211;&#x4EEC;&#x201D;&#x7B49;&#xFF0C;&#x9700;&#x8981;&#x627E;&#x5230;&#x4E00;&#x4E2A;\(Y_i\)&#x4F7F;&#x5F97;\(P(Y | X)\)&#x6700;&#x5927;&#xFF0E;&#x5047;&#x8BBE;&#x73B0;&#x5728;&#x6709;&#x4E00;&#x4E2A;&#x5E9E;&#x5927;&#x7684;&#x8BED;&#x6599;&#x5E93;&#xFF0C;&#x5305;&#x542B;&#x5927;&#x91CF;&#x5E38;&#x89C1;&#x5355;&#x8BCD;&#x5728;&#x6587;&#x7AE0;&#x4E2D;&#x7684;&#x51FA;&#x73B0;&#x6B21;&#x6570;&#xFF0E;&#x90A3;&#x4E48;&#x5BF9;&#x4E8E;&#x4E0A;&#x8FF0;&#x8D2A;&#x5A6A;&#x6CD5;&#x7684;&#x5206;&#x8BCD;&#x7ED3;&#x679C;&#xFF1A;&#x9996;&#x5148;&#x5206;&#x6790;&#x201C;&#x4E0A;&#x7F51;&#x201D;&#x2013;&#x201C;&#x7AD9;&#x201D;&#x8FD9;&#x4E00;&#x5355;&#x8BCD;&#x5BF9;&#xFF0C;&#x663E;&#x7136;&#x8FD9;&#x4E00;&#x5BF9;&#x5355;&#x8BCD;&#x5BF9;&#x4E0D;&#x7B26;&#x5408;&#x4E2D;&#x6587;&#x7684;&#x4E60;&#x60EF;&#xFF0C;&#x6545;&#x5176;&#x6982;&#x7387;&#x4E3A;0&#xFF08;&#x901A;&#x5E38;&#x60C5;&#x51B5;&#x4E0B;&#x5728;&#x7EDF;&#x8BA1;&#x8BED;&#x8A00;&#x6A21;&#x578B;&#x4E2D;&#x4E0D;&#x4F1A;&#x8BBE;&#x7F6E;&#x4E3A;0&#xFF0C;&#x800C;&#x662F;&#x6309;&#x7167;&#x5E73;&#x6ED1;&#x7684;&#x539F;&#x5219;&#x8BBE;&#x4E3A;&#x4E00;&#x4E2A;&#x8DB3;&#x591F;&#x5C0F;&#x7684;&#x503C;&#xFF09;&#xFF0C;&#x540C;&#x7406;&#xFF0C;&#x5BF9;&#x4E8E;&#x201C;&#x7AD9;&#x201D;&#x2013;&#x201C;&#x8054;&#x76DF;&#x201D;&#x4E5F;&#x662F;&#x4E00;&#x6837;&#xFF0E;&#x5982;&#x679C;&#x66F4;&#x6362;&#x4E00;&#x79CD;&#x5212;&#x5206;&#xFF0C;&#x6309;&#x7167;&#x201C;&#x4E0A;| &#x7F51;&#x7AD9;| &#x8054;&#x76DF;&#x201D;&#xFF0C;&#x201C;&#x4E0A;&#x201D;&#x2013;&#x201C;&#x7F51;&#x7AD9;&#x201D;&#x8FD9;&#x4E2A;&#x8BCD;&#x7EC4;&#x7ECF;&#x5E38;&#x51FA;&#x73B0;&#xFF0C;&#x80FD;&#x591F;&#x5728;&#x7EDF;&#x8BA1;&#x6587;&#x672C;&#x4E2D;&#x627E;&#x5230;&#x5B83;&#x7684;&#x6982;&#x7387;&#xFF0C;&#x800C;&#x201C;&#x7F51;&#x7AD9;&#x201D;&#x2013;&#x201C;&#x8054;&#x76DF;&#x201D;&#x4E5F;&#x662F;&#x5982;&#x6B64;&#xFF0C;&#x8FD9;&#x6837;&#x8D1D;&#x53F6;&#x65AF;&#x5B9A;&#x7406;&#x5C31;&#x80FD;&#x4F7F;&#x5F97;&#x540E;&#x9762;&#x8FD9;&#x4E00;&#x79CD;&#x66F4;&#x7B26;&#x5408;&#x4E2D;&#x6587;&#x4E60;&#x60EF;&#x548C;&#x76F4;&#x89C9;&#x7684;&#x5206;&#x8BCD;&#x65B9;&#x6848;&#x80DC;&#x51FA;&#xFF0E;</p>
<h1 id="3">3 &#x4F18;&#x5316;&#xFF1A;&#x52A8;&#x6001;&#x89C4;&#x5212;&#x4E0E;&#x8D1D;&#x53F6;&#x65AF;&#x5B9A;&#x7406;</h1>
<h2 id="31">3.1 &#x65F6;&#x95F4;&#x590D;&#x6742;&#x5EA6;&#x5206;&#x6790;</h2>
<p>&#x4E0B;&#x9762;&#x8FDB;&#x4E00;&#x6B65;&#x5206;&#x6790;&#x8FD9;&#x4E2A;&#x95EE;&#x9898;&#x7684;&#x5177;&#x4F53;&#x64CD;&#x4F5C;&#xFF0E;&#x5E94;&#x7528;&#x8D1D;&#x53F6;&#x65AF;&#x5B9A;&#x7406;&#x540E;&#xFF0C;&#x9700;&#x8981;&#x505A;&#x7684;&#x5C31;&#x662F;&#x679A;&#x4E3E;&#x53E5;&#x5B50;&#x7684;&#x5404;&#x79CD;&#x5212;&#x5206;&#xFF0C;&#x7136;&#x540E;&#x5728;&#x8BED;&#x6599;&#x5E93;&#x4E2D;&#x5BFB;&#x627E;&#x5404;&#x5212;&#x5206;&#x7684;&#x7EDF;&#x8BA1;&#x6982;&#x7387;&#xFF0C;&#x8FDB;&#x800C;&#x6C42;&#x51FA;&#x5728;\(2\)&#x5143;&#x8BED;&#x8A00;&#x6A21;&#x578B;&#x4E0B;&#x6982;&#x7387;&#x6700;&#x5927;&#x7684;&#x5207;&#x5206;&#xFF0C;&#x5373;&#x6700;&#x7EC8;&#x7684;&#x5206;&#x8BCD;&#x7ED3;&#x679C;&#xFF0E;&#x7136;&#x800C;&#xFF0C;&#x5BF9;&#x4E8E;&#x4E00;&#x4E2A;&#x957F;&#x5EA6;&#x4E3A;\(n\)&#x7684;&#x53E5;&#x5B50;&#xFF08;&#x5373;&#x542B;&#x6709;\(n\)&#x4E2A;&#x6C49;&#x5B57;&#xFF09;&#xFF0C;&#x5C1D;&#x8BD5;&#x5404;&#x79CD;&#x4E0D;&#x540C;&#x5207;&#x5206;&#x7684;&#x65F6;&#x95F4;&#x590D;&#x6742;&#x5EA6;&#x4E3A;\(O(2^n)\)&#xFF08;&#x56E0;&#x4E3A;\(n\)&#x4E2A;&#x6C49;&#x5B57;&#x4E4B;&#x95F4;&#x6709;\(n - 1\)&#x4E2A;&#x7A7A;&#x9699;&#xFF0C;&#x6BCF;&#x4E2A;&#x7A7A;&#x9699;&#x90FD;&#x53EF;&#x4EE5;&#x9009;&#x62E9;&#x5206;&#x5272;&#x6216;&#x8005;&#x4E0D;&#x5206;&#x5272;&#xFF09;&#xFF0E;&#x5BF9;&#x4E8E;&#x8FD9;&#x6837;&#x4E00;&#x4E2A;&#x6307;&#x6570;&#x7EA7;&#x7684;&#x65F6;&#x95F4;&#x590D;&#x6742;&#x5EA6;&#xFF0C;&#x4EC5;32&#x4E2A;&#x6C49;&#x5B57;&#x7684;&#x5212;&#x5206;&#x5C31;&#x9700;&#x8981;&#x8FDB;&#x884C;20&#x4EBF;&#x6B21;&#x8BA1;&#x7B97;&#xFF0C;&#x4E00;&#x822C;&#x7684;&#x8BA1;&#x7B97;&#x673A;&#x5F88;&#x96BE;&#x5728;&#x7406;&#x60F3;&#x7684;&#x65F6;&#x95F4;&#x5185;&#x5F97;&#x51FA;&#x7ED3;&#x679C;&#xFF0E;</p>
<h2 id="32">3.2 &#x5EFA;&#x6A21;&#xFF1A;&#x52A8;&#x6001;&#x89C4;&#x5212;</h2>
<p>&#x5BF9;&#x8FD9;&#x4E2A;&#x8FC7;&#x7A0B;&#x8FDB;&#x884C;&#x89C2;&#x5BDF;&#xFF0C;&#x4E00;&#x4E2A;&#x8BCD;&#x4E32;\(Y\)&#x7684;&#x6982;&#x7387;\(P(Y)\)&#x7B49;&#x4E8E;&#x5206;&#x51FA;&#x7B2C;&#x4E00;&#x4E2A;&#x8BCD;first&#x7684;&#x6982;&#x7387;\(P(first)\)&#x4E58;&#x4EE5;&#x5269;&#x4E0B;&#x7684;&#x8BCD;&#x4E32;remain&#x7684;&#x6982;&#x7387;\(P(remain)\)&#xFF1A;</p>
<p>$$<br>
P(Y) = P(first) \cdot P(remain)<br>
$$</p>
<p>&#x8FD9;&#x4E2A;&#x6027;&#x8D28;&#x5BF9;&#x4E8E;&#x6C42;&#x89E3;&#x5B83;&#x7684;&#x5B50;&#x95EE;&#x9898;remain&#x7684;&#x5212;&#x5206;&#x540C;&#x6837;&#x9002;&#x7528;&#xFF0C;&#x5373;&#x6EE1;&#x8DB3;<strong>&#x5B50;&#x95EE;&#x9898;&#x91CD;&#x7528;&#x6027;</strong>&#xFF0C;&#x4E5F;&#x5C31;&#x662F;&#x8BF4;&#x53EF;&#x4EE5;&#x901A;&#x8FC7;&#x9012;&#x5F52;&#x89E3;&#x51B3;&#xFF0E;&#x8FDB;&#x4E00;&#x6B65;&#x770B;&#xFF0C;&#x53D1;&#x73B0;&#xFF1A;</p>
<p>$$<br>
P(Y)_{\mathrm{max}} = P(first) \cdot P(remain)_{\mathrm{max}}<br>
$$</p>
<p>&#x4E5F;&#x5C31;&#x662F;&#x8BF4;&#xFF0C;&#x6574;&#x4E2A;&#x95EE;&#x9898;&#x7684;&#x6700;&#x4F18;&#x89E3;&#x7531;&#x5B50;&#x95EE;&#x9898;&#x7684;&#x6700;&#x4F18;&#x89E3;&#x6784;&#x6210;&#xFF0C;&#x6EE1;&#x8DB3;<strong>&#x6700;&#x4F18;&#x5B50;&#x7ED3;&#x6784;</strong>(optimal sub-structure)&#xFF0E;</p>
<p>&#x6EE1;&#x8DB3;&#x4EE5;&#x4E0A;&#x4E24;&#x4E2A;&#x6027;&#x8D28;&#xFF0C;&#x6574;&#x4E2A;&#x7B97;&#x6CD5;&#x53EF;&#x4EE5;&#x4F7F;&#x7528;<strong>&#x52A8;&#x6001;&#x89C4;&#x5212;</strong>(dynamic programming) &#x5EFA;&#x6A21;&#xFF0E;</p>
<h2 id="33">3.3 &#x5177;&#x4F53;&#x8FC7;&#x7A0B;&#x4EE5;&#x53CA;&#x65F6;&#x95F4;&#x590D;&#x6742;&#x5EA6;&#x5206;&#x6790;</h2>
<p>&#x5177;&#x4F53;&#x7684;&#x505A;&#x6CD5;&#xFF0C;&#x4ECD;&#x7136;&#x4EE5;&#x201C;&#x4E0A;&#x7F51;&#x7AD9;&#x8054;&#x76DF;&#x52A0;&#x5165;&#x6211;&#x4EEC;&#x201D;&#x4E3A;&#x4F8B;&#xFF0E;&#x5728;&#x6C42;&#x89E3;&#x5B50;&#x95EE;&#x9898;&#x201C;&#x7F51;&#x7AD9;&#x8054;&#x76DF;&#x52A0;&#x5165;&#x6211;&#x4EEC;&#x201D;&#x65F6;&#xFF0C;&#x5DF2;&#x7ECF;&#x5F97;&#x5230;&#x5B83;&#x7684;&#x6700;&#x4F18;&#x89E3;&#x662F;&#x201C;&#x7F51;&#x7AD9; | &#x8054;&#x76DF; | &#x52A0;&#x5165; | &#x6211;&#x4EEC;&#x201D;&#xFF0E;&#x90A3;&#x4E48;&#x5F53;&#x6C42;&#x89E3;&#x201C;&#x4E0A;&#x7F51;&#x7AD9;&#x8054;&#x76DF;&#x52A0;&#x5165;&#x6211;&#x4EEC;&#x201D;&#x65F6;&#xFF0C;&#x5982;&#x679C;&#x5C1D;&#x8BD5;&#x5728;&#x201C;&#x4E0A;&#x201D;&#x548C;&#x201C;&#x7F51;&#x7AD9;&#x201D;&#x4E4B;&#x95F4;&#x5207;&#x5206;&#xFF0C;&#x5F97;&#x201C;&#x4E0A;&#x201D;&#x201C;&#x7F51;&#x7AD9;&#x8054;&#x76DF;&#x52A0;&#x5165;&#x6211;&#x4EEC;&#x201D;&#x8FD9;&#x4E24;&#x5757;&#xFF0C;&#x53EA;&#x9700;&#x8981;&#x201C;&#x4E0A;&#x201D;&#x8FD9;&#x4E00;&#x5212;&#x5206;&#x7684;&#x6982;&#x7387;&#xFF0E;&#x800C;&#x201C;&#x7F51;&#x7AD9;&#x8054;&#x76DF;&#x52A0;&#x5165;&#x6211;&#x4EEC;&#x201D;&#x5212;&#x5206;&#x7684;&#x6982;&#x7387;&#x6700;&#x5927;&#x503C;&#x5DF2;&#x7ECF;&#x6C42;&#x89E3;&#x8FC7;&#x4E86;&#xFF0C;&#x76F4;&#x63A5;&#x8FD4;&#x56DE;&#xFF0C;&#x548C;&#x201C;&#x4E0A;&#x201D;&#x7684;&#x6982;&#x7387;&#x76F8;&#x4E58;&#xFF0C;&#x5F97;&#x5230;&#x5176;&#x4E2D;&#x4E00;&#x4E2A;<strong>&#x5019;&#x9009;&#x7ED3;&#x679C;</strong>(candidate)&#xFF0E;&#x5728;&#x8FD9;&#x4E00;&#x4E2A;&#x9012;&#x5F52;&#x5C42;&#x9762;&#x7EE7;&#x7EED;&#x679A;&#x4E3E;&#xFF0C;&#x6C42;&#x51FA;<strong>&#x6982;&#x7387;&#x6700;&#x5927;&#x7684;&#x5206;&#x8BCD;&#x65B9;&#x6848;</strong>(optimal candidate)&#xFF0C;&#x8FD4;&#x56DE;&#x4E0A;&#x4E00;&#x5C42;&#xFF0C;&#x5982;&#x6B64;&#x8FED;&#x4EE3;&#xFF0E;&#x4E00;&#x822C;&#x5730;&#xFF0C;&#x52A8;&#x6001;&#x89C4;&#x5212;&#x95EE;&#x9898;&#x90FD;&#x53EF;&#x4EE5;&#x901A;&#x8FC7;<strong>&#x81EA;&#x5E95;&#x5411;&#x4E0A;</strong>(bottom-up) &#x548C;<strong>&#x8BB0;&#x5FC6;&#x5316;</strong>(memoization) &#x4E24;&#x4E2A;&#x7B56;&#x7565;&#x8FDB;&#x884C;&#x4F18;&#x5316;&#xFF0C;&#x5728;&#x6B64;&#x4E0D;&#x518D;&#x8D58;&#x8FF0;&#xFF0E;&#x7279;&#x522B;&#x5730;&#xFF0C;&#x8BBE;&#x5B9A;&#x6700;&#x957F;&#x7684;&#x5355;&#x8BCD;&#x4E0D;&#x4F1A;&#x8D85;&#x8FC7;\(L\)&#xFF0C;&#x90A3;&#x4E48;&#x51FD;&#x6570;&#x9012;&#x5F52;&#x7684;&#x6548;&#x7387;&#x4E3A;\(O(nL)\)&#xFF0C;&#x52A0;&#x4E0A;&#x6BCF;&#x4E00;&#x6B21;&#x8C03;&#x7528;&#x9012;&#x5F52;&#x51FD;&#x6570;&#x65F6;&#xFF0C;&#x9700;&#x8981;&#x8FDB;&#x884C;\(O(L)\)&#x6B21;&#x7684;&#x5207;&#x5206;&#x679A;&#x4E3E;&#xFF0C;&#x6240;&#x4EE5;&#x6574;&#x4E2A;&#x7B97;&#x6CD5;&#x7684;&#x590D;&#x6742;&#x5EA6;&#x4E3A;\(O(nL^2)\)&#xFF0E;</p>
<p>&#x5982;&#x4E0A;&#x6240;&#x8FF0;&#xFF0C;&#x6574;&#x4E2A;&#x95EE;&#x9898;&#x7684;&#x590D;&#x6742;&#x5EA6;&#x4ECE;&#x6307;&#x6570;&#x7EA7;&#x964D;&#x4F4E;&#x5230;&#x4E86;&#x591A;&#x9879;&#x5F0F;&#x7EA7;&#xFF0C;&#x7B97;&#x6CD5;&#x7684;&#x6548;&#x7387;&#x63D0;&#x9AD8;&#x4E86;&#x4E0D;&#x5C11;&#xFF0E;&#x4E8B;&#x5B9E;&#x4E0A;&#xFF0C;&#x8FD9;&#x4E5F;&#x6B63;&#x662F;<strong>&#x7EF4;&#x7279;&#x6BD4;&#x7B97;&#x6CD5;</strong>(Viterbi algorithm)&#x7684;&#x5B9E;&#x73B0;&#xFF0C;&#x7528;&#x4E8E;&#x8BB0;&#x5F55;&#x5B50;&#x95EE;&#x9898;&#x6700;&#x4F18;&#x89E3;&#x7684;&#x8868;&#x53EB;&#x505A;<strong>&#x7EF4;&#x7279;&#x6BD4;&#x8868;</strong>(Viterbi table)&#xFF0E;</p>
<h1 id>&#x53C2;&#x8003;&#x6587;&#x732E;</h1>
<p>[1] <a href="http://mindhacks.cn/2008/09/21/the-magical-bayesian-method">&#x6570;&#x5B66;&#x4E4B;&#x7F8E;&#x756A;&#x5916;&#x7BC7;&#xFF1A;&#x5E73;&#x51E1;&#x800C;&#x53C8;&#x795E;&#x5947;&#x7684;&#x8D1D;&#x53F6;&#x65AF;&#x65B9;&#x6CD5;&#xFF0C;&#x5218;&#x672A;&#x9E4F;</a></p>
<p>[2] <a href="http://blog.renren.com/share/328924416/11650037874">&#x60C5;&#x4EBA;&#x8282;&#x6D6A;&#x6F2B;&#x5448;&#x732E;&#x2014;&#x2014;&#x8D1D;&#x53F6;&#x65AF;&#x4E0E;&#x4E2D;&#x6587;&#x5206;&#x8BCD;&#xFF0C;&#x674E;&#x5FD7;&#x5065;</a></p>
<!--kg-card-end: markdown-->]]></content:encoded></item><item><title><![CDATA[VMWare ESXi 部署以及 IP 不够时的解决方案]]></title><description><![CDATA[<!--kg-card-begin: markdown--><h2 id="0x00">0x00: &#x80CC;&#x666F;</h2>
<p>&#x6700;&#x8FD1;&#x627F;&#x63A5;&#x4E86;&#x5B66;&#x6821;&#x4E00;&#x4E2A;&#x5185;&#x90E8;&#x641C;&#x7D22;&#x5F15;&#x64CE;&#x7684;&#x9879;&#x76EE;&#xFF0C;&#x5B66;&#x6821;&#x63D0;&#x4F9B;&#x4E86;&#x4E00;&#x53F0; ThinkServer RD430 &#x673A;&#x67B6;&#x5F0F;&#x670D;&#x52A1;&#x5668;&#xFF0C;&#x914D;&#x7F6E;&#x5982;&#x4E0B;&#xFF1A;</p>
<blockquote>
<p>CPU: Xeon E5-2540 @ 2.40GHz x 2</p></blockquote>]]></description><link>https://sxkdz.me/vmware-esxi-and-pfsense-router-deploy/</link><guid isPermaLink="false">60f547237767ec0d683e9e9e</guid><category><![CDATA[Web Deployment]]></category><category><![CDATA[VMWare ESXi]]></category><category><![CDATA[pfSense]]></category><dc:creator><![CDATA[SXKDZ]]></dc:creator><pubDate>Fri, 30 Sep 2016 16:32:28 GMT</pubDate><content:encoded><![CDATA[<!--kg-card-begin: markdown--><h2 id="0x00">0x00: &#x80CC;&#x666F;</h2>
<p>&#x6700;&#x8FD1;&#x627F;&#x63A5;&#x4E86;&#x5B66;&#x6821;&#x4E00;&#x4E2A;&#x5185;&#x90E8;&#x641C;&#x7D22;&#x5F15;&#x64CE;&#x7684;&#x9879;&#x76EE;&#xFF0C;&#x5B66;&#x6821;&#x63D0;&#x4F9B;&#x4E86;&#x4E00;&#x53F0; ThinkServer RD430 &#x673A;&#x67B6;&#x5F0F;&#x670D;&#x52A1;&#x5668;&#xFF0C;&#x914D;&#x7F6E;&#x5982;&#x4E0B;&#xFF1A;</p>
<blockquote>
<p>CPU: Xeon E5-2540 @ 2.40GHz x 2</p>
<p>Memory: 92GB</p>
<p>Hard Disk: 24TB</p>
</blockquote>
<p>&#x8003;&#x8651;&#x5230;&#x5B9E;&#x9645;&#x5B58;&#x50A8;&#x9700;&#x6C42;&#xFF0C;&#x9700;&#x8981;&#x7EC4;&#x4E00;&#x4E2A;&#x5C0F;&#x96C6;&#x7FA4;&#x6765;&#x8DD1;&#x6570;&#x636E;&#x5E93;&#x4EE5;&#x63D0;&#x9AD8;&#x6027;&#x80FD;&#x3002;&#x6211;&#x9009;&#x62E9; VMWare vSphere 6.0 &#x4F5C;&#x4E3A;&#x5BBF;&#x673A;&#x64CD;&#x4F5C;&#x7CFB;&#x7EDF;&#xFF08;&#x56E0;&#x4E3A;&#x5B66;&#x6821;&#x63D0;&#x4F9B;&#x4E86;&#x6B63;&#x7248;&#xFF09;&#xFF0C;&#x4E0B;&#x9762;&#x4ECB;&#x7ECD;&#x4E00;&#x4E0B;&#x90E8;&#x7F72;&#x7684;&#x8FC7;&#x7A0B;&#x3002;</p>
<p>&#x611F;&#x8C22; <a href="https://breeswish.org">swx</a> &#x548C; <a href="https://twd2.me">2&#x8001;&#x5E08;</a> &#x7684;&#x5E2E;&#x52A9;&#x3002;</p>
<h2 id="0x01vmwareesxi">0x01: &#x5B89;&#x88C5; VMWare ESXi &#x7CFB;&#x7EDF;</h2>
<p>&#x4ECE;&#x6B63;&#x89C4;&#x6E20;&#x9053;&#x83B7;&#x5F97; VMWare ESXi &#x7CFB;&#x7EDF;&#x5E76;&#x5B89;&#x88C5;&#x5230;&#x670D;&#x52A1;&#x5668;&#x4E0A;&#x3002;&#x9996;&#x5148;&#x9047;&#x5230;&#x7684;&#x4E00;&#x4E2A;&#x9EBB;&#x70E6;&#x662F;&#x8FD9;&#x4E2A;&#x7CFB;&#x7EDF;&#x4E0D;&#x652F;&#x6301;&#x6211;&#x6821;&#x670D;&#x52A1;&#x5668;&#x7684; KVM &#x952E;&#x76D8;&#xFF08;&#x4F3C;&#x4E4E;&#x662F;&#x6CA1;&#x6709;&#x9A71;&#x52A8;&#xFF1F;&#xFF09;&#xFF0C;&#x62FF;&#x4E86;&#x4E00;&#x4E2A; USB &#x952E;&#x76D8;&#x624D;&#x53EF;&#x4EE5;&#x4F7F;&#x7528;&#x3002;</p>
<p>&#x63A5;&#x4E0B;&#x6765;&#x662F;&#x5206;&#x533A;&#x7684;&#x95EE;&#x9898;&#x3002;&#x6839;&#x636E; swx &#x7684;&#x5EFA;&#x8BAE;&#xFF0C;&#x5C06;&#x4E00;&#x5C0F;&#x90E8;&#x5206;&#x7A7A;&#x95F4;&#x5212;&#x7ED9; ESXi &#x7CFB;&#x7EDF;&#xFF0C;&#x5269;&#x4E0B;&#x7684;&#x7A7A;&#x95F4;&#x505A;&#x4E00;&#x4E2A; RAID 1&#xFF0C;&#x865A;&#x62DF;&#x673A;&#x955C;&#x50CF;&#x653E;&#x5728; RAID &#x4E0A;&#xFF0C;&#x5176;&#x4ED6; ISO &#x7B49;&#x653E;&#x5728;&#x975E; RAID &#x4E0A;&#x3002;</p>
<p>&#x5B89;&#x88C5;&#x597D; ESXi &#x7CFB;&#x7EDF;&#x540E;&#x5373;&#x53EF;&#x767B;&#x5F55; Web &#x7AEF;&#x8FDB;&#x884C;&#x7BA1;&#x7406;&#x3002;&#x5BF9;&#x4E8E; ESXi 6.0 &#x7CFB;&#x7EDF;&#xFF0C;vSphere Client &#x5F88;&#x591A;&#x529F;&#x80FD;&#x4E0D;&#x652F;&#x6301;&#xFF08;&#x53EA;&#x652F;&#x6301;&#x5230; 5.0&#xFF09;&#xFF0C;&#x6839;&#x636E;&#x8FD9;&#x51E0;&#x5929;&#x7684;&#x4F53;&#x9A8C;&#xFF0C;Web &#x7AEF;&#x901F;&#x5EA6;&#x660E;&#x663E;&#x4E0D;&#x5982;&#x5BA2;&#x6237;&#x7AEF;&#xFF0C;&#x5DEE;&#x8BC4;&#x3002;</p>
<h2 id="0x02pfsense">0x02: &#x5B89;&#x88C5;&#x8F6F;&#x8DEF;&#x7531; pfSense</h2>
<p>&#x7531;&#x4E8E;&#x5B66;&#x9662;&#x7F51;&#x7EDC;&#x9650;&#x5236;&#xFF0C;&#x8FD9;&#x4E2A;&#x670D;&#x52A1;&#x5668;&#x53EA;&#x63A5;&#x4E86;&#x4E00;&#x6839;&#x7F51;&#x7EBF;&#x5E76;&#x5206;&#x914D;&#x4E86;&#x4E00;&#x4E2A;&#x56FA;&#x5B9A;&#x7684; IP &#x5730;&#x5740;&#x3002;&#x4F46;&#x662F; ESXi &#x7684;&#x7BA1;&#x7406;&#x754C;&#x9762;&#x672C;&#x8EAB;&#x9700;&#x8981;&#x5360;&#x7528;&#x4E00;&#x4E2A;&#xFF0C;&#x800C;&#x5176;&#x4ED6;&#x865A;&#x62DF;&#x673A;&#x5C31;&#x6CA1;&#x6709;&#x529E;&#x6CD5;&#x83B7;&#x5F97; IP&#xFF0C;&#x56E0;&#x6B64;&#x9700;&#x8981;&#x5B89;&#x88C5;&#x4E00;&#x4E2A;&#x8F6F;&#x8DEF;&#x7531;&#xFF0C;&#x4F5C;&#x4E3A;&#x7F51;&#x5173;&#x7EC4;&#x6210;&#x4E00;&#x4E2A;&#x5B50;&#x7F51;&#x3002;&#x9700;&#x8981;&#x6CE8;&#x610F;&#x7684;&#x662F;&#xFF0C;&#x7531;&#x4E8E;&#x624B;&#x6ED1;&#x7B49;&#x4E00;&#x4E9B;&#x4E0D;&#x53EF;&#x6297;&#x529B;&#x7684;&#x539F;&#x56E0;&#xFF0C;&#x8F6F;&#x8DEF;&#x7531;&#x7684;&#x914D;&#x7F6E;&#x5F88;&#x53EF;&#x80FD;&#x88AB;&#x6539;&#x574F;&#xFF0C;&#x8FD9;&#x6837;&#x7684;&#x8BDD;&#x5C31;&#x65E0;&#x6CD5;&#x8BBF;&#x95EE; ESXi &#x7684;&#x7BA1;&#x7406;&#x754C;&#x9762;&#x3002;&#x8FD9;&#x91CC;&#x53EF;&#x4EE5;&#x5C06; ESXi &#x7684;&#x7BA1;&#x7406;&#x754C;&#x9762; IPv4 &#x4EA4;&#x7ED9;&#x8F6F;&#x8DEF;&#x7531;&#xFF0C;IPv6 &#x4ECD;&#x7136;&#x7531;&#x4ED6;&#x81EA;&#x5DF1;&#x5360;&#x7740;&#xFF0C;&#x8FD9;&#x6837;&#x7684;&#x8BDD; IPv4 &#x73A9;&#x574F;&#x4E86;&#x8FD8;&#x53EF;&#x4EE5;&#x901A;&#x8FC7; IPv6 &#x8FDB;&#x884C;&#x8865;&#x6551;&#x3002;</p>
<p>&#x6211;&#x4EEC;&#x9009;&#x62E9;&#x7684;&#x8F6F;&#x8DEF;&#x7531;&#x7CFB;&#x7EDF;&#x662F;&#x57FA;&#x4E8E; FreeBSD &#x7684; pfSense&#x3002;&#x5728;&#x5B89;&#x88C5;&#x8FD9;&#x4E2A;&#x7CFB;&#x7EDF;&#x65F6;&#x7ED9;&#x5B83;&#x914D;&#x7F6E;&#x4E24;&#x5757;&#x865A;&#x62DF;&#x7F51;&#x5361;&#xFF0C;&#x5176;&#x4E2D;&#x4E00;&#x5757;&#x63A5;&#x5165;&#x4E00;&#x4E2A; VMWare &#x7684;&#x865A;&#x62DF;&#x4EA4;&#x6362;&#x673A; Public&#xFF0C;&#x5BBF;&#x673A;&#x7684;&#x7269;&#x7406;&#x7F51;&#x5361;&#x4E5F;&#x63A5;&#x5165;&#x8FD9;&#x4E2A;&#x4EA4;&#x6362;&#x673A;&#xFF1B;&#x53E6;&#x4E00;&#x4E2A;&#x7F51;&#x5361;&#x63A5;&#x5165;&#x53E6;&#x5916;&#x4E00;&#x4E2A;&#x4EA4;&#x6362;&#x673A; Private&#xFF0C;&#x5176;&#x4ED6;&#x6240;&#x6709;&#x865A;&#x62DF;&#x673A;&#x4E5F;&#x63A5;&#x5165;&#x8FD9;&#x4E2A;&#x4EA4;&#x6362;&#x673A;&#x3002;</p>
<p>&#x7136;&#x540E;&#x5F00;&#x59CB;&#x914D;&#x7F6E; pfSense&#x3002;&#x8FD9;&#x91CC;&#x53EA;&#x80FD;&#x901A;&#x8FC7;&#x53E6;&#x4E00;&#x53F0;&#x5B50;&#x7F51;&#x4E0B;&#x7684;&#x865A;&#x62DF;&#x673A;&#x6765;&#x8BBF;&#x95EE; pfSense &#x7684;&#x7BA1;&#x7406;&#x754C;&#x9762;&#x3002;&#x6211;&#x4EEC;&#x518D;&#x914D;&#x7F6E;&#x4E00;&#x53F0;&#x865A;&#x62DF;&#x673A;&#xFF0C;&#x9009;&#x62E9;&#x4E00;&#x4E2A; Xubuntu &#x7684; LiveCD&#xFF0C;&#x901A;&#x8FC7; LiveCD &#x7684;&#x6D4F;&#x89C8;&#x5668;&#x8BBF;&#x95EE; pfSense &#x7684;&#x7BA1;&#x7406;&#x754C;&#x9762;&#xFF0C;&#x5B83;&#x7684;&#x9ED8;&#x8BA4;&#x7528;&#x6237;&#x540D;&#x662F;<code>admin</code>&#xFF0C;&#x5BC6;&#x7801;&#x662F;<code>pfsense</code>&#x3002;</p>
<p>&#x5728;&#x7BA1;&#x7406;&#x754C;&#x9762;&#x4E2D;&#x5F00;&#x542F; WAN&#xFF0C;Public &#x6240;&#x63A5;&#x7684;&#x865A;&#x62DF;&#x7F51;&#x5361;&#x7AEF;&#x53E3;&#x8BBE;&#x7F6E;&#x4E3A; WAN&#xFF0C;&#x5E76;&#x4E14; pfSense &#x76D1;&#x542C;&#x90A3;&#x4E2A; IP&#x3002;&#x8FD9;&#x6837; pfSense &#x5C31;&#x6210;&#x4E3A;&#x4E00;&#x4E2A;&#x7F51;&#x5173;&#xFF0C;&#x7269;&#x7406; IP &#x7684;&#x6240;&#x6709;&#x6D41;&#x91CF;&#x90FD;&#x7ECF;&#x8FC7;&#x5B83;&#x3002;&#x63A5;&#x7740;&#x5F00;&#x542F; LAN&#xFF0C;Private &#x6240;&#x63A5;&#x7684;&#x865A;&#x62DF;&#x7F51;&#x5361;&#x7AEF;&#x53E3;&#x8BBE;&#x4E3A; LAN&#xFF0C;&#x4E8E;&#x662F;&#x5176;&#x4ED6;&#x865A;&#x62DF;&#x673A;&#x7684;&#x6D41;&#x91CF;&#x4E5F;&#x7ECF;&#x8FC7;&#x4E86; pfSense&#xFF0C;&#x5E76;&#x4E14;&#x5B83;&#x4EEC;&#x7EC4;&#x6210;&#x4E00;&#x4E2A;&#x5B50;&#x7F51;&#x3002;</p>
<p>&#x6700;&#x540E; ESXi &#x7CFB;&#x7EDF;&#x63A5;&#x5165; Private &#x4EA4;&#x6362;&#x673A;&#xFF0C;&#x8BA9;&#x5B83;&#x76D1;&#x542C;&#x4E00;&#x4E2A;&#x5185;&#x7F51; IP&#xFF0C;&#x4E8E;&#x662F; ESXi &#x6D41;&#x91CF;&#x4E5F;&#x7ECF;&#x8FC7; pfSense &#x4E86;&#x3002;&#x6700;&#x540E;&#x5728; pfSense &#x4E2D;&#x8BBE;&#x7F6E; NAT &#x5C06; 443 &#x7AEF;&#x53E3;&#x8F6C;&#x53D1;&#x5230; ESXi &#x6240;&#x5728;&#x7684;&#x5185;&#x7F51; IP&#xFF0C;&#x4E8E;&#x662F;&#x5C31;&#x53EF;&#x4EE5;&#x901A;&#x8FC7; 443 &#x7AEF;&#x53E3;&#x8BBF;&#x95EE; ESXi &#x4E86;&#x3002;</p>
<p>&#x6CE8;&#x610F;&#x5230; pfSense &#x81EA;&#x5DF1;&#x7684;&#x7BA1;&#x7406;&#x7AEF;&#x53E3;&#x9ED8;&#x8BA4; 80&#xFF0C;&#x53EF;&#x4EE5;&#x6539;&#x52A8;&#x4E3A;&#x5176;&#x4ED6;&#x7684;&#x6570;&#x503C;&#x6765;&#x8BBF;&#x95EE;&#x5B83;&#x3002;</p>
<!--kg-card-end: markdown-->]]></content:encoded></item></channel></rss>