chicken on 贺叶霜的树:III https://blog.heysh.xyz/feed/chicken/ Recent content in chicken on 贺叶霜的树:III Hugo -- gohugo.io zh-cn &copy;<a href="https://creativecommons.org/licenses/by-sa/4.0/deed.zh">CC BY-SA</a> Fri, 22 Jun 2012 06:32:32 +0000 关于BitMEX的杠杆 https://blog.heysh.xyz/2018/08/16/about-leverage/ Thu, 16 Aug 2018 20:35:30 +0800 https://blog.heysh.xyz/2018/08/16/about-leverage/ <p>在比特币降到6000$以下的时候,加密货币最忠实的信徒是怎样的心情?作为一个骑墙派,我不敢妄加揣测。不过,有一点是可以肯定的:把加密货币留在账户上然后去睡觉,神经衰弱的一系列症状大约会加重。</p> <p>所以<a href="https://www.bitmex.com/register/O3rmQq">BitMEX</a>(这里是个返利链接)用XBT计算盈亏就显得很有趣了:当比特币上涨的时候,大家都很开心;可是万一下跌的话,实际盈亏还要乘上汇率的缩水,一不小心就会得到双倍的悲伤。这种时候,理解账户数字的 <em>实际价值</em><sup class="footnote-ref" id="fnref:pizza"><a class="footnote" href="#fn:pizza">1</a></sup>,可能对控制风险有更为重要的价值。</p> <p>根据<a href="https://www.bitmex.com/app/pnlGuide">官方指南</a>,盈利的XBT数目可以这样计算:</p> <div class="highlight"><pre style="background-color:#f0f3f3;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-python" data-lang="python">win_BTC_long<span style="color:#555">=</span>(<span style="color:#f60">1</span><span style="color:#555">/</span>price_before<span style="color:#555">-</span><span style="color:#f60">1</span><span style="color:#555">/</span>price_after)<span style="color:#555">*</span>count <span style="color:#09f;font-style:italic">#做多</span> win_BTC_short<span style="color:#555">=</span>(<span style="color:#555">-</span><span style="color:#f60">1</span><span style="color:#555">/</span>price_before<span style="color:#555">+</span><span style="color:#f60">1</span><span style="color:#555">/</span>price_after)<span style="color:#555">*</span>count <span style="color:#09f;font-style:italic">#做空</span></code></pre></div> <p>那么,经过这部分操作之后,账户的最终价值是:</p> <div class="highlight"><pre style="background-color:#f0f3f3;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-python" data-lang="python">win_BTC_long<span style="color:#555">*</span>price_after<span style="color:#555">+</span>cash<span style="color:#555">/</span>price_before<span style="color:#555">*</span>price_after <span style="color:#09f;font-style:italic">#做多,或</span> win_BTC_short<span style="color:#555">*</span>price_after<span style="color:#555">+</span>cash<span style="color:#555">/</span>price_before<span style="color:#555">*</span>price_after <span style="color:#09f;font-style:italic">#做空</span></code></pre></div> <p>其中,<code>cash</code>是操作前账户的实际价值,<span class="math">\(cash*leverage=count\)</span>。</p> <p>例如,当价格从1000$升至1250$,或从1250$降至1000$时,选用不同杠杆的盈亏如下:</p> <table> <thead> <tr> <th>leverage</th> <th>作多,跌</th> <th>作多,涨</th> <th>作空,跌</th> <th>作空,涨</th> </tr> </thead> <tbody> <tr> <td>0.0</td> <td>800.0</td> <td>1250.0</td> <td>800.0</td> <td>1250.0</td> </tr> <tr> <td>0.1</td> <td>780.0</td> <td>1275.0</td> <td>820.0</td> <td>1225.0</td> </tr> <tr> <td>0.2</td> <td>760.0</td> <td>1300.0</td> <td>840.0</td> <td>1200.0</td> </tr> <tr> <td>0.3</td> <td>740.0</td> <td>1325.0</td> <td>860.0</td> <td>1175.0</td> </tr> <tr> <td>0.4</td> <td>720.0</td> <td>1350.0</td> <td>880.0</td> <td>1150.0</td> </tr> <tr> <td>0.5</td> <td>700.0</td> <td>1375.0</td> <td>900.0</td> <td>1125.0</td> </tr> <tr> <td>0.6</td> <td>680.0</td> <td>1400.0</td> <td>920.0</td> <td>1100.0</td> </tr> <tr> <td>0.7</td> <td>660.0</td> <td>1425.0</td> <td>940.0</td> <td>1075.0</td> </tr> <tr> <td>0.8</td> <td>640.0</td> <td>1450.0</td> <td>960.0</td> <td>1050.0</td> </tr> <tr> <td>0.9</td> <td>620.0</td> <td>1475.0</td> <td>980.0</td> <td>1025.0</td> </tr> <tr> <td>1.0</td> <td>600.0</td> <td>1500.0</td> <td>1000.0</td> <td>1000.0</td> </tr> <tr> <td>1.1</td> <td>580.0</td> <td>1525.0</td> <td>1020.0</td> <td>975.0</td> </tr> <tr> <td>1.2</td> <td>560.0</td> <td>1550.0</td> <td>1040.0</td> <td>950.0</td> </tr> <tr> <td>1.3</td> <td>540.0</td> <td>1575.0</td> <td>1060.0</td> <td>925.0</td> </tr> <tr> <td>1.4</td> <td>520.0</td> <td>1600.0</td> <td>1080.0</td> <td>900.0</td> </tr> <tr> <td>1.5</td> <td>500.0</td> <td>1625.0</td> <td>1100.0</td> <td>875.0</td> </tr> <tr> <td>1.6</td> <td>480.0</td> <td>1650.0</td> <td>1120.0</td> <td>850.0</td> </tr> <tr> <td>1.7</td> <td>460.0</td> <td>1675.0</td> <td>1140.0</td> <td>825.0</td> </tr> <tr> <td>1.8</td> <td>440.0</td> <td>1700.0</td> <td>1160.0</td> <td>800.0</td> </tr> <tr> <td>1.9</td> <td>420.0</td> <td>1725.0</td> <td>1180.0</td> <td>775.0</td> </tr> <tr> <td>2.0</td> <td>400.0</td> <td>1750.0</td> <td>1200.0</td> <td>750.0</td> </tr> <tr> <td>2.1</td> <td>380.0</td> <td>1775.0</td> <td>1220.0</td> <td>725.0</td> </tr> <tr> <td>2.2</td> <td>360.0</td> <td>1800.0</td> <td>1240.0</td> <td>700.0</td> </tr> <tr> <td>2.3</td> <td>340.0</td> <td>1825.0</td> <td>1260.0</td> <td>675.0</td> </tr> <tr> <td>2.4</td> <td>320.0</td> <td>1850.0</td> <td>1280.0</td> <td>650.0</td> </tr> <tr> <td>2.5</td> <td>300.0</td> <td>1875.0</td> <td>1300.0</td> <td>625.0</td> </tr> <tr> <td>2.6</td> <td>280.0</td> <td>1900.0</td> <td>1320.0</td> <td>600.0</td> </tr> <tr> <td>2.7</td> <td>260.0</td> <td>1925.0</td> <td>1340.0</td> <td>575.0</td> </tr> <tr> <td>2.8</td> <td>240.0</td> <td>1950.0</td> <td>1360.0</td> <td>550.0</td> </tr> <tr> <td>2.9</td> <td>220.0</td> <td>1975.0</td> <td>1380.0</td> <td>525.0</td> </tr> <tr> <td>3.0</td> <td>200.0</td> <td>2000.0</td> <td>1400.0</td> <td>500.0</td> </tr> <tr> <td>3.1</td> <td>180.0</td> <td>2025.0</td> <td>1420.0</td> <td>475.0</td> </tr> <tr> <td>3.2</td> <td>160.0</td> <td>2050.0</td> <td>1440.0</td> <td>450.0</td> </tr> <tr> <td>3.3</td> <td>140.0</td> <td>2075.0</td> <td>1460.0</td> <td>425.0</td> </tr> <tr> <td>3.4</td> <td>120.0</td> <td>2100.0</td> <td>1480.0</td> <td>400.0</td> </tr> <tr> <td>3.5</td> <td>100.0</td> <td>2125.0</td> <td>1500.0</td> <td>375.0</td> </tr> <tr> <td>3.6</td> <td>80.0</td> <td>2150.0</td> <td>1520.0</td> <td>350.0</td> </tr> <tr> <td>3.7</td> <td>60.0</td> <td>2175.0</td> <td>1540.0</td> <td>325.0</td> </tr> <tr> <td>3.8</td> <td>40.0</td> <td>2200.0</td> <td>1560.0</td> <td>300.0</td> </tr> <tr> <td>3.9</td> <td>20.0</td> <td>2225.0</td> <td>1580.0</td> <td>275.0</td> </tr> </tbody> </table> <p>这样,通过恰当地选择做多和做空杠杆,可以使做空和做多的回撤接近。比如说,同样是在1000到1250之间运动,做空2.5倍的最大亏损与做多0.9倍类似。如果在两个方向都使用2.5倍杠杆,可能会造成不必要的损失。</p> <p>——当然,以上分析对比特币狂信者来说并没有什么意义。</p> <div class="footnotes"> <hr> <ol> <li id="fn:pizza">无意冒犯,这里的实际价值指的是能够换多少个比萨饼。 <a class="footnote-return" href="#fnref:pizza"><sup>[return]</sup></a></li> </ol> </div> 用Cloudflare的v4 API实现动态DNS(DDNS) https://blog.heysh.xyz/2018/07/05/cloudflare-ddns/ Thu, 05 Jul 2018 21:41:42 +0800 https://blog.heysh.xyz/2018/07/05/cloudflare-ddns/ <p>如果你有一个经常变化的公网IP,你可能会需要用DDNS将这个IP绑定在同一个域名上,这样就可以不必每次输入一串IP地址了。我用的DNS服务商Cloudflare并没有提供名为DDNS的服务,但是其API可以实现类似的效果。</p> <p>之前我用的是<a href="https://lifely.today/2015/05/%E7%82%BA-cloudflare-%E8%A8%AD%E5%AE%9A%E5%8B%95%E6%85%8B-dns-ddns/">这里</a>的方法,不过最近cloudflare更新了<a href="https://api.cloudflare.com/">第四代API</a>,那个方法已经失效。于是水博文的机会来了。</p> <p>原料:</p> <ol> <li>一个域名,并用Cloudflare管理</li> <li>一台经常开着的,有计划任务或者cron,可以运行curl的电脑</li> <li>(可选)如果API地址被屏蔽的话,可能需要可用的代理</li> </ol> <p>步骤:</p> <ul> <li>去<a href="https://dash.cloudflare.com/">https://dash.cloudflare.com/</a>找到你域名的<code>zone ID</code>并新建一个<code>API_KEY</code>。</li> <li>新建一条子域名的A记录,IP写什么都行。</li> <li>查询这条记录的<code>RECORD_ID</code>,在终端运行:</li> </ul> <div class="highlight"><pre style="background-color:#f0f3f3;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-bash" data-lang="bash">curl -X GET <span style="color:#c30">&#34;https://api.cloudflare.com/client/v4/zones/&lt;ZONE_ID&gt;/dns_records&#34;</span> <span style="color:#c30;font-weight:bold">\ </span><span style="color:#c30;font-weight:bold"></span> -H <span style="color:#c30">&#34;X-Auth-Email: &lt;邮箱地址&gt;&#34;</span> <span style="color:#c30;font-weight:bold">\ </span><span style="color:#c30;font-weight:bold"></span> -H <span style="color:#c30">&#34;X-Auth-Key: &lt;API_KEY&gt;&#34;</span> <span style="color:#c30;font-weight:bold">\ </span><span style="color:#c30;font-weight:bold"></span> -H <span style="color:#c30">&#34;Content-Type: application/json&#34;</span> <span style="color:#c30;font-weight:bold">\ </span><span style="color:#c30;font-weight:bold"></span> -x http://localhost:8087</code></pre></div> <p>其中 <code>-x</code>是本地代理地址,可选。大概能从返回的一坨json中找到id那一项。</p> <ul> <li>保存下面的脚本,修改<code>&lt;ZONE_ID&gt;</code>,<code>&lt;RECORD_ID&gt;</code>,<code>邮箱地址</code>,<code>API_KEY</code>,<code>子域名</code>什么的。如果不需要代理的话删除<code>-x</code>那一行。</li> </ul> <div class="highlight"><pre style="background-color:#f0f3f3;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-bash" data-lang="bash"><span style="color:#099">#!/bin/sh </span><span style="color:#099"></span><span style="color:#033">NEW_IP</span><span style="color:#555">=</span><span style="color:#c30">`</span>curl -s http://ns1.dnspod.net:6666<span style="color:#c30">`</span> <span style="color:#033">CURRENT_IP</span><span style="color:#555">=</span><span style="color:#c30">`</span>cat /var/tmp/current_ip.txt<span style="color:#c30">`</span> <span style="color:#069;font-weight:bold">if</span> <span style="color:#555">[</span> <span style="color:#c30">&#34;</span><span style="color:#033">$NEW_IP</span><span style="color:#c30">&#34;</span> <span style="color:#555">=</span> <span style="color:#c30">&#34;</span><span style="color:#033">$CURRENT_IP</span><span style="color:#c30">&#34;</span> <span style="color:#555">]</span> <span style="color:#069;font-weight:bold">then</span> <span style="color:#366">echo</span> <span style="color:#c30">&#34;No Change in IP Adddress&#34;</span> <span style="color:#069;font-weight:bold">else</span> curl -X PUT <span style="color:#c30">&#34;https://api.cloudflare.com/client/v4/zones/&lt;ZONE_ID&gt;/dns_records/&lt;RECORD_ID&gt;&#34;</span> <span style="color:#c30;font-weight:bold">\ </span><span style="color:#c30;font-weight:bold"></span> -x http://localhost:8087 <span style="color:#c30;font-weight:bold">\ </span><span style="color:#c30;font-weight:bold"></span> -H <span style="color:#c30">&#34;X-Auth-Email: &lt;邮箱地址&gt;&#34;</span> <span style="color:#c30;font-weight:bold">\ </span><span style="color:#c30;font-weight:bold"></span> -H <span style="color:#c30">&#34;X-Auth-Key: &lt;API_KEY&gt;&#34;</span> <span style="color:#c30;font-weight:bold">\ </span><span style="color:#c30;font-weight:bold"></span> -H <span style="color:#c30">&#34;Content-Type: application/json&#34;</span> <span style="color:#c30;font-weight:bold">\ </span><span style="color:#c30;font-weight:bold"></span> --data <span style="color:#c30">&#39;{&#34;type&#34;:&#34;A&#34;,&#34;name&#34;:&#34;&lt;子域名地址&gt;&#34;,&#34;content&#34;:&#34;&#39;</span><span style="color:#033">$NEW_IP</span><span style="color:#c30">&#39;&#34;,&#34;ttl&#34;:1}&#39;</span> <span style="color:#366">echo</span> <span style="color:#033">$NEW_IP</span> &gt; /var/tmp/current_ip.txt <span style="color:#069;font-weight:bold">fi</span></code></pre></div> <ul> <li><p>接下来让它每两个小时运行一次就好了。</p> <div class="highlight"><pre style="background-color:#f0f3f3;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-bash" data-lang="bash"><span style="color:#09f;font-style:italic"># crontab -e </span><span style="color:#09f;font-style:italic"></span>*/120 * * * * /path/of/your/script.sh</code></pre></div></li> </ul> <p><del>写字好累(躺</del></p> 另一些预测未来的尝试,以及问题 https://blog.heysh.xyz/2018/05/02/dont-trust-the-oracle/ Wed, 02 May 2018 20:30:20 +0800 https://blog.heysh.xyz/2018/05/02/dont-trust-the-oracle/ <p><a href="/2018/03/26/who-will-roll-the-dice/">之前</a>写到,我们不能从水晶球中看到未来的清晰倒影。而本次的结论更加悲观:那些模糊的幻象基本上没有任何效果,并且很可能是有害的。</p> <p>另,本文部分是<a href="https://book.douban.com/subject/25782902/">《反脆弱》</a>的读书笔记。虽然作者有的观点<del>过于极端</del>让人不爽,但是其理论仍能给人启发……特别是对于梦想预测未来的人来说。</p> <h2 id="现实参数太多而数据量太少">现实:参数太多而数据量太少</h2> <p>作为一个实验室民工,当我在说“波长与温度成正比”的时候,大概只需要测量8次就够了。可是,当参数太多(而且不能控制变量)的时候,情况变得复杂起来。很多时候,能够得到的数据大概是这样:</p> <table> <thead> <tr> <th>time</th> <th>a</th> <th>b</th> <th>c</th> <th>d</th> <th>y</th> </tr> </thead> <tbody> <tr> <td>1996-03-16</td> <td>1</td> <td>1</td> <td>0</td> <td>0.75</td> <td>5</td> </tr> <tr> <td>2007-04-22</td> <td>3</td> <td>3</td> <td>1</td> <td>4</td> <td>15</td> </tr> <tr> <td>2018-09-01</td> <td>6</td> <td>10</td> <td>6</td> <td>18</td> <td>30</td> </tr> </tbody> </table> <p>提问:<span class="math">\(y=?\)</span></p> <p>A. <span class="math">\(y=5a\)</span></p> <p>B. <span class="math">\(y=15b+10c-10d\)</span></p> <p>C. <span class="math">\(y=\text{random}()\)</span></p> <p><del>D. <span class="math">\(y\)</span>是当天大乐透的尾号</del></p> <p>当然,作为实验民工的话,<code>正交试验法</code>、<code>典型相关分析</code>和<code>主成分分析</code>是找到复杂特性的好手段。可是,现实生活中,并不存在重复实验的条件,而且,我们甚至不能将所有参数一一列举出来。最糟糕的情况下,重要的原因仍然藏在水底。</p> <figure> <img src="/img/iceberg.png" alt="大家喜闻乐见的冰山图.jpg" /> <figcaption> <p> 大家喜闻乐见的冰山图.jpg </p> </figcaption> </figure> <p>这时候,关于预测未来这件事,出现了两种截然相反的手段。</p> <h2 id="假先知们的伎俩冗余的参数与神秘主义">(假)先知们的伎俩:冗余的参数与神秘主义</h2> <p>有时候,仅仅是声称能够预测未来就可以带来实际的好处,无论正确与否;<sup class="footnote-ref" id="fnref:1"><a class="footnote" href="#fn:1">1</a></sup>同时,生物似乎倾向于在事物中寻找规律<sup class="footnote-ref" id="fnref:pigeon"><a class="footnote" href="#fn:pigeon">2</a></sup>。于是,为了垄断对未来的解释权,在可以观察到的参数之外,这些预言家们倾向于将原因复杂化,典型的手法包括“神的旨意”、“群星的角度”和“技术分析”等等。</p> <p>此时,由于参数的过量,过拟合能够获得对历史数据相当精确的表述(以及对占卜师的信任),然而其预测能力并不像看起来那样强。但是,我们并没有办法判断预言的正确<code>程度</code>(今天的恋爱运是69%),同时养成了在新事件发生之后不翻旧账的好习惯(没有“昨日运势”的地址)。这样的假先知在每个时代都能够占据一席之地。<sup class="footnote-ref" id="fnref:2"><a class="footnote" href="#fn:2">3</a></sup></p> <p>应对这样的预言家有一个简单的办法:“不要询问他的意见、预测或建议。只要问他们的投资组合中有什么或者没有什么就行。”换一个时髦一些的说法,叫做“利益相关”,这样的话,错误的预言至少能够得到一些代价。</p> <h2 id="奥卡姆剃刀以及为什么在现实中可能失效">奥卡姆剃刀,以及为什么在现实中(可能)失效</h2> <p>之前已经提到过<a href="https://zh.wikipedia.org/zh-cn/%E5%A5%A5%E5%8D%A1%E5%A7%86%E5%89%83%E5%88%80">过拟合</a>这一概念:</p> <blockquote> <p>当可选择的参数的自由度超过数据所包含信息内容时,会减少或破坏模型一般化的能力更甚于适应数据。(维基百科)</p> </blockquote> <p>一般来说,奥卡姆剃刀是解决过拟合问题的有效途径。在预测能力相似的情况下,引入的假定越少越好。在贝叶斯理论下,可以通过贝叶斯因子(或其不够精确的代替品,<a href="https://zh.wikipedia.org/zh-cn/%E8%B5%A4%E6%B1%A0%E4%BF%A1%E6%81%AF%E9%87%8F%E5%87%86%E5%88%99">赤池信息量准则</a>等等)来进行判断。现实生活中的噪音比实验数据更多,按理说剃刀会更加锋利,但是,与数学模型不同,生活中:</p> <h3 id="样本仍然不足">样本(仍然)不足</h3> <p>我们再次遇到了这个问题。生活中很多时候,我们获得的信息类似这样:</p> <ul> <li>“你看隔壁小李,多年的xxx就是吃这个药好的”</li> <li>“啥,出去跑步来着?那没关系,药还是得喝”</li> <li>“副作用?没事!老王喝了二十多年了身体倍儿棒”</li> </ul> <p>仅看这些对话,可以得到一个解释力很强,假设又很少的理论,当然我们并不会相信它。日常生活中所能够得到的样本大概如此,有效信息量甚至比噪音还低。指望从中获取什么一般规律/人生哲理/生活智慧,基本上是不现实的——除了给自己增加一些盲目的自信之外。</p> <h3 id="火鸡与农场主黑天鹅效应以及损失敏感性">“火鸡与农场主”、黑天鹅效应、以及损失敏感性</h3> <p>数学与现实生活的另一个区别是,数学是永恒的。只要公理和逻辑不变,同样的算式总是可以期待相同的结果。而现实生活则不同,每天的日常生活很可能是连续发生的奇迹,而且,一旦奇迹不再发生,很可能带来灾难性的结果。这一问题再次提升了预言的难度:不仅需要对未来的平均值,而且对其方差/极端情况进行描绘。</p> <p>同时,相比正确的预测,错误的预测一般会带来更加恶劣的影响,在心理上也会更强的挫败感,这由我们的本能所决定。</p> <h2 id="那么">那么……</h2> <p>很多时候,人们观察到了一个(或一组)现象,然后盲目地寻找到一个原因,并认为得到了正确的答案。这在我们进化初期十分有效,在今天也比投硬币决定稍微好一些——如果用于决策的证据真的不够的话。</p> <p>在更多的情况下,预测未来(并信任这一预测)并不是个好主意。<a href="https://en.wikipedia.org/wiki/Dutch_book">荷兰赌</a>/两边下注/无风险套利可能是更明智的选择。由于日常生活并不是由精明的数学家所设计,这种机会仍是有可能存在的。</p> <p>在必须要做出决定的时候,可能需要注意:</p> <ol> <li>尽可能地获取无偏见的信息; <ul> <li>当然,所谓“无偏见”又是另一个故事了。</li> </ul></li> <li>只下能够赔得起的赌注; <ul> <li>或者完全不下赌注——如果想成为预言家,而且没有道德洁癖的话。</li> </ul></li> </ol> <div class="footnotes"> <hr> <ol> <li id="fn:1">一部分可能由于<a href="https://zh.wikipedia.org/zh-tw/%E8%87%AA%E8%AF%81%E9%A2%84%E8%A8%80">自证预言</a>,另一部分可能就是流行的KOL什么的了。 <a class="footnote-return" href="#fnref:1"><sup>[return]</sup></a></li> <li id="fn:pigeon">不仅仅是条件反射,而且有非常类似人类的<a href="http://www.psychspace.com/psy/school/001/%27SUPERSTITION%27%20IN%20THE%20PIGEON.htm">“迷信行为”</a>('SUPERSTITION' IN THE PIGEON, B. F. Skinner)。我最近才在素材库里发现这个有趣的现象。 <a class="footnote-return" href="#fnref:pigeon"><sup>[return]</sup></a></li> <li id="fn:2">我试图让我不要再刷那些占星师的微博了,但是我瞪了自己一眼,然后说:“不”。 <a class="footnote-return" href="#fnref:2"><sup>[return]</sup></a></li> </ol> </div> 随机性从哪里来? https://blog.heysh.xyz/2018/03/26/who-will-roll-the-dice/ Mon, 26 Mar 2018 21:03:21 +0800 https://blog.heysh.xyz/2018/03/26/who-will-roll-the-dice/ <blockquote> <p>当然,没准可以预测“真空中的球形未来”。</p> </blockquote> <h2 id="量子力学">量子力学……</h2> <p>我们都听说过“两朵乌云”的故事,其中一朵后来变成了<strong>量子力学</strong>,告诉我们上帝(也许)是掷骰子的。这是截止到目前,所有苛刻的家伙都承认的“真正随机”。而且,通过一些简单的装置(比如盖格计数器或者一个虐猫狂人),这些随机可以进入宏观的现实生活。</p> <p><del>或许有一天,我们会发现<code>量子效应只是物质之海表面的涟漪,是物质更深层规律扰动的影子</code></del><sup class="footnote-ref" id="fnref:liu"><a class="footnote" href="#fn:liu">1</a></sup><sup class="footnote-ref" id="fnref:bell"><a class="footnote" href="#fn:bell">2</a></sup>——但是,这仍不能让我们真正成为预言家,还有一些东西在阻止我们。</p> <h2 id="并不是随机的唯一来源">……并不是随机的唯一来源</h2> <p>让我们回到乌云飘来之前。那时候的人们充满了工业革命带来的乐观精神,相信自然是和谐、简单、可预测的:穷尽数学系统,可以找到所有数学定理的证明;如果我们了解整个世界的状态,就可以计算出下一秒的世界。如果没有量子力学,这听起来似乎没有什么问题,除了——</p> <h3 id="这里不欢迎近似">这里不欢迎近似</h3> <p>即使是微小的误差,也会放大到不可接受的结果,这就是所谓的蝴蝶效应——</p> <h3 id="空白处太小放不下计算机">空白处太小,放不下计算机</h3> <p>——而且,计算机本身的计算能力也是有限的。不,这不是说Intel又开始挤牙膏了,而是说作为物质本身,其计算能力有限制。对于我们的宇宙来说,它能够计算的总数据不超过<span class="math">\(10^{120}\)</span>比特<sup class="footnote-ref" id="fnref:PRL"><a class="footnote" href="#fn:PRL">3</a></sup>:可能做一根足够长的杠杆还要更简单一些。</p> <h3 id="甚至">甚至……</h3> <p>即使我们真的掏空宇宙做出一台超级计算机,当它真正开始计算的时候,首先需要计算自己的状态,那么,首先需要计算<code>计算自己状态时自己的状态</code>……</p> <p>正如<code>证明所有数学定律</code>,<code>找到不属于自身的集合的集合</code>,<code>或者判断是不是会停机</code>一样,当我们观察系统的时候,需要把自己从系统中排除。</p> <div class="footnotes"> <hr> <ol> <li id="fn:liu">刘慈欣,《镜子》。原谅我总喜欢拿科幻小说作例子,这纯粹是因为它们“可能性”的种类比较多。 <a class="footnote-return" href="#fnref:liu"><sup>[return]</sup></a></li> <li id="fn:bell">以上那一行叙述似乎暗示着隐变量理论,作为爱因斯坦<a href="https://mp.weixin.qq.com/s?__biz=MjM5NDA1Njg2MA==&amp;mid=2651981696&amp;idx=1&amp;sn=f4da01857707385ad4c44c8dc9e7c942&amp;scene=2&amp;srcid=0428O8l58rK5JeqU4x9KHYbs&amp;from=timeline&amp;isappinstalled=0#%23">从上帝手中夺过骰子</a>的方案。然而,加上删除线的原因是,<a href="https://zhuanlan.zhihu.com/p/20202069">对贝尔不等式的实验</a>宣告了这种理论的终结。个人而言,我还是比较喜欢这种随机性比较高的世界。 <a class="footnote-return" href="#fnref:bell"><sup>[return]</sup></a></li> <li id="fn:PRL">见<a href="https://doi.org/10.1103/PhysRevLett.88.237901">https://doi.org/10.1103/PhysRevLett.88.237901</a>。老实说,这个量与普朗克长度有关,我们还是躲不开量子力学 ;-) <a class="footnote-return" href="#fnref:PRL"><sup>[return]</sup></a></li> </ol> </div> 这次是纽约公共图书馆……而且居然还有第三部分? https://blog.heysh.xyz/2018/02/24/nypl3/ Sat, 24 Feb 2018 00:03:59 +0800 https://blog.heysh.xyz/2018/02/24/nypl3/ <blockquote> <p>在图书馆的第三天,到了废纸回收环节</p> </blockquote> <p>之前下到了一叠厚厚的<a href="https://digitalcollections.nypl.org/collections/trait-des-arbres-et-arbustes-que-lon-cultive-en-france-en-pleine-terre#/?tab=about">图集</a>,可是要真正用起来,还需要一点点简单的处理,比如说,沿着边线把图案剪下来: <figure> <img src="/nypl/before.jpg" /> <figcaption> <h4>加工前</h4> </figcaption> </figure> <figure> <img src="/nypl/after.png" /> <figcaption> <h4>加工后</h4> </figcaption> </figure> </p> <p>通过一些简单的图形学处理就可以完成这项任务,当然,对于不懂画画的乡巴佬(我),要读好多<code>skimage</code>的教程才能搞定——总之,我把折腾的结果传到了<a href="https://github.com/heyeshuang/Trait-des-arbres-et-arbustes-que-l-on-cultive-en-France-en-pleine-terre/">github</a>上,包括:</p> <ul> <li>如何在<code>jupyter notebook</code>里<a href="https://github.com/heyeshuang/Trait-des-arbres-et-arbustes-que-l-on-cultive-en-France-en-pleine-terre/blob/master/sobel.ipynb">剪好一张图</a></li> <li>然后改成<a href="https://github.com/heyeshuang/Trait-des-arbres-et-arbustes-que-l-on-cultive-en-France-en-pleine-terre/blob/master/sobel-batch.ipynb">批量修改的版本</a></li> <li>以及<a href="https://github.com/heyeshuang/Trait-des-arbres-et-arbustes-que-l-on-cultive-en-France-en-pleine-terre/tree/master/batch/France">原图</a>和修改之后的<a href="https://github.com/heyeshuang/Trait-des-arbres-et-arbustes-que-l-on-cultive-en-France-en-pleine-terre/tree/master/france">结果</a></li> </ul> <p>欢迎下载、使用、或者拿去卖钱,反正是公有领域。</p> 这次是纽约公共图书馆……的第二天! https://blog.heysh.xyz/2018/02/22/nypl2/ Thu, 22 Feb 2018 16:03:59 +0800 https://blog.heysh.xyz/2018/02/22/nypl2/ <blockquote> <p>(精神上)坐在图书馆里,我想:能不能把这些旧书借走呢?</p> </blockquote> <p>当然是可以的!贴心的图书管理员已经提供了API接口:<a href="http://api.repo.nypl.org/">http://api.repo.nypl.org/</a>,申请账号之后,就可以做各种各样的事了~</p> <p>当然,如果只是想下片的话,用<a href="https://github.com/NYPL-publicdomain/api-client">digital-collections</a>可能会更简单一些:</p> <div class="highlight"><pre style="background-color:#f0f3f3;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-bash" data-lang="bash">digital-collections -t API_TOKEN -s UUID -o OUTPUT.json</code></pre></div> <p>其中,<code>API_TOKEN</code>在申请账号以后会得到一个;在你想要下载的专辑(<a href="https://digitalcollections.nypl.org/collections/a-curious-herbal-containing-five-hundred-cuts-of-the-most-useful-plants-which#/?tab=about&amp;scroll=50">比如这个</a>)下面,可以看到<code>UUID</code>;运行这条命令之后,图片的信息列表会保存在<code>OUTPUT.json</code>里。</p> <figure> <img src="/nypl/clip.png" /> <figcaption> <h4>对,就是那个Universal Unique Identifier</h4> </figcaption> </figure> <p>之后,获得的json文件大概像是这样:</p> <div class="highlight"><pre style="background-color:#f0f3f3;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-json" data-lang="json">{ <span style="color:#309;font-weight:bold">&#34;uuid&#34;</span>: <span style="color:#c30">&#34;510d47dd-c1f5-a3d9-e040-e00a18064a99&#34;</span>, <span style="color:#309;font-weight:bold">&#34;imageLinks&#34;</span>: { <span style="color:#309;font-weight:bold">&#34;imageLink&#34;</span>: [ <span style="color:#c30">&#34;http://images.nypl.org/index.php?id=1125721&amp;t=w&amp;download=1&amp;suffix=510d47dd-c1f5-a3d9-e040-e00a18064a99.001&#34;</span>, <span style="color:#c30">&#34;http://images.nypl.org/index.php?id=1125721&amp;t=r&amp;download=1&amp;suffix=510d47dd-c1f5-a3d9-e040-e00a18064a99.001&#34;</span>, <span style="color:#c30">&#34;http://images.nypl.org/index.php?id=1125721&amp;t=t&amp;download=1&amp;suffix=510d47dd-c1f5-a3d9-e040-e00a18064a99.001&#34;</span>, <span style="color:#c30">&#34;http://images.nypl.org/index.php?id=1125721&amp;t=b&amp;download=1&amp;suffix=510d47dd-c1f5-a3d9-e040-e00a18064a99.001&#34;</span>, <span style="color:#c30">&#34;http://images.nypl.org/index.php?id=1125721&amp;t=f&amp;download=1&amp;suffix=510d47dd-c1f5-a3d9-e040-e00a18064a99.001&#34;</span> ] }, <span style="color:#309;font-weight:bold">&#34;apiUri&#34;</span>: <span style="color:#c30">&#34;http://api.repo.nypl.org/api/v1/items/mods/510d47dd-c1f5-a3d9-e040-e00a18064a99&#34;</span>, <span style="color:#309;font-weight:bold">&#34;typeOfResource&#34;</span>: <span style="color:#c30">&#34;still image&#34;</span>, <span style="color:#309;font-weight:bold">&#34;imageID&#34;</span>: <span style="color:#c30">&#34;1125721&#34;</span>, <span style="color:#309;font-weight:bold">&#34;sortString&#34;</span>: <span style="color:#c30">&#34;0000000001|0000000002|0000000001&#34;</span>, <span style="color:#309;font-weight:bold">&#34;itemLink&#34;</span>: <span style="color:#c30">&#34;http://digitalcollections.nypl.org/items/510d47dd-c1f5-a3d9-e040-e00a18064a99&#34;</span>, <span style="color:#309;font-weight:bold">&#34;highResLink&#34;</span>: <span style="color:#c30">&#34;http://link.nypl.org/7nC9VyT_TJWvGX9_H0mYBQ8&#34;</span>, <span style="color:#309;font-weight:bold">&#34;title&#34;</span>: <span style="color:#c30">&#34;Dandelion.&#34;</span>, <span style="color:#309;font-weight:bold">&#34;dateDigitized&#34;</span>: <span style="color:#c30">&#34;2016-08-04T04:53:12Z&#34;</span>, <span style="color:#309;font-weight:bold">&#34;rightsStatement&#34;</span>: <span style="color:#c30">&#34;The New York Public Library believes that this item is in the public domain under the laws of the United States, but did not make a determination as to its copyright status under the copyright laws of other countries. This item may not be in the public domain under the laws of other countries. Though not required, if you want to credit us as the source, please use the following statement, \&#34;From The New York Public Library,\&#34; and provide a link back to the item on our Digital Collections site. Doing so helps us track how our collection is used and helps justify freely releasing even more content in the future.&#34;</span>, <span style="color:#309;font-weight:bold">&#34;rightsStatementURI&#34;</span>: <span style="color:#c30">&#34;http://rightsstatements.org/vocab/NoC-US/1.0/&#34;</span> }</code></pre></div> <p>之后,只要下载<code>imageLink</code>就好了。我用了一个简单的python脚本来做这件事。</p> <div class="highlight"><pre style="background-color:#f0f3f3;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-python" data-lang="python"><span style="color:#09f;font-style:italic"># 注意:这玩意没有经过测试,可能会爆炸</span> <span style="color:#09f;font-style:italic"># 啊对了,而且是python3.6</span> <span style="color:#069;font-weight:bold">import</span> <span style="color:#0cf;font-weight:bold">urllib.request</span> <span style="color:#069;font-weight:bold">as</span> <span style="color:#0cf;font-weight:bold">ur</span> <span style="color:#069;font-weight:bold">import</span> <span style="color:#0cf;font-weight:bold">json</span> <span style="color:#069;font-weight:bold">import</span> <span style="color:#0cf;font-weight:bold">os</span> dir_name<span style="color:#555">=</span><span style="color:#c30">&#34;Himalayan_plants&#34;</span> <span style="color:#09f;font-style:italic">#可能要改这里……</span> os<span style="color:#555">.</span>mkdir(dir_name) <span style="color:#069;font-weight:bold">with</span> <span style="color:#366">open</span>(<span style="color:#c30">&#34;OUTPUT.json&#34;</span>,<span style="color:#c30">&#34;r&#34;</span>) <span style="color:#069;font-weight:bold">as</span> source: <span style="color:#09f;font-style:italic">#……还有这里</span> source_dict<span style="color:#555">=</span>json<span style="color:#555">.</span>load(source) <span style="color:#069;font-weight:bold">for</span> _i,_s <span style="color:#000;font-weight:bold">in</span> <span style="color:#366">enumerate</span>(source_dict): file_name<span style="color:#555">=</span>dir_name<span style="color:#555">+</span><span style="color:#c30">&#34;/&#34;</span><span style="color:#555">+</span><span style="color:#366">str</span>(_i)<span style="color:#555">+</span><span style="color:#c30">&#34;.jpg&#34;</span> <span style="color:#069;font-weight:bold">if</span> os<span style="color:#555">.</span>path<span style="color:#555">.</span>exists(file_name)<span style="color:#555">==</span>False: <span style="color:#069;font-weight:bold">try</span>: ur<span style="color:#555">.</span>urlretrieve(_s[<span style="color:#c30">&#34;imageLinks&#34;</span>][<span style="color:#c30">&#34;imageLink&#34;</span>][<span style="color:#f60">0</span>],file_name) <span style="color:#069;font-weight:bold">except</span> <span style="color:#c00;font-weight:bold">Exception</span> <span style="color:#069;font-weight:bold">as</span> e: <span style="color:#069;font-weight:bold">print</span>(_i) <span style="color:#069;font-weight:bold">print</span>(<span style="color:#366">str</span>(e))</code></pre></div> 这次是纽约公共图书馆…… https://blog.heysh.xyz/2018/02/21/nypl/ Wed, 21 Feb 2018 22:03:59 +0800 https://blog.heysh.xyz/2018/02/21/nypl/ <blockquote> <p>是的,我<a href="https://blog.heysh.xyz/2017/09/09/2017-09-03-jour-to-lib/">又</a>去图书馆了,当然这次和戒网瘾没有什么关系。</p> </blockquote> <p>纽约公共图书馆建立于1895年,馆藏里有大量古老的资料,古老到超出了版权法的管理范围,进入了<a href="https://en.wikipedia.org/wiki/Public_domain">公有领域</a>。于是,勤奋的图书管理员们把它们<a href="https://www.nypl.org/blog/2016/01/05/share-public-domain-collections">数字化</a>,送给了互联网。</p> <p>所以,在春节假期,坐在电脑前面,我也可以来一次纽约公共图书馆了——而且是一百年前的!</p> <p><a href="https://digitalcollections.nypl.org/">这里</a>是数字图书馆的首页。如果是一位上世纪的通才,通晓法文、英文拉丁文和其他鸟语,他一定会感觉像是回到了家里一样;当然,即使像我这样的乡巴佬,看一看泛黄的插画,或许也能得到一些乐趣,比如说:</p> <h3 id="看看喜马拉雅山上都长些什么-https-digitalcollections-nypl-org-collections-nature-illustrated-flowers-plants-and-trees-1550-1900-tab-navigation-roots-11-c51cb7e0-c6ba-012f-206d-3c075448cc4b"><a href="https://digitalcollections.nypl.org/collections/nature-illustrated-flowers-plants-and-trees-1550-1900#/?tab=navigation&amp;roots=11:c51cb7e0-c6ba-012f-206d-3c075448cc4b">看看喜马拉雅山上都长些什么</a></h3> <figure> <img src="/nypl/nypl.digitalcollections.510d47dc-508a-a3d9-e040-e00a18064a99.001.w.jpg" /> <figcaption> <h4>嗯,是杂草</h4> </figcaption> </figure> <h3 id="学习下最新的流行风尚-https-digitalcollections-nypl-org-collections-newest-styles-for-men-tab-about"><a href="https://digitalcollections.nypl.org/collections/newest-styles-for-men#/?tab=about">学习下最新的流行风尚</a></h3> <figure> <img src="/nypl/nypl.digitalcollections.510d47dd-fea2-a3d9-e040-e00a18064a99.001.w.jpg" /> <figcaption> <h4>唔哦,好男人</h4> </figcaption> </figure> <h3 id="或者来辆新车-https-digitalcollections-nypl-org-collections-album-of-illustrations-of-imperial-royal-state-carriages-together-with-other-tab-about"><a href="https://digitalcollections.nypl.org/collections/album-of-illustrations-of-imperial-royal-state-carriages-together-with-other#/?tab=about">或者来辆新车?</a></h3> <figure> <img src="/nypl/nypl.digitalcollections.510d47dd-fd6c-a3d9-e040-e00a18064a99.001.w.jpg" /> <figcaption> <h4>如果从这时候就开始摇号的话……</h4> </figcaption> </figure> <p>当然,最重要的是,这些资料都是免费的,没有任何版权问题。如果你需要一张可爱的小画儿,这里可能可以提供一点点灵感——或者直接复制也可以,没有(活)人会来找你麻烦的!</p> History Data for Bitcoin and Altcoins https://blog.heysh.xyz/2018/01/23/history-data-for-altcoins/ Tue, 23 Jan 2018 17:31:33 +0800 https://blog.heysh.xyz/2018/01/23/history-data-for-altcoins/ <p><a href="https://drive.google.com/file/d/1lp3JkwKLCR_RxI61-jdPcH26UXCnHPuC/view?usp=sharing">Link</a></p> <p>In this package, you&rsquo;ll find:</p> <ul> <li>History data for Bitcoin price, with highest, lowest and volume, <strong>per hour</strong></li> <li>Close price for 200+ Altcoins, also <strong>per hour</strong></li> <li>And the <a href="http://alt19.com/marketindexes.html">Altcoin Market Indices</a></li> </ul> <p>Before 2017-12-23.</p> <p>These data (and honor) belong to <a href="http://alt19.com">alt19.com</a>. This website says:</p> <blockquote> <p>Any information on Alt19.com is provided free and &ldquo;as is&rdquo; and solely for informational purposes, not for trading purposes or advice, and may be delayed.</p> <p>No action should be taken or omitted to be taken in reliance upon information on this site. Use it AT YOUR OWN RISK</p> <p>Digital currencies may be illegal in your jurisdiction. These are high-risk investments with liquidity risks and other financial risks! Some altcoins are inactive or may become inactive in future. Please do your own research.</p> </blockquote> <p>I think he/she is right, and, thank for these data.</p> <hr /> <p><a href="https://drive.google.com/file/d/1lp3JkwKLCR_RxI61-jdPcH26UXCnHPuC/view?usp=sharing">Link</a></p> <p>长话短说,这是比特币/山寨币 <em>每小时</em> 的历史数据。比如说,要是进行什么数据分析的话,至少会比泰坦尼克号有意思一些吧……</p> <p>呃,事情是这样的。在我搜索山寨币的历史数据的时候,常常能看到alt19.com这个网站,但是在8012年,这个网站已经和两千年前的布局不太一样了……</p> <p>……当然,这个网站仍然供应小时级别的数据——如果你肯花上一点时间做一点侦察工作的话。对于那些好奇心不是那么严重的用户来说,请直接使用本文最上面的链接;对于另外的人,请不要给那个网站的服务器带来太大压力,当然我也没什么资格说这些。</p> <p>另外,就像上面所说的,一切风险请由使用者自己承担。</p> <hr /> <p>Edit in 18-03-26: 后来我觉得还是<a href="http://api.bitcoincharts.com/v1/csv/">http://api.bitcoincharts.com/v1/csv/</a>靠谱一些,当然,不包括山寨币。</p> 幂律分布与Zipf's Law https://blog.heysh.xyz/2017/12/16/zipf-law/ Sat, 16 Dec 2017 20:48:36 +0800 https://blog.heysh.xyz/2017/12/16/zipf-law/ <p>前几天读了<a href="https://book.douban.com/subject/6749832/">《复杂》</a>。对复杂学的研究,在人工智能重获热度的今天,似乎获得了新的意义——当然,我们还是不知道炼金术的大锅里面发生了什么。</p> <p>幂律分布/Zipf定律/<a href="https://zh.wikipedia.org/wiki/%E5%B8%95%E7%B4%AF%E6%89%98%E6%B3%95%E5%88%99">帕累托法则</a>/80-20定律/whatever,本质上是同一种东西。这种分布模式和正态分布类似,广泛存在于大自然和人造物的各个角落。一般来说,对于具有:</p> <ul> <li>优先连接性(Preferential attachment)/马太效应 <ul> <li>“凡有的,还要加给他,叫他有余;没有的,连他所有的也要夺过来。”</li> </ul></li> <li>成长性 <ul> <li>网络的尺度不受客观条件的限制,可以无限增长</li> </ul></li> </ul> <p>的网络,其节点连接数较为满足幂律分布。</p> <p><a href="https://www.youtube.com/watch?v=fCn8zs912OE">Youtube上</a>有个视频对幂律分布讲得很清楚,对其中提到的两个实验,我利用python进行了模拟。模拟中使用的<code>jupyter notebook</code>文件放在了<a href="https://gist.github.com/heyeshuang/fece5abbd6d1cf826dbaf9c3e76361b7">github gist</a>上。</p> <h2 id="猴子和打字机">猴子和打字机</h2> <p>一只猴子(我们叫它Shashi Biya)在打字机上乱敲,它敲二十六个字母和空格概率都相等。那么,咱们能不能看出他的用词习惯?答案是肯定的。</p> <div class="highlight"><pre style="background-color:#f0f3f3;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-python" data-lang="python"><span style="color:#069;font-weight:bold">import</span> <span style="color:#0cf;font-weight:bold">string</span><span style="color:#555">,</span><span style="color:#0cf;font-weight:bold">random</span> <span style="color:#069;font-weight:bold">from</span> <span style="color:#0cf;font-weight:bold">collections</span> <span style="color:#069;font-weight:bold">import</span> Counter s<span style="color:#555">=</span>string<span style="color:#555">.</span>ascii_lowercase<span style="color:#555">+</span><span style="color:#c30">&#34; &#34;</span> s<span style="color:#555">=</span><span style="color:#c30">&#34;abcd &#34;</span> monkey<span style="color:#555">=</span><span style="color:#c30">&#39;&#39;</span><span style="color:#555">.</span>join(random<span style="color:#555">.</span>choices(s, k<span style="color:#555">=</span><span style="color:#f60">10000000</span>)) monkey<span style="color:#555">=</span>[m <span style="color:#069;font-weight:bold">for</span> m <span style="color:#000;font-weight:bold">in</span> monkey<span style="color:#555">.</span>split(<span style="color:#c30">&#34; &#34;</span>) <span style="color:#069;font-weight:bold">if</span> m] c<span style="color:#555">=</span>Counter(monkey) common<span style="color:#555">=</span>c<span style="color:#555">.</span>most_common()[:<span style="color:#f60">10000</span>] fre<span style="color:#555">=</span>[value <span style="color:#069;font-weight:bold">for</span> (key,value) <span style="color:#000;font-weight:bold">in</span> common] plt<span style="color:#555">.</span>plot(fre) plt<span style="color:#555">.</span>xscale(<span style="color:#c30">&#39;log&#39;</span>) plt<span style="color:#555">.</span>yscale(<span style="color:#c30">&#39;log&#39;</span>) plt<span style="color:#555">.</span>show()</code></pre></div> <figure> <img src="/zipf/output_5_0.png" /> <figcaption> <h4>阶梯形状可能是由于概率相等</h4> </figcaption> </figure> <p>我们的这位大文豪颇有古风,喜欢用单字(“a”)胜过长单词(“ffsda”),而且用词比例正符合幂律分布:在双log坐标系下,图像大致是一条直线。这很符合直觉:为了得到任何长度大于1的单词,猴子第二次敲的按钮必须不是空格。</p> <p>不要嘲笑我们的前辈,人类的语言也具有相同的性质,虽然概率最高的字是the什么的。并不是Zipf’s law限制了猴子打出十四行诗,这或许是个好消息。</p> <h2 id="连接曲别针-第一种方法">连接曲别针,第一种方法</h2> <p>在墙上钉100个钉子,然后随意把曲别针连在上面。哪个钉子上曲别针越多,下一个曲别针挂在上面的概率就越高。</p> <div class="highlight"><pre style="background-color:#f0f3f3;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-python" data-lang="python">l<span style="color:#555">=</span><span style="color:#f60">100</span> <span style="color:#366">list</span><span style="color:#555">=</span>np<span style="color:#555">.</span>ones(l) <span style="color:#069;font-weight:bold">for</span> i <span style="color:#000;font-weight:bold">in</span> <span style="color:#366">range</span>(<span style="color:#f60">100000</span>): s<span style="color:#555">=</span><span style="color:#366">sum</span>(<span style="color:#366">list</span>) p<span style="color:#555">=</span>[j<span style="color:#555">/</span>s <span style="color:#069;font-weight:bold">for</span> j <span style="color:#000;font-weight:bold">in</span> <span style="color:#366">list</span>] k<span style="color:#555">=</span>np<span style="color:#555">.</span>random<span style="color:#555">.</span>choice(l,<span style="color:#f60">1</span>, p<span style="color:#555">=</span>p) <span style="color:#366">list</span>[k]<span style="color:#555">+=</span><span style="color:#f60">1</span> plt<span style="color:#555">.</span>plot(<span style="color:#366">sorted</span>(<span style="color:#366">list</span>,reverse<span style="color:#555">=</span>True)) plt<span style="color:#555">.</span>xscale(<span style="color:#c30">&#39;log&#39;</span>) plt<span style="color:#555">.</span>yscale(<span style="color:#c30">&#39;log&#39;</span>) plt<span style="color:#555">.</span>show() <span style="color:#09f;font-style:italic">#指数分布</span></code></pre></div> <figure> <img src="/zipf/output_9_0.png" /> <figcaption> <h4>可惜这只是个指数分布</h4> </figcaption> </figure> <p>与幂律分布相比,指数分布更加“平缓”,而且在双对数坐标系下也并不是一条直线。</p> <h2 id="连接曲别针-the-right-way">连接曲别针,the right way</h2> <p>现在,我有一把曲别针。我随便拿出两个曲别针,并把它们两个所在的串连接起来。</p> <p>假设我对每一个曲别针没有特别的爱好,那么,某个串选中的概率,与串中的曲别针个数正相关。这就是所谓的优先连接性。</p> <div class="highlight"><pre style="background-color:#f0f3f3;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-python" data-lang="python">tic<span style="color:#555">=</span>timeit<span style="color:#555">.</span>default_timer() l<span style="color:#555">=</span><span style="color:#f60">20000</span> <span style="color:#366">list</span><span style="color:#555">=</span>[<span style="color:#f60">1</span>]<span style="color:#555">*</span>l <span style="color:#069;font-weight:bold">while</span> <span style="color:#366">len</span>(<span style="color:#366">list</span>)<span style="color:#555">&gt;</span><span style="color:#f60">14000</span>: s<span style="color:#555">=</span><span style="color:#366">sum</span>(<span style="color:#366">list</span>) p<span style="color:#555">=</span>[j<span style="color:#555">/</span>s <span style="color:#069;font-weight:bold">for</span> j <span style="color:#000;font-weight:bold">in</span> <span style="color:#366">list</span>] k1<span style="color:#555">=</span>np<span style="color:#555">.</span>random<span style="color:#555">.</span>choice(<span style="color:#366">len</span>(<span style="color:#366">list</span>),<span style="color:#f60">1</span>, p<span style="color:#555">=</span>p) a1<span style="color:#555">=</span><span style="color:#366">list</span><span style="color:#555">.</span>pop(k1[<span style="color:#f60">0</span>]) s<span style="color:#555">=</span><span style="color:#366">sum</span>(<span style="color:#366">list</span>) p<span style="color:#555">=</span>[j<span style="color:#555">/</span>s <span style="color:#069;font-weight:bold">for</span> j <span style="color:#000;font-weight:bold">in</span> <span style="color:#366">list</span>] k2<span style="color:#555">=</span>np<span style="color:#555">.</span>random<span style="color:#555">.</span>choice(<span style="color:#366">len</span>(<span style="color:#366">list</span>),<span style="color:#f60">1</span>, p<span style="color:#555">=</span>p) a2<span style="color:#555">=</span><span style="color:#366">list</span><span style="color:#555">.</span>pop(k2[<span style="color:#f60">0</span>]) <span style="color:#366">list</span><span style="color:#555">.</span>append(a1<span style="color:#555">+</span>a2) toc<span style="color:#555">=</span>timeit<span style="color:#555">.</span>default_timer() <span style="color:#069;font-weight:bold">print</span>(toc<span style="color:#555">-</span>tic) plt<span style="color:#555">.</span>plot(<span style="color:#366">sorted</span>(<span style="color:#366">list</span>,reverse<span style="color:#555">=</span>True)) plt<span style="color:#555">.</span>xscale(<span style="color:#c30">&#39;log&#39;</span>) plt<span style="color:#555">.</span>yscale(<span style="color:#c30">&#39;log&#39;</span>) plt<span style="color:#555">.</span>show()</code></pre></div> <p><img src="/zipf/output_13_0.png" alt="png" /></p> <p>好的,我们得到了 <em>基于曲别针的互联网系统</em> ——至少可以算是个物联网。在这个网络里,(大概)80%的曲别针在20%的链子中,余下的曲别针散落在另外的地方。我们叫那些链子“曲别针巨头”。随着连接次数越来越多,链子越来越长,分散的曲别针越来越少,这就是“链子中心化”,我们现在互联网的状态。</p> <p>当继续这个过程的时候,最终(很快)就只剩下唯一一条长链,这就是我们互联网的末日<sup class="footnote-ref" id="fnref:1"><a href="#fn:1">1</a></sup>。</p> <p>刘慈欣在还没有现在这么出名的时候,写过一篇叫做《赡养人类》的作品,提到了有关“终产者”的概念。当时,有人评论大刘“不懂政治,也不懂经济”,我十分希望这个人是对的。</p> <hr /> <p>2018年4年3日的编辑:</p> <p><a href="https://mp.weixin.qq.com/s/ccNUtbywz9JgDI9pj6FJlw">这里</a>有另一个Zipf&rsquo;s Law的例子,可以看出,其仍然满足马太效应的性质。<del>另外,别人的故事编的还是好啊。</del></p> <div class="footnotes"> <hr /> <ol> <li id="fn:1">这似乎和<a href="https://act.eff.org/action/protect-the-open-internet-order">Net neutrality</a>并不是一回事。并没有什么邪恶组织,邪恶的只有系统而已。 <a class="footnote-return" href="#fnref:1"><sup>[return]</sup></a></li> </ol> </div> 学习笔记:神经网络的优化策略 https://blog.heysh.xyz/2017/12/09/2017-12-09-%E6%B7%B1%E5%B1%82%E6%AC%A1%E7%A5%9E%E7%BB%8F%E7%BD%91%E7%BB%9C%E7%9A%84%E4%BC%98%E5%8C%96%E7%AD%96%E7%95%A5%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0/ Sat, 09 Dec 2017 16:53:50 +0800 https://blog.heysh.xyz/2017/12/09/2017-12-09-%E6%B7%B1%E5%B1%82%E6%AC%A1%E7%A5%9E%E7%BB%8F%E7%BD%91%E7%BB%9C%E7%9A%84%E4%BC%98%E5%8C%96%E7%AD%96%E7%95%A5%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0/ <blockquote> <p>本文基本上是 <em>Improving Deep Neural Networks: Hyperparameter tuning, Regularization and Optimization</em> 的知识点大纲。</p> <p>具体的公式和理论,可以看<a href="http://binweber.top/tags/ML/">Bin Weber的博客</a>。</p> </blockquote> <h2 id="训练-开发-测试集-train-dev-test">训练/开发/测试集(Train/dev/test)</h2> <ul> <li>数据量10000之内:70/30(免去dev)或60/20/20</li> <li>更多数据:保证dev/test足够(~10000)即可</li> </ul> <h2 id="过拟合">过拟合</h2> <ul> <li>引入更多训练样本</li> <li>正则化(Normalization<sup class="footnote-ref" id="fnref:1"><a href="#fn:1">1</a></sup>) <ul> <li>目的:减小||W|| ←此时熵最大,可能性最高</li> <li>L2正则化:在cost function上附加一个W,使W最小</li> <li>dropout:随机关闭一些节点</li> </ul></li> </ul> <h2 id="欠拟合">欠拟合</h2> <ul> <li>增加神经网络的隐含层数</li> <li>隐含层中的节点数</li> <li>训练更长时间</li> </ul> <h2 id="初始化输入数据和参数">初始化输入数据和参数</h2> <ul> <li>输入数据标准化(Normalization<sup class="footnote-ref" id="fnref:1"><a href="#fn:1">1</a></sup>):使每个维度在(-1,1)之间</li> <li>权重(W,b)初始化:应保证经多级网络后总值基本不变(类比1.0001^n和0.9999^n) <ul> <li>即Xavier初始化的变种,He初始化</li> </ul></li> </ul> <h2 id="提高梯度下降速度-mini-batch">提高梯度下降速度:mini-batch</h2> <p>由于内存/计算单元不够(always),每次计算部分数据</p> <h3 id="提高mini-batch的稳定性-减小摆动">提高mini-batch的稳定性,减小摆动</h3> <ul> <li>将每个batch的优化结果进行指数加权平均(Momentum)</li> <li>RMSPROP</li> <li>Adam:综合以上两种方法</li> <li>学习率衰减</li> </ul> <h2 id="超参数的选择">超参数的选择</h2> <h3 id="需要的超参数">需要的超参数</h3> <ul> <li>α,学习率/learning rate</li> <li>β1~0.9,β2~0.999,ε~1e-8(Adam中的参数)</li> <li>层数</li> <li>每层单元</li> <li>学习率衰减</li> <li>mini-batch 尺寸(2的整数次方,大概是512之内?)</li> </ul> <h3 id="选择方案">选择方案</h3> <ul> <li>随机</li> <li>对于α和β,以对数形式随机</li> </ul> <div class="highlight"><pre style="background-color:#f0f3f3;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-python" data-lang="python">r<span style="color:#555">=-</span><span style="color:#f60">4</span><span style="color:#555">*</span>np<span style="color:#555">.</span>random<span style="color:#555">.</span>rand() a<span style="color:#555">=</span><span style="color:#f60">10</span><span style="color:#555">**</span>r</code></pre></div> <h2 id="batch-norm">Batch-Norm</h2> <ul> <li>对每一层的线性计算结果Z进行标准化</li> <li>每层标准化的参数γ和β通过学习得到</li> <li>提高收敛速度(与对初始值X的操作类似)</li> </ul> <blockquote> <p>采用批标准化之后,尽管每一层的z还是在不断变化,但是它们的均值和方差将基本保持不变,这就使得后面的数据更加稳定,减少前面层与后面层的耦合 (via Bin Weber)</p> </blockquote> <h2 id="softmax">Softmax</h2> <p>当分类器需要分出更多类时使用</p> <h2 id="检验方程的梯度计算是否存在问题-梯度检验">检验方程的梯度计算是否存在问题:梯度检验</h2> <p>用计算斜率的方式近似梯度</p> <h2 id="深度学习是否会陷入局部最优问题">深度学习是否会陷入局部最优问题?</h2> <ul> <li>由于参数很多,对所有参数都为峰值基本上不可能</li> <li>相比而言,鞍点更加普遍</li> </ul> <div class="footnotes"> <hr /> <ol> <li id="fn:1">意义似乎略有不同 <a class="footnote-return" href="#fnref:1"><sup>[return]</sup></a></li> </ol> </div> 最近对博客的改动 https://blog.heysh.xyz/2017/12/04/2017-12-04-%E6%9C%80%E8%BF%91%E5%AF%B9%E5%8D%9A%E5%AE%A2%E7%9A%84%E6%94%B9%E5%8A%A8/ Mon, 04 Dec 2017 20:56:49 +0800 https://blog.heysh.xyz/2017/12/04/2017-12-04-%E6%9C%80%E8%BF%91%E5%AF%B9%E5%8D%9A%E5%AE%A2%E7%9A%84%E6%94%B9%E5%8A%A8/ <h2 id="用chroma进行语法高亮">用chroma进行语法高亮</h2> <p><a href="https://github.com/gohugoio/hugo/releases/tag/v0.30">最近</a>hugo内置了<a href="https://github.com/alecthomas/chroma">chroma</a>,这是类似Pygments的语法高亮引擎,但是纯粹用GO完成,可以方便地集成在hugo中。今后,在生成的页面中可以不需要<code>highlight.js</code>等脚本文件,理论上可以提高网页加载的速度。</p> <h3 id="使用方法">使用方法</h3> <p>在<code>config.toml</code>中加入以下内容:</p> <div class="highlight"><pre style="background-color:#f0f3f3;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-TOML" data-lang="TOML">pygmentsCodefences = <span style="color:#069;font-weight:bold">true</span> <span style="color:#09f;font-style:italic">#高亮markdown的代码块</span> pygmentsCodefencesGuessSyntax = <span style="color:#069;font-weight:bold">true</span> <span style="color:#09f;font-style:italic">#高亮markdown中没有标注语言的代码块</span> pygmentsStyle = <span style="color:#c30">&#39;manni&#39;</span> <span style="color:#09f;font-style:italic">#高亮主题</span></code></pre></div> <p>可用的主题见<a href="http://help.farbox.com/pygments.html">这里</a>。更多的设置可以参见hugo<a href="https://gohugo.io/content-management/syntax-highlighting/">帮助</a>。</p> <h2 id="用typography-js修改样式">用typography.js修改样式</h2> <p><a href="http://kyleamathews.github.io/typography.js/">Typography.js</a>是生成网页字体排印格式的库。只要简单地利用已有的主题,就可以生成较为完善的CSS格式。当然,如果需要更精确的中文排版,请移步<a href="https://hanzi.pro/">汉字标准格式</a>。</p> <p>Typography.js本身不提供直接输出CSS的功能,必须引入npm库,降低了网页加载速度。为了解决这个问题,我写了一个简单的脚本:<a href="https://github.com/heyeshuang/typography2css">typography2CSS</a>,用来直接生成CSS文件。</p> <p>之后,经过少量修改,即可用于现有的主题,效果如此博客所示。</p> 换了个新域名 https://blog.heysh.xyz/2017/11/27/2017-11-27-%E6%96%B0%E5%9F%9F%E5%90%8D/ Mon, 27 Nov 2017 22:59:56 +0800 https://blog.heysh.xyz/2017/11/27/2017-11-27-%E6%96%B0%E5%9F%9F%E5%90%8D/ <p>距我丢掉<a href="https://blog.heysh.xyz/2016/05/24/%E6%88%91%E4%B8%A2%E6%8E%89%E4%BA%86heysh-tk%E5%9F%9F%E5%90%8D/">heysh.tk</a>这个域名已经一年多了。在那之后,我失去了对<a href="heyeshuang.tk">tk域名</a>的信任,趁着换hugo的功夫,直接使用github.io的二级地址。最近,我有了一份工作,手头也宽裕了一些,所以换个域名再次提上了日程。</p> <p>我对自己博客的要求是,即使自己哪一天完全忘掉,这里还能存在比较长的一段时间。所以,我希望域名的续费价格尽量低一些——这并不(完全)是因为囊中羞涩。于是,在各个域名商的网站乱转的时候,我的心情颇有点像是在肉联厂门口徘徊的年轻母亲。“Namecheap的.me第一年只要$0.33……可是续费要120一年……”</p> <p>最终,是<a href="https://www.namesilo.com/?rid=1586115mc">Namesilo</a>拯救了我。在<a href="https://www.namesilo.com/pricing.php?rid=1586115mc">pricing</a>页面,把表格抄走,用Excel或者什么东西排个序,然后再把后面的那些行删掉,可选择的范围就少得多了。</p> <p>总而言之,这里的新地址是<a href="https://blog.heysh.xyz/">https://blog.heysh.xyz/</a>,没有什么特殊的意义,也许会用比较长的一段时间。</p> VPS初始化checklist https://blog.heysh.xyz/2017/11/25/2017-11-25-virmach-init/ Sat, 25 Nov 2017 12:35:54 +0800 https://blog.heysh.xyz/2017/11/25/2017-11-25-virmach-init/ <p>仅供存档。另外,virmach黑五大减价了,KVM主机5.6$一年美滋滋。</p> <p>这是我的邀请链接:<a href="https://billing.virmach.com/aff.php?aff=3032">https://billing.virmach.com/aff.php?aff=3032</a>,优惠码是<code>2017BFSAVE20</code>。</p> <h2 id="新建用户">新建用户</h2> <p>感谢<a href="https://blog.roadofgrowth.com/2015/04/28/e6-96-b0-e8-b4-advps-e5-88-9d-e5-a7-8b-e5-8c-96-e5-ae-89-e5-85-a8-e9-85-8d-e7-bd-ae/">https://blog.roadofgrowth.com/2015/04/28/e6-96-b0-e8-b4-advps-e5-88-9d-e5-a7-8b-e5-8c-96-e5-ae-89-e5-85-a8-e9-85-8d-e7-bd-ae/</a></p> <div class="highlight"><pre style="background-color:#f0f3f3;-moz-tab-size:4;-o-tab-size:4;tab-size:4">adduser hh gpasswd -a hh sudo</pre></div> <h2 id="添加ssh-key验证并禁用root用户ssh远程登录">添加SSH-KEY验证并禁用root用户SSH远程登录</h2> <div class="highlight"><pre style="background-color:#f0f3f3;-moz-tab-size:4;-o-tab-size:4;tab-size:4">su - demo mkdir .ssh chmod 700 .ssh vi .ssh/authorized_keys</pre></div><div class="highlight"><pre style="background-color:#f0f3f3;-moz-tab-size:4;-o-tab-size:4;tab-size:4">#vi /etc/ssh/sshd_config PermitRootLogin no PasswordAuthentication no Port 22222</pre></div><div class="highlight"><pre style="background-color:#f0f3f3;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-bash" data-lang="bash">sudo systemctl restart ssh</code></pre></div> <h2 id="安装配置防火墙-ufw">安装配置防火墙 (ufw)</h2> <div class="highlight"><pre style="background-color:#f0f3f3;-moz-tab-size:4;-o-tab-size:4;tab-size:4">sudo apt-get update&amp;&amp;sudo apt-get upgrade sudo apt-get install ufw sudo ufw allow 22222 #允许SSH sudo ufw enable</pre></div> <h2 id="安装vim">安装vim</h2> <h2 id="安装shadowsocks-libev">安装shadowsocks-libev</h2> <div class="highlight"><pre style="background-color:#f0f3f3;-moz-tab-size:4;-o-tab-size:4;tab-size:4">sudo sh -c &#39;printf &#34;deb http://httpredir.debian.org/debian jessie-backports main&#34; &gt; /etc/apt/sources.list.d/jessie-backports.list&#39; sudo apt update sudo apt -t jessie-backports install shadowsocks-libev sudo vim /etc/shadowsocks-libev/config.json sudo ufw allow &lt;PORT&gt; sudo systemctl start shadowsocks-libev sudo systemctl enable shadowsocks-libev</pre></div> <h2 id="安装4-x内核">安装4.x内核</h2> <div class="highlight"><pre style="background-color:#f0f3f3;-moz-tab-size:4;-o-tab-size:4;tab-size:4">sudo apt-get install -t jessie-backports linux-image-amd64 sudo update-grub</pre></div> <h2 id="启用bbr">启用BBR</h2> <p><a href="https://github.com/iMeiji/shadowsocks_install/wiki/%E5%BC%80%E5%90%AFTCP-BBR%E6%8B%A5%E5%A1%9E%E6%8E%A7%E5%88%B6%E7%AE%97%E6%B3%95#%E5%BC%80%E5%90%AFbbr">https://github.com/iMeiji/shadowsocks_install/wiki/%E5%BC%80%E5%90%AFTCP-BBR%E6%8B%A5%E5%A1%9E%E6%8E%A7%E5%88%B6%E7%AE%97%E6%B3%95#%E5%BC%80%E5%90%AFbbr</a></p> 利用kcpraw流量加速 https://blog.heysh.xyz/2017/11/18/2017-11-18-kcpraw-speed-up/ Sat, 18 Nov 2017 16:36:55 +0800 https://blog.heysh.xyz/2017/11/18/2017-11-18-kcpraw-speed-up/ <p><a href="https://blog.heysh.xyz/2015/01/07/shadowsocksipv6%E5%92%8C%E4%BE%BF%E5%AE%9C%E7%9A%84vps/">2015年</a>和<a href="https://blog.heysh.xyz/2016/10/25/shadowsocks-2016-%E4%B8%80%E6%AC%A1%E6%80%A7%E8%AE%A4%E8%AF%81kcp%E5%8F%8A%E5%85%B6%E4%BB%96/">2016年</a>,我写过两篇关于 <em>科学上网</em> 的博客,之后,又在VPS上安装了<a href="https://v2ray.com/">v2ray</a>,这个应用直接支持mKCP,在丢包严重的网络环境下效果不错。</p> <p>然后是最近,为了贯彻**大精神,实现什么什么自信的目标,KCP依赖的udp包被自信的家伙们无情地屏蔽了。在标准的shadowsocks和使用websocket的v2ray下,网速在50k左右,我感觉自己的网瘾又要发作了——</p> <p>以上是背景。</p> <p>虽然UDP被屏蔽了,但是TCP暂时还幸免于难,所以,可以把UDP包伪装成TCP的样子来绕过检查。有两个程序可以实现这种功能:</p> <ul> <li><a href="https://github.com/wangyu-/udp2raw-tunnel">udp2raw</a>,可以将所有UDP包整容成TCP的样子,不过这个程序在Windows下有些问题,而且最近Firefox的一堆破事让我不太想用Linux了;</li> <li><a href="https://github.com/ccsexyz/kcpraw">kcpraw</a>,是原始kcptun的fork,和kcptun的用法类似,在Windows下只需要安装<a href="https://www.winpcap.org/install/default.htm">winpcap</a>就可以用。</li> </ul> <p>在这里使用kcpraw包装原来shadowsocks的流量(纯粹是因为virtualbox没配好用不了udp2raw),假设读者有基本的linux知识并已经部署了shadowsocks。</p> <h2 id="服务器端">服务器端</h2> <h3 id="下载kcpraw">下载kcpraw</h3> <div class="highlight"><pre style="background-color:#f0f3f3;-moz-tab-size:4;-o-tab-size:4;tab-size:4">mkdir ~/kcpraw cd ~/kcpraw wget https://github.com/ccsexyz/kcpraw/releases/download/v20171019/kcpraw-linux-amd64-20171021.tar.gz tar zxvf kcpraw-linux-amd64-20171021.tar.gz</pre></div> <h3 id="在后台开启kcpraw">在后台开启kcpraw</h3> <div class="highlight"><pre style="background-color:#f0f3f3;-moz-tab-size:4;-o-tab-size:4;tab-size:4"> sudo -b nohup ~/kcpraw/kcpraw_server_linux_amd64 -t &#34;127.0.0.1:443&#34; -l &#34;:8388&#34; -mode fast2 &amp;</pre></div> <p>其中,<code>443</code>是要包装的shadowsocks端口,同时,<code>8388</code>是kcpraw使用的端口,请保证服务器防火墙允许<code>8388</code>端口通过。</p> <h2 id="客户端">客户端</h2> <h3 id="安装winpcap-如果客户端是windows的话">安装winpcap(如果客户端是Windows的话)</h3> <p>对于最新版本的Windows10,原版的<code>winpcap</code>和<code>win10pcap</code>似乎都不能用,可以使用兼容的<a href="https://github.com/nmap/npcap">npcap</a>。</p> <h3 id="运行kcpraw">运行kcpraw</h3> <div class="highlight"><pre style="background-color:#f0f3f3;-moz-tab-size:4;-o-tab-size:4;tab-size:4">kcpraw_client_windows_amd64 -r &#34;&lt;服务器IP&gt;:8388&#34; -l &#34;:1082&#34; -mode fast2</pre></div> <p>其中<code>1082</code>是设定的本地kcpraw端口。</p> <h3 id="修改shadowsocks客户端配置">修改shadowsocks客户端配置</h3> <p>在你使用的客户端中把服务器地址设为<code>localhost:1082</code>,其余不变,即可使shadowsocks享受KCP加速。</p> <p>天气越来越冷,似乎离互联网白名单也越来越近了。到那时,我可能会换一个爱好,比如做一个伟大的白日梦什么的。</p> Aeolipile boiling: Your blog (with code and formula) on Steem! https://blog.heysh.xyz/2017/11/12/2017-11-12-aeolipile-boiling/ Sun, 12 Nov 2017 22:12:00 +0800 https://blog.heysh.xyz/2017/11/12/2017-11-12-aeolipile-boiling/ <ul> <li><a href="https://heyeshuang.github.io/aeolipile/#/@heyeshuang/aeolipile-your-code-and-formula-on-steem">Aeolipile: your code and formula on Steem</a></li> <li><a href="https://heyeshuang.github.io/aeolipile/#/@heyeshuang/aeolipile-update-new-theme-link-generator-and-more">Aeolipile update: new theme, link generator and more!</a></li> </ul> <p>These days I was busy tinkering with Aeolipile. Now it has more exciting features! Wanna know what is Aeolipile? See the posts above!</p> <h2 id="now-we-have-author-page">Now we have author page!</h2> <p>It has been at the checklist for a long time! A big fan of a Steemian? Here's a place for his/her any post at <code>https://heyeshuang.github.io/aeolipile/#/@&lt;USERNAME&gt;</code>!</p> <p>For example, you can find @Elear's posts at <a href="https://heyeshuang.github.io/aeolipile/#/@elear">https://heyeshuang.github.io/aeolipile/#/@elear</a>, or my posts (contain some Chinese) at <a href="https://heyeshuang.github.io/aeolipile/#/@heyeshuang">https://heyeshuang.github.io/aeolipile/#/@heyeshuang</a>.</p> <h2 id="and-finally-aeolipile-as-your-own-blog">And finally, Aeolipile as your own blog!</h2> <p>Like aeolipile? Now you can bring it home!<sup class="footnote-ref" id="fnref:1"><a class="footnote" href="#fn:1">1</a></sup> I have added blog mode to the page, which makes it possible to deploy aeolipile for your post only! In other words, a personal blog!</p> <p>Check the instance of aeolipile-blog at <a href="https://aeolipile-blog.netlify.com/">https://aeolipile-blog.netlify.com/</a>.</p> <p>See the difference? A tidy URL without anyone else, like other blog systems do! You can modify the domain name, the title and anything you can imagine!</p> <h3 id="so-how-can-i-get-one">So, how can I get one?</h3> <ul> <li>Download <code>dist.zip</code> from <a href="https://github.com/heyeshuang/aeolipile/releases">this link</a></li> <li>extract that zip file</li> <li>open config.js with any text editor</li> <li>find &quot;heyeshuang&quot; (that's me) and replace to your username</li> <li>And upload this folder to wherever you can deploy static websites, like <a href="http://www.netlify.com">netlify</a></li> </ul> <p>And that's all! Enjoy!</p> <h3 id="or-if-you-are-a-guru-developer">Or if you are a guru developer...</h3> <p>Feel free (as in freedom) to star, fork and contribute to <a href="https://github.com/heyeshuang/aeolipile/">https://github.com/heyeshuang/aeolipile/</a>! Basic config is at <code>/src/config.js</code>, and the CSS file <code>/src/typo/typo-fangsong.css</code> is for the typography. Transform aeolipile to your favourite! And don't forget to pull your code to me!</p> <div class="footnotes"> <hr> <ol> <li id="fn:1">Not responsible for damage, theft, etc. It bites! <a class="footnote-return" href="#fnref:1"><sup>[return]</sup></a></li> </ol> </div> Aeolipile update: new theme, link generator and more! https://blog.heysh.xyz/2017/11/06/2017-11-06-aeolipile-more-powerful/ Mon, 06 Nov 2017 19:17:38 +0800 https://blog.heysh.xyz/2017/11/06/2017-11-06-aeolipile-more-powerful/ <p>A few days ago I introduced <a href="https://heyeshuang.github.io/aeolipile/#/@heyeshuang/aeolipile-your-code-and-formula-on-steem">Aeolipile</a>, a steem post reader designed for coders, providing some advanced features. And now, it becomes more powerful!</p> <p>As usual, you could see this post <a href="https://heyeshuang.github.io/aeolipile/#/@heyeshuang/aeolipile-update-new-theme-link-generator-and-more">here</a>.</p> <h2 id="link-generator">Link Generator</h2> <p>You may wonder how did I get the post link before submit the post. The answer is: <a href="https://heyeshuang.github.io/aeolipile/#/linkgen"><em>link generator</em></a>. Just input your username and post title, and you'll have the Aeolipile Link(tm)!</p> <p><figure><img src="https://res.cloudinary.com/hpiynhbhq/image/upload/v1509976066/lsnzzxkvprdxr4m12qbd.gif" alt="2.gif"></figure></p> <p>The generator uses the identical technology with Steemit, and is compatible with any language.</p> <p>So, next time you write your post at Steemit (or other) editor, you may want to:</p> <ul> <li>create a good title for your article</li> <li>type your name and title into <a href="https://heyeshuang.github.io/aeolipile/#/linkgen"><em>link generator</em></a></li> <li>copy the Aeolipile Link before your post</li> <li>and hit &quot;Post!&quot;</li> </ul> <p>And this article will link to Aeolipile even before publish!</p> <h2 id="new-loading-page">New loading page</h2> <p><figure><img src="https://res.cloudinary.com/hpiynhbhq/image/upload/v1509976296/hrkxodskky1ncg8enm8m.gif" alt="1.gif"></figure></p> <p>Stops everyone from getting bored!</p> <h2 id="and-brand-new-theme">and brand new theme!</h2> <p>With Chinese characters in mind (of course), I have carefully chosen proper fonts for both Chinese and English. Head to <a href="https://heyeshuang.github.io/aeolipile/#/@heyeshuang/hugo">https://heyeshuang.github.io/aeolipile/#/@heyeshuang/hugo</a> to see a Chinese example! Or, watch <a href="https://heyeshuang.github.io/aeolipile/#/@heyeshuang/aeolipile-update-new-theme-link-generator-and-more">this post on Aeolipile</a>, if you haven't!</p> <hr> <p>And this is not the end, I still have some dark thoughts... Anyway, welcome to fork, push and comment! Your opinions and ideas are precious.</p> 社交恐惧症患者也想用Steem,所以我做了Aeolipile https://blog.heysh.xyz/2017/11/04/2017-11-04-aeolipile/ Sat, 04 Nov 2017 11:55:46 +0800 https://blog.heysh.xyz/2017/11/04/2017-11-04-aeolipile/ <blockquote> <p>TL;DR: 你可以在<a href="https://heyeshuang.github.io/aeolipile/#/@heyeshuang/steem-aeolipile">这个链接</a>看到Aeolipile。</p> </blockquote> <p><a href="https://steemit.com/cn/@heyeshuang/steem-a-closer-look-to-steem">我曾经说</a>不会把博客完全搬到Steem上。除了之前说过的原因之外,还有一些感性上的理由。</p> <p>和那些<a href="https://steemit.com/cn/@tumutanzi/5bbm33">网红博主(开玩笑的)</a>不同,我的博客没有什么人会光顾,这并不是什么坏事:只有这样,我才能感到真正的自由。</p> <p>但是Steemit不同。页面下面的评论框和小数字,这些东西时刻在提醒我,你的文字是有人看的。对其他人来说,这可能是一件好事。可是,对于我来说,意识到有人在看这些东西,让我不自觉地在意起别人的感受了。我在敲键盘的时候,常常会想:“别人是怎么看这段话的?”然后,强烈的自我厌恶就会让我没办法接着写下去了。</p> <p>而那些小数字更是推波助澜,它们直接给我的文字标上了一个价码,然后跟我说:“大家好像不太喜欢你的东西啊,这次只有这些,下次继续努力吧。”</p> <p>可是我是因为喜欢才踢罐子的啊。<sup class="footnote-ref" id="fnref:bottle"><a class="footnote" href="#fn:bottle">1</a></sup></p> <p>如果我的内心能够更强大一点的话,我当然可以说:“F**k yourself,老子乐意”。但是显然现在的我还不行。所以,我做了这个<code>Aeolipile</code>,来 <em>暂时</em> 平复一下内心的情绪。</p> <p>言归正传。Aeolipile是一个Steem文章的渲染工具,(明面上的)用途是为了增强Steemit的Markdown功能,比如说代码、公式什么的。比如这篇文章,可能也需要访问<a href="https://heyeshuang.github.io/aeolipile/#/@heyeshuang/steem-aeolipile">这个页面</a>才能看到脚注。具体支持的功能,可以看<a href="https://heyeshuang.github.io/aeolipile/#/@heyeshuang/aeolipile-your-code-and-formula-on-steem">这篇文章</a>。大体上说,你可以在这里使用几乎所有Markdown的扩展语法。(而且之后我可能会把页面做得更好看些……也许)</p> <p>已有的文章都可以用Aeolipile渲染,只要访问这个页面就行:</p> <div class="highlight"><pre style="background-color:#f0f3f3;-moz-tab-size:4;-o-tab-size:4;tab-size:4">https://heyeshuang.github.io/aeolipile/#/@作者名字/文章链接/</pre></div> <p>和Steemit本身链接的构成差不多。</p> <p>如果你也想使用这个工具的话,我建议:</p> <ul> <li>先为你的文章起个名字,名字中需要有英文单词——否则会产生随机的链接</li> <li>在<a href="https://jsfiddle.net/6p7n7dks/2/">这里</a>输入标题,得到你文章的链接地址 <ul> <li>过几天我可能会做一个单独的页面,可能</li> </ul></li> <li>还是在Steemit的编辑器里写下内容</li> <li>把Aeolipile的地址写在文章前面</li> <li>点击发送,不需要做什么其他的工作</li> </ul> <p>这个工具本身是开源的:</p> <p><a href="https://github.com/heyeshuang/aeolipile">https://github.com/heyeshuang/aeolipile</a></p> <p>欢迎fork,如果不嫌弃代码写得烂的话。</p> <p>最后,我还想说一句台词:</p> <blockquote> <p>I could be bounded in a nutshell and count myself a king of infinite space.<sup class="footnote-ref" id="fnref:Shakespeare"><a class="footnote" href="#fn:Shakespeare">2</a></sup></p> </blockquote> <p>当然,没准一个Aeolipile也行。</p> <div class="footnotes"> <hr> <ol> <li id="fn:bottle"><a href="https://www.zhihu.com/question/19575136/answer/14470032">https://www.zhihu.com/question/19575136/answer/14470032</a> <a class="footnote-return" href="#fnref:bottle"><sup>[return]</sup></a></li> <li id="fn:Shakespeare">Hamlet: Act 2, Scene 2, Page 11 <a class="footnote-return" href="#fnref:Shakespeare"><sup>[return]</sup></a></li> </ol> </div> https://blog.heysh.xyz/2017/11/04/fragment/ Sat, 04 Nov 2017 11:48:41 +0800 https://blog.heysh.xyz/2017/11/04/fragment/ <p>我坐在家里自己的房间,母亲在外面忙碌。</p> <p>我突然发现我爷爷坐在我旁边;他被一排椅子挡住,我只能看到他的白发和皱纹。</p> <p>“您是回来看我了吗?”我想起身看他的脸,好像看到他对我笑了一下。</p> <p>现在想起来,当时我可能意识到了什么,但是没有发现这是一个梦。</p> <p>如果世界上真的有灵异事件该多好——我,一个飞面神教信徒,突然有这样的感觉。</p> Aeolipile: your code and formula on Steem https://blog.heysh.xyz/2017/11/02/2017-11-02-aeolipile-your-code-and-formula-on-steem/ Thu, 02 Nov 2017 19:17:38 +0800 https://blog.heysh.xyz/2017/11/02/2017-11-02-aeolipile-your-code-and-formula-on-steem/ <p><a href="https://heyeshuang.github.io/aeolipile/#/@heyeshuang/aeolipile-your-code-and-formula-on-steem">https://heyeshuang.github.io/aeolipile/#/@heyeshuang/aeolipile-your-code-and-formula-on-steem</a></p> <p>Please click ↑ to read the post!</p> <p><a href="https://steemit.com/">Steem</a> is a blockchain-based rewards platform for publishers to monetize content and grow community. However, the Steemit editor does not provide advanced markdown features, like code highlight, mathematical notation, etc. The lack makes it hard to write technical posts on Steem.</p> <p>So I made this webpage to render Steem discussion with more markdown syntax enabled. Then we can use Steem for some...boring contents.</p> <h2 id="usage">Usage</h2> <p>You can easily append author name and post link after <a href="https://heyeshuang.github.io/aeolipile/#/">https://heyeshuang.github.io/aeolipile/#/</a>, like this:</p> <div class="highlight"><pre style="background-color:#f0f3f3;-moz-tab-size:4;-o-tab-size:4;tab-size:4">https://heyeshuang.github.io/aeolipile/#/@USERNAME/PERMLINK/</pre></div> <p>Similar with the Steemit URL. And you can simply add this link before your post, just like me. :wink:</p> <h3 id="features">Features</h3> <p>With <a href="https://github.com/markdown-it/markdown-it">markdown-it</a>, you can get almost every feature for <a href="https://guides.github.com/features/mastering-markdown/#GitHub-flavored-markdown">GitHub Flavored Markdown </a>.</p> <h4 id="code">Code!</h4> <p>Place your code between ``` like <a href="https://help.github.com/articles/creating-and-highlighting-code-blocks/">this</a>, then you'll get a codeblock:</p> <div class="highlight"><pre style="background-color:#f0f3f3;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-ruby" data-lang="ruby"><span style="color:#366">require</span> <span style="color:#c30">&#39;redcarpet&#39;</span> markdown <span style="color:#555">=</span> <span style="color:#360">Redcarpet</span><span style="color:#555">.</span>new(<span style="color:#c30">&#34;Hello World!&#34;</span>) <span style="color:#366">puts</span> markdown<span style="color:#555">.</span>to_html</code></pre></div> <h4 id="math">Math!</h4> <p>You can write TeX between <code>$$</code> tags.</p> <p><span class="math">\[\hat{y}= \sigma(\omega^T X+b)=\frac{1}{1+e^{-(\omega^T X+b)}}\]</span></p> <h4 id="emoji">Emoji!</h4> <p>:)</p> <h4 id="other-advanced-stynax">Other advanced stynax!</h4> <p>You can check <a href="https://heyeshuang.github.io/aeolipile/#/@sean0010/markdown-test">https://heyeshuang.github.io/aeolipile/#/@sean0010/markdown-test</a> for the markdown test. Almost everything!</p> <h4 id="and-">and ...</h4> <p>This page is not a replacement of steemit.com or else, so I will keep it simple &amp; stupid. Welcome to fork me at <a href="https://github.com/heyeshuang/aeolipile">https://github.com/heyeshuang/aeolipile</a>!</p> 2017年的fontconfig设置 https://blog.heysh.xyz/2017/10/29/2017-10-29-fontconfig-for-7012/ Sun, 29 Oct 2017 13:40:50 +0800 https://blog.heysh.xyz/2017/10/29/2017-10-29-fontconfig-for-7012/ <p>都7012年了linux还要自己设置字体……</p> <p>不过思源(Noto)系列字体真的是开源界的福音,字重多,字符全,自带hinting,长得还漂亮,换上以后整个系统都显得高级起来了~</p> <p>为了获得“高级感”,首先你需要安装<code>noto-fonts</code>和<code>noto-fonts-cjk</code>。因为是7012年,中文字体里自带的英文字符也不算太丑,所以不需要像<a href="https://wiki.archlinux.org/index.php/Font_Configuration/Chinese_Font_Configurations_(%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87)#Windows.C2.AE.E6.98.BE.E7.A4.BA.E6.95.88.E6.9E.9C.E7.9A.84.E5.AD.97.E4.BD.93.E5.8F.82.E8.80.83.E9.85.8D.E7.BD.AE">ArchWiki</a>和<a href="https://ohmyarch.github.io/2017/01/15/Linux%E4%B8%8B%E7%BB%88%E6%9E%81%E5%AD%97%E4%BD%93%E9%85%8D%E7%BD%AE%E6%96%B9%E6%A1%88/">这篇博文</a>一样,分别定义中文和英文。全用Noto就好!(而且,分别定义的方法在chrome上有些小问题……)</p> <p><code>~/.config/fontconfig/fonts.conf</code>的内容附在<a href="https://gist.github.com/heyeshuang/03d69c1823b8cf769819d36b34f34f71">这里</a>,保存之后用<code>fc-cache --force --verbose</code>更新字体缓存就行了。</p> <h2 id="接下来是截图时间">接下来是截图时间:</h2> <p> <figure> <img src="/font/5.png" width="50%" /> <figcaption> <h4>这才是真正的宋体</h4> </figcaption> </figure> <figure> <img src="/font/3.png" width="50%" /> <figcaption> <h4>在正文也毫无压力</h4> </figcaption> </figure> <figure> <img src="/font/4.png" width="50%" /> <figcaption> <h4>还有这个light字重</h4> </figcaption> </figure> </p> <p>题外话,中文可用的字体实在是太少了。因为<code>SimSun</code>太渣,windows下的中文连个可用的<code>serif</code>字体都没有,每天只能对着呆板的雅黑干瞪眼……</p> 不要脸的乞讨时间 https://blog.heysh.xyz/wallet/ Sat, 28 Oct 2017 18:42:21 +0800 https://blog.heysh.xyz/wallet/ <p><img src="/begging.jpg" alt="乞讨" /></p> <p>万一有人想给我转账呢……梦想总是要有的……</p> <p>所以说下面是我的各种钱包地址……</p> <ul> <li>BITCOIN:1Eb1smwqf9oGAG74Xkn52p19ZeXaGwBvPv</li> </ul> <p><img src="/COIN.PNG" alt="空空如也" /></p> <ul> <li>Steem: @heyeshuang</li> <li>Ripple: rauR73vanw6yGYLvhg658GwyNkKZL61YMJ</li> <li>支付宝就是我常用的那个gmail邮箱……等我哪天被害妄想好些的时候我会说的。</li> </ul> 为hugo加入数学公式支持 https://blog.heysh.xyz/2017/10/22/added-math-support/ Sun, 22 Oct 2017 13:37:58 +0800 https://blog.heysh.xyz/2017/10/22/added-math-support/ <p>数学学渣也要公式?其实我也不清楚我要这个有什么用……反正先弄了再说。</p> <p>官方文档中其实有<a href="https://gohugo.io/content-management/formats/#mathjax-with-hugo">这一部分内容</a>,但是那里是用MathJax的,而且在标准markdown文件里需要进行额外的设置。如果像<a href="http://nosubstance.me/post/a-great-toolset-for-static-blogging/">这里</a>一样使用KaTeX+Mmark,写起来会方便许多。</p> <p>Hugo自带Mmark的支持,只要在新建文章的时候使用<code>.mmark</code>后缀就行:</p> <div class="highlight"><pre style="background-color:#f0f3f3;-moz-tab-size:4;-o-tab-size:4;tab-size:4">hugo new post/some-name.mmark</pre></div> <p>这种格式是markdown的超集,本来是用来写IETF文档的。具体支持的语法可以看<a href="https://github.com/miekg/mmark/wiki/Syntax">这里</a>。</p> <p>用这种渲染器,用<code>$$</code>包裹的文字会自动转成用<code>\[</code>或者<code>\(</code>包裹,比如,<code>inline $$\sqrt{b^2-4ac}$$</code>会转成<code>\(\sqrt{b^2-4ac}\)</code></p> <p>之后,只要修改主题,把<span class="math">\(\KaTeX\)</span>引用进去就好了。对我自己使用的主题,改动见<a href="https://github.com/heyeshuang/blackburn/commit/d265e4556238628203eb6de7d3a3f88e4f392a42">这里</a>。</p> <p>效果如下:</p> <p>行内公式:<span class="math">\(\sqrt{b^2-4ac}\)</span></p> <p>单行公式:</p> <p><span class="math">\[\hat{y}= \sigma(\omega^T X+b)=\frac{1}{1+e^{-(\omega^T X+b)}}\]</span></p> <p>另外,还有一种更加复杂的<code>&lt;shortcode&gt;</code><a href="http://www.latkin.org/2016/08/07/better-tex-math-typesetting-in-hugo/">方法</a>,如果你是完美主义者的话。</p> 更琐碎的编辑器细节 / Some more trival details about Steemit https://blog.heysh.xyz/2017/10/14/about-steemit-editor/ Sat, 14 Oct 2017 23:04:00 +0800 https://blog.heysh.xyz/2017/10/14/about-steemit-editor/ <p>Steemit的前端代码在<a href="https://github.com/steemit/condenser/">https://github.com/steemit/condenser/</a>,读一读它的源代码,可以了解一些关于编辑器的技术细节。</p> <h2 id="排版问题">排版问题</h2> <h3 id="markdown">Markdown</h3> <p>Steemit里所有的markdown指南都指向<a href="https://guides.github.com/features/mastering-markdown/">https://guides.github.com/features/mastering-markdown/</a>,但其实并没有实现其中所有的功能。大体上,使用其中标准的 <em>Basic syntax</em> (或者叫做<code>CommonMark</code>)是比较安全的,但github favor的部分就说不定了。</p> <p><a href="https://github.com/steemit/condenser/blob/8a4e470fea6a34a9e19f8598c5261fd414d96fa8/src/app/components/cards/MarkdownViewer.jsx">编辑器</a>使用的markdown渲染库是<a href="https://github.com/jonschlinkert/remarkable">remarkable</a>。除了基本语法以外,只支持<a href="https://github.com/jonschlinkert/remarkable/#syntax-extensions">脚注、删除线和表格</a>等一些基本的语法,而且现在脚注的实现还有些问题。没有 <strong>代码高亮</strong> ,更没有 <strong>数学公式渲染</strong> ,可能这东西并不是面对我们这样的用户。</p> <p><a href="https://steemit.com/wpcommunity/@sean0010/markdown-test">这里</a>是关于高级markdown特性的测试。从<a href="https://steemd.com/wpcommunity/@sean0010/markdown-test">这里</a>可以看到其源码。</p> <p>顺便一提,我用的<code>hugo</code>静态博客生成器使用<code>blackfriday</code>,配置项很多,我十分满意。</p> <h3 id="那么用html实现高级功能呢">那么用HTML实现高级功能呢?</h3> <p>很遗憾,这也不大可能。经过<a href="https://github.com/steemit/condenser/blob/4d9c1d8f76366097d9a7159b1760f51d45201eb0/src/app/utils/SanitizeConfig.js">sanitize</a>过滤,编辑器只支持以下几个标签:</p> <div class="highlight"><pre style="background-color:#f0f3f3;-moz-tab-size:4;-o-tab-size:4;tab-size:4">div, iframe, del, a, p, b, i, q, br, ul, li, ol, img, h1, h2, h3, h4, h5, h6, hr, blockquote, pre, code, em, strong, center, table, thead, tbody, tr, th, td, strike, sup, sub</pre></div> <p>并没有什么超过Markdown语法的新功能。</p> <p>当然,编辑器好心地提供了几个class来控制文字和图像的位置:</p> <div class="highlight"><pre style="background-color:#f0f3f3;-moz-tab-size:4;-o-tab-size:4;tab-size:4">&#39;pull-right&#39;, &#39;pull-left&#39;, &#39;text-justify&#39;, &#39;text-rtl&#39;, &#39;text-center&#39;, &#39;text-right&#39;, &#39;videoWrapper&#39;</pre></div> <p>用法大概是 <code>&lt; div class=&quot;pull-right&quot;&gt; &lt; img src=&quot;imglink&quot; /&gt;&lt; /div &gt;</code>,或者看<a href="https://steemit.com/steemit/@primus/how-to-use-new-hidden-steemit-features-for-custom-formatting-within-post-content-floating-right-left-and-justifying">这里</a>的介绍。</p> <h2 id="文章的url生成原理">文章的URL生成原理</h2> <p>如果我在发布之前就知道文章的URL的话,就可以在文中引用自己了。这大概是一种自举 ;-)</p> <p>如果你的文章标题是纯中文的话就很简单了:地址是随机的。所以最好在标题里加上些英文(虽然看起来有点蠢)。</p> <p>URL通过<a href="https://github.com/pid/speakingurl">speakingurl</a>生成。比如,本文标题经过处理(过程见<a href="https://jsfiddle.net/heyeshuang/6p7n7dks/1/">此处</a>),得到<code>some-more-trival-details-about-steemit</code>,如果我之前没有发过同名文章的话,本文的URL就是<a href="https://steemit.com/cn/@heyeshuang/some-more-trival-details-about-steemit">https://steemit.com/cn/@heyeshuang/some-more-trival-details-about-steemit</a>,大概。</p> <p><a href="https://github.com/steemit/condenser/blob/164144aa2c57c12b136eb9c3d7fe46d930dfda04/src/app/redux/TransactionSaga.js#L412-L442">这里</a>是源代码中具体的实现函数,适合像我这样刻薄的人。</p> 对Steem的一些细节考察 / A closer look to Steem https://blog.heysh.xyz/2017/10/08/about-steem/ Sun, 08 Oct 2017 22:56:21 +0800 https://blog.heysh.xyz/2017/10/08/about-steem/ <h2 id="我的文章保存在哪里-会保存多久">我的文章保存在哪里?会保存多久?</h2> <p><strong>保存在各个矿工 (Miner / Witness Node) 的区块链上;很可能是永久保存。</strong></p> <p>和大多数区块链技术一样,一个矿工必须有完整的节点信息才可以进行挖矿。当然,具体的挖矿形式有一些区别,steem不需要超强的计算能力去破解hash,但是要求很低的网络延迟。</p> <p>这听起来好像跟<a href="https://ipfs.io">IPFS</a>和<a href="https://zeronet.io/">ZeroNet</a>差不多。分布式存储并不是什么新鲜事物,很久以前的bittorrent,emule什么的就已经做到了,但是问题是什么呢?</p> <p>当你上网去寻找一份200x年的、并不是十分热门的资料,但是只找到一个种子的时候,问题就出现了:这份信息被网络所遗忘了,也就是说,它死掉了。一份信息的死亡,并不是因为它自己有什么问题,只是因为不够红而已。</p> <p>当然,如果你恰巧拥有(原来的)迅雷会员,故事又将另当别论。在这个方面,商业公司比分布式存储更善良,或者说,记忆力更好。但是,当商业公司倒闭/转型/关闭离线下载服务的时候,我们就只能去爬虫的巢穴碰运气了。</p> <p>举个例子。在<a href="http://www.rongshuxia.com/">榕树下</a>如日中天,起点还没有出现的时候,我曾经看到过一篇名为《魂系大榕树》的知青文学,那种生活深深吸引了年幼的我。但是,这几天我再去找的时候,榕树下早已不复当时的枝繁叶茂,而且那篇文字,名字改成了《榕树魂》,散落在了互联网的各个角落。</p> <p>听起来十分先进的IPFS和ZeroNet似乎并没有解决这个问题。现在,ZeroNet上搭建的一些网站已经无法访问了。但是,虽然Steem的评分规则也极端倾向热门文章,但这种技术确实让我看到了冷门信息生存的希望:</p> <ul> <li>Steem是以一个整体存储的,区块链技术保证了这一点。即使是大鲸的文章也是一样。</li> <li>Steem主要保存文字内容,这并不是什么优点,但可以称为一种妥协。 <ul> <li>截止到2017.9.25日,整个Steem链子的体积大概是43GB(<a href="https://steemit.com/steem/@crokkon/steem-blockchain-size">来源</a>),考虑到一张双层蓝光光碟的容量大概是50Gb,这并不是一个很大的数字。</li> <li>作为一个小小的提醒,现在Steemit上的图片都保存在<a href="https://steemitimages.com/">https://steemitimages.com/</a>这个服务器上。<a href="https://steemit.com/censorship/@mynameisbrian/storing-images-on-the-steem-blockchain-censorship-resistant-images">有人</a>正在尝试直接保存在区块链中,对此我持谨慎悲观态度,毕竟已经有文字可以保存了。</li> </ul></li> <li>金钱。这个理由真的是太充足了,充足到之前的一切都变得毫无意义。让商业公司变得“善良”的动力,在steem这里也是一样。</li> </ul> <p>所以,Steem的各位,希望你们能够尽量产出更多的优秀内容,托你们的福,像我们这样不讨人喜欢的家伙们,也可以在互联网上找到一个不会被轻易遗忘的地方。</p> <h2 id="那么-我可以把自己的博客搬到这里来吗">那么,我可以把自己的博客搬到这里来吗?</h2> <p><strong>对我来说,暂时还不行。</strong></p> <p>正是因为Steem的记忆力太好,想要抹掉什么几乎不可能,所以很多东西并不适合写在上面。另外,一些 <em>特别</em> 不讨人喜欢的东西,我也不会放到这里,请移步<a href="https://heyeshuang.github.io/blog">我的博客</a>。</p> <p>气温骤降,我必须更加谨慎一些。</p> <h2 id="另外的一些细节">另外的一些细节</h2> <p>Steemit使用的markdown解析器是<code>remarkable</code>,并通过<code>sanitize</code>对HTML进行清洁。更加精细的排版问题,我会另外找时间尝试一下。</p> 在Hugo中折叠部分内容 https://blog.heysh.xyz/2017/10/07/collapsible-contents-for-hugo/ Sat, 07 Oct 2017 22:25:35 +0800 https://blog.heysh.xyz/2017/10/07/collapsible-contents-for-hugo/ <p>之前疯狂粘贴自己的<a href="https://blog.heysh.xyz/2017/10/01/firefox-to-quantum/">扩展</a> <del>凑字数</del> 的时候,我发现这种又臭又长的列表需要稍微隐藏一下,但是这里用的静态博客生成器 Hugo 并不原生支持折叠。所以,我利用 <code>shortcode</code> 功能自己写了一个。</p> <p><code>Shortcode</code> 的介绍在<a href="https://gohugo.io/templates/shortcode-templates/">这里</a>,主要难度在于go的html模板引擎。</p> <p>折叠部分用了 HTML5 的新特性:<a href="https://developer.mozilla.org/en-US/docs/Web/HTML/Element/details">&lt;details&gt;</a>,不支持 edge,这个浏览器应该没有人用吧……</p> <p>下面是shortcode的代码,放在<code>/themes/&lt;THEME&gt;/layouts/shortcodes/spoiler.html</code>下: <details> <summary> <h4> shortcode,点击展开 </h4> </summary> <div class="highlight"><pre style="background-color:#f0f3f3;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-html" data-lang="html">&lt;<span style="color:#309;font-weight:bold">details</span>&gt; &lt;<span style="color:#309;font-weight:bold">summary</span>&gt; &lt;<span style="color:#309;font-weight:bold">h4</span>&gt; {{ with .Get 0}}{{.}}{{else}}click to expand{{ end }} &lt;/<span style="color:#309;font-weight:bold">h4</span>&gt; &lt;/<span style="color:#309;font-weight:bold">summary</span>&gt; {{.Inner}} &lt;/<span style="color:#309;font-weight:bold">details</span>&gt;</code></pre></div> </details> </p> <p>用法是这样的:</p> <div class="highlight"><pre style="background-color:#f0f3f3;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-html" data-lang="html">{{% spoiler &#34;You killed my father!&#34; %}} I am your father. NOOOOOOO! {{% /spoiler %}}</code></pre></div> <p>当然,我还稍微改了一下CSS,之后会在模板里面更新。</p> <p>spoiler在steemit社区的讨论:<a href="https://github.com/steemit/condenser/issues/8">https://github.com/steemit/condenser/issues/8</a></p> Brave New World: Firefox to Quantum https://blog.heysh.xyz/2017/10/01/firefox-to-quantum/ Sun, 01 Oct 2017 10:29:28 +0800 https://blog.heysh.xyz/2017/10/01/firefox-to-quantum/ <p>在把现在的配置导入Waterfox之后,就可以升级Firefox Quantum了。强烈建议用离线模式启动,并取消登陆Firefox账号,防止污染自己的同步内容。</p> <p>在<code>不支持的扩展</code>页面,自带“查找替代品”功能,但是基本没有用,不如<a href="https://docs.google.com/spreadsheets/d/1TFcEXMcKrwoIAECIVyBU0GPoSmRqZ7A0VBvqeKYVSww/edit#gid=0">这个列表</a>和<a href="http://bbs.kafan.cn/thread-2100445-1-1.html">卡饭的帖子</a>。</p> <p>另外,基于WE的扩展页面都有一种廉价感,不像XUL画的窗口那样专业——当然这只是我的偏见。</p> <p>新Firefox一个进程的内存用量都快赶上整个Waterfox了,我怀疑这是三星的阴谋。</p> <p>等等,servo是不是跟三星有关系来着……</p> <p>下面是我安装扩展的完整列表,很长,<del>没有什么用</del> 可能会有点用</p> <h2 id="不兼容的扩展">不兼容的扩展</h2> <ul class="task-list"> <li><label><input type="checkbox" disabled class="task-list-item"> Art Project 0.1.5 -&gt; <a href="https://addons.mozilla.org/zh-CN/firefox/addon/free-art-tab/?src=search">Free Art Tab</a> <ul> <li>唔……有一些微妙的差别,我不认为这个算是被替换了</li> </ul></label></li> <li><label><input type="checkbox" checked disabled class="task-list-item"> AutoPagerize 0.9.17.1 -&gt; PageZipper <ul> <li>除了需要手动开启之外,效果意外的还可以</li> </ul></label></li> <li><label><input type="checkbox" disabled class="task-list-item"> Chrome Store Foxified 2.4 <ul> <li>很急</li> </ul></label></li> <li><label><input type="checkbox" disabled class="task-list-item"> DownThemAll! 3.0.8</label></li> <li><label><input type="checkbox" disabled class="task-list-item"> DownThemAll! AntiContainer 1.5 <ul> <li>想都不要想,Aria2你好</li> </ul></label></li> <li><label><input type="checkbox" disabled class="task-list-item"> ExHentai Easy 2 0.2.9 <ul> <li>呜呜呜(sad panda表情)</li> </ul></label></li> <li><label><input type="checkbox" disabled class="task-list-item"> Extension List Dumper 2 1.0.2 <ul> <li>这个列表就是用这个扩展生成的,生成之后就可以删了</li> <li>删了以后就再也没有啦~</li> </ul></label></li> <li><label><input type="checkbox" checked disabled class="task-list-item"> FireGestures 1.11.1 -&gt; <del>Foxy Gestures</del> Gesturefy <ul> <li><del>我就随便挑了个安装多的,当然有些方言不一样了,没有什么办法</del></li> <li>这个更漂亮一些</li> <li>而且这个扩展自带存储PDF功能,又少装一个扩展</li> </ul></label></li> <li><label><input type="checkbox" checked disabled class="task-list-item"> FoxyProxy Standard 4.6.5 -&gt; <a href="https://addons.mozilla.org/en-US/firefox/addon/switchyomega/">Proxy SwitchyOmega</a> <ul> <li>说实话,自从AutoProxy不更新以后,我看这个扩展不爽好久了</li> <li>对我来说Proxy SwitchyOmega还更好用一些</li> <li>然而PSO在隐私窗口还有些问题</li> </ul></label></li> <li><label><input type="checkbox" checked disabled class="task-list-item"> gouwudang-price-comparison-tool 3.2.5 -&gt; <a href="https://gwdang.com/app/extension?page=question&amp;guide=bookmark">bookmarklet</a> <ul> <li>这是一个比价扩展,用Bookmarklet可以稍微凑合一下</li> </ul></label></li> <li><label><input type="checkbox" checked disabled class="task-list-item"> Greasemonkey 3.16 -&gt; Violentmonkey <ul> <li>Tempermonkey “Proprietary, poor privacy, has a &lsquo;End-User License Agreement&rsquo; at installation”,他们都这么说了……</li> <li>而且我装的那些脚本好像也没有什么能用的了……</li> <li>现在的脚本安装网站是 <a href="https://greasyfork.org">https://greasyfork.org</a> 了啊</li> <li>等等,<a href="https://sleazyfork.org/zh-CN">https://sleazyfork.org/zh-CN</a> 是什么鬼(捂脸)</li> </ul></label></li> <li><label><input type="checkbox" disabled class="task-list-item"> Hide Caption Titlebar Plus 3.2.9 <ul> <li>无理无理</li> </ul></label></li> <li><label><input type="checkbox" disabled class="task-list-item"> Hide Unwanted Results of Google Search 1.6 <ul> <li>就算是被替代了吧</li> </ul></label></li> <li><label><input type="checkbox" disabled class="task-list-item"> https switch 0.0.3 <ul> <li>很久没用过了</li> </ul></label></li> <li><label><input type="checkbox" checked disabled class="task-list-item"> NoSquint Plus 54.0 -&gt; <a href="https://addons.mozilla.org/addon/zoom-page-we/">Zoom Page WE</a> <ul> <li>要缩放整个页面(而不仅仅是文字),按一下<code>alt</code>键能呼出菜单,然后去掉<code>查看-缩放-仅缩放文字</code>前面的勾。</li> </ul></label></li> <li><label><input type="checkbox" checked disabled class="task-list-item"> Offline QR generator 1.1.3.1-signed -&gt; <a href="https://addons.mozilla.org/zh-CN/firefox/addon/qr-code-image-generator/?src=api">QR Code Image Generator</a> <ul> <li>当然,Offline是没有了</li> </ul></label></li> <li><label><input type="checkbox" disabled class="task-list-item"> PentadactylSigned 7307 <ul> <li>…………………………Saka Key的感觉完全不一样</li> </ul></label></li> <li><label><input type="checkbox" checked disabled class="task-list-item"> Pocket 1.0.5 -&gt; 自带,而且我不知道我之前还装了这个</label></li> <li><label><input type="checkbox" checked disabled class="task-list-item"> printpdf 0.76.1-signed.1-signed <ul> <li>居然用一个鼠标手势解决了</li> </ul></label></li> <li><label><input type="checkbox" checked disabled class="task-list-item"> QuickDrag 2.1.3.23.1-signed.1-signed -&gt; Fire Drag <ul> <li>当然还是挑了个安装多的</li> </ul></label></li> <li><label><input type="checkbox" disabled class="task-list-item"> ReDisposition 0.3.0 <ul> <li>这是一个可以解决下载乱码的扩展,原作者muzuiget的博客已经无法访问了,只留下了<a href="https://disqus.com/home/discussion/qixinglu/firefox_redisposition/">disquz的残渣</a>和一大堆吸血的转载</li> <li>这不禁使我担心起本博客的未来</li> <li>似乎用<a href="https://github.com/FirefoxBar/HeaderEditor/releases">HeaderEditor</a>可以实现,不过我还没有试过</li> </ul></label></li> <li><label><input type="checkbox" disabled class="task-list-item"> RefControl 0.8.17.1-signed.1-signed -&gt; <a href="https://addons.mozilla.org/zh-CN/firefox/addon/referercontrol/">referer control</a> <ul> <li>看不到希望小学图片……我一点都不遗憾</li> </ul></label></li> <li><label><input type="checkbox" disabled class="task-list-item"> RSS Handler for Feedly 1.0 <ul> <li>我当时为什么要装这个?</li> </ul></label></li> <li><label><input type="checkbox" checked disabled class="task-list-item"> ScreenShot Link 2.2.1.1-signed.1-signed <ul> <li>这功能居然自带了</li> </ul></label></li> <li><label><input type="checkbox" disabled class="task-list-item"> Tab Mix Plus 0.5.0.4</label></li> <li><label><input type="checkbox" checked disabled class="task-list-item"> WizNote Web Clipper 1.0.37.1-signed.1-signed -&gt; bookmarklet <ul> <li>反正之前也不怎么好用</li> </ul></label></li> <li><label><input type="checkbox" checked disabled class="task-list-item"> 隐私标签页 0.2.2 -&gt; <a href="https://addons.mozilla.org/zh-CN/firefox/addon/incognito-this-tab/?src=find-replacement"> Incognito This Tab</a> <ul> <li>可是还是不能在同一个窗口打开……哇的一声哭了出来</li> </ul></label></li> </ul> <h2 id="原生web-extension">原生Web Extension</h2> <ul class="task-list"> <li><label><input type="checkbox" checked disabled class="task-list-item"> Duplicate Tabs Closer 3.0.0</label></li> <li><label><input type="checkbox" checked disabled class="task-list-item"> Enhanced Steam 9.5</label></li> <li><label><input type="checkbox" checked disabled class="task-list-item"> Pushbullet 335</label></li> <li><label><input type="checkbox" checked disabled class="task-list-item"> Redirector 3.1.0 <ul> <li>是S1大姨妈的时候用的,现在应该没什么用</li> </ul></label></li> <li><label><input type="checkbox" checked disabled class="task-list-item"> uBlock Origin 1.14.10</label></li> <li><label><input type="checkbox" checked disabled class="task-list-item"> 二维码扫描器 1.2.3</label></li> <li><label><input type="checkbox" checked disabled class="task-list-item"> 印象笔记·剪藏 6.12.4</label></li> <li><label><input type="checkbox" checked disabled class="task-list-item"> 终结内容农场 2.0.2</label></li> </ul> Yesterday Once More: Firefox to Waterfox https://blog.heysh.xyz/2017/09/30/firefox-to-waterfox/ Sat, 30 Sep 2017 23:44:33 +0800 https://blog.heysh.xyz/2017/09/30/firefox-to-waterfox/ <p><a href="https://www.mozilla.org/en-US/firefox/quantum/">Firefox Quantum</a>(就是Firefox 57) 发布了 beta 版,主动放弃了<code>XUL</code>和老版本扩展。我不知道这会不会又是一个“燃烧的平台”,只想体验一下Quantum传说中的新技术——顺便看看和Chrome有什么区别。</p> <p>当然,在升级57之前,需要给 Firefox 的状态存个盘。Waterfox是一个很好的选择:</p> <ul> <li>不久前刚刚引入了自己的配置文件,可以和Firefox同时开启;</li> <li>对比Pale Moon(另一个Firefox的Fork),分叉时间更晚,对“现代”扩展支持得更好。</li> </ul> <h2 id="迁移">迁移</h2> <p>迁移的过程还是很简单的:只要还没升级到57,就可以用<code>FEBE</code>扩展进行备份和恢复。注意在恢复到Waterfox的时候(选择“恢复配置”),需要新建一个Profile。</p> <h2 id="中文">中文</h2> <p>为了显示中文界面,需要安装<a href="https://addons.mozilla.org/en-US/firefox/addon/chinese-simplified-zh-cn-la/versions/">Chinese Simplified (zh-CN) Language Pack</a>,并访问<code>about:config</code>,将<code>intl.locale.matchOS</code>改为<code>true</code>。这样,<del>Firefox</del> Waterfox就可以按照系统的语言来显示了。</p> <h2 id="pentadactyl">Pentadactyl</h2> <p>Waterfox默认开启了多进程模式,会导致<code>Pentadactyl</code>不能正常工作:</p> <div class="highlight"><pre style="background-color:#f0f3f3;-moz-tab-size:4;-o-tab-size:4;tab-size:4">Error: Permission denied to access property &#34;length&#34;</pre></div> <p>仍然是在<code>about:config</code>页面,查找<code>browser.tabs.remote.autostart</code>,把所有找到的项都改成<code>false</code>。</p> <div class="highlight"><pre style="background-color:#f0f3f3;-moz-tab-size:4;-o-tab-size:4;tab-size:4">browser.tabs.remote.autostart=false browser.tabs.remote.autostart.2=false</pre></div> <p>OK,保存完成,是时候升级<a href="https://www.mozilla.org/zh-CN/firefox/channel/desktop/#beta">Firefox Quantum</a>了。</p> <p>啊对了,本文同时发在<a href="http://heyeshuang.tk">我的博客</a>和<a href="https://steemit.com/cn/@heyeshuang/yesterday-once-more-firefox-to-waterfox">Steemit</a>上。基于时髦的区块链技术,应该会让我的博客活得时间稍微长一点。</p> <p>——当然,一些更加私人的东西是只会在我的博客上发的。为了躲避猎人,有时候我需要把自己的脚印扫掉。</p> 首都图书馆半日游 https://blog.heysh.xyz/2017/09/09/2017-09-03-jour-to-lib/ Sat, 09 Sep 2017 12:44:02 +0800 https://blog.heysh.xyz/2017/09/09/2017-09-03-jour-to-lib/ <p><a href="https://blog.heysh.xyz/2017/08/12/2017-08-12-recent/">之前</a>说过我因为网瘾被送去荒山改造,不得不说,这还是颇有些效果的。比如,上上周日我久违地踏出了屋门,而且也并没有被阳光化为灰烬。也许再过上几个月,我可能能够真正地过上人类的生活——</p> <p>这当然是在开玩笑,除了我踏出屋门这件事以外。那天我去了首都图书馆。拿到了教官/总长/特首的出门许可之后,中午,我穿过垃圾场,跳过泥潭,走过柳林,再从围墙的缺口钻过去,然后,又回到了文明世界。</p> <figure> <img src="/yard-of-chaos.jpg" /> <figcaption> <h4>我的部分旅途,右上角为文明世界</h4> </figcaption> </figure> <p>我真正到达的时间已经是下午了。站在首都图书馆的门口,我深深地吸了一口气——随即被臭豆腐的气味呛到——走了进去。</p> <p>也许大多数图书馆都会把 <em>棒针编织</em> 和 <em>实用五金手册</em> 放在一起,并在后面的书架上摆上一本川菜烹饪指南。但是,把J和TP类型的书扔到同一处的,我只见过首都图书馆一家。在我拿出一本男中音教材,想知道声乐有几种唱法的时候,可以瞟到一些男人,带着高耸的发际线、以及更加厚重的书籍,慌张地走来走去。那些书名虽然是中文,但总是夹杂着一些不知所云的英文单词。</p> <p>不远处,有人蜷曲在凳子上,盯着腿上的一本《红楼梦》,一枚金属书签反射出刺眼的光芒。高大宽敞的桌椅很多,大多数被纸、笔、笔记本和笔记本电脑占据,那上面的文字大概与会计、法律、英语或计算机相关,或许这些才算是图书馆真正的主题。</p> <p>窝在凳子上,我登陆图书馆网站,搜索《哥德尔、艾舍尔、巴赫》,我曾经尝试翻开这本书很多次,今天,它指引我去另外一座建筑,然后拒绝了我。沉迷网络时,我顺着超链接快速前进,可能走得太过遥远了。今天,看着门上“闭馆”的标志,我决定漫无目的地漂流一会儿。于是我找到一本塔罗牌意解释,随便翻了几页。</p> <p>“这张牌的逆位并不是这个意思!异端!”忍住了把这本书送上火刑架的冲动,我离开了图书馆。几个小时之后,我穿过了围墙的缺口。在阴暗的柳林前面,有一条黄狗趴在路上,我们对视了几秒钟。接着,它慢悠悠地爬起来,向着另一边走去。我应该是摇了摇尾巴,跌跌撞撞地穿过泥泞的树林。</p> <blockquote> <p>本文部分描写是虚构的。我并不在那种地方;没有什么教官;而且也不想过人类的生活。</p> </blockquote> <p><font color="white">互联网带来了极大量的信息,远远超过了个人的接受能力,于是,通过兴趣、习惯和“智能推荐”,我们选择了部分信息摄入,而这部分信息会使人<a href="http://www.guokr.com/article/437210/" style="color: white">“上瘾”</a>,对另外的信息视而不见或产生负面的情绪。这可能会造成个人对于人群平均值的距离提高,影响人类社会的基础——同理心。</p> <p>当然,这也是建立在我所获取的微量信息上的偏见,而且我会把这一段隐藏,因为如果我们意见不统一,你就不会再喜欢我了。</font></p> 关于那个IME helper https://blog.heysh.xyz/2017/09/06/gossip_about_ime_helper/ Wed, 06 Sep 2017 19:46:55 +0800 https://blog.heysh.xyz/2017/09/06/gossip_about_ime_helper/ <p><del>昨天</del>前天我用鸟语写了一篇贼 <em>正经</em> 的<a href="https://blog.heysh.xyz/2017/09/05/atom-vim-mode-auto-switch-ime/">说明</a>,今天,我准备稍微介绍一下那里面的<code>IME helper</code>。</p> <p>正如之前所说,那东西是为了配合atom插件自动开关输入法用的。问题明确、思路清晰,google一下肯定有人做过……才怪呢</p> <p>嗯,这种需求,我听过一个叫AHK的语言……</p> <div class="highlight"><pre style="background-color:#f0f3f3;-moz-tab-size:4;-o-tab-size:4;tab-size:4">;来自https://github.com/lspcieee/lspcieee_ahk/blob/master/IME.ahk ;没有任何要黑别人的意思,将来报道出了偏差,你们(下略) setChineseLayout(){ ;发送中文输入法切换快捷键,请根据实际情况设置。 send {Ctrl Down}{Shift} send {Ctrl Down}, send {Ctrl Down}{Shift} send {Ctrl Down}, send {Ctrl Up} }</pre></div> <p>哇这语言真的是发送快捷键的哦!就没有什么更高级的方法吗?快捷键在win10里可是改了啊( &gt;﹏&lt;。)</p> <p>然后就愉快地决定用 Python+ctypes 干这种脏活了,然后发现:windows API真是太难写了!一个更改输入法有4种写法!而且都不能用!</p> <p>最后居然还是抄的<a href="http://www.ahk8.com/thread-3751.html?highlight=%E8%BE%93%E5%85%A5%E6%B3%95">AHK社区的东西</a>……亏我还像白痴一样疯狂翻MSDN……</p> <p>另外,pyinstaller生成的单文件exe<del>跑得不够快</del>用起来有延迟,大概是因为解压吧……</p> Auto-Switch IME in Vim-Mode-Plus for Atom Editor https://blog.heysh.xyz/2017/09/05/atom-vim-mode-auto-switch-ime/ Tue, 05 Sep 2017 21:03:41 +0800 https://blog.heysh.xyz/2017/09/05/atom-vim-mode-auto-switch-ime/ <p>Update 2018-5: Now vim-mode-plus introduced <a href="https://github.com/t9md/atom-vim-mode-plus/blob/master/CHANGELOG.md#1300">new method</a> to disable IME in the setting page. It&rsquo;s time for this post to retire.</p> <hr /> <p>As a vim-user and Chinese-speaker, I prefer <a href="https://atom.io/packages/vim-mode-plus">vim-mode-plus</a> for Atom editor, but always disrupted by the IME in normal mode, like this:</p> <p><img src="/IME-in-atom.png" alt="IME-in-atom" /> </p> <p>If we could <a href="https://github.com/t9md/atom-vim-mode-plus/issues/446">disable IMEs in normal mode</a> then everything will be fine again. However, due to <a href="https://github.com/atom/atom/issues/1092">the lack of the APIs</a>, it is hardly possible to solve the problem in the editor.</p> <p>Thus, we could solve it <em>out of the box</em>. There is a package named <a href="https://atom.io/packages/vim-mode-plus-auto-ime">atom-vim-mode-plus-auto-ime</a>, which could run a custom command when the mode changes. The goal now is to find some commands to control the IME:</p> <ul> <li>macOS users can use <a href="https://github.com/vovkasm/input-source-switcher">input-source-switcher</a> to toogle the IME.</li> <li>For Linux, the IME <code>fcitx</code> has a command <code>fcitx-remote</code> to control itself.</li> <li>And for Windows, I wrote a <a href="https://github.com/heyeshuang/ime_helper">python script</a> to switch the IME of the <em>foreground window</em>.</li> </ul> <p>Then we could configure this package.</p> <div class="highlight"><pre style="background-color:#f0f3f3;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-bash" data-lang="bash"><span style="color:#09f;font-style:italic">#windows: </span><span style="color:#09f;font-style:italic"></span>python E:<span style="color:#c30;font-weight:bold">\\</span>path<span style="color:#c30;font-weight:bold">\\</span>to<span style="color:#c30;font-weight:bold">\\</span>ime_helper.py --current <span style="color:#09f;font-style:italic">#Get Current Input Source </span><span style="color:#09f;font-style:italic"></span>python E:<span style="color:#c30;font-weight:bold">\\</span>path<span style="color:#c30;font-weight:bold">\\</span>to<span style="color:#c30;font-weight:bold">\\</span>ime_helper.py --dec <span style="color:#a00">${</span><span style="color:#033">source</span><span style="color:#a00">}</span> <span style="color:#09f;font-style:italic">#insert </span><span style="color:#09f;font-style:italic"></span>python E:<span style="color:#c30;font-weight:bold">\\</span>path<span style="color:#c30;font-weight:bold">\\</span>to<span style="color:#c30;font-weight:bold">\\</span>ime_helper.py --locale en_US <span style="color:#09f;font-style:italic">#normal </span><span style="color:#09f;font-style:italic"></span>python E:<span style="color:#c30;font-weight:bold">\\</span>path<span style="color:#c30;font-weight:bold">\\</span>to<span style="color:#c30;font-weight:bold">\\</span>ime_helper.py --locale en_US <span style="color:#09f;font-style:italic">#visual </span><span style="color:#09f;font-style:italic">#linux: </span><span style="color:#09f;font-style:italic"></span>/usr/bin/fcitx-remote <span style="color:#09f;font-style:italic">#Get Current Input Source </span><span style="color:#09f;font-style:italic"></span><span style="color:#069;font-weight:bold">if</span> <span style="color:#555">((</span> <span style="color:#c30">&#34;</span><span style="color:#a00">${</span><span style="color:#033">source</span><span style="color:#a00">}</span><span style="color:#c30">&#34;</span> &lt;<span style="color:#555">=</span> <span style="color:#c30">&#34;1&#34;</span> <span style="color:#555">))</span>;<span style="color:#069;font-weight:bold">then</span> /usr/bin/fcitx-remote -c; <span style="color:#069;font-weight:bold">else</span> /usr/bin/fcitx-remote -o ;<span style="color:#069;font-weight:bold">fi</span> <span style="color:#09f;font-style:italic">#insert </span><span style="color:#09f;font-style:italic"></span>/usr/bin/fcitx-remote -c <span style="color:#09f;font-style:italic">#normal </span><span style="color:#09f;font-style:italic"></span>/usr/bin/fcitx-remote -c <span style="color:#09f;font-style:italic">#visual </span><span style="color:#09f;font-style:italic"></span>#macOS: just use the default config</code></pre></div> <p><img src="/atom-vim-configure.png" alt="configure" /></p> 短消息:联通IPV6 https://blog.heysh.xyz/2017/09/03/2017-09-03-ipv6-for-unicomm/ Sun, 03 Sep 2017 23:11:32 +0800 https://blog.heysh.xyz/2017/09/03/2017-09-03-ipv6-for-unicomm/ <p>似乎是使用teredo。Good Job!</p> <p></p> <p> <figure> <img src="/ipv6-test.png" /> <figcaption> <h4>IPV6测试</h4> </figcaption> </figure> <figure> <img src="/torrent.png" /> <figcaption> <h4>PT测试</h4> </figcaption> </figure> </p> 在网络的荒山野岭 https://blog.heysh.xyz/2017/08/12/2017-08-12-recent/ Sat, 12 Aug 2017 13:04:03 +0800 https://blog.heysh.xyz/2017/08/12/2017-08-12-recent/ <p>今年七月从学校滚蛋以后,我来到了某个不能说的国企。住在国民党留下来的建筑物里面,我看着被剪断的网线,感觉自己的指甲在疯狂生长。</p> <p>然后,我就——当然没有成为变态剪线狂,而是办了一张电信的<a href="http://item.jd.com/3509059.html#none">磅礴卡</a>:</p> <ul> <li>每月46元月租;</li> <li>有2个G的真4G流量;</li> <li>2G用尽以后,会限速到3G速率,虽然似乎还是用的4G网络。</li> </ul> <figure> <img src="/speed.png" /> <figcaption> <h4>而且这速度居然可以看斗鱼</h4> </figcaption> </figure> <ul> <li>电信信号不好 &lt;&ndash;这句是我第一次上传失败以后加的</li> <li>另外,似乎只能在北京才能用。是的,我还是在北京,这地方甚至还能叫做“市区”。</li> </ul> <p>于是,我与文明世界通过,嗯,无线电波,再次连接到了一起。我应该赞美现代科技,虽然网速和我高中时候的2m宽带没什么区别——或许更不稳定一些,但是可以把这个称作“现代科技的代价”。</p> <p>还想说明的是,我的一加3在开启USB网络共享之后,可以完美地被Arch Linux(或,Manjaro Linux)识别为有线网卡,而且WLAN网络共享也没有了很久之前ad-hoc还是什么的问题。当然,同时连上两个设备之后,斗鱼就开始转圈了。我是不是对它要求太高了?</p> <p>好的,大概就是这样,之后也许还会更新 <em>用户体验</em> ,如果我还没有把线接上,而且还没有被网瘾或者其他的什么吞噬的话。</p> 迁移到hugo,第三部分:可是我想要更多的feed地址… https://blog.heysh.xyz/2017/06/12/moving-to-hugo-3/ Mon, 12 Jun 2017 22:25:07 +0800 https://blog.heysh.xyz/2017/06/12/moving-to-hugo-3/ <p>之前在 <a href="http://heyeshuang.tk">http://heyeshuang.tk</a> 这个域名下的时候,wordpress提供的RSS feed地址格式类似 <a href="http://heyeshuang.tk/feed/">http://heyeshuang.tk/feed/</a> ,但是hugo提供的RSS地址是<code>index.xml</code>样子的,而且我翻遍了manual也没看到给RSS加alias的方法。</p> <p>所以只能改模版了,思路是把<code>/feed</code>目录的列表页渲染成RSS的样子,我是直接在主题里面改的:</p> <p><code>\themes\&lt;主题名字&gt;\layouts\feed\list.html</code>:</p> <div class="highlight"><pre style="background-color:#f0f3f3;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-html" data-lang="html">&lt;<span style="color:#309;font-weight:bold">rss</span> <span style="color:#309">version</span><span style="color:#555">=</span><span style="color:#c30">&#34;2.0&#34;</span> <span style="color:#309">xmlns:atom</span><span style="color:#555">=</span><span style="color:#c30">&#34;http://www.w3.org/2005/Atom&#34;</span>&gt; &lt;<span style="color:#309;font-weight:bold">channel</span>&gt; &lt;<span style="color:#309;font-weight:bold">title</span>&gt;{{ if eq .Title .Site.Title }}{{ .Site.Title }}{{ else }}{{ with .Title }}{{.}} on {{ end }}{{ .Site.Title }}{{ end }}&lt;/<span style="color:#309;font-weight:bold">title</span>&gt; &lt;<span style="color:#309;font-weight:bold">link</span>&gt;{{ .Permalink }}&lt;/<span style="color:#309;font-weight:bold">link</span>&gt; &lt;<span style="color:#309;font-weight:bold">description</span>&gt;Recent content {{ if ne .Title .Site.Title }}{{ with .Title }}in {{.}} {{ end }}{{ end }}on {{ .Site.Title }}&lt;/<span style="color:#309;font-weight:bold">description</span>&gt; &lt;<span style="color:#309;font-weight:bold">generator</span>&gt;Hugo -- gohugo.io&lt;/<span style="color:#309;font-weight:bold">generator</span>&gt;{{ with .Site.LanguageCode }} &lt;<span style="color:#309;font-weight:bold">language</span>&gt;{{.}}&lt;/<span style="color:#309;font-weight:bold">language</span>&gt;{{end}}{{ with .Site.Author.email }} &lt;<span style="color:#309;font-weight:bold">managingEditor</span>&gt;{{.}}{{ with $.Site.Author.name }} ({{.}}){{end}}&lt;/<span style="color:#309;font-weight:bold">managingEditor</span>&gt;{{end}}{{ with .Site.Author.email }} &lt;<span style="color:#309;font-weight:bold">webMaster</span>&gt;{{.}}{{ with $.Site.Author.name }} ({{.}}){{end}}&lt;/<span style="color:#309;font-weight:bold">webMaster</span>&gt;{{end}}{{ with .Site.Copyright }} &lt;<span style="color:#309;font-weight:bold">copyright</span>&gt;{{.}}&lt;/<span style="color:#309;font-weight:bold">copyright</span>&gt;{{end}}{{ if not .Date.IsZero }} &lt;<span style="color:#309;font-weight:bold">lastBuildDate</span>&gt;{{ .Date.Format &#34;Mon, 02 Jan 2006 15:04:05 -0700&#34; | safeHTML }}&lt;/<span style="color:#309;font-weight:bold">lastBuildDate</span>&gt;{{ end }} &lt;<span style="color:#309;font-weight:bold">atom:link</span> <span style="color:#309">href</span><span style="color:#555">=</span><span style="color:#c30">&#34;{{.Permalink}}&#34;</span> <span style="color:#309">rel</span><span style="color:#555">=</span><span style="color:#c30">&#34;self&#34;</span> <span style="color:#309">type</span><span style="color:#555">=</span><span style="color:#c30">&#34;application/rss+xml&#34;</span> /&gt; {{ range .Site.RegularPages }} &lt;<span style="color:#309;font-weight:bold">item</span>&gt; &lt;<span style="color:#309;font-weight:bold">title</span>&gt;{{ .Title }}&lt;/<span style="color:#309;font-weight:bold">title</span>&gt; &lt;<span style="color:#309;font-weight:bold">link</span>&gt;{{ .Permalink }}&lt;/<span style="color:#309;font-weight:bold">link</span>&gt; &lt;<span style="color:#309;font-weight:bold">pubDate</span>&gt;{{ .Date.Format &#34;Mon, 02 Jan 2006 15:04:05 -0700&#34; | safeHTML }}&lt;/<span style="color:#309;font-weight:bold">pubDate</span>&gt; {{ with .Site.Author.email }}&lt;<span style="color:#309;font-weight:bold">author</span>&gt;{{.}}{{ with $.Site.Author.name }} ({{.}}){{end}}&lt;/<span style="color:#309;font-weight:bold">author</span>&gt;{{end}} &lt;<span style="color:#309;font-weight:bold">guid</span>&gt;{{ .Permalink }}&lt;/<span style="color:#309;font-weight:bold">guid</span>&gt; &lt;<span style="color:#309;font-weight:bold">description</span>&gt;{{ .Content | html }}&lt;/<span style="color:#309;font-weight:bold">description</span>&gt; &lt;/<span style="color:#309;font-weight:bold">item</span>&gt; {{ end }} &lt;/<span style="color:#309;font-weight:bold">channel</span>&gt; &lt;/<span style="color:#309;font-weight:bold">rss</span>&gt;</code></pre></div> <p>基本上就是hugo自带的RSS模板,除了把<code>{{ range .Data.Pages }}</code>改成了<code>{{ range .Site.RegularPages }}</code>,因为我需要生成整个网站的RSS。另外,修改过的主题在<a href="https://github.com/yoshiharuyamashita/blackburn">https://github.com/yoshiharuyamashita/blackburn</a>,稍微改了一些小bug,还换了个颜色。<del>哪天我要把名字改成greenfreeze。</del></p> <p>然后别忘了新建一个<code>\content\feed\chicken.md</code>:</p> <div class="highlight"><pre style="background-color:#f0f3f3;-moz-tab-size:4;-o-tab-size:4;tab-size:4">--- title: &#39;chicken&#39; author: HeYSH date: 2012-06-22T06:32:32+00:00 aliases: - /%3ffeed%3drss2 --- Nothing here.</pre></div> <p>当然,类似<code>/?feed=rss2</code>这样的地址就用不了了,我试过的。</p> 由wordpress到hugo:I https://blog.heysh.xyz/2017/06/07/moving-to-hugo/ Wed, 07 Jun 2017 22:14:47 +0800 https://blog.heysh.xyz/2017/06/07/moving-to-hugo/ <p>我之前的wordpress博客是建在redhat公司的OpenShift服务上的,距<a href="/2015/08/23/%E4%B8%BA%E4%BB%80%E4%B9%88%E6%88%91%E7%9A%84%E6%89%8B%E6%9C%BA%E7%94%A8%E4%B8%8D%E4%BA%86ipv6/">上次</a>我更换博客后台过了快两年时间,wordpress(或是PHP)再次把空间占满了,而不懂PHP的我只能对着SFTP干瞪眼。于是,我又种了一棵新的树苗。</p> <p>wordpress的文章是通过<a href="https://github.com/SchumacherFM/wordpress-to-hugo-exporter">wordpress-to-hugo-exporter</a>导出的,但是导出的文件有一些小问题:</p> <ul> <li>标题里都是<code>&lt;span&gt;</code></li> <li>正文还是<code>HTML</code>格式</li> <li><code>img</code>和<code>code</code>需要修改</li> </ul> <p>对于正文,可以用<code>pandoc</code>和<code>pypandoc</code>转换:</p> <div class="highlight"><pre style="background-color:#f0f3f3;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-python" data-lang="python"><span style="color:#069;font-weight:bold">import</span> <span style="color:#0cf;font-weight:bold">pypandoc</span><span style="color:#555">,</span><span style="color:#0cf;font-weight:bold">os</span> root <span style="color:#555">=</span> <span style="color:#c30">&#34;./content&#34;</span> <span style="color:#069;font-weight:bold">for</span> rt, dirs, files <span style="color:#000;font-weight:bold">in</span> os<span style="color:#555">.</span>walk(root): <span style="color:#069;font-weight:bold">for</span> filename <span style="color:#000;font-weight:bold">in</span> files: <span style="color:#069;font-weight:bold">with</span> <span style="color:#366">open</span>(os<span style="color:#555">.</span>path<span style="color:#555">.</span>join(rt, filename), <span style="color:#c30">&#39;r&#39;</span>, encoding<span style="color:#555">=</span><span style="color:#c30">&#39;utf-8&#39;</span>) <span style="color:#069;font-weight:bold">as</span> fin: data <span style="color:#555">=</span> fin<span style="color:#555">.</span>read() ds <span style="color:#555">=</span> data<span style="color:#555">.</span>split(<span style="color:#c30">&#39;---&#39;</span>) ds[<span style="color:#f60">2</span>] <span style="color:#555">=</span> pypandoc<span style="color:#555">.</span>convert_text(ds[<span style="color:#f60">2</span>], <span style="color:#c30">&#39;md&#39;</span>, format<span style="color:#555">=</span><span style="color:#c30">&#39;html&#39;</span>) do <span style="color:#555">=</span> <span style="color:#c30">&#39;---</span><span style="color:#c30;font-weight:bold">\n</span><span style="color:#c30">&#39;</span><span style="color:#555">.</span>join(ds) <span style="color:#069;font-weight:bold">with</span> <span style="color:#366">open</span>(filename, <span style="color:#c30">&#39;w&#39;</span>, encoding<span style="color:#555">=</span><span style="color:#c30">&#39;utf-8&#39;</span>) <span style="color:#069;font-weight:bold">as</span> <span style="color:#366">file</span>: <span style="color:#366">file</span><span style="color:#555">.</span>write(do)</code></pre></div> <p>其他的……手改保平安……</p> <p>……</p> <p>……………</p> <p>漫长的修改过后,用<code>hugo server -w</code>预览。</p> <p>这时候还有一个小问题:<code>hugo</code>生成URL不一定遵循文件头<code>url</code>定义,比如,对 <code>/2016/06/13/qart-coder:更友好的qr码/</code>,<code>hugo</code>会解析为<code>/2016/06/13/qart-coder更友好的qr码/</code>。看出区别了吗?</p> <p>为了保证(不知道和谁的)兼容性,可以在文件头中增加<code>aliases</code>行,可以将原来的地址转发到新地址。</p> <p>同样的,我也写了一个辣鸡脚本:</p> <div class="highlight"><pre style="background-color:#f0f3f3;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-python" data-lang="python"><span style="color:#069;font-weight:bold">import</span> <span style="color:#0cf;font-weight:bold">pypandoc</span> <span style="color:#069;font-weight:bold">import</span> <span style="color:#0cf;font-weight:bold">os</span> root <span style="color:#555">=</span> <span style="color:#c30">&#34;./content&#34;</span> <span style="color:#069;font-weight:bold">for</span> rt, dirs, files <span style="color:#000;font-weight:bold">in</span> os<span style="color:#555">.</span>walk(root): <span style="color:#069;font-weight:bold">for</span> filename <span style="color:#000;font-weight:bold">in</span> files: <span style="color:#069;font-weight:bold">with</span> <span style="color:#366">open</span>(os<span style="color:#555">.</span>path<span style="color:#555">.</span>join(rt, filename), <span style="color:#c30">&#39;r&#39;</span>, encoding<span style="color:#555">=</span><span style="color:#c30">&#39;utf-8&#39;</span>) <span style="color:#069;font-weight:bold">as</span> fin: data <span style="color:#555">=</span> fin<span style="color:#555">.</span>readlines() <span style="color:#069;font-weight:bold">try</span>: urlIndex <span style="color:#555">=</span> [n <span style="color:#069;font-weight:bold">for</span> n, l <span style="color:#000;font-weight:bold">in</span> <span style="color:#366">enumerate</span>(data) <span style="color:#069;font-weight:bold">if</span> l<span style="color:#555">.</span>find(<span style="color:#c30">&#34;url:&#34;</span>) <span style="color:#555">!=</span> <span style="color:#555">-</span><span style="color:#f60">1</span>][<span style="color:#f60">0</span>] url <span style="color:#555">=</span> data[urlIndex]<span style="color:#555">.</span>split(<span style="color:#c30">&#34;url:&#34;</span>)[<span style="color:#f60">1</span>] aliasLine <span style="color:#555">=</span> <span style="color:#c30">&#34; -&#34;</span> <span style="color:#555">+</span> url data<span style="color:#555">.</span>insert(urlIndex <span style="color:#555">+</span> <span style="color:#f60">1</span>, aliasLine) data<span style="color:#555">.</span>insert(urlIndex <span style="color:#555">+</span> <span style="color:#f60">1</span>, <span style="color:#c30">&#34;aliases:</span><span style="color:#c30;font-weight:bold">\n</span><span style="color:#c30">&#34;</span>) <span style="color:#069;font-weight:bold">except</span>: <span style="color:#069;font-weight:bold">pass</span> <span style="color:#069;font-weight:bold">with</span> <span style="color:#366">open</span>(filename, <span style="color:#c30">&#39;w&#39;</span>, encoding<span style="color:#555">=</span><span style="color:#c30">&#39;utf-8&#39;</span>) <span style="color:#069;font-weight:bold">as</span> <span style="color:#366">file</span>: <span style="color:#069;font-weight:bold">for</span> d <span style="color:#000;font-weight:bold">in</span> data: <span style="color:#366">file</span><span style="color:#555">.</span>write(d)</code></pre></div> 迁移到hugo,第二部分:部署到github https://blog.heysh.xyz/2017/06/07/moving-to-hugo-with-git/ Wed, 07 Jun 2017 22:07:44 +0800 https://blog.heysh.xyz/2017/06/07/moving-to-hugo-with-git/ <p>书接上文 <del>(虽然我是先写的这一篇)</del>,当我们有了一个可用的hugo目录后,就可以把它部署到github等静态网页托管服务了。如果你的强迫症不是很严重的话,可以把<code>/public</code>目录直接push到新的repo里;不过如果为了得到一个整洁的主页,可以用同一个repo的<code>master</code>分支保存源文件,<code>gh-page</code>分支来展示,像<a href="http://www.gohugo.org/doc/tutorials/github-pages-blog/">这里</a>说的那样。</p> <p>这里假设你已经<code>init</code>过了你的<code>hugo</code>目录:</p> <div class="highlight"><pre style="background-color:#f0f3f3;-moz-tab-size:4;-o-tab-size:4;tab-size:4"># Create a new orphand branch (no commit history) named gh-pages git checkout --orphan gh-pages # Unstage all files git rm --cached $(git ls-files) # Grab one file from the master branch so we can make a commit git checkout master README.md # Add and commit that file git add . git commit -m &#34;INIT: initial commit on gh-pages branch&#34; # Push to remote gh-pages branch git push origin gh-pages # Return to master branch git checkout master # Remove the public folder to make room for the gh-pages subtree rm -rf public # Add the gh-pages branch of the repository. It will look like a folder named public git subtree add --prefix=public &lt;你的.git地址&gt; gh-pages --squash # Pull down the file we just committed. This helps avoid merge conflicts # 这里我先push了一次,否则会出现fatal: refusing to merge unrelated histories # 好像是git的bug git subtree push --prefix=public &lt;你的.git地址&gt; gh-pages git subtree pull --prefix=public &lt;你的.git地址&gt; gh-pages hugo # Add everything git add -A # Commit and push to master git commit -m &#34;Updating site&#34; &amp;&amp; git push origin master # Push the public subtree to the gh-pages branch git subtree push --prefix=public &lt;你的.git地址&gt; gh-pages</pre></div> <p>之后每次更新需要</p> <div class="highlight"><pre style="background-color:#f0f3f3;-moz-tab-size:4;-o-tab-size:4;tab-size:4">hugo git add -A git commit -m &#34;some messages&#34; git push origin master git subtree push --prefix=public &lt;你的.git地址&gt; gh-pages</pre></div> <p>像我这样的强迫症可以把主题也做一个<code>subtree</code>出来。</p> Dota 2里,什么技能的冷却时间最短? https://blog.heysh.xyz/2017/03/25/what_has_shortest_cooldown_in_dota2/ Sat, 25 Mar 2017 13:13:15 +0000 https://blog.heysh.xyz/2017/03/25/what_has_shortest_cooldown_in_dota2/ <p>答案是各种法球~开玩笑的~</p> <p>最近沉迷Dota2的一个RPG: <a href="https://steamcommunity.com/sharedfiles/filedetails/?id=717356279">Legends of Dota:Redux</a>(当然是人机),在挑技能的时候常常需要一些短cd的技能,但是<a href="http://dota2.gamepedia.com/Abilities">wiki</a>里居然没有技能冷却时间的排序!</p> <p>所以我就自己排了一个:<a href="https://gist.github.com/heyeshuang/8499513305ff5c92b16329f57a0f29c6">https://gist.github.com/heyeshuang/8499513305ff5c92b16329f57a0f29c6</a></p> <p>数据来源是客户端里面<code>\dota2\steamapps\common\dota 2 beta\game\dota\scripts\npc\npc\_abilities.txt</code>,在下可不是页游玩家!</p> <p>这个文件看起来特别像是JSON,但是是用空格分割的,而且还有\\注释。本来把这东西转换成JSON才是工作的大头,可是我懒了:找到了另一个玩家的<a href="http://uglyvpn.com/2015/03/01/dota-2-items-txt-to-xmljson-tool/">Dota 2 items.txt/npc_abilities.txt to xml/json tool v1.1</a>,然后就是简单的排序了~</p> <p>另外,除了法球,还有许多技能也是0秒CD的哦,比如幽鬼的降临什么的~</p> <div class="highlight"><pre style="background-color:#f0f3f3;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-json" data-lang="json">{ <span style="color:#309;font-weight:bold">&#34;Name&#34;</span>: <span style="color:#c30">&#34; reality&#34;</span>, <span style="color:#309;font-weight:bold">&#34;HeroName&#34;</span>: <span style="color:#c30">&#34;spectre&#34;</span>, <span style="color:#309;font-weight:bold">&#34;ID&#34;</span>: <span style="color:#c30">&#34;5338&#34;</span>, <span style="color:#309;font-weight:bold">&#34;Cooldown&#34;</span>: <span style="color:#f60">0.0</span> }<span style="color:#a00;background-color:#faa">,</span></code></pre></div> 五年 https://blog.heysh.xyz/2017/01/15/%E4%BA%94%E5%B9%B4/ Sun, 15 Jan 2017 08:14:45 +0000 https://blog.heysh.xyz/2017/01/15/%E4%BA%94%E5%B9%B4/ <p><img src="http://i1.piimg.com/1949/c9d69d714fb8671c.png" alt="" /></p> <p>距离实现永生:5/∞</p> <p>新的一年也要好好活下去哦~</p> 用nethogs实时监控每个程序的流量使用 https://blog.heysh.xyz/2017/01/13/%E7%94%A8nethogs%E5%AE%9E%E6%97%B6%E7%9B%91%E6%8E%A7%E6%AF%8F%E4%B8%AA%E7%A8%8B%E5%BA%8F%E7%9A%84%E6%B5%81%E9%87%8F%E4%BD%BF%E7%94%A8/ Fri, 13 Jan 2017 12:25:31 +0000 https://blog.heysh.xyz/2017/01/13/%E7%94%A8nethogs%E5%AE%9E%E6%97%B6%E7%9B%91%E6%8E%A7%E6%AF%8F%E4%B8%AA%E7%A8%8B%E5%BA%8F%E7%9A%84%E6%B5%81%E9%87%8F%E4%BD%BF%E7%94%A8/ <p>适用于(没有cron和init的)debian 8.0</p> <ul> <li>安装nethogs</li> <li>创建<code>/root/monitor.sh</code></li> </ul> <div class="highlight"><pre style="background-color:#f0f3f3;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-bash" data-lang="bash"><span style="color:#033">TIMEOUT</span><span style="color:#555">=</span><span style="color:#f60">3600</span> <span style="color:#033">TIMESTAMP</span><span style="color:#555">=</span><span style="color:#c30">`</span>date +%b_%d_%Y_%H_%M_%S<span style="color:#c30">`</span> <span style="color:#033">OUTPUT</span><span style="color:#555">=</span>/var/log/nethogs/<span style="color:#033">$TIMESTAMP</span>.log bash -ic <span style="color:#c30">&#34;(/usr/local/sbin/nethogs -t -d 30&amp;&gt;</span><span style="color:#033">$OUTPUT</span><span style="color:#c30">;kill 0;) | (sleep </span><span style="color:#033">$TIMEOUT</span><span style="color:#c30">;kill 0; )&#34;</span> <span style="color:#f60">3</span>&gt;&amp;<span style="color:#f60">1</span> <span style="color:#f60">2</span>&gt;/dev/null</code></pre></div> <ul> <li><code>/etc/systemd/system/nethogs.timer</code></li> </ul> <div class="highlight"><pre style="background-color:#f0f3f3;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-bash" data-lang="bash"><span style="color:#555">[</span>Unit<span style="color:#555">]</span> <span style="color:#033">Description</span><span style="color:#555">=</span>Nethogs Daemon <span style="color:#555">[</span>Timer<span style="color:#555">]</span> <span style="color:#033">OnBootSec</span><span style="color:#555">=</span>1min <span style="color:#033">OnUnitActiveSec</span><span style="color:#555">=</span>1h <span style="color:#555">[</span>Install<span style="color:#555">]</span> <span style="color:#033">WantedBy</span><span style="color:#555">=</span>timers.target</code></pre></div> <ul> <li><code>/etc/systemd/system/nethogs.service</code></li> </ul> <div class="highlight"><pre style="background-color:#f0f3f3;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-bash" data-lang="bash"><span style="color:#555">[</span>Unit<span style="color:#555">]</span> <span style="color:#033">Description</span><span style="color:#555">=</span>Nethogs run <span style="color:#555">[</span>Service<span style="color:#555">]</span> <span style="color:#033">Type</span><span style="color:#555">=</span>oneshot <span style="color:#033">ExecStart</span><span style="color:#555">=</span>/root/monitor.sh</code></pre></div> <ul> <li>查看使用情况用<a href="https://github.com/boopathi/nethogs-parser">Nethogs parser</a></li> </ul> <div class="highlight"><pre style="background-color:#f0f3f3;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-bash" data-lang="bash">./hogs -type<span style="color:#555">=</span>pretty /var/log/nethogs/Jan_03_2017_09_20_36.log</code></pre></div> 为什么已经在Word里用M$的EMF格式了,图像还是不清楚? https://blog.heysh.xyz/2017/01/13/ms-word-vector-support-sucks/ Fri, 13 Jan 2017 11:44:43 +0000 https://blog.heysh.xyz/2017/01/13/ms-word-vector-support-sucks/ <p>把EMF里的所有文字转换成路径就能解决了</p> <p>应该是辣鸡windows的文字渲染问题</p> <p><img src="http://p1.bqimg.com/1949/3cdbc7407efbe04a.png" alt="使用前" /> <img src="http://p1.bqimg.com/1949/3fc7d26cd830bc93.png" alt="使用后" /></p> <p><del>Word的bug在哪里报,挺急的</del></p> shadowsocks 2016: 一次性认证,KCP及其他 https://blog.heysh.xyz/2016/10/25/shadowsocks-2016-%E4%B8%80%E6%AC%A1%E6%80%A7%E8%AE%A4%E8%AF%81kcp%E5%8F%8A%E5%85%B6%E4%BB%96/ Tue, 25 Oct 2016 13:03:46 +0000 https://blog.heysh.xyz/2016/10/25/shadowsocks-2016-%E4%B8%80%E6%AC%A1%E6%80%A7%E8%AE%A4%E8%AF%81kcp%E5%8F%8A%E5%85%B6%E4%BB%96/ <p>今天下午我的Bandwagon服务器被人爆掉了,让人发了一大堆垃圾邮件,于是有了一个重装的理由。终于可以用服务器原生IPv6了~</p> <p>距我上次配置shadowsocks服务端(2015.1)已经有一年半了,这次安装可以把上次没有加入的特性通通带上:</p> <ul> <li>一次性认证,好像是当时和SSR打的时候加入的特性</li> <li>chacha20,上次没加好像是因为懒</li> <li>KCPtun,既然现在android客户端带上了这个功能,那就也装上吧</li> </ul> <p>大概会稍微快一些吧……</p> <p>对了,顺便配个iptables,象征性地防守下。</p> <hr /> <p>update 161122:</p> <p>象征性的防守被漫不经心的进攻给破掉了,于是增加了一些稍微认真一点的防守:</p> <ul> <li>禁用root登录和密码登录,顺便配置了sudo;</li> <li>用ufw代替直接配置iptables;</li> <li>fail2ban(后来发现debian 8带的0.8版本并不支持debian 8的journalctl……interesting)</li> </ul> <p>最主要的,换了一个ip地址</p> Deus ex machina https://blog.heysh.xyz/2016/07/31/deus-ex-machina/ Sun, 31 Jul 2016 13:13:07 +0000 https://blog.heysh.xyz/2016/07/31/deus-ex-machina/ <p>在真实生活中存不存在所谓的都合主义呢?</p> <p>当睡过一场考试的时候,当被唾沫横飞地叱责的时候,当凝视着泛着莹莹白光的手机屏幕,却无法打出一个字的时候,当努力想要看清天花板,眼睛却被黑暗所刺痛的时候,我偶尔会想起这个问题。</p> <p>也许会有一位闪闪发光的老人突然从阴影里跳出来,大喊“Deus ex machina”,一挥魔法棒,把一切处理的干干净净?</p> <p>然后,王子和公主过上了幸福的生活,热烈鼓掌之后,故事就此结束,没有观众在意“Fin”的后面还有什么——以及舞台中央的活板门是怎么卸下去的。</p> <p>在离席的时候,我并没有看到老人扯下胡子的样子。于是我依然想要相信奇迹。</p> <p>然后现实继续滑落,就像牛顿所预测的一样。</p> <hr /> <p>今天读了《春宵苦短,(下略)》</p> <p>真是部洋溢着粉红气息的漫画(*´﹃`*)</p> <p>公主敲可爱(๑•̀ㅂ•́)و✧</p> <p>想喝伪电气白兰(๑´ڡ`๑)</p> <p> </p> QArt:更漂亮的QR码 https://blog.heysh.xyz/2016/06/13/qart-coder%E6%9B%B4%E5%8F%8B%E5%A5%BD%E7%9A%84qr%E7%A0%81/ Mon, 13 Jun 2016 13:02:36 +0000 https://blog.heysh.xyz/2016/06/13/qart-coder%E6%9B%B4%E5%8F%8B%E5%A5%BD%E7%9A%84qr%E7%A0%81/ <p>通过在网址后面加#tag,可以让QR码显示成更漂亮(是的,比中间贴膏药还要漂亮)的样子,Russ Cox管这个叫做<a href="http://research.swtch.com/qart">QArt</a>。</p> <p>在线生成网址:</p> <ul> <li><a href="http://research.swtch.com/qr/draw?i=af2668ff68fd882750f99fbc0d60f26d&amp;url=http%3A%2F%2Fswtch.com%2Fqr">QArt Coder</a></li> <li><a href="http://www.qrpixel.com/">QR Pixel</a></li> </ul> <p>效果还是蛮好的:</p> <p><img src="http://i1.piimg.com/1949/2355d02e6bd4a9a4.png" alt="" /></p> <p>刚写完,又在中文互联网上找到了另外一种思路:</p> <p><a href="http://spacekid.me/qart-code/">http://spacekid.me/qart-code/</a></p> <p>似乎更漂亮些的样子,不过对于像素控来说还是喜欢上面这个~</p> 我失去了heysh.tk域名 https://blog.heysh.xyz/2016/05/24/%E6%88%91%E4%B8%A2%E6%8E%89%E4%BA%86heysh-tk%E5%9F%9F%E5%90%8D/ Tue, 24 May 2016 14:35:24 +0000 https://blog.heysh.xyz/2016/05/24/%E6%88%91%E4%B8%A2%E6%8E%89%E4%BA%86heysh-tk%E5%9F%9F%E5%90%8D/ <blockquote> <p>Dear 叶霜 贺,</p> <p>The Freenom Review Team has visited your website today. Unfortunately we have to say that today we cancelled your domain <a href="http://HEYSH.TK">HEYSH.TK</a>.</p> <p>The reason for the cancellation is that the website address you used for your free domain name was not accessible or did not follow the guidelines set in our terms and conditions.</p> <p>At this stage, anyone, including yourself, is able to (re)register the cancelled domain <a href="http://HEYSH.TK">HEYSH.TK</a>. However, upon registration, an actual working website is needed to complete the registration process.</p> <p>We thank you for using Freenom.</p> <p>Freenom Review Team</p> </blockquote> <p>Whatever.</p> <p>之前的heysh.tk页面回到了<a href="http://heyeshuang.github.io">heyeshuang.github.io</a>,以上。</p> 一个简单的在线LRC编辑器 https://blog.heysh.xyz/2016/05/04/%E4%B8%80%E4%B8%AA%E7%AE%80%E5%8D%95%E7%9A%84%E5%9C%A8%E7%BA%BFlrc%E7%BC%96%E8%BE%91%E5%99%A8/ Tue, 03 May 2016 17:01:02 +0000 https://blog.heysh.xyz/2016/05/04/%E4%B8%80%E4%B8%AA%E7%AE%80%E5%8D%95%E7%9A%84%E5%9C%A8%E7%BA%BFlrc%E7%BC%96%E8%BE%91%E5%99%A8/ <p>地址:<a href="http://heyeshuang.github.io/hieda-lrc-editor/">http://heyeshuang.github.io/hieda-lrc-editor/</a></p> <p>GITHUB:<a href="https://github.com/heyeshuang/hieda-lrc-editor">https://github.com/heyeshuang/hieda-lrc-editor</a></p> <p>和依云<a href="http://lilydjwg.is-programmer.com/2016/4/30/aisareruhana.200019.html">这里</a>差不多,我听到了一首悲伤的歌(<a href="http://music.163.com/#/song?id=766522">精霊流し</a>),也去找了<a href="http://bulo.hujiang.com/diary/111537/">歌词</a>。在想要把歌词做成LRC文件的时候,我突然想起来,今年,2015年,千千静听已经不再存在了,而且我也不再有勇气到各种软件站下载来路不明的程序。</p> <p>那么,就去做一个LRC编辑器吧!</p> <p>——以上,是半年之前的事情了。</p> <p>也许是拖延症的<a href="/2013/12/21/sfw%E6%B2%BB%E7%96%97%E6%8B%96%E5%BB%B6%E7%97%87%E7%9A%84%E4%B8%80%E6%AC%A1%E6%9C%89%E7%9B%8A%E5%B0%9D%E8%AF%95/">治疗</a>有效果了,半年以后这东西居然真的跑了起来。这半年里我都跑了好几次……</p> <p>另外,写前端/GUI真恶心……</p> <p>另外的另外,名字来自稗田阿求,<del>也许我应该换一个更萌一点的网页图标……</del></p> <p>update: 萌萌的图标已经换了~</p> <p> </p> 野路子科研工具二则 https://blog.heysh.xyz/2016/03/21/%E9%87%8E%E8%B7%AF%E5%AD%90%E7%A7%91%E7%A0%94%E5%B7%A5%E5%85%B7%E4%BA%8C%E5%88%99/ Mon, 21 Mar 2016 14:28:29 +0000 https://blog.heysh.xyz/2016/03/21/%E9%87%8E%E8%B7%AF%E5%AD%90%E7%A7%91%E7%A0%94%E5%B7%A5%E5%85%B7%E4%BA%8C%E5%88%99/ <blockquote> <p>读书人的事怎能算偷!</p> <p><del>——小四</del></p> <p><del>——拉比克</del></p> </blockquote> <h2 id="engauge-digitizer-http-digitizer-sourceforge-net"><a href="http://digitizer.sourceforge.net/">engauge digitizer</a></h2> <p>一个图表数字化程序,当你</p> <ul> <li>看到一张图表</li> <li>很想要用来做这样的事那样的事</li> <li>可是通讯作者又联系不上</li> </ul> <p>的时候很管用</p> <h2 id="scihub-http-sci-hub-io"><a href="http://sci-hub.io/">SCIHUB</a></h2> <p>免费午餐,比图书馆更好吃,用来对付抠门的出版社。</p> <h3 id="update">update:</h3> <ul> <li><a href="http://Sci-Hub.bz">Sci-Hub.bz</a></li> <li><a href="http://Sci-Hub.cc">Sci-Hub.cc</a></li> <li><a href="http://31.184.194.81">31.184.194.81</a></li> <li><a href="http://scihub22266oqcxt.onion">scihub22266oqcxt.onion</a></li> </ul> 我有显示器辣 https://blog.heysh.xyz/2016/02/29/%E6%88%91%E6%9C%89%E6%98%BE%E7%A4%BA%E5%99%A8%E8%BE%A3/ Mon, 29 Feb 2016 13:46:23 +0000 https://blog.heysh.xyz/2016/02/29/%E6%88%91%E6%9C%89%E6%98%BE%E7%A4%BA%E5%99%A8%E8%BE%A3/ <p>六年前的Y450在这个暑假挂掉了,获得杂牌SSD一个,屏幕一块,2G内存两条,上古CPU一个。</p> <p>屏幕型号是LP140WH1,万能的淘宝上能找到支持的电视主板(搜索V29)。芯片是TSUMV29LU,支持HDMI、差分和VGA,还支持中二度爆表的隐藏菜单;不支持USB视频,不过也无所谓。配套的屏线是所谓的“40P,单6”。如果有像我一样无聊的家伙想知道更多的话,<a href="http://file.datasheet.netdna-cdn.com/PDF/LP140WH1-TLA1-PDF/708049">这里</a>可以找到屏幕的datasheet——不过没什么用,基本上改改主板设置就行。</p> <p><del>于是我现在的书桌长这样:</del>照片没了没了~</p> <p>多屏可以用ARandR管理。不得不说XFCE下的DPI处理比WIN10和KDE5好的多。</p> <p><del>另外这篇博客是凑字数用的</del></p> pentadactyl 和 Firefox 43 https://blog.heysh.xyz/2015/12/17/pentadactyl_n_firefox_43/ Thu, 17 Dec 2015 13:03:26 +0000 https://blog.heysh.xyz/2015/12/17/pentadactyl_n_firefox_43/ <p>UPDATE: <a href="https://addons.mozilla.org/en-US/firefox/addon/pentadactyl-nightly-unofficial/">https://addons.mozilla.org/en-US/firefox/addon/pentadactyl-nightly-unofficial/</a>别人的第三方编译版本</p> <hr /> <p>TL;DW: <a href="http://pan.baidu.com/s/1jH0zrhG">百度盘</a>,<a href="https://drive.google.com/file/d/0B5jbrghmIinDU1gtdGdHVG40WFk/view?usp=sharing">GOOGLE DRIVE</a>,编译好,签过名的版本,MaxVersion改到44;当然,不负任何责任。</p> <p>众所周知,pentadacytl的<a href="http://5digits.org/nightlies">nightly build</a>已经坏掉好久了,现在的build在<a href="https://github.com/ffledgling/dactyl-build/releases">GitHub</a>上,通过Travis CI编译,不明真相的我看得一愣一愣的。</p> <p>另外,Firefox 43要求强制签名,幸好步骤还是挺简单的,先在install.rdf里把<code>em:id=&quot;pentadactyl@mod&quot;</code>随便改一下,然后去<a href="https://addons.mozilla.org/zh-CN/developers/addon/submit/2">这里</a>上传就行了。别忘了把“不要在此网站上展示我的附加组件”勾上。</p> <p>另外,firefox也发布了签名工具<a href="https://developer.mozilla.org/en-US/Add-ons/SDK/Tools/jpm#jpm_sign">jpm</a>,好像也可以放到Travis CI里面……</p> IPv6 season 2: 在DHCPv6网络环境下的OpenWRT Chaos Calmer https://blog.heysh.xyz/2015/09/09/ipv6-season-2-%E5%9C%A8dhcpv6%E7%BD%91%E7%BB%9C%E7%8E%AF%E5%A2%83%E4%B8%8B%E7%9A%84openwrt-chaos-calmer/ Wed, 09 Sep 2015 13:58:27 +0000 https://blog.heysh.xyz/2015/09/09/ipv6-season-2-%E5%9C%A8dhcpv6%E7%BD%91%E7%BB%9C%E7%8E%AF%E5%A2%83%E4%B8%8B%E7%9A%84openwrt-chaos-calmer/ <p>背景:桥接3秒断一次的渣网,以及经常在我博客中出现的5手db120;还有经常更新以后把老版本脚本删掉的OpenWRT,这里用的是Chaos Calmer 15.05-rc3。</p> <p>大概上思路和<a href="http://talk.withme.me/?p=51">这里</a>一样,因为学校给的地址位数只有/64,不够再去划分子网,所以要去启用邻居发现协议;但是因为<code>6ndp</code>,<code>ndppd</code>和<code>radvd</code>都已经被始乱终弃,现在它们的功能被odhcpd给代替了。具体上,<code>/etc/config/dhcp</code>的关键几行大概应该是这样:</p> <div class="highlight"><pre style="background-color:#f0f3f3;-moz-tab-size:4;-o-tab-size:4;tab-size:4"># /etc/config/dhcp: config dhcp &#39;lan&#39; option interface &#39;lan&#39; option start &#39;100&#39; option limit &#39;150&#39; option leasetime &#39;12h&#39; # option dhcpv6 &#39;server&#39; option ra &#39;relay&#39; option ndp &#39;relay&#39; #config dhcp &#39;wan&#39; #option interface &#39;wan&#39; #option ignore &#39;1&#39; config dhcp &#39;wan6&#39; option ra &#39;relay&#39; option ndp &#39;relay&#39; option master &#39;1&#39;</pre></div> <p>另外,还需要把<code>luci</code>的<code>interface</code>页面下的<code>IPv6 ULA-Prefix</code>删掉。</p> <p>现在的问题是,LAN口和WAN口的IP地址是一样的,而且客户机必须先ping一下这个地址才能连接外网,有时候路由还要重启<code>/etc/init.d/odhcpd</code>;不管了,我先在这里存个盘。</p> <p>有人说relay-&gt;hybrid也能成功的样子……我还没有测试过。</p> <p>参考:</p> <p><a href="http://bbs.pku.edu.cn/new/bbs/article/showthread/Networking/15501646?1">http://bbs.pku.edu.cn/new/bbs/article/showthread/Networking/15501646?1</a></p> <p><a href="http://ict.jingyan.info/openwrt-%e7%94%a8odpcpd%e9%85%8d%e7%bd%aerelay-%e6%96%b9%e5%bc%8f-ipv6/">http://ict.jingyan.info/openwrt-%e7%94%a8odpcpd%e9%85%8d%e7%bd%aerelay-%e6%96%b9%e5%bc%8f-ipv6/</a>(链接不知道为什么已经失效了)</p> <p>20160321更新:odhcp烂的抠脚,转用邪恶的IPV6 NAT,见<a href="https://wiki.openwrt.org/doc/howto/ipv6.nat6">这里</a></p> 为什么我的手机用不了IPV6? https://blog.heysh.xyz/2015/08/23/%E4%B8%BA%E4%BB%80%E4%B9%88%E6%88%91%E7%9A%84%E6%89%8B%E6%9C%BA%E7%94%A8%E4%B8%8D%E4%BA%86ipv6/ Sun, 23 Aug 2015 14:25:21 +0000 https://blog.heysh.xyz/2015/08/23/%E4%B8%BA%E4%BB%80%E4%B9%88%E6%88%91%E7%9A%84%E6%89%8B%E6%9C%BA%E7%94%A8%E4%B8%8D%E4%BA%86ipv6/ <p>背景:宿舍的无线是桥接模式,使用学校的DHCP服务器,另一台Android设备(寨板,4.4,Intel 3735)可以愉快地上网;这台设备之前也是可以用的,直到某次更新ROM前后,可能是5.1出没但CM组没人更新LG G2的那段时间。</p> <p>症状:<code>ip addr</code>告诉我学校确确实实发来了(2402开头的真正的)IPV6地址,但是<code>ping6 google.com</code>显示<code>Network unreachable</code>,继续查找发现<code>ip -6 route</code>没有默认网关,就像<a href="https://code.google.com/p/android/issues/detail?id=39052">这条ISSUE</a>所说的一样。</p> <p>解决方案:把内核参数改了就行。在su以后<code>sysctl -w net.ipv6.conf.wlan0.accept_ra_defrtr=1</code>可以坚持到下次启动。</p> <p>更详细的说明见<a href="http://www.cnfy.me/2013/04/miuiwifiipv6.html">这里</a>。简单概括一下,你需要在<code>/etc/sysctl.conf</code>里加上</p> <div class="highlight"><pre style="background-color:#f0f3f3;-moz-tab-size:4;-o-tab-size:4;tab-size:4">net.ipv6.conf.wlan0.accept_ra_defrtr=1</pre></div> <p>这一行,然后每次启动*尽量晚的*以su身份运行<code>sysctl -p</code>就行,因为<code>/init_qcom.sh</code>运行的就挺晚的,所以直接写在<code>/etc/init.d/</code>里是不行的。</p> <p>另外,这次应该是高通不知道在想什么user space,小米只是背锅。</p> <p>另外,虽然可能看不出来,但是这个博客的后台已经换了一个。</p> 无题 https://blog.heysh.xyz/2015/05/18/%E6%97%A0%E9%A2%98/ Mon, 18 May 2015 08:29:24 +0000 https://blog.heysh.xyz/2015/05/18/%E6%97%A0%E9%A2%98/ <p>突然想起一件小事。</p> <p>那还是在初中的时候,班上有个同学的家庭似乎十分困难;母亲卧病在床,全家靠低保勉强维持—从班主任口中含情脉脉的话语,和全班同学低低的啜泣声中,传达的似乎是这样的信息。</p> <p>在老师酝酿情绪的间隙,我偷偷地四处张望。当事人好像是满面笑容,或者说是”面容僵硬”——我一直不能分辨这细微的区别;而那些心地善良的人已经流下了晶莹的泪珠。</p> <p>散场时月亮早已爬上了树梢,放学的铃声已经过去了一个半小时。在校门口的紫藤下面,一个问题挡住了我的去路:</p> <p>“你刚才到底有没有哭?”</p> <p>后来在布置的作文里,我写到:“回到家中,我的眼泪终于不争气地掉落下来。”</p> <p>抱歉,这是假的——倒不如说,最后,我的眼泪仍然不争气地,没有出现。</p> <p>事情已经过去将近十年,在我并不算漫长的生命中,居然也有了这样久远的回忆。然而,十年的时间,并没有给这个冷漠的人以稍许热量,只是把他包裹得更紧。偶尔从缝中透出的一丝寒气,便是所有拙劣悲剧的根源。</p> <p>唯一值得慰藉的,是我在老实答“没有”的时候,作为回应的,如释重负的眼神。</p> <p>于15年5月17日夜</p> 罗马在哪里 https://blog.heysh.xyz/2015/04/09/%E7%BD%97%E9%A9%AC%E5%9C%A8%E5%93%AA%E9%87%8C/ Thu, 09 Apr 2015 14:12:01 +0000 https://blog.heysh.xyz/2015/04/09/%E7%BD%97%E9%A9%AC%E5%9C%A8%E5%93%AA%E9%87%8C/ <p>这是关于2月2号<a href="/sentences/#roma">果壳和国王</a>小剧场的故事。</p> <blockquote> <p>我记得念过这样的怪诗:</p> <p>匈奴族的首长阿底拉<br /> 骑着马,<br /> 满身披着钢铁甲胄,<br /> 象坟墓般地阴郁和沉默,<br /> 在无人境中行走。<br /> 他的背后有一队乌云一样的大军在追寻着叫喊:<br /> “何处是罗马?何处是雄伟的罗马?”</p> <p>——高尔基,《在人间》</p> </blockquote> <p>这是我很小的时候读过的书。封皮是米黄色的一套三卷,书页之间夹着酥糖的渣子,油渍扩散开来把纸张染成透明的微黄色;而内容却记不太清了,只记得阿廖沙家中无止境的争吵,小小的麻雀祭坛和上面这一首诗,还有,很奇怪的,老家里沙发套子在午后阳光下微黄的颜色。</p> <p>当然,路过的旅行者,如果你也在找这一段文字的话,这首诗应该是波兰诗人约·波·扎列斯基(Józef Bohdan Zaleski,1802—1886)写过的一部抒情长诗《草原的精灵》(<em>Duch od stepu</em> ,The Spirit from the <a href="http://en.wikipedia.org/wiki/Steppe" title="Steppe">Steppe</a>)。1877年俄译者译了该诗的一个片断,题为《阿底拉》。高尔基对这首诗的记忆并不准确,而我的记性不会比他更好。 </p> <hr /> <p>update 150419: <strong>剧透醒目</strong></p> <blockquote> <p>TYPE-MOON / FGO PROJECT计划于今年年内推出智能手机游戏《Fate/Grand Order》,近日有关新Servant“Saber”的信息也已经曝光,而这个角色的声优将是能登麻美子。</p> </blockquote> <p><img src="/阿提拉.jpg" alt="大胸之王,阿提拉 from 《Fate/Grand Order》" /></p> <p><em>大<del>胸</del>匈奴王(18才)</em></p> <p><em>请允许我做一个悲伤的表情~</em></p> <hr /> <p>Update 160816:</p> <p>今天找到了记忆中的版本:</p> <blockquote> <p>匈奴王阿提拉,<br /> 披甲戴盔走天下!<br /> 沿着荒无人烟的地方走去,<br /> 他面色阴沉,<br /> 像坟墓一样,一语不发。<br /> 他的武士们像一片黑压压的乌云,跟在他后面,大声叫喊:<br /> 哪里是罗马,哪里是强大的罗马?</p> </blockquote> <p>稍微有一点押韵的感觉非常适合年幼的我。</p> 2014年的总结 https://blog.heysh.xyz/2015/02/14/2014%E5%B9%B4%E7%9A%84%E6%80%BB%E7%BB%93/ Sat, 14 Feb 2015 15:44:05 +0000 https://blog.heysh.xyz/2015/02/14/2014%E5%B9%B4%E7%9A%84%E6%80%BB%E7%BB%93/ <blockquote> <p>寒假好闲啊~~~尤其是今天~~~~于是我来写博客了。</p> </blockquote> <ol> <li>完成了毕业设计和毕业论文的撰写</li> </ol> <blockquote> <p>等等我得稳定一下情绪……</p> </blockquote> <ul> <li><p>书接上回(2013总结——啊我没写);</p></li> <li><p>由于一些奇妙的原因,这里更换了专业,走了一条更加人迹罕至的道路; &gt;</p> <p>“你们要走窄门!” &gt; 可是我是信飞面神教的……</p></li> <li><p>于是在新导师的手下做完了毕设,(应该是最后一次)运用了机械与电路的知识;</p></li> <li><p>沉迷dota(而且极菜);</p></li> <li><p>理所当然的大量喝酒;</p></li> <li><p>最后咱还是顺利毕业,虽然还得接着上下去;</p></li> <li><p>感觉自己的 <em>知识体系,whatever</em> 越来越凌乱了;</p></li> <li><p>和同学出去玩;</p></li> <li><p>和家人出去玩;</p></li> <li><p>提前回学校;</p></li> <li><p>老板不给发工资;</p></li> <li><p>大量新同学(男/丑/有对象);</p></li> <li><p>室友不在半夜下副本(并开麦)真是太好了;</p></li> <li><p>上课;</p></li> <li><p>给老板搬砖;</p></li> <li><p>老板不给发工资;</p></li> <li><p>沉迷daed gaem(仍然极菜);</p></li> <li><p>老板不发工资;</p></li> <li><p>和新同学(男/丑/有对象)出去玩;</p></li> <li><p>和实验室师兄喝酒;</p></li> <li><p>上课;</p></li> <li><p>搬砖;</p></li> <li><p>穷;</p></li> <li><p>博客更新的越来越少;</p></li> <li><p>变成了无聊的家伙;</p></li> <li><p>23岁;</p></li> <li><p>一事无成;</p></li> <li><p>毫无精通;</p></li> <li><p>单身;</p></li> <li><p>希望2015年会更好。</p></li> </ul> shadowsocks,ipv6和便宜的VPS,还有OpenVPN https://blog.heysh.xyz/2015/01/07/shadowsocksipv6%E5%92%8C%E4%BE%BF%E5%AE%9C%E7%9A%84vps/ Wed, 07 Jan 2015 15:05:56 +0000 https://blog.heysh.xyz/2015/01/07/shadowsocksipv6%E5%92%8C%E4%BE%BF%E5%AE%9C%E7%9A%84vps/ <p>那个……我还活着呢。</p> <p>前几天睡不着的时候翻了一下这个博客,最后发布时间是去年的5月份。七个月的话应该是很多草本植物的一生了吧?幸好这里种的是树。</p> <p>……算了过几天写一页年终总结来写这些充满腐烂气息的东西吧。今天是正经的技术环节,当然是剪切链接形式的技术。</p> <p>那么首先是VPS,用的是便宜的<a href="https://bandwagonhost.com/aff.php?aff=1656">Bandwagon</a>(搬瓦工),因为穷,只买了64M内存的版本;因为没有信用卡(穷),用不了paypal,于是去淘宝找了一家代购,入手价格29¥/年。</p> <p>然后是shadowsocks,按照<a href="https://github.com/shadowsocks/shadowsocks/wiki/Shadowsocks-%E4%BD%BF%E7%94%A8%E8%AF%B4%E6%98%8E">这里</a>的办法安装。根据<a href="http://blog.robotshell.org/2014/about-shadowsocks/">这里</a>的说法,就用python版的服务端就好。</p> <p>为了看起来像是技术文档的样子,下面是<code>/etc/shadowsocks.json</code>:</p> <div class="highlight"><pre style="background-color:#f0f3f3;-moz-tab-size:4;-o-tab-size:4;tab-size:4">{ &#34;server&#34;:[&#34;[::0]&#34;,&#34;0.0.0.0&#34;], &#34;server_port&#34;:443, &#34;local_address&#34;: &#34;127.0.0.1&#34;, &#34;local_port&#34;:1080, &#34;password&#34;:&#34;******&#34;, &#34;timeout&#34;:300, &#34;method&#34;:&#34;aes-256-cfb&#34;, &#34;fast_open&#34;: false }</pre></div> <blockquote> <p>update150208: “server” 行只写::0的话就是纯v6连接了……</p> </blockquote> <p>最后是ipv6,在he.net申请tunnel breaker,因为便宜的VPS动不了内核,于是用<a href="https://github.com/heyeshuang/tb-tun/">TB-TUN</a>弄一个用户态隧道,见<del><a href="http://www.yangyaping.cn/2014/08/21/ipv6tunnel/">这里</a></del><a href="http://daili.ml/centos_shadowsocks_ipv6.html">这里</a>和<a href="http://ichon.me/post/659.html">这里</a>,还有init.d的<a href="http://www.cybermilitia.net/2013/07/22/ipv6-tunnel-on-openvz/">自启动脚本</a>。</p> <blockquote> <p>update150409: 增加一个<a href="https://github.com/rejsmont/ustun">UStun</a>的链接;更换了Googlecode的链接</p> <p><del>Google带着小姨子code跑了!你王八蛋!你还我血汗码!</del></p> </blockquote> <p>另外,chrome的<a href="https://chrome.google.com/webstore/detail/secure-shell/pnhechapfaindjhompbnflcldabbghjo/related?utm_source=chrome-app-launcher-info-dialog">SSH</a>很好用,可以算是*刚换电脑还没有买SSD装arch的人*的福音。</p> <p>update:听说libev版本的可以节省内存,安装方法在<a href="https://github.com/shadowsocks/shadowsocks-libev#debian--ubuntu">这里</a>。</p> <p>update2:从<a href="https://github.com/shadowsocks/shadowsocks/wiki/Connect-to-OpenVPN-over-Shadowsocks">这里</a>看到可以在shadowsocks上飞OPENVPN,于是:</p> <p>在服务器运行这个:</p> <div class="highlight"><pre style="background-color:#f0f3f3;-moz-tab-size:4;-o-tab-size:4;tab-size:4">wget git.io/vpn --no-check-certificate -O openvpn-install.sh; bash openvpn-install.sh</pre></div> <p>然后设中转:</p> <div class="highlight"><pre style="background-color:#f0f3f3;-moz-tab-size:4;-o-tab-size:4;tab-size:4">iptables -A INPUT -s 10.8.0.0/24 -j ACCEPT iptables -I FORWARD 1 -s 10.8.0.0/24 -j ACCEPT iptables -I FORWARD 2 -d 10.8.0.0/24 -j ACCEPT iptables -I FORWARD 3 -j LOG --log-prefix &#34;FORWARD-LOG &#34; iptables -I FORWARD 4 -j DROP</pre></div> <p>把在<code>/root/</code>生成的<code>.ovpn</code>文件复制到本机,这时我发现chrome并没有自带SCP……</p> <p>在得到的<code>.ovpn</code>文件里加两行:</p> <div class="highlight"><pre style="background-color:#f0f3f3;-moz-tab-size:4;-o-tab-size:4;tab-size:4">socks-proxy 127.0.0.1 1080 route [SHADOWSOCKS服务器地址] 255.255.255.255 net_gateway</pre></div> <p>然后去下<a href="https://openvpn.net/index.php/open-source/downloads.html">客户端</a>,不要手贱点xp版本,否则今天下午就没空写作业了~</p> <p>如果windows的shadowsocks客户端支持UDP转发的话,这里就是终点了,否则,请将本机和服务端的<code>.ovpn</code>文件(<code>etcopenvpnserver.ovpn</code>)修改为tcp模式。</p> <p>8.23:谨以此博文对领路人致敬。身处寒夜,你们为我们带来了微光。</p> 红色楼梯 https://blog.heysh.xyz/2014/05/16/%E7%BA%A2%E8%89%B2%E6%A5%BC%E6%A2%AF/ Fri, 16 May 2014 15:09:05 +0000 https://blog.heysh.xyz/2014/05/16/%E7%BA%A2%E8%89%B2%E6%A5%BC%E6%A2%AF/ <p>用three.js试着做了点东西</p> <p>Live demo : <a href="http://heyeshuang.github.io/three-stairs/">http://heyeshuang.github.io/three-stairs/</a></p> <blockquote> <p>–你的下一句话是:“又做了没用的东西!”</p> <p>–是啊。</p> <p>–咦?这算是猜对了吗?</p> </blockquote> 用于OPENWRT的流量监控脚本:wrtbwmon https://blog.heysh.xyz/2014/03/02/%E7%94%A8%E4%BA%8Eopenwrt%E7%9A%84%E6%B5%81%E9%87%8F%E7%9B%91%E6%8E%A7%E8%84%9A%E6%9C%ACwrtbwmon/ Sun, 02 Mar 2014 11:38:02 +0000 https://blog.heysh.xyz/2014/03/02/%E7%94%A8%E4%BA%8Eopenwrt%E7%9A%84%E6%B5%81%E9%87%8F%E7%9B%91%E6%8E%A7%E8%84%9A%E6%9C%ACwrtbwmon/ <p>UPDATE at 15年平安夜:<a href="https://wiki.openwrt.org/doc/howto/wrtbwmon">https://wiki.openwrt.org/doc/howto/wrtbwmon</a></p> <hr /> <p>在某次坑爹的网费改革之后校园网的免费流量变成了20G,于是流量监控这一需求变得迫切起来。Google之后,发现了这个脚本:<a href="http://code.google.com/p/wrtbwmon/">wrtbwmon</a>。不过这个是为dd-wrt设计的,而且也很久没有更新过了,要进行一些小修改才能用。</p> <blockquote> <p>比如第24行,<code>nvram</code>在我这里挂掉了,于是我简单粗暴的把它改成了<code>eth1</code><code>br-lan</code>;还有那个<code>publish</code>函数,似乎是读取<code>/etc/dnsmasq</code>工作的,在OpenWRT上的对应文件似乎是<code>/etc/dhcp.leases</code>什么的,相应的167行也稍稍修改了一下……</p> </blockquote> <p>TL;DR:请在<a href="https://gist.github.com/heyeshuang/9305089">这里</a>下载修改过的版本,在本人的2成新db-120上测试通过。</p> <p>把上面那东西扔到<code>/bin</code>里之后,在crontab里添上这么一段:</p> <div class="highlight"><pre style="background-color:#f0f3f3;-moz-tab-size:4;-o-tab-size:4;tab-size:4">* * * * * /bin/wrtbwmon setup br0 */30 0-3 * * * /bin/wrtbwmon update /tmp/usage.db peak */30,59 4-8 * * * /bin/wrtbwmon update /tmp/usage.db offpeak */30 9-23 * * * /bin/wrtbwmon update /tmp/usage.db peak */30 * * * * /bin/wrtbwmon publish /tmp/usage.db /tmp/usage.htm /tmp/dhcp.leases 30 * * * * cp /tmp/usage.db /root/usage.db * * * * * [ ! -f /tmp/usage.db ] &amp;&amp; cp /root/usage.db /tmp/usage.db</pre></div> <p><a href="http://code.google.com/p/wrtbwmon/wiki/Deploying">自带的教程</a>写的crontab似乎跟OpenWRT不兼容……<em>这里的一定是雨林木风精简版OpenWRT!</em></p> <p>又及:为了凑字数,关于如何在nat后面使用isatap的方法参见<a href="http://wiki.tuna.tsinghua.edu.cn/IsatapBehindNat">这里</a></p> SFW:治疗拖延症的一次有益尝试 https://blog.heysh.xyz/2013/12/21/sfw%E6%B2%BB%E7%96%97%E6%8B%96%E5%BB%B6%E7%97%87%E7%9A%84%E4%B8%80%E6%AC%A1%E6%9C%89%E7%9B%8A%E5%B0%9D%E8%AF%95/ Sat, 21 Dec 2013 07:24:39 +0000 https://blog.heysh.xyz/2013/12/21/sfw%E6%B2%BB%E7%96%97%E6%8B%96%E5%BB%B6%E7%97%87%E7%9A%84%E4%B8%80%E6%AC%A1%E6%9C%89%E7%9B%8A%E5%B0%9D%E8%AF%95/ <p><a href="https://greasyfork.org/scripts/4245-sfw">在这里安装</a></p> <p><a href="https://github.com/heyeshuang/sfw">源码</a></p> <p>总而言之,是一个(某种程度上)减缓拖延症症状的脚本。</p> <p>在“再刷15分钟论坛/微博/人人/豆瓣/etc.我就滚去写作业”这一情境下适用。</p> <p>截图大概是这样的: <img src="/sfw1.png" alt="1" /> <img src="/sfw2.png" alt="2" /></p> <p>效果?在某些时候会有点用吧……</p> <ul> <li><p>注意一下github的最后更改时间和这篇日志的写作时间就知道上面一句是假话</p></li> <li><p>出现了!拖延小五郎的名推理!</p></li> </ul> <p>鸣谢:<a href="http://stylechen.com/easydialog-v2-0.html">easydialog</a></p> <p>对了,差不多又到了年终总结的时间了呢……</p> 木漏れ日 https://blog.heysh.xyz/2013/10/04/244/ Fri, 04 Oct 2013 15:00:00 +0000 https://blog.heysh.xyz/2013/10/04/244/ <h1 id="1">1</h1> <p>即使是在这种地方,偶尔也会有阳光透过来啊,一片枯叶这样想着。不过,也只是偶尔而已。</p> <p>“天气越来越冷了。”一阵风吹过,几片叶子在空中旋转,然后一切又重回寂静。</p> <h1 id="2">2</h1> <p>月亮在林间的影子又是什么样子呢?</p> 一次奇怪的firefox故障,还有,一个普通市民是怎么修电脑的 https://blog.heysh.xyz/2013/09/08/%E4%B8%80%E6%AC%A1%E5%A5%87%E6%80%AA%E7%9A%84firefox%E6%95%85%E9%9A%9C%E8%BF%98%E6%9C%89%E4%B8%80%E4%B8%AA%E6%99%AE%E9%80%9A%E5%B8%82%E6%B0%91%E6%98%AF%E6%80%8E%E4%B9%88%E4%BF%AE/ Sun, 08 Sep 2013 15:22:01 +0000 https://blog.heysh.xyz/2013/09/08/%E4%B8%80%E6%AC%A1%E5%A5%87%E6%80%AA%E7%9A%84firefox%E6%95%85%E9%9A%9C%E8%BF%98%E6%9C%89%E4%B8%80%E4%B8%AA%E6%99%AE%E9%80%9A%E5%B8%82%E6%B0%91%E6%98%AF%E6%80%8E%E4%B9%88%E4%BF%AE/ <p>有一天,我的firefox突然挂掉了。症状是chinese language pack无效,而且pentadactyl和ABP等一部分addons全都挂掉了——但是disable-enable之后又可以用,而且另外一些Addons居然好好的……</p> <p>(中略)</p> <h2 id="解决">解决:</h2> <p>用df检查磁盘空间,然后把<code>/</code>目录最大的文件夹干掉。顺便推荐一个软件:<code>xdiskusage</code></p> <hr /> <h2 id="没用的部分">没用的部分:</h2> <ol> <li>重新安装firefox(因为吃过好几次<code>yaourt</code>的亏)</li> <li>无效。上Google,查资料,关键词”firefox 23 addon enable|disable”之类</li> <li>尝试各种方法。无效</li> <li>备份<code>~/.mozilla/firefox/&lt;乱码&gt;.default</code>和<code>profile.ini</code></li> <li>(愤怒地)reset profile</li> <li>问题没有解决</li> <li>怀疑为权限问题,观察权限无异常。曾想递归把整个profile目录改为777<del>(beast mode)</del>,然后(用优秀的涵养)忍住了</li> <li>干掉整个<code>~/.mozilla/firefox/</code>目录</li> <li>出现欢迎界面(英文)</li> <li>高兴地关闭Firefox,然后发现无法再次打开</li> <li>尝试在terminal中打开,没有输出可用信息。顺便推荐<code>tilda</code></li> <li>观察<code>\home</code>目录,剩余空间2.0G<br /> &lt;–最接近真相的位置,谁叫文件管理器(推荐<code>spaceFM</code>)看磁盘空间这么容易呢</li> <li><p>到备份的<code>&lt;乱码&gt;.default</code>文件夹乱翻,找到一堆log,其中<code>extensions.log</code>有一段是这样的:</p> <p>2013-09-07 14:04:58 ERROR addons.xpi-utils: SQL error 13: database or disk is full at resource://gre/modules/XPIProvider.jsm -&gt; resource://gre/modules/XPIProviderUtils.js:204<br /> 2013-09-07 14:04:58 ERROR addons.xpi: Error processing file changes: [Exception… “Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [mozIStorageStatement.execute]” nsresult: “0x80004005 (NS_ERROR_FAILURE)” location: “JS frame :: resource://gre/modules/XPIProvider.jsm -&gt; resource://gre/modules/XPIProviderUtils.js :: XPIDB_rollbackTransaction :: line 457” data: no] at resource://gre/modules/XPIProvider.jsm -&gt; resource://gre/modules/XPIProviderUtils.js:457<br /> 2013-09-07 14:04:58 ERROR addons.xpi: Error during startup file checks, rolling back any database changes: [Exception… “Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [mozIStorageStatement.execute]” nsresult: “0x80004005 (NS_ERROR_FAILURE)” location: “JS frame :: resource://gre/modules/XPIProvider.jsm -&gt; resource://gre/modules/XPIProviderUtils.js :: XPIDB_commitTransaction :: line 442” data: no] at resource://gre/modules/XPIProvider.jsm -&gt; resource://gre/modules/XPIProviderUtils.js:442<br /> 2013-09-07 14:04:58 ERROR addons.manager: Exception calling provider startup: [Exception… “Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [mozIStorageStatement.execute]” nsresult: “0x80004005 (NS_ERROR_FAILURE)” location: “JS frame :: resource://gre/modules/XPIProvider.jsm -&gt; resource://gre/modules/XPIProviderUtils.js :: XPIDB_rollbackTransaction :: line 457” data: no] at resource://gre/modules/XPIProvider.jsm -&gt; resource://gre/modules/XPIProviderUtils.js:457</p></li> <li><p>新关键词GET,查询结果乱七八糟。</p></li> <li><p>怀疑sqlite有上限:<strong>database <del>or disk</del> is full</strong></p></li> <li><p>对于(不会SQL)的一般小市民,再次查询,未果</p></li> <li><p>注意到脑内自动添加的删除线,删除删除线</p></li> <li><p>跳至解决部分</p></li> </ol> <h2 id="总结">总结:</h2> <ul> <li>用英文描述问题</li> <li>上Google</li> <li>查 log</li> <li>Google that log</li> <li>意识到以上步骤其实很有可能没用</li> <li>静静等待灵感的降临</li> <li><em>(bonus)</em> 不要安装 Matlab,特别是在<code>\</code>文件夹只有30G的情况下</li> </ul> fcitx的各种小功能 https://blog.heysh.xyz/2013/08/23/fcitx%E7%9A%84%E5%90%84%E7%A7%8D%E5%B0%8F%E5%8A%9F%E8%83%BD/ Fri, 23 Aug 2013 13:39:02 +0000 https://blog.heysh.xyz/2013/08/23/fcitx%E7%9A%84%E5%90%84%E7%A7%8D%E5%B0%8F%E5%8A%9F%E8%83%BD/ <p>首先是吐槽时间:藏得这么深谁找得着啊!!好多帅气的小功能连按钮都没有!!连快捷键都要四个按键一块按!!!</p> <h1 id="颜文字">颜文字</h1> <blockquote> <p>钥匙是分号</p> </blockquote> <p>对,就是那个不知道怎么回事的“快速输入”。比如说,输入<code>;smile</code>就是(・∀・),什么你说你看不懂英文?到<a href="https://fcitx-im.org/wiki/QuickPhrase_Emoji">这里</a>,复制到一个文件里,然后导入就行了~</p> <p><img src="11.png" alt="为什么不直接集成呢?谁知道呢……" /></p> <h1 id="输入unicode">输入unicode</h1> <blockquote> <p>Ctrl+Alt+Shift+U</p> </blockquote> <p>快跑啊,野生的四按键快捷键出现啦o(≧口≦)o</p> <p>有了这个,<del>某痞子的:│▌就可以打出来了</del>,输入<code>male</code>就可以找到可♂口的汉⚣子哦~</p> <p>至于上面那个任务,好像还是用<code>charmap</code>或者<code>gucharmap</code>比较妥当……</p> <h1 id="更-多-可-口-的">更♂多♂可♂口♂的♂♂♂♂</h1> <p>这时就要用到fcitx的<a href="https://github.com/felixonmars/fcitx-tsundere">蹭得累插件</a>了~还有菊҉花҉体҉放送哦~~</p> 个人主页上线 https://blog.heysh.xyz/2013/08/12/%E4%B8%AA%E4%BA%BA%E4%B8%BB%E9%A1%B5%E4%B8%8A%E7%BA%BF/ Mon, 12 Aug 2013 06:23:40 +0000 https://blog.heysh.xyz/2013/08/12/%E4%B8%AA%E4%BA%BA%E4%B8%BB%E9%A1%B5%E4%B8%8A%E7%BA%BF/ <p><a href="http://heyeshuang.github.io">http://heyeshuang.github.io</a></p> <p>请使用现代浏览器并开启硬件加速</p> https://blog.heysh.xyz/2013/07/27/%E6%96%AD-3/ Sat, 27 Jul 2013 15:12:05 +0000 https://blog.heysh.xyz/2013/07/27/%E6%96%AD-3/ <p>对面楼下有一小丛竹子,十余年来,似乎并没有什么变化。不过,从五楼的窗户看过去,这样的视角还是第一次。记忆中,楼道的窗台并不是这样低矮,然而阴暗和潮湿还是一样。</p> <p>耳边只有震耳欲聋的蝉鸣。不久,雨变得稍稍猛烈了一些,最后毫不留情地倾泄起来。</p> firefox主页被绑架 https://blog.heysh.xyz/2013/05/28/firefox%E4%B8%BB%E9%A1%B5%E8%A2%AB%E7%BB%91%E6%9E%B6/ Tue, 28 May 2013 08:48:31 +0000 https://blog.heysh.xyz/2013/05/28/firefox%E4%B8%BB%E9%A1%B5%E8%A2%AB%E7%BB%91%E6%9E%B6/ <p>如果你的firefox首页被绑架了(我是被dyy55),请不要像我一样<strong>恼羞成怒</strong>,抱着“就是不让你挣钱”的扭曲心态,直接修改<code>C:\Windows\System32\drivers\etc\hosts</code>加上一行:</p> <div class="highlight"><pre style="background-color:#f0f3f3;-moz-tab-size:4;-o-tab-size:4;tab-size:4">127.0.0.1 ww w.dyy55.c om</pre></div> <p>(去掉空格)</p> <p>这样虽然有效,但是过于简单粗暴(But I’m lovin’ it)</p> <p>更加优雅的答案是去修改<code>C:\Users\me\Application Data\Mozilla\Firefox\Profiles\********.default\user.js</code>,或者直接把这个干掉。</p> <p>这件事情告诉我们一个道理,firefox已经不再是一个比较小众的浏览器了;然而linux上仍然没有盗号木马。我不禁陷入了沉思。</p> 测试VimRepress https://blog.heysh.xyz/2013/05/26/%E6%B5%8B%E8%AF%95vimrepress/ Sun, 26 May 2013 08:05:33 +0000 https://blog.heysh.xyz/2013/05/26/%E6%B5%8B%E8%AF%95vimrepress/ <p><em>本来这时候我是应该滚去写实验报告的但却写了博客</em></p> <blockquote> <p>不过大概这种东西应该花不了多久吧</p> <p>–我这样安慰着自己</p> </blockquote> <p>总而言之,VimRepress是一个在<strong>VIM</strong>上用<strong>markdown</strong>写博客的插件,用于替代已经挂掉的VimPress;</p> <p><a href="http://apt-blog.net/release-of-vimrepress_cn">说明</a></p> <p>好吧我滚回去写作业……</p> 电路图、流程图:diagram designer及其他 https://blog.heysh.xyz/2013/05/25/%E7%94%B5%E8%B7%AF%E5%9B%BE%E6%B5%81%E7%A8%8B%E5%9B%BEdiagram-designer%E5%8F%8A%E5%85%B6%E4%BB%96/ Sat, 25 May 2013 15:41:17 +0000 https://blog.heysh.xyz/2013/05/25/%E7%94%B5%E8%B7%AF%E5%9B%BE%E6%B5%81%E7%A8%8B%E5%9B%BEdiagram-designer%E5%8F%8A%E5%85%B6%E4%BB%96/ <p>一个月后的总结:当我用linux的时候,我会用dia画电路和流程图。yed只能画流程图,不过看起来稍微漂亮一点。</p> <p>在win下,dia的中文支持有些小问题,画电路图建议schemeit,流程图可以用chrome应用<a href="https://chrome.google.com/webstore/detail/gliffy-diagrams/bhmicilclplefnflapjmnngmkkkkpfad?utm_source=chrome-ntp-launcher">Gliffy</a>。</p> <p>当然,你要是买得起VISIO/PROTEL/mutisim什么的请不要来鄙视我等穷人。另外,gEDA似乎也不是 <em>特别</em> 难学。</p> <hr /> <p><del>Tree</del> diagram</p> <p>designer(<del>树状</del>图设计者),是一个windows下画流程图以及各种示意图的软件,是我们实验报告的好伙伴。当然,用它画电路图其实不大好用……</p> <p>另外,云端电路图还有<a href="https://www.circuitlab.com/editor/">circuitLab</a>和<a href="http://www.digikey.com/schemeit">schemeIt</a>等等。曾经用过一段circuitLab,不过那里的电路符号*和我们的画风不一样*;粗略的看了一眼schemeIt,元件种类似乎不少,待会试试?</p> <p>另外值得一提的就是这两个web app似乎都没有用flash。</p> <blockquote> <p>HTML5就是正义,真是个好时代啊。【HTML5が正义、いい时代になったものだ。】</p> </blockquote> <p>其实我在写实验报告的时候也*领悟了悲伤*……</p> Doppelgänger https://blog.heysh.xyz/2013/05/23/doppelganger/ Wed, 22 May 2013 16:25:05 +0000 https://blog.heysh.xyz/2013/05/23/doppelganger/ <p>分身(德语:Doppelgänger)本意是指某一生者在二地同时出现,由第三者目睹另一个自己的现象。该存在与本人长得一模一样,但不限定为善或恶。民间传说当自己见到自己的分身,代表「其人寿命将尽」。</p> <p>在历史记载上,据说美国第16届总统亚伯拉罕·林肯与日本作家芥川龙之介等名人曾经见过自己的分身。另一种说法是:罹患脑癌的病人丧失了自我认识的感觉,而会感受到好像有肉体以外的「另一个自己」存在。换句话说也可以想成是脑部发生某种功能障碍,死期将尽的人看到了分身,而出现「见到另一个自己的人将会不久於人世」这样的说法。不过该说法仍然只是推测,因为有过「由第三者目击到分身」的案例,与前述说法会有不合逻辑的部分。总体而言,分身大抵上被视为神秘学的现象。</p> <blockquote> <p>“你还记得那个德国传说吗?人要是遇到了长得跟他一模一样的幽灵,他就会死的。不记得?那个幽灵在一个孤寂的地方现身,绝望地挥动着他的胳膊。”     ——牛虻</p> </blockquote> <p>作为结论,通过寻找和自己相似的人来获得自我认同,大概是十分危险的。</p> 果壳和国王 https://blog.heysh.xyz/sentences/ Sun, 19 May 2013 16:55:35 +0000 https://blog.heysh.xyz/sentences/ <p>A leaf is mortal. Leaves are not. –130520</p> <p>今天只是我平凡而无聊的一生之中普通的一天。有的人可以从一天中预言一生,这样的人被教会烧死了。–130520</p> <p>永生的预言家能不能看到自己的一生?–130520</p> <p>鸡肉是穷人的好朋友!你们为什么要伤害鸡肉!–5.21</p> <p>不停遗忘的永生者与无法忘记的凡人——5.24</p> <p>我的特长是写热情洋溢的拒绝信 ——5.28</p> <p>称号:冒牌瑞士军刀 –5.28</p> <p>押韵就是正义(认真状)——5.29</p> <p>每一天都在为了活下去而努力 –6.13</p> <p><del>“即使这样也要活下去。活下去!我还不想这样放弃!” –6.14</del></p> <p>人类是一种群居动物。现在,人类已经进化到没有集体(社会)便无法生存的程度,孤独感也正是群居生活的枷锁。但另一方面,人类却无法在基因库中彻底抹消个体的意识,这造成了社会的混乱,也导致很多孤独的人仍苟活于世。 –6.14</p> <p>我之所以不为猪辩护,是因为我并不担心有一天会被吃掉。 –6.14</p> <blockquote> <p>我只认为同情心是道德的基石。要得到同情心,需要一点点想象力——或者稍稍多一点的不那么愉快的经验。</p> </blockquote> <hr /> <p>上面那个是谁呀真恶心…另外,最近的新爱好是对着厕所里的大镜子做JOJO立 —6.20</p> <p><del>短期梦想:把左手改装成机械臂||巨大机器人!! –6.26</del></p> <p>后来,我选择了一条不同的道路。</p> <blockquote> <p>这样的话就只能做beam系武器了……残念…… –10.14</p> </blockquote> <p>今日经验:永远不要试探他人。 –7.8</p> <p>—你知道吗?枯叶里面其实很暖和呢!虽然见不到阳光。 —那是因为细菌吧。 –131004</p> <p>今日新能力:将所有社交网络用成阅读器的能力 –131016</p> <p>今天的感想:被创造出来的东西一定有它的极限 –131110</p> <p>就像是卧床不起的暮年浪子,也想再跳一支伦巴。—140204</p> <hr /> <p>新脑洞:</p> <p>人类灭绝之后,机器人统治了地球。但是,机器人的AI具有缺陷,无法进行科学发现,于是,主脑使用古人类遗留的不完整基因序列和改造设施,制造了一种新的生物群系。该种群系适应制造的“实验室”环境,最低等级的“实验设备”器官高度特化,适于完成特定的“实验”;“实验设备”由“实验员”进行连接、转移和组合,“实验员”具有稳定的下肢和适于抓握的上肢,并具有复杂的趋利避害反射(被称作“安全准则”);“传感器”具有大量感受器官,与“实验设备”共生。“实验设备”、“实验员”、“传感器”与“大老板”通过某种(不会干扰试验)的方式相连。当一次实验产生与已知某项数据对比“较好”的结果时,“大老板”产生欣快感,保存“实验过程”,该群落的信息保存至数据库,销毁“实验室”。“大老板”再次制造“实验室”,以上一次结果为范本自然变异。</p> <p>“隔壁实验室好像养了两只代数系统啊”——实验员们的寒暄,如果它们可以的话。</p> <p>——141015</p> <hr /> <p><a href="/2015/04/09/%E7%BD%97%E9%A9%AC%E5%9C%A8%E5%93%AA%E9%87%8C/">……他面色阴沉,一言不发。</a></p> <p><a href="/2015/04/09/%E7%BD%97%E9%A9%AC%E5%9C%A8%E5%93%AA%E9%87%8C/">…</a></p> <p><a href="/2015/04/09/%E7%BD%97%E9%A9%AC%E5%9C%A8%E5%93%AA%E9%87%8C/">“哪里是罗马,哪里是强大的罗马?”</a></p> <p>-20150202</p> <hr /> <p>一切死亡都有冗长的回声。 ——北岛</p> <p>——20150416</p> <hr /> <p>失眠时,秒针的声音是一种酷刑。</p> <p>考虑在宿舍里也装上一座大钟。</p> <p>–20150905</p> <hr /> <p>雪后,满地都是绿色的叶子。心疼那些镁。 –20151123</p> <p>“有的时候我会忘记孤独”,千分尺说。 –20160113</p> <p>当河流开始分叉时,会有树枝搁浅在三角洲上。 –20160920</p> <hr /> <p>这可以说是自我实现的预言了。肥肠豹笑。</p> <p>下次请给我一个更好的预言可以吗?</p> <p>预言家预言了自己的预言!效果拔群!系统崩溃了!</p> <p>——170520 4:00 am</p> <hr /> <p>饶有兴致地观察着 -口不择言慌不择路风声鹤唳四面楚歌- 疯狂尬聊的自己,获得一种感受</p> <h2 id="170817">——170817</h2> <p>真正的自由在拥挤的旷野和空无一人的街头。 -20180424</p> <p> </p> Mortal https://blog.heysh.xyz/2013/05/20/mortal/ Sun, 19 May 2013 16:53:27 +0000 https://blog.heysh.xyz/2013/05/20/mortal/ <p>在我无助的时候,并不会有人来拯救我。这可谓是一种报应:我以冷脸示于人前,从未尝试拯救他人,从未想过被他人拯救。疏离,也许是永生所要的代价;如果真是如此,就让时间成为我唯一的朋友。</p> <p>然而我仍未得到永生,时间仍是我最大的敌人。</p> vim again https://blog.heysh.xyz/2013/05/17/vim-again/ Fri, 17 May 2013 13:38:22 +0000 https://blog.heysh.xyz/2013/05/17/vim-again/ <blockquote> <p>vim是一种信仰。</p> </blockquote> <p>上面这句话应该是从某个披头散发1年没洗澡的*技术大牛*嘴里说出来,尾音要长,眼神越死鱼越好。摄像白平衡一定不能调准,要沧桑要有feel。在下面再带个双语字幕就更好了,英文就写”you are all 渣渣”就行…… 咳咳,跑题了。</p> <hr /> <p>好吧那么我为什么又开始折腾vim了呢?因为eclipse太水了……</p> <p>其实我本来是有一个<a href="https://github.com/amix/vimrc">vimrc</a>来着,号称是“超级无敌”之类,不过在折腾了两个插件以后,我觉得还是对自己好一点吧……</p> <p>于是我找到了<a href="https://github.com/humiaozuzu/dot-vimrc">这个</a>,基本开箱即用,不过因为面对高贵的mac,linux用户需要一点点<a href="https://github.com/heyeshuang/dot-vimrc">修改</a>。</p> <p>//谁能告诉我linux下command键用哪个替代?</p> <p>安装之后要装ctags,各种补全库,然后 <code>:BundleInstall</code></p> <p>用vim的时候还有一些小问题:</p> <h2 id="剪贴板">剪贴板</h2> <p>一番折腾之后,我决定把<code>&quot;+p</code>和<code>&quot;+y</code>记住…… 另外,中键似乎能直接粘贴选中文字,好像有点用…的样子?</p> <h2 id="字体">字体</h2> <p>可以看看<a href="http://www.iplaysoft.com/top10-programming-fonts.html">这个</a>,<a href="http://www.vimer.cn/2009/11/vim%EF%BC%88gvim%EF%BC%89%E7%BC%96%E7%A8%8B%E5%AD%97%E4%BD%93%E6%8E%A8%E8%8D%90.html">这个</a>,然后为了兼容性我选了最土的那个……</p> <p><del>苹果的字体好漂亮……好想要……</del></p> <h2 id="输入法">输入法</h2> <p>安完fcitx.vim之后,要用<code>ctrl+alt+p</code>把<strong>预编辑文字</strong>关掉</p> <hr /> <p>折腾完这个以后,我发现这几天都没时间写东西了~vim,有缘再见~~~</p> 邪恶的Archlinux https://blog.heysh.xyz/2013/05/17/%E6%B7%B7%E4%B9%B1%E9%82%AA%E6%81%B6%E7%9A%84archlinux/ Fri, 17 May 2013 07:47:31 +0000 https://blog.heysh.xyz/2013/05/17/%E6%B7%B7%E4%B9%B1%E9%82%AA%E6%81%B6%E7%9A%84archlinux/ <p>前几天archlinux更新后无法启动,提示”/bin/systemd not exist”,于是乖乖等官网说明,顺理成章的没等到。于是开始google,在g+发现一条线索:那群变态好像把<code>/bin/systemd</code>移到<code>/usr/lib/systemd/systemd</code>里了……</p> <p>于是解决方案是:在grub按e,把<code>/bin/systemd</code>换成<code>/usr/lib/systemd/systemd</code>就行了;进来之后,还要改<code>/etc/default/grub</code>,以及<code>grub-mkconfig</code>……</p> <p>所以说你们折腾这个到底是为什么呀?觉得系统太稳定还是想玩弄可怜的系统管理员??</p> <p>用一张图表达我的感想:</p> <p><img src="/evil.png" alt="evil" /></p> 十一年前,以及今天 https://blog.heysh.xyz/2013/05/10/%E5%8D%81%E4%B8%80%E5%B9%B4%E5%89%8D%E4%BB%A5%E5%8F%8A%E4%BB%8A%E5%A4%A9/ Fri, 10 May 2013 15:25:26 +0000 https://blog.heysh.xyz/2013/05/10/%E5%8D%81%E4%B8%80%E5%B9%B4%E5%89%8D%E4%BB%A5%E5%8F%8A%E4%BB%8A%E5%A4%A9/ <p>今天在互联网上hang about的时候,发现了<a href="http://www.maylin.net/Fireworks.html">这个</a>:</p> <p>在h1位置就大张旗鼓的用p标签写着Posted July 2002,也完全是2002年的风格:table式排版,内嵌font,还有 <em>大家都喜欢的</em> comic sans;再一看head,是长成这样的:</p> <div class="highlight"><pre style="background-color:#f0f3f3;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-html" data-lang="html">&lt;<span style="color:#309;font-weight:bold">meta</span> <span style="color:#309">content</span><span style="color:#555">=</span><span style="color:#c30">&#34;text/html; charset=windows-1252&#34;</span> <span style="color:#309">http-equiv</span><span style="color:#555">=</span><span style="color:#c30">&#34;Content-Type&#34;</span>&gt; &lt;<span style="color:#309;font-weight:bold">meta</span> <span style="color:#309">content</span><span style="color:#555">=</span><span style="color:#c30">&#34;Microsoft FrontPage 6.0&#34;</span> <span style="color:#309">name</span><span style="color:#555">=</span><span style="color:#c30">&#34;GENERATOR&#34;</span>&gt; &lt;<span style="color:#309;font-weight:bold">meta</span> <span style="color:#309">content</span><span style="color:#555">=</span><span style="color:#c30">&#34;FrontPage.Editor.Document&#34;</span> <span style="color:#309">name</span><span style="color:#555">=</span><span style="color:#c30">&#34;ProgId&#34;</span>&gt; &lt;<span style="color:#309;font-weight:bold">meta</span> <span style="color:#309">content</span><span style="color:#555">=</span><span style="color:#c30">&#34;no&#34;</span> <span style="color:#309">http-equiv</span><span style="color:#555">=</span><span style="color:#c30">&#34;imagetoolbar&#34;</span>&gt; &lt;<span style="color:#309;font-weight:bold">title</span>&gt;Fireworks&lt;/<span style="color:#309;font-weight:bold">title</span>&gt; &lt;<span style="color:#309;font-weight:bold">meta</span> <span style="color:#309">content</span><span style="color:#555">=</span><span style="color:#c30">&#34;none, default&#34;</span> <span style="color:#309">name</span><span style="color:#555">=</span><span style="color:#c30">&#34;Microsoft Border&#34;</span>&gt;</code></pre></div> <p>看到了吗?死掉的FrontPage……</p> <p>然而,打开java以后,这网页是这样的:</p> <p><img src="/fireworks.png" alt="fireworks" /></p> <p>现在到了找不同环节:请找出它与<a href="http://jackrugile.com/lab/fireworks-v1/">这个</a>的区别。</p> <p>唯一的区别是,它早了11年。</p> <p>当然,现在流行的是什么平面化设计风格,java applets也被flash挤出了浏览器;而现在flash在换了n次东家之后,也慢慢显出了颓势。</p> <blockquote> <p>现在是HTML5的时代了!他们说。</p> </blockquote> <p>于是,我们用先进的HTML5,代替了古老的java,然后发现风扇一样狂转。</p> <p>当我们欢欣鼓舞地把frontpage丢进坟墓的时候,绝对不会想到今天的adobe muse。</p> <p>当我们把“三剑客”奉为神器的十一年后,flash已经半死不活,<strong>真正的</strong>fireworks,刚刚咽下他<a href="http://www.donews.com/it/201305/1491311.shtm">最后</a>一口气。</p> <p>我们如今吹捧的新技术,是否又能活过十一年?我们今天所鄙视的,是否又会成为明日的风潮?</p> <p>也许,我应该好好学学上个世纪的C语言?</p> <h1 id="又及">又及</h1> <p>这个网页的直到10年还在更新。八年之后,我会在那里呢?这个博客肯定也会灰飞烟灭,随着某次大清理消失吧。或许可以在archive.org找到?</p> <h2 id="又及之又及">又及之又及</h2> <p>事实证明我还是过于乐观。archive上根本没有这个页面。</p> 贺叶霜的树 https://blog.heysh.xyz/2013/04/27/%E8%B4%BA%E5%8F%B6%E9%9C%9C%E7%9A%84%E6%A0%91/ Sat, 27 Apr 2013 08:22:17 +0000 https://blog.heysh.xyz/2013/04/27/%E8%B4%BA%E5%8F%B6%E9%9C%9C%E7%9A%84%E6%A0%91/ <p><a href="https://github.com/heyeshuang/my_tree_2d">github</a></p> <p><a href="http://heyeshuang.github.io/my_tree_2d">live demo(slow)</a></p> Limited Gear Works https://blog.heysh.xyz/2013/04/19/limited-gear-works/ Fri, 19 Apr 2013 13:50:50 +0000 https://blog.heysh.xyz/2013/04/19/limited-gear-works/ <p>总之是一个画齿轮的canvas, <em>没用</em> 而且<strong>速度慢</strong>,不过最终至少像那么回事了。</p> <p><a href="http://heyeshuang.github.io/LGW/">地址</a></p> 永生,其二 https://blog.heysh.xyz/2013/04/01/%E6%B0%B8%E7%94%9F%E5%85%B6%E4%BA%8C/ Mon, 01 Apr 2013 08:57:51 +0000 https://blog.heysh.xyz/2013/04/01/%E6%B0%B8%E7%94%9F%E5%85%B6%E4%BA%8C/ <p>我仍然渴望永生。</p> <p>“相遇的人会再相逢”,我很喜欢这句话,但我又明白,很多时候这并不现实。在人类短暂的一生里,很多人只能擦肩而过,而所谓命中注定,可能出现在正确的地点,却错过了多年。</p> <p>而永生则不同。只要永远、永远的活着,总有一天会再次相遇。在这之前,彷徨也好,等待也罢,毕竟来日方长。只是,当偶然成为了必然,是不是会有些无聊?</p> <p><del>我并不期望所谓的“缘分”,因为这只是生命之有限的副产品,正如我不满于美丽的点滴,而是贪婪地妄图痛饮它的源泉。当世上的所有生命之可贵完全展开在我眼前之时,我才能够满足的拥抱永恒的虚无。</del></p> <p>&lt;=这段删掉吧,中二病爆发了</p> https://blog.heysh.xyz/2013/04/01/%E6%96%AD-2/ Mon, 01 Apr 2013 04:24:00 +0000 https://blog.heysh.xyz/2013/04/01/%E6%96%AD-2/ <p>跑。跑。跑。</p> <p>说是奔跑,但并不很快,喘着粗气,但头脑却极速转动。</p> <p>后面传来凌乱的脚步声,是很多皮鞋踏在一尘不染的木地板上,在空旷的大厅中回响。</p> <p>大门已经锁死,但是珍贵的檀木却并不结实,很快他们就会突破了吧。穿过金碧辉煌的长廊,红色地毯传来柔软的触感,但他并没空注意这个。</p> <p>他跑到走廊的终点,在墙上胡乱点了几下,拿出了一把很小的手枪,就像玩具一样——但是仍然能快速结束生命。</p> <p>一扇暗门缓缓滑开,他并不知道这扇门通向哪里,他本不需要这扇门——</p> <p>于是我就醒了。</p> 我的云上逃亡,或,google reader的替代品 https://blog.heysh.xyz/2013/03/29/%E6%88%91%E7%9A%84%E4%BA%91%E4%B8%8A%E9%80%83%E4%BA%A1/ Fri, 29 Mar 2013 08:47:24 +0000 https://blog.heysh.xyz/2013/03/29/%E6%88%91%E7%9A%84%E4%BA%91%E4%B8%8A%E9%80%83%E4%BA%A1/ <p><a href="/2013/02/01/blog%E5%86%8D%E6%AC%A1%E5%A4%8D%E6%B4%BB/">之前</a>也说过一次,openshift的域名被做掉了,于是这里顶着一个tk招摇过市,就像顶着叶子的狸猫,没有一个搜索引擎能看见。f××k G×W!</p> <p>不过这次折腾PaaS是因为Google Reader <em>也</em> 被干掉了,寻找到以下替代方案:</p> <ul> <li><p><a href="https://github.com/samuelclay/NewsBlur">NewsBlur</a> based on django</p></li> <li><p><a href="http://tt-rss.org/redmine/projects/tt-rss/wiki">Tiny Tiny RSS</a> based on PHP&amp;MySQL</p></li> </ul> <p>似乎PHP比较常见的样子,于是准备先试试TT-rss。</p> <p>现在的进度是,appfog|CloundFoundry|openshift|dotcloud|heroku的账号集齐了,再加个GAE和主机屋(不要用!很麻烦!),就可以召唤神龙了?</p> <p><del>过会放测试结果,如果没有下文的话,就是我被什么龙给吃掉了~</del></p> <p>update:直接google找到了<a href="http://projectdelphai.github.com/2013/03/15/replacing-google-reader-with-tt-rss-on-heroku/">这个</a>,还贴心的放出了<a href="https://github.com/projectdelphai/ttrss-on-heroku/blob/master/ttrss_heroku_setup.sh">脚本</a>。heroku,就决定是你了!<br /> <a href="http://www.quora.com/Is-there-anything-like-Heroku-I-can-use-for-a-PHP-site">这里</a>还有一大把PHP云,大概够了?</p> <p>update 2013-3-31:TT-RSS的数据库用量已经达到90%了……另外,又找到两个可能的选择:</p> <ul> <li><p><a href="http://fofredux.sourceforge.net/">FoFRedux</a>似乎已经好久没更新了,还提到了<a href="http://baike.baidu.com/view/236935.htm">Nokia770</a>,2005年?</p></li> <li><p><a href="http://getlilina.org/">Lilina</a>,官网似乎很帅气,而且也不用数据库……<del>下次试一下这个?</del>一般paas都不支持直接写入……</p></li> </ul> <p>update 2013-04-04 还有:</p> <ul> <li><p><a href="http://owncloud.org/">owncloud</a>,全能型选手,各路大神推荐</p></li> <li><p><a href="http://selfoss.aditu.de/">selfoss</a>,要求写入权限,不知道怎么样</p></li> </ul> <p>4-6再次更新:最后(?),在openshift上用脚本搭了ttrss(并绑定了域名),对owncloud采取持续观望的态度。</p> <p>5-29 另外:</p> <ul> <li><a href="https://github.com/Athou/commafeed">CommaFeed</a>,并贴心的提供了“Deployment on OpenShift”的教程</li> </ul> <p>又及:测试VimRepress的编辑能力</p> 如果你像我一样主力使用xfce但又觉得GNOME3也许会变得好一点于是安装之后才发现果然还是无法接受 https://blog.heysh.xyz/2013/03/29/%E5%A6%82%E6%9E%9C%E4%BD%A0%E5%83%8F%E6%88%91%E4%B8%80%E6%A0%B7%E4%B8%BB%E5%8A%9B%E4%BD%BF%E7%94%A8xfce%E4%BD%86%E5%8F%88%E8%A7%89%E5%BE%97gnome3%E4%B9%9F%E8%AE%B8%E4%BC%9A%E5%8F%98%E5%BE%97%E5%A5%BD/ Fri, 29 Mar 2013 07:21:48 +0000 https://blog.heysh.xyz/2013/03/29/%E5%A6%82%E6%9E%9C%E4%BD%A0%E5%83%8F%E6%88%91%E4%B8%80%E6%A0%B7%E4%B8%BB%E5%8A%9B%E4%BD%BF%E7%94%A8xfce%E4%BD%86%E5%8F%88%E8%A7%89%E5%BE%97gnome3%E4%B9%9F%E8%AE%B8%E4%BC%9A%E5%8F%98%E5%BE%97%E5%A5%BD/ <p>这时全部删除GNOME却发现xfce变得特别丑陋的原因是GNOME-settings-daemon与xfdsetting冲突于是后者被自动关闭了。只要重新启动xfdsetting,然后去把g-s-d的自启关掉就好。</p> <p>题外话,lightdm设置好的话十分nice,有空放一份配置文件上来。</p> CATIA是个好软件 https://blog.heysh.xyz/2013/03/21/catia%E6%98%AF%E4%B8%AA%E5%A5%BD%E8%BD%AF%E4%BB%B6-2/ Thu, 21 Mar 2013 05:18:05 +0000 https://blog.heysh.xyz/2013/03/21/catia%E6%98%AF%E4%B8%AA%E5%A5%BD%E8%BD%AF%E4%BB%B6-2/ <p>作为一篇凑字数的日志,标题就充满了歪歪扭扭的无力感……</p> <p>其实我想说的是,在机械设计的时候用好参数的话效果拔群——比如这次的机身,隔板有四种,可是只画了一次!我跟你讲,CATIA,赞!</p> <p>……一不小心又开始自high了,用这些梗的时候有90%强制发动“大冷场术”,要注意.</p> <p>其实前几天早上下雪了,然后看到满地的黑色的车辙,想起一句古话:“一人は泥を見た。一人は<del>星</del>雪を見た”,然后想起了<a href="http://www.pixiv.net/member_illust.php?mode=medium&amp;illust_id=34119825" title="一人は泥を見た。一人は鳥を見た。">这个</a>。</p> <p>说到pixiv,我倒是一直有把自己down的照片传相册的冲动……不过还是算了。</p> blog再次复活 https://blog.heysh.xyz/2013/02/01/blog%E5%86%8D%E6%AC%A1%E5%A4%8D%E6%B4%BB/ Fri, 01 Feb 2013 04:45:08 +0000 https://blog.heysh.xyz/2013/02/01/blog%E5%86%8D%E6%AC%A1%E5%A4%8D%E6%B4%BB/ <p>rhcloud.com被墙了,没办法用wordpress的android版更新实在令人愤怒,幸好我还有个免费域名,虽然不上档次,不过恰好合适。</p> 2012-2013 https://blog.heysh.xyz/2013/01/01/2012-2013/ Mon, 31 Dec 2012 17:35:53 +0000 https://blog.heysh.xyz/2013/01/01/2012-2013/ <p>2012年,玩了石头门,馄饨头,还有菲特今晚留下来。石头门不错,馄饨头渣。菲特?没印象了。不过爵迹零拍的不错……</p> <p>2012年,退了一个比较正式的社团,加了一个比较靠谱的社团,然后在两个社团打酱油。</p> <p>2012年下旬,开始把大把生命浪费在一个屎黄色论坛。</p> <p>2012年,写了几行代码,然后发现自己是个傻x。</p> <p>2012年,有了一些朋友。</p> <p>2012年,除了跟团之外,第一次跟着自己走,虽然走得不远。</p> <p>2012年,本来想做出点东西,然后发现空有热情是无法改变的。</p> <p>2012年,存在感仍然稀薄。</p> <p>2012年,因为仍然没有奖学金,因此还是一个穷人,今天也在绝赞苦逼中。</p> <p>啊,对了,还是有两件好事的:写博客和背单词都坚持了一段时间,虽然现在已经不再背单词了。博客的话,与其说“虽然没人看”,不如说“没人看真是太好了”。我要的是一座空无一人的城堡,或者说,属于自己的一棵树。再说偶尔也会有僵尸来看看我……</p> <p>说到这个,今年暑假玩了好长时间的minecraft。那真是美丽的世界,而且只有我一个人。</p> <p>即使到了2013年,一到夜里就乱说话的毛病还是没治好。</p> <p>2013年的愿望是永生,形式不限。其实也想要别人的认同的,不过既然都不切实际,那么还是永生更好一点。</p> <p>不过13年似乎会很忙,所以要是能慷慨的把时间停止的能力也给我就好了。</p> Texlive 在archlinux上的安装,以及中文字体的设置 https://blog.heysh.xyz/2012/12/22/texlive-%E5%9C%A8archlinux%E4%B8%8A%E7%9A%84%E5%AE%89%E8%A3%85%E4%BB%A5%E5%8F%8A%E4%B8%AD%E6%96%87%E5%AD%97%E4%BD%93%E7%9A%84%E8%AE%BE%E7%BD%AE/ Fri, 21 Dec 2012 16:38:48 +0000 https://blog.heysh.xyz/2012/12/22/texlive-%E5%9C%A8archlinux%E4%B8%8A%E7%9A%84%E5%AE%89%E8%A3%85%E4%BB%A5%E5%8F%8A%E4%B8%AD%E6%96%87%E5%AD%97%E4%BD%93%E7%9A%84%E8%AE%BE%E7%BD%AE/ <blockquote> <p>texmacs已经不能满足我了!</p> <p>其实是想着反正这个软件已经挺难用了,要不就直接去挑战大魔王吧!</p> <p>然后发现大魔王令人绝望的实力</p> <p>然后用S/L大法加google作弊器成功——安装了字体</p> <p>结果我还是不会用tex</p> <p>所以我下了lyx</p> <p>#期末考试就要到了我还在弄这个#</p> <p>#挂科预感up(大)#</p> <p>我说这个又没人爱听</p> <p>反正也不会有人来</p> <p>fin</p> <p>骗你的</p> <p>这里不是只有一个活人吗……不会有什么“你”在啦</p> <p>好吧让我<del>们</del>进入正题。</p> <p>其实我一开始以为直接pacman就好了</p> <p>但是后来我发现自己太甜了</p> <p>于是我就下了texlive的镜像</p> <p>后来发现直接安可能也可以??</p> </blockquote> <p>按照<a href="http://www.road2stat.com/cn/tex/archtex.html">这里</a>的安装方式</p> <div class="highlight"><pre style="background-color:#f0f3f3;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-bash" data-lang="bash">su – wget -c http://mirrors.ustc.edu.cn/CTAN/systems/texlive/Images/texlive2012.iso mkdir /mnt/tex mount -o loop texlive2012.iso /mnt/tex/ <span style="color:#366">cd</span> /mnt/tex/ ./install-tl vim /etc/profile <span style="color:#09f;font-style:italic">#在这里要设置全局变量PATH,加上/usr/local/texlive/2012/bin/i386-linux,否则找不到tlmgr…… </span><span style="color:#09f;font-style:italic"></span>tlmgr option repository http://mirrors.ustc.edu.cn/CTAN/systems/texlive/tlnet tlmgr update –self tlmgr update –all umount /mnt/tex rm -rf /mnt/tex</code></pre></div> <p>然后发现没有字体……</p> <p>然后在<a href="http://tug.org/texlive/doc/texlive-zh-cn/texlive-zh-cn.pdf">这里</a>发现要:</p> <blockquote> <p>将 texlive-fontconfig.conf 文件复制到 /etc/fonts/conf.d/09-texlive.conf, 运行 fc-cache -fsv 以root的名义</p> </blockquote> <p>接下来xetex就会提示你缺少字体了,是不是很高兴?</p> <p>——才怪咧!</p> <p>然后,你要用yaourt安装ttf-ms-fonts-zh_cn这个包——</p> <p>然后fc-list|grep sim和fc-list|grep SIM各一次——</p> <p>然后<code>sudo vim /usr/local/texlive/2012/texmf-dist/tex/latex/ctex/fontset/ctex-xecjk-winfonts.def</code></p> <p>把里面奇怪的[SIMKAI.TTF]和[SIMFANG.TTF]都换成刚才写着“楷体”和“仿宋”行中的英文名,我的是KaiTi_GB2312和FangSong_GB2312</p> <p>编译用例:</p> <div class="highlight"><pre style="background-color:#f0f3f3;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-tex" data-lang="tex"><span style="color:#069;font-weight:bold">\documentclass</span><span style="color:#366">{</span>ctexart<span style="color:#366">}</span> <span style="color:#069;font-weight:bold">\begin</span><span style="color:#366">{</span>document<span style="color:#366">}</span> 为什么大家都在这里写“你好”啊……我一点也不好……而且也没有什么“你”…… <span style="color:#069;font-weight:bold">\end</span><span style="color:#366">{</span>document<span style="color:#366">}</span></code></pre></div> <p>用的编译命令是xelatex……</p> <p>然后……要是提示缺少<code>Adobe Song Std</code>什么的,应该<code>yaourt acroread-font-chinese-simplified</code>就行了吧……</p> <p>啊啊,从这个过程里,我好像看到了我短暂的人生……越是精于算计,就越可能出现意想不到的状况……</p> <blockquote> <p>老子不做人了!TeTe!</p> <p>然后就想起这里还有一篇论文要写……</p> <p>世界末日没有来真是令人沮丧啊……我好想变成橙汁啊……</p> <p>最后祝你身体健康,再见</p> </blockquote> texmacs相关 https://blog.heysh.xyz/2012/11/24/texmacs%E7%9B%B8%E5%85%B3/ Fri, 23 Nov 2012 17:18:26 +0000 https://blog.heysh.xyz/2012/11/24/texmacs%E7%9B%B8%E5%85%B3/ <p><a href="http://www.texmacs.org/" title="TexMacs">TexMacs</a>可以快速排版文章,效果拔群,而且不必使用word式空格大法,实乃尔等强迫症患者之福音。</p> <p>其优势:</p> <ul> <li>像TEX一样的排版,结构和内容分离</li> <li>比TEX更加简单(很多)的操作</li> <li>插入代码不会变形</li> <li>公式漂亮</li> <li>内置gnuplot,matlab,maxima接口,可以方便的画图,推公式,算算术,直接输入到文档中</li> </ul> <p>然而,作为一个(不挣钱的)开源软件,要用上也要下一番功夫。</p> <p>对于windows,推荐(向谁?)使用itexmacs,对中文支持据说好了很多?</p> <p>对于archlinux,community源和AUR上的包都太旧了,似乎无法正常输入中文的样子。不过这个bug已经解决,推荐直接编译安装SVN代码(仓库:svn://svn.savannah.gnu.org/texmacs/trunk/src)</p> <p>本人写了一个pkgbuild传到了AUR上,不过因为是第一次(羞),可能会出现“rm -rf /”的餐具……</p> <p><del>对于ubuntu,推荐换成archlinux</del></p> <p>程序自带的手册很详细,不过因为中文化好像出了一些小问题,那么可以直接去<a href="http://www.texmacs.org/tmweb/manual/web-manual.en.html">http://www.texmacs.org/tmweb/manual/web-manual.en.html</a></p> <p>关于字体,见<a href="http://www.texmacs.org/tmweb/download/fonts.en.html">http://www.texmacs.org/tmweb/download/fonts.en.html</a> ,大概就是要下一个字体放到~/.TeXmacs/fonts/truetype里面然后运行</p> <div class="highlight"><pre style="background-color:#f0f3f3;-moz-tab-size:4;-o-tab-size:4;tab-size:4">texmacs --delete-font-cache &amp;</pre></div> <p>亲测Simsun,wqy可用~</p> <p>关于插入图片,似乎在win下只能插入png的样子,然后更改宽高还要写成”800px”,谁知道还要加单位啊……</p> <p>至今尚未解决的问题:linux下一导出pdf就crash,好像只对中文有效,自带help无压力,什么时候我去报个bug……</p> 那么如同标题一样,这里要变成树洞了 https://blog.heysh.xyz/2012/10/05/%E9%82%A3%E4%B9%88%E5%A6%82%E5%90%8C%E6%A0%87%E9%A2%98%E4%B8%80%E6%A0%B7%E8%BF%99%E9%87%8C%E8%A6%81%E5%8F%98%E6%88%90%E6%A0%91%E6%B4%9E%E4%BA%86/ Fri, 05 Oct 2012 15:15:48 +0000 https://blog.heysh.xyz/2012/10/05/%E9%82%A3%E4%B9%88%E5%A6%82%E5%90%8C%E6%A0%87%E9%A2%98%E4%B8%80%E6%A0%B7%E8%BF%99%E9%87%8C%E8%A6%81%E5%8F%98%E6%88%90%E6%A0%91%E6%B4%9E%E4%BA%86/ <p></p> <p>明明不是tk域名了的说……搜索引擎都收录了的说……为什么没有人来……</p> <p>算了那就当私人空间好了,不过明明是私人空间却还对外开放,这是不是某种暴露癖呢?就像《monster》那样。</p> <p><em>其实有许多梗用的很高兴,但却没有看原作。</em></p> <p>……那么这里变成本大爷的私人树洞了!今后还请大家</p> <p>……</p> <p>……</p> <p>………………呜呜呜我也想要另外一个人格……</p> <p><em>又学到一个新词:树洞</em></p> <p>其实严肃的想,在一个人写博客的时候,投射到文章里的只是他的一部分<del>灵魂</del>人格,在他做生活中其他事情的时候也是这样,那么完全了解一个人的可能性并不存在吧。</p> <p><em>或许,</em><del><em>脑内补完</em></del><em>制作模型的方法可能管用?虽然里面是发条和齿轮,但是应激性是一样的,这样也就行了吧</em></p> 当我画连杆时我想到什么——几何画板,geogebra及其它 https://blog.heysh.xyz/2012/10/04/%E5%BD%93%E6%88%91%E7%94%BB%E8%BF%9E%E6%9D%86%E6%97%B6%E6%88%91%E6%83%B3%E5%88%B0%E4%BB%80%E4%B9%88-%E6%90%81%E6%B5%85%E7%9A%84%E8%AE%A1%E5%88%92%E5%87%A0%E4%BD%95%E7%94%BB/ Thu, 04 Oct 2012 02:32:15 +0000 https://blog.heysh.xyz/2012/10/04/%E5%BD%93%E6%88%91%E7%94%BB%E8%BF%9E%E6%9D%86%E6%97%B6%E6%88%91%E6%83%B3%E5%88%B0%E4%BB%80%E4%B9%88-%E6%90%81%E6%B5%85%E7%9A%84%E8%AE%A1%E5%88%92%E5%87%A0%E4%BD%95%E7%94%BB/ <p>有没有专业画连杆的软件?没有,原因是这样的要求过于小众,而且有许多功能更加丰富的软件可以替代。</p> <p>前几天一直想要实现一个专业画连杆的软件,当时考虑用html5 canvas实现(太复杂的我都不会),还专门找了物理引擎——<a href="http://box2d-js.sourceforge.net/index2.html" title="box2d-js版">box2DJS</a>(注意首页上的第二个例子)。然后发现自己又开始做无用功了,几何画板(和开源实现GeoGebra)完全能够实现我的要求。</p> <p>使用的时候只要注意主从关系就好。效果大概是这样的:</p> <p><img src="/连杆.gif" alt="连杆" /></p> flask似乎不错 https://blog.heysh.xyz/2012/09/11/flask%E4%BC%BC%E4%B9%8E%E4%B8%8D%E9%94%99/ Tue, 11 Sep 2012 15:30:08 +0000 https://blog.heysh.xyz/2012/09/11/flask%E4%BC%BC%E4%B9%8E%E4%B8%8D%E9%94%99/ <p>首先接触的web框架是karrigell,也最后作出了点东西,感觉简单实用但是好像有点非主流。然后看到Django好像很流行,然后就在openshift上弄了一个,最终结果是只用到了statics目录。中间因为搭wordpress,曾经有一段学php的热情。后来……冷掉了。</p> <p>然后下一个目标是flask。</p> <p>不过没有内容,什么都白搭。</p> phpwind论坛刷分脚本(可用于openwrt) https://blog.heysh.xyz/2012/09/11/phpwind%E8%AE%BA%E5%9D%9B%E5%88%B7%E5%88%86%E8%84%9A%E6%9C%AC%E5%8F%AF%E7%94%A8%E4%BA%8Eopenwrt/ Tue, 11 Sep 2012 04:56:26 +0000 https://blog.heysh.xyz/2012/09/11/phpwind%E8%AE%BA%E5%9D%9B%E5%88%B7%E5%88%86%E8%84%9A%E6%9C%AC%E5%8F%AF%E7%94%A8%E4%BA%8Eopenwrt/ <p>用Python2写成,为什么不用Lua?因为我不会</p> <div class="highlight"><pre style="background-color:#f0f3f3;-moz-tab-size:4;-o-tab-size:4;tab-size:4">&#39;&#39;&#39; Created on 2012-9-10 @author: hh &#39;&#39;&#39; import cookielib import urllib2 import urllib import time username=&#34;Chetter.Hummin&#34; password=&#34;password&#34; def login(usr, pwd): &#39;login function&#39; cj = cookielib.CookieJar() opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj)) opener.addheaders = [(&#39;User-agent&#39;,&#39;Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.89 Safari/537.1&#39;)] url_login = &#39;http://bbs.sarabalst.com/2b/login.php&#39; body={&#34;step&#34;:&#34;2&#34;,&#34;pwuser&#34;:usr,&#34;cktime&#34;:&#34;31536000&#34;,&#34;pwpwd&#34;:pwd,&#34;lgt&#34;:&#34;0&#34;} print &#39;login to get cookies&#39; urllib2.install_opener(opener) req = urllib2.Request(url_login,urllib.urlencode(body)) resp = urllib2.urlopen(req) #print (resp.read()) if __name__ == &#39;__main__&#39;: login(username,password) print &#34;login success&#34; print (time.strftime(&#39;%Y-%m-%d %H:%M&#39;,time.localtime(time.time()))) for i in range(0,23): try: str=urllib2.urlopen(&#34;http://bbs.sarabalst.com/2b/&#34;,timeout=100).read() #print &#34;success&#34; except: str=&#34;&#34; #print &#34;fail&#34; if str!=&#34;&#34;: print str print &#34;refresh success&#34; else: print &#34;refresh fail&#34; print (time.strftime(&#39;%Y-%m-%d %H:%M&#39;,time.localtime(time.time()))) time.sleep(300);</pre></div> <p>在openwrt上测试成功。理论上可以加入crontab,现在还没测试(时间不够)<br /> update :鉴于论坛和路由器双重不给力,给urllib2设了超时</p> https://blog.heysh.xyz/2012/08/04/%E6%96%AD/ Fri, 03 Aug 2012 21:20:34 +0000 https://blog.heysh.xyz/2012/08/04/%E6%96%AD/ <blockquote> <p>到了夜晚人就变得奇怪了……</p> </blockquote> <p>好笑的是,高中三年匆匆过去,我对母校的记忆,竟然是几扇窗户。</p> <p>这是当我第一次踏入一中的图书馆时,印在我脑海中的景象。排排的书架旁边是窄窄的窗台,窗子里,是灰色高墙围成的天井。书架上,是密密麻麻摆放的书籍。有像“怎样心算快”这样浅显的画册,也有讲解e pi i之间奇妙关系的读本,更有着关于相对论的大部头{现在想起来,脑袋还是会隐隐作痛}。于是,周一的下午,大扫除的空闲,总会在这里随便抽出一本,或有图、或有趣,倚在窗户边上,随便翻看两页。窗中的阳光,让时间变得暧昧,也给回忆涂上了一层蜂蜜一样粘稠的颜色。晚秋的阳光消失的时候,正是第四节课下课铃声拉响的时间。穿过光亮而湿润的楼道,记忆中的是窗边一方并不宽敞的课桌。在书山中奋笔疾书的时候,偶尔会听到沙沙的风声,窗外是墨绿而坚韧的桦树叶子在轻轻的摇动。</p> <p>……</p> <p>啊啊,刚刚提起笔,窗中已经现出了曙光,乌云的缝隙被朝阳映成金黄。这些胡乱的文字要怎么结尾呢,就这样放着不管真的可以吗。</p> <p>太阳出来了,充满回忆的夜晚到此结束,今天又会是新的一天,可是我现在还无法迎接她。</p> THU课程表导出,油猴脚本,输出vcal https://blog.heysh.xyz/2012/07/14/thu%E8%AF%BE%E7%A8%8B%E8%A1%A8%E5%AF%BC%E5%87%BA%E6%B2%B9%E7%8C%B4%E8%84%9A%E6%9C%AC%E8%BE%93%E5%87%BAvcal/ Sat, 14 Jul 2012 08:41:26 +0000 https://blog.heysh.xyz/2012/07/14/thu%E8%AF%BE%E7%A8%8B%E8%A1%A8%E5%AF%BC%E5%87%BA%E6%B2%B9%E7%8C%B4%E8%84%9A%E6%9C%AC%E8%BE%93%E5%87%BAvcal/ <p>脚本下载:<a href="http://userscripts.org/scripts/show/136856">http://userscripts.org/scripts/show/136856</a></p> <p>google code:<a href="http://code.google.com/p/js-thu-cal-outputer/">http://code.google.com/p/js-thu-cal-outputer/</a></p> <blockquote> <p>为什么自己总是做这些完全不会有人来用的东西啊为什么!</p> </blockquote> <p>使用的网站:<a href="http://zhjwxk.cic.tsinghua.edu.cn/xsxk_index.jsp">http://zhjwxk.cic.tsinghua.edu.cn/xsxk_index.jsp</a></p> <p><em>-&gt;这个网站没几个人能上吧!就算是能连上也没有密码啊!</em></p> <p>我写这个的意义到底是什么…………</p> html5-世界变动率计数器(仮) https://blog.heysh.xyz/2012/07/14/html5-%E4%B8%96%E7%95%8C%E5%8F%98%E5%8A%A8%E7%8E%87%E8%AE%A1%E6%95%B0%E5%99%A8%E4%BB%AE/ Sat, 14 Jul 2012 08:32:13 +0000 https://blog.heysh.xyz/2012/07/14/html5-%E4%B8%96%E7%95%8C%E5%8F%98%E5%8A%A8%E7%8E%87%E8%AE%A1%E6%95%B0%E5%99%A8%E4%BB%AE/ <p><a href="http://pylab-heysh.rhcloud.com/static/canvas2.html" title="世界变动率计数器">here</a></p> <blockquote> <p>其实这个东西做好已经有小半个月了,但是后来又是mc又是出去玩什么的就忘了管……但是颓废下去终究是不对的,所以我又回来了。</p> </blockquote> <p>代码简单到自己都觉得没有开project的必要,但是就这么点东西就折腾了好长时间,中途还把整个砍掉重练。我果然还是太年轻(?)</p> <p>如果有需要,请自行抓站,能署名的话本人当然会更高兴。</p> <p>update 2012-9-11:</p> <p><a href="http://heyeshuang.github.com/Divergence-Meter/" title="Divergence-Meter">github page</a></p> 总结:简单的vCal/iCalendar/.ics格式说明 https://blog.heysh.xyz/2012/06/25/%E6%80%BB%E7%BB%93%E7%AE%80%E5%8D%95%E7%9A%84vcalicalendar-ics%E6%A0%BC%E5%BC%8F%E8%AF%B4%E6%98%8E/ Mon, 25 Jun 2012 08:12:57 +0000 https://blog.heysh.xyz/2012/06/25/%E6%80%BB%E7%BB%93%E7%AE%80%E5%8D%95%E7%9A%84vcalicalendar-ics%E6%A0%BC%E5%BC%8F%E8%AF%B4%E6%98%8E/ <p>E文好的话建议去看直接去看IETF的<a href="http://tools.ietf.org/html/rfc5545">RFC5545</a>定义;<br /> 中文版:</p> <blockquote> <p><a href="http://www.ccsa.org.cn/publish/download_bp.php?stdtype=yd1&amp;sno=92" title="总而言之就是标准">政府文件:中华人民共和国通信行业标准移动互联网可移动终端数据同步业务技…(下略)</a></p> <p><a href="http://wenku.baidu.com/view/c52d284c2e3f5727a5e9621e.html">某人翻译的标准文档(百度文库)</a></p> </blockquote> <p>ical格式大概是这样的:</p> <div class="highlight"><pre style="background-color:#f0f3f3;-moz-tab-size:4;-o-tab-size:4;tab-size:4">BEGIN:VCALENDAR PRODID:-//HeYSH//HeYSH Calendar 70.9054//CN VERSION:2.0 CALSCALE:GREGORIAN METHOD:PUBLISH X-WR-CALNAME:课程表 X-WR-TIMEZONE:Asia/Shanghai X-WR-CALDESC: BEGIN:VTIMEZONE TZID:Asia/Shanghai X-LIC-LOCATION:Asia/Shanghai BEGIN:STANDARD TZOFFSETFROM:+0800 TZOFFSETTO:+0800 TZNAME:CST DTSTART:19700101T000000 END:STANDARD END:VTIMEZONE BEGIN:VEVENT DTSTART;TZID=Asia/Shanghai:20120901T092000 DTEND;TZID=Asia/Shanghai:20120901T105000 DTSTAMP:20120622T160054Z UID:%u4F20%u70ED%u5B66%20%u5BF9%u6D41%u5B9E%u9A8C35@第 1 次 CREATED:20120622T154824Z DESCRIPTION:教师:王五n LAST-MODIFIED:20120622T160041Z LOCATION:大礼堂 STATUS:CONFIRMED SUMMARY:实验2 END:VEVENT END:VCALENDAR</pre></div> <p>基本上只要修改中文部分的内容就好了</p> <h4 id="tips">tips:</h4> <ul> <li>PRODID按照格式随意改就好</li> <li>UID是一件事情的绝对标识,对格式没有要求,只要不重复即可</li> <li>重复事件可用RRLUE字段,具体见所附文档。但是好像不支持“1,2,5-9,13,16周”这样猎奇的重复,所以对本人并没有什么用处</li> </ul> <blockquote> <p>还是老老实实一个一个添加吧……不过删除起来也相应的麻烦了许多。</p> </blockquote> <ul> <li>我<del>们</del>尚不知道那天所看到的<del>花的名字</del>DTSTAMP的用处</li> </ul> <p>最后补一些相关代码段(javascript):</p> <div class="highlight"><pre style="background-color:#f0f3f3;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-javascript" data-lang="javascript">$vCalArea.append(<span style="color:#c30">&#39;BEGIN:VCALENDARnPRODID:-//HeYSH//THU Calendar 0.0002//CNnVERSION:2.0nCALSCALE:GREGORIANnMETHOD:PUBLISHnX-WR-CALNAME:课程表nX-WR-TIMEZONE:Asia/ShanghainX-WR-CALDESC:nBEGIN:VTIMEZONEnTZID:Asia/ShanghainX-LIC-LOCATION:Asia/ShanghainBEGIN:STANDARDnTZOFFSETFROM:+0800nTZOFFSETTO:+0800nTZNAME:CSTnDTSTART:19700101T000000nEND:STANDARDnEND:VTIMEZONEn&#39;</span>); <span style="color:#09f;font-style:italic">/***************生成文件头****************/</span> $vCalArea.append(<span style="color:#c30">&#34;BEGIN:VEVENTnDTSTART;TZID=Asia/Shanghai:&#34;</span> <span style="color:#555">+</span> strBT <span style="color:#555">+</span> <span style="color:#c30">&#34;nDTEND;TZID=Asia/Shanghai:&#34;</span> <span style="color:#555">+</span> strET <span style="color:#555">+</span> <span style="color:#c30">&#34;nDTSTAMP:20120622T160054ZnUID:&#34;</span> <span style="color:#555">+</span> uid <span style="color:#555">+</span> <span style="color:#c30">&#34;nCREATED:20120622T154824ZnDESCRIPTION:&#34;</span> <span style="color:#555">+</span> Data.courseInfo <span style="color:#555">+</span> <span style="color:#c30">&#34;nLAST-MODIFIED:20120622T160041ZnLOCATION:&#34;</span> <span style="color:#555">+</span> Data.place <span style="color:#555">+</span> <span style="color:#c30">&#34;nSTATUS:CONFIRMEDnSUMMARY:&#34;</span> <span style="color:#555">+</span> Data.courseName <span style="color:#555">+</span> <span style="color:#c30">&#34;nEND:VEVENTn&#34;</span>) <span style="color:#09f;font-style:italic">/****************VEVENT部分***************/</span> $vCalArea.append(<span style="color:#c30">&#39;END:VCALENDAR&#39;</span>); <span style="color:#09f;font-style:italic">/****************文件尾****************/</span> </code></pre></div> <p>全部脚本见<a href="http://code.google.com/p/js-thu-cal-outputer/">http://code.google.com/p/js-thu-cal-outputer/</a></p> Hello Again~ https://blog.heysh.xyz/2012/06/22/hello-again/ Fri, 22 Jun 2012 07:15:48 +0000 https://blog.heysh.xyz/2012/06/22/hello-again/ <blockquote> <p>国内的免费主机始终是不靠谱的啊……</p> <p>——以上为结论</p> </blockquote> <p>由于这样那样的原因,上一个博客化为了*时代的眼泪*,确切的说是*全灭*。于是,这里作为博客No.3,希望大家(?)——,……</p> <p>算了还是看看这里能坚持到什么时候比较好。</p> <p>又及:博客搭建在redhat openshift服务上,应该是比某些30天一续期的主机好得多。</p> <p>updated 2012-6-25:openshift虽然不会发生清空数据库的惨剧,不过这速度也……</p> <blockquote> <p>administrator@ubuntu:~\$ ping wp-heysh.rhcloud.com<br /> PING ec2-50-19-68-176.compute-1.amazonaws.com (50.19.68.176) 56(84) bytes of data.<br /> 64 bytes from ec2-50-19-68-176.compute-1.amazonaws.com (50.19.68.176): icmp_req=1 ttl=44 time=429 ms<br /> 64 bytes from ec2-50-19-68-176.compute-1.amazonaws.com (50.19.68.176): icmp_req=2 ttl=44 time=421 ms<br /> 64 bytes from ec2-50-19-68-176.compute-1.amazonaws.com (50.19.68.176): icmp_req=3 ttl=44 time=427 ms<br /> 64 bytes from ec2-50-19-68-176.compute-1.amazonaws.com (50.19.68.176): icmp_req=4 ttl=44 time=426 ms</p> </blockquote> <p>四百多秒的延迟……果然国内连amazon的主机就是悲剧……</p> <p>希望GFW不要盯上亚马逊啊啊啊啊</p> chicken https://blog.heysh.xyz/feed/chicken/ Fri, 22 Jun 2012 06:32:32 +0000 https://blog.heysh.xyz/feed/chicken/ <p>Nothing here.</p> 关于我 https://blog.heysh.xyz/about/ Fri, 22 Jun 2012 06:32:32 +0000 https://blog.heysh.xyz/about/ <p>下面的介绍大概是2012年留下来的。除了年龄增大之外,我是不是成长了一些呢?</p> <hr /> <p><strong>HeYSH</strong>——贺叶霜,如你所见,是个死宅,正在读帝都的大学,热爱自由,喜欢neta、潜水(论坛意味)、Arch Linux和干一些不务正业的事情。不喜欢M$、不让我看源代码的东西和买不起的东西——顺带一提,我买不起的东西很多,讨厌的事是失去和束缚,<del>兴趣是人体改造和永生的研究。</del>可能有轻微中二病,但是大概不是个坏人。</p> <p>人人的日志里代码会变得很难看,而且“把这些东西发出去的话,大概会被人讨厌的吧”。抱着这样的想法,搭了自己的博客,但是很快就由于备份失误而灰飞烟灭。</p> <p>“啊啊啊这样的话还不如去用Evernote,反正也没人会来看啦”,虽然这么想着,但还是像一个抖M一样重新开始了。</p> <p><a href="http://about.me/heyeshuang">http://about.me/heyeshuang</a> &lt;–大概这样可以联系到我的样子……  </p> <p>另外,到了晚上会变得很奇怪,请勿投喂谢谢</p> <p>update 130525:修改语病,主要是把逗号改成句号</p> <p>update 131004:最近对衬线体产生了浓厚的兴趣,另外,发现大小写是有区别的</p>