<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <title>liziwl | 鲤的池塘</title>
  
  <subtitle>塘朗山下的小天地</subtitle>
  <link href="https://blog.liziwl.cn/atom.xml" rel="self"/>
  
  <link href="https://blog.liziwl.cn/"/>
  <updated>2025-10-12T11:24:49.203Z</updated>
  <id>https://blog.liziwl.cn/</id>
  
  <author>
    <name>Arthur LI</name>
    
  </author>
  
  <generator uri="https://hexo.io/">Hexo</generator>
  
  <entry>
    <title>一种设备预算受限情况下的直播平台方案</title>
    <link href="https://blog.liziwl.cn/2022/06/01/live-framework/"/>
    <id>https://blog.liziwl.cn/2022/06/01/live-framework/</id>
    <published>2022-06-01T02:55:08.000Z</published>
    <updated>2025-10-12T11:24:49.203Z</updated>
    
    <content type="html"><![CDATA[<p>2022年3月学校封闭的时候，由于疫情较为紧张开始了每日核酸检测工作。尽管核酸采样人员充足且封闭在校内的并不是很多，高峰期等待核酸的队伍经常排的很长，非高峰期又完全不需要排队。一方面可能需要动态调整核酸采样人员的人数，另一方面需要鼓励待测人员在非高峰期前往检测点，或限制待测人员在高峰期前往检测点。</p><p>这样就自然地产生两种解决方案：1. 非高峰期进行上报和通知；2. 采取预约制前往检测点。然而第一种解决方案在实践上会有一些问题，在不同社群传播消息时，没有量化排队等待时间和队伍长度观测时间。这就导致一般消息发出30分钟后，队伍长度有个小高峰或者正常高峰期80%-90%的长度，且该消息的更新同样是个问题。</p><p>这就产生了一个场景痛点：<strong>及时报告通知核酸点排队人数情况</strong>。故此产生了标题所描述的设计。</p><div align=center><img src="/post-img/live-queue.png" style="max-width:50%" /></div><span id="more"></span><h2 id="简化场景：排队系统"><a href="#简化场景：排队系统" class="headerlink" title="简化场景：排队系统"></a>简化场景：排队系统</h2><p>需求分析：</p><ul><li>实时更新</li><li>直观展示排队人数</li><li>有限传播，隐私保护</li><li>较低的维护频率</li></ul><h2 id="解决方案"><a href="#解决方案" class="headerlink" title="解决方案"></a>解决方案</h2><h3 id="原型：腾讯会议"><a href="#原型：腾讯会议" class="headerlink" title="原型：腾讯会议"></a>原型：腾讯会议</h3><p>腾讯会议开个会议室，使用手机直播，临时测试一下机位和场地电源供应的可行性。我们场地有无线局域网，如果没有则需要使用4g蜂窝数据，可以使用随身wifi或者给手机插卡接入。电源由于场地限制不好拉排插，所以采用户外电源供应电源，满足1-2天维护一次的需求。至于使用手机而不是树莓派+摄像头之类的方案，手机的硬件集成度更好，且相关软件较多，例如（1）底层图像处理：自动亮度和对焦；（2）集成屏幕，方便调试；（3）无线网络性能较好；（4）手机推流服务较为完善，流量控制，自动重传等设计；（5）不错的功耗控制。</p><div align=center><img src="/post-img/test-live.jpg" style="max-width:50%" /></div><h4 id="设备"><a href="#设备" class="headerlink" title="设备"></a>设备</h4><ul><li>手机。最好双摄，夜间视频效果好。</li><li>户外电源（特大号充电宝）。5V2A输出能力，建议5万mAh以上，满足1-2天的持续充电需求。</li></ul><h3 id="alpha-版本"><a href="#alpha-版本" class="headerlink" title="alpha 版本"></a>alpha 版本</h3><p>由于腾讯会议临时会议号每次会变，传播更新不是很方便。如固定会议号超过2个人，时长会有限制。所以我们重新包装了一层，降低传播的难度。OBS 采集腾讯会议的视频流，并可以做额外处理，例如增加时间图层，水印，亮度对比度调节，等。OwnCast 是开箱即用的直播平台，使用 RTMP 协议推流。如果工作站的上行带宽达不到百兆，很可能无法支持多人的直播服务，那就需要使用免费的公网直播平台，例如哔哩哔哩直播，企鹅直播，虎牙直播等，但是这会引入隐私问题。</p><div align=center><img src="/post-img/alpha-live.jpg" style="max-width:50%" /></div><h3 id="设备-1"><a href="#设备-1" class="headerlink" title="设备"></a>设备</h3><ul><li>手机。最好双摄，夜间视频效果好。</li><li>户外电源（特大号充电宝）。5V2A输出能力，建议5万mAh以上，满足1-2天的持续充电需求。</li><li>工作站。上传带宽至少百兆，最好千兆。</li></ul><h2 id="扩展与不足"><a href="#扩展与不足" class="headerlink" title="扩展与不足"></a>扩展与不足</h2><p>读者需要明确的是：所有设备没有额外购买。使用闲置的设备和有空闲的计算设备。要是有预算当然可以做得更好。</p><p>至此我们做到这里基本上就能满足所有需求，维护频率2-3天一次：更换充电宝，重新调整机位，腾讯会议重新连接。当然我们还可以做到更好，因为项目开始时预计只是使用2-3周，没想到使用时长延长了3倍，用了3个月，有些事情没有提前考虑或考虑开发成本就暂时不做。整个项目由3位毕业级同学协力完成，一天迭代了2个版本，之后就没有改过设计。</p><p>下面是一些可以改进或需要注意的点：</p><ol><li>醒目地告示正在采集视频。在直播信号采集的位置提示注意隐私。</li><li>雨天防护。最开始设备放在露天，有几天连续下大雨设备进水差点不能用了。</li><li>基于计算机视觉的人数估计。</li><li>利用现有的监控信号。一般监控的位置较高，视野较好，但是监控信号不易导出。</li></ol><h2 id="更新与后记"><a href="#更新与后记" class="headerlink" title="更新与后记"></a>更新与后记</h2><p>使用安卓端直接推到 OwnCast 的方式，缺点是定制化程度低，不能加 logo 或者其他定制水印标记，只有打上时间标记的简单功能。</p><p>可选安卓应用：</p><ol><li>EasyRTMP：<a href="http://app.tsingsee.com/easyrtmp">http://app.tsingsee.com/easyrtmp</a></li><li>Larix Broadcaster：<a href="https://play.google.com/store/apps/details?id=com.wmspanel.larix_broadcaster&hl=zh-CN">https://play.google.com/store/apps/details?id=com.wmspanel.larix_broadcaster&amp;hl=zh-CN</a></li></ol>]]></content>
    
    
    <summary type="html">&lt;p&gt;2022年3月学校封闭的时候，由于疫情较为紧张开始了每日核酸检测工作。尽管核酸采样人员充足且封闭在校内的并不是很多，高峰期等待核酸的队伍经常排的很长，非高峰期又完全不需要排队。一方面可能需要动态调整核酸采样人员的人数，另一方面需要鼓励待测人员在非高峰期前往检测点，或限制待测人员在高峰期前往检测点。&lt;/p&gt;
&lt;p&gt;这样就自然地产生两种解决方案：1. 非高峰期进行上报和通知；2. 采取预约制前往检测点。然而第一种解决方案在实践上会有一些问题，在不同社群传播消息时，没有量化排队等待时间和队伍长度观测时间。这就导致一般消息发出30分钟后，队伍长度有个小高峰或者正常高峰期80%-90%的长度，且该消息的更新同样是个问题。&lt;/p&gt;
&lt;p&gt;这就产生了一个场景痛点：&lt;strong&gt;及时报告通知核酸点排队人数情况&lt;/strong&gt;。故此产生了标题所描述的设计。&lt;/p&gt;
&lt;div align=center&gt;&lt;img src=&quot;/post-img/live-queue.png&quot; style=&quot;max-width:50%&quot; /&gt;&lt;/div&gt;</summary>
    
    
    
    <category term="配置安装" scheme="https://blog.liziwl.cn/categories/%E9%85%8D%E7%BD%AE%E5%AE%89%E8%A3%85/"/>
    
    
    <category term="直播" scheme="https://blog.liziwl.cn/tags/%E7%9B%B4%E6%92%AD/"/>
    
  </entry>
  
  <entry>
    <title>Debian/Ubuntu 上各种 Docker 发布版本的区别（docker-io, docker-ce, docker-ee）</title>
    <link href="https://blog.liziwl.cn/2022/02/01/docker-dist-difference/"/>
    <id>https://blog.liziwl.cn/2022/02/01/docker-dist-difference/</id>
    <published>2022-02-01T14:51:37.000Z</published>
    <updated>2025-10-12T11:24:49.203Z</updated>
    
    <content type="html"><![CDATA[<p>在 apt 安装的时候可能会疑惑怎么有这么多种 docker，并且读 docker 官方目录的时候还要卸载另外的，并称其他为 “<a href="https://docs.docker.com/engine/install/ubuntu/#uninstall-old-versions">过时的</a>”，然而可能却并不是那么过时以至于导致兼容性问题。</p><p>一句话概括：<strong>docker-ce</strong> 由 docker.com，<strong>docker-io</strong> 由 Debian 提供，安装更加方便，只需一行命令，并且我也推荐用  <strong>docker-io</strong>。</p><span id="more"></span><p><strong>docker-io</strong>包是 Debian&#x2F;Ubuntu 从其<a href="https://salsa.debian.org/docker-team/docker/blob/master/debian/control">官方仓库</a>上提供的 docker 版本使用的名称。<strong>每个外部依赖项都是一个单独的包，并且将独立更新。</strong></p><p><strong>docker-ce</strong>是<a href="https://download.docker.com/linux/">docker.com</a>直接提供的认证版本，也可以<a href="https://github.com/docker/docker-ce/tree/master/components/packaging/deb">从源代码</a>构建。<strong>因此，在构建之前将所有依赖项拉入源代码树，然后整个应用形成一个单独的包。总是一次更新 docker 及其所有依赖项。</strong></p><p>在 Ubuntu 20.04 干跑 dry-run 对比:</p><p>36 行，docker-ce 的版本是 20.10.12</p><figure class="highlight bash"><figcaption><span>docker-ce apt 安装 >folded</span></figcaption><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br></pre></td><td class="code"><pre><span class="line">$ <span class="built_in">sudo</span> apt-get install docker-ce --dry-run</span><br><span class="line">Reading package lists... Done</span><br><span class="line">Building dependency tree</span><br><span class="line">Reading state information... Done</span><br><span class="line">The following packages were automatically installed and are no longer required:</span><br><span class="line">  linux-headers-5.4.0-26 linux-headers-5.4.0-26-generic linux-headers-5.4.0-47</span><br><span class="line">  linux-headers-5.4.0-47-generic linux-headers-5.4.0-81 linux-headers-5.4.0-81-generic</span><br><span class="line">  linux-headers-5.4.0-86 linux-headers-5.4.0-86-generic linux-image-5.4.0-26-generic</span><br><span class="line">  linux-image-5.4.0-47-generic linux-image-5.4.0-81-generic linux-image-5.4.0-86-generic</span><br><span class="line">  linux-modules-5.4.0-26-generic linux-modules-5.4.0-47-generic linux-modules-5.4.0-81-generic</span><br><span class="line">  linux-modules-5.4.0-86-generic linux-modules-extra-5.4.0-26-generic</span><br><span class="line">  linux-modules-extra-5.4.0-47-generic linux-modules-extra-5.4.0-81-generic</span><br><span class="line">  linux-modules-extra-5.4.0-86-generic</span><br><span class="line">Use <span class="string">&#x27;sudo apt autoremove&#x27;</span> to remove them.</span><br><span class="line">The following additional packages will be installed:</span><br><span class="line">  containerd.io dbus-user-session docker-ce-cli docker-ce-rootless-extras docker-scan-plugin pigz</span><br><span class="line">  slirp4netns</span><br><span class="line">Suggested packages:</span><br><span class="line">  aufs-tools cgroupfs-mount | cgroup-lite</span><br><span class="line">The following NEW packages will be installed:</span><br><span class="line">  containerd.io dbus-user-session docker-ce docker-ce-cli docker-ce-rootless-extras docker-scan-plugin</span><br><span class="line">  pigz slirp4netns</span><br><span class="line">0 upgraded, 8 newly installed, 0 to remove and 19 not upgraded.</span><br><span class="line">Inst pigz (2.4-1 Ubuntu:20.04/focal [amd64])</span><br><span class="line">Inst containerd.io (1.4.12-1 Docker CE:focal [amd64])</span><br><span class="line">Inst dbus-user-session (1.12.16-2ubuntu2.1 Ubuntu:20.04/focal-updates, Ubuntu:20.04/focal-security [amd64])</span><br><span class="line">Inst docker-ce-cli (5:20.10.12~3-0~ubuntu-focal Docker CE:focal [amd64])</span><br><span class="line">Inst docker-ce (5:20.10.12~3-0~ubuntu-focal Docker CE:focal [amd64])</span><br><span class="line">Inst docker-ce-rootless-extras (5:20.10.12~3-0~ubuntu-focal Docker CE:focal [amd64])</span><br><span class="line">Inst docker-scan-plugin (0.12.0~ubuntu-focal Docker CE:focal [amd64])</span><br><span class="line">Inst slirp4netns (0.4.3-1 Ubuntu:20.04/focal [amd64])</span><br><span class="line">Conf pigz (2.4-1 Ubuntu:20.04/focal [amd64])</span><br><span class="line">Conf containerd.io (1.4.12-1 Docker CE:focal [amd64])</span><br><span class="line">Conf dbus-user-session (1.12.16-2ubuntu2.1 Ubuntu:20.04/focal-updates, Ubuntu:20.04/focal-security [amd64])</span><br><span class="line">Conf docker-ce-cli (5:20.10.12~3-0~ubuntu-focal Docker CE:focal [amd64])</span><br><span class="line">Conf docker-ce (5:20.10.12~3-0~ubuntu-focal Docker CE:focal [amd64])</span><br><span class="line">Conf docker-ce-rootless-extras (5:20.10.12~3-0~ubuntu-focal Docker CE:focal [amd64])</span><br><span class="line">Conf docker-scan-plugin (0.12.0~ubuntu-focal Docker CE:focal [amd64])</span><br><span class="line">Conf slirp4netns (0.4.3-1 Ubuntu:20.04/focal [amd64])</span><br></pre></td></tr></table></figure><p>37 行，docker.io 的版本是 20.10.7</p><figure class="highlight bash"><figcaption><span>docker.io apt 安装 >folded</span></figcaption><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br></pre></td><td class="code"><pre><span class="line">$ <span class="built_in">sudo</span> apt-get install docker.io --dry-run</span><br><span class="line">Reading package lists... Done</span><br><span class="line">Building dependency tree</span><br><span class="line">Reading state information... Done</span><br><span class="line">The following packages were automatically installed and are no longer required:</span><br><span class="line">  linux-headers-5.4.0-26 linux-headers-5.4.0-26-generic linux-headers-5.4.0-47</span><br><span class="line">  linux-headers-5.4.0-47-generic linux-headers-5.4.0-81 linux-headers-5.4.0-81-generic</span><br><span class="line">  linux-headers-5.4.0-86 linux-headers-5.4.0-86-generic linux-image-5.4.0-26-generic</span><br><span class="line">  linux-image-5.4.0-47-generic linux-image-5.4.0-81-generic linux-image-5.4.0-86-generic</span><br><span class="line">  linux-modules-5.4.0-26-generic linux-modules-5.4.0-47-generic linux-modules-5.4.0-81-generic</span><br><span class="line">  linux-modules-5.4.0-86-generic linux-modules-extra-5.4.0-26-generic</span><br><span class="line">  linux-modules-extra-5.4.0-47-generic linux-modules-extra-5.4.0-81-generic</span><br><span class="line">  linux-modules-extra-5.4.0-86-generic</span><br><span class="line">Use <span class="string">&#x27;sudo apt autoremove&#x27;</span> to remove them.</span><br><span class="line">The following additional packages will be installed:</span><br><span class="line">  bridge-utils containerd dns-root-data dnsmasq-base pigz runc ubuntu-fan</span><br><span class="line">Suggested packages:</span><br><span class="line">  ifupdown aufs-tools btrfs-progs cgroupfs-mount | cgroup-lite debootstrap docker-doc rinse zfs-fuse</span><br><span class="line">  | zfsutils</span><br><span class="line">The following NEW packages will be installed:</span><br><span class="line">  bridge-utils containerd dns-root-data dnsmasq-base docker.io pigz runc ubuntu-fan</span><br><span class="line">0 upgraded, 8 newly installed, 0 to remove and 19 not upgraded.</span><br><span class="line">Inst pigz (2.4-1 Ubuntu:20.04/focal [amd64])</span><br><span class="line">Inst bridge-utils (1.6-2ubuntu1 Ubuntu:20.04/focal [amd64])</span><br><span class="line">Inst runc (1.0.1-0ubuntu2~20.04.1 Ubuntu:20.04/focal-updates [amd64])</span><br><span class="line">Inst containerd (1.5.5-0ubuntu3~20.04.1 Ubuntu:20.04/focal-updates [amd64])</span><br><span class="line">Inst dns-root-data (2019052802 Ubuntu:20.04/focal [all])</span><br><span class="line">Inst dnsmasq-base (2.80-1.1ubuntu1.4 Ubuntu:20.04/focal-updates, Ubuntu:20.04/focal-security [amd64])</span><br><span class="line">Inst docker.io (20.10.7-0ubuntu5~20.04.2 Ubuntu:20.04/focal-updates, Ubuntu:20.04/focal-security [amd64])</span><br><span class="line">Inst ubuntu-fan (0.12.13 Ubuntu:20.04/focal [all])</span><br><span class="line">Conf pigz (2.4-1 Ubuntu:20.04/focal [amd64])</span><br><span class="line">Conf bridge-utils (1.6-2ubuntu1 Ubuntu:20.04/focal [amd64])</span><br><span class="line">Conf runc (1.0.1-0ubuntu2~20.04.1 Ubuntu:20.04/focal-updates [amd64])</span><br><span class="line">Conf containerd (1.5.5-0ubuntu3~20.04.1 Ubuntu:20.04/focal-updates [amd64])</span><br><span class="line">Conf dns-root-data (2019052802 Ubuntu:20.04/focal [all])</span><br><span class="line">Conf dnsmasq-base (2.80-1.1ubuntu1.4 Ubuntu:20.04/focal-updates, Ubuntu:20.04/focal-security [amd64])</span><br><span class="line">Conf docker.io (20.10.7-0ubuntu5~20.04.2 Ubuntu:20.04/focal-updates, Ubuntu:20.04/focal-security [amd64])</span><br><span class="line">Conf ubuntu-fan (0.12.13 Ubuntu:20.04/focal [all])</span><br></pre></td></tr></table></figure><p>可以看出版本差别并不大，兼容性日常使用应该可以忽略。考虑国内网络环境，直接安装 <strong>docker.io</strong> 从 apt 镜像源下载&#x2F;更新更快。</p><p><strong>docker-ee</strong> 现在被收购，一般用不上。</p><h1 id="参考"><a href="#参考" class="headerlink" title="参考"></a>参考</h1><ul><li><a href="https://stackoverflow.com/questions/45023363/what-is-docker-io-in-relation-to-docker-ce-and-docker-ee-now-called-mirantis-k">What is docker.io in relation to docker-ce and docker-ee (now called “Mirantis Kubernetes Engine”)?</a></li></ul>]]></content>
    
    
    <summary type="html">&lt;p&gt;在 apt 安装的时候可能会疑惑怎么有这么多种 docker，并且读 docker 官方目录的时候还要卸载另外的，并称其他为 “&lt;a href=&quot;https://docs.docker.com/engine/install/ubuntu/#uninstall-old-versions&quot;&gt;过时的&lt;/a&gt;”，然而可能却并不是那么过时以至于导致兼容性问题。&lt;/p&gt;
&lt;p&gt;一句话概括：&lt;strong&gt;docker-ce&lt;/strong&gt; 由 docker.com，&lt;strong&gt;docker-io&lt;/strong&gt; 由 Debian 提供，安装更加方便，只需一行命令，并且我也推荐用  &lt;strong&gt;docker-io&lt;/strong&gt;。&lt;/p&gt;</summary>
    
    
    
    <category term="编程笔记" scheme="https://blog.liziwl.cn/categories/%E7%BC%96%E7%A8%8B%E7%AC%94%E8%AE%B0/"/>
    
    
    <category term="docker" scheme="https://blog.liziwl.cn/tags/docker/"/>
    
  </entry>
  
  <entry>
    <title>Linux Foundation开源软件学园人才激励计划获奖者</title>
    <link href="https://blog.liziwl.cn/2022/01/14/linux-talent-incentive-program/"/>
    <id>https://blog.liziwl.cn/2022/01/14/linux-talent-incentive-program/</id>
    <published>2022-01-14T07:56:37.000Z</published>
    <updated>2025-10-12T11:24:49.203Z</updated>
    
    <content type="html"><![CDATA[<p>荣幸入选了2021年Linux Foundation开源软件学园人才激励计划。</p><blockquote><p>获奖者的风采展示！2021年Linux Foundation开源软件学园人才激励计划获奖者公布</p></blockquote><p>从2020年开始，Linux基金会亚太区与开源中国强强联手，启动Linux基金会开源软件学园人才激励计划，为那些有理想、热爱学习的开发者、系统管理员、开源新手等免费提供培训机会，让更多的人了解开源、学习开源、参与开源。</p><p>2021年人才激励计划得到中国大陆和港澳台地区开发者的广泛支持，自9月份活动开始以来，众多开发者热情报名，其中在学生、开源萌新、开源老手、技术达人、开源创业者、社区领袖、开源志愿者、女性开源力量八种身份中，开源萌新、学生、技术达人等更受欢迎。</p><span id="more"></span><h2 id="学生类别"><a href="#学生类别" class="headerlink" title="学生类别"></a>学生类别</h2><div align=center><img src="/post-img/avatar.jpg" style="max-width:50%" /></br><span>李子强 广东省深圳市</span></div><p>我是一名软件工程的研究生，开源项目让我学习了在理论学习过程中学不到的实践知识。我主要的研究领域也来自于开源社区，并回报开源社区。我研究开源软件项目中的错误缺陷，并使用自动化的方式推荐解决它的方案。除了研究外，我还使用开源技术 vuepress 搭建并维护南科手册，为在南方科技大学生活的同学或者想要了解南科大的朋友提供高质量的信息服务。为了便利自己和同学们使用LaTeX 进行论文排版与写作，我基于清华大学的开源模版 thuthesis 发布了南科大自己的论文开源模版。我计划之后继续参与开源社区的贡献，并且作为南科大计算机研究协会的成员，宣传优秀的开源社区项目，引导成员或者同学从校内开源做起，进行开源共享或者贡献，再逐渐向优秀的开源学习。</p><h2 id="原文链接"><a href="#原文链接" class="headerlink" title="原文链接"></a>原文链接</h2><p>链接：<a href="https://mp.weixin.qq.com/s/dg8guHp17XtpzaE7D8VXsQ">https://mp.weixin.qq.com/s/dg8guHp17XtpzaE7D8VXsQ</a></p>]]></content>
    
    
    <summary type="html">&lt;p&gt;荣幸入选了2021年Linux Foundation开源软件学园人才激励计划。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;获奖者的风采展示！2021年Linux Foundation开源软件学园人才激励计划获奖者公布&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;从2020年开始，Linux基金会亚太区与开源中国强强联手，启动Linux基金会开源软件学园人才激励计划，为那些有理想、热爱学习的开发者、系统管理员、开源新手等免费提供培训机会，让更多的人了解开源、学习开源、参与开源。&lt;/p&gt;
&lt;p&gt;2021年人才激励计划得到中国大陆和港澳台地区开发者的广泛支持，自9月份活动开始以来，众多开发者热情报名，其中在学生、开源萌新、开源老手、技术达人、开源创业者、社区领袖、开源志愿者、女性开源力量八种身份中，开源萌新、学生、技术达人等更受欢迎。&lt;/p&gt;</summary>
    
    
    
    <category term="宣传稿" scheme="https://blog.liziwl.cn/categories/%E5%AE%A3%E4%BC%A0%E7%A8%BF/"/>
    
    
  </entry>
  
  <entry>
    <title>Python 一些好用的包</title>
    <link href="https://blog.liziwl.cn/2022/01/02/python-package/"/>
    <id>https://blog.liziwl.cn/2022/01/02/python-package/</id>
    <published>2022-01-02T12:52:41.000Z</published>
    <updated>2025-10-12T11:24:49.203Z</updated>
    
    <content type="html"><![CDATA[<p>这里列出的主要是我所使用到的一些好用的 Python 库。</p><span id="more"></span><h2 id="命令行神器-Click"><a href="#命令行神器-Click" class="headerlink" title="命令行神器 Click"></a>命令行神器 <a href="https://pypi.org/project/click/">Click</a></h2><p>Click 是用 Python 写的一个第三方模块，用于快速创建命令行。我们知道，Python 内置了一个 Argparse 的标准库用于创建命令行，但使用起来有些繁琐，Click 相比于 Argparse，就好比 requests 相比于 urllib。</p><h2 id="网络请求-requests"><a href="#网络请求-requests" class="headerlink" title="网络请求 requests"></a>网络请求 <a href="https://pypi.org/project/requests/">requests</a></h2><p>比 urllib3 更好的选择，处理URL资源特别方便。</p><h2 id="依赖输出-pip-chill"><a href="#依赖输出-pip-chill" class="headerlink" title="依赖输出 pip-chill"></a>依赖输出 <a href="https://pypi.org/project/pip-chill/">pip-chill</a></h2><p>pip-chill，简化 pip 包的管理 <code>pip freeze</code> 得到的依赖文件表 <code>requirements.txt</code>。</p><h2 id="日志-loguru"><a href="#日志-loguru" class="headerlink" title="日志 loguru"></a>日志 <a href="https://pypi.org/project/loguru/">loguru</a></h2><p>自带 logging 的替代包，更加好用</p><h2 id="自然语言处理"><a href="#自然语言处理" class="headerlink" title="自然语言处理"></a>自然语言处理</h2><p>模糊匹配：<a href="https://github.com/seatgeek/thefuzz">https://github.com/seatgeek/thefuzz</a></p><p>简单处理：<a href="https://github.com/sloria/TextBlob">https://github.com/sloria/TextBlob</a></p><p>语言处理大全：<a href="https://github.com/explosion/spaCy">https://github.com/explosion/spaCy</a></p><h2 id="相关-GitHub-综述项目"><a href="#相关-GitHub-综述项目" class="headerlink" title="相关 GitHub 综述项目"></a>相关 GitHub 综述项目</h2><ul><li><a href="https://github.com/vinta/awesome-python">https://github.com/vinta/awesome-python</a></li><li><a href="https://github.com/jobbole/awesome-python-cn">https://github.com/jobbole/awesome-python-cn</a></li></ul>]]></content>
    
    
    <summary type="html">&lt;p&gt;这里列出的主要是我所使用到的一些好用的 Python 库。&lt;/p&gt;</summary>
    
    
    
    <category term="编程笔记" scheme="https://blog.liziwl.cn/categories/%E7%BC%96%E7%A8%8B%E7%AC%94%E8%AE%B0/"/>
    
    
    <category term="Python" scheme="https://blog.liziwl.cn/tags/Python/"/>
    
  </entry>
  
  <entry>
    <title>阿里实习小结：非完全远程实习记录</title>
    <link href="https://blog.liziwl.cn/2021/08/31/ali-intern-summary/"/>
    <id>https://blog.liziwl.cn/2021/08/31/ali-intern-summary/</id>
    <published>2021-08-31T07:33:43.000Z</published>
    <updated>2025-10-12T11:24:49.202Z</updated>
    
    <content type="html"><![CDATA[<p>从3月开始投递实习简历，4月收到意向书，6月收到正式实习offer，整个过程还是比较顺利的。这次实习只投递了阿里，腾讯和字节，前两个拿到了实习录用通知，但是由于时间问题选择了阿里。时间过得飞快，我在阿里的实习结束了。故此，想写篇记录一下。</p><span id="more"></span><div align=center><img src="/post-img/ali-badge.jpg" style="max-width:50%" /></div><p>阿里云的总部在杭州，不过北京、上海、深圳都有办公室。我实习的部门是阿里云-数据库-生态工具，部门在深圳也有一个小组，就近选择了深圳作为实习Base。深圳阿里中心位于人才公园旁边，可以乘坐地铁到登良地铁站。这里离后海和高新园这片互联网企业聚集区都挺近的。</p><h2 id="工作内容"><a href="#工作内容" class="headerlink" title="工作内容"></a>工作内容</h2><p>我所在的部门是阿里云的生态工具，基于阿里云在数据库上的丰富经验与数据上云的背景，为集团和客户提供高效、安全的研发工具和解决方案。生态工具的产品需要打通不同IDC的数据库来使用阿里云的计算能力，或者是将阿里云的SaaS能力输出到客户的专有云上。由于主要的产品形态是软件和服务，所以工作相对紧凑，产品需要迭代更新，保持能力领先。其中我所做的工作主要是针对目前产品架构，往微服务、云原生的产品形态演进做一些验证与测试，研究演进的架构是否能解决目前产品的痛点或者提升产品的能力。</p><h2 id="工作环境与饮食"><a href="#工作环境与饮食" class="headerlink" title="工作环境与饮食"></a>工作环境与饮食</h2><p>深圳阿里的工位应该是没有腾讯（生态园）大的，但是吃的倒不少，有3个食堂，各种口味都能满足（肯定是比南科大食堂好吃）。吃完饭还能去人才公园散步，看看日落，然后再回去加班。值得一提的是，深圳阿里似乎学习了腾讯的习惯，有半小时关灯午休时间，据杭州阿里的同学说，总部那边没有这种人性化规定，不过依旧可以自行休息。</p><div align=center><img src="/post-img/talent-park.jpg" style="max-width:50%" /></div><h2 id="基础设施"><a href="#基础设施" class="headerlink" title="基础设施"></a>基础设施</h2><p>一般商业公司的行政服务水平都比大学的高。像IT服务，可以很方便的工单或者电话解决。还有常见问题可以询问机器人。除此之外，技术和经验可以通过在线知识库分享给所有的同学（这是我为什么想做南科手册的一个原因）。大学的行政应该提供良好的服务以减少浪费在行政沟通上的时间，那些时间本应该用在科研产出上。</p><h2 id="为什么要实习"><a href="#为什么要实习" class="headerlink" title="为什么要实习"></a>为什么要实习</h2><p>之前我还没在互联网企业实习过，只是2018年大三在一家硬件公司（英伟达）实习过。我的研究方向是软件工程，所以特别想在去互联网的大公司看看他们是如何开发软件的。</p><p>有次NASAC 开会，微软亚洲研究院的张冬梅老师提到了：“只有真正到工业界里面，才能了解工业界的痛点，去研究能应用于实际问题的解决方案，推动领域的发展。”（回忆转述，可能不准确）。所以去大公司体验，开发有没有什么痛点，工业界是如何解决的，学术界有解决方案，另外也为将来职业选择收集更多第一手的信息。这个过程还是带薪考察与学习，对于学习计算机的同学来说是绝佳的理论和实践结合的机会。</p><h2 id="工作感想"><a href="#工作感想" class="headerlink" title="工作感想"></a>工作感想</h2><p>2021年是2020年开始“后疫情”时代的第一年，随着病毒不断变种，疫情的反弹随时出现。远程办公与合作，愈发成为常态。一般来说，表达方式所传递的信息量是以下面这个顺序递减的：面对面交流 &gt; 视频交流 &gt; 语音交流 &gt;&gt; 文字交流。我的师兄和Leader都在杭州，在这种物理条件减少沟通与减缓信息传递的情况，沟通虽然痛苦但是对自己的能力依旧是种锻炼，需要自己积极主动，不管是手头事情的同步还是问问题，其次是高效沟通，将所做的事情沉淀成图文并茂的文档，其他同学了解和对接都更加容易。</p><p>师兄在答辩前指导我：不论是面对专业的方向的人，还是非专业方向的人沟通，都要围绕3个W和1个H。讲述清楚业务背景（Why），业务需求或痛点（What、Who），到业务方案（How），实践成效，才是一个有效沟通；并且在提交任何方案时最后要给出自己的结论或偏好，不仅是从方案的完整性，更加是负责的态度。</p><div align=center><img src="/post-img/ali-doll.jpg" style="max-width:50%" /></div>]]></content>
    
    
    <summary type="html">&lt;p&gt;从3月开始投递实习简历，4月收到意向书，6月收到正式实习offer，整个过程还是比较顺利的。这次实习只投递了阿里，腾讯和字节，前两个拿到了实习录用通知，但是由于时间问题选择了阿里。时间过得飞快，我在阿里的实习结束了。故此，想写篇记录一下。&lt;/p&gt;</summary>
    
    
    
    <category term="随感" scheme="https://blog.liziwl.cn/categories/%E9%9A%8F%E6%84%9F/"/>
    
    
    <category term="总结" scheme="https://blog.liziwl.cn/tags/%E6%80%BB%E7%BB%93/"/>
    
  </entry>
  
  <entry>
    <title>阿里云自定义域名的静态网站部署 OSS + CDN + HTTPS</title>
    <link href="https://blog.liziwl.cn/2020/12/03/aliyun-page/"/>
    <id>https://blog.liziwl.cn/2020/12/03/aliyun-page/</id>
    <published>2020-12-03T10:35:20.000Z</published>
    <updated>2025-10-12T11:24:49.202Z</updated>
    
    <content type="html"><![CDATA[<p>使用以下服务域名均需备案，且最好 DNS 解析 &#x2F; 托管在阿里云。</p><span id="more"></span><h2 id="创建子账户获取-AccessKey-ID-和-AccessKey-Secret（可选）"><a href="#创建子账户获取-AccessKey-ID-和-AccessKey-Secret（可选）" class="headerlink" title="创建子账户获取 AccessKey ID 和 AccessKey Secret（可选）"></a>创建子账户获取 AccessKey ID 和 AccessKey Secret（可选）</h2><p>这里使用了 CI 服务（GitHub Action），自动化部署需要生成子账户完成授权。<br>在 <code>RAM 访问控制</code> （ <a href="https://ram.console.aliyun.com/users">https://ram.console.aliyun.com/users</a> ）中，申请子账户，并授予<code>编程访问</code>（启用 AccessKey ID 和 AccessKey Secret，支持通过 API 或其他开发工具访问）。</p><ol><li>申请子账户（授予<code>编程访问</code>）</li><li>保存 AccessKey ID 和 AccessKey Secret</li></ol><h2 id="创建对象存储对象-桶"><a href="#创建对象存储对象-桶" class="headerlink" title="创建对象存储对象-桶"></a>创建对象存储对象-桶</h2><ol><li>创建对象存储对象-桶（私有）</li><li>启用全球加速接入（可选）</li></ol><p>如果同样使用 GitHub Action，可以采用以下配置文件。使用 <a href="https://github.com/manyuanrong/setup-ossutil">manyuanrong&#x2F;setup-ossutil</a> 的插件，如果网络质量满足要求，使用直连即可，<code>endpoint</code> 填入桶的地域接入域名，比如深圳就是 <code>oss-cn-shenzhen.aliyuncs.com</code>。如果在境外或者其他原因导致速度太慢，可以试试阿里云的全球加速接入的域名 <code>oss-accelerate.aliyuncs.com</code>，需要自行启用（要加钱）。</p><p><img src="/post-img/aliyun-page/oss-1.png"></p><p>配置文件中的 <code>./public_artifact</code> 为静态网页编译输出目录， <code>oss://OSS_BUCKET/</code> 为对象存储桶名，需要自行修改。</p><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br></pre></td><td class="code"><pre><span class="line"><span class="bullet">-</span> <span class="attr">name:</span> <span class="string">setup</span> <span class="string">aliyun</span> <span class="string">oss</span></span><br><span class="line"><span class="attr">uses:</span> <span class="string">manyuanrong/setup-ossutil@master</span></span><br><span class="line"><span class="attr">with:</span></span><br><span class="line">    <span class="attr">endpoint:</span> <span class="string">oss-cn-shenzhen.aliyuncs.com</span></span><br><span class="line">    <span class="attr">access-key-id:</span> <span class="string">$&#123;&#123;</span> <span class="string">secrets.OSS_KEY_ID</span> <span class="string">&#125;&#125;</span></span><br><span class="line">    <span class="attr">access-key-secret:</span> <span class="string">$&#123;&#123;</span> <span class="string">secrets.OSS_KEY_SECRET</span> <span class="string">&#125;&#125;</span></span><br><span class="line"></span><br><span class="line"><span class="bullet">-</span> <span class="attr">name:</span> <span class="string">cp</span> <span class="string">files</span> <span class="string">to</span> <span class="string">aliyun</span></span><br><span class="line">  <span class="attr">run:</span> <span class="string">|</span></span><br><span class="line"><span class="string">    ossutil rm -rf oss://OSS_BUCKET/*</span></span><br><span class="line"><span class="string">    ossutil cp -rf --job 10 public_artifact/ oss://OSS_BUCKET/</span></span><br><span class="line"><span class="string"></span></span><br></pre></td></tr></table></figure><ol><li><p>创建桶后，需要给予之前创建的子账号管理权限（完全控制）。<br> <img src="/post-img/aliyun-page/oss-2.png"></p></li><li><p>于基础设置中启用静态页面配置<br> <img src="/post-img/aliyun-page/oss-3.jpg"><br> 404 页面同理自行配置，Hexo 默认好像是没有 404 页面的，需要创建。</p></li><li><p>如果部署了持续集成，每次部署会自动上传到对应的对象存储桶中。如没有使用持续集成，则需要手动上传。</p></li></ol><h2 id="配置-CDN"><a href="#配置-CDN" class="headerlink" title="配置 CDN"></a>配置 CDN</h2><p>其实直接将对象存储桶设置为公有读私有写一样可以访问，但是阿里云的对象存储流量稍贵，故这里套一层 CDN 降低流量费用，内网回源免流量费用，并且解决一个小 bug：首页 <code>/</code> 无法跳转到 <code>/index.html</code>。阿里云 CDN 中有 URL 重写功能能解决这个 bug。</p><h3 id="申请-SSL证书（启用HTTPS）"><a href="#申请-SSL证书（启用HTTPS）" class="headerlink" title="申请 SSL证书（启用HTTPS）"></a>申请 SSL证书（启用HTTPS）</h3><p>搜索 <code>证书</code>，找到 SSL证书 申请页面。阿里云也提供免费证书申请，只不过选项较多不太好找。如图所示，申请证书。按照提示验证，等待签发，无需下载证书。</p><p><img src="/post-img/aliyun-page/cdn-8.png"></p><h2 id="配置-CDN-细节"><a href="#配置-CDN-细节" class="headerlink" title="配置 CDN 细节"></a>配置 CDN 细节</h2><ol><li><p>创建 CDN 配置</p><ol><li>设定加速域名为自定义域名</li><li>业务类型选择图片小文件</li><li>源站信息选择OSS</li><li>端口选择443</li><li>加速区域选择“仅中国内地”</li><li>配置域名解析 CNAME 为分配的加速域名<br> <img src="/post-img/aliyun-page/cdn-5.png"></li></ol></li><li><p>启用优化配置</p><ol><li>启用 阿里云OSS私有 Bucket 回源<br> <img src="/post-img/aliyun-page/cdn-2.png"></li><li>创建重写 URL 规则，修复访问错误：首页 <code>/</code> 无法跳转到 <code>/index.html</code>。参考官方解决方案：<a href="https://help.aliyun.com/document_detail/321116.htm">开启私有OSS Bucket回源后，访问域名提示“You are forbidden to list buckets”错误</a>。如果不想访问首页时有后缀 <code>/index.html</code>，改OSS桶为公有读私有写，禁用第一步的“阿里云OSS私有 Bucket 回源”。<br> <img src="/post-img/aliyun-page/cdn-3.jpg"></li><li>启用 TLS 1.0, 1.1, 1.2, 1.3<br> <img src="/post-img/aliyun-page/cdn-1.png"></li><li>启用 HTTPS，选择前面申请的SSL证书<br> <img src="/post-img/aliyun-page/cdn-4.png"></li><li>启用各种压缩和优化<br> <img src="/post-img/aliyun-page/cdn-6.png"></li><li>启用 IPv6<br> <img src="/post-img/aliyun-page/cdn-7.png"></li></ol></li><li><p>配置最后一步，去 OSS 对象存储的设置中，对应桶开启 CDN 自动刷新<br> <img src="/post-img/aliyun-page/oss-4.jpg"></p></li></ol>]]></content>
    
    
    <summary type="html">&lt;p&gt;使用以下服务域名均需备案，且最好 DNS 解析 &amp;#x2F; 托管在阿里云。&lt;/p&gt;</summary>
    
    
    
    <category term="配置安装" scheme="https://blog.liziwl.cn/categories/%E9%85%8D%E7%BD%AE%E5%AE%89%E8%A3%85/"/>
    
    
    <category term="hexo" scheme="https://blog.liziwl.cn/tags/hexo/"/>
    
  </entry>
  
  <entry>
    <title>git-解决 Windows 下Git SSH 代理设置</title>
    <link href="https://blog.liziwl.cn/2020/04/06/git-notes3/"/>
    <id>https://blog.liziwl.cn/2020/04/06/git-notes3/</id>
    <published>2020-04-06T11:08:39.000Z</published>
    <updated>2025-10-12T11:24:49.203Z</updated>
    
    <content type="html"><![CDATA[<p>不知道为啥，我电脑上的 HTTP Git token 过段时间就过期，又要重新授权，就很烦。想到 SSH 没有这个但是速度比较慢，HTTP 设置很简单。SSH稍微复杂一些今天就介绍一下。</p><span id="more"></span><h2 id="http-的代理设置-Windows-Unix"><a href="#http-的代理设置-Windows-Unix" class="headerlink" title="http 的代理设置 Windows &amp; Unix"></a>http 的代理设置 Windows &amp; Unix</h2><p>1080 为 代理服务器 (127.0.0.1) 的端口。</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 设置 -- 代理服务器 为 http 协议</span></span><br><span class="line">git config --global http.proxy http://127.0.0.1:1080</span><br><span class="line">git config --global https.proxy http://127.0.0.1:1080</span><br><span class="line"></span><br><span class="line"><span class="comment"># 设置 -- 代理服务器 为 socks5 协议</span></span><br><span class="line">git config --global http.proxy <span class="string">&#x27;socks5://127.0.0.1:1080&#x27;</span></span><br><span class="line">git config --global https.proxy <span class="string">&#x27;socks5://127.0.0.1:1080&#x27;</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 取消设置</span></span><br><span class="line">git config --global --<span class="built_in">unset</span> http.proxy</span><br><span class="line">git config --global --<span class="built_in">unset</span> https.proxy</span><br></pre></td></tr></table></figure><h2 id="SSH-的代理设置"><a href="#SSH-的代理设置" class="headerlink" title="SSH 的代理设置"></a>SSH 的代理设置</h2><h3 id="Windows"><a href="#Windows" class="headerlink" title="Windows"></a>Windows</h3><ol><li>进入自己的用户目录 <code>C:\Users\YOUR_NAME\.ssh</code></li><li>新建或者打开文件 <code>config</code></li></ol><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br></pre></td><td class="code"><pre><span class="line">Host github.com</span><br><span class="line">  User git</span><br><span class="line">  Port 22</span><br><span class="line">  Hostname github.com</span><br><span class="line">  IdentityFile &quot;C:\Users\YOUR_NAME\.ssh\id_ed25519&quot;</span><br><span class="line">  TCPKeepAlive yes</span><br><span class="line">  ProxyCommand &quot;C:\Program Files\Git\mingw64\bin\connect.exe&quot; -S 127.0.0.1:1080 %h %p</span><br><span class="line"></span><br><span class="line">Host ssh.github.com</span><br><span class="line">  User git</span><br><span class="line">  Port 443</span><br><span class="line">  Hostname ssh.github.com</span><br><span class="line">  IdentityFile &quot;C:\Users\YOUR_NAME\.ssh\id_ed25519&quot;</span><br><span class="line">  TCPKeepAlive yes</span><br><span class="line">  ProxyCommand &quot;C:\Program Files\Git\mingw64\bin\connect.exe&quot; -S 127.0.0.1:1080 %h %p</span><br></pre></td></tr></table></figure><p><code>IdentityFile</code> 就是你的 SSH 私钥文件名</p><p><code>ProxyCommand</code> 是代理命令，后面是 Git 自带的 <code>connect</code> 注意路径和实际一致。 <code>-S</code> 参数意味着 使用 sock 协议代理，如果使用 http 协议代理使用 <code>-H</code> 参数。</p><h3 id="Unix"><a href="#Unix" class="headerlink" title="Unix"></a>Unix</h3><p>稍有不同，因为我用的是 Manjaro 没有自带 netcat 也就是 nc。特别注意这里使用的是 <strong>OpenBSD</strong> 的 netcat，不是 GNU 的 netcat。</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br></pre></td><td class="code"><pre><span class="line">Host github.com</span><br><span class="line">    User git</span><br><span class="line">    Port 22</span><br><span class="line">    Hostname github.com</span><br><span class="line">    IdentityFile &quot;/home/YOUR_NAME/.ssh/id_ed25519&quot;</span><br><span class="line">    TCPKeepAlive yes</span><br><span class="line">    ProxyCommand nc -X connect -x 127.0.0.1:7890 %h %p  # HTTP proxy</span><br><span class="line">    ProxyCommand nc -x 127.0.0.1:7891 %h %p  # sock proxy</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">Host ssh.github.com</span><br><span class="line">    User git</span><br><span class="line">    Port 443</span><br><span class="line">    Hostname ssh.github.com</span><br><span class="line">    IdentityFile &quot;/home/YOUR_NAME/.ssh/id_ed25519&quot;</span><br><span class="line">    TCPKeepAlive yes</span><br><span class="line">    ProxyCommand nc -X connect -x 127.0.0.1:7890 %h %p  # HTTP proxy</span><br><span class="line">    ProxyCommand nc -x 127.0.0.1:7891 %h %p  # sock proxy</span><br></pre></td></tr></table></figure>]]></content>
    
    
    <summary type="html">&lt;p&gt;不知道为啥，我电脑上的 HTTP Git token 过段时间就过期，又要重新授权，就很烦。想到 SSH 没有这个但是速度比较慢，HTTP 设置很简单。SSH稍微复杂一些今天就介绍一下。&lt;/p&gt;</summary>
    
    
    
    <category term="编程笔记" scheme="https://blog.liziwl.cn/categories/%E7%BC%96%E7%A8%8B%E7%AC%94%E8%AE%B0/"/>
    
    
    <category term="git" scheme="https://blog.liziwl.cn/tags/git/"/>
    
  </entry>
  
  <entry>
    <title>2019年Final总结</title>
    <link href="https://blog.liziwl.cn/2019/12/24/2019-final/"/>
    <id>https://blog.liziwl.cn/2019/12/24/2019-final/</id>
    <published>2019-12-24T14:41:07.000Z</published>
    <updated>2025-10-12T11:24:49.201Z</updated>
    
    <content type="html"><![CDATA[<p>今年选的BGM是易烊千玺的《精彩才刚刚开始》。</p><!-- require APlayer --><link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/aplayer/dist/APlayer.min.css"><script src="https://cdn.jsdelivr.net/npm/aplayer/dist/APlayer.min.js"></script><!-- require MetingJS --><script src="https://cdn.jsdelivr.net/npm/meting@2/dist/Meting.min.js"></script> <p><meting-js    server="tencent"    type="song"    id="001apXAh2mHRub"><br></meting-js></p><span id="more"></span><p><a href="https://blog.liziwl.cn/2018/12/24/2018-final/">2018年Final总结</a>回顾了到2019春节前的故事，那2019年的总结理应从2019春节前讲起。</p><h1 id="冬"><a href="#冬" class="headerlink" title="冬"></a>冬</h1><p>期末完没多久，既然尘埃落定、决定要继续在本校（南方科技大学）读硕士研究生，我便终止了在英伟达的实习。回学校专心搞毕业设计，毕竟，大四上（2018秋季学期）半工半读有点力不从心。毕设刚开了题，实验都还没做多少，得抓紧了。</p><div align=center><img src="/post-img/2019-final-1.png" style="max-width:50%" /></div><p>期末考完，1月15至20日去重庆玩了5天，这里应该是差一篇重庆游记，这坑看有时间能不能填上。重庆值得玩几次，吃喝性价比高，玩得也不错。去之前建议回顾《疯狂的石头》、《少年的你》、《火锅英雄》、还有一些在重庆取景的民国到抗战时期的的电影，这样去游玩更有感觉。留有遗憾的是，这次去没去 “817核工程” 因为主要太偏僻了，可能要自驾去。</p><h1 id="春"><a href="#春" class="headerlink" title="春"></a>春</h1><p>从重庆回来大概过了一周，2月3日除夕的前一天，又开一个说走就走的旅行，直接开车前往海口。2019年的春节在2月初，我的奶奶，用长沙话讲就是娭毑，去海口避寒去了。这次说走就走就是我的最后一次见娭毑，人生就是充满意外。这次前往海口还去了文昌，文昌的新鲜椰子真的嫩，好吃极了。</p><p>寒假过完，全心投入到了科研和毕业设计🎓中。</p><p>最后一学期我还参加了广东省大学生游泳比赛，这是我本科最后一次参加省比赛。其实决定是否参加还是挺纠结的，毕竟毕业设计的优先级更高，不能得不偿失，游泳比赛的排期和毕业设计最终答辩离得比较近，考虑了好久，也算安排上了。</p><div align=center><img src="/post-img/2019-final-2.png" style="max-width:50%" /></div><h1 id="夏"><a href="#夏" class="headerlink" title="夏"></a>夏</h1><p>暑假安排了去日本旅游，旅游的细节可以看<a href="https://mp.weixin.qq.com/s/mdAhhyxBzPabFJUQKO2rUw">公众号-鲤池塘 的推送</a>，也可以看<a href="https://blog.liziwl.cn/2019/07/10/travelogue-JAPAN/">博客</a>发布的，两边稍有区别。之后回校做毕业设计的完善工作，投到了 <a href="https://2020.icse-conferences.org/details/icse-2020-papers/60/Collaborative-Bug-Finding-for-Android-Apps">ICSE</a>，最后中了，之后可以去韩国，简直开心。</p><p>借着参加同期举办的软件测试比赛，暑期还去了北京参加 ISSTA，今年 ISSTA 升为CCF-A类会议。在北京意外的是，我表哥刚好在北京出差，竟然在同一个酒店，事先并没有联系，实在是缘分。他带我参观了字节跳动的北京总部。还有一天去和拜访隔壁班的孙力，他在 MSRA 实习，同样在中关村旁边。</p><p>陈天石，寒武纪创始人的讲座，看了宣传海报才知道，没想到是姚老师的学生。他来我们学校讲了很多从学术界跨界到工业界的经验，受益良多。</p><p>2019年是建国70周年，当然有阅兵，香港这次取消了国庆烟花，然而深圳湾却开始组织起烟花表演来。我们全家都预约到了10.1烟火的表演资格，时间长比香港跨年烟火长，看图的话就去我的Instagram。</p><p>其实还有一件比较沉重的事情，大概是我从北京回来没多久，娭毑走了，非常突然，只能赶回去见火化的最后一面，这对于我来说也是沉重的，是我第一次面对直系亲属的离开，慷慨光阴短暂，及时去完成该完成的事情，不要留下遗憾。</p><h1 id="秋"><a href="#秋" class="headerlink" title="秋"></a>秋</h1><p>秋季正式身份变成了硕士研究生，入住了新宿舍，虽说宿舍缩水没有阳台，但是至少还有独立卫浴，这点还能接受。既然转换了身份，就开始尝试不一样的东西，大约2017年我申请了志愿者证，参加过新人培训后，就没参加过正式志愿者活动。这学期参加了雪龙2号的志愿者，还有南山半马的志愿者活动，之后如果时间充裕肯定还会参加。</p>]]></content>
    
    
    <summary type="html">&lt;p&gt;今年选的BGM是易烊千玺的《精彩才刚刚开始》。&lt;/p&gt;
&lt;!-- require APlayer --&gt;
&lt;link rel=&quot;stylesheet&quot; href=&quot;https://cdn.jsdelivr.net/npm/aplayer/dist/APlayer.min.css&quot;&gt;
&lt;script src=&quot;https://cdn.jsdelivr.net/npm/aplayer/dist/APlayer.min.js&quot;&gt;&lt;/script&gt;
&lt;!-- require MetingJS --&gt;
&lt;script src=&quot;https://cdn.jsdelivr.net/npm/meting@2/dist/Meting.min.js&quot;&gt;&lt;/script&gt;
 
&lt;p&gt;&lt;meting-js
    server=&quot;tencent&quot;
    type=&quot;song&quot;
    id=&quot;001apXAh2mHRub&quot;&gt;&lt;br&gt;&lt;/meting-js&gt;&lt;/p&gt;</summary>
    
    
    
    <category term="随感" scheme="https://blog.liziwl.cn/categories/%E9%9A%8F%E6%84%9F/"/>
    
    
    <category term="总结" scheme="https://blog.liziwl.cn/tags/%E6%80%BB%E7%BB%93/"/>
    
  </entry>
  
  <entry>
    <title>Python 精简依赖 -- pip-chill</title>
    <link href="https://blog.liziwl.cn/2019/10/11/python-pypi/"/>
    <id>https://blog.liziwl.cn/2019/10/11/python-pypi/</id>
    <published>2019-10-11T08:43:24.000Z</published>
    <updated>2025-10-12T11:24:49.203Z</updated>
    
    <content type="html"><![CDATA[<p>开发时直接 <code>pip freeze</code> 得到的依赖文件表太乱了，就想有没有包能实现分析依赖让依赖文件表可读性更好。查阅后发现还真有这样的包 –pip-chill (<a href="https://pypi.org/project/pip-chill/">https://pypi.org/project/pip-chill/</a>)。</p><span id="more"></span><h1 id="最简单的依赖管理"><a href="#最简单的依赖管理" class="headerlink" title="最简单的依赖管理"></a>最简单的依赖管理</h1><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 安装虚拟环境</span></span><br><span class="line">pip install virtualenv</span><br><span class="line">virtualenv --no-site-packages venv</span><br><span class="line"></span><br><span class="line">pip freeze &gt; requirements.txt <span class="comment"># 输出本地包环境至文件</span></span><br><span class="line">pip install -r requirements.txt <span class="comment">#安装本地依赖</span></span><br></pre></td></tr></table></figure><h1 id="精简依赖管理"><a href="#精简依赖管理" class="headerlink" title="精简依赖管理"></a>精简依赖管理</h1><p>pip-chill (<a href="https://pypi.org/project/pip-chill/">https://pypi.org/project/pip-chill/</a>)</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line"><span class="built_in">source</span> venv/bin/activate <span class="comment"># 激活环境</span></span><br><span class="line">pip-chill <span class="comment"># with version</span></span><br><span class="line">pip-chill --no-version <span class="comment"># no version</span></span><br><span class="line">pip-chill -v <span class="comment"># list package dependencies too and version</span></span><br></pre></td></tr></table></figure>]]></content>
    
    
    <summary type="html">&lt;p&gt;开发时直接 &lt;code&gt;pip freeze&lt;/code&gt; 得到的依赖文件表太乱了，就想有没有包能实现分析依赖让依赖文件表可读性更好。查阅后发现还真有这样的包 –pip-chill (&lt;a href=&quot;https://pypi.org/project/pip-chill/&quot;&gt;https://pypi.org/project/pip-chill/&lt;/a&gt;)。&lt;/p&gt;</summary>
    
    
    
    <category term="编程笔记" scheme="https://blog.liziwl.cn/categories/%E7%BC%96%E7%A8%8B%E7%AC%94%E8%AE%B0/"/>
    
    
    <category term="Python" scheme="https://blog.liziwl.cn/tags/Python/"/>
    
  </entry>
  
  <entry>
    <title>zerotier 配置 moon</title>
    <link href="https://blog.liziwl.cn/2019/08/11/zerotier/"/>
    <id>https://blog.liziwl.cn/2019/08/11/zerotier/</id>
    <published>2019-08-11T15:03:46.000Z</published>
    <updated>2025-10-12T11:24:49.204Z</updated>
    
    <content type="html"><![CDATA[<p>由于国内网络的复杂的情况， ZeroTier 的点与点连接很有可能建立失败。此时机器之间的连接就会绕道国外，造成较大的延迟和丢包率。在 ZeroTier 1.2.0 版本之后，一项新的功能被加入进来：“自定义根服务器”，又称 moon。通过自定义的服务器作为跳板加速内网机器之间的互相访问。本文简要介绍了 ZeroTier moon 的设置方法。</p><h2 id="准备"><a href="#准备" class="headerlink" title="准备"></a>准备</h2><ol><li>公网机器A – moon</li><li>内网机器B</li></ol><span id="more"></span><h2 id="详细配置"><a href="#详细配置" class="headerlink" title="详细配置"></a>详细配置</h2><h3 id="生成及修改-moon-json"><a href="#生成及修改-moon-json" class="headerlink" title="生成及修改 moon.json"></a>生成及修改 moon.json</h3><p>首先ssh到机器 A 上，前往路径 <code>/var/lib/zerotier-one</code>，输入命令</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="built_in">sudo</span> sh -c <span class="string">&quot;zerotier-idtool initmoon identity.public &gt;&gt; moon.json&quot;</span></span><br></pre></td></tr></table></figure><p>此命令会在当前目录下生成一个文件 <code>moon.json</code>，文件内容类似如下:</p><figure class="highlight json"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br></pre></td><td class="code"><pre><span class="line"><span class="punctuation">&#123;</span></span><br><span class="line">  <span class="attr">&quot;id&quot;</span><span class="punctuation">:</span> <span class="string">&quot;deadbeef00&quot;</span><span class="punctuation">,</span></span><br><span class="line">  <span class="attr">&quot;objtype&quot;</span><span class="punctuation">:</span> <span class="string">&quot;world&quot;</span><span class="punctuation">,</span></span><br><span class="line">  <span class="attr">&quot;roots&quot;</span><span class="punctuation">:</span> <span class="punctuation">[</span></span><br><span class="line">    <span class="punctuation">&#123;</span></span><br><span class="line">      <span class="attr">&quot;identity&quot;</span><span class="punctuation">:</span> <span class="string">&quot;deadbeef00:0:34031483094...&quot;</span><span class="punctuation">,</span></span><br><span class="line">      <span class="attr">&quot;stableEndpoints&quot;</span><span class="punctuation">:</span> <span class="punctuation">[</span><span class="punctuation">]</span></span><br><span class="line">    <span class="punctuation">&#125;</span></span><br><span class="line">  <span class="punctuation">]</span><span class="punctuation">,</span></span><br><span class="line">  <span class="attr">&quot;signingKey&quot;</span><span class="punctuation">:</span> <span class="string">&quot;b324d84cec708d1b51d5ac03e75afba501a12e2124705ec34a614bf8f9b2c800f44d9824ad3ab2e3da1ac52ecb39ac052ce3f54e58d8944b52632eb6d671d0e0&quot;</span><span class="punctuation">,</span></span><br><span class="line">  <span class="attr">&quot;signingKey_SECRET&quot;</span><span class="punctuation">:</span> <span class="string">&quot;ffc5dd0b2baf1c9b220d1c9cb39633f9e2151cf350a6d0e67c913f8952bafaf3671d2226388e1406e7670dc645851bf7d3643da701fd4599fedb9914c3918db3&quot;</span><span class="punctuation">,</span></span><br><span class="line">  <span class="attr">&quot;updatesMustBeSignedBy&quot;</span><span class="punctuation">:</span> <span class="string">&quot;b324d84cec708d1b51d5ac03e75afba501a12e2124705ec34a614bf8f9b2c800f44d9824ad3ab2e3da1ac52ecb39ac052ce3f54e58d8944b52632eb6d671d0e0&quot;</span><span class="punctuation">,</span></span><br><span class="line">  <span class="attr">&quot;worldType&quot;</span><span class="punctuation">:</span> <span class="string">&quot;moon&quot;</span></span><br><span class="line"><span class="punctuation">&#125;</span></span><br></pre></td></tr></table></figure><p>其中 <code>&quot;identity&quot;</code> 为机器 A 在 <code>/var/lib/zerotier-one/identity.public</code>，应该已经导入无需修改</p><p>修改 <code>&quot;stableEndpoints&quot;</code> 为机器 A 的公网的 IP。如：</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">&quot;stableEndpoints&quot;: [ &quot;1.2.3.4/9993&quot;,&quot;2001:abcd:abcd::1/9993&quot; ]</span><br></pre></td></tr></table></figure><p>若公网机器没有 IPv6 地址，则将其修改为</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">&quot;stableEndpoints&quot;: [ &quot;1.2.3.4/9993&quot; ]</span><br></pre></td></tr></table></figure><h3 id="生成签名文件"><a href="#生成签名文件" class="headerlink" title="生成签名文件"></a>生成签名文件</h3><p>修改完 <code>moon.json</code> 后，执行命令</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="built_in">sudo</span> zerotier-idtool genmoon moon.json</span><br></pre></td></tr></table></figure><p>此命令会生成一个签名文件在当前目录下，文件名如 <code>000000deadbeef00.moon</code> （机器 A 的 id 为 <code>deadbeef00</code>)</p><h3 id="将-moon-节点加入-ZeroTier-网络"><a href="#将-moon-节点加入-ZeroTier-网络" class="headerlink" title="将 moon 节点加入 ZeroTier 网络"></a>将 moon 节点加入 ZeroTier 网络</h3><p>在机器 A 中的 ZeroTier 目录中建立子文件夹 <code>moons.d</code></p><p>Linux: <code>/var/lib/zerotier-one</code><br>将在机器 A 生成的 <code>000000deadbeef00.moon</code> 拷贝进 <code>moons.d</code> 文件夹中，并重启 ZeroTier（此步好像有些许 bug，重启电脑为佳）</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="built_in">sudo</span> killall -9 zerotier-one <span class="comment"># 关闭</span></span><br><span class="line"><span class="built_in">sudo</span> zerotier-one -d <span class="comment"># 启动</span></span><br></pre></td></tr></table></figure><h3 id="其他节点连接-moon-节点"><a href="#其他节点连接-moon-节点" class="headerlink" title="其他节点连接 moon 节点"></a>其他节点连接 moon 节点</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="built_in">sudo</span> zerotier-cli orbit deadbeef00 deadbeef00</span><br></pre></td></tr></table></figure><h2 id="参考"><a href="#参考" class="headerlink" title="参考"></a>参考</h2><p><a href="https://www.zerotier.com/manual.shtml#4_4">ZeroTier | Manual – 4.4. Creating Your Own Roots (a.k.a. Moons)</a></p>]]></content>
    
    
    <summary type="html">&lt;p&gt;由于国内网络的复杂的情况， ZeroTier 的点与点连接很有可能建立失败。此时机器之间的连接就会绕道国外，造成较大的延迟和丢包率。在 ZeroTier 1.2.0 版本之后，一项新的功能被加入进来：“自定义根服务器”，又称 moon。通过自定义的服务器作为跳板加速内网机器之间的互相访问。本文简要介绍了 ZeroTier moon 的设置方法。&lt;/p&gt;
&lt;h2 id=&quot;准备&quot;&gt;&lt;a href=&quot;#准备&quot; class=&quot;headerlink&quot; title=&quot;准备&quot;&gt;&lt;/a&gt;准备&lt;/h2&gt;&lt;ol&gt;
&lt;li&gt;公网机器A – moon&lt;/li&gt;
&lt;li&gt;内网机器B&lt;/li&gt;
&lt;/ol&gt;</summary>
    
    
    
    <category term="配置安装" scheme="https://blog.liziwl.cn/categories/%E9%85%8D%E7%BD%AE%E5%AE%89%E8%A3%85/"/>
    
    
    <category term="zerotier" scheme="https://blog.liziwl.cn/tags/zerotier/"/>
    
  </entry>
  
  <entry>
    <title>游记-日本</title>
    <link href="https://blog.liziwl.cn/2019/07/10/travelogue-JAPAN/"/>
    <id>https://blog.liziwl.cn/2019/07/10/travelogue-JAPAN/</id>
    <published>2019-07-10T06:44:05.000Z</published>
    <updated>2025-10-12T11:24:49.204Z</updated>
    
    <content type="html"><![CDATA[<p>这次旅行基本上没提前多久准备，递交签证的同时就着手准备各类事项，签证到手3天后就出发。大致计划是尽量深度游览关西，如果能照顾到东京就可以去一下。</p><span id="more"></span><h1 id="准备签证"><a href="#准备签证" class="headerlink" title="准备签证"></a>准备签证</h1><p>根据所在地区，在淘宝上选择销量较高的旅行社，进行代理送签至领事馆。日签出签率一般都挺高，有的代理店家甚至提供出签保险，在这种情况下就可以买飞机票了。如果代理店家不提供保障，携程和飞猪也可以提供签证险（出签失败，全退飞机票钱）。</p><h1 id="安排住宿"><a href="#安排住宿" class="headerlink" title="安排住宿"></a>安排住宿</h1><p>在出签就可以尽快订酒店了，酒店一般推荐通过Booking，Agoda，Airbnb预定。VISA &#x2F; Mastercard 通常会有联动酒店代理平台打折活动，下单的时候注意通过信用卡渠道的推广链接。</p><h1 id="准备至少2张银行卡"><a href="#准备至少2张银行卡" class="headerlink" title="准备至少2张银行卡"></a>准备至少2张银行卡</h1><ul><li>一张银联储蓄卡，方便ATM取现金应急。</li><li>一张非银联信用卡，不少店不支持银联，况且办一张可以返现的VISA &#x2F; Mastercard &#x2F; JCB 也是不错的选择。JR在线订票不支持银联。</li></ul><h1 id="出行必备"><a href="#出行必备" class="headerlink" title="出行必备"></a>出行必备</h1><ul><li><p>数据流量：不管是移动Wi-Fi，还是境外流量卡，至少要选择一种网络接入方式，没有网络就很麻烦。不建议国内电话卡直接进行数据漫游，因为按照国际惯例，漫游数据回归属地，所以即便国内手机卡在境外漫游也无法使用谷歌地图。</p></li><li><p>大众点评：竟然还能用，配合谷歌地图很不错。</p></li><li><p>谷歌地图：公交时刻和线路非常准确，有价格提示，但是公交站定位不太准确，需要随机应变地找，电车时刻没有乘换案内全面，但是还能用。</p></li><li><p>乘换案内：Yahoo 出品，电车和火车时刻信息非常准确，有价格提示，公交线路信息不太全。</p></li></ul><p>注意：不建议使用百度地图，没有价格提示，结果也很不明确，且少；高德地图好像根本没法使用。</p><ul><li>谷歌翻译：手机翻译就靠它，可以手写输入，可以拍照翻译。</li></ul><p>其次，除非会日语，否则按照日本路人平均英语水平，还是交流还是比较困难，需要使用国际通用手势。案内所（询问处）的工作人员的外语水平相对会高。</p><ul><li>Skype（可选）：网络电话，可以设置被叫来电显示，被叫者不可回拨到Skype，拨打主叫胜在便宜，价格和国内手机资费相同约0.14元每分钟。</li></ul><h1 id="简要行程及【移动方式】"><a href="#简要行程及【移动方式】" class="headerlink" title="简要行程及【移动方式】"></a>简要行程及【移动方式】</h1><ol><li>深圳-名古屋【春秋航空】</li><li>名古屋-京都【JR新快速（JR东海道本线&#x2F;JR琵琶湖线）】</li><li>京都-奈良-京都【近铁】</li><li>京都-大阪【JR新快速（JR京都线）】</li><li>大阪-东京【全日空（星悦航空实际承运）】</li><li>东京-名古屋【JR新干线】</li><li>名古屋-深圳【春秋航空】</li></ol><h1 id="详细行程"><a href="#详细行程" class="headerlink" title="详细行程"></a>详细行程</h1><h2 id="第一天"><a href="#第一天" class="headerlink" title="第一天"></a>第一天</h2><div align=center><img src="/post-img/jp/image1.png" style="max-width:50%" /></div><p>根据我们的所在地，广深港地区到关西和中部地区的直飞往返航班中只有春秋最便宜，虽然春秋被调侃为航空硬座，但是极致的性价比还是选择了它。回程建议根据需求加订行李额度，以防止超重。</p><p>到达名古屋站差不多12点了，这个点名古屋站所有投币式储物柜几乎都满了，包括附近高岛屋的客服中心，所以我们也没地方存行李。随便在车站找了家店吃了拉面，拉着行李箱就开始接下来行程。</p><p>第一站直接去丰田产业技术纪念馆，离名古屋站比较近，几站电车。主要介绍丰田如何从纺织发家，开始做汽车的故事。场馆内几乎所有纺织机，组装机械都能运行。亲手按下Start按钮听到机器轰鸣，对于小孩子或者理工男有着特别的吸引力。</p><div align=center><img src="/post-img/jp/image2.jpeg" style="max-width:50%" /></div><p>纺织机</p><div align=center><img src="/post-img/jp/image3.jpeg" style="max-width:50%" /></div><p>5速手动变速箱</p><p>下一站是名古屋城，1945年美军空袭名古屋，名古屋城的本丸御殿、大天守、小天守、东北隅橹、正门、金𩾇被烧毁。所以目前大部分是二战后的根据原来测量和设计的重建建筑。我们参观的时候，名古屋城天守阁在整修没法上，不过本丸御殿2019&#x2F;6&#x2F;8整体重建完成，刚好赶上，由于本丸御殿重建过程中并没有进行做旧操作，其实给人的历史感并不是很强烈，主要体验的是日式的风格。</p><div align=center><img src="/post-img/jp/image4.jpeg" style="max-width:50%" /></div><p>修整中的名古屋城天守阁，二战后使用混凝土重修，内部增加电梯，二战后也过去半个多世纪，官网介绍应该是打算重新翻新，进行木造复原工程，即混凝土改木建。可能不太能看得清楚，屋顶的的吻兽便是金鯱。</p><div align=center><img src="/post-img/jp/image5.jpeg" style="max-width:50%" /></div><p>金鯱</p><p>晚上乘坐新快速到达京都，新快速比新干线便宜一半，但慢一倍且需要转车，由于晚间没有景点，我们也觉得慢一点无所谓，刚好在电车上休息。</p><div align=center><img src="/post-img/jp/image6.jpeg" style="max-width:50%" /></div><h2 id="第二天"><a href="#第二天" class="headerlink" title="第二天"></a>第二天</h2><div align=center><img src="/post-img/jp/image7.jpeg" style="max-width:50%" /></div><p>来的时候做了一点功课，快速预习一下《艺妓回忆录》，里面小千代在连绵的桔色千本鸟居下奔跑的场景取自伏见稻荷大社。顺便提下，这部电影的女演阵容非常强大，有章子怡，杨紫琼，巩俐。稻荷神主管农业和商业，伏见稻荷大社又是千万稻荷社的总社，所以这里香火旺盛。在动漫中，常常出现的日式狐狸是稻荷神的使者。</p><div align=center><img src="/post-img/jp/image8.jpeg" style="max-width:50%" /></div><p>进门走不久，就能看到几个竹签桶，便是求签（籤，fortune stick）。许下愿望，充分混合签筒，倒出一个写有数字的竹签，把竹签交给神社里的巫女和100円便会给你对应的签纸。一般来说如果是吉签建议带回家，意为将好运带回家，凶签折起系在神社指定位置，拜托神仙祛除厄运。不过凶签一样可以带回家，毕竟签诗的内容可以随时提醒自己，作为反省的警示。</p><div align=center><img src="/post-img/jp/image9.jpeg" style="max-width:50%" /></div><p>我抽的神签</p><p>逛完前面的建筑，经过一个较大的鸟居，就进入稻荷山，后面就是“神灵”住的地方，小路被连绵的鸟居覆盖。鸟居一般正面两侧写着纳奉，后面两侧注明身份和日期。这一点和国内的寺庙是类似的，寺庙帮助信徒祈福。后面我们还看到其他寺庙有类似的设计：浅草寺那个标志性写着雷门的大灯笼后面就能看到署名，松下幸之助给浅草寺捐款重修雷门；春日大社门口参道两旁一样连绵的石灯笼。</p><div align=center><img src="/post-img/jp/image10.jpeg" style="max-width:50%" /></div><p>鸟居中</p><p>由于时间关系，我们并没逛完整个稻荷山，逛到半山腰就前往下一个景点，三十三间堂。</p><p>三十三间堂，迎面间数也称开间有三十三间，以此得名。殿内有1001座千手观音的木像。两旁有28座风、雷等神的立像。虽然千手观音样式相同，但是每尊由于不同工匠的手工差异，有着个体区别，千尊排开觉得十分震撼。这让我想起，重庆罗汉寺中罗汉堂500多尊形态各异的罗汉，各有精彩。本堂成长方形，长边特别长，所以传统上还用来做远程射箭比赛。</p><p>浏览完，沿着鸭川向北，去锦市场附近吃饭，锦市场附近有许多景点，祇园，八坂神社，清水寺，法观寺。我们由于时间或景点问题，这附近的景点都没去。注意清水寺的标志建筑清水寺舞台得等到2020年日本奥运前才修理完成，所以最近是不建议前往清水寺。</p><p>沿着鸭川再向北来到下鸭神社准确来说叫贺茂御祖神社，鸭川三角洲西边为贺茂川、东边高野川，中间的交会点称为鸭川三角洲，交会点以南才叫鸭川。下鸭神社就位于三角洲附近。</p><p>经典路线是下鸭神社，河合神社，相生社，糺（音同纠）之森，一路逛下来就会到鸭川三角洲，可以踏水玩耍。相生社虽然很小，但是据说是京都祈求良缘最灵验的地方。</p><div align=center><img src="/post-img/jp/image11.jpeg" style="max-width:50%" /></div><p>相生社</p><div align=center><img src="/post-img/jp/image12.jpeg" style="max-width:50%" /></div><p>鸭川三角洲</p><h2 id="第三天"><a href="#第三天" class="headerlink" title="第三天"></a>第三天</h2><p>从京都前往奈良建议使用近铁一日通，包含京都到奈良的往返电车票和奈良地区的公交，如果另外要坐京都市营地铁可以购买斑鸠卡（京都版）替代。在京都站的近铁客服咨询处可以购买近铁一日通，需要出示护照。</p><p>人教社初中历史课本上应该都学习过鉴真东渡的故事，既然来了奈良就一定要来看一下。中国唐朝对应日本相同时期是奈良时代，都城平城京位于奈良，仿照唐长安城进行建造【拓展阅读：唐招提寺金堂和中国唐代的建筑-梁思成】。这时刚好是夏日莲花开放的季节，唐招提寺开放了专门培养各个品种的莲花的庭院，本土的，中国的，形态各异。</p><div align=center><img src="/post-img/jp/image13.jpeg" style="max-width:50%" /></div><p>在唐招提寺的北面有个小佛堂放着鉴真大师的木造金身坐像，往东北角走便是鉴真大师的墓，有意思的是在鉴真大师墓旁有一块比较突兀的石碑上面写着“赵朴初居士之碑”，好像和周围环境并不协调。赵朴初先生生前是国家政协副主席，民进中央名誉主席、中国佛教协会会长。1962年11月，赵朴初先生与唐招提寺森本长老一起倡议中日佛教共同纪念鉴真和尚逝世1200周年，中日邦交正常化之前，促成鉴真和尚像回国扬州大明寺探亲。赵朴初先生就致力于中日友好交流事业，立此碑纪念。上面提到的梁思成的文章原刊载于1963年《鉴真纪念集》。</p><div align=center><img src="/post-img/jp/image14.png" style="max-width:50%" /></div><p>中国大明寺鉴真学院的题字</p><div align=center><img src="/post-img/jp/image15.jpeg" style="max-width:50%" /></div><p>近铁奈良站附近有一条步行街，吃饭可以在这解决。来了奈良，那必定是要来看鹿了，奈良公园附近散养了许多鹿，东边的二月堂南边的春日大社，西边的兴福寺，北边的东大寺，片区内都能看到自由歇息，向游客要鹿仙贝的鹿鹿。喂鹿只能用路边统一售卖的鹿仙贝，150円一包，自己准备食物可能会伤害鹿的健康。此外不知道是不是鹿仙贝，即便鹿散养，到处拉屎，公园的味道没有被鹿的排泄物熏得很臭，只是不太雅观。线路一般推荐从春日大社，东大寺，二月堂，如果时间够还可去门口的兴福寺，还有远离市区的法隆寺。兴福寺我们不太推荐，性价比不高。法隆寺，由于时间问题就没有去，但是看到网上评价很不错，算是一个遗憾吧。二月堂位处地势高点，可以俯瞰公园，要是刚好是傍晚的时候，看日落很不错。</p><div align=center><img src="/post-img/jp/image16.jpeg" style="max-width:50%" /></div><p>唐招提寺金堂</p><div align=center><img src="/post-img/jp/image17.jpeg" style="max-width:50%" /></div><div align=center><img src="/post-img/jp/image18.jpeg" style="max-width:50%" /></div><p>春日社参道</p><div align=center><img src="/post-img/jp/image19.jpeg" style="max-width:50%" /></div><p>二月堂</p><h2 id="第四天"><a href="#第四天" class="headerlink" title="第四天"></a>第四天</h2><p>东京皇居，京都御所，仙洞御所，桂离宫，修学院离宫，这几个皇家景点受宫内省管辖，除了京都御所都要在网上进行预约才能进入。东京皇居是其中最热门的，一般每月初会开放下个月的预约。后面4个都在京都地区，相对没有那么热门。第四天的行程相对休闲。我们最后选择了在京都市内的2个景点（京都御所、仙洞御所）。</p><p>需要预约的景点均免费，提供中文解说播放器，游览时都会有宫内警察跟着，同时一定配有日本本地导游，不可以随便乱走，只能走指定线路。</p><div align=center><img src="/post-img/jp/image20.jpeg" style="max-width:50%" /></div><div align=center><img src="/post-img/jp/image21.jpeg" style="max-width:50%" /></div><div align=center><img src="/post-img/jp/image22.jpeg" style="max-width:50%" /></div><div align=center><img src="/post-img/jp/image23.jpeg" style="max-width:50%" /></div><div align=center><img src="/post-img/jp/image24.jpeg" style="max-width:50%" /></div><div align=center><img src="/post-img/jp/image25.jpeg" style="max-width:50%" /></div><div align=center><img src="/post-img/jp/image26.jpeg" style="max-width:50%" /></div><p>醒花亭，取自李白诗 “夜来月下卧醒,花影零乱,满人襟袖,疑如濯魄于冰壶。”</p><div align=center><img src="/post-img/jp/image27.jpeg" style="max-width:50%" /></div><p>上图均为仙洞御所内</p><p>这天中午犯了比较大的错误，没弄清楚要去的餐厅具体大小，是否需要订位，导致走了许久，好像御所这边吃的不太多，最后大中午的往南走了2公里去锦市场附近吃的。</p><p>南禅寺，我觉得可能秋天来这边拍照会更加好看，夏天的趣味估计是看看罗马式水道，听着流水声还能感觉到点清凉吧。多天的日均3W步数的高强度徒步旅游，有点累了，晚间前往河原町附近购物。</p><div align=center><img src="/post-img/jp/image28.jpeg" style="max-width:50%" /></div><p>南禅寺</p><h2 id="第五天"><a href="#第五天" class="headerlink" title="第五天"></a>第五天</h2><p>第五天还有个小插曲，因为4天后是G20峰会，关西地区重要交通换乘中心的Coin Locker逐渐暂停运营以确保安全，导致差点存不上行李。</p><p>嵯峨野游览小火车，各方向都是半小时一班，旺季如果不提前订票可能没有票，网上提前在JR西日本官网订票比较稳，但是需要信用卡（不支持银联），出行前尽量前到JR西日本售票窗口（绿色窗口）取票，如果直接到龟冈取票，人可能会比较多。推荐的是龟冈至岚山区间，岚山方向建议选择偶数座位，靠近山谷（保津川）。春天的樱花、夏天的新绿、秋天的红叶是这边的特色。除了小火车，水路有保津川漂流，看起来也很不错。</p><div align=center><img src="/post-img/jp/image29.png" style="max-width:50%" /></div><div align=center><img src="/post-img/jp/image30.jpeg" style="max-width:50%" /></div><div align=center><img src="/post-img/jp/image31.jpeg" style="max-width:50%" /></div><div align=center><img src="/post-img/jp/image32.jpeg" style="max-width:50%" /></div><div align=center><img src="/post-img/jp/image33.jpeg" style="max-width:50%" /></div><p>出了岚山站，顺着路标就到嵯峨野竹林。如果对头发有任何困扰的朋友，可以来御髪神社看一看，也是出岚山站几步路。嵯峨野竹林是李安拍摄《卧虎藏龙》的取景地，既然提到这个电影，那又和上面提到的《艺妓回忆录》中2位演员有关系了，杨紫琼和章子怡，此片获得奥斯卡最佳影片提名。</p><div align=center><img src="/post-img/jp/image35.jpeg" style="max-width:50%" /></div><p>参天竹林</p><div align=center><img src="/post-img/jp/image36.jpeg" style="max-width:50%" /></div><div align=center><img src="/post-img/jp/image37.jpeg" style="max-width:50%" /></div><div align=center><img src="/post-img/jp/image38.jpeg" style="max-width:50%" /></div><div align=center><img src="/post-img/jp/image34.jpeg" style="max-width:50%" /></div><p>离开竹林就到天龙寺，这是我非常喜欢的一个庭院，日式风格中还有大气，花园各色的紫阳花开放着，也适合拍照。</p><p>如果是樱花或者红叶的季节可以到渡月桥上再看看桂川两侧的风景，我们接下来就去京都的标志性景点金阁寺，而且这个是旅游团必去景点，总的来说体验比较普通。</p><div align=center><img src="/post-img/jp/image39.jpeg" style="max-width:50%" /></div><p>金阁寺</p><div align=center><img src="/post-img/jp/image40.jpeg" style="max-width:50%" /></div><p>船形松</p><div align=center><img src="/post-img/jp/image41.jpeg" style="max-width:50%" /></div><p>北野天满宫，离金阁寺很近，作为学生自然要拜拜日本的学问之神，所以便来了。北野天满宫并不大，主要是过来打个卡。</p><h2 id="第六天"><a href="#第六天" class="headerlink" title="第六天"></a>第六天</h2><div align=center><img src="/post-img/jp/image42.jpeg" style="max-width:50%" /></div><p>大阪景点并不太多，本来传统景点计划了大阪城公园（天守阁），四天王寺，但是和沟通家人觉得前面逛了太多的传统景点，如果不是特别有意思便不想去了。大阪便只剩下2处现代景点，大阪海游馆或者大阪环球影城，选了前者。建议在地铁站内的站长室购买OSAKA海游票（大阪市内版）包含当天市内市营地铁和公交相当划算，不用到了场馆在排队。我之前去过温哥华水族馆（Vancouver Aquarium），和之相比，大阪海游馆确实有点小，标牌没有中文解释也不是很友好。主要结构就是围绕中心巨大的水槽，周围的小水槽对环太平洋的生物进行介绍。写游记的时候查过资料才发现，全球拥有全球最大水槽的水族馆竟然在珠海长隆，日本最大的位于冲绳，美国最大的位于亚特兰大。关于海洋生物我了解的并不多，所以没有更多的介绍了。无论是动物园还是水族馆，除了为了营收，更多吸引人或者说提升整个机构核心竞争力，一是欢乐，二是教育，三是保育。</p><div align=center><img src="/post-img/jp/image43.jpeg" style="max-width:50%" /></div><p>鲸鲨</p><div align=center><img src="/post-img/jp/image44.jpeg" style="max-width:50%" /></div><p>下午至晚间便是购物环节，心斋桥，道顿堀，难波站，一片都是观光购物的。</p><h2 id="第七天"><a href="#第七天" class="headerlink" title="第七天"></a>第七天</h2><p>购物和转机的一天。</p><p>大阪附近有2个机场，伊丹机场和关西机场，伊丹偏国内航线，关西偏国际航线。由于关西机场距离一个地铁站有个奥特莱斯（临空城Rinku Premium Outlets），便选择这边前往东京。东京也有2个机场，羽田和成田，成田更远离市区车费和时间上不太划算，所以一般建议飞羽田。一般提前订票日本国内航线会比新干线便宜，折扣幅度可达一半，如果不确定行程或者距离较近还是建议新干线。</p><p>对于新干线，还想省钱的方式是去大车站旁的金券行或者是代理商的自动售卖机，不同店铺价格不同，需要多比较。他们一般出售的是回数券，也就是次票，自由席的回数券直接就可以进站乘车，指定席的需要到车站内机器上选座才能使用。一般从JR官方渠道买11张回数券只收10张的钱，代理商通过将回收市面上的回数券或是直接购买热门线路的回数券将其拆开来卖来盈利。我们从东京回名古屋的新干线便是购买的回数券，要注意的是自由席一般只占有一列列车的小部分车厢可能会没有位置，所以如果指定席和自由席差价不太多的建议选择指定席更安全，而且错过指定席的列车没关系，可以自动换乘当天的自由席列车。</p><h2 id="第八天"><a href="#第八天" class="headerlink" title="第八天"></a>第八天</h2><p>东京之旅快结束了，每到一个国家，照例是要到其博物馆看看的，在京都、奈良为了省时间都没去博物馆，然而东京国立博物馆是肯定不能错过的。看博物馆一般要注意的是开馆时间，常见的坑是周一闭馆；其次，关于特展最好事先查阅资料，了解规模和价格，避免抱有过高期望专程前往。</p><p>上野公园内有不少景点，上野动物园，东京国立博物馆，国立科学馆，国立西洋美术馆，等等。鲁迅在《藤野先生》的第一段写道：“东京也无非是这样。上野的樱花烂熳的时节，望去确也像绯红的轻云……”，上野公园在春天也确实是赏樱花的好去处。上野公园内向东眺望能看到天空树，东京最高的建筑，东京3处常见的眺望处是天空树，东京塔，梅田大厦。</p><p>东京区域有非常多的博物馆，在旅游期间，全逛完肯定是不可能的。如果在东京逗留比较长时间的朋友，可以选择东京博物馆通票（Tokyo Museum Grutto Pass），包含东京大部分博物馆和动物园，水族馆，使用通票可以免费进入或者有一定折扣。</p><p>我们根据体力和时间只选了两个东京国立博物馆和国立西洋美术馆。如果时间够，还建议去靖国神社，了解日本人是如果理解二战。</p><div align=center><img src="/post-img/jp/image45.jpeg" style="max-width:50%" /></div><p>奈良大和四寺特展，多为佛造像，不可拍照所以没图</p><div align=center><img src="/post-img/jp/image46.jpeg" style="max-width:50%" /></div><div align=center><img src="/post-img/jp/image47.jpeg" style="max-width:50%" /></div><div align=center><img src="/post-img/jp/image48.jpeg" style="max-width:50%" /></div><p>日本刀的介绍</p><div align=center><img src="/post-img/jp/image49.jpeg" style="max-width:50%" /></div><p>明王，如来，菩萨在佛像中的区别。明王是七世纪左右在印度原有的印度教神衹的影响下诞生的佛教尊像。大多呈现忿怒相，以调伏众生中不听教化之人。如来指己经开悟、获得解脱的人。最初仅指获得开悟后创立佛教的古代印度的释迦牟尼，后来出现了阿弥陀如来、大日如来等众多如来。菩萨指为了获得开悟而精进修行的人。在以普度生为宗旨的大乘佛教中，将慈悲施予众生的行为就是修行。</p><div align=center><img src="/post-img/jp/image50.jpeg" style="max-width:50%" /></div><p>浮世绘代表作神奈川冲浪，原来是很小幅的作品。</p><div align=center><img src="/post-img/jp/image51.jpeg" style="max-width:50%" /></div><div align=center><img src="/post-img/jp/image52.jpeg" style="max-width:50%" /></div><div align=center><img src="/post-img/jp/image53.jpeg" style="max-width:50%" /></div><div align=center><img src="/post-img/jp/image54.jpeg" style="max-width:50%" /></div><p>除了主馆，还有东洋馆，里面收藏了大部分是中国，以及朝鲜、埃及等各地文物。</p><div align=center><img src="/post-img/jp/image55.jpeg" style="max-width:50%" /></div><p>图为大谷探险队进入3次进入西域的示意图。</p><p>国立西洋美术馆主要以松方幸次郎（川崎造船所，现在的川崎重工业的社长）为基础建立的，来这主要看莫奈、梵高、塞尚的印象派作品，甚至还有几幅毕加索的画。</p><div align=center><img src="/post-img/jp/image56.jpeg" style="max-width:50%" /></div><p>巴勃罗·毕加索，男与女</p><div align=center><img src="/post-img/jp/image57.jpeg" style="max-width:50%" /></div><p>保罗·塞尚, 蓬图瓦兹的桥与堤防</p><div align=center><img src="/post-img/jp/image58.jpeg" style="max-width:50%" /></div><p>克劳德·莫奈，塞纳河的早晨</p><h2 id="第九天"><a href="#第九天" class="headerlink" title="第九天"></a>第九天</h2><p>由于天气不太好，一直在下雨，而且是日本之行的最后一天，实在是累了，只去了浅草寺打卡，然后再东京站旁的银座逛了逛，就乘坐新干线返回名古屋，并从名古屋乘坐回国的飞机。这便是浅草寺标志性建筑雷门。</p><div align=center><img src="/post-img/jp/image59.jpeg" style="max-width:50%" /></div>]]></content>
    
    
    <summary type="html">&lt;p&gt;这次旅行基本上没提前多久准备，递交签证的同时就着手准备各类事项，签证到手3天后就出发。大致计划是尽量深度游览关西，如果能照顾到东京就可以去一下。&lt;/p&gt;</summary>
    
    
    
    <category term="游记" scheme="https://blog.liziwl.cn/categories/%E6%B8%B8%E8%AE%B0/"/>
    
    
    <category term="日本" scheme="https://blog.liziwl.cn/tags/%E6%97%A5%E6%9C%AC/"/>
    
    <category term="东京" scheme="https://blog.liziwl.cn/tags/%E4%B8%9C%E4%BA%AC/"/>
    
    <category term="京都" scheme="https://blog.liziwl.cn/tags/%E4%BA%AC%E9%83%BD/"/>
    
    <category term="大阪" scheme="https://blog.liziwl.cn/tags/%E5%A4%A7%E9%98%AA/"/>
    
  </entry>
  
  <entry>
    <title>2018年Final总结</title>
    <link href="https://blog.liziwl.cn/2018/12/24/2018-final/"/>
    <id>https://blog.liziwl.cn/2018/12/24/2018-final/</id>
    <published>2018-12-24T14:41:07.000Z</published>
    <updated>2025-10-12T11:24:49.201Z</updated>
    
    <content type="html"><![CDATA[<p>这里应有BGM：《生活倒影》- 苏云莹。伴着歌声写下这些文字，也许读者听着同样的声音，能稍稍体会到我的感受。</p><!-- require APlayer --><link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/aplayer/dist/APlayer.min.css"><script src="https://cdn.jsdelivr.net/npm/aplayer/dist/APlayer.min.js"></script><!-- require MetingJS --><script src="https://cdn.jsdelivr.net/npm/meting@2/dist/Meting.min.js"></script> <p><meting-js    server="tencent"    type="song"    id="000QQyiE1BCET1"><br></meting-js></p><p>2018年对我来说是完全地进入20+的年纪了。不说人生过了四分之一，也至少过去了五分之一，但是这对于刚告别2017的我来说，好像一切都还没准备好。</p><span id="more"></span><h2 id="冬"><a href="#冬" class="headerlink" title="冬"></a>冬</h2><p>深圳的冬天越来越反复无常，好像没有勇气下决心长大，接受规律的生活。冷空气一来，鼓舞着无从遮挡的冷风灌进衣领，裤管里。凉凉的雨粉落在手背上，好像是把最后的温暖浸润在了雨水里，接下来几天要忍受好几天的干燥，等待春天的复苏或是东南亚的海风支援。而我的一月在5门硬核（hardcore）的必修专业课中挣扎。就像这冷空气，我幸好和队友一起找到不少衣服，没有在最后凉凉。</p><p>假期早早地就安排了一场旅行，具体记录可以看另一篇<a href="https://blog.liziwl.cn/2018/01/30/travelogue-HAERBIN/"><strong>博文</strong></a>，这次是我这个南方人第一次感受到什么叫“凉凉”。当然，这是非常有趣的经历，第一次吃俄罗斯菜，第一次到东北，第一次吃冻梨，第一次用真正的暖气。</p><h2 id="春"><a href="#春" class="headerlink" title="春"></a>春</h2><p>本来冬天过了，我想这这个春天会好过一点，但是生活给我依然是硬核的感觉，毕竟是大三，决定该怎么走，联培？申请？保研？考研？工作？最后还是选择困难了。想着还是先面试看看吧，从最不情愿的方案和最容易的选择入手，准备多种备份方案。这个学期由于更换了新老师操作系统变成了最硬核（hardcore）的课。软件工程选择了腾讯的项目<a href="https://github.com/liziwl/faas"><strong>FaaS</strong></a>。面试就伴随炎热的日子，一个比一个刺激，紧张。华为、腾讯、微众、京东、头条、哔哩哔哩、摩根士丹利、源伞、微软、英伟达，亚马逊，都通过了笔试，一些通过了面试、一些最后拿到了offer。也许是紧张或是不熟悉游戏规则，一开始的出师不利给我了很大压力，让我低落挺长时间的，不过了解到也许是本身企业文化与自身不合适，也就不再在意这件事了。面试就是这样，一方面是了解企业文化的窗口，另一方面也是一种明确目标的不断思考：企业需要什么样的人才，在社会上什么技能是有用的，哪些在课堂或者学术界的东西是真正可以用到工业界里面的。最后，我选择去英伟达，操作系统也拿了A。</p><h2 id="暑假"><a href="#暑假" class="headerlink" title="暑假"></a>暑假</h2><p>略，基本上是会友，实习。顺便抽空在假期里参加了本校的夏令营，拿了个保底的机会。</p><h2 id="秋"><a href="#秋" class="headerlink" title="秋"></a>秋</h2><p>在实习的过程中，我慢慢改变了我的想法，也许本科毕业就去工作，对我来说并不合适。一是学的越多，越觉得自己知识的有限，大部分企业追求的稳定和易维护的业务功能，所以想推进或学习最前沿的技术，基本依赖自身的兴趣驱动。在学校多待几年，保持和工业界的联系，我觉得是不错的提升自我方式。NASAC 2019 上，周明辉老师貌似也有类似的想法，在工业界跌爬滚打才能找到工业界急需解决的痛点，并进行研究。实习签订了6个月的合同，所以到12月底结束。</p><p>由于一直学校的事情比较忙，考牌学习只能放在周末，弄了一年终于考到了驾照，基本上都是一次过。</p><p>潜水也开始开始捡回，希望之后能有时间把 OW 升级成 AOW，水下真是非常有趣的世界。</p><p>9月达成久石让音乐会的愿望，本来夏天在香港看见宣传海报，决定要去的，错过了购票，没想到来到了深圳，就绝对不能错过了。2017年错过了张学友在深圳的演唱会，2019年的香港最终场是绝对不能错过了，搭上了末班车是超级开心的事情。</p><p>广东省大学生游泳锦标赛，香港摄影节，DevFast SZ，T-day，参加不少活动，具体可以看看Instagram，这里就不记录了。</p>]]></content>
    
    
    <summary type="html">&lt;p&gt;这里应有BGM：《生活倒影》- 苏云莹。伴着歌声写下这些文字，也许读者听着同样的声音，能稍稍体会到我的感受。&lt;/p&gt;
&lt;!-- require APlayer --&gt;
&lt;link rel=&quot;stylesheet&quot; href=&quot;https://cdn.jsdelivr.net/npm/aplayer/dist/APlayer.min.css&quot;&gt;
&lt;script src=&quot;https://cdn.jsdelivr.net/npm/aplayer/dist/APlayer.min.js&quot;&gt;&lt;/script&gt;
&lt;!-- require MetingJS --&gt;
&lt;script src=&quot;https://cdn.jsdelivr.net/npm/meting@2/dist/Meting.min.js&quot;&gt;&lt;/script&gt;
 
&lt;p&gt;&lt;meting-js
    server=&quot;tencent&quot;
    type=&quot;song&quot;
    id=&quot;000QQyiE1BCET1&quot;&gt;&lt;br&gt;&lt;/meting-js&gt;&lt;/p&gt;
&lt;p&gt;2018年对我来说是完全地进入20+的年纪了。不说人生过了四分之一，也至少过去了五分之一，但是这对于刚告别2017的我来说，好像一切都还没准备好。&lt;/p&gt;</summary>
    
    
    
    <category term="随感" scheme="https://blog.liziwl.cn/categories/%E9%9A%8F%E6%84%9F/"/>
    
    
    <category term="总结" scheme="https://blog.liziwl.cn/tags/%E6%80%BB%E7%BB%93/"/>
    
  </entry>
  
  <entry>
    <title>Ubuntu 16.04 CUDA 安装</title>
    <link href="https://blog.liziwl.cn/2018/08/04/cuda/"/>
    <id>https://blog.liziwl.cn/2018/08/04/cuda/</id>
    <published>2018-08-04T07:15:38.000Z</published>
    <updated>2025-10-12T11:24:49.202Z</updated>
    
    <content type="html"><![CDATA[<h1 id="环境"><a href="#环境" class="headerlink" title="环境"></a>环境</h1><ul><li>Ubuntu 16.04 LTS</li><li>CUDA 9.2 <a href="https://developer.nvidia.com/cuda-toolkit">官网</a> 选择 runfile(local)版本</li><li>Anaconda Python3.6 <a href="https://www.anaconda.com/download/">官网</a></li></ul><span id="more"></span><h1 id="安装"><a href="#安装" class="headerlink" title="安装"></a>安装</h1><h2 id="安装CUDA"><a href="#安装CUDA" class="headerlink" title="安装CUDA"></a>安装CUDA</h2><p>要点：</p><ul><li>禁用图形界面服务</li><li>BIOS 调整至显卡显示，否则会出现循环登陆错误</li><li>不需要另外安装驱动，直接使用CUDA安装包内驱动，否则可能不兼容。</li></ul><ol><li><p>禁用图形服务</p> <figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="built_in">sudo</span> /etc/init.d/lightdm stop   <span class="comment"># 禁用图形服务</span></span><br><span class="line"><span class="built_in">sudo</span> <span class="built_in">rm</span> ~/.Xauthority           <span class="comment"># 删除X11 配置文件</span></span><br></pre></td></tr></table></figure><p> 然后，切换至命令行模式操作。</p></li><li><p>安装一些必要依赖</p> <figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">sudo apt-get install freeglut3-dev build-essential libx11-dev libxmu-dev libxi-dev libgl1-mesa-glx libglu1-mesa libglu1-mesa-dev</span><br></pre></td></tr></table></figure></li><li><p>安装CUDA</p> <figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="built_in">sudo</span> sh cuda_9.2.148_396.37_linux.run</span><br></pre></td></tr></table></figure><p> 安装过程中所有提示选择YES，包括安装 NVIDIA 驱动。路径默认即可。</p></li><li><p>重启图形服务</p> <figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="built_in">sudo</span> /etc/init.d/lightdm restart</span><br><span class="line"><span class="built_in">sudo</span> reboot <span class="comment">#重启系统，使得设置生效。</span></span><br></pre></td></tr></table></figure></li></ol><h2 id="安装-Anaconda"><a href="#安装-Anaconda" class="headerlink" title="安装 Anaconda"></a>安装 Anaconda</h2><ol><li><p>运行安装脚本</p> <figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="built_in">sudo</span> sh Anaconda3-5.2.0-Linux-x86_64.sh</span><br></pre></td></tr></table></figure></li><li><p>设置用户权限，否则无法 pip 安装包</p> <figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="built_in">sudo</span> <span class="built_in">chown</span> -R xxx:yyy anaconda3/    <span class="comment"># 将 xxx，yyy更换为用户名和组名，一般情况xxx和yyy相同。</span></span><br><span class="line">pip install msgpack</span><br></pre></td></tr></table></figure></li></ol><h2 id="安装-Pytorch"><a href="#安装-Pytorch" class="headerlink" title="安装 Pytorch"></a>安装 Pytorch</h2><ul><li>可以创建新的个人虚拟环境，然后安装 Pytorch。或者直接在 conda 的 base 环境安装，这里省去自定义环境环节。</li></ul><ol><li><p>按照官网输入命令，输入时替换 pip3 为 pip。因为 conda 默认的 pip 就是 pip3。</p></li><li><p>测试环境，输入 <code>python</code> 打开交互命令行。输入以下命令，不报错就安装正确。</p> <figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">import</span> torch                <span class="comment"># 不报错，torch 安装正确</span></span><br><span class="line">torch.cuda.is_available()   </span><br><span class="line"><span class="comment"># Ture</span></span><br><span class="line"><span class="comment"># 返回以上字段，CUDA 和 torch 安装兼容，后面可以使用 GPU 进行学习。</span></span><br></pre></td></tr></table></figure></li></ol>]]></content>
    
    
    <summary type="html">&lt;h1 id=&quot;环境&quot;&gt;&lt;a href=&quot;#环境&quot; class=&quot;headerlink&quot; title=&quot;环境&quot;&gt;&lt;/a&gt;环境&lt;/h1&gt;&lt;ul&gt;
&lt;li&gt;Ubuntu 16.04 LTS&lt;/li&gt;
&lt;li&gt;CUDA 9.2 &lt;a href=&quot;https://developer.nvidia.com/cuda-toolkit&quot;&gt;官网&lt;/a&gt; 选择 runfile(local)版本&lt;/li&gt;
&lt;li&gt;Anaconda Python3.6 &lt;a href=&quot;https://www.anaconda.com/download/&quot;&gt;官网&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</summary>
    
    
    
    <category term="配置安装" scheme="https://blog.liziwl.cn/categories/%E9%85%8D%E7%BD%AE%E5%AE%89%E8%A3%85/"/>
    
    
    <category term="机器学习" scheme="https://blog.liziwl.cn/tags/%E6%9C%BA%E5%99%A8%E5%AD%A6%E4%B9%A0/"/>
    
    <category term="CUDA" scheme="https://blog.liziwl.cn/tags/CUDA/"/>
    
  </entry>
  
  <entry>
    <title>Ubuntu 安装 glfw 和 OpenGL</title>
    <link href="https://blog.liziwl.cn/2018/07/29/glfw/"/>
    <id>https://blog.liziwl.cn/2018/07/29/glfw/</id>
    <published>2018-07-29T03:33:06.000Z</published>
    <updated>2025-10-12T11:24:49.203Z</updated>
    
    <content type="html"><![CDATA[<p>Ubuntu 安装 glfw 和 OpenGL</p><span id="more"></span><h1 id="安装-glfw"><a href="#安装-glfw" class="headerlink" title="安装 glfw"></a>安装 glfw</h1><h2 id="下载源码，解压"><a href="#下载源码，解压" class="headerlink" title="下载源码，解压"></a>下载源码，解压</h2><p>在<a href="www.glfw.org">官网</a>下载最新源码 <code>glfw-x.x.x.zip</code></p><p>解压</p><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">unzip glfw-x.x.x.zip</span><br></pre></td></tr></table></figure><h2 id="编译安装"><a href="#编译安装" class="headerlink" title="编译安装"></a>编译安装</h2><ol><li><p>安装依赖库</p> <figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">sudo apt install build-essential cmake</span><br></pre></td></tr></table></figure></li><li><p>进入 glfw-x.x.x 目录，建立glfw-build子目录</p> <figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">sudo mkdir glfw-build</span><br></pre></td></tr></table></figure></li><li><p>进入glfw-build，使用cmake命令生成Makefile</p> <figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">sudo cmake ../</span><br></pre></td></tr></table></figure></li><li><p>make &amp;&amp; make install</p> <figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">sudo make</span><br><span class="line">sudo make install</span><br></pre></td></tr></table></figure></li><li><p>测试运行</p><p> 新建文件 <code>test.c</code></p> <figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;GLFW/glfw3.h&gt;</span></span></span><br><span class="line"></span><br><span class="line"><span class="type">int</span> <span class="title function_">main</span><span class="params">(<span class="type">void</span>)</span></span><br><span class="line">&#123;</span><br><span class="line">    GLFWwindow* window;</span><br><span class="line"></span><br><span class="line">    <span class="comment">/* Initialize the library */</span></span><br><span class="line">    <span class="keyword">if</span> (!glfwInit())</span><br><span class="line">        <span class="keyword">return</span> <span class="number">-1</span>;</span><br><span class="line"></span><br><span class="line">    <span class="comment">/* Create a windowed mode window and its OpenGL context */</span></span><br><span class="line">    window = glfwCreateWindow(<span class="number">640</span>, <span class="number">480</span>, <span class="string">&quot;Hello World&quot;</span>, <span class="literal">NULL</span>, <span class="literal">NULL</span>);</span><br><span class="line">    <span class="keyword">if</span> (!window)</span><br><span class="line">    &#123;</span><br><span class="line">        glfwTerminate();</span><br><span class="line">        <span class="keyword">return</span> <span class="number">-1</span>;</span><br><span class="line">    &#125;</span><br><span class="line"></span><br><span class="line">    <span class="comment">/* Make the window&#x27;s context current */</span></span><br><span class="line">    glfwMakeContextCurrent(window);</span><br><span class="line"></span><br><span class="line">    <span class="comment">/* Loop until the user closes the window */</span></span><br><span class="line">    <span class="keyword">while</span> (!glfwWindowShouldClose(window))</span><br><span class="line">    &#123;</span><br><span class="line">        <span class="comment">/* Render here */</span></span><br><span class="line">        glClear(GL_COLOR_BUFFER_BIT);</span><br><span class="line"></span><br><span class="line">        <span class="comment">/* Swap front and back buffers */</span></span><br><span class="line">        glfwSwapBuffers(window);</span><br><span class="line"></span><br><span class="line">        <span class="comment">/* Poll for and process events */</span></span><br><span class="line">        glfwPollEvents();</span><br><span class="line">    &#125;</span><br><span class="line"></span><br><span class="line">    glfwTerminate();</span><br><span class="line">    <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure></li><li><p>编译测试</p><ul><li>查看链接命令，每个输出结果连接起来。</li></ul> <figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line">pkg-config --static --libs glfw3</span><br><span class="line"><span class="comment"># -L/usr/local/lib -lglfw3 -lrt -lm -ldl -lXrandr -lXinerama -lXxf86vm -lXext -lXcursor -lXrender -lXfixes -lX11 -lpthread -lxcb -lXau -lXdmcp</span></span><br><span class="line">pkg-config --libs gl</span><br><span class="line"><span class="comment"># -lGL</span></span><br><span class="line"><span class="comment"># 另外还需链接：</span></span><br><span class="line"><span class="comment"># -lX11 -lm -lrt -ldl</span></span><br></pre></td></tr></table></figure><ul><li>组成编译语句</li></ul> <figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">gcc -o <span class="built_in">test</span> test.c -L/usr/local/lib -lglfw3 -lrt -lm -ldl -lXrandr -lXinerama -lXxf86vm -lXext -lXcursor -lXrender -lXfixes -lX11 -lpthread -lxcb -lXau -lXdmcp -lGL -lX11 -lm -lrt -ldl</span><br></pre></td></tr></table></figure></li></ol><h1 id="安装-OpenGL"><a href="#安装-OpenGL" class="headerlink" title="安装 OpenGL"></a>安装 OpenGL</h1><ol><li><p>一行全部安装：编译环境, OpenGLLibrary, OpenGLUtilities, OpenGLUtility Toolkit</p> <figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">sudo apt-get install build-essential libgl1-mesa-dev libglu1-mesa-dev freeglut3-dev</span><br></pre></td></tr></table></figure></li><li><p>此时openGL安装完毕,以下为测试阶段</p><p> 新建文件 <code>opengl.c</code></p> <figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;GL/glut.h&gt;</span></span></span><br><span class="line"></span><br><span class="line"><span class="type">void</span> <span class="title function_">init</span><span class="params">(<span class="type">void</span>)</span> &#123;</span><br><span class="line">    glClearColor(<span class="number">0.0</span>, <span class="number">0.0</span>, <span class="number">0.0</span>, <span class="number">0.0</span>);</span><br><span class="line">    glMatrixMode(GL_PROJECTION);</span><br><span class="line">    glOrtho(<span class="number">-5</span>, <span class="number">5</span>, <span class="number">-5</span>, <span class="number">5</span>, <span class="number">5</span>, <span class="number">15</span>);</span><br><span class="line">    glMatrixMode(GL_MODELVIEW);</span><br><span class="line">    gluLookAt(<span class="number">0</span>, <span class="number">0</span>, <span class="number">10</span>, <span class="number">0</span>, <span class="number">0</span>, <span class="number">0</span>, <span class="number">0</span>, <span class="number">1</span>, <span class="number">0</span>);</span><br><span class="line">    <span class="keyword">return</span>;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="type">void</span> <span class="title function_">display</span><span class="params">(<span class="type">void</span>)</span> &#123;</span><br><span class="line">    glClear(GL_COLOR_BUFFER_BIT);</span><br><span class="line">    glColor3f(<span class="number">1.0</span>, <span class="number">0</span>, <span class="number">0</span>);</span><br><span class="line">    glutWireTeapot(<span class="number">3</span>);</span><br><span class="line">    glFlush();</span><br><span class="line">    <span class="keyword">return</span>;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="type">int</span> <span class="title function_">main</span><span class="params">(<span class="type">int</span> argc, <span class="type">char</span> * argv[])</span> &#123;</span><br><span class="line">    glutInit( &amp; argc, argv);</span><br><span class="line">    glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE);</span><br><span class="line">    glutInitWindowPosition(<span class="number">0</span>, <span class="number">0</span>);</span><br><span class="line">    glutInitWindowSize(<span class="number">300</span>, <span class="number">300</span>);</span><br><span class="line">    glutCreateWindow(<span class="string">&quot;OpenGL 3D View&quot;</span>);</span><br><span class="line">    init();</span><br><span class="line">    glutDisplayFunc(display);</span><br><span class="line">    glutMainLoop();</span><br><span class="line">    <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure> <figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">gcc -o opengl opengl.c -lGL -lGLU -lglut    <span class="comment"># 编译</span></span><br><span class="line">./opengl                                    <span class="comment"># 之后执行</span></span><br></pre></td></tr></table></figure></li></ol><ul><li>正常的话能看到一个茶壶。</li></ul><p><img src="/post-img/opengl_pot.png" alt="茶壶"></p>]]></content>
    
    
    <summary type="html">&lt;p&gt;Ubuntu 安装 glfw 和 OpenGL&lt;/p&gt;</summary>
    
    
    
    <category term="配置安装" scheme="https://blog.liziwl.cn/categories/%E9%85%8D%E7%BD%AE%E5%AE%89%E8%A3%85/"/>
    
    
    <category term="C/CPP" scheme="https://blog.liziwl.cn/tags/C-CPP/"/>
    
  </entry>
  
  <entry>
    <title>Windows 下配置 TeXLive 和 VScode 的 $&#92;LaTeX$ 环境</title>
    <link href="https://blog.liziwl.cn/2018/07/18/texlive/"/>
    <id>https://blog.liziwl.cn/2018/07/18/texlive/</id>
    <published>2018-07-18T05:08:05.000Z</published>
    <updated>2025-10-12T11:24:49.204Z</updated>
    
    <content type="html"><![CDATA[<p>快速部署 $\LaTeX$ 环境。</p><span id="more"></span><h1 id="安装-TeXLive"><a href="#安装-TeXLive" class="headerlink" title="安装 TeXLive"></a>安装 TeXLive</h1><p>首先要安装 TeXLive ，推荐下载 TeXLive 的 ISO 镜像，因为在线安装下载过程会很慢。<br>境内教育网镜像：</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">华中科大：http://mirror.hust.edu.cn/CTAN/systems/texlive/post-img/texlive2018.iso</span><br><span class="line">清华：https://mirrors.tuna.tsinghua.edu.cn/CTAN/systems/texlive/post-img/texlive2018.iso</span><br><span class="line">中科大：https://mirrors.ustc.edu.cn/CTAN/systems/texlive/post-img/texlive2018.iso</span><br></pre></td></tr></table></figure><p>下载完成后，挂载镜像，执行 <code>install-tl-advanced.bat</code> 开始安装。安装除了路径自定义以外，其他默认即可。</p><p>安装完确认，环境变量已经配置好。在高级系统设置的环境变量页面中，系统变量里面找到 <code>PATH</code>，并在末尾添加“<code>C:\texlive\bin\win32</code>”（在本例中路径为 <code>C:\texlive\</code> ，请根据实际情况自行更换路径。效果以打开命令提示符，能正常执行 <code>latex</code> 命令为准。</p><h1 id="配置-VScode"><a href="#配置-VScode" class="headerlink" title="配置 VScode"></a>配置 VScode</h1><ol><li><p>安装 LaTeX Workshop 插件</p></li><li><p>在 Perferences -&gt; Settings 里面添加 <code>xelatex</code> 编译语句</p> <figure class="highlight json"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br></pre></td><td class="code"><pre><span class="line"><span class="punctuation">&#123;</span></span><br><span class="line"><span class="attr">&quot;latex-workshop.latex.recipes&quot;</span><span class="punctuation">:</span> <span class="punctuation">[</span></span><br><span class="line">        <span class="punctuation">&#123;</span></span><br><span class="line">            <span class="attr">&quot;name&quot;</span><span class="punctuation">:</span> <span class="string">&quot;xelatex&quot;</span><span class="punctuation">,</span></span><br><span class="line">            <span class="attr">&quot;tools&quot;</span><span class="punctuation">:</span> <span class="punctuation">[</span></span><br><span class="line">            <span class="string">&quot;xelatex&quot;</span></span><br><span class="line">                        <span class="punctuation">]</span></span><br><span class="line">                <span class="punctuation">&#125;</span><span class="punctuation">,</span></span><br><span class="line">        <span class="punctuation">&#123;</span></span><br><span class="line">            <span class="attr">&quot;name&quot;</span><span class="punctuation">:</span> <span class="string">&quot;latexmk&quot;</span><span class="punctuation">,</span></span><br><span class="line">            <span class="attr">&quot;tools&quot;</span><span class="punctuation">:</span> <span class="punctuation">[</span></span><br><span class="line">                <span class="string">&quot;latexmk&quot;</span></span><br><span class="line">            <span class="punctuation">]</span></span><br><span class="line">        <span class="punctuation">&#125;</span><span class="punctuation">,</span></span><br><span class="line">        <span class="punctuation">&#123;</span></span><br><span class="line">            <span class="attr">&quot;name&quot;</span><span class="punctuation">:</span> <span class="string">&quot;pdflatex -&gt; bibtex -&gt; pdflatex*2&quot;</span><span class="punctuation">,</span></span><br><span class="line">            <span class="attr">&quot;tools&quot;</span><span class="punctuation">:</span> <span class="punctuation">[</span></span><br><span class="line">                <span class="string">&quot;pdflatex&quot;</span><span class="punctuation">,</span></span><br><span class="line">                <span class="string">&quot;bibtex&quot;</span><span class="punctuation">,</span></span><br><span class="line">                <span class="string">&quot;pdflatex&quot;</span><span class="punctuation">,</span></span><br><span class="line">                <span class="string">&quot;pdflatex&quot;</span></span><br><span class="line">            <span class="punctuation">]</span></span><br><span class="line">        <span class="punctuation">&#125;</span></span><br><span class="line">    <span class="punctuation">]</span><span class="punctuation">,</span></span><br><span class="line">    <span class="attr">&quot;latex-workshop.latex.tools&quot;</span><span class="punctuation">:</span> <span class="punctuation">[</span></span><br><span class="line">        <span class="punctuation">&#123;</span></span><br><span class="line">            <span class="attr">&quot;name&quot;</span><span class="punctuation">:</span> <span class="string">&quot;xelatex&quot;</span><span class="punctuation">,</span></span><br><span class="line">            <span class="attr">&quot;command&quot;</span><span class="punctuation">:</span> <span class="string">&quot;xelatex&quot;</span><span class="punctuation">,</span></span><br><span class="line">            <span class="attr">&quot;args&quot;</span><span class="punctuation">:</span> <span class="punctuation">[</span></span><br><span class="line">            <span class="string">&quot;-synctex=1&quot;</span><span class="punctuation">,</span></span><br><span class="line">            <span class="string">&quot;-interaction=nonstopmode&quot;</span><span class="punctuation">,</span></span><br><span class="line">            <span class="string">&quot;-file-line-error&quot;</span><span class="punctuation">,</span></span><br><span class="line">            <span class="string">&quot;%DOC%&quot;</span></span><br><span class="line">            <span class="punctuation">]</span></span><br><span class="line">        <span class="punctuation">&#125;</span><span class="punctuation">,</span></span><br><span class="line">        <span class="punctuation">&#123;</span></span><br><span class="line">            <span class="attr">&quot;name&quot;</span><span class="punctuation">:</span> <span class="string">&quot;latexmk&quot;</span><span class="punctuation">,</span></span><br><span class="line">            <span class="attr">&quot;command&quot;</span><span class="punctuation">:</span> <span class="string">&quot;latexmk&quot;</span><span class="punctuation">,</span></span><br><span class="line">            <span class="attr">&quot;args&quot;</span><span class="punctuation">:</span> <span class="punctuation">[</span></span><br><span class="line">                <span class="string">&quot;-synctex=1&quot;</span><span class="punctuation">,</span></span><br><span class="line">                <span class="string">&quot;-interaction=nonstopmode&quot;</span><span class="punctuation">,</span></span><br><span class="line">                <span class="string">&quot;-file-line-error&quot;</span><span class="punctuation">,</span></span><br><span class="line">                <span class="string">&quot;-pdf&quot;</span><span class="punctuation">,</span></span><br><span class="line">                <span class="string">&quot;%DOC%&quot;</span></span><br><span class="line">            <span class="punctuation">]</span></span><br><span class="line">        <span class="punctuation">&#125;</span><span class="punctuation">,</span></span><br><span class="line">        <span class="punctuation">&#123;</span></span><br><span class="line">            <span class="attr">&quot;name&quot;</span><span class="punctuation">:</span> <span class="string">&quot;pdflatex&quot;</span><span class="punctuation">,</span></span><br><span class="line">            <span class="attr">&quot;command&quot;</span><span class="punctuation">:</span> <span class="string">&quot;pdflatex&quot;</span><span class="punctuation">,</span></span><br><span class="line">            <span class="attr">&quot;args&quot;</span><span class="punctuation">:</span> <span class="punctuation">[</span></span><br><span class="line">                <span class="string">&quot;-synctex=1&quot;</span><span class="punctuation">,</span></span><br><span class="line">                <span class="string">&quot;-interaction=nonstopmode&quot;</span><span class="punctuation">,</span></span><br><span class="line">                <span class="string">&quot;-file-line-error&quot;</span><span class="punctuation">,</span></span><br><span class="line">                <span class="string">&quot;%DOC%&quot;</span></span><br><span class="line">            <span class="punctuation">]</span></span><br><span class="line">        <span class="punctuation">&#125;</span><span class="punctuation">,</span></span><br><span class="line">        <span class="punctuation">&#123;</span></span><br><span class="line">            <span class="attr">&quot;name&quot;</span><span class="punctuation">:</span> <span class="string">&quot;bibtex&quot;</span><span class="punctuation">,</span></span><br><span class="line">            <span class="attr">&quot;command&quot;</span><span class="punctuation">:</span> <span class="string">&quot;bibtex&quot;</span><span class="punctuation">,</span></span><br><span class="line">            <span class="attr">&quot;args&quot;</span><span class="punctuation">:</span> <span class="punctuation">[</span></span><br><span class="line">                <span class="string">&quot;%DOCFILE%&quot;</span></span><br><span class="line">            <span class="punctuation">]</span></span><br><span class="line">        <span class="punctuation">&#125;</span></span><br><span class="line">    <span class="punctuation">]</span><span class="punctuation">,</span></span><br><span class="line"><span class="punctuation">&#125;</span></span><br></pre></td></tr></table></figure></li><li><p>设置完成，即可使用。</p></li></ol><p><code>ctrl + s</code> 保存后 VScode 自动编译，右侧可以显示 pdf 非常方便。</p><p><strong>更多快捷键可以 <code>F1</code> 查看。</strong></p>]]></content>
    
    
    <summary type="html">&lt;p&gt;快速部署 $&#92;LaTeX$ 环境。&lt;/p&gt;</summary>
    
    
    
    <category term="配置安装" scheme="https://blog.liziwl.cn/categories/%E9%85%8D%E7%BD%AE%E5%AE%89%E8%A3%85/"/>
    
    
    <category term="TeXLive" scheme="https://blog.liziwl.cn/tags/TeXLive/"/>
    
  </entry>
  
  <entry>
    <title>FaaS</title>
    <link href="https://blog.liziwl.cn/2018/06/04/faas/"/>
    <id>https://blog.liziwl.cn/2018/06/04/faas/</id>
    <published>2018-06-04T06:16:31.000Z</published>
    <updated>2025-10-12T11:24:49.203Z</updated>
    
    <content type="html"><![CDATA[<p>FaaS 是Function as a service (FaaS)的简写，这是大三软件工程课上与腾讯的导师合作的课程实践项目。</p><h1 id="FaaS-DEMO页面"><a href="#FaaS-DEMO页面" class="headerlink" title="FaaS DEMO页面"></a>FaaS DEMO页面</h1><p><strong>展示页面已下线</strong></p><p><a href="http://self.sustech.pub/faas/simple.html">http://self.sustech.pub/faas/simple.html</a></p><h1 id="项目仓库"><a href="#项目仓库" class="headerlink" title="项目仓库"></a>项目仓库</h1><p><a href="https://github.com/liziwl/faas">https://github.com/liziwl/faas</a></p>]]></content>
    
    
      
      
    <summary type="html">&lt;p&gt;FaaS 是Function as a service (FaaS)的简写，这是大三软件工程课上与腾讯的导师合作的课程实践项目。&lt;/p&gt;
&lt;h1 id=&quot;FaaS-DEMO页面&quot;&gt;&lt;a href=&quot;#FaaS-DEMO页面&quot; class=&quot;headerlink&quot; title</summary>
      
    
    
    
    <category term="链接" scheme="https://blog.liziwl.cn/categories/%E9%93%BE%E6%8E%A5/"/>
    
    
  </entry>
  
  <entry>
    <title>Data Mining 笔记-1 社交网络图挖掘</title>
    <link href="https://blog.liziwl.cn/2018/06/02/DM-notes1/"/>
    <id>https://blog.liziwl.cn/2018/06/02/DM-notes1/</id>
    <published>2018-06-02T03:10:13.000Z</published>
    <updated>2025-10-12T11:24:49.202Z</updated>
    
    <content type="html"><![CDATA[<h1 id="图的邻居性质"><a href="#图的邻居性质" class="headerlink" title="图的邻居性质"></a>图的邻居性质</h1><span id="more"></span><h2 id="有向图和邻居"><a href="#有向图和邻居" class="headerlink" title="有向图和邻居"></a>有向图和邻居</h2><ol><li>有向图（directed graph）：是指一个包含节点集合和有向边集合的图，每条有向边写成$u → v$，其中u为有向边的源节点（source），$v$为目标节点（target）。所有的无向图都可以用有向图来表示，无向边$(u,v)$可表示为$u → v$和$v → u$。</li><li>路径（path）：值一个节点的序列$v0, v1, …, vk$，其中对于每个$i&#x3D;1, 2, …, k-1$，都存在有向边$vi → v_{i+1}$。该路径的长度（length）为$k$，即该路径上的有向边数目。长度为k的路径上有$k+1$个节点，因此节点到自己的路径的长度为0。</li><li>节点$v$的$d$径内邻居（neighborhood of radius）：是指$v$在$d$步路径之内能达到的节点$u$的集合，记为$N(v,d)$。如果$V$是一个节点集合，那么$N(V,d)$是指$V$中节点在$d$步路径之内能达到的节点集合。</li><li>节点v的邻居描述（neighborhood profile）：是其邻居$N(v,1), N(v,2), …$的大小构成的序列$∣N(v,1)∣, ∣N(v,2)∣, …$。这里不包含$N(v,0)$，因为其大小永远为1。邻居描述可以反映哪个节点（在每个相等路径长度上，该节点的邻居大小总是大于或等于其他节点）更接近网络中心。</li></ol><h2 id="图的直径"><a href="#图的直径" class="headerlink" title="图的直径"></a>图的直径</h2><ol><li><p>强连通图（strongly connected）：任一节点到其他节点之间都存在路径。</p></li><li><p>直径（diameter）：满足下列条件的最小整数$d$：对于图中任何两个节点$u$和$v$，都存在一条从$u$到$v$的长度小于或等于$d$的路径。（仅对无向图、 强连通图有意义）</p><p> 可以通过不断增加径长计算图的邻居大小来得到图的直径，直到邻居中不能再增加节点为止。即对于每个节点$v$，找到那个使得$∣N(v,d)∣ &#x3D; ∣N(v,d+1)∣$成立的最小$d$。这个$d$是从$v$到其他任意可达节点的最短路径长度的紧致上界（tight upper bound），称为$d(v)$。</p><p> 如果图是强连通的，则图的直径为$maxv(d(v))$。</p></li></ol><h2 id="传递闭包和可达性"><a href="#传递闭包和可达性" class="headerlink" title="传递闭包和可达性"></a>传递闭包和可达性</h2><ol><li>传递闭包（transitive closure）：是指节点对$(u,v)$的集合，其中从$u$到$v$存在一条长度大于等于0的路径，可写成$path(u,v)$。</li><li>节点间的可达性（reachability）：如果$path(u,v)$为真，则称$u$可到达（reach）$v$。</li><li>计算传递闭包的问题：就是寻找$path(u,v)$为真的所有节点对$(u,v)$。</li><li>可达性问题：给定图中节点$u$，寻找所有满足条件$path(u,v)$为真的$v$。</li></ol><p>参考链接：<a href="https://blog.csdn.net/liveway6/article/details/78352260">link</a></p>]]></content>
    
    
    <summary type="html">&lt;h1 id=&quot;图的邻居性质&quot;&gt;&lt;a href=&quot;#图的邻居性质&quot; class=&quot;headerlink&quot; title=&quot;图的邻居性质&quot;&gt;&lt;/a&gt;图的邻居性质&lt;/h1&gt;</summary>
    
    
    
    <category term="编程笔记" scheme="https://blog.liziwl.cn/categories/%E7%BC%96%E7%A8%8B%E7%AC%94%E8%AE%B0/"/>
    
    
    <category term="数据挖掘" scheme="https://blog.liziwl.cn/tags/%E6%95%B0%E6%8D%AE%E6%8C%96%E6%8E%98/"/>
    
  </entry>
  
  <entry>
    <title>git-解决fork仓库和源仓库同步问题</title>
    <link href="https://blog.liziwl.cn/2018/05/02/git-notes2/"/>
    <id>https://blog.liziwl.cn/2018/05/02/git-notes2/</id>
    <published>2018-05-02T11:08:39.000Z</published>
    <updated>2025-10-12T11:24:49.203Z</updated>
    
    <content type="html"><![CDATA[<p>项目 fetch 到本地，通过命令行的方式 merge<br>提示：跟上游仓库同步代码之前，必须配置过 remote，指向<a href="https://help.github.com/articles/configuring-a-remote-for-a-fork/">上游仓库</a>。</p><span id="more"></span><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">git remote add upstream https://github.com/ORIGINAL_OWNER/ORIGINAL_REPOSITORY.git</span><br></pre></td></tr></table></figure><h2 id="合并仓库"><a href="#合并仓库" class="headerlink" title="合并仓库"></a>合并仓库</h2><ol><li><p>打开命令行工具</p></li><li><p>切换当前工作路径至你的本地工程</p></li><li><p>从上游仓库获取(fetch)到分支，及相关的提交信息，它们将被保存在本地的 <code>upstream/master</code> 分支 </p> <figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line">git fetch upstream</span><br><span class="line"><span class="comment"># remote: Counting objects: 75, done.</span></span><br><span class="line"><span class="comment"># remote: Compressing objects: 100% (53/53), done.</span></span><br><span class="line"><span class="comment"># remote: Total 62 (delta 27), reused 44 (delta 9)</span></span><br><span class="line"><span class="comment"># Unpacking objects: 100% (62/62), done.</span></span><br><span class="line"><span class="comment"># From https://github.com/ORIGINAL_OWNER/ORIGINAL_REPOSITORY</span></span><br><span class="line"><span class="comment">#  * [new branch]      master     -&gt; upstream/master</span></span><br></pre></td></tr></table></figure></li><li><p>切换到本地的 <code>master</code> 分支 </p> <figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">git checkout master</span><br><span class="line"><span class="comment"># Switched to branch &#x27;master&#x27;</span></span><br></pre></td></tr></table></figure></li><li><p>把 <code>upstream/master</code> 分支合并到本地的 <code>master</code> 分支，本地的 <code>master</code> 分支便跟上游仓库保持同步了，并且没有丢失你本地的修改。</p> <figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line">git merge upstream/master</span><br><span class="line"><span class="comment"># Updating a422352..5fdff0f</span></span><br><span class="line"><span class="comment"># Fast-forward</span></span><br><span class="line"><span class="comment">#  README                    |    9 -------</span></span><br><span class="line"><span class="comment">#  README.md                 |    7 ++++++</span></span><br><span class="line"><span class="comment">#  2 files changed, 7 insertions(+), 9 deletions(-)</span></span><br><span class="line"><span class="comment">#  delete mode 100644 README</span></span><br><span class="line"><span class="comment">#  create mode 100644 README.md</span></span><br></pre></td></tr></table></figure></li></ol><p>提示：同步后的代码仅仅是保存在本地仓库，记得 <code>push</code> 到 Github 哟。</p>]]></content>
    
    
    <summary type="html">&lt;p&gt;项目 fetch 到本地，通过命令行的方式 merge&lt;br&gt;提示：跟上游仓库同步代码之前，必须配置过 remote，指向&lt;a href=&quot;https://help.github.com/articles/configuring-a-remote-for-a-fork/&quot;&gt;上游仓库&lt;/a&gt;。&lt;/p&gt;</summary>
    
    
    
    <category term="编程笔记" scheme="https://blog.liziwl.cn/categories/%E7%BC%96%E7%A8%8B%E7%AC%94%E8%AE%B0/"/>
    
    
    <category term="git" scheme="https://blog.liziwl.cn/tags/git/"/>
    
  </entry>
  
  <entry>
    <title>解决gazebo启动错误</title>
    <link href="https://blog.liziwl.cn/2018/03/19/fix_gazebo/"/>
    <id>https://blog.liziwl.cn/2018/03/19/fix_gazebo/</id>
    <published>2018-03-19T10:12:29.000Z</published>
    <updated>2025-10-12T11:24:49.203Z</updated>
    
    <content type="html"><![CDATA[<p>参考链接: <a href="https://answers.ros.org/question/199401/problem-with-indigo-and-gazebo-22/">link</a></p><span id="more"></span><h1 id="错误信息"><a href="#错误信息" class="headerlink" title="错误信息"></a>错误信息</h1><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br></pre></td><td class="code"><pre><span class="line">~$ gazebo</span><br><span class="line">Gazebo multi-robot simulator, version 2.2.3</span><br><span class="line">Copyright (C) 2012-2014 Open Source Robotics Foundation.</span><br><span class="line">Released under the Apache 2 License.</span><br><span class="line">http://gazebosim.org</span><br><span class="line"></span><br><span class="line">Msg Waiting <span class="keyword">for</span> master</span><br><span class="line">Gazebo multi-robot simulator, version 2.2.3</span><br><span class="line">Copyright (C) 2012-2014 Open Source Robotics Foundation.</span><br><span class="line">Released under the Apache 2 License.</span><br><span class="line">http://gazebosim.org</span><br><span class="line"></span><br><span class="line">Msg Waiting <span class="keyword">for</span> master</span><br><span class="line">Msg Connected to gazebo master @ http://127.0.0.1:11345</span><br><span class="line">Msg Publicized address: 192.168.1.152</span><br><span class="line">Msg Connected to gazebo master @ http://127.0.0.1:11345</span><br><span class="line">Msg Publicized address: 192.168.1.152</span><br><span class="line">Warning [ModelDatabase.cc:334] Getting models from[http://gazebosim.org/models/]. This may take a few seconds.</span><br><span class="line">Warning [gazebo.cc:215] Waited 1seconds <span class="keyword">for</span> namespaces.</span><br><span class="line">Warning [gazebo.cc:215] Waited 1seconds <span class="keyword">for</span> namespaces.</span><br><span class="line">Warning [gazebo.cc:215] Waited 1seconds <span class="keyword">for</span> namespaces.</span><br><span class="line">Warning [gazebo.cc:215] Waited 1seconds <span class="keyword">for</span> namespaces.</span><br><span class="line">Warning [gazebo.cc:215] Waited 1seconds <span class="keyword">for</span> namespaces.</span><br><span class="line">Warning [gazebo.cc:215] Waited 1seconds <span class="keyword">for</span> namespaces.</span><br><span class="line">Warning [gazebo.cc:215] Waited 1seconds <span class="keyword">for</span> namespaces.</span><br><span class="line">Warning [gazebo.cc:215] Waited 1seconds <span class="keyword">for</span> namespaces.</span><br><span class="line">Warning [gazebo.cc:215] Waited 1seconds <span class="keyword">for</span> namespaces.</span><br><span class="line">Warning [gazebo.cc:215] Waited 1seconds <span class="keyword">for</span> namespaces.</span><br><span class="line">Error [gazebo.cc:220] Waited 11 seconds <span class="keyword">for</span> namespaces. Giving up.</span><br></pre></td></tr></table></figure><h1 id="原因"><a href="#原因" class="headerlink" title="原因"></a>原因</h1><p>Gazebo try to collect models from <a href="http://gazebosim.org/models">http://gazebosim.org/models</a> but there is something wrong.</p><p>OR the folder <code>~/.gazebo/models</code> does not exist and Gazebo simulator can not start. </p><h1 id="解决方式"><a href="#解决方式" class="headerlink" title="解决方式"></a>解决方式</h1><p>运行</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">wget -r -R &quot;index\.html*&quot; &quot;http://models.gazebosim.org&quot; --reject=tar.gz</span><br></pre></td></tr></table></figure><p>Got all models from gazebosim and copy them into <code>~/.gazebo/models</code> folder and everything will be ok.</p>]]></content>
    
    
    <summary type="html">&lt;p&gt;参考链接: &lt;a href=&quot;https://answers.ros.org/question/199401/problem-with-indigo-and-gazebo-22/&quot;&gt;link&lt;/a&gt;&lt;/p&gt;</summary>
    
    
    
    <category term="配置安装" scheme="https://blog.liziwl.cn/categories/%E9%85%8D%E7%BD%AE%E5%AE%89%E8%A3%85/"/>
    
    
    <category term="ROS" scheme="https://blog.liziwl.cn/tags/ROS/"/>
    
  </entry>
  
  <entry>
    <title>Ubuntu 16.04 安装 hadoop</title>
    <link href="https://blog.liziwl.cn/2018/03/16/install-hadoop/"/>
    <id>https://blog.liziwl.cn/2018/03/16/install-hadoop/</id>
    <published>2018-03-16T03:44:52.000Z</published>
    <updated>2025-10-12T11:24:49.203Z</updated>
    
    <content type="html"><![CDATA[<p>Copy line by line and paste to an interactive shell</p><span id="more"></span><h1 id="Create-a-new-user-named-hadoop"><a href="#Create-a-new-user-named-hadoop" class="headerlink" title="Create a new user named hadoop"></a>Create a new user named hadoop</h1><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="built_in">sudo</span> useradd -m hadoop -s /bin/bash     <span class="comment"># 创建hadoop用户</span></span><br><span class="line"><span class="built_in">sudo</span> passwd hadoop          <span class="comment"># 修改密码</span></span><br><span class="line"><span class="built_in">sudo</span> adduser hadoop <span class="built_in">sudo</span>    <span class="comment"># 增加管理员权限</span></span><br></pre></td></tr></table></figure><h1 id="Log-out-current-user-log-in-hadoop"><a href="#Log-out-current-user-log-in-hadoop" class="headerlink" title="Log out current user, log in hadoop"></a>Log out current user, log in hadoop</h1><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="built_in">sudo</span> apt-get update         <span class="comment"># Update system</span></span><br></pre></td></tr></table></figure><h1 id="Install-ssh"><a href="#Install-ssh" class="headerlink" title="Install ssh"></a>Install ssh</h1><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line"><span class="built_in">sudo</span> apt-get install openssh-server</span><br><span class="line"><span class="built_in">cd</span> ~</span><br><span class="line"><span class="built_in">mkdir</span> .ssh                  <span class="comment"># 可能该文件已存在，不影响</span></span><br><span class="line"><span class="built_in">cd</span> ~/.ssh/</span><br><span class="line">ssh-keygen -t rsa           <span class="comment"># 会有提示，都按回车就可以</span></span><br><span class="line"><span class="built_in">cat</span> id_rsa.pub &gt;&gt; authorized_keys  <span class="comment"># 加入授权</span></span><br></pre></td></tr></table></figure><h1 id="Install-Java"><a href="#Install-Java" class="headerlink" title="Install Java"></a>Install Java</h1><p>参照这个安装Java JDK，推荐安装Oracle </p><blockquote><p><a href="https://www.digitalocean.com/community/tutorials/how-to-install-java-with-apt-get-on-ubuntu-16-04">https://www.digitalocean.com/community/tutorials/how-to-install-java-with-apt-get-on-ubuntu-16-04</a></p></blockquote><ol><li><p>安装openjdk</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="built_in">sudo</span> apt-get update <span class="comment"># 更新软件包列表</span></span><br><span class="line"><span class="built_in">sudo</span> apt-get install openjdk-8-jdk</span><br></pre></td></tr></table></figure></li><li><p>安装oracle Java JDK</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="built_in">sudo</span> add-apt-repository ppa:webupd8team/java <span class="comment"># 添加仓库源</span></span><br><span class="line"><span class="built_in">sudo</span> apt-get update <span class="comment"># 更新软件包列表</span></span><br><span class="line"><span class="built_in">sudo</span> apt-get install oracle-java8-installer</span><br></pre></td></tr></table></figure></li></ol><p>已经装了多种Java版本，可以选择更换</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="built_in">sudo</span> update-alternatives --config java</span><br></pre></td></tr></table></figure><h1 id="Download-Install-Hadoop"><a href="#Download-Install-Hadoop" class="headerlink" title="Download &amp; Install Hadoop"></a>Download &amp; Install Hadoop</h1><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">wget https://mirrors.tuna.tsinghua.edu.cn/apache/hadoop/common/hadoop-3.0.0/hadoop-3.0.0.tar.gz -P ~/Downloads</span><br><span class="line"><span class="built_in">sudo</span> tar zxvf ~/Downloads/hadoop-3.0.0.tar.gz -C /usr/local</span><br><span class="line"><span class="built_in">sudo</span> <span class="built_in">mv</span> /usr/local/hadoop-3.0.0 /usr/local/hadoop</span><br><span class="line"><span class="built_in">sudo</span> <span class="built_in">chown</span> -R hadoop /usr/local/hadoop</span><br></pre></td></tr></table></figure><h1 id="Configure-hadoop"><a href="#Configure-hadoop" class="headerlink" title="Configure hadoop"></a>Configure hadoop</h1><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="built_in">echo</span> <span class="string">&quot;export JAVA_HOME=<span class="subst">$(readlink -f $(which java)</span> | sed &quot;</span>s:bin/java::<span class="string">&quot;)&quot;</span> &gt;&gt; /usr/local/hadoop/etc/hadoop/hadoop-env.sh</span><br></pre></td></tr></table></figure><h2 id="Configure-core-site-xml"><a href="#Configure-core-site-xml" class="headerlink" title="Configure core-site.xml"></a>Configure core-site.xml</h2><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="built_in">sudo</span> vim /usr/local/hadoop/etc/hadoop/core-site.xml</span><br></pre></td></tr></table></figure><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br></pre></td><td class="code"><pre><span class="line">&lt;configuration&gt;</span><br><span class="line">    &lt;property&gt;</span><br><span class="line">        &lt;name&gt;hadoop.tmp.dir&lt;/name&gt;</span><br><span class="line">        &lt;value&gt;file:/usr/local/hadoop/tmp&lt;/value&gt;</span><br><span class="line">        &lt;description&gt;Abase for other temporary directories.&lt;/description&gt;</span><br><span class="line">    &lt;/property&gt;</span><br><span class="line">    &lt;property&gt;</span><br><span class="line">        &lt;name&gt;fs.defaultFS&lt;/name&gt;</span><br><span class="line">        &lt;value&gt;hdfs://localhost:9000&lt;/value&gt;</span><br><span class="line">    &lt;/property&gt;</span><br><span class="line">&lt;/configuration&gt;</span><br></pre></td></tr></table></figure><h2 id="Configure-hdfs-site-xml"><a href="#Configure-hdfs-site-xml" class="headerlink" title="Configure hdfs-site.xml"></a>Configure hdfs-site.xml</h2><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="built_in">sudo</span> vim /usr/local/hadoop/etc/hadoop/hdfs-site.xml</span><br></pre></td></tr></table></figure><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br></pre></td><td class="code"><pre><span class="line">&lt;configuration&gt;</span><br><span class="line">    &lt;property&gt;</span><br><span class="line">        &lt;name&gt;dfs.replication&lt;/name&gt;</span><br><span class="line">        &lt;value&gt;1&lt;/value&gt;</span><br><span class="line">    &lt;/property&gt;</span><br><span class="line">    &lt;property&gt;</span><br><span class="line">        &lt;name&gt;dfs.namenode.name.dir&lt;/name&gt;</span><br><span class="line">        &lt;value&gt;file:/usr/local/hadoop/tmp/dfs/name&lt;/value&gt;</span><br><span class="line">    &lt;/property&gt;</span><br><span class="line">    &lt;property&gt;</span><br><span class="line">        &lt;name&gt;dfs.datanode.data.dir&lt;/name&gt;</span><br><span class="line">        &lt;value&gt;file:/usr/local/hadoop/tmp/dfs/data&lt;/value&gt;</span><br><span class="line">    &lt;/property&gt;</span><br><span class="line">&lt;/configuration&gt;</span><br></pre></td></tr></table></figure><h1 id="Configure-environment"><a href="#Configure-environment" class="headerlink" title="Configure environment"></a>Configure environment</h1><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line"><span class="built_in">echo</span> <span class="string">&quot;</span></span><br><span class="line"><span class="string">export JAVA_HOME=<span class="subst">$(readlink -f $(which java)</span> | sed &quot;</span>s:/jre/bin/java::<span class="string">&quot;)</span></span><br><span class="line"><span class="string">export PATH=\$PATH:\$JAVA_HOME/bin</span></span><br><span class="line"><span class="string">export PATH=\$PATH:\$HADOOP_HOME/bin</span></span><br><span class="line"><span class="string">export HADOOP_HOME=/usr/local/hadoop</span></span><br><span class="line"><span class="string">export HADOOP_CLASSPATH=<span class="variable">$&#123;JAVA_HOME&#125;</span>/lib/tools.jar</span></span><br><span class="line"><span class="string">&quot;</span> &gt;&gt; ~/.bashrc</span><br><span class="line"><span class="built_in">source</span> ~/.bashrc</span><br></pre></td></tr></table></figure><h1 id="start-hadoop"><a href="#start-hadoop" class="headerlink" title="start hadoop"></a>start hadoop</h1><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line"><span class="built_in">cd</span> /usr/local/hadoop</span><br><span class="line">bin/hdfs namenode -format      <span class="comment"># namenode 格式化</span></span><br><span class="line">sbin/start-dfs.sh              <span class="comment"># 开启守护进程</span></span><br><span class="line">jps                             <span class="comment"># 判断是否启动成功</span></span><br></pre></td></tr></table></figure><blockquote><p>注：勿反复使用hdfs namenode -format 命令 ,如果修改配置后选择N</p><p>如需关闭hadoop 进程则可以使用 stop-dfs.sh，第二次启动直接运行 start-dfs.sh</p></blockquote><h1 id="Test-hadoop"><a href="#Test-hadoop" class="headerlink" title="Test hadoop"></a>Test hadoop</h1><p>Save source code from the url, as WordCount.java in <code>/usr/local/hadoop</code>.</p><blockquote><p>WordCount1.0 ver</p><p><a href="http://hadoop.apache.org/docs/current/hadoop-mapreduce-client/hadoop-mapreduce-client-core/MapReduceTutorial.html">http://hadoop.apache.org/docs/current/hadoop-mapreduce-client/hadoop-mapreduce-client-core/MapReduceTutorial.html</a></p></blockquote><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br></pre></td><td class="code"><pre><span class="line"><span class="built_in">cd</span> /usr/local/hadoop</span><br><span class="line">bin/hadoop com.sun.tools.javac.Main WordCount.java</span><br><span class="line">jar -cvf wordcount.jar *.class</span><br><span class="line"></span><br><span class="line">bin/hadoop fs -<span class="built_in">mkdir</span> /input_wordcount</span><br><span class="line">bin/hadoop fs -put input/* /input_wordcount/ </span><br><span class="line"></span><br><span class="line">bin/hadoop fs -<span class="built_in">ls</span> /                     <span class="comment"># 查看文件</span></span><br><span class="line">bin/hadoop fs -<span class="built_in">ls</span> /input_wordcount          <span class="comment"># 查看file1 file2</span></span><br><span class="line">bin/hadoop fs -<span class="built_in">cat</span> /input_wordcount/file1   <span class="comment"># 打印文件</span></span><br><span class="line">bin/hadoop jar wordcount.jar WordCount /input_wordcount /output_wordcount   <span class="comment"># 进行运算</span></span><br><span class="line"></span><br><span class="line">bin/hadoop fs -<span class="built_in">ls</span> /output_wordcount</span><br><span class="line">bin/hadoop fs -<span class="built_in">cat</span> /output_wordcount/part-r-00000     <span class="comment"># 查看结果</span></span><br></pre></td></tr></table></figure>]]></content>
    
    
    <summary type="html">&lt;p&gt;Copy line by line and paste to an interactive shell&lt;/p&gt;</summary>
    
    
    
    <category term="配置安装" scheme="https://blog.liziwl.cn/categories/%E9%85%8D%E7%BD%AE%E5%AE%89%E8%A3%85/"/>
    
    
    <category term="hadoop" scheme="https://blog.liziwl.cn/tags/hadoop/"/>
    
  </entry>
  
</feed>
