<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0">
  <channel>
    <title>Kailai.me</title>
    <link>http://kailai.me</link>
    <description>开来的主页</description>
    
      <item>
        <title>利用 iptables 实现端口转发代理</title>
        <link>http://kailai.me/2015/11/24/setup-proxy-using-iptables.html</link>
        <guid isPermaLink="true">http://kailai.me/2015/11/24/setup-proxy-using-iptables.html</guid>
        <pubDate>Tue, 24 Nov 2015 00:00:00 +0000</pubDate>
        <description>&lt;p&gt;将1.1.1.1:123作为代理服务器，转发往来于2.2.2.2:456的连接，操作为：&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;sudo iptables -t nat -A PREROUTING -d 1.1.1.1 -p tcp --dport 123 -j DNAT --to-destination 2.2.2.2:456
sudo iptables -t nat -A POSTROUTING -d 2.2.2.2 -p tcp --dport 456 -j SNAT --to 1.1.1.1
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;设置后，可以通过以下命令查看是否生效&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;sudo iptables -t nat –L
&lt;/code&gt;&lt;/pre&gt;
</description>
      </item>
    
      <item>
        <title>当前目录快速建立临时 HTTP 服务</title>
        <link>http://kailai.me/2015/10/31/deploy-http-server.html</link>
        <guid isPermaLink="true">http://kailai.me/2015/10/31/deploy-http-server.html</guid>
        <pubDate>Sat, 31 Oct 2015 00:00:00 +0000</pubDate>
        <description>&lt;pre&gt;&lt;code&gt;python -m SimpleHTTPServer 8000
&lt;/code&gt;&lt;/pre&gt;
</description>
      </item>
    
      <item>
        <title>fish 下使用 jenv</title>
        <link>http://kailai.me/2015/08/19/use-jenv-in-fish.html</link>
        <guid isPermaLink="true">http://kailai.me/2015/08/19/use-jenv-in-fish.html</guid>
        <pubDate>Wed, 19 Aug 2015 00:00:00 +0000</pubDate>
        <description>&lt;p&gt;jenv是在shell中切换Java版本的命令行工具，在2014-03-22技巧中提到了bash下使用方法。&lt;br /&gt;
但是jenv对fish-shell的支持并不好。配置方法如下。&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;brew upgrade fish //2.2的fish自带export函数，jenv需要
brew install jenv
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;添加 &lt;code&gt;set PATH ~/.jenv/bin $PATH&lt;/code&gt; 到 &lt;code&gt;~/.conf/fish/config.sh&lt;/code&gt;&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;cd ~/.conf/fish
mkdir functions
cd functions
wget https://raw.githubusercontent.com/gcuisinier/jenv/master/fish/jenv.fish
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;重启fish-shell&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;functions //检查jenv是否在函数列表中
jenv add /path/to/java1.6/home
jenv add /path/to/java1.7/home
jenv add /path/to/java1.8/home
jenv versions //查看所有版本
jenv global 1.6
java -version //1.6
jenv global 1.7
java -version //1.7
jenv global 1.8
java -version //1.8
&lt;/code&gt;&lt;/pre&gt;
</description>
      </item>
    
      <item>
        <title>Cygwin 下架设 ssh-server 的若干问题</title>
        <link>http://kailai.me/2015/08/09/setup-sshd-in-cygwin.html</link>
        <guid isPermaLink="true">http://kailai.me/2015/08/09/setup-sshd-in-cygwin.html</guid>
        <pubDate>Sun, 09 Aug 2015 00:00:00 +0000</pubDate>
        <description>&lt;p&gt;Cygwin下开启sshd不像Debian下开箱即用，问题一堆，逐个解决，记录之。&lt;/p&gt;

&lt;p&gt;配置sshd：&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;ssh-host-config
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;若出现&lt;code&gt;Cannot find required command /usr/bin/getent&lt;/code&gt;，用pact安装getent&lt;/p&gt;

&lt;p&gt;若出现&lt;code&gt;The permissions on the directory /var are not correct.&lt;/code&gt;，将/var的访问权限设为755&lt;/p&gt;

&lt;p&gt;两个选项：&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;Should StrictModes be used? (yes/no) yes
Should privilege separation be used? (yes/no) no
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;完成后，&lt;code&gt;net start sshd&lt;/code&gt;启动后台服务。&lt;/p&gt;

