<?xml version="1.0"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>orzFly » 简体中文</title>
    <link>https://orzfly.com/?lang=zh_CN</link>
    <atom:link href="https://orzfly.com/feed/zh_CN.xml" rel="self" type="application/rss+xml" />
    <description>His Memories from Here to There, with Fuzzy Ginkgo</description>
    <language>zh-cn</language>
    <pubDate>Fri, 07 Aug 2020 18:12:30 +0000</pubDate>
    <lastBuildDate>Fri, 07 Aug 2020 18:12:30 +0000</lastBuildDate>

    
    
      
          <item>
            <title>我的浏览器地址栏中的 A – Z（2017 秋）</title>
            <link>https://orzfly.com/html/my-browser-address-bar-2017-fall.html?lang=zh_CN</link>
            <guid isPermaLink="true">https://orzfly.com/html/my-browser-address-bar-2017-fall.html?lang=zh_CN</guid>
            <pubDate>Fri, 08 Sep 2017 00:00:00 +0000</pubDate>
            <author>Yeechan Lu</author>
            <description><![CDATA[<p>前略，天国的 <a href="/html/my-browser-address-bar-2017.html">2017 酱</a>。时光荏苒，又是半年过去。从<strong>镇江</strong>搬到<strong>上海</strong>，从<strong>学校</strong>进入<strong>公司</strong>，从<a href="https://orzfly.com/html/oh-my-2014.html">淋了馄饨汤以至于两三年断电时间不超过二十分钟的</a> <code>MacBookAir6,2</code> 换成了崭新的 <code>MacBookPro14,2</code>，从<strong>镇江白天联通夜里电信的校园网</strong>变成了 <strong>24 小时的镇江移动</strong>、又变成了传说中的<strong>魔都电信</strong>。遇见了<strong>武汉</strong>，走过了<strong>西安</strong>，滑过了<strong>绍兴</strong>。即使如此，最近常用的浏览器仍然是 <strong>Google Chrome Canary</strong> (<strong>macOS</strong> &amp; <strong>Windows</strong>)。</p>

<ul>
<li>  <a href="https://airtable.com/invite/r/APgl0VxI"><strong>A</strong>irtable.com</a>
</li>
<li>  <strong>B</strong>inux.github.io/yaaw/demo/</li>
<li>  <strong>C</strong>s.chromium.org</li>
<li>  <strong>D</strong>earti.me</li>
<li>  <strong>E</strong>-hentai.org</li>
<li>  <strong>F</strong>astmail.fm</li>
<li>  <strong>G</strong>it.orzfly.com</li>
<li>  <strong>H</strong>ub.docker.com/r/gitlab/gitlab-ce/tags/</li>
<li>  <strong>I</strong>p.cn</li>
<li>  <strong>J</strong>d.com</li>
<li>  <strong>K</strong>uaidi100.com</li>
<li>  <strong>L</strong>ab.hackplan.com</li>
<li>  <strong>M</strong>y.zerotier.com</li>
<li>  <strong>N</strong>amesilo.com</li>
<li>  <strong>O</strong>rzfly.com</li>
<li>  <strong>P</strong>an.baidu.com</li>
<li>  <strong>Q</strong>cloud.com</li>
<li>  <strong>R</strong>m.66rpg.com</li>
<li>  <strong>S</strong>trongpasswordgenerator.com</li>
<li>  <strong>T</strong>aobao.com</li>
<li>  <strong>U</strong>2.dmhy.org</li>
<li>  <strong>V</strong>2ex.com</li>
<li>  <strong>W</strong>eibo.com</li>
<li>  <strong>X</strong>iaomi.com</li>
<li>  <strong>Y</strong>anfly.moe</li>
<li>  <strong>Z</strong>erotier.com</li>
</ul>]]></description>
          </item>
        
      
    
      
          <item>
            <title>我的浏览器地址栏中的 A – Z（2017）</title>
            <link>https://orzfly.com/html/my-browser-address-bar-2017.html?lang=zh_CN</link>
            <guid isPermaLink="true">https://orzfly.com/html/my-browser-address-bar-2017.html?lang=zh_CN</guid>
            <pubDate>Wed, 01 Feb 2017 00:00:00 +0000</pubDate>
            <author>Yeechan Lu</author>
            <description><![CDATA[<p>前略，天国的 <a href="/html/my-browser-address-bar-2014-august.html">2014 秋君</a>。两年半时光飞逝，早已不如从前。OS X 已不在，Pebble 也退出了舞台。Chromium 不再内置 Google 的 API Key，因此无法再使用 Chrome Sync，我也疲于定期手动更新、装 Flash 插件。所以最近常用的浏览器是 Google Chrome Canary (macOS &amp; Windows)。</p>

<ul>
<li>  <strong>A</strong>ria2c.net</li>
<li>  <strong>B</strong>ilibili.tv</li>
<li>  <strong>C</strong>hrome-extension://laookkfknpbbblfpciffpaejjkokdgca/dashboard.html (<a href="https://chrome.google.com/webstore/detail/laookkfknpbbblfpciffpaejjkokdgca">Chrome 的 Momentum 新标签页插件</a>)</li>
<li>  <strong>D</strong>ouyutv.com/cave</li>
<li>  <strong>E</strong>volution.voxeo.com</li>
<li>  <strong>F</strong>astmail.fm</li>
<li>  <strong>G</strong>it.orzfly.com</li>
<li>  <strong>H</strong>aibara.*******.***</li>
<li>  <strong>I</strong>p.cn</li>
<li>  <strong>J</strong>jxke1.ujs.edu.cn</li>
<li>  <strong>K</strong>uaidi100.com</li>
<li>  <strong>L</strong>ixian.xunlei.com</li>
<li>  <strong>M</strong>sdn.itellyou.cn</li>
<li>  <strong>N</strong>ewrelic.com</li>
<li>  <strong>O</strong>rzfly.com</li>
<li>  <strong>P</strong>an.baidu.com</li>
<li>  <strong>Q</strong>ingcloud.com</li>
<li>  <strong>R</strong>m.66rpg.com</li>
<li>  <strong>S</strong>hare.dmhy.org</li>
<li>  <strong>T</strong>aobao.com</li>
<li>  <strong>U</strong>rpgs.com</li>
<li>  <strong>V</strong>2ex.com</li>
<li>  <strong>W</strong>eibo.com</li>
<li>  <strong>X</strong>iaomi.com</li>
<li>  <strong>Y</strong>outube.com</li>
<li>  <strong>Z</strong>huce.com</li>
</ul>]]></description>
          </item>
        
      
    
      
          <item>
            <title>用 aria2 拯救传输错误的文件</title>
            <link>https://orzfly.com/html/repair-file-chunks-with-aria2.html?lang=zh_CN</link>
            <guid isPermaLink="true">https://orzfly.com/html/repair-file-chunks-with-aria2.html?lang=zh_CN</guid>
            <pubDate>Thu, 09 Jul 2015 00:00:00 +0000</pubDate>
            <author>Yeechan Lu</author>
            <description><![CDATA[<p>因为有时候用的网络，是按照流量计费的。如果从自己的服务器上传输一个很大的文件回来，却发现文件哈希对不上，你会怎么办（后来才知道其实只是坏了几个字节）？</p>

<p>也许你会想到 BitTorrent 的种子，因为这是带有文件分块的校验码。也许你会说不是有些客户端支持 Web Peer 嘛，但是好像这些都挺麻烦的。这时候就有请 aria2c：</p>

<ul>
<li>支持 BitTorrent，HTTP/HTTPS/FTP/SFTP；</li>
<li>可以通过 BitTorrent 协议之外的方式下载种子里的文件；</li>
<li>断点续传、多线程。</li>
</ul>

<p>所以，首先在服务器上用 rhash 计算哈希创建种子文件，然后把种子传输到本地，打开 aria2c 就行。</p>

<p><code>--torrent-file</code> 指示 aria2 使用种子文件提供的信息，<code>-s10 -x10 -k1M</code> 让其对每个文件用 10 个链接、每个服务器开 10 个链接、最小切块 1MiB，<code>--check-integrity=true</code> 指示其检查现有文件的完整性，<code>--seed-time=0</code> 禁止其下载完成后做种（毕竟只是传输自己的文件罢了）。</p>
<div class="fist-file">
  <div class="fist-data">
    <div class="file-data">
      <table cellpadding="0" cellspacing="0" class="lines highlight">
        <tbody><tr>
          <td class="line-numbers" width="1%">
            <span class="line-number">1</span>
            <span class="line-number">2</span>
            <span class="line-number">3</span>
            <span class="line-number">4</span>
            <span class="line-number">5</span>
            <span class="line-number">6</span>
            <span class="line-number">7</span>
            <span class="line-number">8</span>
            <span class="line-number">9</span>
            <span class="line-number">10</span>
          </td>
          <td class="line-data">
            <pre class="line-pre"><div class="line"><span class="go">server$ rhash --torrent test.zip</span>
</div><div class="line"><span class="go">server$ ls test.zip*</span>
</div><div class="line"><span class="go">test.zip</span>
</div><div class="line"><span class="go">test.zip.torrent</span>
</div><div class="line">
</div><div class="line"><span class="go">local$ wget https://example.com/test.zip.torrent</span>
</div><div class="line"><span class="go">local$ ls test.zip*</span>
</div><div class="line"><span class="go">test.zip</span>
</div><div class="line"><span class="go">test.zip.torrent</span>
</div><div class="line"><span class="go">local$ aria2c --torrent-file=test.zip.torrent -s10 -x10 -k1M --check-integrity=true --seed-time=0 https://example.com/test.zip</span>
</div></pre>
          </td>
        </tr></tbody>
      </table>
    </div>
  </div>
  
</div>

<p>其实这个方法，是今天在搜索如何让 aria2 通过 HTTP 下载一个种子的时候突然看到的。当时碰到的页面是 <a href="http://linuxinternationals.org/wiki/index.php/Aria2c_with_and_without_using_torrent_files#Rescuing_a_failed_download">Aria2c with and without using torrent files - Rescuing a failed download</a>，如果你有兴趣，也建议你读一读。</p>

<p>如果你还不知道 <a href="http://aria2.sourceforge.net/">aria2</a>，不要再犹豫了，借此机会好好了解一下吧。虽然平常似乎见到最多的地方不是桌面而是路由器上……</p>

<p>顺带一提，aria2 0.19.0 中加入了对 SFTP 的基本支持。只是基本支持，但是也支持通过 SFTP 的多线程和断点续传了，虽然目前还只能用用户名和密码来认证。Homebrew 里的公式还没有更新，不过我是建议你马上就用这个 <a href="https://gist.github.com/orzFly/10c2b28ad1e15604f440">Homebrew 公式</a>立刻换上崭新的 aria2 0.19.0。所以说刚刚也可以不用 HTTPS 而是利用 SFTP 来更加安全地从服务器上传输文件回来，毕竟 SSH 服务器哪儿都有，HTTP(S) 还得找支持断点续传和支持认证/加密的服务器……</p>

<hr>

<p>其实用 rsync 也能做到这件事，不过印象中不支持多线程啊，所以我并不喜欢。如果你有需要，可以读一读这篇文章：<a href="https://blog.christophersmart.com/2014/01/15/force-rsync-to-use-delta-transfer-to-fix-corrupt-remote-file/">Force rsync to use delta transfer to fix corrupt remote file</a>：</p>
<div class="fist-file">
  <div class="fist-data">
    <div class="file-data">
      <table cellpadding="0" cellspacing="0" class="lines highlight">
        <tbody><tr>
          <td class="line-numbers" width="1%">
            <span class="line-number">1</span>
          </td>
          <td class="line-data">
            <pre class="line-pre"><div class="line">rsync -Pa --checksum --inplace --no-whole-file local.file remote.server:
</div></pre>
          </td>
        </tr></tbody>
      </table>
    </div>
  </div>
  
</div>]]></description>
          </item>
        
      
    
      
          <item>
            <title>致我的 2014</title>
            <link>https://orzfly.com/html/oh-my-2014.html?lang=zh_CN</link>
            <guid isPermaLink="true">https://orzfly.com/html/oh-my-2014.html?lang=zh_CN</guid>
            <pubDate>Sat, 14 Feb 2015 00:00:00 +0000</pubDate>
            <author>Yeechan Lu</author>
            <description><![CDATA[<div lang="en">

<ul class="timeline">

<li class="year first">January</li>
<li class="event offset-first left">Translated Minecraft-related news actively at the <a href="http://www.mcbbs.net/">Minecraft Chinese Forum</a>.</li>
<li class="event featured">Finished my first term at Jiangsu University.</li>
<li class="event left">End of my first followed season of Japanese animes.</li>
<li class="event">Started contributions to the Alfred-inspired Windows application, <a href="https://github.com/qianlifeng/wox/commits?author=orzfly">Wox</a>, built with C# and WPF.</li>
<li class="year">February</li>
<li class="event featured offset-first left">Spent days and nights on <a href="/html/muduhs-2014-the-video.html">Project MuduHS 2014</a>, the video cheering for students of my high school whilst this is my first time to play with <a href="http://www.adobe.com/products/aftereffects.html">Adobe After Effects</a>, <a href="http://www.adobe.com/products/premiere.html">Adobe Premiere Pro</a>, <a href="http://www.image-line.com/flstudio/">FL Studio</a>, <a href="http://www.celemony.com/en/melodyne/what-is-melodyne">Melodyne</a>, <a href="http://minecraft.net">Minecraft</a>, <a href="http://www.maxon.net/products/cinema-4d-studio/who-should-use-it.html">CINEMA 4D</a> and <a href="http://www.realtimerendering.com/erich/minecraft/public/mineways/">Mineways</a>.
<img src="//x9bucdn.b0.upaiyun.com/orzfly_images/2015/oh-my-2014/muduhs.jpg" alt="Project MuduHS 2014">
</li>
<li class="event">Discovered <a href="http://www.wooyun.org/bugs/wooyun-2014-051449">a logical bug</a> on <a href="http://www.renderbus.com/">RenderBus</a>, a cloud render farm for C4D, and registered a Wooyun account.</li>
<li class="event featured right">Brought my old Dell Inspiron 1420 to school with RAM upgraded to 3 GiB later.</li>
<li class="event right">Started to learn Node.js from the scaffold of <a href="https://github.com/jedireza/drywall">Drywall</a>.</li>
<li class="year">March</li>
<li class="event featured offset-first left">Installed OpenWRT on Buffalo WZR-HP-G450H and configured <a href="https://autovpn-for-openwrt.googlecode.com">automagically firewall bypassing</a>.</li>
<li class="event featured">Stayed in hospital for a week. During this time I contributed to <a href="https://github.com/qianlifeng/wox/commits?author=orzfly">Wox</a> frequently.</li>
<li class="year">April</li>
<li class="event offset-first left">Built the robust backend for Sanddudu's project <a href="https://github.com/sanddudu/nextday-desktop">NextDay-Desktop</a>
</li>
<li class="event">Played with <a href="http://repo.xposed.info/module/de.robv.android.xposed.installer">Xposed Framework</a> on Android and wrote a Xposed module named FakeMyDevice (never published).</li>
<li class="event left">Joined <a href="http://hackplan.com">HackPlan</a> again.</li>
<li class="event featured">Started working on bounties offered by Ripple Labs. Reminded by <a href="http://sonic1997.urpgs.com">Soniji</a>.</li>
<li class="year">May</li>
<li class="event featured offset-first left">Bought MacBook Air (13-inch/Mid 2013/i5 1.4GHz/8GiB/128GB) which was my first Apple hardware. I was deeply impressed by the design and OS X Mavericks.
<img src="//x9bucdn.b0.upaiyun.com/orzfly_images/2015/oh-my-2014/mba.jpg" alt="MacBook Air">
</li>
<li class="event">Received the first ticket of TOS violation from Linode due to insecure firewall configuration.</li>
<li class="event right">Became a reseller of ResellerClub.</li>
<li class="event right">Wrote <a href="https://git.miv.im/orzfly/pingful">Pingful</a>(with <a href="https://git.miv.im/orzfly/pingful-server">Server</a> and <a href="https://git.miv.im/orzfly/pingful-web">Web</a>), a simple app utilising Gulp and Socket.io. Also redesigned the <a href="http://park.orzfly.com/">parking page</a>.</li>
<li class="year">June</li>
<li class="event featured offset-first left">Bought a modded Mercury MW151RM with OpenWRT installed to repeat the Wi-Fi hotspot provided by CMCC durning night hours in dormitories.</li>
<li class="event">Wrote my first cross-platform native program as school homework, <a href="https://git.miv.im/orzfly/minipos">minipos</a>.
<img src="//x9bucdn.b0.upaiyun.com/orzfly_images/2015/oh-my-2014/minipos.png" alt="minipos">
</li>
<li class="event left">Started working on the internal fork of <a href="https://github.com/atom/atom-shell">Atom-Shell</a> used by <a href="https://pomotodo.com/apps">Pomotodo for Windows Desktop</a>.</li>
<li class="year">July</li>
<li class="event featured offset-first left">Started working on bounties on Bountysource.</li>
<li class="event">Built the <a href="http://wiki.primcraft.com">PrimCraft Wiki</a> based on MediaWiki.</li>
<li class="event left">Leart to use <a href="http://www.ntop.org/products/n2n/">n2n</a> to create virtual networks between VPSs.</li>
<li class="year">August</li>
<li class="event featured offset-first left">Bought a Crucial M500 480GB SSD for my portable workstation.</li>
<li class="event featured">Started running a webpage spider using <a href="https://github.com/binux/pyspider">pyspider</a>.</li>
<li class="event featured left">Built the activity page for <a href="http://www.bilibili.com/html/bgmad2014.html">BGMAD 2014</a> with <a href="http://lynn.mist.so/">Lynn°</a> and <a href="http://plafer.info">c4605</a>.
<img src="//x9bucdn.b0.upaiyun.com/orzfly_images/2015/oh-my-2014/bgmad.jpg" alt="BGMAD 2014">
</li>
<li class="event featured">Rented a dedicated server in Canada and started running my own <a href="http://jenkins-ci.org/">Jenkins</a>.</li>
<li class="event right">Played the galgame <i>School Days</i> with CrossOver on OS X.</li>
<li class="event right">Applied for a passport.</li>
<li class="event right featured">Migrated my blog from WordPress to Ghost whilst I stayed in a McDonalds's all night long with <em>Linghein</em>.</li>
<li class="event featured left">Met with <a href="https://pomotodo.com">Pomotodo</a> team members in Nanjing.
<img src="//x9bucdn.b0.upaiyun.com/orzfly_images/2015/oh-my-2014/hackplan.jpg" alt="HackPlan">
</li>
<li class="event featured">Had a “meaningless” meeting with <a href="http://ii.mist.so">IamI</a>, forgot to give a bear hug.</li>
<li class="year">September</li>
<li class="event offset-first left">Signed my first NDA and W-8BEN form.</li>
<li class="event featured">Passed StartSSL Class 2 Verification.</li>
<li class="event featured left">Released <a href="https://pomotodo.com/apps">Pomotodo for Windows Desktop</a>.
<img src="//x9bucdn.b0.upaiyun.com/orzfly_images/2015/oh-my-2014/pmtdwin.png" alt="Pomotodo for Windows Desktop">
</li>
<li class="event featured">Compiled Chromium for the first time.</li>
<li class="year">October</li>
<li class="event featured offset-first left">Rode from Zhenjiang to Shanghai on the G312 highway.
<img src="//x9bucdn.b0.upaiyun.com/orzfly_images/2015/oh-my-2014/g312.jpg" alt="G312">
</li>
<li class="event featured">Visited Shanghai Postal Museum and had a cup of coffee in Starbucks with <em>Polaris Mi</em>, <em>Chi Rui</em>, <em>Jiang Ximeng</em>.
<img src="//x9bucdn.b0.upaiyun.com/orzfly_images/2015/oh-my-2014/polaris.jpg" alt="I and Polaris Mi">
<img src="//x9bucdn.b0.upaiyun.com/orzfly_images/2015/oh-my-2014/chirui.jpg" alt="Chi Rui and Jiang Ximeng">
</li>
<li class="event left">Tasted the best minced pork congee with preserved eggs in Shanghai.</li>
<li class="event left">Met the worst "donburi congee" in my life.
<img src="//x9bucdn.b0.upaiyun.com/orzfly_images/2015/oh-my-2014/worstcongee.jpg" alt="Worst congee in my life">
</li>
<li class="event">University started to cut down the Wi-Fi hotspot provided by CMCC during the night hours.</li>
<li class="event featured right">Set foot on USA soil (embassy) and was refused getting USA visa under INA 214(b).</li>
<li class="event left">Impressed by the Time Machine but completely depressed by OS X Yosemite.</li>
<li class="event">Replaced Samsung I9082 with Redmi 1S.</li>
<li class="event left">Wrote <a href="https://github.com/orzfly/osd">a network monitor</a> running on the Loongson laptop.
<img src="//x9bucdn.b0.upaiyun.com/orzfly_images/2015/oh-my-2014/osd.png" alt="OSD">
</li>
<li class="event">Started to move Linux CI workers into OpenVZ containers on DigitalOcean.</li>
<li class="year">November</li>
<li class="event featured offset-first left">Got my first VISA card (although it's a supplementary card).</li>
<li class="event featured">Won the 1111 prize from <a href="http://hackplan.com">HackPlan</a>.
<img src="//x9bucdn.b0.upaiyun.com/orzfly_images/2015/oh-my-2014/1111.png" alt="1111">
</li>
<li class="event featured left">Attended China's largest &amp; first college hackathon, <a href="http://hackshanghai.com">HackShanghai 2014</a>, at NYU Shanghai with <em>Chino Chang</em>, <em>Cx Wang</em>. Designed <a href="https://gitcafe.com/orzfly/hangry">Hangry</a> to help people order their take-outs in no time.
<img src="//x9bucdn.b0.upaiyun.com/orzfly_images/2015/oh-my-2014/hacksh.jpg" alt="hacksh">
</li>
<li class="event">Failed to apply for a USA visa again.</li>
<li class="event featured right">Designed a stamp with my avatar.
<img src="//x9bucdn.b0.upaiyun.com/orzfly_images/2015/oh-my-2014/stamp.jpg" alt="stamp">
</li>
<li class="event left">Learnt to use GnuPG with <em>Angurise</em>.</li>
<li class="year">December</li>
<li class="event offset-first left">My first time using <a href="http://www.microsoft.com/en-us/windows/enterprise/products-and-technologies/devices/windowstogo.aspx">Windows To Go</a>. Bought a license for <a href="http://sandboxie.com">Sandboxie</a> with friends. Wrote <a href="https://github.com/orzFly/QQCamera">QQCamera</a> to use the world-famous screenshotting function in QQ.</li>
<li class="event">Rebuilt my blog with Jekyll.</li>
<li class="event featured right">
<img src="//x9bucdn.b0.upaiyun.com/orzfly_images/2015/oh-my-2014/avatar.png" alt="New Avatar" style="float: right; width: 40px; height: auto; margin: 0;">
Started using the new avatar designed by <a href="http://lynn.mist.so/">Lynn°</a> with my favorite T-shirt from GitCafe.</li>
<li class="event featured left">Hot soup was spilled on the keyboard of my MacBook Air. It died and revived. The only problem is that the power button turned into <a href="https://twitter.com/orzfly/status/554584875890520064">a killer button</a>.</li>
<li class="event">Started <a href="http://ainou.org/">Project Ainou</a> with <a href="http://oott123.com/">oott123</a>.</li>
</ul>

</div>

<div lang="zh_CN">

<ul class="timeline">

<li class="year first">一月</li>
<li class="event offset-first left">在 <a href="http://www.mcbbs.net/">Minecraft 中文论坛</a>翻译了数篇 Minecraft 相关新闻。</li>
<li class="event featured">结束在江苏大学的第一个学期。</li>
<li class="event left">看完我第一次追着看的这一季新番。</li>
<li class="event">参与 Windows 应用 <a href="https://github.com/qianlifeng/wox/commits?author=orzfly">Wox</a> 开发。这是一个用 C# 和 WPF 写的类似 Alfred 的东西。</li>
<li class="year">二月</li>
<li class="event featured offset-first left">寒假的日日夜夜忙于<a href="/html/muduhs-2014-the-video.html">《木中加油 2014》</a>的制作，给母校毕业生的加油视频。这几乎是我第一次跟 <a href="http://www.adobe.com/products/aftereffects.html">Adobe After Effects</a>、<a href="http://www.adobe.com/products/premiere.html">Adobe Premiere Pro</a>、<a href="http://www.image-line.com/flstudio/">FL Studio</a>、<a href="http://www.celemony.com/en/melodyne/what-is-melodyne">Melodyne</a>、<a href="http://minecraft.net">Minecraft</a>、<a href="http://www.maxon.net/products/cinema-4d-studio/who-should-use-it.html">CINEMA 4D</a> 和 <a href="http://www.realtimerendering.com/erich/minecraft/public/mineways/">Mineways</a> 打交道。
<img src="//x9bucdn.b0.upaiyun.com/orzfly_images/2015/oh-my-2014/muduhs.jpg" alt="Project MuduHS 2014">
</li>
<li class="event">挖出 <a href="http://www.renderbus.com/">RenderBus</a>（C4D 的云端渲染农场）的<a href="http://www.wooyun.org/bugs/wooyun-2014-051449">一个逻辑错误</a>，成为了乌云用户。</li>
<li class="event featured right">把我的 Dell Inspiron 1420 带去了学校，后来把内存升级到了 3 GiB。</li>
<li class="event right">读着 <a href="https://github.com/jedireza/drywall">Drywall</a> 的代码开始学习 Node.js。</li>
<li class="year">三月</li>
<li class="event featured offset-first left">给巴法络 Buffalo WZR-HP-G450H 刷上了 OpenWRT, 配置了<a href="https://autovpn-for-openwrt.googlecode.com">自动翻墙</a>。</li>
<li class="event featured">住了一个星期院，在此期间频繁参与 <a href="https://github.com/qianlifeng/wox/commits?author=orzfly">Wox</a> 开发。</li>
<li class="year">四月</li>
<li class="event offset-first left">给白色箱子造了 <a href="https://github.com/sanddudu/nextday-desktop">NextDay-Desktop</a> 文件的后端。</li>
<li class="event">玩了玩安卓上的 <a href="http://repo.xposed.info/module/de.robv.android.xposed.installer">Xposed 框架</a>，写了一个没发布的 FakeMyDevice 模块。</li>
<li class="event left">回归 <a href="http://hackplan.com">HackPlan</a>。</li>
<li class="event featured">在<a href="http://sonic1997.urpgs.com">索尼子</a>的介绍下开始做 Ripple Labs 的悬赏。</li>
<li class="year">五月</li>
<li class="event featured offset-first left">入了 MacBook Air (13 寸/Mid 2013/i5 1.4GHz/8GiB/128GB)，我的第一个苹果设备。被其设计和 OS X Mavericks 系统折服。
<img src="//x9bucdn.b0.upaiyun.com/orzfly_images/2015/oh-my-2014/mba.jpg" alt="MacBook Air">
</li>
<li class="event">第一次收到 Linode 的服务协议违反工单，因为防火墙上暴露了几个危险的端口。</li>
<li class="event right">成为 ResellerClub 代理。</li>
<li class="event right">学习 Gulp 和 Socket.io，写了一个 <a href="https://git.miv.im/orzfly/pingful">Pingful</a>(包括<a href="https://git.miv.im/orzfly/pingful-server">服务器</a>和<a href="https://git.miv.im/orzfly/pingful-web">前端</a>)，与此同时重新制作了<a href="http://park.orzfly.com/">域名停靠页</a>。</li>
<li class="year">六月</li>
<li class="event featured offset-first left">买了个魔改版的水星 MW151RM，刷了 OpenWRT，用来中继宿舍里夜间的中国移动 Wi-Fi 信号。</li>
<li class="event">完成了我的第一个<strong>原生跨平台</strong>程序作为课程设计，<a href="https://git.miv.im/orzfly/minipos">minipos</a>。
<img src="//x9bucdn.b0.upaiyun.com/orzfly_images/2015/oh-my-2014/minipos.png" alt="minipos">
</li>
<li class="event left">开始搞 <a href="https://pomotodo.com/apps">Windows 桌面版番茄土豆</a>用到的内部版本的 <a href="https://github.com/atom/atom-shell">Atom-Shell</a> 的。</li>
<li class="year">七月</li>
<li class="event featured offset-first left">开始做 Bountysource 的悬赏。</li>
<li class="event">用 MediaWiki 搭建 <a href="http://wiki.primcraft.com">PrimCraft 百科</a>。</li>
<li class="event left">学会使用 <a href="http://www.ntop.org/products/n2n/">n2n</a> 在 VPS 之间构建虚拟网络。</li>
<li class="year">八月</li>
<li class="event featured offset-first left">给移动工作站购入 Crucial M500 480GB 固态硬盘。</li>
<li class="event featured">用 <a href="https://github.com/binux/pyspider">pyspider</a> 搭建了几个资源站的爬虫。</li>
<li class="event featured left">跟<a href="http://lynn.mist.so/">凌姐姐</a>和<a href="http://plafer.info">逸川</a>做<a href="http://www.bilibili.com/html/bgmad2014.html">BGMAD 新人战 2014</a>的网页。
<img src="//x9bucdn.b0.upaiyun.com/orzfly_images/2015/oh-my-2014/bgmad.jpg" alt="BGMAD 2014">
</li>
<li class="event featured">租了一台加拿大独服，开始自己跑我的持续集成系统 <a href="http://jenkins-ci.org/">Jenkins</a>。</li>
<li class="event right">在 OS X 上用 CrossOver 玩了 GAL 游戏<i>日在校园</i>。</li>
<li class="event right">申办护照。</li>
<li class="event right featured">跟凌瀚在 M 记呆了一夜，把我博客从 WordPress 迁移至 Ghost。</li>
<li class="event featured left">与<a href="https://pomotodo.com">番茄土豆</a>团队成员在南京聚会。
<img src="//x9bucdn.b0.upaiyun.com/orzfly_images/2015/oh-my-2014/hackplan.jpg" alt="HackPlan">
</li>
<li class="event featured">跟 <a href="http://ii.mist.so">IamI</a> 见了“没有意义”的一面，走之前忘记来个熊抱。</li>
<li class="year">九月</li>
<li class="event offset-first left">第一次签保密协议和 W-8BEN 表格。</li>
<li class="event featured">通过 StartSSL Class 2 验证。</li>
<li class="event featured left">发布了 <a href="https://pomotodo.com/apps">Windows 桌面版番茄土豆</a>。
<img src="//x9bucdn.b0.upaiyun.com/orzfly_images/2015/oh-my-2014/pmtdwin.png" alt="Windows 桌面版番茄土豆">
</li>
<li class="event featured">第一次编译出 Chromium。</li>
<li class="year">十月</li>
<li class="event featured offset-first left">沿着 G312 国道从镇江骑行至上海。
<img src="//x9bucdn.b0.upaiyun.com/orzfly_images/2015/oh-my-2014/g312.jpg" alt="G312">
</li>
<li class="event featured">参观上海邮政博物馆，跟<strong>絮语</strong>、<strong>池睿</strong>和<strong>西萌</strong>在星巴克喝了一杯。
<img src="//x9bucdn.b0.upaiyun.com/orzfly_images/2015/oh-my-2014/polaris.jpg" alt="我跟絮语">
<img src="//x9bucdn.b0.upaiyun.com/orzfly_images/2015/oh-my-2014/chirui.jpg" alt="池睿和西萌">
</li>
<li class="event left">品尝了我迄今为止最爱的皮蛋瘦肉粥。</li>
<li class="event left">遭遇迄今为止最让我失望的“盖浇”皮蛋瘦肉粥。
<img src="//x9bucdn.b0.upaiyun.com/orzfly_images/2015/oh-my-2014/worstcongee.jpg" alt="最让我失望的粥">
</li>
<li class="event">学校开始在夜间切断中国移动的 Wi-Fi 信号。</li>
<li class="event featured right">踏上了美国领土（大使馆），根据美国法律 INA 214(b) 被拒签。</li>
<li class="event left">被 Time Machine 震撼，但是 OS X Yosemite 令我大失所望。</li>
<li class="event">用红米 1S 换下了三星 I9082。</li>
<li class="event left">写了一个跑在龙芯笔记本上的<a href="https://github.com/orzfly/osd">网络监视器</a>。
<img src="//x9bucdn.b0.upaiyun.com/orzfly_images/2015/oh-my-2014/osd.png" alt="OSD">
</li>
<li class="event">把持续集成的 Linux 节点搬进了跑在 DigitalOcean 上的 OpenVZ 容器里。</li>
<li class="year">十一月</li>
<li class="event featured offset-first left">拥有了第一张 VISA 信用卡（虽然是附属卡）。</li>
<li class="event featured">在 <a href="http://hackplan.com">HackPlan</a> 抽中 1111 大奖。
<img src="//x9bucdn.b0.upaiyun.com/orzfly_images/2015/oh-my-2014/1111.png" alt="1111">
</li>
<li class="event featured left">在上海纽约大学参加中国首次大型大学生创客马拉松活动<a href="http://hackshanghai.com">创客上海 2014</a>。与<strong>常昊</strong>、<strong>王成欣</strong>组队设计了 <a href="https://gitcafe.com/orzfly/hangry">Hangry</a>，旨在帮助人们不花时间订外卖。
<img src="//x9bucdn.b0.upaiyun.com/orzfly_images/2015/oh-my-2014/hacksh.jpg" alt="hacksh">
</li>
<li class="event">美国签证再次被拒。</li>
<li class="event featured right">用头像设计了一个印戳。
<img src="//x9bucdn.b0.upaiyun.com/orzfly_images/2015/oh-my-2014/stamp.jpg" alt="stamp">
</li>
<li class="event left">被 <em>Angurise</em> 带入 GnuPG 坑。</li>
<li class="year">十二月</li>
<li class="event offset-first left">第一次用 <a href="http://www.microsoft.com/en-us/windows/enterprise/products-and-technologies/devices/windowstogo.aspx">Windows To Go</a>、和朋友团购 <a href="http://sandboxie.com">Sandboxie</a>。写了 <a href="https://github.com/orzFly/QQCamera">QQCamera</a> 来在 QQ 之外使用其世界闻名的截图功能。</li>
<li class="event">用 Jekyll 重建了我的博客。</li>
<li class="event featured right">
<img src="//x9bucdn.b0.upaiyun.com/orzfly_images/2015/oh-my-2014/avatar.png" alt="New Avatar" style="float: right; width: 40px; height: auto; margin: 0;">
启用<a href="http://lynn.mist.so/">凌姐姐</a>设计的新二次元形象，穿着我年度最爱的 GitCafe 短袖。</li>
<li class="event featured left">不小心把馄饨的热汤倒在了 MacBook Air 的键盘上，死了又复活了。唯一的问题在于电源键一按就会<a href="https://twitter.com/orzfly/status/554584875890520064">爆炸</a>。</li>
<li class="event">跟<a href="http://oott123.com/">三三</a>开始搞 <a href="http://ainou.org/">Ainou 企划</a>。</li>
</ul>

</div>]]></description>
          </item>
        
      
    
      
    
      
          <item>
            <title>音乐分享的点名游戏（2014）</title>
            <link>https://orzfly.com/html/song-share-game-2014.html?lang=zh_CN</link>
            <guid isPermaLink="true">https://orzfly.com/html/song-share-game-2014.html?lang=zh_CN</guid>
            <pubDate>Thu, 28 Aug 2014 00:00:00 +0000</pubDate>
            <author>Yeechan Lu</author>
            <description><![CDATA[<p>总算把博客搬离了 WordPress，在整理旧文的时候看到<a href="/song-share-game/">音乐分享的点名游戏</a>。哎呀，已经是五年前的事情了。突然觉得很有趣，就再来玩一次好了 :)</p>

<p>规则就不再重复了，也不点名了，自己玩玩就好。</p>

<ol>
<li><p>If someone says, “Is this okay?” You say:
与你最后的夏天 - 西国の海妖</p></li>
<li><p>How would you describe yourself?
心の旋律 - 白浜坂高校合唱部 (TARI TARI ミュージックアルバム 〜歌ったり、奏でたり〜)</p></li>
<li><p>What do you like in a guy/girl?
GATE OF STEINER - 阿保剛 (STEINS;GATE Symphonic Material)</p></li>
<li><p>How do you feel today?
Shine Days - Girls Dead Monster (Little Braver)</p></li>
<li><p>What is your life’s purpose?
立body機motion - 澤野弘之 (進撃の巨人 Original Soundtrack 1)</p></li>
<li><p>What is your motto?
光る轍 - 吉野裕司 (狼と香辛料 O.S.T 狼と旅の音楽)</p></li>
<li><p>What do your friends think of you?
BRYNHILDR IN THE DARKNESS -Ver.EJECTED- - 鴇沢直 (極黒のブリュンヒルデ オリジナル・サウンドトラック)</p></li>
<li><p>What do you think of your parents?
妄想髪長少女、再び - 田中公平 (冰菓 Original Sound Track)</p></li>
<li><p>What do you think about very often?
Sing All Overtures - キリト(CV.松岡禎丞)、アスナ(CV.戸松 遥)、リーファ(CV.竹達彩奈)、ユイ(CV.伊藤かな恵)、シリカ(CV.日高里菜)、リズベット(CV.高垣彩陽) (Sword Art Online 特典 CD)</p></li>
<li><p>What do you think of your best friend?
ウタウタウ　-miku ver.- - トラボルタP  (TORABOTIC WORLD2)</p></li>
<li><p>What do you think of the person you like?
Love Changes Everything - Michael Ball (Best Of Voices)</p></li>
<li><p>What is your Life Story?
☆Lovely Super Idol☆ - シリカ(CV.日高里菜) (Sword Art Online 特典 CD)</p></li>
<li><p>What do you want to be when you grow up?
Alchemy - Girls Dead Monster (Crow Song)</p></li>
<li><p>What is your hobby/interest?
My Next Move - Dreamtale (World Changed Forever)</p></li>
<li><p>What is your biggest fear?
田舎小径 - 戸越まごめ (CLANNAD -クラナド- ORIGINAL SOUND TRACK)</p></li>
<li><p>What is your biggest secret?
Dreams of the Dead - Two Steps From Hell (Legend)</p></li>
<li><p>What do you think of when you see the person you like?
最強を示す者 - 井内舞子 (とある科学の超電磁砲S ORIGINAL SOUND TRACK 2)</p></li>
<li><p>What will you dance to at your wedding?
to the beginning - Kalafina (THE BEST “Blue”)</p></li>
<li><p>What will they play at your funeral?
男子高校生と文化祭 - Audio Highs (男子高校生の日常 Original Soundtrack)</p></li>
<li><p>What do you think of your friends?
Desire Blue sky - Clean Tears (Science Adventure Dance Remix 'CHAOS;HEAD' 'STEINS;GATE')</p></li>
</ol>]]></description>
          </item>
        
      
    
      
          <item>
            <title>我的浏览器地址栏中的 A – Z（2014 秋）</title>
            <link>https://orzfly.com/html/my-browser-address-bar-2014-august.html?lang=zh_CN</link>
            <guid isPermaLink="true">https://orzfly.com/html/my-browser-address-bar-2014-august.html?lang=zh_CN</guid>
            <pubDate>Thu, 28 Aug 2014 00:00:00 +0000</pubDate>
            <author>Yeechan Lu</author>
            <description><![CDATA[<p>前略，天国的 <a href="/html/my-browser-address-bar-2014.html">2014 君</a>。趁着从 WordPress 搬迁到 Ghost 的机会，今年再来一发好了。最近常用的浏览器是 Google Chrome (OS X &amp; Windows) 娘。</p>

<ul>
<li>  <strong>A</strong>lipay.com</li>
<li>  <strong>B</strong>ilibili.tv</li>
<li>  <strong>C</strong>nlogin.resellerclub.com/servlet/ResellerIndexServlet</li>
<li>  <strong>D</strong>ns.miv.im</li>
<li>  <strong>E</strong>le.me</li>
<li>  <strong>F</strong>iles.miv.im</li>
<li>  <strong>G</strong>it.miv.im</li>
<li>  <strong>H</strong>umblebundle.com/weekly</li>
<li>  <strong>I</strong>p.cn</li>
<li>  <strong>J</strong>jxke1.ujs.edu.cn</li>
<li>  <strong>K</strong>uaidi100.com</li>
<li>  <strong>L</strong>inode.com</li>
<li>  <strong>M</strong>ail.google.com/mail/u/0/</li>
<li>  <strong>N</strong>yaa.cat</li>
<li>  <strong>O</strong>rzfly.com</li>
<li>  <strong>P</strong>lus.google.com</li>
<li>  <strong>Q</strong>iniu.com</li>
<li>  <strong>R</strong>ipplecharts.com</li>
<li>  <strong>S</strong>teamcommunity.com/id/orzFly/</li>
<li>  <strong>T</strong>witter.com</li>
<li>  <strong>U</strong>rpgs.com</li>
<li>  <strong>V</strong>2ex.com</li>
<li>  <strong>W</strong>iki.primcraft.com</li>
<li>  <strong>X</strong>uxian.****.**</li>
<li>  <strong>Y</strong>outube.com</li>
<li>  <strong>Z</strong>.cn</li>
</ul>

<p>不知不觉，又变化了好多。</p>]]></description>
          </item>
        
      
    
      
          <item>
            <title>欢迎使用 Ghost!</title>
            <link>https://orzfly.com/html/welcome-to-ghost.html?lang=zh_CN</link>
            <guid isPermaLink="true">https://orzfly.com/html/welcome-to-ghost.html?lang=zh_CN</guid>
            <pubDate>Wed, 27 Aug 2014 00:00:00 +0000</pubDate>
            <author>Yeechan Lu</author>
            <description><![CDATA[<div lang="en">
<p>You're live! Nice. We've put together a little post to introduce you to the Ghost editor and get you started. You can manage your content by signing in to the admin area at <code>&lt;your blog URL&gt;/ghost/</code>. When you arrive, you can select this post from a list on the left and see a preview of it on the right. Click the little pencil icon at the top of the preview to edit this post and read the next section!</p>

<h2>Getting Started</h2>

<p>Ghost uses something called Markdown for writing. Essentially, it's a shorthand way to manage your post formatting as you write!</p>

<p>Writing in Markdown is really easy. In the left hand panel of Ghost, you simply write as you normally would. Where appropriate, you can use <em>shortcuts</em> to <strong>style</strong> your content. For example, a list:</p>

<ul>
<li>Item number one</li>
<li>Item number two

<ul>
<li>A nested item</li>
</ul>
</li>
<li>A final item</li>
</ul>

<p>or with numbers!</p>

<ol>
<li>Remember to buy some milk</li>
<li>Drink the milk</li>
<li>Tweet that I remembered to buy the milk, and drank it</li>
</ol>

<h3>Links</h3>

<p>Want to link to a source? No problem. If you paste in url, like http://ghost.org - it'll automatically be linked up. But if you want to customise your anchor text, you can do that too! Here's a link to <a href="http://ghost.org">the Ghost website</a>. Neat.</p>

<h3>What about Images?</h3>

<p>Images work too! Already know the URL of the image you want to include in your article? Simply paste it in like this to make it show up:</p>

<p><img src="https://ghost.org/images/ghost.png" alt="The Ghost Logo"></p>

<p>Not sure which image you want to use yet? That's ok too. Leave yourself a descriptive placeholder and keep writing. Come back later and drag and drop the image in to upload:</p>

<p>![A bowl of bananas]</p>

<h3>Quoting</h3>

<p>Sometimes a link isn't enough, you want to quote someone on what they've said. It was probably very wisdomous. Is wisdomous a word? Find out in a future release when we introduce spellcheck! For now - it's definitely a word.</p>

<blockquote>
<p>Wisdomous - it's definitely a word.</p>
</blockquote>

<h3>Working with Code</h3>

<p>Got a streak of geek? We've got you covered there, too. You can write inline <code>&lt;code&gt;</code> blocks really easily with back ticks. Want to show off something more comprehensive? 4 spaces of indentation gets you there.</p>
<div class="fist-file">
  <div class="fist-data">
    <div class="file-data">
      <table cellpadding="0" cellspacing="0" class="lines highlight">
        <tbody><tr>
          <td class="line-numbers" width="1%">
            <span class="line-number">1</span>
            <span class="line-number">2</span>
            <span class="line-number">3</span>
            <span class="line-number">4</span>
          </td>
          <td class="line-data">
            <pre class="line-pre"><div class="line"><span class="nc">.awesome-thing</span> <span class="p">{</span>
</div><div class="line">    <span class="k">display</span><span class="o">:</span> <span class="k">block</span><span class="p">;</span>
</div><div class="line">    <span class="k">width</span><span class="o">:</span> <span class="m">100%</span><span class="p">;</span>
</div><div class="line"><span class="p">}</span>
</div></pre>
          </td>
        </tr></tbody>
      </table>
    </div>
  </div>
  
</div>

<h3>Ready for a Break?</h3>

<p>Throw 3 or more dashes down on any new line and you've got yourself a fancy new divider. Aw yeah.</p>

<p></p>
<hr>

<h3>Advanced Usage</h3>

<p>There's one fantastic secret about Markdown. If you want, you can  write plain old HTML and it'll still work! Very flexible.</p>

<p><input type="text" placeholder="I'm an input field!"></p>

<p>That should be enough to get you started. Have fun - and let us know what you think :) </p>
</div>
<div lang="zh_CN">
<p>Yeah，博客上线了！这篇文章的目的是向你介绍 Ghost 编辑器并帮你快速上手。通过 <code>&lt;your blog URL&gt;/ghost/</code> 链接就可以登录系统后台管理你的博客内容了。当你进入后台，你就能看到左侧文章列表处列出的这篇文章，右侧就是这篇文章的预览效果。点击预览栏右上角的铅笔图标就能进入内容编辑页面。</p>

<h2>快速入门</h2>

<p>Ghost 使用 Markdown 语法书写内容。简单来说，Markdown 就是一种简化的书写格式！</p>

<p>用 Markdown 语法写作是很容易的。在编辑界面的左侧就是你写作的地方。在你认为需要的时候，可以使用以下这些语法来格式化你的内容。例如下面这个无序列表：</p>

<ul>
<li>第一项</li>
<li>第二项

<ul>
<li>层叠项</li>
</ul>

<p></p>
</li>
<li>最后一项</li>
</ul>

<p>还可以是有序列表：</p>

<ol>
<li>记得买点牛奶</li>
<li>喝掉牛奶</li>
<li>发个微博说我记得买牛奶了，而且喝了</li>
</ol>

<h3>链接</h3>

<p>如果要链接其它页面，可以直接把页面的 URL 粘贴过来，例如 http://ghost.org - 会被自动识别为链接。但是，如果你想自定义链接文本，可以像这样：<a href="http://ghost.org">Ghost 官网</a>。很简单吧！</p>

<h3>图片</h3>

<p>插入图片也没问题！前提是你事先知道图片的 URL，然后像下面这样：</p>

<p><img src="https://ghost.org/images/ghost.png" alt="The Ghost Logo"></p>

<p>如果图片在本地的硬盘里怎么办？也很简单！像下面这样书写就能为图片预留一个位置，然后你可以继续写作，回头再通过拖拽的方式把图片上传到服务器上。</p>

<p>![一张图片]</p>

<h3>引用</h3>

<p>有些时候我们需要引用别人说的话，可以这样：</p>

<blockquote>
<p>Wisdomous - it's definitely a word.</p>
</blockquote>

<h3>代码</h3>

<p>或许你是个码农，需要贴一些代码到文章里，可以通过两个引号（Tab 键上面的那个键）加入行内代码 <code>&lt;code&gt;</code>。如果需要加入大段的代码，可以在代码前加 4 个空格缩进，这就是 Markdown 的语法。</p>

<div class="fist-file">
  <div class="fist-data">
    <div class="file-data">
      <table cellpadding="0" cellspacing="0" class="lines highlight">
        <tbody><tr>
          <td class="line-numbers" width="1%">
            <span class="line-number">1</span>
            <span class="line-number">2</span>
            <span class="line-number">3</span>
            <span class="line-number">4</span>
          </td>
          <td class="line-data">
            <pre class="line-pre"><div class="line"><span class="nc">.awesome-thing</span> <span class="p">{</span>
</div><div class="line">    <span class="k">display</span><span class="o">:</span> <span class="k">block</span><span class="p">;</span>
</div><div class="line">    <span class="k">width</span><span class="o">:</span> <span class="m">100%</span><span class="p">;</span>
</div><div class="line"><span class="p">}</span>
</div></pre>
          </td>
        </tr></tbody>
      </table>
    </div>
  </div>
  
</div>

<h3>分割线</h3>

<p>在任一新行输入 3 个或更多的短横线（减号）就是一条分隔线了。</p>

<p></p>
<hr>

<h3>高级用法</h3>

<p>Markdown 还有一个特别用法，就是在你需要的时候可以直接书写 HTML 代码。</p>

<p><input type="text" placeholder="这是个输入框！"></p>

<p></p>
<p>只要掌握了上面的这些介绍，你就已经入门了！继续写作吧！</p>
</div>]]></description>
          </item>
        
      
    
      
          <item>
            <title>orzFly 的音乐精选集：2013 冬季</title>
            <link>https://orzfly.com/html/music-collection-winter-2013.html?lang=zh_CN</link>
            <guid isPermaLink="true">https://orzfly.com/html/music-collection-winter-2013.html?lang=zh_CN</guid>
            <pubDate>Wed, 23 Apr 2014 00:00:00 +0000</pubDate>
            <author>Yeechan Lu</author>
            <description><![CDATA[<ol>
<li>
<a href="http://www.xiami.com/song/3381901">突然好想你</a> – 五月天 <span class="pull-right">04:25</span>
</li>
<li>
<a href="http://www.xiami.com/song/3468380">没离开过</a> – 林志炫 <span class="pull-right">05:17</span>
</li>
<li>
<a href="http://www.xiami.com/song/1770713501">凶夢伝染</a> – ALI PROJECT <span class="pull-right">04:25</span>
</li>
<li>
<a href="http://www.xiami.com/song/1769651708">一番の宝物 (Original Version)</a> – 麻枝准 <span class="pull-right">06:00</span>
</li>
<li>
<a href="http://www.xiami.com/song/1772354507">Alpha</a> – C418 <span class="pull-right"><i class="fa fa-music"></i> 10:03</span>
</li>
<li>
<a href="http://www.xiami.com/song/1770742208">For River - Piano (Sarah &amp; Tommy's Version)</a> – Kan R. Gao <span class="pull-right"><i class="fa fa-music"></i> 02:58</span>
</li>
<li>ここにしか咲かない花 – コブクロ <span class="pull-right">06:11</span>
</li>
<li>
<a href="/html/muduhs-2014-the-video.html">木中友谊之歌</a> – 李雨婷; 王海宇; 王昕尧; 冯丽; 张天成; 陶聪聪; 倪一舟 <span class="pull-right"><i class="fa fa-cogs"></i> 06:11</span>
</li>
<li>
<a href="http://www.xiami.com/song/1770159571">secret base ~君がくれたもの~ (10 years after Ver.)</a> – 茅野愛衣; 戸松遥; 早見沙織 <span class="pull-right">05:52</span>
</li>
<li>影 – 柴咲コウ <span class="pull-right">04:26</span>
</li>
<li>My Soul, Your Beats! – Lia <span class="pull-right">04:35</span>
</li>
<li>
<a href="http://www.xiami.com/song/1769776879">My Soul, Your Beats! -Zephyr Violin Edition-</a> – Zephyr Cradle; TAM <span class="pull-right"><i class="fa fa-music"></i> 05:00</span>
</li>
</ol>]]></description>
          </item>
        
      
    
      
          <item>
            <title>RGSSRuntime Module 1.0 for RPG Maker XP/VX/VX Ace</title>
            <link>https://orzfly.com/html/rgssruntime.html?lang=zh_CN</link>
            <guid isPermaLink="true">https://orzfly.com/html/rgssruntime.html?lang=zh_CN</guid>
            <pubDate>Wed, 19 Mar 2014 00:00:00 +0000</pubDate>
            <author>Yeechan Lu</author>
            <description><![CDATA[<p>这个模块是为了在脚本中操作 RGSS 的两个选项：平滑模式和抑制画面抖动（垂直同步）。除了 RGSS100J 无法使用之外，其他任何 RGSS 1~3 版本理论上都能使用。</p>

<p>脚本内容已放在后文，不过脚本中并没有直接设置。使用时，不仅应当引入脚本，还应该调用它的方法。</p>

<h3>RGSSRuntime.smooth_mode</h3>

<p>读取/设置 RGSS 的平滑模式选项。true 为开启，false 为关闭。在 RGSS 版本不支持的时候，会返回 nil，对其设置将不会产生任何效果。</p>

<h3>RGSSRuntime.wait_for_vsync</h3>

<p>读取/设置 RGSS 的抑制画面抖动（垂直同步）选项。true 为开启，false 为关闭。在 RGSS 版本不支持的时候，会返回 nil，对其设置将不会产生任何效果。</p>

<h3>脚本正文</h3>

<script src="https://gist.github.com/orzFly/9641099.js?file=rgssruntime.rb"> </script>]]></description>
          </item>
        
      
    
      
          <item>
            <title>抱歉的抱歉以及一切的一切</title>
            <link>https://orzfly.com/html/sorry-to-all.html?lang=zh_CN</link>
            <guid isPermaLink="true">https://orzfly.com/html/sorry-to-all.html?lang=zh_CN</guid>
            <pubDate>Tue, 18 Mar 2014 00:00:00 +0000</pubDate>
            <author>Yeechan Lu</author>
            <description><![CDATA[<p>真的，过去这么两三年来的事情，我一直都感到愧疚。几乎，没有几个约定最终是履行了，即使不是我发起的约定。</p>

<p>几乎从来没有想过以后要干什么，初中毕业之后我在<a href="/html/my-childhood-with-internet.html">逃避</a>：“我不愿去幻想未来，原因恐怕是胆小。”高一的时候被问到以后想干什么，当时我又把这句话拿出来。再后来也几乎没有再考虑过这些问题，后来就已经高中毕业了。</p>

<p>就在那种什么也不知道也不在意的情况下高考结束了高中毕业了，从学校收拾完东西回家，其实早就已经没有东西要收拾了，然后随后终于按捺不住从租住的小屋逃离，回到老家，呆在苏州的六年就那么结束了。是的，对我来说这感受完全就是“逃离”。</p>

<p>尘归尘以及土归土。
再也不见以及再次相见。
抱歉的抱歉以及一切的一切。
黯淡无光的希望以及卑微凌乱的梦想。</p>]]></description>
          </item>
        
      
    
      
          <item>
            <title>《木中加油 2014》</title>
            <link>https://orzfly.com/html/muduhs-2014-the-video.html?lang=zh_CN</link>
            <guid isPermaLink="true">https://orzfly.com/html/muduhs-2014-the-video.html?lang=zh_CN</guid>
            <pubDate>Fri, 21 Feb 2014 00:00:00 +0000</pubDate>
            <author>Yeechan Lu</author>
            <description><![CDATA[<p></p>
<center><a href="/wp-content/uploads/sites/7/2014/02/Screenshot_2014-02-26-08-23-31.png" rel="lightbox[1266]"><img title="Screenshot_2014-02-26-08-23-31" class="aligncenter size-full" alt="image" src="/wp-content/uploads/sites/7/2014/02/Screenshot_2014-02-26-08-23-31.png?w=800"></a></center>

<p>作为木中的一个传统，每一年刚毕业了的同学都会给下一届高三在百日誓师的时候送上一段祝福。于是，这就是 2013 届的我们送给即将毕业的 2014 届。</p>

<p>事先说明，因为事先准备不充分和考虑不周，这次的歌曲远没有以前的好，每个人唱的调子都不一样，而且也真是为难了几个男生。不过，我想，即使歌唱的不好，我们的心情还是可以传达的。</p>

<h2>在线观看</h2>

<ul>
<li><a href="http://youtu.be/R1oxMy26ZKw">Youtube</a></li>
<li><a href="http://v.youku.com/v_show/id_XNjc1ODE5NTIw.html">优酷</a></li>
</ul>

<h2>歌词</h2>

<blockquote>
<p>有时候回忆只是一个入口<br>
水深15米 等候新陈更迭的等候<br>
一本一本 传看天下伊周<br>
而我忐忑<br>
师主任会不会站在窗口</p>

<p>那时候梦想就是没有尽头<br>
墨黑色水笔 构筑光明未来的结构<br>
一笔一笔 文字们看着我<br>
他们说大学会有更加美丽的邂逅</p>

<p>新同学最初是不说话呀微微笑<br>
聊得来的是意合情投<br>
一次次相遇 从初次相逢到长久的友谊<br>
哪些人 值得你一直等候</p>

<p>原谅我没能高山流水天涯海角陪你们走<br>
止不住愧疚 却还任性说出请属于我的要求<br>
多少人相信青春不朽 就有多少人不停奋斗<br>
都说友谊会历久弥深 友谊只三年怎么能够</p>

<p>你是我黑夜牵的手<br>
是我疲惫休憩的肩头<br>
是我四季擦身时 暖如春日的回眸<br>
三年的缘分 有你在心头</p>

<p>那一天独自路过学校门口<br>
任记忆悠悠 所有勾起回忆的所有<br>
一处一处 我们曾经幸福<br>
幸福是陪着你 单纯又青涩 往返食堂宿舍教学楼</p>

<p>三年后难免会说再见了挥挥手<br>
挥不去的是别绪离愁<br>
一次一回首 忍住眼泪走向下一个路口<br>
哪些人 让祝福伴你去留</p>

<p>其实我害怕拥抱害怕结束害怕我会远走<br>
坦率地承认 比起分别我更爱彼此一起奋斗<br>
我知道弥足珍贵曾经拥有 我更要不离不弃天长地久<br>
都说青春匆匆留不住 我用一生怀念不强求</p>

<p>涂鸦画满那白色校服<br>
三号门小木屋状元楼<br>
是我熟悉旋律里 灿若荧火的音符<br>
将过往欢乐 一遍遍弹奏</p>

<p>原谅我没能高山流水天涯海角陪你们走<br>
止不住愧疚 却还任性说出请属于我的要求<br>
多少人相信青春不朽 就有多少人不停奋斗<br>
你说这信念能有多久 一生够不够</p>

<p>其实我害怕拥抱害怕结束害怕我会远走<br>
坦率地承认 比起分别我更爱彼此一起奋斗<br>
我知道弥足珍贵曾经拥有 我更要不离不弃天长地久<br>
都说青春匆匆留不住 我用一生怀念不强求</p>

<p>木中之声回荡教学楼<br>
靠在栏杆暖阳的午后<br>
是我青春岁月里 时过境迁的温柔</p>

<p>沿蒹葭回溯 在昊镜上游</p>
</blockquote>

<h2>工作人员</h2>

<ul>
<li>活动组织：郑敏荣</li>
<li>风景摄影：陆一尘</li>
<li>视频制作：陆一尘, liqunsz</li>
<li>主题曲 ~ 木中友谊之歌 ~ 

<ul>
<li>原曲：ここにしか咲かない花</li>
<li>作曲：小渕健太郎</li>
<li>填词：盛嘉逸, 刘鹏铖, 张婷, 陆静涵, 严嘉悦</li>
<li>演唱：李雨婷, 王海宇, 王昕尧, 冯丽, 张天成, 陶聪聪, 倪一舟</li>
<li>混音：陆一尘</li>
</ul>
</li>
<li>3DCG ~ MuduHS in Minecraft ~ 

<ul>
<li>模型：陆一尘, 周嘉益, fux2, Soniji Lee, Owen K.</li>
</ul>
</li>
<li>鸣谢 

<ul>
<li>许伟程, 糜予曦, 常昊, 王子亭, 姬文翔, Peter Xin, Windy Whiterock, LBQ, Shiromi Z., Seiran A., Go Misaki</li>
<li>URPGs.com, NewCGer.com, YouKaze.com</li>
<li>(null), ネコクンプロジェクト</li>
</ul>
</li>
</ul>

<h2>资源下载</h2>

<p>诸如音乐和 Minecraft 地图文件，将会在稍后提供下载。</p>

<p>事实上，木中的 Minecraft 地图距离完工还有很长的路要走，这也是为什么这次视频中动画的部分只出现在了末尾，短暂掠过，角度还很局限试图回避尚未建造完毕的地方。我们会继续努力完成它。</p>]]></description>
          </item>
        
      
    
      
          <item>
            <title>我的浏览器地址栏中的 A – Z（2014）</title>
            <link>https://orzfly.com/html/my-browser-address-bar-2014.html?lang=zh_CN</link>
            <guid isPermaLink="true">https://orzfly.com/html/my-browser-address-bar-2014.html?lang=zh_CN</guid>
            <pubDate>Sat, 04 Jan 2014 00:00:00 +0000</pubDate>
            <author>Yeechan Lu</author>
            <description><![CDATA[<p><div lang="zh_CN">
前略，天国的 <a href="/html/my-browser-address-bar-2013.html">2013 君</a>。最近常用的浏览器是 Google Chrome (Windows &amp; Android) 娘。
</div><div lang="en">
Subsequent to <a href="/html/my-browser-address-bar-2013.html">the last post in 2013</a>, I mainly use Google Chrome (Windows &amp; Android).
</div></p>

<ul>
<li>
<strong>A</strong>ppinn.com</li>
<li>
<strong>B</strong>angumi.tv</li>
<li>
<strong>C</strong>omputingforgood.org/my-stats</li>
<li>
<strong>D</strong>igitalocean.com</li>
<li>
<strong>E</strong>vernote.com</li>
<li>
<strong>F</strong>reehao123.com</li>
<li>
<strong>G</strong>it.miv.im</li>
<li>
<strong>H</strong>ostker.com</li>
<li>
<strong>I</strong>cardyou.com</li>
<li>
<strong>J</strong>d.com</li>
<li>
<strong>K</strong>.ripplecn.org</li>
<li>
<strong>L</strong>inode.com</li>
<li>
<strong>M</strong>ail.google.com/mail/u/0/</li>
<li>
<strong>N</strong>ame.com/pricing</li>
<li>
<strong>O</strong>rzfly.com</li>
<li>
<strong>P</strong>an.baidu.com</li>
<li>
<strong>Q</strong>ingcloud.com</li>
<li>
<strong>R</strong>eader.miv.im</li>
<li>
<strong>S</strong>tore.steampowered.com</li>
<li>
<strong>T</strong>aobao.com</li>
<li>
<strong>U</strong>rpgs.com</li>
<li>
<strong>V</strong>2ex.com</li>
<li>
<strong>W</strong>orldcommunitygrid.org/ms/viewMyMemberPage.do</li>
<li>
<strong>X</strong>iami.com</li>
<li>
<strong>Y</strong>outube.com</li>
<li>
<strong>Z</strong>.btc123.com</li>
</ul>

<p><div lang="zh_CN">
我越来越觉得每过一段时间看一看浏览器地址栏中的 A~Z 是一件多么有意义的事情。你好，2014。
</div><div lang="en">
I found it’s wonderful into look back to the A-Z in my browser these days. Hello 2014!
</div></p>]]></description>
          </item>
        
      
    
      
          <item>
            <title>阿里云服务器文件 swap 无法开机自动加载</title>
            <link>https://orzfly.com/html/aliyun-swapfile-init.html?lang=zh_CN</link>
            <guid isPermaLink="true">https://orzfly.com/html/aliyun-swapfile-init.html?lang=zh_CN</guid>
            <pubDate>Fri, 29 Nov 2013 00:00:00 +0000</pubDate>
            <author>Yeechan Lu</author>
            <description><![CDATA[<p>默认的系统镜像里 /etc/rc.local 有一行 <code>swapoff -a</code>，删掉即可。<del datetime="2013-11-28T18:15:43+00:00">阿里云你要不要这么贱！</del></p>

<p>后来他们客服给我了这么个说法：</p>

<blockquote>
<p>您好，由于云服务器默认没有设置swap，所以不会自动加载，由于阿里云采用分布式存储，为了保证数据安全，一份数据实际写3份，无法达到传统磁盘io，所以不建议使用swap，避免对io性能造成影响~ <small><a href="http://weibo.com/1318345717/AkUCHAobj">阿里云客户满意中心</a></small></p>
</blockquote>]]></description>
          </item>
        
      
    
      
          <item>
            <title>Windows Server 2008/2012 (R2) + NVIDIA Optimus 笔记本显卡</title>
            <link>https://orzfly.com/html/windows-server-2008-2012-r2-nvidia-optimus.html?lang=zh_CN</link>
            <guid isPermaLink="true">https://orzfly.com/html/windows-server-2008-2012-r2-nvidia-optimus.html?lang=zh_CN</guid>
            <pubDate>Sat, 23 Nov 2013 00:00:00 +0000</pubDate>
            <author>Yeechan Lu</author>
            <description><![CDATA[<p>NVIDIA Optimus 架构的显卡在 Windows Server 系统上无法正常工作，就算是强制使用也没有反应。其实很简单，我们都知道这驱动需要使用 AppInit_DLL 这东西，然后 Windows Server 系统默认要求这个东西必须签名，而在桌面系统上是不需要签名的，所以 NVIDIA 的驱动的那个 DLL 并没有签名。</p>

<p>所以事实上很简单，改一下注册表呗……</p>
<div class="fist-file">
  <div class="fist-data">
    <div class="file-data">
      <table cellpadding="0" cellspacing="0" class="lines highlight">
        <tbody><tr>
          <td class="line-numbers" width="1%">
            <span class="line-number">1</span>
            <span class="line-number">2</span>
            <span class="line-number">3</span>
            <span class="line-number">4</span>
            <span class="line-number">5</span>
          </td>
          <td class="line-data">
            <pre class="line-pre"><div class="line"><span class="k">[</span><span class="nb">HKEY_LOCAL_MACHINE</span><span class="k">\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows]</span>
</div><div class="line"><span class="na">"RequireSignedAppInit_DLLs"</span><span class="o">=</span><span class="nv">dword</span><span class="p">:</span><span class="m">00000000</span>
</div><div class="line">
</div><div class="line"><span class="err">[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows</span> <span class="err">NT\CurrentVersion\Windows]</span> 
</div><div class="line"><span class="na">"RequireSignedAppInit_DLLs"</span><span class="o">=</span><span class="nv">dword</span><span class="p">:</span><span class="m">00000000</span>
</div></pre>
          </td>
        </tr></tbody>
      </table>
    </div>
  </div>
  
</div>

<p>我跟你说改完之后连重启都不需要重开下程序就能用了……</p>

<p>为什么要在笔记本上用服务器系统这个问题不需要过多讨论，另外这方法是<a href="http://www.win2008workstation.com/forum/viewtopic.php?f=51&amp;t=2216">这里</a>看来的。</p>]]></description>
          </item>
        
      
    
      
          <item>
            <title>在 Interactive Ruby (irb) 中清空屏幕</title>
            <link>https://orzfly.com/html/clear-the-irb-console-screen.html?lang=zh_CN</link>
            <guid isPermaLink="true">https://orzfly.com/html/clear-the-irb-console-screen.html?lang=zh_CN</guid>
            <pubDate>Sat, 19 Oct 2013 00:00:00 +0000</pubDate>
            <author>Yeechan Lu</author>
            <description><![CDATA[<p><div lang="zh_CN">
因为强迫症<del>雷达喵</del>的原因，于是有了这篇文章。
</div></p>
<div class="fist-file">
  <div class="fist-data">
    <div class="file-data">
      <table cellpadding="0" cellspacing="0" class="lines highlight">
        <tbody><tr>
          <td class="line-numbers" width="1%">
            <span class="line-number">1</span>
          </td>
          <td class="line-data">
            <pre class="line-pre"><div class="line"><span class="o">-&gt;</span><span class="p">(</span><span class="n">a</span><span class="p">,</span><span class="n">b</span><span class="p">,</span><span class="n">c</span><span class="p">){</span><span class="n">x</span><span class="o">=</span><span class="n">a</span><span class="o">.</span><span class="n">method</span><span class="p">(</span><span class="n">b</span><span class="p">);</span><span class="n">a</span><span class="o">.</span><span class="n">send</span><span class="p">(</span><span class="n">c</span><span class="p">,</span><span class="n">b</span><span class="p">){</span><span class="nb">send</span> <span class="n">c</span><span class="p">,</span><span class="n">b</span><span class="p">,</span><span class="o">&amp;</span><span class="n">x</span><span class="p">;</span><span class="kp">false</span><span class="p">};</span><span class="nb">print</span><span class="s2">"</span><span class="se">\e</span><span class="s2">[2J</span><span class="se">\e</span><span class="s2">[H </span><span class="se">\e</span><span class="s2">[D"</span><span class="p">}</span><span class="o">[</span><span class="n">irb_context</span><span class="p">,</span><span class="ss">:echo?</span><span class="p">,</span><span class="ss">:define_singleton_method</span><span class="o">]</span>
</div></pre>
          </td>
        </tr></tbody>
      </table>
    </div>
  </div>
  <div class="fist-meta">Windows / Linux, <span lang="zh_CN">无回显无空行</span><span lang="en">w/o echo and empty lines</span></div>
</div>

<p><div lang="zh_CN">
这玩意儿可以将 IRB 屏幕清理地干干净净，既没有空行也没有 =&gt; nil。在 Linux/Windows 上都测试通过。
</div><div lang="en">
This will fully clear your IRB screen, with no extra empty lines and “=&gt; nil” stuff. Tested on Linux/Windows.
</div></p>

<hr>

<p><div lang="zh_CN">
这一行可以展开成这样：
</div><div lang="en">
This one-liner could be expanded as:
</div></p>
<div class="fist-file">
  <div class="fist-data">
    <div class="file-data">
      <table cellpadding="0" cellspacing="0" class="lines highlight">
        <tbody><tr>
          <td class="line-numbers" width="1%">
            <span class="line-number">1</span>
            <span class="line-number">2</span>
            <span class="line-number">3</span>
            <span class="line-number">4</span>
            <span class="line-number">5</span>
            <span class="line-number">6</span>
            <span class="line-number">7</span>
            <span class="line-number">8</span>
          </td>
          <td class="line-data">
            <pre class="line-pre"><div class="line"><span class="nb">lambda</span> <span class="p">{</span>
</div><div class="line">  <span class="n">original_echo</span> <span class="o">=</span> <span class="n">irb_context</span><span class="o">.</span><span class="n">method</span><span class="p">(</span><span class="ss">:echo?</span><span class="p">)</span>
</div><div class="line">  <span class="n">irb_context</span><span class="o">.</span><span class="n">send</span><span class="p">(</span><span class="ss">:define_singleton_method</span><span class="p">,</span> <span class="ss">:echo?</span><span class="p">)</span> <span class="p">{</span>
</div><div class="line">    <span class="nb">send</span> <span class="ss">:define_singleton_method</span><span class="p">,</span> <span class="ss">:echo?</span><span class="p">,</span> <span class="o">&amp;</span><span class="n">original_echo</span>
</div><div class="line">    <span class="kp">false</span>
</div><div class="line">  <span class="p">}</span>
</div><div class="line">  <span class="nb">print</span> <span class="s2">"</span><span class="se">\e</span><span class="s2">[2J</span><span class="se">\e</span><span class="s2">[H </span><span class="se">\e</span><span class="s2">[D"</span>
</div><div class="line"><span class="p">}</span><span class="o">.</span><span class="n">call</span>
</div></pre>
          </td>
        </tr></tbody>
      </table>
    </div>
  </div>
  <div class="fist-meta">Windows / Linux, <span lang="zh_CN">无回显无空行（展开）</span><span lang="en">w/o echo and empty lines (expanded)</span></div>
</div>

<p><div lang="zh_CN">
这儿用了不少黑科技呢……</p>

<p>首先，irb 会调用 <code>echo?</code> 来判断是否应该回显。我这里先把他存起来，用一个调用之后会恢复他的函数覆盖。当然，覆盖用的函数会返回 false 所以 irb 就不会回显结果了。</p>

<p>然后，打印了几个 ANSI 控制字符。<code>\e[2J</code> 用来清屏，<code>\e[H</code> 把光标移动到左上角。<code>&nbsp;\e[D</code> 打印一个空格再马上退回光标，这是用来解决 Windows 上奇怪问题的。</p>

<p>总而言之，谁没事会打这么多来清屏啊……不过，把他存进你的 <code>.irbrc</code> 里倒是不错。
</div><div lang="en">
This uses lots of tricks.</p>

<p>Firstly, irb will call <code>echo?</code> to check if the result should be printed. I saved the method, then redefined with a method which restores the definition but returns false so irb will not echo the result.</p>

<p>Secondly, I printed some ANSI control chars. <code>\e[2J</code> will clean the screen and <code>\e[H</code> will move the cursor to the upper left position of the screen. <code>&nbsp;\e[D</code> will print a space and then move back the cursor while this is a workaround for something strange on Windows.</p>

<p>Finally this is kind of not practical at all except you are saving this code in your <code>.irbrc</code>.
</div></p>

<hr>

<p><div lang="zh_CN">
为了干掉空行，确实挺麻烦。但要是只想干掉回显倒是很简单。
</div><div lang="en">
Whilst it needs really a lot to skip the empty line, it's easy to omit the echo only.
</div></p>
<div class="fist-file">
  <div class="fist-data">
    <div class="file-data">
      <table cellpadding="0" cellspacing="0" class="lines highlight">
        <tbody><tr>
          <td class="line-numbers" width="1%">
            <span class="line-number">1</span>
          </td>
          <td class="line-data">
            <pre class="line-pre"><div class="line"><span class="o">-&gt;</span><span class="p">(</span><span class="n">x</span><span class="p">){</span><span class="k">def</span> <span class="nc">x</span><span class="o">.</span><span class="nf">inspect</span><span class="p">;</span><span class="nb">self</span><span class="p">;</span><span class="k">end</span><span class="p">;</span><span class="n">x</span><span class="p">}</span><span class="o">[</span><span class="s2">"</span><span class="se">\e</span><span class="s2">[H</span><span class="se">\e</span><span class="s2">[2J"</span><span class="o">]</span>
</div></pre>
          </td>
        </tr></tbody>
      </table>
    </div>
  </div>
  <div class="fist-meta">Windows / Linux <span lang="zh_CN">无回显有空行</span><span lang="en">w/o echo but w/ empty lines</span></div>
</div>

<p><div lang="zh_CN">
这一行可以展开成这样：
</div><div lang="en">
This one-liner could be expanded as:
</div></p>
<div class="fist-file">
  <div class="fist-data">
    <div class="file-data">
      <table cellpadding="0" cellspacing="0" class="lines highlight">
        <tbody><tr>
          <td class="line-numbers" width="1%">
            <span class="line-number">1</span>
            <span class="line-number">2</span>
            <span class="line-number">3</span>
            <span class="line-number">4</span>
            <span class="line-number">5</span>
            <span class="line-number">6</span>
            <span class="line-number">7</span>
          </td>
          <td class="line-data">
            <pre class="line-pre"><div class="line"><span class="nb">lambda</span> <span class="p">{</span>
</div><div class="line">  <span class="n">x</span> <span class="o">=</span> <span class="s2">"</span><span class="se">\e</span><span class="s2">[H</span><span class="se">\e</span><span class="s2">[2J"</span>
</div><div class="line">  <span class="k">def</span> <span class="nc">x</span><span class="o">.</span><span class="nf">inspect</span>
</div><div class="line">    <span class="nb">self</span>
</div><div class="line">  <span class="k">end</span>
</div><div class="line">  <span class="n">x</span>
</div><div class="line"><span class="p">}</span><span class="o">.</span><span class="n">call</span>
</div></pre>
          </td>
        </tr></tbody>
      </table>
    </div>
  </div>
  <div class="fist-meta">Windows / Linux <span lang="zh_CN">无回显有空行（展开）</span><span lang="en">w/o echo but w/ empty lines (expanded)</span></div>
</div>

<p><div lang="zh_CN">
<del>好了雷达喵你玩儿蛋去。</del>
</div></p>

<hr>

<p><div lang="en">
By the way, you can read this <a href="http://stackoverflow.com/a/19467325/2724079">ruby – How Do You Clear The IRB Console?</a> on Stack Overflow.
</div><div lang="zh_CN">
然后以下是对 <a href="http://stackoverflow.com/questions/116593/how-do-you-clear-the-irb-console/116614">ruby – How Do You Clear The IRB Console? – Stack Overflow</a> 的部分粗糙翻译。</p>

<p><a href="http://stackoverflow.com/q/116593/2724079">楼主 John Topley</a>：你们怎么在 IRB 里清屏？</p>

<p><a href="http://stackoverflow.com/a/116595/2724079">106 票 John Topley</a>：在 <em>Mac OS X</em> 或 <em>Linux</em> 上你可以用 <code>Ctrl + L</code> 来清空屏幕。</p>

<p><a href="http://stackoverflow.com/a/116603/2724079">29 票 Ben Hoffstein</a>：<em>Windows</em> 里，把这个代码丢在 <code>%userprofile%\.irbrc</code> 里：</p>
<div class="fist-file">
  <div class="fist-data">
    <div class="file-data">
      <table cellpadding="0" cellspacing="0" class="lines highlight">
        <tbody><tr>
          <td class="line-numbers" width="1%">
            <span class="line-number">1</span>
            <span class="line-number">2</span>
            <span class="line-number">3</span>
          </td>
          <td class="line-data">
            <pre class="line-pre"><div class="line"><span class="k">def</span> <span class="nf">cls</span>
</div><div class="line">  <span class="nb">system</span><span class="p">(</span><span class="s1">'cls'</span><span class="p">)</span>
</div><div class="line"><span class="k">end</span>
</div></pre>
          </td>
        </tr></tbody>
      </table>
    </div>
  </div>
  
</div>

<p><a href="http://stackoverflow.com/a/8402819/2724079">11 票 TW Scannell</a>：在 <em>Ubuntu 11.10</em> 上 <code>clear</code> 差不多就行了，只是你会看到 <code>=&gt; true</code>，把一切搞得很乱。  </p>
<div class="fist-file">
  <div class="fist-data">
    <div class="file-data">
      <table cellpadding="0" cellspacing="0" class="lines highlight">
        <tbody><tr>
          <td class="line-numbers" width="1%">
            <span class="line-number">1</span>
          </td>
          <td class="line-data">
            <pre class="line-pre"><div class="line">ruby-1.9.2-p290 :007 &gt; system 'clear'
</div></pre>
          </td>
        </tr></tbody>
      </table>
    </div>
  </div>
  
</div>
<div class="fist-file">
  <div class="fist-data">
    <div class="file-data">
      <table cellpadding="0" cellspacing="0" class="lines highlight">
        <tbody><tr>
          <td class="line-numbers" width="1%">
            <span class="line-number">1</span>
            <span class="line-number">2</span>
          </td>
          <td class="line-data">
            <pre class="line-pre"><div class="line">=&gt; true
</div><div class="line">ruby-1.9.2-p290 :007 &gt;
</div></pre>
          </td>
        </tr></tbody>
      </table>
    </div>
  </div>
  
</div>

<p><a href="http://stackoverflow.com/a/116614/2724079">8 票 AShelly</a>：在 <em>*nix</em> 上 <code>`clear`</code> 就行了。有趣的是，在 <em>Windows</em> 上用 <code>system 'cls'</code> 就行，<code>`clear`</code> 却不行。</p>

</div>]]></description>
          </item>
        
      
    
      
          <item>
            <title>Ruby 里 set_trace_func 歪曲真相的欺骗性行为</title>
            <link>https://orzfly.com/html/set_trace_func.html?lang=zh_CN</link>
            <guid isPermaLink="true">https://orzfly.com/html/set_trace_func.html?lang=zh_CN</guid>
            <pubDate>Tue, 03 Sep 2013 00:00:00 +0000</pubDate>
            <author>Yeechan Lu</author>
            <description><![CDATA[<p><div lang="en">
<i class="fa fa-exclamation-triangle"></i> <strong>This is a translation of <a href="http://t-a-w.blogspot.jp/2007/04/settracefunc-smoke-and-mirrors.html">set_trace_func, smoke and mirrors</a> which was originally written in English thus the original version is not available on my blog.</strong>
</div><div lang="zh_CN">
<i class="fa fa-info-circle"></i> <strong>本文是对 <a href="http://t-a-w.blogspot.jp/2007/04/settracefunc-smoke-and-mirrors.html">set_trace_func, smoke and mirrors</a> 的粗略翻译，如有错误请务必指正。</strong>
</div></p>

<p>Ruby 解释器提供了可用于追踪代码执行的事件钩子。用 <code>set_trace_func(some_proc)</code> 可以设置钩子，用 <code>set_trace_func(nil)</code> 卸载钩子。这个东西，有时候甚至远比基于单步和断点的调试器有用。</p>

<p>Ruby 会追踪这 8 种事件：</p>

<dl>
  <dt>line</dt>
  <dd>文件或行改变</dd>
  <dt>class</dt>
  <dd>模块或类定义开始</dd>
  <dt>end</dt>
  <dd>模块或类定义结束</dd>
  <dt>call</dt>
  <dd>Ruby 方法调用</dd>
  <dt>return</dt>
  <dd>Ruby 方法返回</dd>
  <dt>c-call</dt>
  <dd>C 方法调用</dd>
  <dt>c-return</dt>
  <dd>C 方法返回</dd>
  <dt>raise</dt>
  <dd>异常抛出</dd>
</dl>

<p>并不是所有事件都会被追踪，例如设置和读取变量（局部、全局、实例或者类变量）就不行。</p>
<div class="fist-file">
  <div class="fist-data">
    <div class="file-data">
      <table cellpadding="0" cellspacing="0" class="lines highlight">
        <tbody><tr>
          <td class="line-numbers" width="1%">
            <span class="line-number">1</span>
            <span class="line-number">2</span>
            <span class="line-number">3</span>
            <span class="line-number">4</span>
            <span class="line-number">5</span>
            <span class="line-number">6</span>
            <span class="line-number">7</span>
            <span class="line-number">8</span>
            <span class="line-number">9</span>
          </td>
          <td class="line-data">
            <pre class="line-pre"><div class="line"><span class="nb">set_trace_func</span> <span class="nb">proc</span> <span class="p">{</span> <span class="o">|</span><span class="n">event</span><span class="p">,</span> <span class="n">file</span><span class="p">,</span> <span class="n">line</span><span class="p">,</span> <span class="nb">id</span><span class="p">,</span> <span class="nb">binding</span><span class="p">,</span> <span class="n">classname</span><span class="o">|</span>
</div><div class="line">  <span class="no">STDERR</span><span class="o">.</span><span class="n">printf</span> <span class="s2">"%8s %s:%-2d %10s %8s</span><span class="se">\n</span><span class="s2">"</span><span class="p">,</span> <span class="n">event</span><span class="p">,</span> <span class="n">file</span><span class="p">,</span> <span class="n">line</span><span class="p">,</span> <span class="nb">id</span><span class="p">,</span> <span class="n">classname</span>
</div><div class="line"><span class="p">}</span>
</div><div class="line">
</div><div class="line"><span class="vi">@welcome</span>  <span class="o">=</span> <span class="s2">"Hello"</span>
</div><div class="line"><span class="n">separator</span> <span class="o">=</span> <span class="s2">", "</span>
</div><div class="line"><span class="vg">$object</span>   <span class="o">=</span> <span class="s2">"world"</span>
</div><div class="line"><span class="vc">@@excl</span>    <span class="o">=</span> <span class="s2">"!"</span>
</div><div class="line"><span class="nb">puts</span><span class="p">(</span><span class="vi">@welcome</span> <span class="o">+</span> <span class="n">separator</span> <span class="o">+</span> <span class="vg">$object</span> <span class="o">+</span> <span class="vc">@@excl</span><span class="p">)</span>
</div></pre>
          </td>
        </tr></tbody>
      </table>
    </div>
  </div>
  <div class="fist-meta"><strong>example-1.rb</strong></div>
</div>
<div class="fist-file">
  <div class="fist-data">
    <div class="file-data">
      <table cellpadding="0" cellspacing="0" class="lines highlight">
        <tbody><tr>
          <td class="line-numbers" width="1%">
            <span class="line-number">1</span>
            <span class="line-number">2</span>
            <span class="line-number">3</span>
            <span class="line-number">4</span>
            <span class="line-number">5</span>
            <span class="line-number">6</span>
            <span class="line-number">7</span>
            <span class="line-number">8</span>
            <span class="line-number">9</span>
            <span class="line-number">10</span>
            <span class="line-number">11</span>
            <span class="line-number">12</span>
            <span class="line-number">13</span>
            <span class="line-number">14</span>
            <span class="line-number">15</span>
            <span class="line-number">16</span>
            <span class="line-number">17</span>
            <span class="line-number">18</span>
          </td>
          <td class="line-data">
            <pre class="line-pre"><div class="line"><span class="gp">$</span> ./example-1.rb
</div><div class="line"><span class="go">    line ./example-1.rb:7                false</span>
</div><div class="line"><span class="go">    line ./example-1.rb:8                false</span>
</div><div class="line"><span class="go">    line ./example-1.rb:9                false</span>
</div><div class="line"><span class="go">    line ./example-1.rb:10               false</span>
</div><div class="line"><span class="go">    line ./example-1.rb:11               false</span>
</div><div class="line"><span class="go">  c-call ./example-1.rb:11          +   String</span>
</div><div class="line"><span class="go">c-return ./example-1.rb:11          +   String</span>
</div><div class="line"><span class="go">  c-call ./example-1.rb:11          +   String</span>
</div><div class="line"><span class="go">c-return ./example-1.rb:11          +   String</span>
</div><div class="line"><span class="go">  c-call ./example-1.rb:11          +   String</span>
</div><div class="line"><span class="go">c-return ./example-1.rb:11          +   String</span>
</div><div class="line"><span class="go">  c-call ./example-1.rb:11       puts   Kernel</span>
</div><div class="line"><span class="go">  c-call ./example-1.rb:11      write       IO</span>
</div><div class="line"><span class="go">c-return ./example-1.rb:11      write       IO</span>
</div><div class="line"><span class="go">  c-call ./example-1.rb:11      write       IO</span>
</div><div class="line"><span class="go">c-return ./example-1.rb:11      write       IO</span>
</div><div class="line"><span class="go">c-return ./example-1.rb:11       puts   Kernel</span>
</div></pre>
          </td>
        </tr></tbody>
      </table>
    </div>
  </div>
  
</div>

<p>例子中，<code>String#+</code> 运行了三次，<code>IO#write</code> 两次——第二次大概是输出换行符的。</p>

<p>Ruby 中很多东西很神奇并没有被转换为方法调用。这种东西的一种是字符串插值（<code>... #{ code } ...</code>），并没有被转换为 <code>String#+</code> 或是 <code>Array#join</code>，而是直接由解释器特别的处理。</p>
<div class="fist-file">
  <div class="fist-data">
    <div class="file-data">
      <table cellpadding="0" cellspacing="0" class="lines highlight">
        <tbody><tr>
          <td class="line-numbers" width="1%">
            <span class="line-number">1</span>
            <span class="line-number">2</span>
            <span class="line-number">3</span>
            <span class="line-number">4</span>
            <span class="line-number">5</span>
            <span class="line-number">6</span>
          </td>
          <td class="line-data">
            <pre class="line-pre"><div class="line"><span class="nb">set_trace_func</span> <span class="nb">proc</span> <span class="p">{</span> <span class="o">|</span><span class="n">event</span><span class="p">,</span> <span class="n">file</span><span class="p">,</span> <span class="n">line</span><span class="p">,</span> <span class="nb">id</span><span class="p">,</span> <span class="nb">binding</span><span class="p">,</span> <span class="n">classname</span><span class="o">|</span>
</div><div class="line">  <span class="no">STDERR</span><span class="o">.</span><span class="n">printf</span> <span class="s2">"%8s %s:%-2d %10s %8s</span><span class="se">\n</span><span class="s2">"</span><span class="p">,</span> <span class="n">event</span><span class="p">,</span> <span class="n">file</span><span class="p">,</span> <span class="n">line</span><span class="p">,</span> <span class="nb">id</span><span class="p">,</span> <span class="n">classname</span>
</div><div class="line"><span class="p">}</span>
</div><div class="line"><span class="vi">@welcome</span>  <span class="o">=</span> <span class="s2">"Hello"</span>
</div><div class="line"><span class="vg">$object</span>   <span class="o">=</span> <span class="s2">"world"</span>
</div><div class="line"><span class="nb">puts</span><span class="p">(</span><span class="s2">"</span><span class="si">#{</span><span class="vi">@welcome</span><span class="si">}</span><span class="s2">, </span><span class="si">#{</span><span class="vg">$object</span><span class="si">}</span><span class="se">\n</span><span class="s2">"</span><span class="p">)</span>
</div></pre>
          </td>
        </tr></tbody>
      </table>
    </div>
  </div>
  <div class="fist-meta"><strong>example-2.rb</strong></div>
</div>
<div class="fist-file">
  <div class="fist-data">
    <div class="file-data">
      <table cellpadding="0" cellspacing="0" class="lines highlight">
        <tbody><tr>
          <td class="line-numbers" width="1%">
            <span class="line-number">1</span>
            <span class="line-number">2</span>
            <span class="line-number">3</span>
            <span class="line-number">4</span>
            <span class="line-number">5</span>
            <span class="line-number">6</span>
            <span class="line-number">7</span>
            <span class="line-number">8</span>
          </td>
          <td class="line-data">
            <pre class="line-pre"><div class="line"><span class="gp">$</span> ./example-2.rb
</div><div class="line"><span class="go">    line ./example-2.rb:7                false</span>
</div><div class="line"><span class="go">    line ./example-2.rb:8                false</span>
</div><div class="line"><span class="go">    line ./example-2.rb:9                false</span>
</div><div class="line"><span class="go">  c-call ./example-2.rb:9        puts   Kernel</span>
</div><div class="line"><span class="go">  c-call ./example-2.rb:9       write       IO</span>
</div><div class="line"><span class="go">c-return ./example-2.rb:9       write       IO</span>
</div><div class="line"><span class="go">c-return ./example-2.rb:9        puts   Kernel</span>
</div></pre>
          </td>
        </tr></tbody>
      </table>
    </div>
  </div>
  
</div>

<p>同样，创建类并没有被转化为 <code>Class#new</code>，添加方法并没有被转换为 <code>Module#define_method</code>。幸运的是 Ruby 提供了特别的钩子让我们需要捕捉这些事件——当类创建时，其父类的 <code>inherited</code> 方法会被调用；当一个方法被添加时，Ruby 调用其类的 <code>method_added</code>。</p>
<div class="fist-file">
  <div class="fist-data">
    <div class="file-data">
      <table cellpadding="0" cellspacing="0" class="lines highlight">
        <tbody><tr>
          <td class="line-numbers" width="1%">
            <span class="line-number">1</span>
            <span class="line-number">2</span>
            <span class="line-number">3</span>
            <span class="line-number">4</span>
            <span class="line-number">5</span>
            <span class="line-number">6</span>
            <span class="line-number">7</span>
            <span class="line-number">8</span>
            <span class="line-number">9</span>
            <span class="line-number">10</span>
            <span class="line-number">11</span>
            <span class="line-number">12</span>
            <span class="line-number">13</span>
          </td>
          <td class="line-data">
            <pre class="line-pre"><div class="line"><span class="nb">set_trace_func</span> <span class="nb">proc</span> <span class="p">{</span> <span class="o">|</span><span class="n">event</span><span class="p">,</span> <span class="n">file</span><span class="p">,</span> <span class="n">line</span><span class="p">,</span> <span class="nb">id</span><span class="p">,</span> <span class="nb">binding</span><span class="p">,</span> <span class="n">classname</span><span class="o">|</span>
</div><div class="line">  <span class="no">STDERR</span><span class="o">.</span><span class="n">printf</span> <span class="s2">"%8s %s:%-2d %10s %8s</span><span class="se">\n</span><span class="s2">"</span><span class="p">,</span> <span class="n">event</span><span class="p">,</span> <span class="n">file</span><span class="p">,</span> <span class="n">line</span><span class="p">,</span> <span class="nb">id</span><span class="p">,</span> <span class="n">classname</span>
</div><div class="line"><span class="p">}</span>
</div><div class="line">
</div><div class="line"><span class="k">class</span> <span class="nc">Geolocation</span>
</div><div class="line">  <span class="k">def</span> <span class="nf">initialize</span><span class="p">(</span><span class="n">lat</span><span class="p">,</span> <span class="n">long</span><span class="p">)</span>
</div><div class="line">    <span class="vi">@lat</span>  <span class="o">=</span> <span class="n">lat</span>
</div><div class="line">    <span class="vi">@long</span> <span class="o">=</span> <span class="n">long</span>
</div><div class="line">  <span class="k">end</span>
</div><div class="line">  <span class="k">def</span> <span class="nf">to_s</span>
</div><div class="line">    <span class="s2">"&lt;</span><span class="si">#{</span><span class="vi">@lat</span><span class="si">}</span><span class="s2">, </span><span class="si">#{</span><span class="vi">@long</span><span class="si">}</span><span class="s2">&gt;"</span>
</div><div class="line">  <span class="k">end</span>
</div><div class="line"><span class="k">end</span>
</div></pre>
          </td>
        </tr></tbody>
      </table>
    </div>
  </div>
  <div class="fist-meta"><strong>example-3.rb</strong></div>
</div>
<div class="fist-file">
  <div class="fist-data">
    <div class="file-data">
      <table cellpadding="0" cellspacing="0" class="lines highlight">
        <tbody><tr>
          <td class="line-numbers" width="1%">
            <span class="line-number">1</span>
            <span class="line-number">2</span>
            <span class="line-number">3</span>
            <span class="line-number">4</span>
            <span class="line-number">5</span>
            <span class="line-number">6</span>
            <span class="line-number">7</span>
            <span class="line-number">8</span>
            <span class="line-number">9</span>
            <span class="line-number">10</span>
            <span class="line-number">11</span>
            <span class="line-number">12</span>
          </td>
          <td class="line-data">
            <pre class="line-pre"><div class="line"><span class="gp">$</span> ./example-3.rb
</div><div class="line"><span class="go">    line ./example-3.rb:7                false</span>
</div><div class="line"><span class="go">  c-call ./example-3.rb:7   inherited    Class</span>
</div><div class="line"><span class="go">c-return ./example-3.rb:7   inherited    Class</span>
</div><div class="line"><span class="go">   class ./example-3.rb:7                false</span>
</div><div class="line"><span class="go">    line ./example-3.rb:8                false</span>
</div><div class="line"><span class="go">  c-call ./example-3.rb:8  method_added   Module</span>
</div><div class="line"><span class="go">c-return ./example-3.rb:8  method_added   Module</span>
</div><div class="line"><span class="go">    line ./example-3.rb:12               false</span>
</div><div class="line"><span class="go">  c-call ./example-3.rb:12 method_added   Module</span>
</div><div class="line"><span class="go">c-return ./example-3.rb:12 method_added   Module</span>
</div><div class="line"><span class="go">     end ./example-3.rb:7                false</span>
</div></pre>
          </td>
        </tr></tbody>
      </table>
    </div>
  </div>
  
</div>

<p>如果我们想跟踪些有用的东西，不如先换一下输出格式。毕竟我们对跟踪执行过程感兴趣，通常来说文件及行号都没什么用，<code>return/c-return/end</code> 则应该用缩进代替。同时，相比类，我们更注重的是接收者（self）。</p>
<div class="fist-file">
  <div class="fist-data">
    <div class="file-data">
      <table cellpadding="0" cellspacing="0" class="lines highlight">
        <tbody><tr>
          <td class="line-numbers" width="1%">
            <span class="line-number">1</span>
            <span class="line-number">2</span>
            <span class="line-number">3</span>
            <span class="line-number">4</span>
            <span class="line-number">5</span>
            <span class="line-number">6</span>
            <span class="line-number">7</span>
            <span class="line-number">8</span>
            <span class="line-number">9</span>
            <span class="line-number">10</span>
            <span class="line-number">11</span>
            <span class="line-number">12</span>
            <span class="line-number">13</span>
            <span class="line-number">14</span>
            <span class="line-number">15</span>
            <span class="line-number">16</span>
            <span class="line-number">17</span>
            <span class="line-number">18</span>
            <span class="line-number">19</span>
            <span class="line-number">20</span>
            <span class="line-number">21</span>
            <span class="line-number">22</span>
            <span class="line-number">23</span>
            <span class="line-number">24</span>
            <span class="line-number">25</span>
            <span class="line-number">26</span>
            <span class="line-number">27</span>
            <span class="line-number">28</span>
            <span class="line-number">29</span>
          </td>
          <td class="line-data">
            <pre class="line-pre"><div class="line"><span class="vg">$indent</span> <span class="o">=</span> <span class="mi">0</span>
</div><div class="line"><span class="nb">set_trace_func</span> <span class="nb">proc</span> <span class="p">{</span> <span class="o">|</span><span class="n">event</span><span class="p">,</span> <span class="n">file</span><span class="p">,</span> <span class="n">line</span><span class="p">,</span> <span class="nb">id</span><span class="p">,</span> <span class="nb">binding</span><span class="p">,</span> <span class="n">classname</span><span class="o">|</span>
</div><div class="line">  <span class="k">if</span> <span class="n">event</span> <span class="o">==</span> <span class="s2">"line"</span>
</div><div class="line">    <span class="c1"># 忽略</span>
</div><div class="line">  <span class="k">elsif</span> <span class="sx">%w[return c-return end]</span><span class="o">.</span><span class="n">include?</span><span class="p">(</span><span class="n">event</span><span class="p">)</span>
</div><div class="line">    <span class="vg">$indent</span> <span class="o">-=</span> <span class="mi">2</span>
</div><div class="line">  <span class="k">else</span>
</div><div class="line">    <span class="k">if</span> <span class="n">event</span> <span class="o">==</span> <span class="s2">"class"</span>
</div><div class="line">      <span class="no">STDERR</span><span class="o">.</span><span class="n">printf</span> <span class="s2">"%*s%s %s</span><span class="se">\n</span><span class="s2">"</span><span class="p">,</span> <span class="vg">$indent</span><span class="p">,</span> <span class="s2">""</span><span class="p">,</span> <span class="n">event</span><span class="p">,</span> <span class="nb">eval</span><span class="p">(</span><span class="s2">"self"</span><span class="p">,</span> <span class="nb">binding</span><span class="p">)</span>
</div><div class="line">    <span class="k">else</span>
</div><div class="line">      <span class="no">STDERR</span><span class="o">.</span><span class="n">printf</span> <span class="s2">"%*s%s %s.%s</span><span class="se">\n</span><span class="s2">"</span><span class="p">,</span> <span class="vg">$indent</span><span class="p">,</span> <span class="s2">""</span><span class="p">,</span> <span class="n">event</span><span class="p">,</span> <span class="nb">eval</span><span class="p">(</span><span class="s2">"self"</span><span class="p">,</span> <span class="nb">binding</span><span class="p">),</span> <span class="nb">id</span>
</div><div class="line">    <span class="k">end</span>
</div><div class="line">    <span class="vg">$indent</span> <span class="o">+=</span> <span class="mi">2</span> <span class="k">if</span> <span class="sx">%w[call c-call class]</span><span class="o">.</span><span class="n">include?</span><span class="p">(</span><span class="n">event</span><span class="p">)</span>
</div><div class="line">  <span class="k">end</span>
</div><div class="line"><span class="p">}</span>
</div><div class="line">
</div><div class="line"><span class="k">class</span> <span class="nc">Geolocation</span>
</div><div class="line">  <span class="k">def</span> <span class="nf">initialize</span><span class="p">(</span><span class="n">lat</span><span class="p">,</span> <span class="n">long</span><span class="p">)</span>
</div><div class="line">    <span class="vi">@lat</span>  <span class="o">=</span> <span class="n">lat</span>
</div><div class="line">    <span class="vi">@long</span> <span class="o">=</span> <span class="n">long</span>
</div><div class="line">  <span class="k">end</span>
</div><div class="line">  <span class="k">def</span> <span class="nf">to_s</span>
</div><div class="line">    <span class="s2">"&lt;</span><span class="si">#{</span><span class="vi">@lat</span><span class="si">}</span><span class="s2">, </span><span class="si">#{</span><span class="vi">@long</span><span class="si">}</span><span class="s2">&gt;"</span>
</div><div class="line">  <span class="k">end</span>
</div><div class="line"><span class="k">end</span>
</div><div class="line">
</div><div class="line"><span class="n">a</span> <span class="o">=</span> <span class="no">Geolocation</span><span class="o">.</span><span class="n">new</span><span class="p">(</span><span class="mi">51</span><span class="o">.</span><span class="mi">12</span><span class="p">,</span> <span class="mi">17</span><span class="o">.</span><span class="mo">03</span><span class="p">)</span>
</div><div class="line"><span class="nb">puts</span> <span class="n">a</span>
</div><div class="line"><span class="nb">p</span> <span class="n">a</span>
</div></pre>
          </td>
        </tr></tbody>
      </table>
    </div>
  </div>
  <div class="fist-meta"><strong>example-4.rb</strong></div>
</div>
<div class="fist-file">
  <div class="fist-data">
    <div class="file-data">
      <table cellpadding="0" cellspacing="0" class="lines highlight">
        <tbody><tr>
          <td class="line-numbers" width="1%">
            <span class="line-number">1</span>
            <span class="line-number">2</span>
            <span class="line-number">3</span>
            <span class="line-number">4</span>
            <span class="line-number">5</span>
            <span class="line-number">6</span>
            <span class="line-number">7</span>
            <span class="line-number">8</span>
            <span class="line-number">9</span>
            <span class="line-number">10</span>
            <span class="line-number">11</span>
            <span class="line-number">12</span>
            <span class="line-number">13</span>
            <span class="line-number">14</span>
            <span class="line-number">15</span>
            <span class="line-number">16</span>
            <span class="line-number">17</span>
            <span class="line-number">18</span>
            <span class="line-number">19</span>
            <span class="line-number">20</span>
            <span class="line-number">21</span>
          </td>
          <td class="line-data">
            <pre class="line-pre"><div class="line"><span class="gp">$</span> ./example-4.rb &gt; /dev/null
</div><div class="line"><span class="go">c-call Object.inherited</span>
</div><div class="line"><span class="go">class Geolocation</span>
</div><div class="line"><span class="go">  c-call Geolocation.method_added</span>
</div><div class="line"><span class="go">  c-call Geolocation.method_added</span>
</div><div class="line"><span class="go">c-call Geolocation.new</span>
</div><div class="line"><span class="go">  call &lt;, &gt;.initialize</span>
</div><div class="line"><span class="go">c-call main.puts</span>
</div><div class="line"><span class="go">  call &lt;51.12, 17.03&gt;.to_s</span>
</div><div class="line"><span class="go">    c-call 51.12.to_s</span>
</div><div class="line"><span class="go">    c-call 17.03.to_s</span>
</div><div class="line"><span class="go">  c-call #&lt;IO:0xb7c80fc0&gt;.write</span>
</div><div class="line"><span class="go">  c-call #&lt;IO:0xb7c80fc0&gt;.write</span>
</div><div class="line"><span class="go">c-call main.p</span>
</div><div class="line"><span class="go">  c-call &lt;51.12, 17.03&gt;.inspect</span>
</div><div class="line"><span class="go">    c-call 17.03.inspect</span>
</div><div class="line"><span class="go">      c-call 17.03.to_s</span>
</div><div class="line"><span class="go">    c-call 51.12.inspect</span>
</div><div class="line"><span class="go">      c-call 51.12.to_s</span>
</div><div class="line"><span class="go">  c-call #&lt;IO:0xb7c80fc0&gt;.write</span>
</div><div class="line"><span class="go">  c-call #&lt;IO:0xb7c80fc0&gt;.write</span>
</div></pre>
          </td>
        </tr></tbody>
      </table>
    </div>
  </div>
  
</div>

<p>这里的输出又有点奇怪。在 <code>Geolocation#initialize</code> 开始时， <code>Geolocation#to_s</code> 就被追踪器调用，而不是在其有意义之后。这种情况下，我们一不小心就得到了垃圾 <code>&lt;, &gt;</code>。但是有些对象，在初始化之前被打印是会产生异常的。</p>
<div class="fist-file">
  <div class="fist-data">
    <div class="file-data">
      <table cellpadding="0" cellspacing="0" class="lines highlight">
        <tbody><tr>
          <td class="line-numbers" width="1%">
            <span class="line-number">1</span>
            <span class="line-number">2</span>
            <span class="line-number">3</span>
            <span class="line-number">4</span>
            <span class="line-number">5</span>
            <span class="line-number">6</span>
            <span class="line-number">7</span>
            <span class="line-number">8</span>
            <span class="line-number">9</span>
            <span class="line-number">10</span>
            <span class="line-number">11</span>
            <span class="line-number">12</span>
            <span class="line-number">13</span>
            <span class="line-number">14</span>
            <span class="line-number">15</span>
            <span class="line-number">16</span>
            <span class="line-number">17</span>
            <span class="line-number">18</span>
            <span class="line-number">19</span>
            <span class="line-number">20</span>
            <span class="line-number">21</span>
            <span class="line-number">22</span>
            <span class="line-number">23</span>
          </td>
          <td class="line-data">
            <pre class="line-pre"><div class="line"><span class="nb">require</span> <span class="s2">"complex"</span>
</div><div class="line">
</div><div class="line"><span class="vg">$indent</span> <span class="o">=</span> <span class="mi">0</span>
</div><div class="line"><span class="nb">set_trace_func</span> <span class="nb">proc</span> <span class="p">{</span> <span class="o">|</span><span class="n">event</span><span class="p">,</span> <span class="n">file</span><span class="p">,</span> <span class="n">line</span><span class="p">,</span> <span class="nb">id</span><span class="p">,</span> <span class="nb">binding</span><span class="p">,</span> <span class="n">classname</span><span class="o">|</span>
</div><div class="line">  <span class="k">if</span> <span class="n">event</span> <span class="o">==</span> <span class="s2">"line"</span>
</div><div class="line">    <span class="c1"># 忽略</span>
</div><div class="line">  <span class="k">elsif</span> <span class="sx">%w[return c-return end]</span><span class="o">.</span><span class="n">include?</span><span class="p">(</span><span class="n">event</span><span class="p">)</span>
</div><div class="line">    <span class="vg">$indent</span> <span class="o">-=</span> <span class="mi">2</span>
</div><div class="line">  <span class="k">else</span>
</div><div class="line">    <span class="n">obj</span> <span class="o">=</span> <span class="nb">eval</span><span class="p">(</span><span class="s2">"self"</span><span class="p">,</span> <span class="nb">binding</span><span class="p">)</span>
</div><div class="line">    <span class="k">if</span> <span class="n">event</span> <span class="o">==</span> <span class="s2">"class"</span>
</div><div class="line">      <span class="no">STDERR</span><span class="o">.</span><span class="n">printf</span> <span class="s2">"%*s%s %s</span><span class="se">\n</span><span class="s2">"</span><span class="p">,</span> <span class="vg">$indent</span><span class="p">,</span> <span class="s2">""</span><span class="p">,</span> <span class="n">event</span><span class="p">,</span> <span class="n">obj</span>
</div><div class="line">    <span class="k">else</span>
</div><div class="line">      <span class="n">obj</span> <span class="o">=</span> <span class="s2">"&lt;</span><span class="si">#{</span><span class="n">obj</span><span class="o">.</span><span class="n">class</span><span class="si">}</span><span class="s2">#</span><span class="si">#{</span><span class="n">obj</span><span class="o">.</span><span class="n">object_id</span><span class="si">}</span><span class="s2">&gt;"</span> <span class="k">if</span> <span class="nb">id</span> <span class="o">==</span> <span class="ss">:initialize</span>
</div><div class="line">      <span class="no">STDERR</span><span class="o">.</span><span class="n">printf</span> <span class="s2">"%*s%s %s.%s</span><span class="se">\n</span><span class="s2">"</span><span class="p">,</span> <span class="vg">$indent</span><span class="p">,</span> <span class="s2">""</span><span class="p">,</span> <span class="n">event</span><span class="p">,</span> <span class="n">obj</span><span class="p">,</span> <span class="nb">id</span>
</div><div class="line">    <span class="k">end</span>
</div><div class="line">    <span class="vg">$indent</span> <span class="o">+=</span> <span class="mi">2</span> <span class="k">if</span> <span class="sx">%w[call c-call class]</span><span class="o">.</span><span class="n">include?</span><span class="p">(</span><span class="n">event</span><span class="p">)</span>
</div><div class="line">  <span class="k">end</span>
</div><div class="line"><span class="p">}</span>
</div><div class="line">
</div><div class="line"><span class="n">a</span> <span class="o">=</span> <span class="no">Complex</span><span class="o">.</span><span class="n">new</span><span class="p">(</span><span class="mi">11</span><span class="o">.</span><span class="mi">0</span><span class="p">,</span> <span class="o">-</span><span class="mi">5</span><span class="o">.</span><span class="mi">0</span><span class="p">)</span>
</div><div class="line"><span class="n">b</span> <span class="o">=</span> <span class="no">Complex</span><span class="o">.</span><span class="n">new</span><span class="p">(</span><span class="mi">2</span><span class="o">.</span><span class="mi">0</span><span class="p">,</span> <span class="mi">13</span><span class="o">.</span><span class="mi">5</span><span class="p">)</span>
</div><div class="line"><span class="n">c</span> <span class="o">=</span> <span class="n">a</span> <span class="o">*</span> <span class="n">b</span>
</div></pre>
          </td>
        </tr></tbody>
      </table>
    </div>
  </div>
  <div class="fist-meta"><strong>example-5.rb</strong></div>
</div>
<div class="fist-file">
  <div class="fist-data">
    <div class="file-data">
      <table cellpadding="0" cellspacing="0" class="lines highlight">
        <tbody><tr>
          <td class="line-numbers" width="1%">
            <span class="line-number">1</span>
            <span class="line-number">2</span>
            <span class="line-number">3</span>
            <span class="line-number">4</span>
            <span class="line-number">5</span>
            <span class="line-number">6</span>
            <span class="line-number">7</span>
            <span class="line-number">8</span>
            <span class="line-number">9</span>
            <span class="line-number">10</span>
            <span class="line-number">11</span>
            <span class="line-number">12</span>
            <span class="line-number">13</span>
            <span class="line-number">14</span>
            <span class="line-number">15</span>
            <span class="line-number">16</span>
            <span class="line-number">17</span>
            <span class="line-number">18</span>
            <span class="line-number">19</span>
            <span class="line-number">20</span>
            <span class="line-number">21</span>
            <span class="line-number">22</span>
            <span class="line-number">23</span>
            <span class="line-number">24</span>
            <span class="line-number">25</span>
            <span class="line-number">26</span>
            <span class="line-number">27</span>
            <span class="line-number">28</span>
            <span class="line-number">29</span>
            <span class="line-number">30</span>
            <span class="line-number">31</span>
            <span class="line-number">32</span>
            <span class="line-number">33</span>
            <span class="line-number">34</span>
            <span class="line-number">35</span>
          </td>
          <td class="line-data">
            <pre class="line-pre"><div class="line"><span class="gp">$</span> ./example-5.rb
</div><div class="line"><span class="go">c-call Complex.new</span>
</div><div class="line"><span class="go">  call &lt;Complex#-605829048&gt;.initialize</span>
</div><div class="line"><span class="go">    c-call 11.0.kind_of?</span>
</div><div class="line"><span class="go">    c-call 11.0.kind_of?</span>
</div><div class="line"><span class="go">    c-call -5.0.kind_of?</span>
</div><div class="line"><span class="go">    c-call -5.0.kind_of?</span>
</div><div class="line"><span class="go">c-call Complex.new</span>
</div><div class="line"><span class="go">  call &lt;Complex#-605832038&gt;.initialize</span>
</div><div class="line"><span class="go">    c-call 2.0.kind_of?</span>
</div><div class="line"><span class="go">    c-call 2.0.kind_of?</span>
</div><div class="line"><span class="go">    c-call 13.5.kind_of?</span>
</div><div class="line"><span class="go">    c-call 13.5.kind_of?</span>
</div><div class="line"><span class="go">call 11.0-5.0i.*</span>
</div><div class="line"><span class="go">  c-call 2.0+13.5i.kind_of?</span>
</div><div class="line"><span class="go">  c-call 11.0.*</span>
</div><div class="line"><span class="go">  c-call -5.0.*</span>
</div><div class="line"><span class="go">  c-call 22.0.-</span>
</div><div class="line"><span class="go">  c-call 11.0.*</span>
</div><div class="line"><span class="go">  c-call -5.0.*</span>
</div><div class="line"><span class="go">  c-call 148.5.+</span>
</div><div class="line"><span class="go">  call 11.0-5.0i.Complex</span>
</div><div class="line"><span class="go">    c-call 138.5.==</span>
</div><div class="line"><span class="go">    call 89.5.real</span>
</div><div class="line"><span class="go">    call 138.5.imag</span>
</div><div class="line"><span class="go">    c-call 89.5.-</span>
</div><div class="line"><span class="go">    call 89.5.imag</span>
</div><div class="line"><span class="go">    call 138.5.real</span>
</div><div class="line"><span class="go">    c-call 0.+</span>
</div><div class="line"><span class="go">    c-call Complex.new</span>
</div><div class="line"><span class="go">      call &lt;Complex#-605842188&gt;.initialize</span>
</div><div class="line"><span class="go">        c-call 89.5.kind_of?</span>
</div><div class="line"><span class="go">        c-call 89.5.kind_of?</span>
</div><div class="line"><span class="go">        c-call 138.5.kind_of?</span>
</div><div class="line"><span class="go">        c-call 138.5.kind_of?</span>
</div></pre>
          </td>
        </tr></tbody>
      </table>
    </div>
  </div>
  
</div>

<p>很多平常难以发现的错误，自从有了 <code>set_trace_func</code>、<code>grep</code> 和一些处理日志的单行 Ruby 脚本的帮助，就变得微不足道了……</p>

<h2>歪曲真相的欺骗性行为</h2>

<p><code>set_trace_func</code> 不仅仅对调试有用，也适合做各种有趣的事情。<code>Binding.of_caller</code> 是用 <code>set_trace_func</code> 实现的，虽然已经不能用了。<a href="http://t-a-w.blogspot.jp/2006/11/magichelp-for-ruby.html">magic/help</a> 用了 <code>set_trace_func</code> 在 <code>irb</code> 中提供方便的帮助：</p>
<div class="fist-file">
  <div class="fist-data">
    <div class="file-data">
      <table cellpadding="0" cellspacing="0" class="lines highlight">
        <tbody><tr>
          <td class="line-numbers" width="1%">
            <span class="line-number">1</span>
            <span class="line-number">2</span>
            <span class="line-number">3</span>
            <span class="line-number">4</span>
            <span class="line-number">5</span>
            <span class="line-number">6</span>
            <span class="line-number">7</span>
            <span class="line-number">8</span>
            <span class="line-number">9</span>
            <span class="line-number">10</span>
            <span class="line-number">11</span>
            <span class="line-number">12</span>
            <span class="line-number">13</span>
            <span class="line-number">14</span>
            <span class="line-number">15</span>
          </td>
          <td class="line-data">
            <pre class="line-pre"><div class="line"><span class="go">irb&gt; help { STDERR.write }</span>
</div><div class="line"><span class="go">--------------------------------------------------------------- IO#write</span>
</div><div class="line"><span class="go">     ios.write(string)    =&gt; integer</span>
</div><div class="line"><span class="go">------------------------------------------------------------------------</span>
</div><div class="line"><span class="go">     Writes the given string to _ios_. The stream must be opened for</span>
</div><div class="line"><span class="go">     writing. If the argument is not a string, it will be converted to a</span>
</div><div class="line"><span class="go">     string using +to_s+. Returns the number of bytes written.</span>
</div><div class="line">
</div><div class="line"><span class="go">        count = $stdout.write( "This is a test\n" )</span>
</div><div class="line"><span class="go">        puts "That was #{count} bytes of data"</span>
</div><div class="line">
</div><div class="line"><span class="go">     _produces:_</span>
</div><div class="line">
</div><div class="line"><span class="go">        This is a test</span>
</div><div class="line"><span class="go">        That was 15 bytes of data</span>
</div></pre>
          </td>
        </tr></tbody>
      </table>
    </div>
  </div>
  
</div>

<p><code>magic/help</code> 通过设置一个 <code>set_trace_func</code> 钩子工作，执行传送过来的块，然后一遇到感兴趣的事件就停止执行。这意味着 <code>help { rm_rf "/" }</code> 完全是安全的。</p>

<p>我开发 <code>magic/help</code> 时遇到的一个难懂的问题是，方法没有按正确的参数个数调用时，追踪结果不一致。</p>

<p>对于 C 写的方法，就算显式声明了参数个数，Ruby 依然在 <code>ArgumentError.new</code> 前产生 <code>c-call</code>。另一方面，对于 Ruby 写的方法，<code>ArgumentError.new</code> 被调用，然后从函数 <code>return</code> 返回，而不产生 <code>call</code>。</p>

<p>要描述这个问题，我们来跟踪一下 C 方法 <code>STDERR.write</code>：</p>
<div class="fist-file">
  <div class="fist-data">
    <div class="file-data">
      <table cellpadding="0" cellspacing="0" class="lines highlight">
        <tbody><tr>
          <td class="line-numbers" width="1%">
            <span class="line-number">1</span>
            <span class="line-number">2</span>
            <span class="line-number">3</span>
            <span class="line-number">4</span>
            <span class="line-number">5</span>
            <span class="line-number">6</span>
            <span class="line-number">7</span>
            <span class="line-number">8</span>
            <span class="line-number">9</span>
            <span class="line-number">10</span>
            <span class="line-number">11</span>
          </td>
          <td class="line-data">
            <pre class="line-pre"><div class="line"><span class="go">c-call #&lt;IO:0xb7c98fa8&gt;.write</span>
</div><div class="line"><span class="go">  c-call ArgumentError.new</span>
</div><div class="line"><span class="go">    c-call #&lt;ArgumentError: ArgumentError&gt;.initialize</span>
</div><div class="line"><span class="go">    c-return #&lt;ArgumentError: wrong number of arguments (0 for 1)&gt;.initialize</span>
</div><div class="line"><span class="go">  c-return ArgumentError.new</span>
</div><div class="line"><span class="go">  c-call #&lt;ArgumentError: wrong number of arguments (0 for 1)&gt;.backtrace</span>
</div><div class="line"><span class="go">  c-return #&lt;ArgumentError: wrong number of arguments (0 for 1)&gt;.backtrace</span>
</div><div class="line"><span class="go">  c-call #&lt;ArgumentError: wrong number of arguments (0 for 1)&gt;.set_backtrace</span>
</div><div class="line"><span class="go">  c-return #&lt;ArgumentError: wrong number of arguments (0 for 1)&gt;.set_backtrace</span>
</div><div class="line"><span class="go">  raise #&lt;IO:0xb7c98fa8&gt;.write</span>
</div><div class="line"><span class="go">c-return #&lt;IO:0xb7c98fa8&gt;.write</span>
</div></pre>
          </td>
        </tr></tbody>
      </table>
    </div>
  </div>
  
</div>

<p>与此同时我们跟踪一下 Ruby 方法 <code>FileUtils.remove_entry</code>:</p>
<div class="fist-file">
  <div class="fist-data">
    <div class="file-data">
      <table cellpadding="0" cellspacing="0" class="lines highlight">
        <tbody><tr>
          <td class="line-numbers" width="1%">
            <span class="line-number">1</span>
            <span class="line-number">2</span>
            <span class="line-number">3</span>
            <span class="line-number">4</span>
            <span class="line-number">5</span>
            <span class="line-number">6</span>
            <span class="line-number">7</span>
            <span class="line-number">8</span>
            <span class="line-number">9</span>
            <span class="line-number">10</span>
            <span class="line-number">11</span>
            <span class="line-number">12</span>
          </td>
          <td class="line-data">
            <pre class="line-pre"><div class="line"><span class="gp">#</span> <span class="s2">"call FileUtils.remove_entry"</span> 永远不会产生！
</div><div class="line"><span class="go">  c-call ArgumentError.new</span>
</div><div class="line"><span class="go">    c-call #&lt;ArgumentError: ArgumentError&gt;.initialize</span>
</div><div class="line"><span class="go">    c-return #&lt;ArgumentError: wrong number of arguments (0 for 1)&gt;.initialize</span>
</div><div class="line"><span class="go">  c-return ArgumentError.new</span>
</div><div class="line"><span class="go">  c-call #&lt;ArgumentError: wrong number of arguments (0 for 1)&gt;.backtrace</span>
</div><div class="line"><span class="go">  c-return #&lt;ArgumentError: wrong number of arguments (0 for 1)&gt;.backtrace</span>
</div><div class="line"><span class="go">  c-call #&lt;ArgumentError: wrong number of arguments (0 for 1)&gt;.set_backtrace</span>
</div><div class="line"><span class="go">  c-return #&lt;ArgumentError: wrong number of arguments (0 for 1)&gt;.set_backtrace</span>
</div><div class="line"><span class="go">  raise FileUtils.remove_entry</span>
</div><div class="line"><span class="gp">#</span> <span class="s2">"return FileUtils.remove_entry"</span> 确实产生了。
</div><div class="line"><span class="go">return FileUtils.remove_entry</span>
</div></pre>
          </td>
        </tr></tbody>
      </table>
    </div>
  </div>
  
</div>

<p>两种情况下，参数都是在调用方法之前被检查的。<code>IO#write</code> 是定义为一个参数的方法：</p>
<div class="fist-file">
  <div class="fist-data">
    <div class="file-data">
      <table cellpadding="0" cellspacing="0" class="lines highlight">
        <tbody><tr>
          <td class="line-numbers" width="1%">
            <span class="line-number">1</span>
          </td>
          <td class="line-data">
            <pre class="line-pre"><div class="line"><span class="n">rb_define_method</span><span class="p">(</span><span class="n">rb_cIO</span><span class="p">,</span> <span class="s">"write"</span><span class="p">,</span> <span class="n">io_write</span><span class="p">,</span> <span class="mi">1</span><span class="p">);</span>
</div></pre>
          </td>
        </tr></tbody>
      </table>
    </div>
  </div>
  
</div>

<p>新版的 <code>magic/help</code> 也能处理这个情况了——如果首事件是 <code>c-call</code> 到 <code>ArgumentError.new</code>，<code>magic/help</code> 就等到首个 <code>return</code> 事件（如果有）而不是立刻放弃执行传来的块。快去<a href="http://taw.chaosforge.org/magic_help/">下载新版</a>，享受神奇的帮助吧。</p>

<h2>译者注</h2>

<p>与此同时，也推荐晴兰的<a href="http://seiran.mist.so/ruby/%e5%88%a9%e7%94%a8set_trace_func%e6%96%b9%e6%b3%95%e6%9d%a5%e5%88%a4%e6%96%ad%e4%b8%80%e4%b8%aa%e6%96%b9%e6%b3%95%e6%98%af%e5%90%a6%e8%a2%abalias%e8%bf%87.html">利用 set_trace_func 方法来判断一个方法是否被 alias 过</a>给您。</p>]]></description>
          </item>
        
      
    
      
          <item>
            <title>在 HomeZZ 的最后一日</title>
            <link>https://orzfly.com/html/last-day-at-homezz.html?lang=zh_CN</link>
            <guid isPermaLink="true">https://orzfly.com/html/last-day-at-homezz.html?lang=zh_CN</guid>
            <pubDate>Fri, 16 Aug 2013 00:00:00 +0000</pubDate>
            <author>Yeechan Lu</author>
            <description><![CDATA[<p><a href="/wp-content/uploads/sites/7/2013/09/The-Last-Day-at-HomeZZ-0-150x150.png"><img width="150" height="150" src="/wp-content/uploads/sites/7/2013/09/The-Last-Day-at-HomeZZ-0-150x150.png" class="attachment-thumbnail" alt="The Last Day at HomeZZ (0)"></a><a href="/wp-content/uploads/sites/7/2013/09/The-Last-Day-at-HomeZZ-1-150x150.png"><img width="150" height="150" src="/wp-content/uploads/sites/7/2013/09/The-Last-Day-at-HomeZZ-1-150x150.png" class="attachment-thumbnail" alt="The Last Day at HomeZZ (1)"></a><a href="/wp-content/uploads/sites/7/2013/09/The-Last-Day-at-HomeZZ-2-150x150.png"><img width="150" height="150" src="/wp-content/uploads/sites/7/2013/09/The-Last-Day-at-HomeZZ-2-150x150.png" class="attachment-thumbnail" alt="The Last Day at HomeZZ (2)"></a><a href="/wp-content/uploads/sites/7/2013/09/The-Last-Day-at-HomeZZ-3-150x150.png"><img width="150" height="150" src="/wp-content/uploads/sites/7/2013/09/The-Last-Day-at-HomeZZ-3-150x150.png" class="attachment-thumbnail" alt="The Last Day at HomeZZ (3)"></a><a href="/wp-content/uploads/sites/7/2013/09/The-Last-Day-at-HomeZZ-4-150x130.png"><img width="150" height="130" src="/wp-content/uploads/sites/7/2013/09/The-Last-Day-at-HomeZZ-4-150x130.png" class="attachment-thumbnail" alt="The Last Day at HomeZZ (4)"></a><a href="/wp-content/uploads/sites/7/2013/09/The-Last-Day-at-HomeZZ-5-150x150.png"><img width="150" height="150" src="/wp-content/uploads/sites/7/2013/09/The-Last-Day-at-HomeZZ-5-150x150.png" class="attachment-thumbnail" alt="The Last Day at HomeZZ (5)"></a><a href="/wp-content/uploads/sites/7/2013/09/The-Last-Day-at-HomeZZ-6-150x150.png"><img width="150" height="150" src="/wp-content/uploads/sites/7/2013/09/The-Last-Day-at-HomeZZ-6-150x150.png" class="attachment-thumbnail" alt="The Last Day at HomeZZ (6)"></a><a href="/wp-content/uploads/sites/7/2013/09/The-Last-Day-at-HomeZZ-7-150x150.png"><img width="150" height="150" src="/wp-content/uploads/sites/7/2013/09/The-Last-Day-at-HomeZZ-7-150x150.png" class="attachment-thumbnail" alt="The Last Day at HomeZZ (7)"></a><a href="/wp-content/uploads/sites/7/2013/09/The-Last-Day-at-HomeZZ-8-150x150.png"><img width="150" height="150" src="/wp-content/uploads/sites/7/2013/09/The-Last-Day-at-HomeZZ-8-150x150.png" class="attachment-thumbnail" alt="The Last Day at HomeZZ (8)"></a></p>]]></description>
          </item>
        
      
    
      
          <item>
            <title>无语的黄昏 &#8211; 序曲</title>
            <link>https://orzfly.com/html/wordless-dusk-overture.html?lang=zh_CN</link>
            <guid isPermaLink="true">https://orzfly.com/html/wordless-dusk-overture.html?lang=zh_CN</guid>
            <pubDate>Tue, 25 Jun 2013 00:00:00 +0000</pubDate>
            <author>Yeechan Lu</author>
            <description><![CDATA[<p>一段很长的时间已经过去，自从上次我在这里留下足迹。一个时代已经过去，自从许久以前的<a href="/html/freetalk-20110823.html">那声呐喊</a>。我甚至认为这是怨念，实际上不过只是矫情而已。</p>

<p>终于在两周前结束了一切，我不知是应宽慰或者反而更加难受。事情不断的重新想起，特别是最近被刻意压制的一些事情。就连过去的论坛上<a href="http://bbs.66rpg.com/thread-317061-1-1.html">也有</a>因为同样理由离去的人们回来。越来越多的事情不断让我唏嘘不已，例如手机或是电脑上即时通讯工具收到的图片文件夹，几千张图片掠过，我甚至还能想起来是什么时候什么事件什么人儿。</p>

<p>因为一个邪恶以及并不会有任何成效的东西我耽搁了多少事情？！一次次的承诺被推迟以及放弃，甚至还牵扯了他人的梦想。以及不断继续挖坑，伴随着挖坑的快感迎来的是更多的压力。我不止一次感到无力，因为有茫茫多的事情，即使得不到回报，事实上回报也并不是目的。</p>

<p>假期开始之前总是在设想要更加珍惜时间去填坑或者痛痛快快睡一觉，然而事实上总是虽然起早贪黑弄得十分疲倦却依然毫无进展。因为疲倦而不愿动笔，以及因为不知做什么却不去睡觉。我很好的用时差这个理由欺骗自己，可是无论如何又会又什么改变。</p>

<p>帖子的名字来源于过去的一本书，恐怕很少有人知道？甚至豆瓣读书上都找不到。然而我并没有看过这本书，只是喜欢这名字而已。</p>]]></description>
          </item>
        
      
    
      
          <item>
            <title>长满树的叶子</title>
            <link>https://orzfly.com/html/treey-leaf.html?lang=zh_CN</link>
            <guid isPermaLink="true">https://orzfly.com/html/treey-leaf.html?lang=zh_CN</guid>
            <pubDate>Sun, 28 Apr 2013 00:00:00 +0000</pubDate>
            <author>Yeechan Lu</author>
            <description><![CDATA[<h2>Letter</h2>

<blockquote>
<p>躲避，让事情变成这样  </p>

<p>什麽，之前其实我有很不想去遗忘的  </p>

<p>其实，那有怎样呢，很多都是借口  </p>

<p>怕，真的躲不过，即便有什么方法  </p>

<p>宁可去逆来顺受，不要再躲不过，却，还躲  </p>

<p>（差一点都成年了，差一点就不是后来的青春了）  </p>

<p>2013.4.25</p>
</blockquote>

<h2>FIN</h2>

<p>从 <a href="http://github.com/orzFly/Finkgo/">Finkgo</a> 到 <a href="https://github.com/NekoProject/NekoKun/blob/b38003bf2c02f15cbe5d47967127cc3ae2ed5658/NekoKun/Core/FormatProvider.cs#L20">NekoKun</a>，  </p>

<p>从<a href="http://www.douban.com/group/topic/12428411/">村上春树的猫城</a>到<a href="http://www.douban.com/photos/photo/977658033/">猫的天空之城</a>，  </p>

<p>无数的记忆，可是我写不下，因为只有 <a href="http://dearti.me/orzdive/2013/03">42</a>。</p>

<p>前些时候我去围观了那颗 <a href="/html/leafy-tree.html">Fuzzy Ginkgo</a>，  </p>

<p>再也找不到当年那种<a href="http://www.douban.com/photos/photo/978118479/">绿的感觉</a>。  </p>

<p>Q.E.D.</p>]]></description>
          </item>
        
      
    
      
          <item>
            <title>需要身份验证的签名图 —— 实为盗号</title>
            <link>https://orzfly.com/html/strange-http-basic-auth-image.html?lang=zh_CN</link>
            <guid isPermaLink="true">https://orzfly.com/html/strange-http-basic-auth-image.html?lang=zh_CN</guid>
            <pubDate>Wed, 10 Apr 2013 00:00:00 +0000</pubDate>
            <author>Yeechan Lu</author>
            <description><![CDATA[<p><a href="http://bbs.66rpg.com/forum.php?mod=viewthread&amp;tid=304907&amp;page=1">事件帖子</a>。</p>

<p>有人说 66RPG 有的页面忽然跑出需要授权的视窗（登入帐密的视窗）。十分蹊跷，于是在下感觉不妙。</p>

<p>（以下网址请勿访问，请勿填写任何真实账户资料）</p>

<p>在下发现用户 shinyshinyh 的签名中含有一张图片指向 http://universe33.duapp.com/auth.php?r=Please+Login+to+66rpg</p>

<p>在下用凭据 233:466 登录后，跳转到了 http://universe33.duapp.com/log.php?u=&amp;p=UGxlYXNlIExvZ2luIHRvIDY2cnBn&amp;c=&amp;i=MjMzPT40NjY=</p>
<div class="fist-file">
  <div class="fist-data">
    <div class="file-data">
      <table cellpadding="0" cellspacing="0" class="lines highlight">
        <tbody><tr>
          <td class="line-numbers" width="1%">
            <span class="line-number">1</span>
            <span class="line-number">2</span>
            <span class="line-number">3</span>
            <span class="line-number">4</span>
          </td>
          <td class="line-data">
            <pre class="line-pre"><div class="line"><span class="go">1.9.3-p327 :001 &gt; "UGxlYXNlIExvZ2luIHRvIDY2cnBn".unpack("m")</span>
</div><div class="line"><span class="go"> =&gt; ["Please Login to 66rpg"]</span>
</div><div class="line"><span class="go">1.9.3-p327 :002 &gt; "MjMzPT40NjY=".unpack("m")</span>
</div><div class="line"><span class="go"> =&gt; ["233=&amp;gt;466"]</span>
</div></pre>
          </td>
        </tr></tbody>
      </table>
    </div>
  </div>
  
</div>

<p>因此可以认为，这货是冲着盗号来的。</p>

<hr>

<p>世界真小我居然在半年后找到了肇事者。</p>

<blockquote>
<p>啊我居然看到了这个<br>
需要身份验证的签名图 —— 实为盗号<br>
OTL。我才不会说是我弄着玩的呢。<br>
结果一个都没钓到= =<br>
邮箱里全是233:466<br>
= =在乌云上看到案例想实践一下<br>
= =结果什么都没收获</p>
</blockquote>]]></description>
          </item>
        
      
    
      
    
      
    
      
    
      
    
      
    
      
    
      
    
      
    
      
    
      
    
      
    
      
    
      
    
      
    
      
    
      
    
      
    
      
    
      
    
      
    
      
    
      
    
      
    
      
    
      
    
      
    
      
    
      
    
      
    
      
    
      
    
      
    
      
    
      
    
      
    
      
    
      
    
      
    
      
    
      
    
      
    
      
    
      
    
      
    
      
    
      
    
      
    
      
    
      
    
      
    
      
    
      
    
      
    
      
    
      
    
      
    
      
    
      
    
      
    
      
    
      
    
      
    
      
    
      
    
      
    
      
    
      
    
      
    
      
    
      
    
      
    
      
    
      
    
      
    
      
    
      
    
      
    
      
    
      
    
      
    
      
    
      
    
      
    
      
    
      
    
      
    
      
    
      
    
      
    
      
    
      
    
      
    
      
    
      
    
      
    
      
    
      
    
      
    
      
    
      
    
      
    
      
    
      
    
      
    
      
    
      
    
      
    
      
    
      
    
      
    
      
    

  </channel>
</rss>
