<?xml version="1.0" encoding="utf-8"?>
<search> 
  
    
    <entry>
      <title><![CDATA[常用技术细节问答]]></title>
      <url>/%E6%8A%80%E6%9C%AF/q-and-a-freq-question/</url>
      <content type="html"><![CDATA[<script src="/assets/js/APlayer.min.js"> </script><div class="note success"><p>这里记录一些关于工具、语言、命令、软件配置等的常见技术细节问答，以备日后咨询。</p></div><a id="more"></a><div class="note danger"><p>How to set the default cell type to a default one other than <code>code</code> when using Jupyter Notebook?<br>在使用Jupyter Notebook时，如何将插入的新 <em>cell</em> 的类型设置成其他默认类型，如<code>markdown</code>？</p></div><blockquote><ul><li>Go to the dir: <code>..\Anaconda3\Lib\site-packages\notebook\static\notebook\js</code></li><li>Open the file <code>main.min.js</code></li><li>Change <code>default_cell_type: &#39;code&#39;</code> to <code>default_cell_type: &#39;markdown&#39;</code></li></ul></blockquote><h1 id="参考文献"><a href="#参考文献" class="headerlink" title="参考文献"></a>参考文献</h1><blockquote><p><strong><em><a href="https://stackoverflow.com/questions/40382454/jupyter-notebook-new-cell-type-default" target="_blank" rel="external">Jupyter notebook new cell type default</a></em></strong></p></blockquote>]]></content>
      
        <categories>
            
            <category> 技术 </category>
            
        </categories>
        
        
        <tags>
            
            <tag> Q&amp;A </tag>
            
        </tags>
        
    </entry>
    
    <entry>
      <title><![CDATA[Happy blogging with Jupyter Notebook]]></title>
      <url>/%E6%8A%80%E6%9C%AF/%E5%89%8D%E7%AB%AF/hbwjnotebook/</url>
      <content type="html"><![CDATA[<script src="/assets/js/APlayer.min.js"> </script><div class="note success"><p>Make Jupyter Notebook your powerful studying assistant, as well as a blogging secretary who does everything for you! Use Hexo and Jupyter notebook to blog, especially for academic posts.</p></div><a id="more"></a><h1 id="Table-of-Contents"><a href="#Table-of-Contents" class="headerlink" title="Table of Contents"></a>Table of Contents</h1><ul><li><a href="#Introduction">Introduction</a></li><li><a href="#Conditional-Expectation-by-Optimization">Conditional Expectation by Optimization</a></li><li><a href="#Conditional-Expectation-Using-Direct-Integration">Conditional Expectation Using Direct Integration</a></li><li><a href="#Summary">Summary</a></li><li><a href="#中文模式">中文模式</a></li></ul><h1 id="Introduction"><a href="#Introduction" class="headerlink" title="Introduction"></a>Introduction</h1><p>If you are a student in statistics or computer science, you may be fascinated by the elegance and efficiency of Jupyter Notebook. Meanwhile many of us would like to blogger using markdown in some static web blog framework like <a href="https://hexo.io/" target="_blank" rel="external">Hexo</a> and <a href="https://jekyllrb.com/" target="_blank" rel="external">Jekyll</a>. <strong>Why do not make notebook output files our everyday posts?</strong> Sounds great, since we can record much more interesting things!</p><p>We know that thanks to <a href="https://github.com/jupyter/nbconvert" target="_blank" rel="external">nbconvert</a>, a utility provided by <a href="https://github.com/jupyter" target="_blank" rel="external">Jupyter community</a> which can be used directly as a command line tool, we can convert <code>ipynb</code> files mainly into <code>html</code>, <code>tex</code>, <code>md(GFM)</code> and <code>PDF</code> format. Which choice should be the <strong>fastest</strong> one, given the situation where ipynb output is an embedded element in a blog post container?</p><p>Well that is really hard to say since there have been already some solutions on the Web for different output formats, which you can refer to at the end of this post. However, not every solution is there for your needs and it is so hard to satisfy someone to the maximum extent that he or she is obliged to do some extra efforts to make his blog really a honey one, <strong>JUST LIKE ME :)</strong></p><p>My choice: <strong>Copy-paste md version directly into post</strong>, for this is the most flexible and convenient way, highly compatible with the post container in terms of rendering style. Besides, its file size is much smaller than that of html output generated in <em>full</em> template.</p><p>My problem: <strong>GFM renderer of Hexo-Next theme is not friendly with math tex commands</strong>, formulas often cannot be properly rendered by <a href="https://www.mathjax.org/" target="_blank" rel="external">Mathjax</a> because GFM renderer gets confused with some special symbols like <code>\\</code>, <code>\_</code> and <code>\[</code> – It does not know that characters between <em>dollar</em> pairs are mathematical formulas! Note that Jupyter notebook markdown renderer deals pretty well with math formulas, so I do not want add manually escape characters one by one for blog posts!</p><p>My solution: Inspired by <a href="https://hexo.io/docs/tag-plugins.html#Raw" target="_blank" rel="external">Hexo doc</a>, I write <a href="rawEq.py">a tiny regular expression gist</a> to automatically wrap math formulas with <code>raw</code> tag so that GFM renderer will not show interest in these guys.</p><p>The notebook you are reading now is exactly first written in Jupyter and then posted inside my blog. By the way, thanks to the <a href="https://nbviewer.jupyter.org/" target="_blank" rel="external"><code>nbviewer service</code></a>, you may read the online-distributed version of an <code>ipynb</code> notebook in original html format<sup id="fnref:1"><a href="#fn:1" rel="footnote">1</a></sup>.</p><p>In a word,</p>$$What\ you \ see \buildrel \rm def \over {:=} A \ blog \ post \buildrel \rm generate \over \longleftarrow A \ Jupyter \ Notebook \nonumber$$<h1 id="Conditional-Expectation-by-Optimization"><a href="#Conditional-Expectation-by-Optimization" class="headerlink" title="Conditional Expectation by Optimization"></a>Conditional Expectation by Optimization</h1><p>Now, let us consider the important case of the zero-mean bivariate Gaussian and try to find a function $h$ that minimizes the mean squared error (MSE). Again, trying to solve for the conditional expectation by minimizing the error over all possible functions $h$ is generally very, very hard. One alternative is to use parameters for the $h$ function and then just optimize over those. For example, we could assume that $h(Y)= \alpha Y$ and then use calculus to find the $\alpha$ parameter.</p><p>Let us try this with the zero-mean bivariate Gaussian density,</p>$$\mathbb{E}((X-\alpha Y )^2) = \mathbb{E}(\alpha^2 Y^2 - 2 \alpha X Y + X^2 )$$<p>and then differentiate this with respect to $\alpha$ to obtain</p>$$\mathbb{E}(2 \alpha Y^2 - 2 X Y ) = 2 \alpha \sigma_y^2 - 2 \mathbb{E}(XY) = 0$$<p>Then, solving for $\alpha$ gives us</p>$$\alpha = \frac{ \mathbb{E}(X Y)}{ \sigma_y^2 }$$<p>which means we have</p>$$\mathbb{ E}(X|Y) \approx \alpha Y = \frac{ \mathbb{E}(X Y )}{ \sigma_Y^2 } Y =\frac{\sigma_{X Y}}{ \sigma_Y^2 } Y$$<p>where that last equality is just notation. Remember here we assumed a special linear form for $h=\alpha Y$, but we did that for convenience. We still do not know whether or not this is the one true $h_{opt}$ that minimizes the MSE for all such functions.</p><h1 id="Conditional-Expectation-Using-Direct-Integration"><a href="#Conditional-Expectation-Using-Direct-Integration" class="headerlink" title="Conditional Expectation Using Direct Integration"></a>Conditional Expectation Using Direct Integration</h1><p>Now, let us try this again by computing $\mathbb{E}(X|Y)$ in the case of the bivariate Gaussian distribution straight from the definition.</p>$$\mathbb{E}(X|Y) = \int_{\mathbb{ R}} x \frac{f_{X,Y}(x,y)}{f_Y(y)} dx$$<p>where</p>$$ f_{X,Y}(x,y) = \frac{1}{2\pi |\mathbf{R}|^{\frac{1}{2}}} e^{-\frac{1}{2} \mathbf{v}^T \mathbf{R}^{-1} \mathbf{v} }$$<p>and where</p>$$\mathbf{v}= \left[ x,y \right]^T$$ $$\mathbf{R} = \left[\begin{array}{cc} \sigma_{x}^2 & \sigma_{xy} \\\\ \sigma_{xy} & \sigma_{y}^2 \\\\ \end{array} \right]$$<p>and with</p>$$\begin{eqnarray} \sigma_{xy} &=& \mathbb{E}(xy) \\ \sigma_{x}^2 &=& \mathbb{E}(x^2) \\ \sigma_{y}^2 &=& \mathbb{E}(y^2) \end{eqnarray}$$<p>This conditional expectation is a tough integral to evaluate, so we will do it with <code>sympy</code>.</p><figure class="highlight python"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div><div class="line">6</div><div class="line">7</div><div class="line">8</div><div class="line">9</div><div class="line">10</div><div class="line">11</div><div class="line">12</div><div class="line">13</div><div class="line">14</div></pre></td><td class="code"><pre><div class="line"><span class="keyword">from</span> sympy <span class="keyword">import</span> Matrix, Symbol, exp, pi, simplify, integrate </div><div class="line"><span class="keyword">from</span> sympy <span class="keyword">import</span> stats, sqrt, oo, use</div><div class="line"><span class="keyword">from</span> sympy.abc <span class="keyword">import</span> y,x</div><div class="line"></div><div class="line">sigma_x = Symbol(<span class="string">'sigma_x'</span>,positive=<span class="keyword">True</span>)</div><div class="line">sigma_y = Symbol(<span class="string">'sigma_y'</span>,positive=<span class="keyword">True</span>)</div><div class="line">sigma_xy = Symbol(<span class="string">'sigma_xy'</span>,real=<span class="keyword">True</span>)</div><div class="line">fyy = stats.density(stats.Normal(<span class="string">'y'</span>,<span class="number">0</span>,sigma_y))(y)</div><div class="line"> </div><div class="line">R = Matrix([[sigma_x**<span class="number">2</span>, sigma_xy],</div><div class="line">            [sigma_xy,sigma_y**<span class="number">2</span>]])</div><div class="line">fxy = <span class="number">1</span>/(<span class="number">2</span>*pi)/sqrt(R.det()) * exp((-Matrix([[x,y]])*R.inv()* Matrix([[x],[y]]))[<span class="number">0</span>,<span class="number">0</span>]/<span class="number">2</span> )</div><div class="line"></div><div class="line">fcond = simplify(fxy/fyy)</div></pre></td></tr></table></figure><p>Unfortunately, <code>sympy</code> cannot immediately integrate this without some hints. So, we need to define a positive variable ($u$) and substitute it into the integration</p><figure class="highlight python"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div><div class="line">6</div></pre></td><td class="code"><pre><div class="line">u=Symbol(<span class="string">'u'</span>,positive=<span class="keyword">True</span>) <span class="comment"># define positive variable</span></div><div class="line"></div><div class="line">fcond2=fcond.subs(sigma_x**<span class="number">2</span>*sigma_y**<span class="number">2</span>-sigma_xy**<span class="number">2</span>,u) <span class="comment"># substitute as hint to integrate</span></div><div class="line">g=simplify(integrate(fcond2*x,(x,-oo,oo))) <span class="comment"># evaluate integral</span></div><div class="line">gg=g.subs( u,sigma_x**<span class="number">2</span> *sigma_y**<span class="number">2</span> - sigma_xy**<span class="number">2</span> ) <span class="comment"># substitute back in</span></div><div class="line">use( gg, simplify,level=<span class="number">2</span>) <span class="comment"># simplify exponent term</span></div></pre></td></tr></table></figure><pre><code>sigma_xy*y/sigma_y**2
</code></pre><p>Thus, by direct integration using <code>sympy</code>, we found</p>$$ \mathbb{ E}(X|Y) = Y \frac{\sigma_{xy}}{\sigma_{y}^{2}} $$<p>and this matches the prior result we obtained by direct minimization by assuming that $\mathbb{E}(X|Y) = \alpha Y$ and then solving for the optimal $\alpha$!</p><p>The importance of this result cannot be understated: the one true and optimal $h_{opt}$ <em>is a linear function</em> of $Y$.</p><p>In other words, assuming a linear function, which made the direct search for an optimal $h(Y)$ merely convenient yields the optimal result! This is a general result that extends for <em>all</em> Gaussian problems. The link between linear functions and optimal estimation of Gaussian random variables is the most fundamental result in statistical signal processing! This fact is exploited in everything from optimal filter design to adaptive signal processing.</p><p>We can easily extend this result to non-zero mean problems by inserting the means in the right places as follows:</p>$$\mathbb{ E}(X|Y) = \bar{X} + (Y-\bar{Y}) \frac{\sigma_{xy}}{\sigma_{y}^{2}}$$<p>where $\bar{X}$ is the mean of $X$ (same for $Y$).</p><h1 id="Summary"><a href="#Summary" class="headerlink" title="Summary"></a>Summary</h1><p>In this section, we showed that the conditional expectation for Gaussian random variables is a linear function, which, by a bizarre coincidence, is also the easiest one to work with. This result is fundamental to all optimal linear filtering problems (e.g. Kalman filter) and is the basis of most of the theory of stochastic processes used in signal processing. Up to this point, we have worked hard to illustrate all of the concepts we will need to unify our understanding of this entire field and figured out multiple approaches to these kinds of problems, most of which are far more difficult to compute. Thus, it is indeed just plain lucky that the most powerful distribution is the easiest to compute as a conditional expectation because it is a linear function. We will come back to this same result again and again as we work our way through these greater concepts.</p><h1 id="中文模式"><a href="#中文模式" class="headerlink" title="中文模式"></a>中文模式</h1><p>下面看看中英文混合的效果如何。</p><p>我们可以自由地写行内公式，如 $\cos 2\theta = \cos^2 \theta - \sin^2 \theta = 2 \cos^2 \theta - 1$。 We can display an inline formula, like $\sum_{i=0}^n i^2 = \frac{(n^2+n)(2n+1)}{6}$, very simple!</p><p>我们也可以写行间公式，如：</p>$$\frac{\partial u}{\partial t} = h^2 \left( \frac{\partial^2 u}{\partial x^2} + \frac{\partial^2 u}{\partial y^2} + \frac{\partial^2 u}{\partial z^2}\right)$$<p>We can display formulas as blocks as followings:</p>$$ \begin{equation} \left\{ \begin{aligned} \dot{x} & = \sigma(y-x) \\[2ex] \dot{y} & = \rho x - y - xz \\[2ex] \dot{z} & = -\beta z + xy \end{aligned} \right. \end{equation} $$<p>We can highlight equation by adding both border and background:</p>$$ \bbox[yellow,5px,border:2px solid red] { e^x=\lim_{n\to\infty} \left( 1+\frac{x}{n} \right)^n } \label{eq:sample} $$<p>下面是一个矩阵：</p>$$ \begin{pmatrix} 1 & a_1 & a_1^2 & \cdots & a_1^n \\\ 1 & a_2 & a_2^2 & \cdots & a_2^n \\\ \vdots & \vdots & \vdots & \ddots & \vdots \\\ 1 & a_m & a_m^2 & \cdots & a_m^n \\\ \end{pmatrix} \nonumber $$<p>这是一个数组：</p>$$\begin{array}{c|lcr}value & \text{0} & \text{1} & \text{2} \\ \hline 0 & 0.24 & 1 & 125 \\ 1 & -1 & 189 & -8 \\ 2 & -20 & 2000 & 1+10i \end{array} \nonumber$$<p>我们可以引用公式$\eqref{eq:sample}$, 以下公式书写形式也很常用：</p>$$\operatorname*{Res}_{z=1}\left(\frac1{z^2-z}\right)=1$$ $$\dbinom{n}{r}=\binom{n}{n-r}=C^n_r=C^n_{n-r}$$ $$J_{\alpha}(x)=\sum_{m=0}^{\infty}\frac{(-1)^{m}}{m!\Gamma(m+\alpha+1)}(\frac{x}{2})^{2m+\alpha}$$ $$ i\hbar\frac{\partial \psi}{\partial t} = \frac{-\hbar^2}{2m} \left(\frac{\partial^2}{\partial x^2} + \frac{\partial^2}{\partial y^2} + \frac{\partial^2}{\partial z^2} \right) \psi + V \psi$$<figure class="highlight python"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div><div class="line">6</div><div class="line">7</div><div class="line">8</div><div class="line">9</div><div class="line">10</div><div class="line">11</div><div class="line">12</div><div class="line">13</div><div class="line">14</div><div class="line">15</div><div class="line">16</div><div class="line">17</div><div class="line">18</div><div class="line">19</div><div class="line">20</div><div class="line">21</div><div class="line">22</div><div class="line">23</div><div class="line">24</div><div class="line">25</div></pre></td><td class="code"><pre><div class="line"><span class="keyword">import</span> numpy <span class="keyword">as</span> np</div><div class="line"><span class="keyword">import</span> matplotlib.pyplot <span class="keyword">as</span> plt</div><div class="line"><span class="keyword">import</span> matplotlib.animation <span class="keyword">as</span> animation</div><div class="line"></div><div class="line">fig = plt.figure()</div><div class="line"></div><div class="line"></div><div class="line"><span class="function"><span class="keyword">def</span> <span class="title">f</span><span class="params">(x, y)</span>:</span></div><div class="line">    <span class="keyword">return</span> np.sin(x) + np.cos(y)</div><div class="line"></div><div class="line">x = np.linspace(<span class="number">0</span>, <span class="number">2</span> * np.pi, <span class="number">120</span>)</div><div class="line">y = np.linspace(<span class="number">0</span>, <span class="number">2</span> * np.pi, <span class="number">100</span>).reshape(<span class="number">-1</span>, <span class="number">1</span>)</div><div class="line"></div><div class="line">im = plt.imshow(f(x, y), animated=<span class="keyword">True</span>)</div><div class="line"></div><div class="line"></div><div class="line"><span class="function"><span class="keyword">def</span> <span class="title">updatefig</span><span class="params">(*args)</span>:</span></div><div class="line">    <span class="keyword">global</span> x, y</div><div class="line">    x += np.pi / <span class="number">15.</span></div><div class="line">    y += np.pi / <span class="number">20.</span></div><div class="line">    im.set_array(f(x, y))</div><div class="line">    <span class="keyword">return</span> im,</div><div class="line"></div><div class="line">ani = animation.FuncAnimation(fig, updatefig, interval=<span class="number">50</span>, blit=<span class="keyword">True</span>)</div><div class="line">plt.show()</div></pre></td></tr></table></figure><p><img src="output_15_0.png" alt="png"></p><h1 id="References"><a href="#References" class="headerlink" title="References"></a>References</h1><blockquote><p><strong><em><a href="https://nbconvert.readthedocs.io/en/latest/usage.html#supported-output-formats" target="_blank" rel="external">Supported output formats by nbconvert</a></em></strong><br><strong><em><a href="http://docs.mathjax.org/en/latest/tex.html" target="_blank" rel="external">MathJax TeX and LaTeX Support</a></em></strong><br><strong><em><a href="http://www.pkumonk.me/2014/03/05/hexo-with-latex-support/" target="_blank" rel="external">Add latex support to your hexo theme</a></em></strong><br><strong><em><a href="www.damian.oquanta.info/posts/nikola-nbconvert.html">Nikola + nbconvert realized on Damian blog</a></em></strong><br><strong><em><a href="http://jakevdp.github.io/" target="_blank" rel="external">@jakevdp uses Pelican and Jupyter Notebook to blog</a></em></strong><br><strong><em><a href="https://www.youtube.com/watch?v=py21dq1ZW8s" target="_blank" rel="external">An IPython extension to clean, build and deploy your Nikola</a></em></strong><br><strong><em><a href="https://www.html5rocks.com/en/tutorials/webcomponents/imports/" target="_blank" rel="external">HTML Imports: include for the web</a></em></strong></p><div id="footnotes"><hr><div id="footnotelist"><ol style="list-style:none;padding-left:0"><li id="fn:1"><span style="display:inline-block;vertical-align:top;padding-right:10px">1.</span><span style="display:inline-block;vertical-align:top">Nbviewer does not host notebooks, it only renders notebooks available on other websites.</span><a href="#fnref:1" rev="footnote"> ↩</a></li></ol></div></div></blockquote>]]></content>
      
        <categories>
            
            <category> 技术 </category>
            
            <category> 前端 </category>
            
        </categories>
        
        
        <tags>
            
            <tag> Hexo </tag>
            
            <tag> Jupyter </tag>
            
        </tags>
        
    </entry>
    
    <entry>
      <title><![CDATA[Notes CS224n - NLP with Deep Learning]]></title>
      <url>/%E6%9D%82%E8%B0%88/%E8%AF%BB%E4%B9%A6/notes-cs224n/</url>
      <content type="html"><![CDATA[<script src="/assets/js/APlayer.min.js"> </script><div class="note success"><p>A thorough introduction to cutting-edge research in deep learning applied to NLP, which covers word vector representations, window-based neural networks, recurrent neural networks, long-short-term-memory models, recursive neural networks, convolutional neural networks as well as some recent models involving a memory component.</p></div><a id="more"></a><h1 id="参考文献"><a href="#参考文献" class="headerlink" title="参考文献"></a>参考文献</h1><blockquote><p><strong><em><a href="http://web.stanford.edu/class/cs224n/" target="_blank" rel="external">Course Website</a></em></strong></p></blockquote>]]></content>
      
        <categories>
            
            <category> 杂谈 </category>
            
            <category> 读书 </category>
            
        </categories>
        
        
        <tags>
            
            <tag> NLP </tag>
            
            <tag> deep learning </tag>
            
        </tags>
        
    </entry>
    
    <entry>
      <title><![CDATA[Notes CS231n - CNN for Visual Recognition]]></title>
      <url>/%E6%9D%82%E8%B0%88/%E8%AF%BB%E4%B9%A6/notes-cs231n/</url>
      <content type="html"><![CDATA[<script src="/assets/js/APlayer.min.js"> </script><div class="note success"><p>A deep dive into details of the deep learning architectures with a focus on learning end-to-end models for particularly image classification.</p></div><a id="more"></a><h1 id="参考文献"><a href="#参考文献" class="headerlink" title="参考文献"></a>参考文献</h1><blockquote><p><strong><em><a href="http://cs231n.stanford.edu/index.html" target="_blank" rel="external">Course Website</a></em></strong></p></blockquote>]]></content>
      
        <categories>
            
            <category> 杂谈 </category>
            
            <category> 读书 </category>
            
        </categories>
        
        
        <tags>
            
            <tag> CNN </tag>
            
            <tag> visualization </tag>
            
        </tags>
        
    </entry>
    
    <entry>
      <title><![CDATA[【置顶】法语二三事]]></title>
      <url>/%E6%9D%82%E8%B0%88/%E7%94%9F%E6%B4%BB/article-in-french/</url>
      <content type="html"><![CDATA[<script src="/assets/js/APlayer.min.js"> </script><div class="note success"><p>这里记录了学习法语以来的习作、讲稿、报告、信件等内容，以备咨询。</p></div><a id="more"></a><h1 id="Rapport-Formation-Humaine-FH107"><a href="#Rapport-Formation-Humaine-FH107" class="headerlink" title="Rapport Formation Humaine - FH107"></a>Rapport Formation Humaine - FH107</h1><p>Tout au long de première année, j'ai participé à l'événement « échange avec les personnes réfugiées » dans lequel mon binôme est Nimer MAISARA. Notre échange était assez agréable et je ne tombais pas trop en détail sur son information privée. Contraire à mon impression histoire selon les nouvelles sur télé, mon binôme est une personne avec plein d'énergie positive. Il a un travail et il est souvent très occupé car pendant une semaine sauf le week-end il est seulement libre à deux après-midis. Il gagne sa vie par ses propres efforts et il support ses petits-enfants. Il est aussi assez intéressé par la culture chinoise et nous en avons parlé beaucoup. Quand je demande s'il a des besoins spécifiques, il pense à plus de compétences professionnelles pour qu'il puisse trouver un travail encore mieux dans le marché et s'installer en France est son plus grand souhait. Quand je serai libre pendant les vacances, j'aimerais bien continuer d'échanger la technologie de programmation avec lui.</p><p>Ce programme buddies me permet de faire connaissance avec une personne réfugiée qui a un front arrière culturel totalement différent que moi, d'avoir un échange interculturel et de l'accompagner avec mes plus grandes passions. Je peux lire le courage pour la vie et le souhait pour la paix de mon binôme. La seule suggestion pour ce programme est que ce serait mieux d'avoir des événements hebdomadaires ensemble pour tous les binômes comme une activité de team building, bien que l'échange individuel deux à deux est aussi une partie indispensable. La raison est tout simple : l'aide dont les personnes réfugiées ont vraiment besoin est plutôt faire plus d'amis parce qu'ils souhaitent une intégration dans la société française la plus rapide possible.</p><p>L'application Buddies apporte une opportunité pour chaque intervenant de trouver un buddy qui a presque les mêmes intérêts qui lui-même, ce qui est très important pour la suite de communication et activités. A priori, la différence d'âge ne compte pas pour moi. Par contre, un buddy du même âge que moi serait intéressé par plus de sujets de conversation communs. Autres paramètres pourraient être emploi du temps, activité loisir, distance entre les logements et plats favoris. Application média social comme Facebook n'est pas un moyen très mauvais et on peut créer une façon de login par Facebook dans l'application de cette manière que les binômes peuvent communiquer instantanément sans aucune difficulté. De plus, on peut prendre la note et des photos de la rencontre et les mettre sur Facebook. Les événements d'échange pourraient aussi devenir une partie des activités publics ouvertes à tout le monde intéressé par échange avec les personnes réfugiées. Pour ceux qui ne se contentent pas de faire connaissance avec une seule personne, on pourrait évidemment réserver leur droit d'échanger encore beaucoup et encore mieux avec de nombreuses personnes réfugiées.</p><p>Merci à l'école de me donner cette opportunité d'échanger avec mon binôme.</p><h1 id="PACE-pratiques-et-analyses-de-communication-ecrite"><a href="#PACE-pratiques-et-analyses-de-communication-ecrite" class="headerlink" title="PACE (pratiques et analyses de communication écrite)"></a>PACE (pratiques et analyses de communication écrite)</h1><p><strong>Accompagner les personnes âgées en Chine, une opportunité économique pour la France</strong></p><h2 id="Introduction"><a href="#Introduction" class="headerlink" title="Introduction"></a>Introduction</h2><p>Le vieillissement de la société devient un phénomène important au début du XXIème siècle. On voit<br>de plus en plus des personnes âgées et que parfois il y a des conflits de partage de ressources entre des personnes âgées et autres membres de la société. L'augmentation des personnes âgées pose de nombreux problèmes sociaux : chute de la force de travail par exemple. Cette tendance est un changement remarquable et irréversible selon étude d'anthropologie par l'Institut de la population et de l'économie du travail en Chine. Comment peut-on bien prendre en charge des personnes âgées et en même temps stimuler la croissance de l'économie grâce à la consommation des personnes âgées ? C'est une question à laquelle beaucoup de gens réfléchissent, y compris entrepreneurs, responsables gouvernementaux et sociologues. En effet, les pays développés comme la France qui proposent de bonnes solutions se sont déjà stabilisés dans cette tendance de vieillissement, alors que les pays en voie de développement comme la Chine subissent l'influence négative de cette tendance. Du point de vue économique, accompagner les personnes âgées en Chine, est aussi une opportunité pour la France.</p><p>En résumé, nous allons explorer la question selon cinq parties:</p><ul><li>La situation du vieillissement de la population dans le monde</li><li>Les défis et les problèmes causés par le vieillissement de la population</li><li>Les opportunités représentées par le vieillissement de la société</li><li>Les nouveaux marchés du consommateur liés au vieillissement</li><li>Les ambitieux entrepreneurs français sur le marché chinois</li></ul><h2 id="La-situation-du-vieillissement-de-la-population-dans-le-monde"><a href="#La-situation-du-vieillissement-de-la-population-dans-le-monde" class="headerlink" title="La situation du vieillissement de la population dans le monde"></a>La situation du vieillissement de la population dans le monde</h2><p>On prévoit que le pourcentage de la population mondiale âgée de plus de 50 ans passera de 17,8%<br>en 2000 à 33,5% en 2050. Ce n'est pas seulement le monde développé qui vieillit, comme l'Allemagne, l'Italie et le Japon ayant un taux de natalité bas et une espérance de vie croissante. En Chine, la proportion de la population âgée de 60 ans et plus était de 12% en 2010, mais on s'attend<br>à ce qu'elle atteigne 31% en 2050. Au Brésil, le pourcentage de personnes âgées de 60 ans et plus<br>devrait passer de 10% à 29% sur la même période. En 2030, la France comptera 20 millions de<br>personnes de plus de 60 ans.</p><p>Les raisons pour lesquelles le vieillissement continue dans la population française sont liées à plusieurs aspects. Premièrement, en raison du rôle du développement de la science et le progrès social, la vie humaine est de plus en plus longue. Dans les années soixante-dix, la France est devenue le premier pays où le vieillissement de la population était constaté. Deuxièmement, la société industrialisée moderne a provoqué des changements dans les structures sociales et familiales. Grâce au développement de la force productive, la société a la capacité de fournir la sécurité sociale, l'assurance et la retraite aux personnes âgées de telle sorte qu'une partie de l'obligation de prendre en charge des personnes âgées revient à la société. Troisièmement, l'urbanisation et la modernisation sociaux rendent la volonté d'avoir un bébé plus faible et donc la proportion sociale des personnes âgées de plus en plus importante.</p><p>La Chine, en plus des trois même raisons que la France, a une autre raison politique particulier pour laquelle la société vieillit. La mise en œuvre de la politique de planification familiale fait apparaître un faible taux de fécondité. Afin de contrôler la croissance rapide de la population et de réduire la pression démographique sur le développement économique, depuis les années 1980 le gouvernement Chinois a commencé à mettre en œuvre la politique nationale de base de la planification familiale, ce qui réduit considérablement le taux de fécondité.</p><h2 id="Les-defis-et-les-problemes-a-cause-du-vieillissement-de-la-population"><a href="#Les-defis-et-les-problemes-a-cause-du-vieillissement-de-la-population" class="headerlink" title="Les défis et les problèmes à cause du vieillissement de la population"></a>Les défis et les problèmes à cause du vieillissement de la population</h2><p>Le vieillissement de la population génère de nombreux défis et suscite des inquiétudes par exemple<br>quant au rythme de la croissance économique future, au fonctionnement et à l'intégrité financière des systèmes de retraite et au bien-être des personnes âgées. Ceci est un défi majeur du monde qu'il est mieux d'étudier afin de construire une société humaine durable.</p><p>La Chine maintenant est face à une explosion de ces défis et problèmes de vieillissement. Le degré de vieillissement de la Chine a choqué le monde. Étant donné la faible fécondité, ce rythme de vieillissement va accélérer en Chine. Tout d'abord, le vieillissement de la population fera des déficits dans la retraite. Maintenant le compte actuel de retraite manque 3,1 billions yuan en Chine. Les caisses de retraite devront faire face au dilemme « de moins en moins de travailleurs paient pour la retraite alors que de plus en plus des personnes âgées ramassent la retraite ». À l'heure actuelle, la cotisation de retraite est de 3,2 travailleurs soutenant un bénéficiaire des personnes âgées. Deuxièmement, le vieillissement de la population va réduire l'activité économique. Le Japon, par exemple, est un pays vieillissant, en raison de la baisse de la consommation et du taux d'emploi, l'économie a été à un niveaux très bas. Il est difficile de disperser la brume de la déflation.</p><h2 id="Les-opportunites-representees-par-le-vieillissement-de-la-societe"><a href="#Les-opportunites-representees-par-le-vieillissement-de-la-societe" class="headerlink" title="Les opportunités représentées par le vieillissement de la société"></a>Les opportunités représentées par le vieillissement de la société</h2><p>Mais en même temps la communauté des investisseurs peut très bien trouver de nouvelles façons<br>pour gagner de l'argent grâce au vieillissement. Cette nouvelle opportunité s'appelle souvent «<br>l'économie au service des personnes âgées », qui demande une coopération à travers le monde. Parmi les secteurs qui devraient bénéficier d'une population de plus en plus vieillissante, l'industrie<br>pharmaceutique - en particulier les entreprises axées sur les maladies chroniques et les maladies<br>plus fréquentes chez les personnes âgées est la plus importante. Autres exemples de secteurs qui<br>devraient bénéficier de manière significative seraient cosmétiques et mode, tourisme, robotique de service, le bien-être, la sécurité, la culture, l'éducation, le transport autonome et la banque. En explorant de nouvelles opportunités commerciales, les pays pourront affronter cette tendance de vieillissement irréversible.</p><p>Bien qu'il existe déjà des produits pour les personnes âgées, mais la demande pour des produits plus innovants ont émergé, y compris certaines industries liées à la santé-soins, comme infirmiers à domicile pour les personnes âgées. Investir dans ces industries, pourrait évidemment devenir une stratégie de développement des entreprises à l'avenir. Mais cet investissement ne sera un succès que quand les entreprises créent des produits ou fournissent des services qui répondent véritablement aux besoins des personnes âgées.</p><h2 id="Les-nouveaux-marches-du-consommateur-lies-au-vieillissement"><a href="#Les-nouveaux-marches-du-consommateur-lies-au-vieillissement" class="headerlink" title="Les nouveaux marchés du consommateur liés au vieillissement"></a>Les nouveaux marchés du consommateur liés au vieillissement</h2><p>La hausse du nombre de seniors pousse de nombreux secteurs économiques à repenser leurs offres et services pour répondre au mieux à leurs besoins spécifiques. Premièrement, beaucoup d'activités<br>sont à l'origine des « Assises de l'Habitat » qui se consacrent, par exemple, aux situations de vivre chez soi en situation de handicap. Deuxièmement, il existe des « guide de la maison accessible » qui regroupent tous les produits et services destinés à faciliter le quotidien des seniors. Troisièmement, ce changement se passe aussi pour le secteur médical qui prend soin de la santé des personnes âgées tout au long de la vie quotidienne. De plus, il y a aussi de nouveaux designs de construction pour permettre à une personne âgée de faire sa toilette avec le moins de déplacement possible. La nouvelle maison intelligente adaptée aux personnes âgées dans le futur se caractérisera par ces innovations.</p><p>Le gouvernement Chinois a aussi été ouvert pour tous les start-ups de l'économie des personnes âgées. Le Conseil d'Etat a publié une planification pour le développement du système de retraite. Cette Planification a souligné que d'ici à 2020, le développement du système de retraite aura été sensiblement améliorée, que la proportion du nombre de lits disponibles dans les maisons de retraite ne sera pas moins de 30% et que le gouvernement va encore faciliter investissement aux institutions de retraite pour les capitaux privés. Concrètement, il faudrait accélérer la réforme des institutions de retraite publics, soutenir les capitaux privés à mettre en place l'agence de retraite, et améliorer la qualité de service des institutions de retraite. Le gouvernement encourage également l'adaptation des usines, des installations commerciales et d'autres stocks de biens immobiliers pour les services de retraite. Les politiques mises en place permettent un développement rapide des nouveaux marchés du consommateur liés au vieillissement.</p><h2 id="Les-ambitieux-entrepreneurs-francais-dans-le-marche-chinois-lies-au-vieillissement"><a href="#Les-ambitieux-entrepreneurs-francais-dans-le-marche-chinois-lies-au-vieillissement" class="headerlink" title="Les ambitieux entrepreneurs français dans le marché chinois liés au vieillissement"></a>Les ambitieux entrepreneurs français dans le marché chinois liés au vieillissement</h2><p>En France, le projet « Silver Valley » regroupe en Ile-de-France 140 acteurs liés à Silver Economie. Les projets français se développent dans des domaines variés : santé (39%), numérique (35%), lien social (30%), habitat (17%), services, loisirs, … Ce sont toutes les jeunes entreprises innovantes qui cherchent à développer leur business dans le monde, en essayant d'entrer dans nombreux marchés émergents, y compris surtout le grand marché chinois.</p><p>Le groupe montre la compétence très forte de la France dans le nouveau marché de l'industrie Silver Economie. Ce réseau fédère 5 types d'acteurs représentant l'ensemble de la chaine de valeur de la filière. Premièrement, les fournisseurs de biens et services - regroupe les entreprises qui développent des solutions pour les seniors et leurs proches : industriels, distributeurs, fabricants, développeurs de services, les acteurs du service à la personne, les établissements d'hébergement, etc. Deuxièmement, les partenaires de l'innovation - intègre les établissements d'enseignement supérieur, les organismes de formation ; les laboratoires, centres de recherches publics ; les structures publiques de développement économique, syndicats et fédérations. Troisièmement, le prestataire de services aux entreprises - intègre les acteurs qui proposent contre rémunération des services de conseil aux entreprises. Quatrièmement, le partenaire du financement des entreprises - intègre les acteurs qui accompagnent financièrement la croissance et le développement des innovations des entreprises. Finalement, les représentants des utilisateurs - regroupe les collectivités locales, les hôpitaux et structures de prise en charge sanitaire, les associations d'utilisateurs, les financeurs de l'autonomie (mutuelles, assureurs, banques).</p><p>Etant donné le haut niveau de développement de service Silver Economie en France, le gouvernement chinois a très envie d'accueillir tous les entrepreneurs ambitieux français sur le marché chinois liés au vieillissement. En février 2017, le premier ministre de la France Bernard Cazeneuve était invité à avoir une rencontre avec le Premier ministre chinois. Pendant cette visite en Chine, les deux parties ont adopté une déclaration d'intention sur la coopération dans la politique de soins aux personnes âgées, qui partagent les valeurs préconisées pour la solidarité entre les générations, pour faire face conjointement aux défis posés par le vieillissement de la population. Accompagné par le Premier ministre français, le directeur de ORPEA (un acteur de référence européen dans la prise en charge globale de la Dépendance en proposant une offre de services et de soins complémentaires, à domicile, en moyen ou long séjour, quel que soit l'âge et la perte d'autonomie) est venu en Chine pour participer à la discussion de la coopération. Le Groupe ORPEA est un exemple de réussite dans le marché chinois des entreprises françaises liées au service des personnes âgées, qui est venu en Chine il y a trois ans.</p><p>La Chine maintenant voudrait chaleureusement accueillir plus d'entreprises innovantes françaises et leur possibilité de réussite est illimitée. En effet, d'une part, les services de retraite et de produits en France ont été dans une position de leader. Que ce soit la conception globale des installations, de soins infirmiers ou de soins à domicile, les Français ont une telle société particulière de l'offre de solutions. D'autre part, le grand besoin de service lié aux personnes âgées en Chine est également une cible de marché importante pour ces entreprises innovantes françaises.</p><h1 id="Management-jeu-dentreprise-SES107"><a href="#Management-jeu-dentreprise-SES107" class="headerlink" title="Management: jeu dentreprise - SES107"></a>Management: jeu d'entreprise - SES107</h1><p>Dans la réalité, la capacité d'innovation d'une entreprise dépend-elle d'autres éléments que du nombre de chercheurs en R&amp;D et de leur niveau de salaire, comme cela est-il modélisé dans le jeu ?</p><p><strong>R</strong> : Tout d'abord, pour innover, l'entreprise doit s'appuyer sur ses bases de connaissances internes, les exploiter mais aussi mobiliser les informations et connaissances externes. Ainsi, les connaissances ne sont plus seulement considérées comme un output de l'innovation, mais aussi comme un élément fondamental de la capacité d'innovation de la firme. Deuxièmement, leurs modes de coordination et de coopération avec les partenaires externes comptent aussi. Troisièmement, l'ensemble des caractéristiques territoriales, marchandes et institutionnelles de l'environnement de la firme influence aussi sa capacité d'innovation, comme Silicon Valley.</p><p>L'hypothèse d'un recours limité à la sous-traitance vous paraît-elle réaliste dans l'industrie à laquelle le jeu fait référence ? Le choix entre production et sous-traitance dépend-il d'autres éléments que le prix, le planning et la capacité, comme cela est modélisé dans le jeu ?</p><p><strong>R</strong> : Oui, c'est réaliste dans l'industrie. Certains coûts sont assez importants pour ce choix : transports, douanes, assurances, dommages en transit, etc. Si la sous-traitance peut accroître la marge de manœuvre, elle peut aussi empêcher de maîtriser son destin stratégique. Ce n'est plus seulement alors un problème de coûts qui se pose à l'entreprise, mais celui de son avenir. D'un point de vue stratégique, il ne faut pas confondre entrée sur le marché et installation. Si le recours massif à la sous-traitance permet d'abaisser le prix d'entrée, il n'est pas sûr que cette politique soit la meilleure à terme. Soit l'entreprise ne parvient pas à sortir de la posture d'assembleur, soit elle n'arrive pas à maîtriser son système d'offre. Ainsi, la décision de sous-traiter doit être abordée en termes de développement et d'identité de la firme, et ne peut se réduire à des considérations de coûts et de valorisation.</p><p>Dans la réalité, quels peuvent être, pour les entreprises, les risques et bénéfices à communiquer sur la RSE ? Illustrez votre propos par des exemples.</p><p><strong>R</strong> : Une entreprise peut tirer d'importants bénéfices : l'amélioration des pratiques de management des risques ; l'amélioration de sa réputation et le fait que l'opinion publique lui accorde encore plus sa confiance ; l'amélioration des relations qu'elle entretient avec ses parties prenantes ; l'amélioration du moral et de la motivation des employés, de la sécurité et de la santé des travailleurs et des travailleuses, et le fait d'influer positivement sur sa capacité à recruter, motiver et retenir ses employés ; le fait de réaliser des économies liées à l'amélioration de la productivité et à la plus grande efficacité des ressources, à une moindre consommation d'énergie et d'eau, à une réduction des déchets, à la récupération des chutes de production et à l'amélioration de la disponibilité des matières premières ; l'amélioration de la fiabilité et de l'équité des transactions par un engagement politique responsable, la libre concurrence et l'absence de corruption ; la prévention ou la réduction des conflits potentiels avec les consommateurs à propos de produits ou de services.</p><p>Néanmoins, il mène à s'interroger sur différentes questions de fond : Au niveau de la communication : les entreprises peuvent être tentées d'adopter une stratégie de communication superficielle et dans ce cas ne pas traiter les risques en profondeur. Une communication sans structuration préalable des informations peut discréditer l'entreprise ; Au niveau juridique et ethnique : la complexité du droit est une difficulté; Au niveau macroéconomique et financier : la mise en œuvre de programme transversaux dans l'ensemble des entreprises nécessite l'application de normes qui touchent à la structure du droit, à la comptabilité nationale, à la finance, aux marchés pouvant s'avérer complexe et ne dépendant pas exclusivement de l'entreprise; Au niveau management : généralement les visions, les responsabilités et les actions entre les qualiticiens, les responsables de la veille réglementaire, les responsables en environnement, les juristes, et autres sont fragmentés, ce qui entraîne la complexité d'organiser ce type de programme et suppose une coordination entre les parties ; Au niveau des risques : la perception de l'environnement et des risques peut être entravée par le biais cognitifs, le biais culturel et autres.</p><p>Quels sont les enjeux éthiques liés aux prix de transfert ?</p><p><strong>R</strong> : Dans la perspective libérale, le prix de transfert ne sera jamais « juste » d'un point de vue éthique parce qu'il n'est pas élaboré par la mécanique du marché, et parce qu'il est impossible de déterminer de manière objective les « vrais » coûts. Il reste la table de négociations où les autorités fiscales du pays et les représentants de l'entreprise ou de la filiale n'ont d'autres choix que de chercher des solutions mutuellement acceptables en prenant appui sur les textes internationaux, comme les recommandations de l'OCDE, ou sur les compétences de leurs conseillers juridiques et fiscaux. La négociation met en présence des acteurs aux compétences, connaissances et moyens d'action différents.</p><p>La qualité éthique des prix de transfert dépend autant des faits, des méthodes et des intérêts des protagonistes que de leur sens de la justice commutative. L'entreprise transnationale cherche à préserver sa vitalité économique et donc aussi à tirer avantage des localisations à faible fiscalité. Elle organise donc ses transferts de manière à ce qu'une part aussi importante que possible de sa valeur ajoutée soit comptabilisée dans ces juridictions. Pour minimiser les résultats d'exploitation dans les juridictions à fiscalité élevée, elle prend tout un spectre de décisions allant du stratégique (choix des localisations) à l'opérationnel (choix du niveau des prix de transfert). Ainsi, la question éthique ne culmine qu'en apparence dans les prix de transfert, puisqu'elle est déjà implicitement présente dans chacune des décisions antérieures dont aucune ne saurait être motivée de manière suffisante par le seul souci du respect de la loi.</p><h1 id="Une-visite-a-EDF-Paris-SES108"><a href="#Une-visite-a-EDF-Paris-SES108" class="headerlink" title="Une visite à EDF Paris - SES108"></a>Une visite à EDF Paris - SES108</h1><h2 id="Compte-rendu-dappreciation-generale"><a href="#Compte-rendu-dappreciation-generale" class="headerlink" title="Compte-rendu dappréciation générale"></a>Compte-rendu d'appréciation générale</h2><p>Étant très curieux d'explorer des enjeux de TIC (technologies de l'information et de la communication) dans l'industrie d'énergie, je me suis rendu Mardi à l'après-midi au siège du centre de recherche et développement d'EDF (EDF Lab Paris-Saclay), au cœur du plateau de Saclay dans le quartier de l'Ecole Polytechnique.</p><p>La visite a commencé par une brève introduction à EDF Lab Paris-Saclay donnée par la responsable Sophie, qui nous accueillait chaleureusement à l'entrée du bâtiment Azur. Ce labo sert, dans la stratégie du groupe, à un nouveau pôle d'excellence qui non seulement développe les systèmes électriques innovants de demain et les nouveaux services attendus par clients, mais aussi transmet des savoirs et renouvelle des compétences via des échanges avec le monde académique. Il serait alors probable, à mon avis, que nous y irions régulièrement après l'année 2018 où notre école rejoindra l'Université Paris-Saclay !</p><p>Après nous être installés dans un salon d'innovation, nous avons découvert avec grand enthousiasme les prototypes des projets innovants qui pouvaient être classés parmi trois thèmes différents, que ce soient sur la société intelligente, la basse production du carbone et la gestion des centrales nucléaires.</p><p>Ce qui m'a fortement impressionné, c'était la technologie Lifi qui se traduit par la transmission d'information via la lumière de façon beaucoup plus efficace que l'onde électromagnétique. L'application de cette technologie pourrait être sur la gare où un voyageur passe son téléphone portable au-dessous d'une lampe pour savoir toutes les informations de son train. Sophie nous a aussi présenté le logiciel de la gestion des centrales nucléaires dans lequel tout élément était indexé et tous les paramètres étaient mesurables. Sachant que l'intervention dans les centrales est assez dangereuse, le logiciel permet de la mieux préparer. A partir de ce point, on constate que TIC joue un rôle bien plus important que celui de fournir de la commodité et de gagner de l'argent.</p><p>La suite du programme consistait en une présentation de la sécurité informatique dans l'industrie animée par Frédéric Guyomard. Il a introduit le processus standard industriel pour superviser le déroulement du réseau en sécurité, qui s'appelle souvent Scada. Nous avons aussi comparé deux concepts fondamentaux dans la sécurité du réseau, qui étaient « Authentification », équivalent à identification, et « Authenticité », traduit par l'intégrité des données. En raison du temps limité, je n'ai pas posé toutes mes questions. De toute façon, la présentation a véritablement m'attiré dans le domaine de la sécurité du réseau.</p><p>Dans la dernière étape du programme, Hadrien Leroyer nous a emmenés dans le monde de la réalité virtuelle. A la suite de la présentation du système de supervision en 3D, nous avons eu l'occasion de tester le casque de la réalité virtuelle, qui simulait la présence physique dans une centrale nucléaire artificiellement générée par le logiciel. Il était fortement amusant qu'on interagissait avec l'environnement pour simuler la réparation. Cependant, c'était un peu dommage de ne pas avoir su l'histoire derrière de développement du logiciel, qui pourrait éventuellement être un secret commercial.</p><h2 id="Compte-rendu-personnel"><a href="#Compte-rendu-personnel" class="headerlink" title="Compte-rendu personnel"></a>Compte-rendu personnel</h2><p>Cette visite de l'entreprise EDF, en plus de m'avoir bien plu, m'a permis de découvrir la technologie numérique valorisée dans l'industrie d'énergie et de toucher du doigt le domaine de la sécurité du réseau ainsi que la réalité virtuelle qui m'intéressent beaucoup. Ainsi, je remercie avant tout tous les enseigneur(e)s de m'avoir donné cette opportunité. J'étais bien inspiré par la discussion avec les trois animateurs et cette expérience m'a apporté plusieurs choses.</p><p>D'abord, en tant qu'étudiant étranger, c'était la première fois que j'entrais si proche dans les locaux d'une entreprise monopole française. J'ai alors pu découvrir la façon de travail, la pensée au future de l'industrie et également la culture de l'entreprise. Toutes les observations assouvissaient ma curiosité et m'a mis dans une profonde réflexion. En effet, quant à la façon de travail, par exemple, j'ai remarqué que les ingénieurs qui n'étaient pas là pour nous accueillir étaient bien ponctuels et travaillaient devant l'ordinateur très sérieusement, même si nous y passions et bavardions avec l'animateur. Evidemment ce n'était pas le style romantique français. C'était l'esprit d'ingénieur bien installé dans la culture française que je dois impérativement apprendre aussi dur que j'apprends la science et la technologie.</p><p>Ensuite, lors de la présentation de la réalité virtuelle, de nombreux diagrammes d'illustration collés sur le mur m'a immédiatement fait penser au PACT (Projet d'Apprentissage Collaboratif Thématique). Nos futurs ingénieurs sont déjà en train de faire ce qui est demandé dans le travail en réalité ! Ceci m'a affirmé que l'enseignement dans l'école est bien pratique et efficace, et que plus je prends en charge sérieusement les projets et les travaux pratiques, plus je serai compétent à l'avenir. Un autre point essentiel, c'est que je dois pratiquer beaucoup à coder, sachant que soit le logiciel de la gestion des centrales nucléaires, soit le générateur de la réalité virtuelle, ils sont tous les fruits prestigieux du travail de code pris en charge par centaines d'ingénieurs. A condition de ne pas avoir peur de la programmation, ce serait un travail très agréable pour moi !</p><p>Enfin, la curiosité pour la sécurité du réseau et la réalité virtuelle m'orientera dans le choix des filières dans la deuxième année. En effet, tous les deux domaines sont possible d'être abordés dans notre école et ils ont une application très diverse selon ce que j'ai vu dans cette visite. Cela me donnera aussi une bonne voie pour obtenir un métier hors les industries ou les services numériques « traditionnels », qui pourrait être plus intéressant ou voir une croissance plus forte à l'avenir. Par exemple, la réalité virtuelle a déjà été appliquée pour des achats en ligne dont le succès a bien dépassé nos espérances. On a ainsi plus de chance pour réussir à créer un start-up dans ce domaine.</p><p>Pour conclure, tant que je bien étudie dans notre école, cette visite m'a fait penser au fait qu'il est rassurant d'avoir une place satisfaisante dans la vie professionnelle à l'avenir.</p><h1 id="Compte-rendu-pour-la-table-ronde-metiers-STIC101"><a href="#Compte-rendu-pour-la-table-ronde-metiers-STIC101" class="headerlink" title="Compte-rendu pour la table ronde métiers - STIC101"></a>Compte-rendu pour la table ronde métiers - STIC101</h1><p>Tout au long de la première année, j'ai assisté à sept tables rondes métiers dont les sujets sont respectivement:</p><ul><li>Les métiers de la Data</li><li>Conseils et métiers pour les services numériques et la transformation</li><li>Le conseil en stratégie, en organisation et en management</li><li>Fireside Chat with Ian Rogers - Chief Digital Officer, LVMH</li><li>Sécurité des SI et Cybersécurité</li><li>Innover et entreprendre en poursuivant par une formation doctorale</li><li>Transport &amp; Energie</li></ul><p>Les sept tables rondes métiers m'ont permis de découvrir des aspects numériques industriels très variés, d'être inspiré par de nouvelles idées que les intervenants fournissent et de comprendre plus en profondeur mon futur métier dans le monde numérique. En ce qui concerne le plus mon projet et intérêt professionnel, je vais m'attarder sur trois tables rondes métiers : Les métiers de la Data, Sécurité des SI et Cybersécurité et Innover et entreprendre en poursuivant par une formation doctorale. Le développement est divisé en deux parties pour mieux organiser cet article.</p><h2 id="Metiers-de-la-Data-et-le-doctorat"><a href="#Metiers-de-la-Data-et-le-doctorat" class="headerlink" title="Métiers de la Data et le doctorat"></a>Métiers de la Data et le doctorat</h2><p>Cinq entreprises étaient présentes sur la table ronde Métier de la Data : ARTEFACT (utilise les data pour réinventer la communication), Air Liquide, NETATMO (fait les objets connectés pour la maison), Safran et Nokia.</p><p>Pendant la conférence, les intervenants ont discuté principalement sur deux problèmes : Que font les ingénieurs de la Data et comment la technologie de Big Data rend le fonctionnement des entreprises plus efficace. Tout d'abord, les intervenants ont souligné que les champs d'application du Big Data sont très vastes et que donc les missions de l'ingénieur de la Data le sont aussi. Mais la plus importante mission est de valoriser les données, via leur expertise en mathématiques et informatique. Chez Air Liquide, les ingénieurs font de la donnée un actif essentiel afin de contrôler à distance la production et d'optimiser la consommation énergétique. Chez NETATMO, les ingénieurs exploitent les données accumulées pour ajuster le fonctionnement des objets connectés à la convenance des utilisateurs. Chez Safran, les ingénieurs travaillent dans une entité dédiée au big data qui s'appelle « Safran Analytics » pour baisser la consommation en passant par la maintenance prédictive.</p><p>Je mets le métier de la Data à la première place de mon projet professionnel pour plusieurs raisons. Premièrement, lors de la discussion avec les intervenants, ils m'ont dit que rigoureux, méthodique et organisé sont trois profils les plus appréciés par des entreprises et je pense que je les déjà possède au sein de ma qualité personnelle. Deuxièmement, je suis sensible à la variation de nombre et quand je travaille avec beaucoup de chiffres, je suis très motivé et heureux. Par ailleurs, traitement des données de grand volume exige une étude sur les algorithmes performants et sur le développement des logiciels modernes variés que j'adore bien, alors que ce n'est pas le cas dans le domaine de télécommunication physique comme onde et électronique. Finalement, dans le domaine Data il y a beaucoup de start-ups maintenant où je préfère de travailler là-dedans.</p><p>Le problème est que dans le domaine de la Data, un exécuteur de profil ingénieur ou un chercheur de profil doctorat, qui pourrais aller plus loin et jouer un rôle central. La réponse est peut-être les deux mais je vois de plus en plus d'appréciation pour doctorat, au moins en Chine. C'est un peu différent pour la France, car dans le cas général pour une même génération, ingénieurs sont plus appréciés par des entreprises que les doctorats sans diplôme d'ingénieur. Pendent la conférence « Innover et entreprendre en poursuivant par une formation doctorale », les intervenant ont bien insisté que l'étude de doctorat est une occasion de découvrir librement ce qu'on aime bien savoir bien que le travail en temps complet, surtout la rédaction des thèses, est assez dur. Je ne voudrais pas rater cette bonne occasion et j'aimerais bien de chercher, après la scolarité d'ingénieur, s'il y a de la chance pour moi de rentrer dans un laboratoire ou un groupe de recherche qui pilote des études dans le domaine de la Data.</p><h2 id="Securite-des-SI-et-Cybersecurite"><a href="#Securite-des-SI-et-Cybersecurite" class="headerlink" title="Sécurité des SI et Cybersécurité"></a>Sécurité des SI et Cybersécurité</h2><p>Les métiers de la Data sont destinés à exploiter des données, alors que les métiers de la sécurité sont pour protéger des données. La sécurité est un des besoins les plus basiques des être-humains. Les intervenants ont introduit de manière générale le système de contrôle de sécurité dans les entreprises ainsi que des algorithmes de base, comme AES, MD5 et SHA1. Ce sont bien des compléments indispensables pour les ingénieurs de la Data à part de la science des données. J'aimerais bien choisir la filière réseau comme une deuxième filière dans la deuxième année parce que non seulement elle est complémentaire pour la science des données mais aussi beaucoup de conceptions des algorithmes de réseau restent pertinents dans le domaine de science des données.</p><p>Par ailleurs, pendant la discussion avec un intervenant après la table ronde, j'ai su que la communication quantique pourrait dans le futur déclencher une révolution dans le domaine de cybersécurité qui m'intéresse beaucoup. Récemment un lancement d'un satellite quantique pour la communication quantique en Chine attire aussi mon attention. En tant qu'un ingénieur numérique, je dois acquérir une base assez solide dans ce domaine avant de suivre le développement de cette révolution.</p><p>Merci à l'école pour nous donner cette bonne occasion d'échanger avec les diplômés précédents!</p><h1 id="Ecrit-detonnement-Stage-de-formation-humaine"><a href="#Ecrit-detonnement-Stage-de-formation-humaine" class="headerlink" title="Ecrit détonnement - Stage de formation humaine"></a>Ecrit d'étonnement - Stage de formation humaine</h1><p>Ce stage de première année a été l'occasion pour moi de confronter les enseignements de formation humaine suivis à l'école avec une expérience professionnelle dans un environnement interculturel d'une durée d'un mois. Il a pour objectif de me faire découvrir la fonction linguistique dans sa dimension pratique. Par ailleurs, ce stage devrait m'orienter dans mon projet professionnel. En effet, pendant ce stage je pourrais travailler face à nombreux types de clients, enfants et travailleurs, débutants et utilisateurs de chinois, etc., ce qui est une bonne pratique pour moi de bien gérer la relation client-entreprise. Je souhaitais aussi découvrir un secteur d'activité qui ne m'est pas connu : gestion d'un institut de langue en tant qu'assistant pédagogique. Ce secteur me permettait à la fois de travailler en français, en chinois, et parfois en anglais, ce qui me paraissait être un double avantage pour étendre mes compétences.</p><p>Mon stage s'est déroulé au centre Chinese Institute de Montparnasse, situé au 19 rue de la Sablière, dans le quatorzième arrondissement de Paris. C'est le plus grand centre de formation de Chinese Institute. J'ai intégré le service pédagogique pendant un mois, du 1 août au 28 août. L'équipe est composée d'un gérant, deux salariés, cinq stagiaires et une trentaine de professeurs de chinois.</p><p>Chinese Institute est une entreprise française, créée en 2011, par trois diplômés de l'ESSEC. Cette entreprise est née d'une volonté de créer la première école en France uniquement consacrée au chinois pour répondre à un besoin en constante augmentation dans les écoles, dans les universités, mais aussi dans les entreprises. « Parlez la langue du futur », c'est même le slogan de Chinese Institute. Selon les créateurs, parler chinois serait un passeport pour l'emploi et une plus-value pour les cadres qui pourraient demander jusqu'à 15% de plus sur leurs salaires. 900 entreprises françaises travaillent aujourd'hui avec la Chine dans le commerce, l'industrie, l'hôtellerie ou le tourisme, et le constat est sans appel : sur un CV, parler couramment chinois compte même plus que l'anglais.</p><p>Aujourd'hui, avec deux écoles de chinois à Paris et une couverture nationale large, Chinese Institute est le spécialiste français de l'enseignement de la langue chinoise et compte plus de 500 élèves. Les formations proposées sont destinées aux particuliers et aux professionnels. Le secteur de l'enseignement du chinois est certes en constante augmentation, mais reste un petit marché comparé aux secteurs de l'enseignement primaire, les formations professionnelles et l'enseignement supérieur, ce qui permet à Chinese Institute de n'avoir que très peu de concurrents sur ce marché. Les trois principaux concurrents sont Institut Chinois, EnSino et l'Institut Confucius.</p><p>M. Raphaël LORIN est dirigeant et conseiller pédagogique de Chinese Institute. L'entreprise est composée de deux salariés à plein temps, un alternant et une trentaine de professeurs de chinois en CDD ou CDI. Rui WANG est la responsable pédagogique. Massi DJEMAH est le responsable administratif et comptable. Mehdi est alternant, il est commercial BtoC à Chinese Institute. La clientèle de Chinese Institute est très variée : le plus jeune élève a moins de deux ans et le plus vieux a plus de 80 ans. Les clients ont le choix entre deux programmes : soit Programme Chinois Intensif pour les étudiants qui souhaitent se plonger dans la culture chinoise et apprendre le mandarin en Chine, soit Programme de stage qui combine placement en stage, cours de chinois et logement. L'activité commerciale de Chinese Institute englobe aussi bien la téléprospection et la télévente, que le conseil et suivi pédagogique, la gestion des plannings, le recrutement de nouveaux professeurs, la signature des contrats, les rendez-vous clients, et surtout la gestion, par le gérant, d'une équipe.</p><p>Ma première mission a été la gestion de planning des professeurs. Chinese Institute utilise le logiciel de service à la personne, « XIMI », pour la gestion administrative. C'est un logiciel accessible depuis n'importe où sans installation. Il permet de planifier les cours, gérer les prospects, les devis, la facturation, les règlements, les attestations fiscales, la paie, les missions et les ressources humaines. Après l'inscription d'un élève, c'est le service pédagogique qui doit chercher un bon professeur pour l'élève et créer un lien entre lui et le professeur. Si ce lien est bien créé, c'est-à-dire le professeur est disponible pour cet élève et également le client est d'accord de ce professeur, le service pédagogique doit créer une mission sur XIMI.</p><p>Mon travail est de chercher un professeur selon la disponibilité de client et contacter ce professeur pour voire qu'est-ce qui va à cet élève (la distance, les horaires, le niveau, etc.). Après avoir confirmé avec le professeur, je dois envoyer un mail de confirmation au client et aussi le professeur. Suite à ça, je dois créer une mission sur XIMI ainsi que le planning de professeur. De côté du professeur, chacun a un code sur la plate-forme de XIMI et peut consulter et gérer leur propre page de planning. Bien sûr il y aura des changements de planning à cause d'absence ou d'urgence du professeur ou du client, je dois donc bien suivre le déroulement de chaque mission pour assurer que le planning sur XIMI soit toujours synchronisé. A la fin de chaque mois, je dois calculer et confirmer les heures de cours totales réalisées de ce moi par chaque professeur, les résumer, et ensuite l'envoyer à notre comptable pour calculer le salaire de professeur. A part de la gestion de planning, je prends aussi en charge d'imprimer et numériser les supports de cours chinois, voir écrire moi-même quelques-uns. Une difficulté était que la numérisation page par page était trop lente. Par conséquent, je l'ai résolue en écrivant un programme en Python pour que je puisse les numériser deux pages à chaque fois et puis les couper en pages indépendantes. Cette méthode a été très appréciée par le dirigeant et j'ai contribué ce programme à Chinese Institute lors mon départ.</p><p>J'ai également pendant ce stage assumé la responsabilité de cours d'essai, c'est-à-dire la première rencontre avec de nouveaux clients. Cours d'essai est non seulement un cours de découverte qui présente principalement la phonétique, notamment le pinyin, et une structure de phrase de base, mais aussi une occasion d'établir pour la première fois la relation client-entreprise, de communiquer en profondeur avec eux et de personnaliser la formation afin de répondre à leurs besoins. Pour cela, ma maîtresse de stage m'a donné des manuels que l'école a utilisés et les sites utiles pour l'enseignement. Avant chaque cours, j'ai toujours bien étudié d'abord le manuel que nous allons utiliser et préparé le cours pour qu'il soit plus amicale. J'avais le plaisir d'accueillir deux nouvelles clientes : La première était une débutante, elle prenait le pack suivi du chinois pour l'objectif de voyager en Chine ; la deuxième avait une base de vocabulaire et grammaire, elle suivait le chinois des affaires pour l'objectif de trouver un travail dans le domaine de commerce.</p><p>En plus de mes missions orientées pédagogiques, j'ai également travaillé sur des missions de traduction, gérées directement par le gérant M. Raphaël. Les thèmes de traduction sont assez variés, comme contrat commercial, texte du site, présentation commerciale en PPT, et le plus important, un nouveau site Internet que Chinese Institute veut développer pour le cours de français pour les Chinois (www.fayuke.fr).</p><p>Ce stage a été l'expérience la plus enrichissante et instructive depuis ma 1ère année à l'école. J'ai particulièrement apprécié l'ambiance start-up et les personnes avec qui j'ai travaillé pendant ce mois. La responsable et le gérant me faisaient entièrement confiance, ils me laissaient gérer mes missions en m'imposant seulement des délais, ce qui m'a permis de développer des compétences nécessaires. C'est à Chinese Institute que j'ai vraiment pu découvrir ce qu'est le travail en équipe et la convivialité au sein d'une jeune entreprise.</p><h1 id="Lettre-a-mes-camarades-dans-PACT"><a href="#Lettre-a-mes-camarades-dans-PACT" class="headerlink" title="Lettre à mes camarades dans PACT"></a>Lettre à mes camarades dans PACT</h1><p>Salut à tout le monde,</p><p>D'après mon camarade, un prix d'excellence est remis pour notre groupe. Bravo ! En ce moment, vous avez finalement changé mon avis sur la pédagogique de PACT. A la place des technologies et du produit réalisés, jouer et apprendre ensemble de manière collaborative pour une idée intéressante est beaucoup plus important.</p><p>Peut-être due à mon expérience de pas mal de projets à l'université et stages chez entreprise, mon évaluation se pose toujours sur le résultat : franchement je trouvais notre projet apparemment « naïf et vaut rien » parce que plusieurs points essentiels ne sont pas réalisés, que l'utilisation n'est pas tout à fait pratique, et que vous ne vous sentiez pas assez motivés pour remédier des fautes et atteindre le parfait (mais en fait peut-être dû à la limite du temps, à trop de devoirs et activités ou encore à la manque initialement de la connaissance et de la pratique des technologies).</p><p>C'était aussi pourquoi finalement j'ai perdu la motivation après avoir fini ma propre partie. C'est dommage que je ne puisse pas bosser jusqu'au dernier moment pour vous aider à améliorer le travail encore plus. J'avoue que mon comportement est trop arbitraire et irresponsable, et j'espère que vous perdrez éternellement cette mémoire désagréable dans la poubelle.</p><p>Enfin je trouve que vous méritez tous véritablement le titre « élite des français dans une grande école » et j'apprécie vos très bonnes qualités. Antoine deviendra très probablement un leader excellent dans une entreprise tandis que Raphaël possède toutes les qualités pour un leader politique (futur président français). Rémi est très ponctuel et diligent tandis que Marc-Antoine est de l'esprit agile. Camille joue un rôle indispensable dans un équipe parce qu'elle est toujours capable de bien collaborer à l'exécution et son gâteau est vraiment le meilleur que j'aie jamais goûté.</p><p>C'est une expérience précieuse dans ma mémoire pour toujours. Très heureux d'avoir travaillé avec vous tous et vous souhaitant du fond de mon cœur mes meilleurs vœux pour vous et vos futurs brillants.</p><p>Yukun<br>2017/4/24</p>]]></content>
      
        <categories>
            
            <category> 杂谈 </category>
            
            <category> 生活 </category>
            
        </categories>
        
        
        <tags>
            
            <tag> français </tag>
            
        </tags>
        
    </entry>
    
    <entry>
      <title><![CDATA[Coding for Fun (Ⅰ)]]></title>
      <url>/%E6%8A%80%E6%9C%AF/%E7%AE%97%E6%B3%95/codingforfun-1/</url>
      <content type="html"><![CDATA[<script src="/assets/js/APlayer.min.js"> </script><div class="note success"><p><strong>Keep coding like an artist!</strong> Here are ideas, as well as their solutions written in <span style="color:#dc143c;font-weight:700">C++</span>, <span style="color:olive;font-weight:700">Java</span> or <span style="color:teal;font-weight:700">Python</span>, for some interesting problems posted on well-known OJ platforms.</p></div><a id="more"></a><h1 id="LeetCode"><a href="#LeetCode" class="headerlink" title="LeetCode"></a>LeetCode</h1><h1 id="Hihocoder"><a href="#Hihocoder" class="headerlink" title="Hihocoder"></a>Hihocoder</h1><h1 id="CodeJam"><a href="#CodeJam" class="headerlink" title="CodeJam"></a>CodeJam</h1><h2 id="2018-Practice-Session"><a href="#2018-Practice-Session" class="headerlink" title="2018-Practice Session"></a>2018-Practice Session</h2><h3 id="Number-Guessing"><a href="#Number-Guessing" class="headerlink" title="Number Guessing"></a>Number Guessing</h3><p>二分查找，交互式问题</p><figure class="highlight cpp"><figcaption><span>solution in C++</span><a href="/code/CodeJam/numberGuessing.cpp">view raw</a></figcaption><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div><div class="line">6</div><div class="line">7</div><div class="line">8</div><div class="line">9</div><div class="line">10</div><div class="line">11</div><div class="line">12</div><div class="line">13</div><div class="line">14</div><div class="line">15</div><div class="line">16</div><div class="line">17</div><div class="line">18</div><div class="line">19</div><div class="line">20</div><div class="line">21</div><div class="line">22</div><div class="line">23</div><div class="line">24</div><div class="line">25</div><div class="line">26</div><div class="line">27</div><div class="line">28</div><div class="line">29</div><div class="line">30</div><div class="line">31</div><div class="line">32</div><div class="line">33</div></pre></td><td class="code"><pre><div class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string">&lt;bits/stdc++.h&gt;</span></span></div><div class="line"><span class="keyword">using</span> <span class="keyword">namespace</span> <span class="built_in">std</span>;</div><div class="line"></div><div class="line"><span class="function"><span class="keyword">int</span> <span class="title">main</span><span class="params">()</span></span></div><div class="line">{</div><div class="line">    <span class="comment">//freopen("in.txt", "r", stdin);</span></div><div class="line">    <span class="keyword">int</span> num_test_cases;</div><div class="line">    <span class="built_in">cin</span> &gt;&gt; num_test_cases;</div><div class="line">    <span class="keyword">for</span> (<span class="keyword">int</span> caseNum = <span class="number">1</span>; caseNum &lt;= num_test_cases; ++caseNum)</div><div class="line">    {</div><div class="line">        <span class="keyword">int</span> lo, hi;</div><div class="line">        <span class="built_in">cin</span> &gt;&gt; lo &gt;&gt; hi;</div><div class="line">        <span class="keyword">int</span> num_tries;</div><div class="line">        <span class="built_in">cin</span> &gt;&gt; num_tries;</div><div class="line">        <span class="comment">/****** core ******/</span></div><div class="line">        <span class="keyword">int</span> head = lo + <span class="number">1</span>, tail = hi;</div><div class="line">        <span class="keyword">while</span> (<span class="literal">true</span>)</div><div class="line">        {</div><div class="line">            <span class="keyword">int</span> m = (head + tail) / <span class="number">2</span>;</div><div class="line">            <span class="built_in">cout</span> &lt;&lt; m &lt;&lt; <span class="built_in">endl</span>;</div><div class="line">            <span class="built_in">string</span> s;</div><div class="line">            <span class="built_in">cin</span> &gt;&gt; s;</div><div class="line">            <span class="keyword">if</span> (s == <span class="string">"CORRECT"</span>)</div><div class="line">                <span class="keyword">break</span>;</div><div class="line">            <span class="keyword">if</span> (s == <span class="string">"TOO_SMALL"</span>)</div><div class="line">                head = m + <span class="number">1</span>;</div><div class="line">            <span class="keyword">else</span></div><div class="line">                tail = m - <span class="number">1</span>;</div><div class="line">        }</div><div class="line">        <span class="comment">/****** core ******/</span></div><div class="line">    }</div><div class="line">    <span class="keyword">return</span> <span class="number">0</span>;</div><div class="line">}</div></pre></td></tr></table></figure><figure class="highlight java"><figcaption><span>solution in Java</span><a href="/code/CodeJam/numberGuessing.java">view raw</a></figcaption><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div><div class="line">6</div><div class="line">7</div><div class="line">8</div><div class="line">9</div><div class="line">10</div><div class="line">11</div><div class="line">12</div><div class="line">13</div><div class="line">14</div><div class="line">15</div><div class="line">16</div><div class="line">17</div><div class="line">18</div><div class="line">19</div><div class="line">20</div><div class="line">21</div><div class="line">22</div><div class="line">23</div><div class="line">24</div><div class="line">25</div><div class="line">26</div><div class="line">27</div><div class="line">28</div></pre></td><td class="code"><pre><div class="line"><span class="keyword">import</span> java.util.Scanner;</div><div class="line"></div><div class="line"><span class="keyword">public</span> <span class="class"><span class="keyword">class</span> <span class="title">Solution</span> </span>{</div><div class="line"></div><div class="line">	<span class="function"><span class="keyword">public</span> <span class="keyword">static</span> <span class="keyword">void</span> <span class="title">solve</span><span class="params">(Scanner input, <span class="keyword">int</span> a, <span class="keyword">int</span> b)</span> </span>{</div><div class="line">	    <span class="keyword">int</span> m = (a + b) / <span class="number">2</span>;</div><div class="line">	    System.out.println(m);</div><div class="line">	    String s = input.next();</div><div class="line">	    <span class="keyword">if</span> (s.equals(<span class="string">"CORRECT"</span>)) {</div><div class="line">	      <span class="keyword">return</span>;</div><div class="line">	    } <span class="keyword">else</span> <span class="keyword">if</span> (s.equals(<span class="string">"TOO_SMALL"</span>)) {</div><div class="line">	      solve(input, m + <span class="number">1</span>, b);</div><div class="line">	    } <span class="keyword">else</span> {</div><div class="line">	      solve(input, a, m - <span class="number">1</span>);</div><div class="line">	    }</div><div class="line">	  }</div><div class="line"></div><div class="line">	  <span class="function"><span class="keyword">public</span> <span class="keyword">static</span> <span class="keyword">void</span> <span class="title">main</span><span class="params">(String args[])</span> </span>{</div><div class="line">	    Scanner input = <span class="keyword">new</span> Scanner(System.in);</div><div class="line">	    <span class="keyword">int</span> T = input.nextInt();</div><div class="line">	    <span class="keyword">for</span> (<span class="keyword">int</span> ks = <span class="number">1</span>; ks &lt;= T; ks++) {</div><div class="line">	      <span class="keyword">int</span> a = input.nextInt();</div><div class="line">	      <span class="keyword">int</span> b = input.nextInt();</div><div class="line">	      input.nextInt();</div><div class="line">	      solve(input, a + <span class="number">1</span>, b);</div><div class="line">	    }</div><div class="line">	  }</div><div class="line">}</div></pre></td></tr></table></figure><figure class="highlight python"><figcaption><span>interactive testing tool</span><a href="/code/CodeJam/numberGuessingTestTool.py">view raw</a></figcaption><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div><div class="line">6</div><div class="line">7</div><div class="line">8</div><div class="line">9</div><div class="line">10</div><div class="line">11</div><div class="line">12</div><div class="line">13</div><div class="line">14</div><div class="line">15</div><div class="line">16</div><div class="line">17</div><div class="line">18</div><div class="line">19</div><div class="line">20</div><div class="line">21</div><div class="line">22</div><div class="line">23</div><div class="line">24</div><div class="line">25</div><div class="line">26</div><div class="line">27</div><div class="line">28</div><div class="line">29</div><div class="line">30</div><div class="line">31</div><div class="line">32</div><div class="line">33</div><div class="line">34</div><div class="line">35</div><div class="line">36</div><div class="line">37</div><div class="line">38</div><div class="line">39</div><div class="line">40</div><div class="line">41</div><div class="line">42</div><div class="line">43</div><div class="line">44</div><div class="line">45</div><div class="line">46</div><div class="line">47</div><div class="line">48</div><div class="line">49</div><div class="line">50</div><div class="line">51</div><div class="line">52</div><div class="line">53</div><div class="line">54</div><div class="line">55</div><div class="line">56</div><div class="line">57</div><div class="line">58</div><div class="line">59</div><div class="line">60</div><div class="line">61</div><div class="line">62</div><div class="line">63</div><div class="line">64</div><div class="line">65</div><div class="line">66</div><div class="line">67</div><div class="line">68</div><div class="line">69</div><div class="line">70</div><div class="line">71</div><div class="line">72</div><div class="line">73</div><div class="line">74</div><div class="line">75</div><div class="line">76</div><div class="line">77</div><div class="line">78</div><div class="line">79</div><div class="line">80</div><div class="line">81</div><div class="line">82</div><div class="line">83</div><div class="line">84</div><div class="line">85</div><div class="line">86</div><div class="line">87</div><div class="line">88</div><div class="line">89</div><div class="line">90</div><div class="line">91</div><div class="line">92</div><div class="line">93</div><div class="line">94</div><div class="line">95</div><div class="line">96</div><div class="line">97</div><div class="line">98</div><div class="line">99</div><div class="line">100</div><div class="line">101</div><div class="line">102</div><div class="line">103</div><div class="line">104</div><div class="line">105</div><div class="line">106</div><div class="line">107</div><div class="line">108</div><div class="line">109</div><div class="line">110</div><div class="line">111</div><div class="line">112</div><div class="line">113</div><div class="line">114</div><div class="line">115</div><div class="line">116</div><div class="line">117</div><div class="line">118</div><div class="line">119</div><div class="line">120</div><div class="line">121</div><div class="line">122</div><div class="line">123</div><div class="line">124</div><div class="line">125</div><div class="line">126</div><div class="line">127</div><div class="line">128</div><div class="line">129</div><div class="line">130</div><div class="line">131</div><div class="line">132</div><div class="line">133</div><div class="line">134</div><div class="line">135</div><div class="line">136</div><div class="line">137</div><div class="line">138</div><div class="line">139</div><div class="line">140</div><div class="line">141</div><div class="line">142</div><div class="line">143</div><div class="line">144</div><div class="line">145</div><div class="line">146</div><div class="line">147</div><div class="line">148</div><div class="line">149</div><div class="line">150</div><div class="line">151</div><div class="line">152</div><div class="line">153</div><div class="line">154</div><div class="line">155</div><div class="line">156</div><div class="line">157</div><div class="line">158</div><div class="line">159</div><div class="line">160</div><div class="line">161</div><div class="line">162</div><div class="line">163</div><div class="line">164</div><div class="line">165</div><div class="line">166</div><div class="line">167</div><div class="line">168</div><div class="line">169</div><div class="line">170</div><div class="line">171</div><div class="line">172</div><div class="line">173</div><div class="line">174</div><div class="line">175</div><div class="line">176</div><div class="line">177</div><div class="line">178</div><div class="line">179</div><div class="line">180</div><div class="line">181</div><div class="line">182</div><div class="line">183</div><div class="line">184</div><div class="line">185</div><div class="line">186</div><div class="line">187</div><div class="line">188</div><div class="line">189</div><div class="line">190</div></pre></td><td class="code"><pre><div class="line"><span class="string">""" Python script for local testing (compatible with both Python 2 and Python 3)</span></div><div class="line"></div><div class="line">Disclaimer: this is a way to test your solutions, but it is NOT the real judging</div><div class="line">system. The judging system behavior might be different.</div><div class="line">"""</div><div class="line"></div><div class="line"><span class="keyword">from</span> __future__ <span class="keyword">import</span> print_function</div><div class="line"><span class="keyword">import</span> subprocess</div><div class="line"><span class="keyword">import</span> sys</div><div class="line"></div><div class="line">USAGE_MSG = <span class="string">"""</span></div><div class="line">Usage:</div><div class="line">Linux and Mac users:</div><div class="line">  From your terminal, run</div><div class="line">    python testing_tool.py command_to_run_your_script_or_executable</div><div class="line">  Note that command_to_run_your_script_or_executable is read as a list of</div><div class="line">  arguments, so you should NOT wrap it with quotation marks.</div><div class="line"></div><div class="line">Examples:</div><div class="line">C++, after compilation:</div><div class="line">  python testing_tool.py ./my_binary</div><div class="line">Python:</div><div class="line">  python testing_tool.py python my_code.py</div><div class="line">Java, after compilation:</div><div class="line">  python testing_tool.py java my_main_class_name</div><div class="line"></div><div class="line">See https://code.google.com/codejam/resources/faq#languages for how we compile</div><div class="line">and run your solution in the language of your choice.</div><div class="line"></div><div class="line">Windows users:</div><div class="line">  Follow the instructions for Linux and Mac users if you are familiar with</div><div class="line">  terminal tools on Windows. Otherwise, please be advised that this script might</div><div class="line">  not work with Python 2 (it works with Python 3). In addition, if you cannot</div><div class="line">  pass arguments to Python, you will need to modify the "cmd = sys.argv[1:]"</div><div class="line">  line below.</div><div class="line">"""</div><div class="line"></div><div class="line"><span class="comment"># Hard-coded list for numbers to guess. We encourage you to modify this list,</span></div><div class="line"><span class="comment"># as well as A, B, N below as you wish, for more thorough testing.</span></div><div class="line">CORRECT_GUESS_LIST = [<span class="number">3</span>, <span class="number">7</span>, <span class="number">8</span>, <span class="number">1</span>, <span class="number">5</span>]</div><div class="line">A = <span class="number">0</span></div><div class="line">B = <span class="number">10</span></div><div class="line">N = <span class="number">10</span></div><div class="line"><span class="keyword">assert</span> (A &lt; min(CORRECT_GUESS_LIST)) <span class="keyword">and</span> (max(CORRECT_GUESS_LIST) &lt;= B)</div><div class="line">NUM_TEST_CASES = len(CORRECT_GUESS_LIST)</div><div class="line"><span class="comment"># You can set PRINT_INTERACTION_HISTORY to True to print out the interaction</span></div><div class="line"><span class="comment"># history between your code and the judge.</span></div><div class="line">PRINT_INTERACTION_HISTORY = <span class="keyword">False</span></div><div class="line"></div><div class="line"></div><div class="line"><span class="string">"""Helper functions"""</span></div><div class="line"><span class="function"><span class="keyword">def</span> <span class="title">JudgePrint</span><span class="params">(p, s)</span>:</span></div><div class="line">  <span class="comment"># Print the judge output to your code's input stream. Log this interaction</span></div><div class="line">  <span class="comment"># to console (stdout) if PRINT_INTERACTION_HISTORY is True.</span></div><div class="line">  print(s, file=p.stdin)</div><div class="line">  p.stdin.flush()</div><div class="line">  <span class="keyword">if</span> PRINT_INTERACTION_HISTORY:</div><div class="line">    print(<span class="string">"Judge prints:"</span>, s)</div><div class="line"></div><div class="line"></div><div class="line"><span class="function"><span class="keyword">def</span> <span class="title">PrintSubprocessResults</span><span class="params">(p)</span>:</span></div><div class="line">  <span class="comment"># Print the return code and stderr output for your code.</span></div><div class="line">  print(<span class="string">"Your code finishes with exit status {}."</span>.format(p.returncode))</div><div class="line">  code_stderr_output = p.stderr.read()</div><div class="line">  <span class="keyword">if</span> code_stderr_output:</div><div class="line">    print(<span class="string">"The stderr output of your code is:"</span>)</div><div class="line">    sys.stdout.write(code_stderr_output)</div><div class="line">  <span class="keyword">else</span>:</div><div class="line">    print(<span class="string">"Your code doesn't have stderr output."</span>)</div><div class="line"></div><div class="line"></div><div class="line"><span class="function"><span class="keyword">def</span> <span class="title">WaitForSubprocess</span><span class="params">(p)</span>:</span></div><div class="line">  <span class="comment"># Wait for your code to finish and print the stderr output of your code for</span></div><div class="line">  <span class="comment"># debugging purposes.</span></div><div class="line">  <span class="keyword">if</span> p.poll() <span class="keyword">is</span> <span class="keyword">None</span>:</div><div class="line">    print(<span class="string">"Waiting for your code to finish..."</span>)</div><div class="line">    p.wait()</div><div class="line">  PrintSubprocessResults(p)</div><div class="line"></div><div class="line"></div><div class="line"><span class="function"><span class="keyword">def</span> <span class="title">CheckSubprocessExit</span><span class="params">(p, case_id)</span>:</span></div><div class="line">  <span class="comment"># Exit if your code finishes in the middle of a test case.</span></div><div class="line">  <span class="keyword">if</span> p.poll() <span class="keyword">is</span> <span class="keyword">not</span> <span class="keyword">None</span>:</div><div class="line">    print(<span class="string">"Your code exited early, in the middle of Case #{}."</span>.format(case_id))</div><div class="line">    PrintSubprocessResults(p)</div><div class="line">    sys.exit(<span class="number">-1</span>)</div><div class="line"></div><div class="line"></div><div class="line"><span class="function"><span class="keyword">def</span> <span class="title">WrongAnswerExit</span><span class="params">(p, case_id, error_msg)</span>:</span></div><div class="line">  print(<span class="string">"Case #{} failed: {}"</span>.format(case_id, error_msg))</div><div class="line">  <span class="keyword">try</span>:</div><div class="line">    JudgePrint(p, <span class="string">"WRONG_ANSWER"</span>)</div><div class="line">  <span class="keyword">except</span> IOError:</div><div class="line">    print(<span class="string">"Failed to print WRONG_ANSWER because your code finished already."</span>)</div><div class="line">  WaitForSubprocess(p)</div><div class="line">  sys.exit(<span class="number">-1</span>)</div><div class="line"></div><div class="line"></div><div class="line"><span class="string">"""Main function begins"""</span></div><div class="line"><span class="comment"># Retrieve the command to run your code from the arguments.</span></div><div class="line"><span class="comment"># If you cannot pass arguments to Python when running this testing tool, please</span></div><div class="line"><span class="comment"># replace sys.argv[1:] with the command list to run your code.</span></div><div class="line"><span class="comment"># e.g. C++ users: cmd = ["./my_binary"]</span></div><div class="line"><span class="comment">#      Python users: cmd = [sys.executable, "my_code.py"]</span></div><div class="line"><span class="comment">#      Java users: cmd = ["java", "my_main_class_name"]</span></div><div class="line">cmd = sys.argv[<span class="number">1</span>:]</div><div class="line"><span class="keyword">assert</span> cmd, <span class="string">"There should be at least one argument."</span> + USAGE_MSG</div><div class="line"><span class="keyword">if</span> (cmd[<span class="number">0</span>] == <span class="string">"-h"</span>) <span class="keyword">or</span> (cmd[<span class="number">0</span>] == <span class="string">"-help"</span>) <span class="keyword">or</span> (cmd[<span class="number">0</span>] == <span class="string">"--h"</span>) <span class="keyword">or</span> (</div><div class="line">    cmd[<span class="number">0</span>] == <span class="string">"--help"</span>):</div><div class="line">  print(USAGE_MSG)</div><div class="line">  sys.exit(<span class="number">0</span>)</div><div class="line"></div><div class="line"><span class="comment"># Run your code in a separate process. You can debug your code by printing to</span></div><div class="line"><span class="comment"># stderr inside your code, or adding print statements in this testing tool.</span></div><div class="line"><span class="comment"># Note that your stderr output will be printed by this testing tool only after</span></div><div class="line"><span class="comment"># your code finishes, e.g. if your code hangs, you wouldn't get your stderr</span></div><div class="line"><span class="comment"># output.</span></div><div class="line"><span class="keyword">try</span>:</div><div class="line">  p = subprocess.Popen(</div><div class="line">      cmd,</div><div class="line">      stdin=subprocess.PIPE,</div><div class="line">      stdout=subprocess.PIPE,</div><div class="line">      stderr=subprocess.PIPE,</div><div class="line">      bufsize=<span class="number">1</span>,</div><div class="line">      universal_newlines=<span class="keyword">True</span>)</div><div class="line"><span class="keyword">except</span> Exception <span class="keyword">as</span> e:</div><div class="line">  print(<span class="string">"Failed to start running your code. Error:"</span>)</div><div class="line">  print(e)</div><div class="line">  sys.exit(<span class="number">-1</span>)</div><div class="line"></div><div class="line">JudgePrint(p, NUM_TEST_CASES)</div><div class="line"><span class="keyword">for</span> i <span class="keyword">in</span> range(NUM_TEST_CASES):</div><div class="line">  <span class="keyword">if</span> PRINT_INTERACTION_HISTORY:</div><div class="line">    print(<span class="string">"Test Case #{}:"</span>.format(i + <span class="number">1</span>))</div><div class="line">  JudgePrint(p, <span class="string">"{} {}"</span>.format(A, B))  <span class="comment"># the range (A, B]</span></div><div class="line">  JudgePrint(p, N)  <span class="comment"># number of tries, N</span></div><div class="line">  p.stdin.flush()</div><div class="line">  answer = CORRECT_GUESS_LIST[i]</div><div class="line">  test_case_passed = <span class="keyword">False</span></div><div class="line">  <span class="keyword">for</span> _ <span class="keyword">in</span> range(N):</div><div class="line">    <span class="comment"># Detect whether the your code has finished running.</span></div><div class="line">    CheckSubprocessExit(p, i + <span class="number">1</span>)</div><div class="line"></div><div class="line">    user_input = <span class="keyword">None</span></div><div class="line">    <span class="keyword">try</span>:</div><div class="line">      user_input = p.stdout.readline()</div><div class="line">      q = int(user_input)</div><div class="line">    <span class="keyword">except</span>:</div><div class="line">      <span class="comment"># Note that your code might finish after the first CheckSubprocessExit</span></div><div class="line">      <span class="comment"># check above but before the readline(), so we will need to again check</span></div><div class="line">      <span class="comment"># whether your code has finished.</span></div><div class="line">      CheckSubprocessExit(p, i + <span class="number">1</span>)</div><div class="line">      exit_msg = <span class="string">""</span></div><div class="line">      <span class="keyword">if</span> user_input == <span class="string">""</span>:</div><div class="line">        exit_msg = (<span class="string">"Read an empty string for the guess. This might happen "</span></div><div class="line">                    <span class="string">"because your code exited early, or printed an extra "</span></div><div class="line">                    <span class="string">"newline character."</span>)</div><div class="line">      <span class="keyword">elif</span> user_input <span class="keyword">is</span> <span class="keyword">None</span>:</div><div class="line">        exit_msg = (</div><div class="line">            <span class="string">"Unable to read the guess. This might happen because your "</span></div><div class="line">            <span class="string">"code exited early, printed an extra new line character, or did "</span></div><div class="line">            <span class="string">"not print the output correctly."</span>)</div><div class="line">      <span class="keyword">else</span>:</div><div class="line">        exit_msg = (<span class="string">"Failed to read the guess. Expected an integer ending with "</span></div><div class="line">                    <span class="string">"one new line character. Read \"{}\" (quotes added to "</span></div><div class="line">                    <span class="string">"isolate your output) instead."</span>).format(user_input)</div><div class="line">      WrongAnswerExit(p, i + <span class="number">1</span>, exit_msg)</div><div class="line">    <span class="keyword">if</span> PRINT_INTERACTION_HISTORY:</div><div class="line">      print(<span class="string">"Judge reads:"</span>, q)</div><div class="line">    <span class="keyword">if</span> (q &lt;= A) <span class="keyword">or</span> (q &gt; B):</div><div class="line">      WrongAnswerExit(p, i + <span class="number">1</span>, <span class="string">"Your guess, {}, is out of range!"</span>.format(q))</div><div class="line">    <span class="keyword">if</span> q == answer:</div><div class="line">      JudgePrint(p, <span class="string">"CORRECT"</span>)</div><div class="line">      test_case_passed = <span class="keyword">True</span></div><div class="line">      <span class="keyword">break</span></div><div class="line">    <span class="keyword">elif</span> q &lt; answer:</div><div class="line">      JudgePrint(p, <span class="string">"TOO_SMALL"</span>)</div><div class="line">    <span class="keyword">else</span>:</div><div class="line">      JudgePrint(p, <span class="string">"TOO_BIG"</span>)</div><div class="line">  <span class="keyword">if</span> <span class="keyword">not</span> test_case_passed:</div><div class="line">    WrongAnswerExit(p, i + <span class="number">1</span>, <span class="string">"Too many queries."</span>)</div><div class="line"></div><div class="line">extra_output = p.stdout.readline()</div><div class="line">WaitForSubprocess(p)</div><div class="line"><span class="keyword">if</span> extra_output == <span class="string">""</span>:</div><div class="line">  print(<span class="string">"Congratulations! All test cases passed :)"</span>)</div><div class="line"><span class="keyword">else</span>:</div><div class="line">  print(<span class="string">"Wrong Answer because of extra output:"</span>)</div><div class="line">  sys.stdout.write(extra_output)</div><div class="line">  sys.exit(<span class="number">-1</span>)</div></pre></td></tr></table></figure><h3 id="Senate-Evacuation"><a href="#Senate-Evacuation" class="headerlink" title="Senate Evacuation"></a>Senate Evacuation</h3><p>阅读理解</p><figure class="highlight cpp"><figcaption><span>solution in C++</span><a href="/code/CodeJam/senateEvacuation.cpp">view raw</a></figcaption><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div><div class="line">6</div><div class="line">7</div><div class="line">8</div><div class="line">9</div><div class="line">10</div><div class="line">11</div><div class="line">12</div><div class="line">13</div><div class="line">14</div><div class="line">15</div><div class="line">16</div><div class="line">17</div><div class="line">18</div><div class="line">19</div><div class="line">20</div><div class="line">21</div><div class="line">22</div><div class="line">23</div><div class="line">24</div><div class="line">25</div><div class="line">26</div><div class="line">27</div><div class="line">28</div><div class="line">29</div><div class="line">30</div><div class="line">31</div><div class="line">32</div><div class="line">33</div><div class="line">34</div><div class="line">35</div><div class="line">36</div><div class="line">37</div><div class="line">38</div><div class="line">39</div><div class="line">40</div><div class="line">41</div><div class="line">42</div><div class="line">43</div><div class="line">44</div><div class="line">45</div><div class="line">46</div><div class="line">47</div><div class="line">48</div><div class="line">49</div><div class="line">50</div><div class="line">51</div><div class="line">52</div><div class="line">53</div><div class="line">54</div><div class="line">55</div><div class="line">56</div><div class="line">57</div><div class="line">58</div><div class="line">59</div><div class="line">60</div><div class="line">61</div><div class="line">62</div><div class="line">63</div><div class="line">64</div></pre></td><td class="code"><pre><div class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string">&lt;bits/stdc++.h&gt;</span></span></div><div class="line"><span class="keyword">using</span> <span class="keyword">namespace</span> <span class="built_in">std</span>;</div><div class="line"><span class="meta">#<span class="meta-keyword">define</span> maxN 26</span></div><div class="line"></div><div class="line"><span class="function"><span class="keyword">int</span> <span class="title">main</span><span class="params">()</span></span></div><div class="line">{</div><div class="line">    <span class="comment">//freopen("in.txt", "r", stdin);</span></div><div class="line">    <span class="keyword">int</span> testCase;</div><div class="line">    <span class="built_in">scanf</span>(<span class="string">"%d"</span>, &amp;testCase);</div><div class="line"></div><div class="line">    <span class="keyword">int</span> a[maxN];</div><div class="line">    <span class="keyword">for</span> (<span class="keyword">int</span> tc = <span class="number">1</span>; tc &lt;= testCase; tc++)</div><div class="line">    {</div><div class="line">        <span class="keyword">int</span> n;</div><div class="line">        <span class="built_in">scanf</span>(<span class="string">"%d"</span>, &amp;n);</div><div class="line">        <span class="keyword">for</span> (<span class="keyword">int</span> i = <span class="number">0</span>; i &lt; n; i++)</div><div class="line">            <span class="built_in">scanf</span>(<span class="string">"%d"</span>, &amp;a[i]);</div><div class="line">        <span class="built_in">cout</span> &lt;&lt; <span class="string">"Case #"</span> &lt;&lt; tc &lt;&lt; <span class="string">":"</span>;</div><div class="line">        <span class="keyword">if</span> (n == <span class="number">2</span>)</div><div class="line">        {</div><div class="line">            <span class="comment">// two parties, no majority</span></div><div class="line">            <span class="comment">// so they have equal senators</span></div><div class="line">            <span class="keyword">while</span> (a[<span class="number">0</span>] &gt; <span class="number">0</span>)</div><div class="line">            {</div><div class="line">                <span class="built_in">cout</span> &lt;&lt; <span class="string">" AB"</span>;</div><div class="line">                a[<span class="number">0</span>]--;</div><div class="line">            }</div><div class="line">        }</div><div class="line">        <span class="keyword">else</span></div><div class="line">        {</div><div class="line">            <span class="comment">// number of parties &gt;= 3</span></div><div class="line">            <span class="comment">// at each evacuation, just get out one senator from</span></div><div class="line">            <span class="comment">// the biggest party at this moment</span></div><div class="line">            <span class="comment">// until it only lefts two parties on the end</span></div><div class="line">            <span class="comment">// for sure, they are two parties (1, 1)</span></div><div class="line">            <span class="comment">// we get them out together at the end</span></div><div class="line">            <span class="keyword">int</span> parties = n;</div><div class="line">            <span class="keyword">while</span> (parties &gt; <span class="number">2</span>)</div><div class="line">            {</div><div class="line">                <span class="keyword">int</span> maxParty = <span class="number">0</span>, argMax = <span class="number">-1</span>;</div><div class="line">                <span class="keyword">for</span> (<span class="keyword">int</span> i = <span class="number">0</span>; i &lt; n; i++)</div><div class="line">                    <span class="keyword">if</span> (a[i] &gt; maxParty)</div><div class="line">                    {</div><div class="line">                        maxParty = a[i];</div><div class="line">                        argMax = i;</div><div class="line">                    }</div><div class="line">                <span class="keyword">char</span> ans = <span class="string">'A'</span> + argMax;</div><div class="line">                <span class="built_in">cout</span> &lt;&lt; <span class="string">" "</span> &lt;&lt; ans;</div><div class="line">                a[argMax]--;</div><div class="line">                <span class="keyword">if</span> (maxParty == <span class="number">1</span>)</div><div class="line">                    parties -= <span class="number">1</span>;</div><div class="line">            }</div><div class="line">            <span class="built_in">cout</span> &lt;&lt; <span class="string">" "</span>;</div><div class="line">            <span class="keyword">for</span> (<span class="keyword">int</span> i = <span class="number">0</span>; i &lt; n; i++)</div><div class="line">                <span class="keyword">if</span> (a[i] &gt; <span class="number">0</span>)</div><div class="line">                {</div><div class="line">                    <span class="keyword">char</span> ans = <span class="string">'A'</span> + i;</div><div class="line">                    <span class="built_in">cout</span> &lt;&lt; ans;</div><div class="line">                }</div><div class="line">        }</div><div class="line">        <span class="built_in">cout</span> &lt;&lt; <span class="string">"\n"</span>;</div><div class="line">    }</div><div class="line">    <span class="keyword">return</span> <span class="number">0</span>;</div><div class="line">}</div></pre></td></tr></table></figure><h3 id="Cruise-Control"><a href="#Cruise-Control" class="headerlink" title="Cruise Control"></a>Cruise Control</h3><p>阅读理解</p><figure class="highlight cpp"><figcaption><span>solution in C++</span><a href="/code/CodeJam/cruiseControl.cpp">view raw</a></figcaption><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div><div class="line">6</div><div class="line">7</div><div class="line">8</div><div class="line">9</div><div class="line">10</div><div class="line">11</div><div class="line">12</div><div class="line">13</div><div class="line">14</div><div class="line">15</div><div class="line">16</div><div class="line">17</div><div class="line">18</div><div class="line">19</div><div class="line">20</div><div class="line">21</div><div class="line">22</div><div class="line">23</div><div class="line">24</div><div class="line">25</div><div class="line">26</div><div class="line">27</div><div class="line">28</div><div class="line">29</div><div class="line">30</div><div class="line">31</div><div class="line">32</div><div class="line">33</div><div class="line">34</div><div class="line">35</div><div class="line">36</div><div class="line">37</div><div class="line">38</div></pre></td><td class="code"><pre><div class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string">&lt;bits/stdc++.h&gt;</span></span></div><div class="line"><span class="keyword">using</span> <span class="keyword">namespace</span> <span class="built_in">std</span>;</div><div class="line"></div><div class="line"><span class="function"><span class="keyword">int</span> <span class="title">main</span><span class="params">()</span></span></div><div class="line">{</div><div class="line">    <span class="comment">//freopen("in.txt", "r", stdin);</span></div><div class="line">    <span class="keyword">int</span> testCase;</div><div class="line">    <span class="built_in">scanf</span>(<span class="string">"%d"</span>, &amp;testCase);</div><div class="line"></div><div class="line">    <span class="keyword">for</span> (<span class="keyword">int</span> tc = <span class="number">1</span>; tc &lt;= testCase; tc++)</div><div class="line">    {</div><div class="line">        <span class="keyword">int</span> road, n;</div><div class="line">        <span class="keyword">int</span> pos, v; <span class="comment">//position, speed</span></div><div class="line">        <span class="built_in">scanf</span>(<span class="string">"%d %d"</span>, &amp;road, &amp;n);</div><div class="line"></div><div class="line">        <span class="comment">/*define of "limit horse"</span></div><div class="line">        every intermediate horse ahead of Annie will catch up this horse</div><div class="line">        do not need to consider all horses ahead of limit horse</div><div class="line">        do not need to consider all intermidiate horses</div><div class="line"></div><div class="line">        strategy we take:</div><div class="line">        Annie reach the destination at the same time</div><div class="line">        as the limit horse get there</div><div class="line"></div><div class="line">        we just need to take the longest time limit, O(n)*/</div><div class="line"></div><div class="line">        <span class="built_in">cout</span> &lt;&lt; <span class="string">"Case #"</span> &lt;&lt; tc &lt;&lt; <span class="string">":"</span>;</div><div class="line">        <span class="keyword">double</span> t_limit = <span class="number">0</span>;</div><div class="line">        <span class="keyword">for</span> (<span class="keyword">int</span> i = <span class="number">0</span>; i &lt; n; i++)</div><div class="line">        {</div><div class="line">            <span class="built_in">scanf</span>(<span class="string">"%d %d"</span>, &amp;pos, &amp;v);</div><div class="line">            <span class="keyword">double</span> t = (road - pos) * <span class="number">1.0</span> / v;</div><div class="line">            t_limit = max(t, t_limit);</div><div class="line">        }</div><div class="line">        <span class="built_in">printf</span>(<span class="string">" %0.9f\n"</span>, road / t_limit);</div><div class="line">    }</div><div class="line">    <span class="keyword">return</span> <span class="number">0</span>;</div><div class="line">}</div></pre></td></tr></table></figure><h1 id="Reference"><a href="#Reference" class="headerlink" title="Reference"></a>Reference</h1><blockquote><p><strong><em><a href="https://leetcode.com" target="_blank" rel="external">LeetCode</a></em></strong><br><strong><em><a href="http://www.hihocoder.com" target="_blank" rel="external">HihoCoder</a></em></strong><br><strong><em><a href="https://www.hackerrank.com/dashboard" target="_blank" rel="external">HackerRank</a></em></strong><br><strong><em><a href="https://code.google.com/codejam/past-contests" target="_blank" rel="external">CodeJam</a></em></strong></p></blockquote>]]></content>
      
        <categories>
            
            <category> 技术 </category>
            
            <category> 算法 </category>
            
        </categories>
        
        
        <tags>
            
            <tag> algorithm </tag>
            
            <tag> data structure </tag>
            
        </tags>
        
    </entry>
    
    <entry>
      <title><![CDATA[轮播-简洁优雅版]]></title>
      <url>/%E6%8A%80%E6%9C%AF/%E5%89%8D%E7%AB%AF/carousel-jquery/</url>
      <content type="html"><![CDATA[<script src="/assets/js/APlayer.min.js"> </script><div class="note success"><p>A simple, elegant, scalable and responsive carousel design using pure jQuery. Elements of different size in the slideshow can agree to the same aspect ratio thanks to responsive height of the carousel container.</p></div><a id="more"></a><h1 id="问题描述"><a href="#问题描述" class="headerlink" title="问题描述"></a>问题描述</h1><p>我们需要这样的轮播：</p><ul><li><strong>响应式设计</strong>：自适应宽度和高度，并保持恒定长宽比；</li><li><strong>动画切换效果</strong>：自动在不同元素间来回切换，并具有基本的动画效果，如淡入淡出等；</li><li><strong>元素布局自由</strong>：允许元素在容器内具有个性化布局，如完全填充，绝对居中等。</li></ul><p>动画效果，采用<code>jQuery</code>是最好不过的选择。有人说，jQuery挺大，影响网页加载速度，然而，一方面有CDN加速助力，另一方面jQuery的应用已经渗透到各个角落，大概率已经缓存过了，因此，为了实现代码的简洁通用，何乐而不为呢？</p><p>元素布局自由看起来并不困难，一旦容器实现了响应式设计，只需规定各元素的CSS样式即可。但有一个布局，即<code>绝对居中</code>（<em>centered both horizontally and vertically in a given container</em>），值得探讨学习，参见<a href="#绝对居中">下文</a>。</p><p>难点在于<code>恒定长宽比</code>。锁定长宽比很好理解，因为这样比较美观，不会让各元素，尤其是图片，放缩变形。恒定长宽比的关键在于 <strong>宽度、高度都能自适应，并且它们有一个共同的长度参照</strong>。宽度自适应的方法深入人心，最简单的莫过于<code>width: x %; margin: auto;</code>。如何实现高度自适应呢，用<code>height: y %</code>，抑或加一个硬性高度限制如<code>height: 100px</code>吗？前者达到的效果：不同size的元素可以正常显示，但容器高度随元素高度不停上下闪烁；后者达到的效果：若高度足够，会留下一大段空白，若高度不足，元素依然我行我素逃出容器。这些都不是 <strong><em>高度自适应</em></strong> 的正确途径！</p><h1 id="高度自适应"><a href="#高度自适应" class="headerlink" title="高度自适应"></a>高度自适应</h1><p>最简单的方法：<span id="inline-green"> 用margin/padding占位 </span>。思路简单，一图以明之：</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div><div class="line">6</div><div class="line">7</div><div class="line">8</div><div class="line">9</div><div class="line">10</div><div class="line">11</div><div class="line">12</div></pre></td><td class="code"><pre><div class="line">   width</div><div class="line">|&lt;-------&gt;|</div><div class="line">-----------      ———</div><div class="line">                  ^</div><div class="line">                  |</div><div class="line">Main container    | margin-top</div><div class="line">                  |</div><div class="line">                  v</div><div class="line">-----------      ——   #beginning of helper container whose content is empty</div><div class="line">helper container      #it has a margin distance from the top edge of main container</div><div class="line">   (child)</div><div class="line">-----------</div></pre></td></tr></table></figure><p>前面说到，宽度和高度需要有一个共同的长度参照，才能计算长宽比。我们正是利用<code>margin-top</code>的百分比参照为<code>父元素宽度</code>来实现固定长宽比。依上图，自定义容器的长宽比为<code>width : margin-top</code>。</p><div class="note info"><p>Note that in a horizontal flow, percentages on margin-top and margin-bottom are <strong>relative to the width of the containing block</strong>, not the height (and in vertical flow, margin-left and margin-right are relative to the height, not the width).<br>—-by <a href="https://drafts.csswg.org/css-box/#the-margin-properties" target="_blank" rel="external">W3C</a></p></div><p>因此，若将设计的容器命名为<code>myBox</code>，则不难写出它的样式表：</p><figure class="highlight css"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div><div class="line">6</div><div class="line">7</div><div class="line">8</div><div class="line">9</div><div class="line">10</div><div class="line">11</div><div class="line">12</div></pre></td><td class="code"><pre><div class="line"><span class="selector-class">.myBox</span> &#123;</div><div class="line">  <span class="attribute">width</span>: <span class="number">100%</span>;   <span class="comment">/*容器宽度百分比*/</span></div><div class="line">  <span class="attribute">margin</span>: auto;</div><div class="line">  <span class="attribute">position</span>: relative;</div><div class="line">  <span class="attribute">overflow</span>: hidden;</div><div class="line">&#125;</div><div class="line"><span class="selector-class">.myBox</span><span class="selector-pseudo">:after</span> &#123;</div><div class="line">  <span class="attribute">content</span>: <span class="string">''</span>;</div><div class="line">  <span class="attribute">display</span>: block;</div><div class="line">  <span class="attribute">margin-top</span>: <span class="number">60%</span>;     <span class="comment">/*容器高度百分比*/</span></div><div class="line">&#125;</div><div class="line"><span class="comment">/* 上面容器的长宽比为 100% : (100% * 60%) = 5 : 3 */</span></div></pre></td></tr></table></figure><h1 id="淡入淡出"><a href="#淡入淡出" class="headerlink" title="淡入淡出"></a>淡入淡出</h1><p>jQuery提供了很多经典特效，也可以通过<code>animate</code>函数自定义个性化动画。下面的代码中，我们首先将若干元素（这里是四张图片）<strong>完全填充</strong> 在上面的<code>myBox</code>容器中，然后间隔固定时间循环引用每张图片，让当前图片淡出，让下一张图片淡入。</p><p>因此，每张图片的样式表为：</p><figure class="highlight css"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div><div class="line">6</div><div class="line">7</div><div class="line">8</div><div class="line">9</div></pre></td><td class="code"><pre><div class="line"><span class="comment">/*图片布局格式*/</span></div><div class="line"><span class="selector-class">.imgInBox</span> &#123;</div><div class="line">  <span class="attribute">position</span>: absolute;</div><div class="line">  <span class="attribute">top</span>: <span class="number">0</span>; <span class="attribute">width</span>: <span class="number">100%</span>; <span class="attribute">height</span>: <span class="number">100%</span>;</div><div class="line">&#125;</div><div class="line"><span class="comment">/*非封面图片默认不可见*/</span></div><div class="line"><span class="selector-class">.notCoverImg</span>&#123;</div><div class="line">  <span class="attribute">visibility</span>: hidden;</div><div class="line">&#125;</div></pre></td></tr></table></figure><p>特效动作执行的JavaScript代码为：</p><figure class="highlight javascript"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div><div class="line">6</div><div class="line">7</div><div class="line">8</div><div class="line">9</div><div class="line">10</div><div class="line">11</div><div class="line">12</div><div class="line">13</div></pre></td><td class="code"><pre><div class="line">$(<span class="built_in">document</span>).ready(<span class="function"><span class="keyword">function</span>(<span class="params"></span>)</span>&#123;</div><div class="line">  <span class="keyword">var</span> myIndex = <span class="number">0</span>;</div><div class="line">  <span class="keyword">var</span> x = $(<span class="string">".imgInBox"</span>).get(myIndex);    <span class="comment">//初始化：选取封面图片</span></div><div class="line">  setInterval(<span class="function"><span class="keyword">function</span> (<span class="params"></span>)</span>&#123;                <span class="comment">//动画循环，每张图片生存时间为4s</span></div><div class="line">    $(x).animate(&#123;<span class="attr">opacity</span>: <span class="number">0</span>&#125;, <span class="string">'slow'</span>, <span class="function"><span class="keyword">function</span>(<span class="params"></span>)</span>&#123;   <span class="comment">//缓慢淡出当前图片，之后调用callback()函数</span></div><div class="line">      $(x).css(<span class="string">"visibility"</span>, <span class="string">"hidden"</span>);   <span class="comment">//令淡出图片不可见</span></div><div class="line">      myIndex++;</div><div class="line">      <span class="keyword">if</span> (myIndex == <span class="number">4</span>) &#123;myIndex = <span class="number">0</span>;&#125;</div><div class="line">      x = $(<span class="string">".imgInBox"</span>).get(myIndex);    <span class="comment">//准备淡入下一张图片</span></div><div class="line">      $(x).css(&#123;<span class="attr">opacity</span>: <span class="number">0</span>, <span class="attr">visibility</span>: <span class="string">"visible"</span>&#125;).animate(&#123;<span class="attr">opacity</span>: <span class="number">1</span>&#125;, <span class="string">'normal'</span>);</div><div class="line">    &#125;);</div><div class="line">  &#125;, <span class="number">4000</span>);</div><div class="line">&#125;);</div></pre></td></tr></table></figure><p>实际效果，请见本博客<a href="https://blog.baoyukun.win/guest/">留言簿</a>上的照片墙，欢迎留言哦~~</p><h1 id="绝对居中"><a href="#绝对居中" class="headerlink" title="绝对居中"></a>绝对居中</h1><p>留言簿上的四张照片之所以选择 <strong>完全填充</strong>，是因为它们的原始长宽比相近（都是集体合照），小幅放缩以适应容器大小不存在美观的问题，而且这样容器中没有留白，一举两得。但如果想保持各元素原始大小比例，并将其置于容器内绝对居中的位置上呢？</p><p>问题看起来很简单，然而只用样式表实现 <strong>垂直居中</strong> 仍然需要不少技巧。一个流行有效的做法是<code>top:50%/left:50%</code>与<code>translateX(-50%)/translateY(-50%)</code>结合的用法，通过改变数值可以实现任意形式的居中布局。该方法易于理解掌握，且支持<a href="http://caniuse.com/#feat=transforms2d" target="_blank" rel="external">绝大多数浏览器</a>。</p><p>因此，只需更改前面的图片布局格式<code>imgInBox</code>：</p><figure class="highlight css"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div><div class="line">6</div><div class="line">7</div><div class="line">8</div></pre></td><td class="code"><pre><div class="line"><span class="selector-class">.imgInBox</span> &#123;</div><div class="line">  <span class="attribute">position</span>: absolute;</div><div class="line">  <span class="attribute">top</span>: <span class="number">50%</span>;</div><div class="line">  <span class="attribute">left</span>: <span class="number">50%</span>;</div><div class="line">  <span class="attribute">-moz-transform</span>: <span class="built_in">translateX</span>(-50%) <span class="built_in">translateY</span>(-50%);</div><div class="line">  <span class="attribute">-webkit-transform</span>: <span class="built_in">translateX</span>(-50%) <span class="built_in">translateY</span>(-50%);</div><div class="line">  <span class="attribute">transform</span>: <span class="built_in">translateX</span>(-50%) <span class="built_in">translateY</span>(-50%);</div><div class="line">&#125;</div></pre></td></tr></table></figure><style>.myBox{width:60%;margin:auto;position:relative;overflow:hidden;border:6px solid orange}.myBox:after{content:'';display:block;margin-top:100%}.imgInBox{position:absolute;top:50%;left:50%;-moz-transform:translateX(-50%) translateY(-50%);-webkit-transform:translateX(-50%) translateY(-50%);transform:translateX(-50%) translateY(-50%)}.notCoverImg{visibility:hidden}</style><div class="myBox"><img class="imgInBox" src="/img/Dream It Possible.jpg"><img class="imgInBox notCoverImg" src="/img/Je vole.jpg"><img class="imgInBox notCoverImg" src="/img/风再起时.jpg"><img class="imgInBox notCoverImg" src="/img/蜕变.jpg"></div><script type="text/javascript" src="/lib/jquery/index.js?v=2.1.3"></script><script type="text/javascript">$(document).ready(function(){var i=0,t=$(".imgInBox").get(i);setInterval(function(){$(t).animate({opacity:0},"slow",function(){$(t).css("visibility","hidden"),4==++i&&(i=0),t=$(".imgInBox").get(i),$(t).css({opacity:0,visibility:"visible"}).animate({opacity:1},"normal")})},4e3)})</script><p>这样，我们实现了 <strong>自适应设备、长宽比恒定的容器中淡入淡出循环播放图片，各图片绝对居中</strong> 的最终效果！如果需要添加按钮等交互元素，均可以在此基础上自由扩展，非常简单！</p><h1 id="参考文献"><a href="#参考文献" class="headerlink" title="参考文献"></a>参考文献</h1><blockquote><p><strong><em><a href="https://stackoverflow.com/questions/19461521/how-to-center-an-element-horizontally-and-vertically" target="_blank" rel="external">How to center an element horizontally and vertically</a></em></strong><br><strong><em><a href="https://segmentfault.com/a/1190000004231995" target="_blank" rel="external">巧用margin/padding的百分比值实现高度自适应</a></em></strong><br><strong><em><a href="https://drafts.csswg.org/css-box/#the-margin-properties" target="_blank" rel="external">CSS basic box model - The margin properties</a></em></strong><br><strong><em><a href="http://www.w3school.com.cn/jquery/jquery_reference.asp" target="_blank" rel="external">jQuery 参考手册</a></em></strong></p></blockquote>]]></content>
      
        <categories>
            
            <category> 技术 </category>
            
            <category> 前端 </category>
            
        </categories>
        
        
        <tags>
            
            <tag> carousel </tag>
            
            <tag> jQuery </tag>
            
            <tag> responsive </tag>
            
        </tags>
        
    </entry>
    
    <entry>
      <title><![CDATA[PDF裁剪工具]]></title>
      <url>/%E6%8A%80%E6%9C%AF/%E5%B7%A5%E5%85%B7/crop-pdf/</url>
      <content type="html"><![CDATA[<script src="/assets/js/APlayer.min.js"> </script><div class="note success"><p>基于PyPDF2，一个沿中缝批量裁剪PDF的小工具，一页变两页，方便双页快速扫描的后期处理。</p></div><a id="more"></a><h1 id="应用场景"><a href="#应用场景" class="headerlink" title="应用场景"></a>应用场景</h1><p>我们经常会扫描书籍到电子设备中，但一页页地扫描不仅效率太低，而且书籍装订中缝旁扫描效果欠佳，尤其是厚书。一个很自然的想法是，将书籍摊开，而后用机器上盖压实，一次扫描两页，最后再将扫描出的PDF沿中缝裁剪开来，一页变两页。</p><p>比如拿A4大小的书籍来说，就是按A3大小扫描进电脑，而后将A3的长边从中切开。</p><p>首先当然想到PDF的处理神器：<strong>Adobe Acrobat X Pro</strong>。如果去<code>Tools</code>–&gt;<code>Pages</code>–&gt;<code>Crop</code>看一看，或者在页面预览中选中一页单击右键、点击<code>Crop Pages</code>，通过设置margin的值将所有Page裁去一半是很容易做到的。然而问题是：<span id="inline-blue">原页面的另一半将丢失！</span> 倘若将原件复制一份，对原件进行左切割，而对副本进行右切割，最后将两者merge也是可以的，然而新的问题来了：<span id="inline-purple">如何把两份PDF交叉merge，即A-1P, B-1P, A-2P, B-2P…？</span> 正是因为没有找到第二个问题的解决办法，不得不去寻求其他解决方案。如果你知道如何做，记得在下方留言哦~</p><p>然后想到，PDF、图片和音视频文件的在线解决方案很多，果然找到了一个：<a href="https://www.sejda.com/" target="_blank" rel="external"><strong>Sejda</strong></a>。在它的<a href="https://www.sejda.com/split-pdf-down-the-middle" target="_blank" rel="external"><code>Split PDF pages down the middle</code></a>服务中，我们可以达成目的。然而这个工具有两个缺点：</p><ol><li>次数限制：免费版每天只可以裁剪3次</li><li>中缝内容缺失：由于扫描摆放或者文字本身太靠近中缝等原因，严格由中间切开会导致 <strong><em>文字断裂</em></strong></li></ol><p>第一个缺点还可以勉强接受（<em>我们可以将要裁剪的文件合并到一起集中处理</em>），第二个缺点是致命的，无论对于阅读，还是对于再打印。因此我们希望：<span id="inline-purple">切割得到左页面时，切割线比中线稍微向右去一点；反之同理。</span></p><p>之后，我按照<code>Crop pdf pages</code>、<code>Split pdf down the middle</code>等关键字在Google上搜索，都没能得到简洁满意的答案。在GitHub上，也有不少项目关注到了这一需求，然而没找到可以直接使用的产品，大多给出了编程的代码块。</p><p>于是，我最终决定：自己动手写一个，一劳永逸！</p><div class="note info"><p>值得注意的是，很多有 <em>split</em> 字眼的解决方案，都是在分割页与页，即将一个PDF文档分成几个PDF文档。而我们需要的是分割一页得到两页的工具，不要混淆。</p></div><h1 id="我的方案"><a href="#我的方案" class="headerlink" title="我的方案"></a>我的方案</h1><p>这样的小工具，用Python写最简单了，基于PyPDF2（<em>a pure-python PDF library</em>）。</p><p>要达成我们的目的，需要深入了解库中的<a href="https://pythonhosted.org/PyPDF2/RectangleObject.html#PyPDF2.generic.RectangleObject" target="_blank" rel="external"><code>RectangleObject class</code></a>，但是官方文档太简单，经过探究，下面用图例的方式对其作出详细说明：</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div><div class="line">6</div><div class="line">7</div><div class="line">8</div><div class="line">9</div><div class="line">10</div><div class="line">11</div><div class="line">12</div><div class="line">13</div><div class="line">14</div><div class="line">15</div><div class="line">16</div></pre></td><td class="code"><pre><div class="line">LL(lowerLeft)     .          UL(upperLeft)</div><div class="line">                  |</div><div class="line">  ----------------.-------------&gt; Y</div><div class="line">  |               |</div><div class="line">  |               .</div><div class="line">  |               |</div><div class="line">  |               .</div><div class="line">  |               |</div><div class="line">  |               .</div><div class="line">  |               |</div><div class="line">  |               .</div><div class="line">  |               |</div><div class="line">  V  X            .</div><div class="line">                  |  </div><div class="line">LR(lowerRight)    .          UR(upperRight)</div><div class="line">                  |</div></pre></td></tr></table></figure><p>这是我们站在复印机前俯视机器时的效果，书籍竖放摊开，因此 <strong>Y轴方向是A3长边</strong>，我们希望分割的就是Y轴。而文档中所谓的 <em>upper</em>、<em>left</em> 等方向，是从观察者左侧俯视的结果，或者理解为 <strong>X轴正向为右，Y轴正向为上</strong>。</p><p>理解了文档，代码就不难写出了，代码中给出了相应的注释：</p><figure class="highlight python"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div><div class="line">6</div><div class="line">7</div><div class="line">8</div><div class="line">9</div><div class="line">10</div><div class="line">11</div><div class="line">12</div><div class="line">13</div><div class="line">14</div><div class="line">15</div><div class="line">16</div><div class="line">17</div><div class="line">18</div><div class="line">19</div><div class="line">20</div><div class="line">21</div><div class="line">22</div><div class="line">23</div><div class="line">24</div><div class="line">25</div><div class="line">26</div><div class="line">27</div><div class="line">28</div><div class="line">29</div><div class="line">30</div><div class="line">31</div><div class="line">32</div></pre></td><td class="code"><pre><div class="line"><span class="comment">#coding=utf-8</span></div><div class="line"><span class="keyword">from</span> PyPDF2 <span class="keyword">import</span> PdfFileWriter, PdfFileReader</div><div class="line"><span class="keyword">from</span> copy <span class="keyword">import</span> copy</div><div class="line"><span class="keyword">from</span> os <span class="keyword">import</span> listdir</div><div class="line"></div><div class="line"><span class="function"><span class="keyword">def</span> <span class="title">op</span><span class="params">(inputFilePath)</span>:</span></div><div class="line">    outputFilePath = inputFilePath[:<span class="number">-4</span>]+<span class="string">'-print.pdf'</span></div><div class="line"></div><div class="line">    inputFile = open(inputFilePath, <span class="string">'rb'</span>)</div><div class="line">    inputStream = PdfFileReader(inputFile)</div><div class="line">    outputStream = PdfFileWriter()</div><div class="line"></div><div class="line">    <span class="keyword">for</span> page <span class="keyword">in</span> [inputStream.getPage(i) <span class="keyword">for</span> i <span class="keyword">in</span> range(inputStream.getNumPages())]:</div><div class="line">        pageLeft = page</div><div class="line">	<span class="comment">#注意：简单的assignment会导致左、右切割操作同一页面对象</span></div><div class="line">        pageRight = copy(page)</div><div class="line">	<span class="comment">#切割得到左页面时，切割线比中线稍微向右去一点</span></div><div class="line">        pageLeft.mediaBox.upperRight = (pageLeft.mediaBox.getUpperRight_x(), pageLeft.mediaBox.getUpperRight_y() * <span class="number">52</span>/<span class="number">100</span>)</div><div class="line">	<span class="comment">#切割得到右页面时，切割线比中线稍微向左去一点</span></div><div class="line">        pageRight.mediaBox.lowerRight = (pageRight.mediaBox.getLowerRight_x(), pageRight.mediaBox.getUpperRight_y() * <span class="number">48</span>/<span class="number">100</span>)</div><div class="line">        outputStream.addPage(pageLeft)</div><div class="line">        outputStream.addPage(pageRight)</div><div class="line"></div><div class="line">    <span class="keyword">with</span> open(outputFilePath, <span class="string">"wb"</span>) <span class="keyword">as</span> outputFile:</div><div class="line">        outputStream.write(outputFile)</div><div class="line"></div><div class="line">    inputFile.close()</div><div class="line"></div><div class="line"><span class="comment">#批量处理当前目录下的所有PDF文件</span></div><div class="line"><span class="keyword">for</span> file <span class="keyword">in</span> listdir(<span class="string">'.'</span>):</div><div class="line">    <span class="keyword">if</span> file[<span class="number">-4</span>:]==<span class="string">'.pdf'</span> <span class="keyword">or</span> file[<span class="number">-4</span>:]==<span class="string">'.PDF'</span>:</div><div class="line">        op(file)</div></pre></td></tr></table></figure><p>最后，GitHub上可以找到<a href="https://github.com/baoyukun/PDF-crop" target="_blank" rel="external">项目主页</a>，点击按钮可以下载使用发布好的Windows版本工具：</p><div style="display:table;margin:5px auto"><br><a id="download" href="https://raw.githubusercontent.com/baoyukun/PDF-crop/master/tool.exe" target="_blank" rel="external"><i class="fa fa-windows" aria-hidden="true"></i>&emsp;PDF-Crop小工具，为你而生&emsp;<i class="fa fa-windows" aria-hidden="true"></i></a></div><p></p><p>只需轻轻双击，当前目录下的所有PDF文档全搞定！工具只会生成切割后新的<code>-print.pdf</code>后缀文件，不会删除或者覆盖原文件，还不快来试试呀(｡･ω･｡)</p><div class="note info"><p>对于非双页扫描的普通PDF文件，切割效果是上下分割，这是正常的，原因就藏在上面的图示里咯！</p></div><h1 id="参考文献"><a href="#参考文献" class="headerlink" title="参考文献"></a>参考文献</h1><blockquote><p><strong><em><a href="https://pythonhosted.org/PyPDF2/" target="_blank" rel="external">PyPDF2 Documentation</a></em></strong><br><strong><em><a href="https://github.com/mstamy2/PyPDF2/tree/master/Sample_Code" target="_blank" rel="external">PyPDF2 Sample Code</a></em></strong><br><strong><em><a href="https://www.sejda.com/split-pdf-down-the-middle" target="_blank" rel="external">Split PDF pages down the middle</a></em></strong></p></blockquote>]]></content>
      
        <categories>
            
            <category> 技术 </category>
            
            <category> 工具 </category>
            
        </categories>
        
        
        <tags>
            
            <tag> PyPDF </tag>
            
        </tags>
        
    </entry>
    
    <entry>
      <title><![CDATA[【置顶】鬼谷子-书摘]]></title>
      <url>/%E6%9D%82%E8%B0%88/%E8%AF%BB%E4%B9%A6/gui-gu-zi/</url>
      <content type="html"><![CDATA[<script src="/assets/js/APlayer.min.js"> </script><div class="note success"><p>鬼谷子，姓王名诩，又名王禅，春秋时卫国朝歌人。常入云梦山采药修道，因隐居清溪之鬼谷，故自称鬼谷先生，先秦诸子之一。《鬼谷子》一书，系后世学者依据其言论整理而成。</p></div><a id="more"></a><h1 id="捭阖第一"><a href="#捭阖第一" class="headerlink" title="捭阖第一"></a>捭阖第一</h1><div class="note danger"><p>粤若稽古，圣人之在天地间也，为众生之先。观阴阳之开阖以命物，知存亡之门户。筹策万类之终始，达人心之理，见变化之朕<sup id="fnref:1"><a href="#fn:1" rel="footnote">1</a></sup>焉，而守司其门户。故圣人之在天下也，自古之今，其道一也。变化无穷，各有所归：或阴或阳，或柔或刚，或开或闭，或驰或张。是故圣人一守司其门户，<strong>审察其所先后，度权量能，校其伎巧短长</strong>。</p></div><p id="div-border-right-purple">纵观古今历史，可以感悟到，圣人生活在天地之间就是做大众的指导者。通过观察阴阳变化来对事物做出推测、判断，并进一步把握事物的存亡之理。测算万物的发展变化过程，通晓人类思维的规律，揭示事物变化的预兆，从而控制事物发展变化的关键所在。所以，圣人始终 <strong>奉守与大自然阴阳一体的变化规律</strong>，并以此驾驭万物。事物的变化虽然非常难测，然而各有各的归宿：或属阴，或归阳，或柔弱，或刚强；或开放，或封闭；或松弛，或紧张。所以，圣人要始终把握万物发展变化的关键，通过 <strong>周密地审查它的变化规律</strong>，<strong>揣度它的变化情况</strong>，<strong>测量它的能力大小</strong>，再 <strong>比较技巧方面的孰优孰劣</strong>。</p><div class="note danger"><p>夫贤、不肖、智、愚、勇、怯，有差，乃可捭，乃可阖，乃可进，乃可退，乃可贱，乃可贵，无为以牧之。<strong>审定有无，以其实虚，随其嗜欲，以见其志意</strong>。微排其言，而捭反之，以求其实，实得其指；阖而捭之<sup id="fnref:2"><a href="#fn:2" rel="footnote">2</a></sup>，以求其利。或开而示之，或阖而闭之。<strong>开而示之者，同其情也；阖而闭之者，异其诚也</strong>。<strong>可与不可，明审其计谋，以原其同异</strong><sup id="fnref:3"><a href="#fn:3" rel="footnote">3</a></sup>。<strong>离合有守，先从其志</strong>。</p></div><p id="div-border-right-purple">至于贤良和不肖、智慧和愚蠢、勇敢和怯懦，都是有区别的。所有这些，可以开放，也可以封闭；可以晋升，也可以辞退；可以轻视，也可以敬重，都要仰仗自然之道来统领他们。审察他们的 <strong>有无与虚实</strong>，<strong>通过对他们嗜好和欲望的分析来揭出它们的意愿</strong>，适当贬抑对方所要表达的思想。开放的办法是相反的，通过反复考察，以便勘察实情，切实把握对方言行的实质，让对方由封闭变开放，以便寻求有利时机。开放时使之显现；封闭时使之隐藏。<strong>开放使其显现，是因为与对方情感一致；封闭使之隐藏，是因为与对方诚意不同</strong>。至于什么可行、什么不可行，就要把那些计谋研究清楚，要 <strong>明白双方意见的相同与不同之处</strong>，<strong>必须有主见</strong>，同时要注意 <strong>按照对方的思想意愿，区别对待</strong>。无论意见与对方相同或相左，都要 <strong>先顺从对方的意愿</strong>。</p><div class="note danger"><p>即欲捭之，贵周；即欲阖之，贵密。<strong>周密之贵微，而与道相追</strong>。<strong>捭之者，料其情</strong><sup id="fnref:4"><a href="#fn:4" rel="footnote">4</a></sup>也；<strong>阖之者，结其诚</strong><sup id="fnref:5"><a href="#fn:5" rel="footnote">5</a></sup>也。皆见其 <strong>权衡轻重</strong>，乃为之度数，圣人因而为之虑。其不中权衡度数，圣人因而自为之虑<sup id="fnref:6"><a href="#fn:6" rel="footnote">6</a></sup>。<strong>故捭者，或捭而出之，或捭而纳之。阖者，或阖而取之，或捭而去之</strong>。<strong>捭阖者，天地之道</strong>。<strong>捭阖者，以变动阴阳，四时开闭，以化万物</strong><sup id="fnref:7"><a href="#fn:7" rel="footnote">7</a></sup>。纵横<sup id="fnref:8"><a href="#fn:8" rel="footnote">8</a></sup>反出、反覆反忤，必由此<sup id="fnref:9"><a href="#fn:9" rel="footnote">9</a></sup>矣。</p></div><p id="div-border-right-purple">如果要开放，最重要的是 <strong>考虑周详</strong>；如果要封闭，最重要的是 <strong>处事缜密</strong>。周密最重要的是要精细，要 <strong>合乎事物发展规律</strong>。<strong>让对方放开，是为了侦查他的真情；让对方封闭，是为了坚定他的诚心</strong>。所有这些都是为了让对方的实力和计谋全部暴露出来，以便 <strong>探测出对方在各方面的实力和表现</strong>。圣人要为此而用心思索，假如不能探测出对方现有实力的程度和数量，圣人会为此而焦虑。因此，<strong>所谓开放，或者是要自己出去，或者是让别人进来。所谓封闭，或者是自我约束，或者是使他人离开</strong>。开放与封闭是世界上各种事物发展变化的规律。开放与封闭都是为了 <strong>使事物阴阳对立的各方面发生变化</strong>，一年四季往复更替促使万物发生变化。由此可知万物变化莫测，无论是离开、归复、反抗，都必须通过开放或封闭来实现。</p><div class="note danger"><p>捭阖者，道之大化，说之变也；必 <strong>豫审其变化</strong>，吉凶大命系焉。口者，心之门户也；心者，神之主也。志意、喜欲、思虑、智谋，此皆由门户出入，故 <strong>关之以捭阖，制之以出入</strong>。<strong>捭之者，开也、言也、阳也；阖之者，闭也、默也、阴也</strong>。阴阳其和，终始其义<sup id="fnref:10"><a href="#fn:10" rel="footnote">10</a></sup>。故言“长生”、“安乐”、“富贵”、“尊荣”、“显名”、“爱好”、“财利”、“得意”、“喜欲”，为阳，曰“始”。故言“死亡”、“忧患”、“贫贱”、“苦辱”、“弃损”、“亡利”、“失意”、“有害”、“刑戮”、“诛罚”，为阴，曰“终”。<strong>诸言法阳之类者，皆曰“始”，言善以始其事；诸言法阴之类者，皆曰“终”，言恶以终其谋</strong>。</p></div><p id="div-border-right-purple">开放和封闭，是万物运行的现象，是游说活动的一种形态。人们必须 <strong>首先慎重地观察万物变化</strong>，事情的吉凶、人们的命运都维系于此。口是心灵的门窗，心是精神的主宰。意志情欲、思想智谋都要由口而出。因此，<strong>用开放和封闭的方法来把守这个关口</strong>。<strong>所谓“捭之”，就是使之开放、发言、公开；所谓“阖之”，就是使之封闭、缄默、隐匿</strong>。阴阳两方相协调，开放与封闭才能有节度，才能善始善终。所以说长生、安乐、富贵、尊荣、显名、嗜好、财货、得意、情欲等，属于“阳”的一类事物，就做“开始”。而死亡、忧患、贫贱、羞辱、毁弃、损伤、失意、灾害、刑戮、诛罚等，属于“阴”的一类事物，叫做“终止”。凡是 <strong>那些遵循“阳道”的一派，都可以称为“新生派”，与它们以谈论“善”来开始游说</strong>；凡是 <strong>那些遵循“阴道”的一派，都可以称为“没落派”，与它们以谈论“恶”来终止施展计谋</strong>。</p><div class="note danger"><p>捭阖之道，以阴阳试之，故与阳言者，依崇高，与阴言者，依卑小。<strong>以下求小，以高求大</strong>。由此言之，无所不出，无所不入，无所不可。可以说人，可以说家，可以说国，可以说天下。<strong>为小无内，为大无外</strong>。益损、去就、倍反，皆以阴阳御其事。阳动而行，阴止而藏；阳动而出，阴随而入。阳还终始，阴极反阳。<strong>以阳动者，德相生也；以阴静者，形相成也</strong>。<strong>以阳求阴，苞以德也；以阴结阳，施以力也</strong>。阴阳相求，由捭阖也。<strong>此天地阴阳之道，而说人之法也，为万事之先，是谓“圆方之门户”</strong>。</p></div><p id="div-border-right-purple">关于开放和封闭的规律都要从阴阳两方面来试验。因此，给从阳的方面来游说的人，按崇高的原则加以引导，而给从阴的方面来游说的人，则按卑下的原则引导对方。<strong>用卑下来求索微小，以崇高来求索博大</strong>。由此看来，没有什么不能出去，没有什么不能进来，没有什么办不成的事情。用这个道理可以游说人，可以游说家，可以游说国，可以游说天下。<strong>要做小事，要进入无限微妙的境界，即阴；要做大事，要进入无限广大的境界，即阳</strong>。所有的损害和有益、远离和接近、背叛和归附等行为，都是 <strong>在阴阳的变化中运行</strong> 的。阳的方面，运动前进、活动显示、环行于终点而开端是阴；阴的方面，静止隐藏、随行潜入、到了极点就反归为阳。<strong>凭“阳道”而运动者，在活跃中道德就会与之相生；依“阴道”而运动者，在安静中有力相助、自成形势</strong>。所以，<strong>用“阳”来求得“阴”，就要用道德来包容；用“阴”来求得“阳”，就要施展力量</strong>。“阳君”与“阴臣”相互追求，就是遵循“捭阖”之理。这就是天下的大道理——阴阳之道，也是向他人游说的基本方法。<strong>捭阖阴阳之道，是万事万物的根本道理，是天地之间解决万事万物的关键所在</strong>。</p><h1 id="反应第二"><a href="#反应第二" class="headerlink" title="反应第二"></a>反应第二</h1><div id="footnotes"><hr><div id="footnotelist"><ol style="list-style:none;padding-left:0"><li id="fn:1"><span style="display:inline-block;vertical-align:top;padding-right:10px">1.</span><span style="display:inline-block;vertical-align:top">征兆、迹象。</span><a href="#fnref:1" rev="footnote"> ↩</a></li><li id="fn:2"><span style="display:inline-block;vertical-align:top;padding-right:10px">2.</span><span style="display:inline-block;vertical-align:top">假如明白实情，就应自行闭藏或开启。</span><a href="#fnref:2" rev="footnote"> ↩</a></li><li id="fn:3"><span style="display:inline-block;vertical-align:top;padding-right:10px">3.</span><span style="display:inline-block;vertical-align:top">探讨事物相同与不同的特点、性质。</span><a href="#fnref:3" rev="footnote"> ↩</a></li><li id="fn:4"><span style="display:inline-block;vertical-align:top;padding-right:10px">4.</span><span style="display:inline-block;vertical-align:top">检验实情的真伪。</span><a href="#fnref:4" rev="footnote"> ↩</a></li><li id="fn:5"><span style="display:inline-block;vertical-align:top;padding-right:10px">5.</span><span style="display:inline-block;vertical-align:top">结，坚定。使诚意更加坚定。</span><a href="#fnref:5" rev="footnote"> ↩</a></li><li id="fn:6"><span style="display:inline-block;vertical-align:top;padding-right:10px">6.</span><span style="display:inline-block;vertical-align:top">如果不合一般事物的规律，圣人就继续为之考虑，并加以引导。</span><a href="#fnref:6" rev="footnote"> ↩</a></li><li id="fn:7"><span style="display:inline-block;vertical-align:top;padding-right:10px">7.</span><span style="display:inline-block;vertical-align:top">就像春夏秋冬，万物均存在变化一样。</span><a href="#fnref:7" rev="footnote"> ↩</a></li><li id="fn:8"><span style="display:inline-block;vertical-align:top;padding-right:10px">8.</span><span style="display:inline-block;vertical-align:top">上下左右各种各样的变化。</span><a href="#fnref:8" rev="footnote"> ↩</a></li><li id="fn:9"><span style="display:inline-block;vertical-align:top;padding-right:10px">9.</span><span style="display:inline-block;vertical-align:top">根据“捭阖”原则。</span><a href="#fnref:9" rev="footnote"> ↩</a></li><li id="fn:10"><span style="display:inline-block;vertical-align:top;padding-right:10px">10.</span><span style="display:inline-block;vertical-align:top">万物始终保持着阴阳变化之理。</span><a href="#fnref:10" rev="footnote"> ↩</a></li></ol></div></div>]]></content>
      
        <categories>
            
            <category> 杂谈 </category>
            
            <category> 读书 </category>
            
        </categories>
        
        
        <tags>
            
            <tag> 鬼谷子 </tag>
            
        </tags>
        
    </entry>
    
    <entry>
      <title><![CDATA[【置顶】博客写作模板]]></title>
      <url>/%E6%8A%80%E6%9C%AF/%E5%89%8D%E7%AB%AF/a-writing-model/</url>
      <content type="html"><![CDATA[<script src="/assets/js/APlayer.min.js"> </script><div class="note success"><p>工欲善其事，必先利其器。<br>在开始写作之旅之前，有必要对博客可用的写作格式进行梳理，做到随用随取、熟能生巧。本博客完美支持 <strong>GitHub Flavored Markdown</strong>，也可以通过安装插件支持 <strong>Octopress</strong> 的写作风格。</p></div><a id="more"></a><div class="note danger"><p>如果需要完美支持<code>GitHub Flavored Markdown</code>，需要安装插件<a href="https://github.com/hexojs/hexo-renderer-marked" target="_blank" rel="external">hexo-renderer-marked</a>, 命令是<span id="inline-blue">npm install hexo-renderer-marked –save</span>，并在<code>_config.yml</code>中进行相关配置。请确保安装了该插件的 <strong>latest release</strong> 版本，它也在不断更新中。</p><p>博客的各种插件，详见官网<a href="https://hexo.io/plugins/" target="_blank" rel="external">插件页</a>。</p></div><div class="note warning"><p>学术写作可以直接将Jupyter notebook完整嵌入博客，具体参考<a href="https://blog.baoyukun.win/%E6%8A%80%E6%9C%AF/%E5%89%8D%E7%AB%AF/hbwjnotebook/">这篇博文</a>。</p></div><h1 id="Markdown基本语法"><a href="#Markdown基本语法" class="headerlink" title="Markdown基本语法"></a>Markdown基本语法</h1><h2 id="文本"><a href="#文本" class="headerlink" title="文本"></a>文本</h2><p>标题层级用<code>#</code>的个数进行区分，一二级标题还可以使用连续的六个符号（<code>=</code> for 一级标题， <code>-</code> for 二级标题）。<br>在同一段落中另起一行，键入一个<code>&lt;Enter&gt;</code>；另起一个段落，连续键入两个<code>&lt;Enter&gt;</code>。</p><h3 id="强调格式"><a href="#强调格式" class="headerlink" title="强调格式"></a>强调格式</h3><figure class="highlight plain"><table><tr><td class="gutter"><pre><div class="line">1</div></pre></td><td class="code"><pre><div class="line">这是 **粗体**，而这是 *斜体* ，也可以 **_一起用_** 。你这样 ~~删去文字~~ 。这是强调的文字或者行内代码：`强调`。</div></pre></td></tr></table></figure><p>这是 <strong>粗体</strong>，而这是 <em>斜体</em> ，也可以 <strong><em>一起用</em></strong> 。你这样 <del>删去文字</del> 。这是强调的文字或者行内代码：<code>强调</code>。</p><h3 id="链接"><a href="#链接" class="headerlink" title="链接"></a>链接</h3><figure class="highlight plain"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div><div class="line">6</div><div class="line">7</div></pre></td><td class="code"><pre><div class="line">- 带标题的链接，标题可选：[谷歌](https://www.google.fr &quot;Google&quot;)。</div><div class="line">- 引用链接，并在文末申明链接地址：[引用链接0][Google France] 或 [引用链接1][1] 或 [引用链接2]</div><div class="line">- 直接暴露链接：https://www.google.fr</div><div class="line"></div><div class="line">[Google France]: https://www.google.fr</div><div class="line">[1]: https://www.google.fr</div><div class="line">[引用链接2]: https://www.google.fr</div></pre></td></tr></table></figure><ul><li>带标题的链接，标题可选：<a href="https://www.google.fr" title="Google" target="_blank" rel="external">谷歌</a>。</li><li>引用链接，并在文末申明链接地址：<a href="https://www.google.fr" target="_blank" rel="external">引用链接0</a> 或 <a href="https://www.google.fr" target="_blank" rel="external">引用链接1</a> 或 <a href="https://www.google.fr" target="_blank" rel="external">引用链接2</a></li><li>直接暴露链接：<a href="https://www.google.fr" target="_blank" rel="external">https://www.google.fr</a></li></ul><h3 id="列表"><a href="#列表" class="headerlink" title="列表"></a>列表</h3><p>无序列表可以使用<code>*</code>或<code>-</code>或<code>+</code>，有序列表使用数字进行编号，比如：</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div></pre></td><td class="code"><pre><div class="line">1. 项目1</div><div class="line">  - 子项目1</div><div class="line">  - 子项目2</div><div class="line">2. 项目2</div><div class="line">3. 项目3</div></pre></td></tr></table></figure><ol><li>项目1<ul><li>子项目1</li><li>子项目2</li></ul></li><li>项目2</li><li>项目3</li></ol><p>当然，还有任务列表，比如：</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div></pre></td><td class="code"><pre><div class="line">- [x] \(:我已经完成这项任务</div><div class="line">- [x] 哈哈，我又完成了一项</div><div class="line">- [ ] 这是我未来要做的</div></pre></td></tr></table></figure><ul><li style="list-style:none"><input type="checkbox" checked>(:我已经完成这项任务</li><li style="list-style:none"><input type="checkbox" checked>哈哈，我又完成了一项</li><li style="list-style:none"><input type="checkbox">这是我未来要做的</li></ul><h3 id="段落引用"><a href="#段落引用" class="headerlink" title="段落引用"></a>段落引用</h3><p>使用<code>&gt;</code>即可，引用中可以嵌套markdown语法，如：</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div></pre></td><td class="code"><pre><div class="line">&gt; *鲍煜坤*说了一大段废话</div><div class="line">&gt; 他把我们带入了这样一个美丽的童话世界，想去看看嘛？</div><div class="line">&gt; 快点点击[这里][Google France]</div><div class="line"></div><div class="line">[Google France]: https://www.google.fr</div></pre></td></tr></table></figure><blockquote><p><strong>鲍煜坤</strong> 说了一大段废话<br>他把我们带入了这样一个美丽的童话世界，想去看看嘛？<br>快点点击<a href="https://www.google.fr" target="_blank" rel="external">这里</a></p></blockquote><h3 id="代码块"><a href="#代码块" class="headerlink" title="代码块"></a>代码块</h3><figure class="highlight plain"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div></pre></td><td class="code"><pre><div class="line">(```)组合 + 语言类型(如：python)</div><div class="line">s = &quot;Python syntax highlighting&quot;</div><div class="line">print s</div><div class="line">(```)组合</div></pre></td></tr></table></figure><figure class="highlight python"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div></pre></td><td class="code"><pre><div class="line">s = <span class="string">"Python syntax highlighting"</span></div><div class="line"><span class="keyword">print</span> s</div></pre></td></tr></table></figure><h3 id="GitHub评论"><a href="#GitHub评论" class="headerlink" title="GitHub评论"></a>GitHub评论</h3><p><code>@</code>用于通知GitHub上的coder和team，<code>#</code>用于提及GitHub上的 issue 和 pull request，<code>:Emoji-Name:</code>用于使用Emoji。如：</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><div class="line">1</div></pre></td><td class="code"><pre><div class="line">@baoyukun, baoyukun/PAF-Telecom-ParisTech#1，This is good :smile:。</div></pre></td></tr></table></figure><h3 id="分隔线"><a href="#分隔线" class="headerlink" title="分隔线"></a>分隔线</h3><p>多于三个的<code>-</code>或<code>*</code>，如</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><div class="line">1</div></pre></td><td class="code"><pre><div class="line">-----------------</div></pre></td></tr></table></figure><hr><h2 id="表格"><a href="#表格" class="headerlink" title="表格"></a>表格</h2><p>使用<code>-</code>分隔表头行，使用<code>:</code>控制对齐，可以嵌套markdown语法，如：</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div></pre></td><td class="code"><pre><div class="line">Markdown | Less | Pretty</div><div class="line">--- |:---:| ---:</div><div class="line">*默认左对齐* | `这是居中` | **还可以右对齐**</div><div class="line">1 | 2 | 3</div></pre></td></tr></table></figure><table><thead><tr><th>Markdown</th><th style="text-align:center">Less</th><th style="text-align:right">Pretty</th></tr></thead><tbody><tr><td><em>默认左对齐</em></td><td style="text-align:center"><code>这是居中</code></td><td style="text-align:right"><strong>还可以右对齐</strong></td></tr><tr><td>1</td><td style="text-align:center">2</td><td style="text-align:right">3</td></tr></tbody></table><h2 id="图像"><a href="#图像" class="headerlink" title="图像"></a>图像</h2><p>其格式和 <a href="#链接">链接</a> 基本一致，如：</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div></pre></td><td class="code"><pre><div class="line">![alt text](https://blog.baoyukun.win/img/001.jpg &quot;鲍煜坤在井冈山&quot;)</div><div class="line"># 可以使用相对路径</div><div class="line">![alt text](/img/001.jpg &quot;鲍煜坤在井冈山&quot;)</div></pre></td></tr></table></figure><p><img src="/img/001.jpg" alt="alt text" title="鲍煜坤在井冈山"></p><h1 id="Hexo个性化标签"><a href="#Hexo个性化标签" class="headerlink" title="Hexo个性化标签"></a>Hexo个性化标签</h1><h2 id="段落引用-1"><a href="#段落引用-1" class="headerlink" title="段落引用"></a>段落引用</h2><h3 id="基本样式"><a href="#基本样式" class="headerlink" title="基本样式"></a>基本样式</h3><figure class="highlight plain"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div><div class="line">6</div><div class="line">7</div></pre></td><td class="code"><pre><div class="line">&#123;% blockquote 尼古拉·奥斯特洛夫斯基, 钢铁是怎样炼成的 %&#125;</div><div class="line">人的一生应当这样度过：当他回首往事时，不因虚度年华而悔恨，也不因碌碌无为而羞愧。</div><div class="line">&#123;% endblockquote %&#125;</div><div class="line"></div><div class="line">&#123;% blockquote 鲍煜坤 https://blog.baoyukun.win/%E6%9D%82%E8%B0%88/Chinese-tutorial/ 中文教案 %&#125;</div><div class="line">有机会与寻常法国百姓家的孩子深入打交道，也是一种独特的文化体验，这比练习提高法语还要重要。</div><div class="line">&#123;% endblockquote %&#125;</div></pre></td></tr></table></figure><blockquote><p>人的一生应当这样度过：当他回首往事时，不因虚度年华而悔恨，也不因碌碌无为而羞愧。</p><footer><strong>尼古拉·奥斯特洛夫斯基</strong><cite>钢铁是怎样炼成的</cite></footer></blockquote><hr><blockquote><p>有机会与寻常法国百姓家的孩子深入打交道，也是一种独特的文化体验，这比练习提高法语还要重要。</p><footer><strong>鲍煜坤</strong><cite><a href="https://blog.baoyukun.win/%E6%9D%82%E8%B0%88/Chinese-tutorial/">中文教案</a></cite></footer></blockquote><h3 id="文本居中"><a href="#文本居中" class="headerlink" title="文本居中"></a>文本居中</h3><figure class="highlight plain"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div></pre></td><td class="code"><pre><div class="line">&#123;% cq %&#125;</div><div class="line">人的一切痛苦，本质上都是对自己的无能的愤怒。</div><div class="line">&lt;span style=&quot;font-weight: bold;&quot;&gt;王小波&lt;/span&gt;</div><div class="line">&#123;% endcq %&#125;</div></pre></td></tr></table></figure><blockquote class="blockquote-center"><p>人的一切痛苦，本质上都是对自己的无能的愤怒。<br><span style="font-weight:700">王小波</span></p></blockquote><h3 id="个性化定制"><a href="#个性化定制" class="headerlink" title="个性化定制"></a>个性化定制</h3><h4 id="引用类型"><a href="#引用类型" class="headerlink" title="引用类型"></a>引用类型</h4><figure class="highlight plain"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div><div class="line">6</div><div class="line">7</div><div class="line">8</div></pre></td><td class="code"><pre><div class="line">&#123;% note class_name %&#125;</div><div class="line">#class_name = null(纯), default(灰), primary(深蓝), success(绿), info(浅蓝), warning(黄), danger(红)</div><div class="line">想说的内容（部分支持markdown）</div><div class="line">&#123;% endnote %&#125;</div><div class="line">e.g.,</div><div class="line">&#123;% note danger %&#125;</div><div class="line">**注意一下**（部分支持markdown）</div><div class="line">&#123;% endnote %&#125;</div></pre></td></tr></table></figure><div class="note danger"><p><strong>注意一下</strong>（部分支持markdown）</p></div><h4 id="边框位置与颜色"><a href="#边框位置与颜色" class="headerlink" title="边框位置与颜色"></a>边框位置与颜色</h4><figure class="highlight plain"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div><div class="line">6</div><div class="line">7</div><div class="line">8</div></pre></td><td class="code"><pre><div class="line"># color_name = red, yellow, green, blue, purple</div><div class="line">inline: &lt;span id=&quot;inline-color_name&quot;&gt;&lt;/span&gt;   #仅限green, blue, purple</div><div class="line">left-border: &lt;p id=&quot;div-border-left-color_name&quot;&gt;&lt;/p&gt;</div><div class="line">right-border: &lt;p id=&quot;div-border-right-color_name&quot;&gt;&lt;/p&gt;</div><div class="line">top-border: &lt;p id=&quot;div-border-top-color_name&quot;&gt;&lt;/p&gt;</div><div class="line">e.g.,</div><div class="line">&lt;span id=&quot;inline-green&quot;&gt;大家好&lt;/span&gt;</div><div class="line">&lt;p id=&quot;div-border-top-red&quot;&gt;前进，前进，前进！我们的军队向太阳，脚踩着祖国的大地。&lt;/p&gt;</div></pre></td></tr></table></figure><p><span id="inline-green">大家好</span></p><p id="div-border-top-red">前进，前进，前进！我们的军队向太阳，脚踩着祖国的大地。</p><h4 id="添加注脚"><a href="#添加注脚" class="headerlink" title="添加注脚"></a>添加注脚</h4><figure class="highlight plain"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div></pre></td><td class="code"><pre><div class="line">#使用时去掉转义符</div><div class="line">鲍煜坤是一个大笨蛋[\^1]</div><div class="line">原因尽人皆知[\^2]</div><div class="line">[\^1]: 大家都这样说</div><div class="line">[\^2]: 他不知道[markdown](https://en.wikipedia.org/wiki/Markdown)是什么</div></pre></td></tr></table></figure><p>鲍煜坤是一个大笨蛋<sup id="fnref:1"><a href="#fn:1" rel="footnote">1</a></sup><br>原因尽人皆知<sup id="fnref:2"><a href="#fn:2" rel="footnote">2</a></sup></p><h4 id="下载模式"><a href="#下载模式" class="headerlink" title="下载模式"></a>下载模式</h4><figure class="highlight plain"><table><tr><td class="gutter"><pre><div class="line">1</div></pre></td><td class="code"><pre><div class="line">&lt;div style=&quot;display: table; margin: 5px auto;&quot;&gt;&lt;a id=&quot;download&quot; href=&quot;https://blog.baoyukun.win/guest/&quot;&gt;&lt;i class=&quot;fa fa-windows&quot; aria-hidden=&quot;true&quot;&gt;&lt;/i&gt;&amp;emsp;点我下载&amp;emsp;Office 2020&amp;emsp;&lt;i class=&quot;fa fa-windows&quot; aria-hidden=&quot;true&quot;&gt;&lt;/i&gt;&lt;/a&gt;&lt;/div&gt;</div></pre></td></tr></table></figure><div style="display:table;margin:5px auto"><a id="download" href="https://blog.baoyukun.win/guest/"><i class="fa fa-windows" aria-hidden="true"></i>&emsp;点我下载&emsp;Office 2020&emsp;<i class="fa fa-windows" aria-hidden="true"></i></a></div><div class="note info"><p>图标来源于<a href="http://fontawesome.io/icons/" target="_blank" rel="external"><strong><em>Font Awesome</em></strong></a>。</p></div><h2 id="代码引用"><a href="#代码引用" class="headerlink" title="代码引用"></a>代码引用</h2><h3 id="代码文件"><a href="#代码文件" class="headerlink" title="代码文件"></a>代码文件</h3><div class="note warning"><p>代码文件置于博客<code>source</code>目录下的自定义文件夹内，可以在<code>_config.yml</code>文件里对<code>code_dir</code>进行设置。</p></div><figure class="highlight plain"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div></pre></td><td class="code"><pre><div class="line">&#123;% include_code [lang:language] [title] path/to/file %&#125;</div><div class="line">e.g.</div><div class="line">&#123;% include_code lang:cpp solution in C++ CodeJam/numberGuessing.cpp %&#125;</div></pre></td></tr></table></figure><figure class="highlight cpp"><figcaption><span>solution in C++</span><a href="/code/CodeJam/numberGuessing.cpp">view raw</a></figcaption><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div><div class="line">6</div><div class="line">7</div><div class="line">8</div><div class="line">9</div><div class="line">10</div><div class="line">11</div><div class="line">12</div><div class="line">13</div><div class="line">14</div><div class="line">15</div><div class="line">16</div><div class="line">17</div><div class="line">18</div><div class="line">19</div><div class="line">20</div><div class="line">21</div><div class="line">22</div><div class="line">23</div><div class="line">24</div><div class="line">25</div><div class="line">26</div><div class="line">27</div><div class="line">28</div><div class="line">29</div><div class="line">30</div><div class="line">31</div><div class="line">32</div><div class="line">33</div></pre></td><td class="code"><pre><div class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string">&lt;bits/stdc++.h&gt;</span></span></div><div class="line"><span class="keyword">using</span> <span class="keyword">namespace</span> <span class="built_in">std</span>;</div><div class="line"></div><div class="line"><span class="function"><span class="keyword">int</span> <span class="title">main</span><span class="params">()</span></span></div><div class="line">{</div><div class="line">    <span class="comment">//freopen("in.txt", "r", stdin);</span></div><div class="line">    <span class="keyword">int</span> num_test_cases;</div><div class="line">    <span class="built_in">cin</span> &gt;&gt; num_test_cases;</div><div class="line">    <span class="keyword">for</span> (<span class="keyword">int</span> caseNum = <span class="number">1</span>; caseNum &lt;= num_test_cases; ++caseNum)</div><div class="line">    {</div><div class="line">        <span class="keyword">int</span> lo, hi;</div><div class="line">        <span class="built_in">cin</span> &gt;&gt; lo &gt;&gt; hi;</div><div class="line">        <span class="keyword">int</span> num_tries;</div><div class="line">        <span class="built_in">cin</span> &gt;&gt; num_tries;</div><div class="line">        <span class="comment">/****** core ******/</span></div><div class="line">        <span class="keyword">int</span> head = lo + <span class="number">1</span>, tail = hi;</div><div class="line">        <span class="keyword">while</span> (<span class="literal">true</span>)</div><div class="line">        {</div><div class="line">            <span class="keyword">int</span> m = (head + tail) / <span class="number">2</span>;</div><div class="line">            <span class="built_in">cout</span> &lt;&lt; m &lt;&lt; <span class="built_in">endl</span>;</div><div class="line">            <span class="built_in">string</span> s;</div><div class="line">            <span class="built_in">cin</span> &gt;&gt; s;</div><div class="line">            <span class="keyword">if</span> (s == <span class="string">"CORRECT"</span>)</div><div class="line">                <span class="keyword">break</span>;</div><div class="line">            <span class="keyword">if</span> (s == <span class="string">"TOO_SMALL"</span>)</div><div class="line">                head = m + <span class="number">1</span>;</div><div class="line">            <span class="keyword">else</span></div><div class="line">                tail = m - <span class="number">1</span>;</div><div class="line">        }</div><div class="line">        <span class="comment">/****** core ******/</span></div><div class="line">    }</div><div class="line">    <span class="keyword">return</span> <span class="number">0</span>;</div><div class="line">}</div></pre></td></tr></table></figure><h3 id="代码块-1"><a href="#代码块-1" class="headerlink" title="代码块"></a>代码块</h3><figure class="highlight plain"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div><div class="line">6</div><div class="line">7</div><div class="line">8</div></pre></td><td class="code"><pre><div class="line">&#123;% codeblock [title] [lang:language] [url] %&#125;</div><div class="line">code</div><div class="line">&#123;% endcodeblock %&#125;</div><div class="line">e.g.,</div><div class="line">&#123;% codeblock downloader.py lang:python https://raw.githubusercontent.com/baoyukun/PAF-Telecom-ParisTech/master/crawler/downloader.py %&#125;</div><div class="line">with urllib.request.urlopen(addr) as f:</div><div class="line">links = re.findall(&apos;&quot;[^&lt;^&gt;]\*.pdf&apos;, f.read().decode(&apos;iso-8859-1&apos;))</div><div class="line">&#123;% endcodeblock %&#125;</div></pre></td></tr></table></figure><figure class="highlight python"><figcaption><span>downloader.py</span><a href="https://raw.githubusercontent.com/baoyukun/PAF-Telecom-ParisTech/master/crawler/downloader.py" target="_blank" rel="external">link</a></figcaption><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div></pre></td><td class="code"><pre><div class="line"><span class="keyword">with</span> urllib.request.urlopen(addr) <span class="keyword">as</span> f:</div><div class="line">links = re.findall(<span class="string">'"[^&lt;^&gt;]\*.pdf'</span>, f.read().decode(<span class="string">'iso-8859-1'</span>))</div></pre></td></tr></table></figure><h3 id="代码碎片"><a href="#代码碎片" class="headerlink" title="代码碎片"></a>代码碎片</h3><figure class="highlight plain"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div></pre></td><td class="code"><pre><div class="line">&#123;% jsfiddle shorttag [tabs] [skin] [width] [height] %&#125;    # jsfiddle</div><div class="line">&#123;% gist gist_id [filename] %&#125;    # gist</div></pre></td></tr></table></figure><h2 id="数学公式"><a href="#数学公式" class="headerlink" title="数学公式"></a>数学公式</h2><figure class="highlight plain"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div></pre></td><td class="code"><pre><div class="line">#注意：markdown有时会吞掉公式中的特殊符号</div><div class="line">#因此 “如果有问题，前加转义符！”</div><div class="line"></div><div class="line">行内公式：$这里是公式$</div><div class="line">行间公式：$$这里是公式$$</div></pre></td></tr></table></figure><p>我们可以自由地写行内公式，如 $\cos 2\theta = \cos^2 \theta - \sin^2 \theta = 2 \cos^2 \theta - 1$。 We can display an inline formula, like $\sum_{i=0}^n i^2 = \frac{(n^2+n)(2n+1)}{6}$, very simple!</p><p>我们也可以写行间公式，如：$$\frac{\partial u}{\partial t} = h^2 \left( \frac{\partial^2 u}{\partial x^2} + \frac{\partial^2 u}{\partial y^2} + \frac{\partial^2 u}{\partial z^2}\right)$$</p><p>We can display formulas as blocks as followings:<br>$$<br>\begin{equation}<br>\left\{<br>\begin{aligned}<br>\dot{x} &amp; = \sigma(y-x) \\[2ex]<br>\dot{y} &amp; = \rho x - y - xz \\[2ex]<br>\dot{z} &amp; = -\beta z + xy<br>\end{aligned}<br>\right.<br>\end{equation}<br>$$</p><p>We can highlight equation by adding both border and background:<br>$$<br>\bbox[yellow,5px,border:2px solid red]<br>{<br>e^x=\lim_{n\to\infty} \left( 1+\frac{x}{n} \right)^n<br>}<br>$$</p><p>下面是一个矩阵：<br>$$<br>\begin{pmatrix}<br>1 &amp; a_1 &amp; a_1^2 &amp; \cdots &amp; a_1^n \\<br>1 &amp; a_2 &amp; a_2^2 &amp; \cdots &amp; a_2^n \\<br>\vdots &amp; \vdots &amp; \vdots &amp; \ddots &amp; \vdots \\<br>1 &amp; a_m &amp; a_m^2 &amp; \cdots &amp; a_m^n \\<br>\end{pmatrix}<br>\nonumber<br>$$</p><p>这是一个数组：$$\begin{array}{c|lcr}value &amp; \text{0} &amp; \text{1} &amp; \text{2} \\ \hline 0 &amp; 0.24 &amp; 1 &amp; 125 \\ 1 &amp; -1 &amp; 189 &amp; -8 \\ 2 &amp; -20 &amp; 2000 &amp; 1+10i \end{array} \nonumber$$</p><p>以下书写形式也很常用：</p><p>$$\operatorname*{Res}_{z=1}\left(\frac1{z^2-z}\right)=1$$</p><p>$$\dbinom{n}{r}=\binom{n}{n-r}=C^n_r=C^n_{n-r}$$</p><p>$$J_{\alpha}(x)=\sum_{m=0}^{\infty}\frac{(-1)^{m}}{m!\Gamma(m+\alpha+1)}(\frac{x}{2})^{2m+\alpha}$$</p><p>$$ i\hbar\frac{\partial \psi}{\partial t} = \frac{-\hbar^2}{2m} \left(\frac{\partial^2}{\partial x^2} + \frac{\partial^2}{\partial y^2} + \frac{\partial^2}{\partial z^2} \right) \psi + V \psi $$</p><h2 id="图像-1"><a href="#图像-1" class="headerlink" title="图像"></a>图像</h2><h3 id="基本样式-1"><a href="#基本样式-1" class="headerlink" title="基本样式"></a>基本样式</h3><p>可以对图像大小加以控制，如：</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><div class="line">1</div></pre></td><td class="code"><pre><div class="line">&lt;div align=&quot;center&quot;&gt;&#123;% img /img/001.jpg 200 120 &quot;鲍煜坤在井冈山&quot; %&#125;&lt;/div&gt;</div></pre></td></tr></table></figure><div align="center"><img src="/img/001.jpg" width="200" height="120" title="鲍煜坤在井冈山"></div><h3 id="强调样式"><a href="#强调样式" class="headerlink" title="强调样式"></a>强调样式</h3><p>图片将自动扩大26%，并突破文章容器的宽度。</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><div class="line">1</div></pre></td><td class="code"><pre><div class="line">&#123;% fi /img/001.jpg, alt-text, 鲍煜坤在井冈山 %&#125;</div></pre></td></tr></table></figure><span itemprop="image" itemscope="" itemtype="http://schema.org/ImageObject"><img itemprop="url image" src="/img/001.jpg" class="full-image" alt="alt-text" title="鲍煜坤在井冈山"><meta itemprop="width" content="auto"><meta itemprop="height" content="auto"></span><h2 id="视频"><a href="#视频" class="headerlink" title="视频"></a>视频</h2><figure class="highlight plain"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div></pre></td><td class="code"><pre><div class="line">&#123;% youtube video_id %&#125;  # for youtube</div><div class="line">&#123;% vimeo video_id %&#125;   # for vimeo</div></pre></td></tr></table></figure><div class="note info"><p>如果需要更广泛的视频源支持，除直接通过<a href="#嵌入HTML">嵌入iframe标签</a>插入视频，也可以参考插件<a href="https://github.com/m80126colin/hexo-tag-owl" target="_blank" rel="external">hexo-tag-owl</a>，还可以在项目文件路径<code>/node_modules/hexo/lib/plugins/tag/</code>下自己添加所需的视频标签对应的JavaScript文件。</p><p>下面的示例是一个YouTube视频，墙内的朋友若无法观看，并不能说明代码有误，请正确上网(ﾉ”◑ ◑)ﾉ”</p></div><div class="video-container"><iframe src="//www.youtube.com/embed/jefIwvrzoSg" frameborder="0" allowfullscreen></iframe></div><h2 id="内嵌PDF"><a href="#内嵌PDF" class="headerlink" title="内嵌PDF"></a>内嵌PDF</h2><figure class="highlight plain"><table><tr><td class="gutter"><pre><div class="line">1</div></pre></td><td class="code"><pre><div class="line">&#123;% pdf /img/tutorial.pdf %&#125;</div></pre></td></tr></table></figure><div class="note info"><p>示例请见另一篇博文：<a href="https://blog.baoyukun.win/%E6%9D%82%E8%B0%88/Chinese-tutorial/"><strong><em>中文教案</em></strong></a></p></div><h2 id="嵌入HTML"><a href="#嵌入HTML" class="headerlink" title="嵌入HTML"></a>嵌入HTML</h2><ul><li>对内嵌HTML支持很好，可以直接在<code>raw</code>标签内书写 <strong>纯HTML</strong>，如：</li></ul><figure class="highlight plain"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div><div class="line">6</div><div class="line">7</div><div class="line">8</div><div class="line">9</div></pre></td><td class="code"><pre><div class="line">&#123;% raw %&#125;</div><div class="line">&lt;dl&gt;</div><div class="line">  &lt;dt&gt;titleA&lt;/dt&gt;</div><div class="line">  &lt;dd&gt;Hello everyone!&lt;/dd&gt;</div><div class="line"></div><div class="line">  &lt;dt&gt;titleB&lt;/dt&gt;</div><div class="line">  &lt;dd&gt;不支持内嵌markdown：**粗体**，使用标签实现&lt;strong&gt;粗体&lt;/strong&gt;.&lt;/dd&gt;</div><div class="line">&lt;/dl&gt;</div><div class="line">&#123;% endraw %&#125;</div></pre></td></tr></table></figure><dl><dt>titleA</dt><dd>Hello everyone!</dd><dt>titleB</dt><dd>不支持内嵌markdown：**粗体**，使用标签实现<strong>粗体</strong>.</dd></dl><ul><li>还可以利用url直接插入iframe标签，即：</li></ul><figure class="highlight plain"><table><tr><td class="gutter"><pre><div class="line">1</div></pre></td><td class="code"><pre><div class="line">&#123;% iframe url [width] [height] %&#125;</div></pre></td></tr></table></figure><h1 id="参考文献"><a href="#参考文献" class="headerlink" title="参考文献"></a>参考文献</h1><blockquote><p><strong><em><a href="https://guides.github.com/features/mastering-markdown/" target="_blank" rel="external">Mastering Markdown</a></em></strong><br><strong><em><a href="https://github.com/adam-p/markdown-here/wiki/Markdown-Cheatsheet#code" target="_blank" rel="external">Markdown Cheatsheet</a></em></strong><br><strong><em><a href="https://www.webpagefx.com/tools/emoji-cheat-sheet/" target="_blank" rel="external">Emoji cheat sheet</a></em></strong><br><strong><em><a href="http://theme-next.iissnan.com/tag-plugins.html" target="_blank" rel="external">Next使用文档-内置标签</a></em></strong><br><strong><em><a href="https://hexo.io/docs/tag-plugins.html" target="_blank" rel="external">Hexo-tag plugins</a></em></strong><br><strong><em><a href="https://math.meta.stackexchange.com/questions/5020/mathjax-basic-tutorial-and-quick-reference" target="_blank" rel="external">MathJax quick reference</a></em></strong></p><div id="footnotes"><hr><div id="footnotelist"><ol style="list-style:none;padding-left:0"><li id="fn:1"><span style="display:inline-block;vertical-align:top;padding-right:10px">1.</span><span style="display:inline-block;vertical-align:top">大家都这样说</span><a href="#fnref:1" rev="footnote"> ↩</a></li><li id="fn:2"><span style="display:inline-block;vertical-align:top;padding-right:10px">2.</span><span style="display:inline-block;vertical-align:top">他不知道<a href="https://en.wikipedia.org/wiki/Markdown" target="_blank" rel="external">markdown</a>是什么</span><a href="#fnref:2" rev="footnote"> ↩</a></li></ol></div></div></blockquote>]]></content>
      
        <categories>
            
            <category> 技术 </category>
            
            <category> 前端 </category>
            
        </categories>
        
        
        <tags>
            
            <tag> markdown </tag>
            
            <tag> Hexo </tag>
            
        </tags>
        
    </entry>
    
    <entry>
      <title><![CDATA[中文教案]]></title>
      <url>/%E6%9D%82%E8%B0%88/%E7%94%9F%E6%B4%BB/chinese-tutorial/</url>
      <content type="html"><![CDATA[<script src="/assets/js/APlayer.min.js"> </script><div class="note success"><p>我在留法期间，是两个活泼可爱的法国学生的中文老师。这样的教学给了我独特的文化体验，将为他们准备的中文教案传到博客里，存作宝贵的回忆。</p></div><a id="more"></a><p>这两个学生的风格大不相同</p><p>一个是叫<span id="inline-blue">Ethan</span>的男孩，正在读高中，货真价实的大学霸，立志考上<code>Mines ParisTech</code>，桌子上放着醒目的”<strong>Chase your dream</strong>“的座右铭，由于他将中文作为Prépa（法国的高考）的语言考试项目，因此我在上课时也不敢丝毫怠慢，倍感责任重大。不能误人子弟呀~</p><p>另一个是叫<span id="inline-purple">Héloïse</span>的女孩，正在读初中，学习成绩优秀，能歌善舞，特别活泼开朗，就是上课的时候总是不太容易长时间集中注意力，喜欢和我谈天说地扯题外话，我只能更加一本正经严肃脸了2333O(∩_∩)O哈哈~</p><p>能够有机会与寻常法国百姓家的孩子深入打交道，也是一种独特的文化体验，这比练习提高法语还要重要。下面是我为法国孩子上课准备的教案中的一份，谨以此纪念我在法国度过的两年愉快时光。</p><div class="row"><embed src="/img/tutorial.pdf" width="100%" height="550" type="application/pdf"></div>]]></content>
      
        <categories>
            
            <category> 杂谈 </category>
            
            <category> 生活 </category>
            
        </categories>
        
        
        <tags>
            
            <tag> français </tag>
            
        </tags>
        
    </entry>
    
  
  
</search>