&lt;p&gt;若失败，从&lt;code&gt;/var/log/sshd.log&lt;/code&gt;中找错误信息&lt;/p&gt;

&lt;p&gt;若错误信息中出现&lt;code&gt;Could not load host key: /etc/ssh_host_ooxx_ooxx&lt;/code&gt;，多半是权限问题，通过以下命令设置正确权限&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;chown cyg_server /etc/ssh*
chmod 600 /etc/ssh*
&lt;/code&gt;&lt;/pre&gt;
</description>
      </item>
    
      <item>
        <title>fish shell 下添加变量</title>
        <link>http://kailai.me/2015/08/05/set-variable-in-fish-shell.html</link>
        <guid isPermaLink="true">http://kailai.me/2015/08/05/set-variable-in-fish-shell.html</guid>
        <pubDate>Wed, 05 Aug 2015 00:00:00 +0000</pubDate>
        <description>&lt;pre&gt;&lt;code&gt;$ touch ~/.config/fish/config.fish
$ echo &quot;set -gx PATH \$PATH &amp;lt;path&amp;gt;&quot; &amp;gt;&amp;gt; ~/.config/fish/config.fish
&lt;/code&gt;&lt;/pre&gt;
</description>
      </item>
    
      <item>
        <title>Ubuntu 本地语言问题快速修复</title>
        <link>http://kailai.me/2015/06/16/fix-ubuntu-language-probrom.html</link>
        <guid isPermaLink="true">http://kailai.me/2015/06/16/fix-ubuntu-language-probrom.html</guid>
        <pubDate>Tue, 16 Jun 2015 00:00:00 +0000</pubDate>
        <description>&lt;pre&gt;&lt;code&gt;sudo apt-get --reinstall install language-pack-en
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;世界清静了。&lt;/p&gt;
</description>
      </item>
    
      <item>
        <title>Trac 安装备忘录</title>
        <link>http://kailai.me/2015/06/05/trac-installation-note.html</link>
        <guid isPermaLink="true">http://kailai.me/2015/06/05/trac-installation-note.html</guid>
        <pubDate>Fri, 05 Jun 2015 00:00:00 +0000</pubDate>
        <description>&lt;ol&gt;
  &lt;li&gt;&lt;code&gt;Babel&lt;/code&gt;版本必须为&lt;code&gt;0.9.6&lt;/code&gt;，高版本会导致多国语言功能不可用，血的教训。‘pip install -v Babel==0.9.6`&lt;/li&gt;
  &lt;li&gt;安装插件后需要更新数据库结构，操作为&lt;code&gt;trac-admin path/to/trac/ upgrade&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;刷新数据库后任然报错，则重启Apache2服务&lt;/li&gt;
&lt;/ol&gt;
</description>
      </item>
    
      <item>
        <title>非越狱 iOS 科学上网总结</title>
        <link>http://kailai.me/2015/05/17/fanqiang-on-ios.html</link>
        <guid isPermaLink="true">http://kailai.me/2015/05/17/fanqiang-on-ios.html</guid>
        <pubDate>Sun, 17 May 2015 00:00:00 +0000</pubDate>
        <description>&lt;p&gt;在不越狱的情况下，iOS无法实现Android般完美的科学上网，以下方式有各自的优缺点。&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;Shadowsocks.app，直接从App Store安装。优点，简单方便，可同时用于WiFi模式和4G模式；缺点，需要自建Shadowsocks服务器，只能在应用内科学上网。&lt;/li&gt;
  &lt;li&gt;利用pac。优点，简单方便；缺点，只有WiFi下支持pac，需要自己部署服务器或使用曲径等付费服务。&lt;/li&gt;
  &lt;li&gt;结合Shadowsocks.app和pac。优点，能部分地实现所有app科学上网；缺点，限制很大，不越狱的情况下，Shadowsocks.app只能在后台保持几分钟。&lt;/li&gt;
  &lt;li&gt;路由器端科学上网。优点，对iOS设备来说透明；缺点，只适用于WiFi模式&lt;/li&gt;
  &lt;li&gt;Android设备和iOS设备同时连接到一个热点，Android设备通过fqrouter2科学上网，并将pac分享给iOS使用。相比方法2、3，优点，实现简单；缺点，只适用于WiFi模式，需要随时携带Android设备。。。&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;个别典型应用，可以用一些特定的方法实现科学上网。&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;Gmail或Google Apps的邮箱功能，可通过CloudMagic或者Mailbox中转。推荐前者，中国区App Store有售，个人感觉体验比后者好。&lt;/li&gt;
  &lt;li&gt;Gmail通信录，可以通过App Store上一大堆同步Gmail通信录和iCloud通信录的app实现。&lt;/li&gt;
  &lt;li&gt;Google Calendar和Task，已弃，转投iCloud。OS X和iOS下的Fantastical很好用，Android设备下可通过CalDAV-Sync和JB Workaround实现iCloud日程历的同步更新，不过操作神烦，我不会去部署第二次了。&lt;/li&gt;
&lt;/ol&gt;
</description>
      </item>
    
      <item>
        <title>发现某知名 P2P 网贷平台交易漏洞一枚</title>
        <link>http://kailai.me/2015/05/03/p2p-bug-found.html</link>
        <guid isPermaLink="true">http://kailai.me/2015/05/03/p2p-bug-found.html</guid>
        <pubDate>Sun, 03 May 2015 00:00:00 +0000</pubDate>
        <description>&lt;pre&gt;&lt;code&gt;javascript:lender.fastLend($(&quot;dd.wd300%20&amp;gt;%20h3%20&amp;gt;%20a&quot;).attr(&quot;href&quot;).split(&#39;=&#39;)[1].split(&#39;&amp;amp;&#39;)[0],%20&#39;new&#39;);
&lt;/code&gt;&lt;/pre&gt;
</description>
      </item>
    
      <item>
        <title>SQL查询语句执行顺序</title>
        <link>http://kailai.me/2015/04/28/sql-select-order.html</link>
        <guid isPermaLink="true">http://kailai.me/2015/04/28/sql-select-order.html</guid>
        <pubDate>Tue, 28 Apr 2015 00:00:00 +0000</pubDate>
        <description>&lt;p&gt;感觉很重要，为什么看了那么多讲解MySQL的书都没有提到？记录下来。&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;(7)     SELECT 
(8)     DISTINCT &amp;lt;select_list&amp;gt;
(1)     FROM &amp;lt;left_table&amp;gt;
(3)     &amp;lt;join_type&amp;gt; JOIN &amp;lt;right_table&amp;gt;
(2)     ON &amp;lt;join_condition&amp;gt;
(4)     WHERE &amp;lt;where_condition&amp;gt;
(5)     GROUP BY &amp;lt;group_by_list&amp;gt;
(6)     HAVING &amp;lt;having_condition&amp;gt;
(9)    ORDER BY &amp;lt;order_by_condition&amp;gt;
(10)    LIMIT &amp;lt;limit_number&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
</description>
      </item>
    
      <item>
        <title>Alfred 获取 Homebrew Cask 安装软件索引</title>
        <link>http://kailai.me/2015/04/08/add-cask-installed-apps-to-alfred.html</link>
        <guid isPermaLink="true">http://kailai.me/2015/04/08/add-cask-installed-apps-to-alfred.html</guid>
        <pubDate>Wed, 08 Apr 2015 00:00:00 +0000</pubDate>
        <description>&lt;p&gt;默认情况下，用Homebrew Cask安装的软件不在Alfred的启动器索引里。&lt;/p&gt;

&lt;p&gt;将&lt;code&gt;~/Applications&lt;/code&gt;目录添加到索引，并同时添加“文件类型：软连接”到文件类型列表里，也同样解决不了问题。&lt;/p&gt;

&lt;p&gt;我的解决方案是把&lt;code&gt;/opt/homebrew-cask/Caskroom&lt;/code&gt;添加到索引列表，不知道有没有更加优雅的方式。&lt;/p&gt;
</description>
      </item>
    
      <item>
        <title>Vagrant 部署数据库</title>
        <link>http://kailai.me/2015/03/27/deploy-database-using-vagrant.html</link>
        <guid isPermaLink="true">http://kailai.me/2015/03/27/deploy-database-using-vagrant.html</guid>
        <pubDate>Fri, 27 Mar 2015 00:00:00 +0000</pubDate>
        <description>&lt;p&gt;内存大的好处是可以开好多个虚拟机，让宿主机保持保持干净整洁。&lt;/p&gt;

&lt;h2 id=&quot;vagrant&quot;&gt;Vagrant部署虚拟机&lt;/h2&gt;

&lt;pre&gt;&lt;code&gt;mkdir MySQL
cd MySQL
vagrant init ubuntu/trusty64
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;修改&lt;code&gt;Vagrantfile&lt;/code&gt;，增加&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;config.vm.network :forwarded_port, guest: 22, host: 20022
config.vm.network :forwarded_port, guest: 80, host: 20080
config.vm.network :forwarded_port, guest: 3306, host: 23306
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;到配置段&lt;/p&gt;

&lt;h2 id=&quot;mysql&quot;&gt;安装、配置MySQL&lt;/h2&gt;

&lt;pre&gt;&lt;code&gt;vagrant up
vagrant ssh
sudo tasksel
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;在tasksel里安装LAMP，并设置数据库root密码。&lt;/p&gt;

&lt;p&gt;接下来编辑&lt;code&gt;/etc/mysql/my.cnf&lt;/code&gt;，将&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;bind-address          = 127.0.0.1
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;注释掉，以允许外部IP连入。&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;mysql -uroot -p
GRANT ALL PRIVILEGES ON *.* TO &#39;root&#39;@&#39;%&#39; IDENTIFIED BY &#39;my77r55r00tpw&#39; WITH GRANT OPTION;
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;上面两句是在MySQL里给root用户外部连入的授权。&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;sudo service mysql stop
sudo service mysql start
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;重启服务使生效。&lt;/p&gt;

&lt;h2 id=&quot;section&quot;&gt;使用&lt;/h2&gt;

&lt;p&gt;在宿主机Navicat里，用root用户连&lt;code&gt;localhost:23306&lt;/code&gt;，开始使用。&lt;/p&gt;

</description>
      </item>
    
      <item>
        <title>Mac OSX 下不同版本的 JDK 管理</title>
        <link>http://kailai.me/2015/03/22/jdk-switch-in-mac-osx.html</link>
        <guid isPermaLink="true">http://kailai.me/2015/03/22/jdk-switch-in-mac-osx.html</guid>
        <pubDate>Sun, 22 Mar 2015 00:00:00 +0000</pubDate>
        <description>&lt;p&gt;为了看JDK1.8源码，往系统中装了多个不同版本的JDK。这里对Mac OSX下的JDK安装情况和切换方法做一下记录。&lt;/p&gt;

&lt;p&gt;10.9之后的Mac OSX自带了JDK1.6，安装在&lt;code&gt;/System&lt;/code&gt;目录下&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/`
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;自己从Oracle下载的JDK1.7、1.8会被安装到&lt;code&gt;/Library&lt;/code&gt;目录&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;/Library/Java/JavaVirtualMachines/...
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;切换JDK，通常的做法是&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;export JAVA_HOME=JDK目录/Contents/Home
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;在Github上发现了一个叫Jenv的工具，可以方便切换不同版本JDK。&lt;/p&gt;

&lt;p&gt;安装：&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;brew install jenv
echo &#39;export PATH=&quot;$HOME/.jenv/bin:$PATH&quot;&#39; &amp;gt;&amp;gt; ~/.bash_profile
echo &#39;eval &quot;$(jenv init -)&quot;&#39; &amp;gt;&amp;gt; ~/.bash_profile
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;添加JDK：&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;jenv add /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home
jenv add /Library/Java/JavaVirtualMachines/jdk1.7.0_75.jdk/Contents/Home/
jenv add /Library/Java/JavaVirtualMachines/jdk1.8.0_40.jdk/Contents/Home/
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;列举所有JDK：&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;jenv versions
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;切换JDK：&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;jenv global 1.6
jenv global 1.7
jenv global 1.8
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;&lt;a href=&quot;http://www.jenv.be/&quot;&gt;more&lt;/a&gt;&lt;/p&gt;
</description>
      </item>
    
      <item>
        <title>Mac OSX 下 Win7 虚拟机免密登陆</title>
        <link>http://kailai.me/2015/03/20/no-password-login-in-win7.html</link>
        <guid isPermaLink="true">http://kailai.me/2015/03/20/no-password-login-in-win7.html</guid>
        <pubDate>Fri, 20 Mar 2015 00:00:00 +0000</pubDate>
        <description>&lt;p&gt;Parallels Desktop虚拟机设计得很人性化，默认配置了文件系统与操作的诸多共享，将宿主Mac系统与Win虚拟机打通，无缝切换。&lt;/p&gt;

&lt;p&gt;有一个略显麻烦的地方，当虚拟机自动启动时，需要用户输入密码。可以通过在Win7中设置免密登陆去除这个过程。&lt;/p&gt;

&lt;p&gt;开始菜单搜索栏输入&lt;code&gt;netplwiz&lt;/code&gt;，弹出高级用户账户对话框，去除“要使用本机，用户需输入用户名和密码”的勾选，批准UAC提权，完成。&lt;/p&gt;
</description>
      </item>
    
      <item>
        <title>解决 Mac 下 mysql 启动报错</title>
        <link>http://kailai.me/2015/02/17/solve-mysql-startup-problem-on-macosx.html</link>
        <guid isPermaLink="true">http://kailai.me/2015/02/17/solve-mysql-startup-problem-on-macosx.html</guid>
        <pubDate>Tue, 17 Feb 2015 00:00:00 +0000</pubDate>
        <description>&lt;p&gt;homebrew安装mysql后，启动方式为&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;mysql.server start
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;若出现&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;. ERROR! The server quit without updating PID file (/usr/local/var/mysql/Kailai-MacBookPro.local.pid).
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;的错误，删除&lt;code&gt;/usr/local/var/mysql&lt;/code&gt;下的err文件，再重试。&lt;/p&gt;
</description>
      </item>
    
      <item>
        <title>Firefox 中修改书签栏图标间距</title>
        <link>http://kailai.me/2015/02/09/modify-firefox-bookmark-icon-margin.html</link>
        <guid isPermaLink="true">http://kailai.me/2015/02/09/modify-firefox-bookmark-icon-margin.html</guid>
        <pubDate>Mon, 09 Feb 2015 00:00:00 +0000</pubDate>
        <description>&lt;p&gt;相比Win/Linux下的Firefox，Mac OS X下版本的书签栏图标间的间距更大。可以通过修改userChrome.css调整间距&lt;/p&gt;

&lt;p&gt;修改&lt;code&gt;userChrome.css&lt;/code&gt;文件，添加：&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;.bookmark-item {margin:0 !important;padding:0 !important;}
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;根据需要调整&lt;code&gt;margin&lt;/code&gt;和&lt;code&gt;padding&lt;/code&gt;的值，就可以达到所需的效果。 &lt;/p&gt;
</description>
      </item>
    
      <item>
        <title>用 HSDB 探索 HotSpot 运行时数据</title>
        <link>http://kailai.me/2015/01/19/explore-hotspot-using-hsdb.html</link>
        <guid isPermaLink="true">http://kailai.me/2015/01/19/explore-hotspot-using-hsdb.html</guid>
        <pubDate>Mon, 19 Jan 2015 00:00:00 +0000</pubDate>
        <description>&lt;p&gt;用jdb或者IntelliJ Idea的调试器暂停程序&lt;/p&gt;

&lt;p&gt;打开HSDB，注意权限&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;sudo java -cp /Library/Java/JavaVirtualMachines/jdk1.7.0_71.jdk/Contents/Home/lib/sa-jdi.jar sun.jvm.hotspot.HSDB
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;在活动监视器中查看程序PID，File -&amp;gt; Attach to HotSpot Process，输入PID，attach上。&lt;/p&gt;
</description>
      </item>
    
      <item>
        <title>fish 下使用 rvm</title>
        <link>http://kailai.me/2015/01/18/use-rvm-under-fish.html</link>
        <guid isPermaLink="true">http://kailai.me/2015/01/18/use-rvm-under-fish.html</guid>
        <pubDate>Sun, 18 Jan 2015 00:00:00 +0000</pubDate>
        <description>&lt;p&gt;由于fish不兼容bash中&lt;code&gt;expoet&lt;/code&gt;、&lt;code&gt;alias&lt;/code&gt;的用法，默认不会执行&lt;code&gt;.bashrc&lt;/code&gt;、&lt;code&gt;.bash_profile&lt;/code&gt;等文件，所以rvm在fish下默认不生效。&lt;/p&gt;

&lt;p&gt;通过以下办法解决&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;curl -L --create-dirs -o ~/.config/fish/functions/rvm.fish https://raw.github.com/lunks/fish-nuggets/master/functions/rvm.fish
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;fish启动时会自动加载配置目录中的&lt;code&gt;config.fish&lt;/code&gt;和子目录&lt;code&gt;functions&lt;/code&gt;下的文件。&lt;code&gt;rvm.fish&lt;/code&gt;实现了rvm的环境配置。&lt;/p&gt;

&lt;p&gt;另外，安装rvm需要在bash下进行，fish下安装rvm会报错。&lt;/p&gt;

</description>
      </item>
    
      <item>
        <title>Launchpad 中直接打开 iPhone 模拟器</title>
        <link>http://kailai.me/2015/01/17/iphone-simulator.html</link>
        <guid isPermaLink="true">http://kailai.me/2015/01/17/iphone-simulator.html</guid>
        <pubDate>Sat, 17 Jan 2015 00:00:00 +0000</pubDate>
        <description>&lt;p&gt;在&lt;code&gt;/Applications&lt;/code&gt;目录运行&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;ln -s &quot;/Applications/Xcode.app/Contents/Developer/Applications/iOS Simulator.app&quot;
&lt;/code&gt;&lt;/pre&gt;
</description>
      </item>
    
      <item>
        <title>利用 Chrome 运行 Android 应用</title>
        <link>http://kailai.me/2015/01/16/run-android-apps-in-chrome.html</link>
        <guid isPermaLink="true">http://kailai.me/2015/01/16/run-android-apps-in-chrome.html</guid>
        <pubDate>Fri, 16 Jan 2015 00:00:00 +0000</pubDate>
        <description>&lt;p&gt;在2014年的Google IO上，Google宣布Chrome OS平台可以运行Android应用了。但其实，不在Chrome OS上，只要有Chrome浏览器，也能达到相同的效果。&lt;/p&gt;

&lt;p&gt;假如需要一个够方便的轻量级Android虚拟机，Chrome是个不错的选择。&lt;/p&gt;

&lt;p&gt;具体步骤为&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;安装Chrome，版本必须高于37。&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;去&lt;a href=&quot;https://github.com/vladikoff/chromeos-apk/blob/master/archon.md&quot;&gt;这里&lt;/a&gt;下载ARChon，这是一个apk在Chrome上的运行时环境。&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;在Chrome的扩展页面，勾选开发者模式，点击“加载正在开发的扩展程序”加载ARChon。&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;按照&lt;a href=&quot;https://github.com/vladikoff/chromeos-apk/blob/master/README.md&quot;&gt;这里&lt;/a&gt;的教程安装chromeos-apk工具。&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;下载要安装的程序的apk，用chromeos-apk转换成Chrome扩展。以“静读天下”为例&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;终端执行&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;chromeos-apk 静读天下-Moon-Reader-Pro-3.0.3.apk
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;若出现以下提示，说明转换成功&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;Directory &quot; com.flyersoft.moonreaderp.android &quot; created. Copy that directory onto your Chromebook and use &quot;Load unpacked extension&quot; to load the application.
&lt;/code&gt;&lt;/pre&gt;

&lt;ul&gt;
  &lt;li&gt;在Chrome的扩展页面，点击“加载正在开发的扩展程序”加载刚刚转换出来的扩展。这里有个小技巧，一些情况下会出现报错，提示&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
  &lt;p&gt;无法加载以下来源的扩展程序： ~/bin/chrome.extensions/com.flyersoft.moonreaderp.android&lt;br /&gt;
There is no “message” element for key extName.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;这时候打开&lt;code&gt;path/to/extensions/_locales/en/messages.json&lt;/code&gt;，将&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;&quot;extName&quot;: {
  &quot;description&quot;: &quot;Extension name&quot;,
}
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;改为&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;&quot;extName&quot;: {
  &quot;description&quot;: &quot;Extension name&quot;,
  &quot;message&quot;: &quot;静读天下&quot;
}
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;再在Chrome扩展页面点“重试”即可解决问题。&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;安装完成后，直接从Launchpad就可以打开应用。运行效果如下图所示&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;img src=&quot;/public/attachment/Snip20150117_9.png&quot; alt=&quot;静读天下&quot; /&gt;&lt;/p&gt;
</description>
      </item>
    
  </channel>
</rss>